From e3dcd7b65003e8021540429bd654e1bffdc4cfc5 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 1 Mar 2023 17:35:27 +0000 Subject: [PATCH 001/103] fix: expose pallet xcm storage --- runtime/common/construct_runtime.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/common/construct_runtime.rs b/runtime/common/construct_runtime.rs index 40f8f1d50b..33273e1537 100644 --- a/runtime/common/construct_runtime.rs +++ b/runtime/common/construct_runtime.rs @@ -61,7 +61,7 @@ macro_rules! construct_runtime { // XCM helpers. XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 50, - PolkadotXcm: pallet_xcm::{Pallet, Call, Event, Origin} = 51, + PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin} = 51, CumulusXcm: cumulus_pallet_xcm::{Pallet, Call, Event, Origin} = 52, DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 53, From c1c7c7afa3b8d136a5d089761357dc5b046c440a Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 1 Mar 2023 18:01:22 +0000 Subject: [PATCH 002/103] fix: set pallet xcm as response handler --- runtime/common/config/xcm/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/common/config/xcm/mod.rs b/runtime/common/config/xcm/mod.rs index 872db23415..247519dc76 100644 --- a/runtime/common/config/xcm/mod.rs +++ b/runtime/common/config/xcm/mod.rs @@ -221,7 +221,7 @@ where type Barrier = Barrier; type Weigher = Weigher; type Trader = Trader; - type ResponseHandler = (); // Don't handle responses for now. + type ResponseHandler = PolkadotXcm; type SubscriptionService = PolkadotXcm; type AssetTrap = PolkadotXcm; From 0e80f0035f5ade24d3ccc8222566497386fb909f Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Thu, 2 Mar 2023 09:37:06 +0000 Subject: [PATCH 003/103] fix: expose Aura storage --- runtime/common/construct_runtime.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/common/construct_runtime.rs b/runtime/common/construct_runtime.rs index 33273e1537..f5018459c6 100644 --- a/runtime/common/construct_runtime.rs +++ b/runtime/common/construct_runtime.rs @@ -38,7 +38,7 @@ macro_rules! construct_runtime { #[cfg(feature = "collator-selection")] Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 24, - Aura: pallet_aura::{Pallet, Config} = 25, + Aura: pallet_aura::{Pallet, Storage, Config} = 25, AuraExt: cumulus_pallet_aura_ext::{Pallet, Config} = 26, Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 30, From 357016e987dba105c6dea30c3fb0a66b856740f6 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Thu, 2 Mar 2023 10:35:35 +0000 Subject: [PATCH 004/103] fix: expose AuraExt storage --- runtime/common/construct_runtime.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/common/construct_runtime.rs b/runtime/common/construct_runtime.rs index f5018459c6..7208460feb 100644 --- a/runtime/common/construct_runtime.rs +++ b/runtime/common/construct_runtime.rs @@ -39,7 +39,7 @@ macro_rules! construct_runtime { Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 24, Aura: pallet_aura::{Pallet, Storage, Config} = 25, - AuraExt: cumulus_pallet_aura_ext::{Pallet, Config} = 26, + AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 26, Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 30, RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Storage} = 31, From 0595f0d3e1c9da859e9382d7d6e9e4ba0f8a8050 Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Tue, 7 Mar 2023 12:29:52 +0000 Subject: [PATCH 005/103] feat: implement ERC721 `getApproved` for NFT. --- pallets/nonfungible/src/erc.rs | 11 ++++++++--- pallets/nonfungible/src/lib.rs | 12 ++++++++++++ tests/src/eth/nonFungible.test.ts | 22 ++++++++++++++++++++++ 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/pallets/nonfungible/src/erc.rs b/pallets/nonfungible/src/erc.rs index 17664b3522..130c481e98 100644 --- a/pallets/nonfungible/src/erc.rs +++ b/pallets/nonfungible/src/erc.rs @@ -516,9 +516,14 @@ impl NonfungibleHandle { } /// @dev Not implemented - fn get_approved(&self, _token_id: U256) -> Result
{ - // TODO: Not implemetable - Err("not implemented".into()) + fn get_approved(&self, token_id: U256) -> Result
{ + let token = token_id.try_into()?; + let operator = >::get_allowance(self, token).map_err(dispatch_to_evm::)?; + Ok(if let Some(operator) = operator { + *operator.as_eth() + } else { + Address::zero() + }) } /// @notice Tells whether the given `owner` approves the `operator`. diff --git a/pallets/nonfungible/src/lib.rs b/pallets/nonfungible/src/lib.rs index d33d7c48c8..12d2dc2e38 100644 --- a/pallets/nonfungible/src/lib.rs +++ b/pallets/nonfungible/src/lib.rs @@ -1083,6 +1083,18 @@ impl Pallet { } } + pub fn get_allowance( + collection: &NonfungibleHandle, + token: TokenId, + ) -> Result, DispatchError> { + ensure! { + >::iter_keys().find( + |(c, t)| return *c == collection.id && *t == token).is_some() + ,>::TokenNotFound + }; + Ok(>::get((collection.id, token))) + } + /// Set allowance for the spender to `transfer` or `burn` sender's token. /// /// - `token`: Token the spender is allowed to `transfer` or `burn`. diff --git a/tests/src/eth/nonFungible.test.ts b/tests/src/eth/nonFungible.test.ts index e887be0c38..a5aa725537 100644 --- a/tests/src/eth/nonFungible.test.ts +++ b/tests/src/eth/nonFungible.test.ts @@ -240,6 +240,28 @@ describe('NFT: Plain calls', () => { } }); + itEth('Can perform setApproval()', async ({helper}) => { + const owner = await helper.eth.createAccountWithBalance(donor); + const operator = helper.eth.createAccount(); + + const {collectionAddress} = await helper.eth.createNFTCollection(owner, 'A', 'B', 'C'); + const contract = await helper.ethNativeContract.collection(collectionAddress, 'nft', owner); + + const result = await contract.methods.mint(owner).send({from: owner}); + const tokenId = result.events.Transfer.returnValues.tokenId; + + { + const approved = await contract.methods.getApproved(tokenId).call(); + expect(approved).to.be.equal('0x0000000000000000000000000000000000000000'); + } + await contract.methods.approve(operator, tokenId).send({from: owner}); + { + const approved = await contract.methods.getApproved(tokenId).call(); + expect(approved).to.be.equal(operator); + } + }); + + itEth('Can perform setApprovalForAll()', async ({helper}) => { const owner = await helper.eth.createAccountWithBalance(donor); const operator = helper.eth.createAccount(); From d68299c35c5bd0aec282f29f5388857efc74dea7 Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Thu, 9 Mar 2023 08:07:59 +0000 Subject: [PATCH 006/103] fix: PR --- pallets/nonfungible/src/lib.rs | 3 +-- tests/src/eth/nonFungible.test.ts | 30 ++++++++++-------------------- 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/pallets/nonfungible/src/lib.rs b/pallets/nonfungible/src/lib.rs index 12d2dc2e38..73179a8523 100644 --- a/pallets/nonfungible/src/lib.rs +++ b/pallets/nonfungible/src/lib.rs @@ -1088,8 +1088,7 @@ impl Pallet { token: TokenId, ) -> Result, DispatchError> { ensure! { - >::iter_keys().find( - |(c, t)| return *c == collection.id && *t == token).is_some() + >::get((collection.id, token)).is_some() ,>::TokenNotFound }; Ok(>::get((collection.id, token))) diff --git a/tests/src/eth/nonFungible.test.ts b/tests/src/eth/nonFungible.test.ts index a5aa725537..6972acf942 100644 --- a/tests/src/eth/nonFungible.test.ts +++ b/tests/src/eth/nonFungible.test.ts @@ -219,7 +219,7 @@ describe('NFT: Plain calls', () => { } }); - itEth('Can perform approve()', async ({helper}) => { + itEth.only('Can perform approve()', async ({helper}) => { const owner = await helper.eth.createAccountWithBalance(donor); const spender = helper.eth.createAccount(); @@ -229,6 +229,14 @@ describe('NFT: Plain calls', () => { const collectionAddress = helper.ethAddress.fromCollectionId(collection.collectionId); const contract = await helper.ethNativeContract.collection(collectionAddress, 'nft', owner); + { + const badTokenId = 1234567; + await expect(contract.methods.getApproved(badTokenId).call()).to.be.rejectedWith('revert TokenNotFound'); + } + { + const approved = await contract.methods.getApproved(tokenId).call(); + expect(approved).to.be.equal('0x0000000000000000000000000000000000000000'); + } { const result = await contract.methods.approve(spender, tokenId).send({from: owner}); @@ -238,30 +246,12 @@ describe('NFT: Plain calls', () => { expect(event.returnValues.approved).to.be.equal(spender); expect(event.returnValues.tokenId).to.be.equal(`${tokenId}`); } - }); - - itEth('Can perform setApproval()', async ({helper}) => { - const owner = await helper.eth.createAccountWithBalance(donor); - const operator = helper.eth.createAccount(); - - const {collectionAddress} = await helper.eth.createNFTCollection(owner, 'A', 'B', 'C'); - const contract = await helper.ethNativeContract.collection(collectionAddress, 'nft', owner); - - const result = await contract.methods.mint(owner).send({from: owner}); - const tokenId = result.events.Transfer.returnValues.tokenId; - - { - const approved = await contract.methods.getApproved(tokenId).call(); - expect(approved).to.be.equal('0x0000000000000000000000000000000000000000'); - } - await contract.methods.approve(operator, tokenId).send({from: owner}); { const approved = await contract.methods.getApproved(tokenId).call(); - expect(approved).to.be.equal(operator); + expect(approved).to.be.equal(spender); } }); - itEth('Can perform setApprovalForAll()', async ({helper}) => { const owner = await helper.eth.createAccountWithBalance(donor); const operator = helper.eth.createAccount(); From 112c00635f55ed12f7d224f4585d33984fd62b47 Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Thu, 9 Mar 2023 09:19:40 +0000 Subject: [PATCH 007/103] doc --- pallets/nonfungible/src/erc.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pallets/nonfungible/src/erc.rs b/pallets/nonfungible/src/erc.rs index 130c481e98..d5416a5a51 100644 --- a/pallets/nonfungible/src/erc.rs +++ b/pallets/nonfungible/src/erc.rs @@ -515,7 +515,10 @@ impl NonfungibleHandle { Ok(()) } - /// @dev Not implemented + /// @notice Get the approved address for a single NFT + /// @dev Throws if `_tokenId` is not a valid NFT + /// @param _tokenId The NFT to find the approved address for + /// @return The approved address for this NFT, or the zero address if there is none fn get_approved(&self, token_id: U256) -> Result
{ let token = token_id.try_into()?; let operator = >::get_allowance(self, token).map_err(dispatch_to_evm::)?; From fe92d252231d388b96ccd16bbfa6cd77e80324f4 Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Thu, 9 Mar 2023 09:20:21 +0000 Subject: [PATCH 008/103] fix: doc --- pallets/nonfungible/src/erc.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pallets/nonfungible/src/erc.rs b/pallets/nonfungible/src/erc.rs index d5416a5a51..0b1f501e0b 100644 --- a/pallets/nonfungible/src/erc.rs +++ b/pallets/nonfungible/src/erc.rs @@ -516,8 +516,8 @@ impl NonfungibleHandle { } /// @notice Get the approved address for a single NFT - /// @dev Throws if `_tokenId` is not a valid NFT - /// @param _tokenId The NFT to find the approved address for + /// @dev Throws if `tokenId` is not a valid NFT + /// @param tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none fn get_approved(&self, token_id: U256) -> Result
{ let token = token_id.try_into()?; From 8df8e96cac263857eb9110468153847ebb15950e Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Thu, 9 Mar 2023 09:25:42 +0000 Subject: [PATCH 009/103] fix: PR --- pallets/nonfungible/src/lib.rs | 8 ++++---- tests/src/eth/nonFungible.test.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pallets/nonfungible/src/lib.rs b/pallets/nonfungible/src/lib.rs index 73179a8523..4a52b0751d 100644 --- a/pallets/nonfungible/src/lib.rs +++ b/pallets/nonfungible/src/lib.rs @@ -1087,10 +1087,10 @@ impl Pallet { collection: &NonfungibleHandle, token: TokenId, ) -> Result, DispatchError> { - ensure! { - >::get((collection.id, token)).is_some() - ,>::TokenNotFound - }; + ensure!( + >::get((collection.id, token)).is_some(), + >::TokenNotFound + ); Ok(>::get((collection.id, token))) } diff --git a/tests/src/eth/nonFungible.test.ts b/tests/src/eth/nonFungible.test.ts index 6972acf942..2c6be13469 100644 --- a/tests/src/eth/nonFungible.test.ts +++ b/tests/src/eth/nonFungible.test.ts @@ -219,7 +219,7 @@ describe('NFT: Plain calls', () => { } }); - itEth.only('Can perform approve()', async ({helper}) => { + itEth('Can perform approve()', async ({helper}) => { const owner = await helper.eth.createAccountWithBalance(donor); const spender = helper.eth.createAccount(); From 4537c48f0b6f2cc82fae1772a1f9e9af55ec279b Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 9 Mar 2023 12:11:36 +0100 Subject: [PATCH 010/103] ci: add production profile --- Cargo.toml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 8880165f02..5ac760ffa9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,14 @@ package.version = "0.9.37" resolver = "2" [profile.release] -panic = 'unwind' +# Runtime requires unwinding +panic = "unwind" + +[profile.production] +inherits = "release" +lto = true +codegen-units = 1 +opt-level = "3" [workspace.dependencies] # Unique From c91aad487ca4787ba036891dc436586ed835f2fc Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 9 Mar 2023 14:24:04 +0100 Subject: [PATCH 011/103] ci: fix opt-level --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 5ac760ffa9..cbb5c6140b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ panic = "unwind" inherits = "release" lto = true codegen-units = 1 -opt-level = "3" +opt-level = 3 [workspace.dependencies] # Unique From 7b6dca1f6320ed2720edbfe89527dc9c387b3bc2 Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Fri, 10 Mar 2023 05:56:52 +0000 Subject: [PATCH 012/103] fix: PR --- pallets/nonfungible/src/erc.rs | 4 ++-- pallets/nonfungible/src/lib.rs | 6 +++--- tests/src/eth/nonFungible.test.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pallets/nonfungible/src/erc.rs b/pallets/nonfungible/src/erc.rs index 0b1f501e0b..e214ba8a4b 100644 --- a/pallets/nonfungible/src/erc.rs +++ b/pallets/nonfungible/src/erc.rs @@ -520,8 +520,8 @@ impl NonfungibleHandle { /// @param tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none fn get_approved(&self, token_id: U256) -> Result
{ - let token = token_id.try_into()?; - let operator = >::get_allowance(self, token).map_err(dispatch_to_evm::)?; + let token_id = token_id.try_into()?; + let operator = >::get_allowance(self, token_id).map_err(dispatch_to_evm::)?; Ok(if let Some(operator) = operator { *operator.as_eth() } else { diff --git a/pallets/nonfungible/src/lib.rs b/pallets/nonfungible/src/lib.rs index 4a52b0751d..d9cf487576 100644 --- a/pallets/nonfungible/src/lib.rs +++ b/pallets/nonfungible/src/lib.rs @@ -1085,13 +1085,13 @@ impl Pallet { pub fn get_allowance( collection: &NonfungibleHandle, - token: TokenId, + token_id: TokenId, ) -> Result, DispatchError> { ensure!( - >::get((collection.id, token)).is_some(), + >::get((collection.id, token_id)).is_some(), >::TokenNotFound ); - Ok(>::get((collection.id, token))) + Ok(>::get((collection.id, token_id))) } /// Set allowance for the spender to `transfer` or `burn` sender's token. diff --git a/tests/src/eth/nonFungible.test.ts b/tests/src/eth/nonFungible.test.ts index 2c6be13469..6333d0636a 100644 --- a/tests/src/eth/nonFungible.test.ts +++ b/tests/src/eth/nonFungible.test.ts @@ -230,7 +230,7 @@ describe('NFT: Plain calls', () => { const contract = await helper.ethNativeContract.collection(collectionAddress, 'nft', owner); { - const badTokenId = 1234567; + const badTokenId = await contract.methods.nextTokenId().call() + 1; await expect(contract.methods.getApproved(badTokenId).call()).to.be.rejectedWith('revert TokenNotFound'); } { From 1c910af804ae5da4cbd002454c66a523c4c19d4a Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 10 Mar 2023 12:19:52 +0100 Subject: [PATCH 013/103] build: upgrade to polkadot v0.9.39 --- .maintain/external-weight-template.hbs | 70 + .maintain/frame-weight-template.hbs | 50 +- Cargo.lock | 2139 +++++++++-------- Cargo.toml | 217 +- Makefile | 12 +- README.md | 2 +- client/rpc/src/lib.rs | 10 +- node/cli/src/chain_spec.rs | 6 + node/cli/src/service.rs | 12 +- node/rpc/src/lib.rs | 9 +- pallets/app-promotion/Cargo.toml | 2 +- .../collator-selection/src/benchmarking.rs | 13 +- pallets/collator-selection/src/lib.rs | 4 - pallets/collator-selection/src/mock.rs | 4 +- pallets/common/src/lib.rs | 16 +- pallets/configuration/src/lib.rs | 2 +- pallets/foreign-assets/src/benchmarking.rs | 9 +- pallets/foreign-assets/src/lib.rs | 60 +- pallets/identity/Cargo.toml | 1 + pallets/identity/src/benchmarking.rs | 20 +- pallets/nonfungible/src/lib.rs | 7 +- pallets/nonfungible/src/weights.rs | 410 ---- pallets/refungible/src/benchmarking.rs | 2 +- pallets/refungible/src/lib.rs | 4 +- pallets/scheduler-v2/Cargo.toml | 2 +- primitives/common/src/constants.rs | 2 +- primitives/data-structs/src/lib.rs | 60 +- runtime/common/config/ethereum.rs | 6 + runtime/common/config/orml.rs | 11 +- .../config/pallets/collator_selection.rs | 2 - runtime/common/config/substrate.rs | 2 - runtime/common/config/xcm/foreignassets.rs | 16 +- runtime/common/config/xcm/mod.rs | 72 +- runtime/common/construct_runtime.rs | 140 +- runtime/common/maintenance.rs | 1 - runtime/common/runtime_apis.rs | 13 +- runtime/common/tests/xcm.rs | 26 +- runtime/common/weights.rs | 2 + runtime/common/weights/xcm.rs | 218 ++ runtime/opal/Cargo.toml | 3 - runtime/opal/src/lib.rs | 2 +- runtime/opal/src/xcm_barrier.rs | 5 +- runtime/quartz/Cargo.toml | 3 - runtime/quartz/src/lib.rs | 2 +- runtime/tests/Cargo.toml | 28 +- runtime/tests/src/lib.rs | 5 +- runtime/unique/Cargo.toml | 3 - runtime/unique/src/lib.rs | 2 +- 48 files changed, 1949 insertions(+), 1758 deletions(-) create mode 100644 .maintain/external-weight-template.hbs delete mode 100644 pallets/nonfungible/src/weights.rs create mode 100644 runtime/common/weights/xcm.rs diff --git a/.maintain/external-weight-template.hbs b/.maintain/external-weight-template.hbs new file mode 100644 index 0000000000..639d3777ba --- /dev/null +++ b/.maintain/external-weight-template.hbs @@ -0,0 +1,70 @@ +// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs + +//! Autogenerated weights for {{pallet}} +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}} +//! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: {{cmd.repeat}}, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}` +//! WORST CASE MAP SIZE: `{{cmd.worst_case_map_values}}` +//! EXECUTION: {{cmd.execution}}, WASM-EXECUTION: {{cmd.wasm_execution}}, CHAIN: {{cmd.chain}}, DB CACHE: {{cmd.db_cache}} + +// Executed Command: +{{#each args as |arg|}} +// {{arg}} +{{/each}} + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] +#![allow(clippy::unnecessary_cast)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use sp_std::marker::PhantomData; + +/// Weights for {{pallet}} using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +{{#if (eq pallet "frame_system")}} +impl {{pallet}}::WeightInfo for SubstrateWeight { +{{else}} +impl {{pallet}}::WeightInfo for SubstrateWeight { +{{/if}} + {{#each benchmarks as |benchmark|}} + {{#each benchmark.comments as |comment|}} + /// {{comment}} + {{/each}} + {{#each benchmark.component_ranges as |range|}} + /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. + {{/each}} + fn {{benchmark.name~}} + ( + {{~#each benchmark.components as |c| ~}} + {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} + ) -> Weight { + // Proof Size summary in bytes: + // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds. + Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}}) + {{#each benchmark.component_weight as |cw|}} + // Standard Error: {{underscore cw.error}} + .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into())) + {{/each}} + {{#if (ne benchmark.base_reads "0")}} + .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64)) + {{/if}} + {{#each benchmark.component_reads as |cr|}} + .saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) + {{/each}} + {{#if (ne benchmark.base_writes "0")}} + .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64)) + {{/if}} + {{#each benchmark.component_writes as |cw|}} + .saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) + {{/each}} + {{#each benchmark.component_calculated_proof_size as |cp|}} + .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) + {{/each}} + } + {{/each}} +} + diff --git a/.maintain/frame-weight-template.hbs b/.maintain/frame-weight-template.hbs index e6ce89a0b1..58d5c1c5bd 100644 --- a/.maintain/frame-weight-template.hbs +++ b/.maintain/frame-weight-template.hbs @@ -4,6 +4,7 @@ //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}} //! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: {{cmd.repeat}}, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}` +//! WORST CASE MAP SIZE: `{{cmd.worst_case_map_values}}` //! EXECUTION: {{cmd.execution}}, WASM-EXECUTION: {{cmd.wasm_execution}}, CHAIN: {{cmd.chain}}, DB CACHE: {{cmd.db_cache}} // Executed Command: @@ -40,29 +41,39 @@ impl WeightInfo for SubstrateWeight { {{/if}} {{#each benchmarks as |benchmark|}} {{#each benchmark.comments as |comment|}} - // {{comment}} + /// {{comment}} + {{/each}} + {{#each benchmark.component_ranges as |range|}} + /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. {{/each}} fn {{benchmark.name~}} ( {{~#each benchmark.components as |c| ~}} {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} ) -> Weight { - Weight::from_ref_time({{underscore benchmark.base_weight}} as u64) + // Proof Size summary in bytes: + // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds. + Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}}) {{#each benchmark.component_weight as |cw|}} // Standard Error: {{underscore cw.error}} - .saturating_add(Weight::from_ref_time({{underscore cw.slope}} as u64).saturating_mul({{cw.name}} as u64)) + .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into())) {{/each}} {{#if (ne benchmark.base_reads "0")}} - .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}} as u64)) + .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64)) {{/if}} {{#each benchmark.component_reads as |cr|}} - .saturating_add(T::DbWeight::get().reads(({{cr.slope}} as u64).saturating_mul({{cr.name}} as u64))) + .saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) {{/each}} {{#if (ne benchmark.base_writes "0")}} - .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}} as u64)) + .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64)) {{/if}} {{#each benchmark.component_writes as |cw|}} - .saturating_add(T::DbWeight::get().writes(({{cw.slope}} as u64).saturating_mul({{cw.name}} as u64))) + .saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) + {{/each}} + {{#each benchmark.component_calculated_proof_size as |cp|}} + .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) {{/each}} } {{/each}} @@ -72,30 +83,41 @@ impl WeightInfo for SubstrateWeight { impl WeightInfo for () { {{#each benchmarks as |benchmark|}} {{#each benchmark.comments as |comment|}} - // {{comment}} + /// {{comment}} + {{/each}} + {{#each benchmark.component_ranges as |range|}} + /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. {{/each}} fn {{benchmark.name~}} ( {{~#each benchmark.components as |c| ~}} {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} ) -> Weight { - Weight::from_ref_time({{underscore benchmark.base_weight}} as u64) + // Proof Size summary in bytes: + // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds. + Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}}) {{#each benchmark.component_weight as |cw|}} // Standard Error: {{underscore cw.error}} - .saturating_add(Weight::from_ref_time({{underscore cw.slope}} as u64).saturating_mul({{cw.name}} as u64)) + .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into())) {{/each}} {{#if (ne benchmark.base_reads "0")}} - .saturating_add(RocksDbWeight::get().reads({{benchmark.base_reads}} as u64)) + .saturating_add(RocksDbWeight::get().reads({{benchmark.base_reads}}_u64)) {{/if}} {{#each benchmark.component_reads as |cr|}} - .saturating_add(RocksDbWeight::get().reads(({{cr.slope}} as u64).saturating_mul({{cr.name}} as u64))) + .saturating_add(RocksDbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) {{/each}} {{#if (ne benchmark.base_writes "0")}} - .saturating_add(RocksDbWeight::get().writes({{benchmark.base_writes}} as u64)) + .saturating_add(RocksDbWeight::get().writes({{benchmark.base_writes}}_u64)) {{/if}} {{#each benchmark.component_writes as |cw|}} - .saturating_add(RocksDbWeight::get().writes(({{cw.slope}} as u64).saturating_mul({{cw.name}} as u64))) + .saturating_add(RocksDbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) + {{/each}} + {{#each benchmark.component_calculated_proof_size as |cp|}} + .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) {{/each}} } {{/each}} } + diff --git a/Cargo.lock b/Cargo.lock index 6a07c24e90..218dd78ef2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -27,7 +27,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ - "gimli 0.27.1", + "gimli 0.27.2", ] [[package]] @@ -55,6 +55,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "aead" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" +dependencies = [ + "crypto-common", + "generic-array 0.14.6", +] + [[package]] name = "aes" version = "0.6.0" @@ -79,17 +89,14 @@ dependencies = [ ] [[package]] -name = "aes-gcm" -version = "0.8.0" +name = "aes" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" +checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ - "aead 0.3.2", - "aes 0.6.0", - "cipher 0.2.5", - "ctr 0.6.0", - "ghash 0.3.1", - "subtle", + "cfg-if", + "cipher 0.4.4", + "cpufeatures", ] [[package]] @@ -106,6 +113,20 @@ dependencies = [ "subtle", ] +[[package]] +name = "aes-gcm" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" +dependencies = [ + "aead 0.5.1", + "aes 0.8.2", + "cipher 0.4.4", + "ctr 0.9.2", + "ghash 0.5.0", + "subtle", +] + [[package]] name = "aes-soft" version = "0.6.4" @@ -137,6 +158,18 @@ dependencies = [ "version_check", ] +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "getrandom 0.2.8", + "once_cell", + "version_check", +] + [[package]] name = "aho-corasick" version = "0.7.20" @@ -245,14 +278,14 @@ dependencies = [ "num-traits", "rusticata-macros", "thiserror", - "time 0.3.17", + "time 0.3.20", ] [[package]] name = "asn1-rs" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ "asn1-rs-derive 0.4.0", "asn1-rs-impl", @@ -261,7 +294,7 @@ dependencies = [ "num-traits", "rusticata-macros", "thiserror", - "time 0.3.17", + "time 0.3.20", ] [[package]] @@ -333,19 +366,18 @@ dependencies = [ [[package]] name = "async-lock" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" dependencies = [ "event-listener", - "futures-lite", ] [[package]] name = "async-trait" -version = "0.1.64" +version = "0.1.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" +checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" dependencies = [ "proc-macro2", "quote", @@ -447,9 +479,9 @@ checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" [[package]] name = "base64ct" -version = "1.5.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "beef" @@ -463,7 +495,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "array-bytes 4.2.0", "async-trait", @@ -497,7 +529,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "beefy-gadget", "futures", @@ -514,13 +546,12 @@ dependencies = [ ] [[package]] -name = "beefy-merkle-tree" +name = "binary-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ - "sp-api", - "sp-beefy", - "sp-runtime", + "hash-db", + "log", ] [[package]] @@ -534,9 +565,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.60.1" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" +checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" dependencies = [ "bitflags", "cexpr", @@ -549,6 +580,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", + "syn", ] [[package]] @@ -580,24 +612,24 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72936ee4afc7f8f736d1c38383b56480b5497b4617b4a77bdbf1d2ababc76127" +checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" dependencies = [ "arrayref", "arrayvec 0.7.2", - "constant_time_eq 0.1.5", + "constant_time_eq", ] [[package]] name = "blake2s_simd" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4" +checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" dependencies = [ "arrayref", "arrayvec 0.7.2", - "constant_time_eq 0.1.5", + "constant_time_eq", ] [[package]] @@ -610,7 +642,7 @@ dependencies = [ "arrayvec 0.7.2", "cc", "cfg-if", - "constant_time_eq 0.2.4", + "constant_time_eq", "digest 0.10.6", ] @@ -637,9 +669,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array 0.14.6", ] @@ -689,11 +721,23 @@ dependencies = [ "syn", ] +[[package]] +name = "bounded-collections" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a071c348a5ef6da1d3a87166b408170b46002382b1dda83992b5c2208cefb370" +dependencies = [ + "log", + "parity-scale-codec", + "scale-info", + "serde", +] + [[package]] name = "bounded-vec" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3372be4090bf9d4da36bd8ba7ce6ca1669503d0cf6e667236c6df7f053153eb6" +checksum = "68534a48cbf63a4b1323c433cf21238c9ec23711e0df13b08c33e5c2082663ce" dependencies = [ "thiserror", ] @@ -706,9 +750,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" +checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" dependencies = [ "memchr", "serde", @@ -741,6 +785,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" + [[package]] name = "byteorder" version = "1.4.3" @@ -766,9 +816,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055" +checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" dependencies = [ "serde", ] @@ -784,15 +834,16 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.14.2" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" dependencies = [ "camino", "cargo-platform", "semver 1.0.16", "serde", "serde_json", + "thiserror", ] [[package]] @@ -893,7 +944,7 @@ checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" dependencies = [ "core2", "multibase", - "multihash", + "multihash 0.16.3", "serde", "unsigned-varint", ] @@ -916,6 +967,16 @@ dependencies = [ "generic-array 0.14.6", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "ckb-merkle-mountain-range" version = "0.5.2" @@ -927,9 +988,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.4.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a" dependencies = [ "glob", "libc", @@ -938,9 +999,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.4" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76" +checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" dependencies = [ "bitflags", "clap_derive", @@ -953,9 +1014,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.1.0" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" +checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" dependencies = [ "heck", "proc-macro-error", @@ -966,18 +1027,18 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" +checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" dependencies = [ "os_str_bytes", ] [[package]] name = "coarsetime" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "454038500439e141804c655b4cd1bc6a70bcb95cd2bc9463af5661b6956f0e46" +checksum = "a90d114103adbc625300f346d4d09dfb4ab1c4a8df6868435dd903392ecf4354" dependencies = [ "libc", "once_cell", @@ -1017,15 +1078,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b" - -[[package]] -name = "constant_time_eq" -version = "0.1.5" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "constant_time_eq" @@ -1092,26 +1147,20 @@ dependencies = [ "libc", ] -[[package]] -name = "cpuid-bool" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" - [[package]] name = "cranelift-bforest" -version = "0.88.2" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52056f6d0584484b57fa6c1a65c1fcb15f3780d8b6a758426d9e3084169b2ddd" +checksum = "a7379abaacee0f14abf3204a7606118f0465785252169d186337bcb75030815a" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.88.2" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fed94c8770dc25d01154c3ffa64ed0b3ba9d583736f305fed7beebe5d9cf74" +checksum = "9489fa336927df749631f1008007ced2871068544f40a202ce6d93fbf2366a7b" dependencies = [ "arrayvec 0.7.2", "bumpalo", @@ -1121,6 +1170,7 @@ dependencies = [ "cranelift-entity", "cranelift-isle", "gimli 0.26.2", + "hashbrown 0.12.3", "log", "regalloc2", "smallvec", @@ -1129,33 +1179,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.88.2" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c451b81faf237d11c7e4f3165eeb6bac61112762c5cfe7b4c0fb7241474358f" +checksum = "05bbb67da91ec721ed57cef2f7c5ef7728e1cd9bde9ffd3ef8601022e73e3239" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.88.2" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c940133198426d26128f08be2b40b0bd117b84771fd36798969c4d712d81fc" +checksum = "418ecb2f36032f6665dc1a5e2060a143dbab41d83b784882e97710e890a7a16d" [[package]] name = "cranelift-entity" -version = "0.88.2" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87a0f1b2fdc18776956370cf8d9b009ded3f855350c480c1c52142510961f352" +checksum = "7cf583f7b093f291005f9fb1323e2c37f6ee4c7909e39ce016b2e8360d461705" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.88.2" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34897538b36b216cc8dd324e73263596d51b8cf610da6498322838b2546baf8a" +checksum = "0b66bf9e916f57fbbd0f7703ec6286f4624866bf45000111627c70d272c8dda1" dependencies = [ "cranelift-codegen", "log", @@ -1165,15 +1215,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.88.2" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b2629a569fae540f16a76b70afcc87ad7decb38dc28fa6c648ac73b51e78470" +checksum = "649782a39ce99798dd6b4029e2bb318a2fbeaade1b4fa25330763c10c65bc358" [[package]] name = "cranelift-native" -version = "0.88.2" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20937dab4e14d3e225c5adfc9c7106bafd4ac669bdb43027b911ff794c6fb318" +checksum = "937e021e089c51f9749d09e7ad1c4f255c2f8686cb8c3df63a34b3ec9921bc41" dependencies = [ "cranelift-codegen", "libc", @@ -1182,9 +1232,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.88.2" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80fc2288957a94fd342a015811479de1837850924166d1f1856d8406e6f3609b" +checksum = "d850cf6775477747c9dfda9ae23355dd70512ffebc70cf82b85a5b111ae668b5" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1222,9 +1272,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1232,9 +1282,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -1243,14 +1293,14 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.13" +version = "0.9.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" +checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset 0.7.1", + "memoffset 0.8.0", "scopeguard", ] @@ -1266,9 +1316,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ "cfg-if", ] @@ -1298,6 +1348,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array 0.14.6", + "rand_core 0.6.4", "typenum", ] @@ -1311,16 +1362,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "crypto-mac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" -dependencies = [ - "generic-array 0.14.6", - "subtle", -] - [[package]] name = "crypto-mac" version = "0.11.1" @@ -1343,26 +1384,26 @@ dependencies = [ [[package]] name = "ctr" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" dependencies = [ - "cipher 0.2.5", + "cipher 0.3.0", ] [[package]] name = "ctr" -version = "0.8.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.3.0", + "cipher 0.4.4", ] [[package]] name = "cumulus-client-cli" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "clap", "parity-scale-codec", @@ -1377,7 +1418,7 @@ dependencies = [ [[package]] name = "cumulus-client-collator" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "cumulus-client-consensus-common", "cumulus-client-network", @@ -1400,7 +1441,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-aura" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "async-trait", "cumulus-client-consensus-common", @@ -1429,7 +1470,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-common" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "async-trait", "cumulus-client-pov-recovery", @@ -1442,6 +1483,7 @@ dependencies = [ "polkadot-primitives", "sc-client-api", "sc-consensus", + "schnellru", "sp-blockchain", "sp-consensus", "sp-runtime", @@ -1452,7 +1494,7 @@ dependencies = [ [[package]] name = "cumulus-client-network" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "async-trait", "cumulus-relay-chain-interface", @@ -1475,8 +1517,9 @@ dependencies = [ [[package]] name = "cumulus-client-pov-recovery" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ + "async-trait", "cumulus-primitives-core", "cumulus-relay-chain-interface", "futures", @@ -1498,11 +1541,12 @@ dependencies = [ [[package]] name = "cumulus-client-service" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "cumulus-client-cli", "cumulus-client-collator", "cumulus-client-consensus-common", + "cumulus-client-network", "cumulus-client-pov-recovery", "cumulus-primitives-core", "cumulus-relay-chain-inprocess-interface", @@ -1513,20 +1557,26 @@ dependencies = [ "polkadot-primitives", "sc-client-api", "sc-consensus", + "sc-network", + "sc-network-transactions", + "sc-rpc", "sc-service", "sc-sysinfo", "sc-telemetry", + "sc-transaction-pool", + "sc-utils", "sp-api", "sp-blockchain", "sp-consensus", "sp-core", "sp-runtime", + "sp-transaction-pool", ] [[package]] name = "cumulus-pallet-aura-ext" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "frame-support", "frame-system", @@ -1542,7 +1592,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-dmp-queue" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -1559,7 +1609,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "bytes", "cumulus-pallet-parachain-system-proc-macro", @@ -1582,12 +1632,13 @@ dependencies = [ "sp-std", "sp-trie", "sp-version", + "xcm", ] [[package]] name = "cumulus-pallet-parachain-system-proc-macro" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1598,7 +1649,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcm" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -1614,15 +1665,17 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcmp-queue" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "cumulus-primitives-core", "frame-support", "frame-system", "log", "parity-scale-codec", + "polkadot-runtime-common", "rand_chacha 0.3.1", "scale-info", + "sp-io", "sp-runtime", "sp-std", "xcm", @@ -1632,7 +1685,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -1642,12 +1695,13 @@ dependencies = [ "sp-runtime", "sp-std", "sp-trie", + "xcm", ] [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1670,7 +1724,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-timestamp" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "cumulus-primitives-core", "futures", @@ -1683,12 +1737,14 @@ dependencies = [ [[package]] name = "cumulus-primitives-utility" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "cumulus-primitives-core", "frame-support", "log", "parity-scale-codec", + "polkadot-runtime-common", + "sp-io", "sp-runtime", "sp-std", "xcm", @@ -1699,7 +1755,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-inprocess-interface" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1724,7 +1780,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1744,7 +1800,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-minimal-node" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "array-bytes 6.0.0", "async-trait", @@ -1752,7 +1808,7 @@ dependencies = [ "cumulus-relay-chain-interface", "cumulus-relay-chain-rpc-interface", "futures", - "lru", + "lru 0.9.0", "polkadot-core-primitives", "polkadot-network-bridge", "polkadot-node-network-protocol", @@ -1784,7 +1840,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-rpc-interface" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1792,7 +1848,7 @@ dependencies = [ "futures", "futures-timer", "jsonrpsee", - "lru", + "lru 0.9.0", "parity-scale-codec", "polkadot-service", "sc-client-api", @@ -1813,7 +1869,7 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -1865,9 +1921,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9" +checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" dependencies = [ "cc", "cxxbridge-flags", @@ -1877,9 +1933,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d" +checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" dependencies = [ "cc", "codespan-reporting", @@ -1892,15 +1948,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a" +checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" [[package]] name = "cxxbridge-macro" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2" +checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" dependencies = [ "proc-macro2", "quote", @@ -1909,9 +1965,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ "darling_core", "darling_macro", @@ -1919,9 +1975,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", @@ -1933,9 +1989,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", @@ -1995,11 +2051,11 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", "displaydoc", "nom", "num-bigint", @@ -2018,6 +2074,17 @@ dependencies = [ "syn", ] +[[package]] +name = "derive-syn-parse" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "derive_builder" version = "0.11.2" @@ -2058,7 +2125,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.0", + "rustc_version", "syn", ] @@ -2092,7 +2159,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "crypto-common", "subtle", ] @@ -2163,9 +2230,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" +checksum = "65d09067bfacaa79114679b279d7f5885b53295b1e2cfb4e79c8e4bd3d633169" [[package]] name = "dyn-clonable" @@ -2190,9 +2257,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" +checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" [[package]] name = "ecdsa" @@ -2236,7 +2303,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ "curve25519-dalek 3.2.0", - "hashbrown", + "hashbrown 0.12.3", "hex", "rand_core 0.6.4", "sha2 0.9.9", @@ -2305,9 +2372,9 @@ dependencies = [ [[package]] name = "enumn" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88bcb3a067a6555d577aba299e75eff9942da276e6506fc6274327daa026132" +checksum = "1940ea32e14d489b401074558be4567f35ca9507c4628b4b3fd6fe6eb2ca7b88" dependencies = [ "proc-macro2", "quote", @@ -2562,9 +2629,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ "instant", ] @@ -2597,13 +2664,12 @@ dependencies = [ [[package]] name = "fc-consensus" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "async-trait", "fc-db", "fp-consensus", "fp-rpc", - "sc-client-api", "sc-consensus", "sp-api", "sp-block-builder", @@ -2616,7 +2682,7 @@ dependencies = [ [[package]] name = "fc-db" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "fp-storage", "kvdb-rocksdb", @@ -2635,9 +2701,10 @@ dependencies = [ [[package]] name = "fc-mapping-sync" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "fc-db", + "fc-storage", "fp-consensus", "fp-rpc", "futures", @@ -2652,13 +2719,14 @@ dependencies = [ [[package]] name = "fc-rpc" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "ethereum", "ethereum-types", "evm", "fc-db", "fc-rpc-core", + "fc-storage", "fp-ethereum", "fp-rpc", "fp-storage", @@ -2667,7 +2735,7 @@ dependencies = [ "jsonrpsee", "libsecp256k1", "log", - "lru", + "lru 0.8.1", "parity-scale-codec", "prometheus", "rand 0.8.5", @@ -2686,7 +2754,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-storage", "substrate-prometheus-endpoint", "tokio", ] @@ -2694,7 +2761,7 @@ dependencies = [ [[package]] name = "fc-rpc-core" version = "1.1.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "ethereum", "ethereum-types", @@ -2704,6 +2771,24 @@ dependencies = [ "serde_json", ] +[[package]] +name = "fc-storage" +version = "1.0.0-dev" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +dependencies = [ + "ethereum", + "ethereum-types", + "fp-rpc", + "fp-storage", + "parity-scale-codec", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-io", + "sp-runtime", + "sp-storage", +] + [[package]] name = "fdlimit" version = "0.2.1" @@ -2725,9 +2810,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" +checksum = "93ace6ec7cc19c8ed33a32eaa9ea692d7faea05006b5356b9e2b668ec4bc3955" [[package]] name = "file-per-thread-logger" @@ -2741,14 +2826,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" +checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" dependencies = [ "cfg-if", "libc", "redox_syscall", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -2814,7 +2899,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", ] @@ -2831,7 +2916,7 @@ dependencies = [ [[package]] name = "fp-consensus" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "ethereum", "parity-scale-codec", @@ -2843,7 +2928,7 @@ dependencies = [ [[package]] name = "fp-ethereum" version = "1.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "ethereum", "ethereum-types", @@ -2857,7 +2942,7 @@ dependencies = [ [[package]] name = "fp-evm" version = "3.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "evm", "frame-support", @@ -2865,13 +2950,14 @@ dependencies = [ "parity-scale-codec", "serde", "sp-core", + "sp-runtime", "sp-std", ] [[package]] name = "fp-evm-mapping" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "frame-support", "sp-core", @@ -2880,7 +2966,7 @@ dependencies = [ [[package]] name = "fp-rpc" version = "3.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "ethereum", "ethereum-types", @@ -2896,7 +2982,7 @@ dependencies = [ [[package]] name = "fp-self-contained" version = "1.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "frame-support", "parity-scale-codec", @@ -2908,7 +2994,7 @@ dependencies = [ [[package]] name = "fp-storage" version = "2.0.0" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "parity-scale-codec", "serde", @@ -2923,9 +3009,10 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", + "frame-support-procedural", "frame-system", "linregress", "log", @@ -2941,12 +3028,13 @@ dependencies = [ "sp-runtime-interface", "sp-std", "sp-storage", + "static_assertions", ] [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "Inflector", "array-bytes 4.2.0", @@ -2993,7 +3081,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -3004,7 +3092,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -3021,7 +3109,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "frame-system", @@ -3050,7 +3138,7 @@ dependencies = [ [[package]] name = "frame-remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "futures", "log", @@ -3066,7 +3154,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "bitflags", "frame-metadata", @@ -3098,10 +3186,11 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "Inflector", "cfg-expr", + "derive-syn-parse", "frame-support-procedural-tools", "itertools", "proc-macro2", @@ -3112,7 +3201,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -3124,7 +3213,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "proc-macro2", "quote", @@ -3134,7 +3223,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "log", @@ -3152,7 +3241,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -3167,7 +3256,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "sp-api", @@ -3176,7 +3265,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "parity-scale-codec", @@ -3201,12 +3290,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - [[package]] name = "funty" version = "2.0.0" @@ -3397,22 +3480,22 @@ dependencies = [ [[package]] name = "ghash" -version = "0.3.1" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" dependencies = [ "opaque-debug 0.3.0", - "polyval 0.4.5", + "polyval 0.5.3", ] [[package]] name = "ghash" -version = "0.4.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" dependencies = [ "opaque-debug 0.3.0", - "polyval 0.5.3", + "polyval 0.6.0", ] [[package]] @@ -3428,9 +3511,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec" +checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" [[package]] name = "glob" @@ -3464,9 +3547,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" +checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" dependencies = [ "bytes", "fnv", @@ -3516,7 +3599,16 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash", + "ahash 0.7.6", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.3", ] [[package]] @@ -3545,9 +3637,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "856b5cb0902c2b6d65d5fd97dfa30f9b70c7538e770b98eab5ed52d8db923e01" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" [[package]] name = "hex" @@ -3580,16 +3672,6 @@ dependencies = [ "digest 0.9.0", ] -[[package]] -name = "hmac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" -dependencies = [ - "crypto-mac 0.10.1", - "digest 0.9.0", -] - [[package]] name = "hmac" version = "0.11.0" @@ -3633,9 +3715,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", @@ -3841,10 +3923,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", "serde", ] +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array 0.14.6", +] + [[package]] name = "instant" version = "0.1.12" @@ -3890,15 +3981,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" - -[[package]] -name = "io-lifetimes" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" dependencies = [ "libc", "windows-sys 0.45.0", @@ -3930,13 +4015,13 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ - "hermit-abi 0.3.0", - "io-lifetimes 1.0.5", - "rustix 0.36.8", + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix", "windows-sys 0.45.0", ] @@ -3951,15 +4036,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "jobserver" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" dependencies = [ "libc", ] @@ -4120,8 +4205,8 @@ dependencies = [ [[package]] name = "kusama-runtime" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bitvec", "frame-benchmarking", @@ -4150,7 +4235,7 @@ dependencies = [ "pallet-elections-phragmen", "pallet-fast-unstake", "pallet-grandpa", - "pallet-identity 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "pallet-identity 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39)", "pallet-im-online", "pallet-indices", "pallet-membership", @@ -4171,6 +4256,7 @@ dependencies = [ "pallet-session-benchmarking", "pallet-society", "pallet-staking", + "pallet-staking-runtime-api", "pallet-timestamp", "pallet-tips", "pallet-transaction-payment", @@ -4217,8 +4303,8 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "frame-support", "polkadot-primitives", @@ -4276,9 +4362,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.139" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "libloading" @@ -4304,16 +4390,16 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" -version = "0.50.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0a0d2f693675f49ded13c5d510c48b78069e23cbd9108d7ccd59f6dc568819" +checksum = "9c7b0104790be871edcf97db9bd2356604984e623a08d825c3f27852290266b8" dependencies = [ "bytes", "futures", "futures-timer", "getrandom 0.2.8", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-dns", "libp2p-identify", "libp2p-kad", @@ -4330,7 +4416,7 @@ dependencies = [ "libp2p-webrtc", "libp2p-websocket", "libp2p-yamux", - "multiaddr", + "multiaddr 0.16.0", "parking_lot 0.12.1", "pin-project", "smallvec", @@ -4351,8 +4437,42 @@ dependencies = [ "futures-timer", "instant", "log", - "multiaddr", - "multihash", + "multiaddr 0.16.0", + "multihash 0.16.3", + "multistream-select", + "once_cell", + "parking_lot 0.12.1", + "pin-project", + "prost", + "prost-build", + "rand 0.8.5", + "rw-stream-sink", + "sec1", + "sha2 0.10.6", + "smallvec", + "thiserror", + "unsigned-varint", + "void", + "zeroize", +] + +[[package]] +name = "libp2p-core" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881d9a54e97d97cdaa4125d48269d97ca8c40e5fefec6b85b30440dc60cc551f" +dependencies = [ + "asn1_der", + "bs58", + "ed25519-dalek", + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "log", + "multiaddr 0.17.0", + "multihash 0.17.0", "multistream-select", "once_cell", "parking_lot 0.12.1", @@ -4377,7 +4497,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" dependencies = [ "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "smallvec", @@ -4393,10 +4513,10 @@ dependencies = [ "asynchronous-codec", "futures", "futures-timer", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", - "lru", + "lru 0.8.1", "prost", "prost-build", "prost-codec", @@ -4419,7 +4539,7 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "prost", @@ -4442,7 +4562,7 @@ dependencies = [ "data-encoding", "futures", "if-watch", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "rand 0.8.5", @@ -4459,7 +4579,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" dependencies = [ - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-identify", "libp2p-kad", "libp2p-ping", @@ -4476,7 +4596,7 @@ dependencies = [ "asynchronous-codec", "bytes", "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "nohash-hasher", "parking_lot 0.12.1", @@ -4494,7 +4614,7 @@ dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "once_cell", "prost", @@ -4517,7 +4637,7 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "rand 0.8.5", @@ -4534,7 +4654,7 @@ dependencies = [ "futures", "futures-timer", "if-watch", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-tls", "log", "parking_lot 0.12.1", @@ -4555,7 +4675,7 @@ dependencies = [ "bytes", "futures", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "rand 0.8.5", @@ -4574,7 +4694,7 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-swarm-derive", "log", "pin-project", @@ -4606,7 +4726,7 @@ dependencies = [ "futures-timer", "if-watch", "libc", - "libp2p-core", + "libp2p-core 0.38.0", "log", "socket2", "tokio", @@ -4614,13 +4734,13 @@ dependencies = [ [[package]] name = "libp2p-tls" -version = "0.1.0-alpha" +version = "0.1.0-alpha.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7905ce0d040576634e8a3229a7587cc8beab83f79db6023800f1792895defa8" +checksum = "e9baf6f6292149e124ee737d9a79dbee783f29473fc368c7faad9d157841078a" dependencies = [ "futures", "futures-rustls", - "libp2p-core", + "libp2p-core 0.39.0", "rcgen 0.10.0", "ring", "rustls 0.20.8", @@ -4638,7 +4758,7 @@ checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" dependencies = [ "futures", "js-sys", - "libp2p-core", + "libp2p-core 0.38.0", "parity-send-wrapper", "wasm-bindgen", "wasm-bindgen-futures", @@ -4657,10 +4777,10 @@ dependencies = [ "futures-timer", "hex", "if-watch", - "libp2p-core", + "libp2p-core 0.38.0", "libp2p-noise", "log", - "multihash", + "multihash 0.16.3", "prost", "prost-build", "prost-codec", @@ -4684,7 +4804,7 @@ dependencies = [ "either", "futures", "futures-rustls", - "libp2p-core", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "quicksink", @@ -4701,7 +4821,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" dependencies = [ "futures", - "libp2p-core", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "thiserror", @@ -4710,9 +4830,9 @@ dependencies = [ [[package]] name = "librocksdb-sys" -version = "0.8.0+7.4.4" +version = "0.8.3+7.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d" +checksum = "557b255ff04123fcc176162f56ed0c9cd42d8f357cf55b3fabeb60f7413741b3" dependencies = [ "bindgen", "bzip2-sys", @@ -4808,20 +4928,13 @@ dependencies = [ [[package]] name = "linregress" -version = "0.4.4" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c601a85f5ecd1aba625247bca0031585fb1c446461b142878a16f8245ddeb8" +checksum = "475015a7f8f017edb28d2e69813be23500ad4b32cfe3421c4148efc97324ee52" dependencies = [ "nalgebra", - "statrs", ] -[[package]] -name = "linux-raw-sys" -version = "0.0.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" - [[package]] name = "linux-raw-sys" version = "0.1.4" @@ -4864,7 +4977,16 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" dependencies = [ - "hashbrown", + "hashbrown 0.12.3", +] + +[[package]] +name = "lru" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e7d46de488603ffdd5f30afbc64fbba2378214a2c3a2fb83abf3d33126df17" +dependencies = [ + "hashbrown 0.13.2", ] [[package]] @@ -4956,14 +5078,14 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.8", + "rustix", ] [[package]] name = "memmap2" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" dependencies = [ "libc", ] @@ -4986,6 +5108,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + [[package]] name = "memory-db" version = "0.31.0" @@ -4993,7 +5124,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e0c7cba9ce19ac7ffd2053ac9f49843bbd3f4318feedfd74e85c19d5fb0ba66" dependencies = [ "hash-db", - "hashbrown", + "hashbrown 0.12.3", ] [[package]] @@ -5042,20 +5173,20 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "mmr-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "futures", "log", @@ -5074,7 +5205,7 @@ dependencies = [ [[package]] name = "mmr-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "anyhow", "jsonrpsee", @@ -5124,7 +5255,25 @@ dependencies = [ "byteorder", "data-encoding", "multibase", - "multihash", + "multihash 0.16.3", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint", + "url", +] + +[[package]] +name = "multiaddr" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b53e0cc5907a5c216ba6584bf74be8ab47d6d6289f72793b2dddbf15dc3bf8c" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "multibase", + "multihash 0.17.0", "percent-encoding", "serde", "static_assertions", @@ -5160,6 +5309,19 @@ dependencies = [ "unsigned-varint", ] +[[package]] +name = "multihash" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" +dependencies = [ + "core2", + "digest 0.10.6", + "multihash-derive", + "sha2 0.10.6", + "unsigned-varint", +] + [[package]] name = "multihash-derive" version = "0.8.0" @@ -5196,9 +5358,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.27.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462fffe4002f4f2e1f6a9dcf12cc1a6fc0e15989014efc02a941d3e0f5dc2120" +checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" dependencies = [ "approx", "matrixmultiply", @@ -5206,17 +5368,15 @@ dependencies = [ "num-complex", "num-rational", "num-traits", - "rand 0.8.5", - "rand_distr", "simba", "typenum", ] [[package]] name = "nalgebra-macros" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218" +checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", @@ -5293,9 +5453,9 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" +checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" dependencies = [ "bytes", "futures", @@ -5316,6 +5476,20 @@ dependencies = [ "memoffset 0.6.5", ] +[[package]] +name = "nix" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +dependencies = [ + "bitflags", + "cfg-if", + "libc", + "memoffset 0.7.1", + "pin-utils", + "static_assertions", +] + [[package]] name = "nohash-hasher" version = "0.2.0" @@ -5332,15 +5506,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "nom8" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8" -dependencies = [ - "memchr", -] - [[package]] name = "normalize-line-endings" version = "0.3.0" @@ -5406,7 +5571,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", - "libm 0.2.6", ] [[package]] @@ -5421,18 +5585,18 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d829733185c1ca374f17e52b762f24f535ec625d2cc1f070e34c8a9068f341b" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2be1598bf1c313dcdd12092e3f1920f463462525a21b7b4e11b4168353d0123e" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -5447,7 +5611,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" dependencies = [ "crc32fast", - "hashbrown", + "hashbrown 0.12.3", "indexmap", "memchr", ] @@ -5476,18 +5640,18 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", ] [[package]] name = "once_cell" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "opal-runtime" -version = "0.9.37" +version = "0.9.39" dependencies = [ "app-promotion-rpc", "cumulus-pallet-aura-ext", @@ -5542,7 +5706,6 @@ dependencies = [ "pallet-maintenance", "pallet-nonfungible", "pallet-preimage", - "pallet-randomness-collective-flip", "pallet-refungible", "pallet-session", "pallet-structure", @@ -5649,7 +5812,7 @@ dependencies = [ [[package]] name = "orml-tokens" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.37#16b6c1149a15674d21c87244b7988a667e2c14d9" +source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v0.9.39#1548fb8f65ff4d59b5396299b4be73102803974f" dependencies = [ "frame-support", "frame-system", @@ -5664,7 +5827,7 @@ dependencies = [ [[package]] name = "orml-traits" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.37#16b6c1149a15674d21c87244b7988a667e2c14d9" +source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v0.9.39#1548fb8f65ff4d59b5396299b4be73102803974f" dependencies = [ "frame-support", "impl-trait-for-tuples", @@ -5673,6 +5836,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", + "sp-core", "sp-io", "sp-runtime", "sp-std", @@ -5682,7 +5846,7 @@ dependencies = [ [[package]] name = "orml-utilities" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.37#16b6c1149a15674d21c87244b7988a667e2c14d9" +source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v0.9.39#1548fb8f65ff4d59b5396299b4be73102803974f" dependencies = [ "frame-support", "parity-scale-codec", @@ -5696,7 +5860,7 @@ dependencies = [ [[package]] name = "orml-vesting" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.37#16b6c1149a15674d21c87244b7988a667e2c14d9" +source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v0.9.39#1548fb8f65ff4d59b5396299b4be73102803974f" dependencies = [ "frame-support", "frame-system", @@ -5711,7 +5875,7 @@ dependencies = [ [[package]] name = "orml-xcm-support" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.37#16b6c1149a15674d21c87244b7988a667e2c14d9" +source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v0.9.39#1548fb8f65ff4d59b5396299b4be73102803974f" dependencies = [ "frame-support", "orml-traits", @@ -5725,7 +5889,7 @@ dependencies = [ [[package]] name = "orml-xtokens" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.37#16b6c1149a15674d21c87244b7988a667e2c14d9" +source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v0.9.39#1548fb8f65ff4d59b5396299b4be73102803974f" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -5807,7 +5971,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "frame-system", @@ -5823,7 +5987,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "frame-system", @@ -5839,14 +6003,13 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "frame-system", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-authorship", "sp-runtime", "sp-std", ] @@ -5854,7 +6017,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -5878,7 +6041,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5898,7 +6061,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -5913,7 +6076,7 @@ dependencies = [ [[package]] name = "pallet-base-fee" version = "1.0.0" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "fp-evm", "frame-support", @@ -5927,26 +6090,29 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "frame-system", + "pallet-authorship", "pallet-session", "parity-scale-codec", "scale-info", "serde", "sp-beefy", "sp-runtime", + "sp-session", + "sp-staking", "sp-std", ] [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "array-bytes 4.2.0", - "beefy-merkle-tree", + "binary-merkle-tree", "frame-support", "frame-system", "log", @@ -5956,6 +6122,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", + "sp-api", "sp-beefy", "sp-core", "sp-io", @@ -5966,7 +6133,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -5984,7 +6151,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6030,7 +6197,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6084,7 +6251,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6101,7 +6268,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6119,7 +6286,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6142,7 +6309,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6155,7 +6322,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6173,7 +6340,7 @@ dependencies = [ [[package]] name = "pallet-ethereum" version = "4.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "ethereum", "ethereum-types", @@ -6200,7 +6367,7 @@ dependencies = [ [[package]] name = "pallet-evm" version = "6.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "environmental", "evm", @@ -6280,7 +6447,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-simple" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" dependencies = [ "fp-evm", "ripemd", @@ -6306,7 +6473,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6366,7 +6533,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6406,7 +6573,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6422,7 +6589,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6442,7 +6609,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6488,7 +6655,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6505,7 +6672,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6522,7 +6689,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6538,7 +6705,7 @@ dependencies = [ [[package]] name = "pallet-nis" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6554,7 +6721,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "frame-system", @@ -6571,7 +6738,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6591,8 +6758,9 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ + "pallet-nomination-pools", "parity-scale-codec", "sp-api", "sp-std", @@ -6622,7 +6790,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "frame-system", @@ -6639,12 +6807,13 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-election-provider-support", "frame-support", "frame-system", + "log", "pallet-babe", "pallet-balances", "pallet-grandpa", @@ -6662,7 +6831,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6679,7 +6848,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6691,24 +6860,10 @@ dependencies = [ "sp-std", ] -[[package]] -name = "pallet-randomness-collective-flip" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "safe-mix", - "scale-info", - "sp-runtime", - "sp-std", -] - [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6726,7 +6881,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6741,7 +6896,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6780,7 +6935,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6797,7 +6952,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "frame-system", @@ -6818,7 +6973,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6834,7 +6989,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "frame-system", @@ -6848,7 +7003,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6871,7 +7026,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6882,16 +7037,25 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "log", "sp-arithmetic", ] +[[package]] +name = "pallet-staking-runtime-api" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" +dependencies = [ + "parity-scale-codec", + "sp-api", +] + [[package]] name = "pallet-state-trie-migration" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6924,7 +7088,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "frame-system", @@ -6938,7 +7102,7 @@ dependencies = [ [[package]] name = "pallet-template-transaction-payment" version = "3.0.0" -source = "git+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v0.9.37#72931fde262ecc4418928dd4bbeea10c64593175" +source = "git+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v0.9.39#7e74e3937a2c08bf29a00084a5c2f1ca6676d87a" dependencies = [ "frame-benchmarking", "frame-support", @@ -6970,7 +7134,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -6988,7 +7152,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -7007,7 +7171,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-support", "frame-system", @@ -7023,7 +7187,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -7039,7 +7203,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -7051,7 +7215,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -7109,7 +7273,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -7125,7 +7289,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -7140,7 +7304,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-benchmarking", "frame-support", @@ -7154,9 +7318,11 @@ dependencies = [ [[package]] name = "pallet-xcm" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ + "bounded-collections", + "frame-benchmarking", "frame-support", "frame-system", "log", @@ -7164,6 +7330,7 @@ dependencies = [ "scale-info", "serde", "sp-core", + "sp-io", "sp-runtime", "sp-std", "xcm", @@ -7172,8 +7339,8 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "frame-benchmarking", "frame-support", @@ -7181,16 +7348,18 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", + "sp-io", "sp-runtime", "sp-std", "xcm", + "xcm-builder", "xcm-executor", ] [[package]] name = "parachain-info" version = "0.1.0" -source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.37#09418fc04c2608b123f36ca80f16df3d2096753b" +source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -7201,9 +7370,9 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd684a725651d9588ef21f140a328b6b4f64e646b2e931f3e6f14f75eedf9980" +checksum = "df89dd8311063c54ae4e03d9aeb597b04212a57e82c339344130a9cad9b3e2d9" dependencies = [ "blake2", "crc32fast", @@ -7215,14 +7384,15 @@ dependencies = [ "memmap2", "parking_lot 0.12.1", "rand 0.8.5", + "siphasher", "snap", ] [[package]] name = "parity-scale-codec" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3840933452adf7b3b9145e27086a5a3376c619dca1a21b1e5a5af0d54979bed" +checksum = "637935964ff85a605d114591d4d2c13c5d1ba2806dae97cea6bf180238a749ac" dependencies = [ "arrayvec 0.7.2", "bitvec", @@ -7313,9 +7483,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" [[package]] name = "pbkdf2" @@ -7367,9 +7537,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.4" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f" +checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" dependencies = [ "thiserror", "ucd-trie", @@ -7377,9 +7547,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.4" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea" +checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" dependencies = [ "pest", "pest_generator", @@ -7387,9 +7557,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.4" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f" +checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" dependencies = [ "pest", "pest_meta", @@ -7400,9 +7570,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.4" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d" +checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" dependencies = [ "once_cell", "pest", @@ -7411,9 +7581,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" dependencies = [ "fixedbitset", "indexmap", @@ -7487,8 +7657,8 @@ checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" [[package]] name = "polkadot-approval-distribution" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "futures", "polkadot-node-metrics", @@ -7502,8 +7672,8 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7516,13 +7686,13 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "derive_more", "fatality", "futures", - "lru", + "lru 0.9.0", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7539,12 +7709,12 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "fatality", "futures", - "lru", + "lru 0.9.0", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7560,8 +7730,8 @@ dependencies = [ [[package]] name = "polkadot-cli" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7575,6 +7745,7 @@ dependencies = [ "sc-cli", "sc-executor", "sc-service", + "sc-storage-monitor", "sc-sysinfo", "sc-tracing", "sp-core", @@ -7587,8 +7758,8 @@ dependencies = [ [[package]] name = "polkadot-client" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "async-trait", "frame-benchmarking", @@ -7629,8 +7800,8 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "always-assert", "bitvec", @@ -7651,8 +7822,8 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "parity-scale-codec", "scale-info", @@ -7663,15 +7834,15 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "derive_more", "fatality", "futures", "futures-timer", "indexmap", - "lru", + "lru 0.9.0", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7688,8 +7859,8 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7702,8 +7873,8 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "futures", "futures-timer", @@ -7722,8 +7893,8 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "always-assert", "async-trait", @@ -7746,8 +7917,8 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "futures", "parity-scale-codec", @@ -7764,15 +7935,15 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bitvec", "derive_more", "futures", "futures-timer", "kvdb", - "lru", + "lru 0.9.0", "merlin", "parity-scale-codec", "polkadot-node-jaeger", @@ -7793,8 +7964,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bitvec", "futures", @@ -7807,14 +7978,15 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-overseer", "polkadot-primitives", + "sp-consensus", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-node-core-backing" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bitvec", "fatality", @@ -7832,8 +8004,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7847,8 +8019,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "async-trait", "futures", @@ -7858,6 +8030,7 @@ dependencies = [ "polkadot-node-metrics", "polkadot-node-primitives", "polkadot-node-subsystem", + "polkadot-node-subsystem-util", "polkadot-parachain", "polkadot-primitives", "sp-maybe-compressed-blob", @@ -7866,8 +8039,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "futures", "polkadot-node-metrics", @@ -7881,8 +8054,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "futures", "futures-timer", @@ -7898,13 +8071,13 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "fatality", "futures", "kvdb", - "lru", + "lru 0.9.0", "parity-scale-codec", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -7917,8 +8090,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "async-trait", "futures", @@ -7934,8 +8107,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bitvec", "fatality", @@ -7952,19 +8125,22 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "always-assert", "assert_matches", "cpu-time", "futures", "futures-timer", + "libc", "parity-scale-codec", "pin-project", "polkadot-core-primitives", "polkadot-node-metrics", + "polkadot-node-primitives", "polkadot-parachain", + "polkadot-primitives", "rand 0.8.5", "rayon", "sc-executor", @@ -7978,14 +8154,15 @@ dependencies = [ "sp-tracing", "sp-wasm-interface", "tempfile", + "tikv-jemalloc-ctl", "tokio", "tracing-gum", ] [[package]] name = "polkadot-node-core-pvf-checker" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "futures", "polkadot-node-primitives", @@ -8000,11 +8177,11 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "futures", - "lru", + "lru 0.9.0", "polkadot-node-metrics", "polkadot-node-subsystem", "polkadot-node-subsystem-types", @@ -8015,8 +8192,8 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "lazy_static", "log", @@ -8033,8 +8210,8 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bs58", "futures", @@ -8052,8 +8229,8 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "async-trait", "derive_more", @@ -8075,8 +8252,8 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bounded-vec", "futures", @@ -8091,14 +8268,15 @@ dependencies = [ "sp-core", "sp-keystore", "sp-maybe-compressed-blob", + "sp-runtime", "thiserror", "zstd", ] [[package]] name = "polkadot-node-subsystem" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -8107,8 +8285,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "async-trait", "derive_more", @@ -8130,8 +8308,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "async-trait", "derive_more", @@ -8140,7 +8318,7 @@ dependencies = [ "futures-channel", "itertools", "kvdb", - "lru", + "lru 0.9.0", "parity-db", "parity-scale-codec", "parking_lot 0.11.2", @@ -8163,13 +8341,13 @@ dependencies = [ [[package]] name = "polkadot-overseer" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "async-trait", "futures", "futures-timer", - "lru", + "lru 0.9.0", "orchestra", "parking_lot 0.12.1", "polkadot-node-metrics", @@ -8186,9 +8364,10 @@ dependencies = [ [[package]] name = "polkadot-parachain" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ + "bounded-collections", "derive_more", "frame-support", "parity-scale-codec", @@ -8202,8 +8381,8 @@ dependencies = [ [[package]] name = "polkadot-performance-test" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "env_logger 0.9.3", "kusama-runtime", @@ -8211,14 +8390,15 @@ dependencies = [ "polkadot-erasure-coding", "polkadot-node-core-pvf", "polkadot-node-primitives", + "polkadot-primitives", "quote", "thiserror", ] [[package]] name = "polkadot-primitives" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bitvec", "hex-literal", @@ -8243,8 +8423,8 @@ dependencies = [ [[package]] name = "polkadot-rpc" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -8275,8 +8455,8 @@ dependencies = [ [[package]] name = "polkadot-runtime" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bitvec", "frame-benchmarking", @@ -8303,7 +8483,7 @@ dependencies = [ "pallet-elections-phragmen", "pallet-fast-unstake", "pallet-grandpa", - "pallet-identity 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "pallet-identity 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39)", "pallet-im-online", "pallet-indices", "pallet-membership", @@ -8320,6 +8500,7 @@ dependencies = [ "pallet-session-benchmarking", "pallet-staking", "pallet-staking-reward-curve", + "pallet-staking-runtime-api", "pallet-timestamp", "pallet-tips", "pallet-transaction-payment", @@ -8364,8 +8545,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bitvec", "frame-benchmarking", @@ -8377,10 +8558,10 @@ dependencies = [ "log", "pallet-authorship", "pallet-babe", - "pallet-bags-list", "pallet-balances", "pallet-beefy-mmr", "pallet-election-provider-multi-phase", + "pallet-fast-unstake", "pallet-session", "pallet-staking", "pallet-staking-reward-fn", @@ -8412,8 +8593,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "frame-support", "polkadot-primitives", @@ -8426,8 +8607,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bs58", "parity-scale-codec", @@ -8438,8 +8619,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bitflags", "bitvec", @@ -8457,6 +8638,7 @@ dependencies = [ "pallet-timestamp", "pallet-vesting", "parity-scale-codec", + "polkadot-parachain", "polkadot-primitives", "polkadot-runtime-metrics", "rand 0.8.5", @@ -8481,11 +8663,12 @@ dependencies = [ [[package]] name = "polkadot-service" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "async-trait", "beefy-gadget", + "frame-benchmarking-cli", "frame-support", "frame-system-rpc-runtime-api", "futures", @@ -8493,7 +8676,8 @@ dependencies = [ "kusama-runtime", "kvdb", "kvdb-rocksdb", - "lru", + "log", + "lru 0.9.0", "mmr-gadget", "pallet-babe", "pallet-im-online", @@ -8587,8 +8771,8 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8608,8 +8792,8 @@ dependencies = [ [[package]] name = "polkadot-statement-table" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8618,16 +8802,18 @@ dependencies = [ [[package]] name = "polling" -version = "2.5.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" +checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", + "bitflags", "cfg-if", + "concurrent-queue", "libc", "log", - "wepoll-ffi", - "windows-sys 0.42.0", + "pin-project-lite 0.2.9", + "windows-sys 0.45.0", ] [[package]] @@ -8638,30 +8824,31 @@ checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" dependencies = [ "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.4.1", ] [[package]] name = "polyval" -version = "0.4.5" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" dependencies = [ - "cpuid-bool", + "cfg-if", + "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.4.1", ] [[package]] name = "polyval" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6" dependencies = [ "cfg-if", "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.5.0", ] [[package]] @@ -8713,9 +8900,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" +checksum = "4ebcd279d20a4a0a2404a33056388e950504d891c855c7975b9a8fef75f3bf04" dependencies = [ "proc-macro2", "syn", @@ -8753,9 +8940,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66618389e4ec1c7afe67d51a9bf34ff9236480f8d51e7489b7d5ab0303c13f34" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", "toml_edit", @@ -8839,9 +9026,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698" +checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537" dependencies = [ "bytes", "prost-derive", @@ -8849,9 +9036,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e" +checksum = "2c828f93f5ca4826f97fedcbd3f9a536c16b12cff3dbbb4a007f932bbad95b12" dependencies = [ "bytes", "heck", @@ -8884,9 +9071,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d" +checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b" dependencies = [ "anyhow", "itertools", @@ -8897,11 +9084,10 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788" +checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88" dependencies = [ - "bytes", "prost", ] @@ -8916,7 +9102,7 @@ dependencies = [ [[package]] name = "quartz-runtime" -version = "0.9.37" +version = "0.9.39" dependencies = [ "app-promotion-rpc", "cumulus-pallet-aura-ext", @@ -8971,7 +9157,6 @@ dependencies = [ "pallet-maintenance", "pallet-nonfungible", "pallet-preimage", - "pallet-randomness-collective-flip", "pallet-refungible", "pallet-session", "pallet-structure", @@ -9127,16 +9312,6 @@ dependencies = [ "getrandom 0.2.8", ] -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - [[package]] name = "rand_hc" version = "0.2.0" @@ -9163,9 +9338,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ "either", "rayon-core", @@ -9173,9 +9348,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.10.2" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -9191,7 +9366,7 @@ checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" dependencies = [ "pem", "ring", - "time 0.3.17", + "time 0.3.20", "x509-parser 0.13.2", "yasna", ] @@ -9204,7 +9379,7 @@ checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" dependencies = [ "pem", "ring", - "time 0.3.17", + "time 0.3.20", "yasna", ] @@ -9243,18 +9418,18 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" +checksum = "a9af2cf09ef80e610097515e80095b7f76660a92743c4185aff5406cd5ce3dd5" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" +checksum = "9c501201393982e275433bc55de7d6ae6f00e7699cd5572c5b57581cd69c881b" dependencies = [ "proc-macro2", "quote", @@ -9263,9 +9438,9 @@ dependencies = [ [[package]] name = "regalloc2" -version = "0.3.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d43a209257d978ef079f3d446331d0f1794f5e0fc19b306a199983857833a779" +checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" dependencies = [ "fxhash", "log", @@ -9300,11 +9475,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] -name = "remove_dir_all" -version = "0.5.3" +name = "region" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" dependencies = [ + "bitflags", + "libc", + "mach", "winapi", ] @@ -9387,10 +9565,10 @@ dependencies = [ [[package]] name = "rococo-runtime" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ - "beefy-merkle-tree", + "binary-merkle-tree", "frame-benchmarking", "frame-executive", "frame-support", @@ -9412,7 +9590,7 @@ dependencies = [ "pallet-democracy", "pallet-elections-phragmen", "pallet-grandpa", - "pallet-identity 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "pallet-identity 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39)", "pallet-im-online", "pallet-indices", "pallet-membership", @@ -9473,8 +9651,8 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "frame-support", "polkadot-primitives", @@ -9517,7 +9695,7 @@ dependencies = [ "log", "netlink-packet-route", "netlink-proto", - "nix", + "nix 0.24.3", "thiserror", "tokio", ] @@ -9564,15 +9742,6 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - [[package]] name = "rustc_version" version = "0.4.0" @@ -9593,29 +9762,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.35.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes 0.7.5", - "libc", - "linux-raw-sys 0.0.46", - "windows-sys 0.42.0", -] - -[[package]] -name = "rustix" -version = "0.36.8" +version = "0.36.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" +checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.5", + "io-lifetimes", "libc", - "linux-raw-sys 0.1.4", + "linux-raw-sys", "windows-sys 0.45.0", ] @@ -9667,9 +9822,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "rw-stream-sink" @@ -9684,17 +9839,17 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] -name = "safe-mix" -version = "1.0.1" +name = "safe_arch" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" +checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" dependencies = [ - "rustc_version 0.2.3", + "bytemuck", ] [[package]] @@ -9709,7 +9864,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "log", "sp-core", @@ -9720,7 +9875,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "futures", @@ -9747,7 +9902,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "futures", "futures-timer", @@ -9770,7 +9925,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9786,7 +9941,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "memmap2", "sc-chain-spec-derive", @@ -9801,7 +9956,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9812,7 +9967,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "array-bytes 4.2.0", "chrono", @@ -9852,7 +10007,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "fnv", "futures", @@ -9878,7 +10033,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "hash-db", "kvdb", @@ -9891,6 +10046,7 @@ dependencies = [ "parking_lot 0.12.1", "sc-client-api", "sc-state-db", + "schnellru", "sp-arithmetic", "sp-blockchain", "sp-core", @@ -9903,7 +10059,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "futures", @@ -9928,7 +10084,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "futures", @@ -9957,7 +10113,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "fork-tree", @@ -9975,6 +10131,7 @@ dependencies = [ "sc-consensus-slots", "sc-keystore", "sc-telemetry", + "scale-info", "schnorrkel", "sp-api", "sp-application-crypto", @@ -9995,7 +10152,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "futures", "jsonrpsee", @@ -10017,7 +10174,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "fork-tree", "parity-scale-codec", @@ -10030,7 +10187,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "assert_matches", "async-trait", @@ -10064,7 +10221,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "futures", @@ -10087,9 +10244,9 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ - "lru", + "lru 0.8.1", "parity-scale-codec", "parking_lot 0.12.1", "sc-executor-common", @@ -10111,7 +10268,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "sc-allocator", "sp-maybe-compressed-blob", @@ -10124,7 +10281,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "log", "sc-allocator", @@ -10137,13 +10294,14 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ + "anyhow", "cfg-if", "libc", "log", "once_cell", - "rustix 0.35.13", + "rustix", "sc-allocator", "sc-executor-common", "sp-runtime-interface", @@ -10154,9 +10312,9 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ - "ahash", + "ahash 0.8.3", "array-bytes 4.2.0", "async-trait", "dyn-clone", @@ -10194,7 +10352,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "finality-grandpa", "futures", @@ -10214,7 +10372,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "ansi_term", "futures", @@ -10229,7 +10387,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "array-bytes 4.2.0", "async-trait", @@ -10244,7 +10402,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "array-bytes 4.2.0", "async-trait", @@ -10258,7 +10416,8 @@ dependencies = [ "ip_network", "libp2p", "log", - "lru", + "lru 0.8.1", + "mockall", "parity-scale-codec", "parking_lot 0.12.1", "pin-project", @@ -10286,7 +10445,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "cid", "futures", @@ -10305,7 +10464,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "bitflags", @@ -10331,14 +10490,14 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ - "ahash", + "ahash 0.8.3", "futures", "futures-timer", "libp2p", "log", - "lru", + "lru 0.8.1", "sc-network-common", "sc-peerset", "sp-runtime", @@ -10349,7 +10508,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "array-bytes 4.2.0", "futures", @@ -10370,7 +10529,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "array-bytes 4.2.0", "async-trait", @@ -10378,7 +10537,7 @@ dependencies = [ "futures", "libp2p", "log", - "lru", + "lru 0.8.1", "mockall", "parity-scale-codec", "prost", @@ -10402,7 +10561,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "array-bytes 4.2.0", "futures", @@ -10421,7 +10580,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "array-bytes 4.2.0", "bytes", @@ -10451,7 +10610,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "futures", "libp2p", @@ -10464,7 +10623,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10473,7 +10632,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "futures", "jsonrpsee", @@ -10497,12 +10656,13 @@ dependencies = [ "sp-runtime", "sp-session", "sp-version", + "tokio", ] [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10521,7 +10681,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "http", "jsonrpsee", @@ -10536,7 +10696,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "array-bytes 4.2.0", "futures", @@ -10562,7 +10722,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "directories", @@ -10593,6 +10753,7 @@ dependencies = [ "sc-rpc", "sc-rpc-server", "sc-rpc-spec-v2", + "sc-storage-monitor", "sc-sysinfo", "sc-telemetry", "sc-tracing", @@ -10627,7 +10788,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "log", "parity-scale-codec", @@ -10635,10 +10796,26 @@ dependencies = [ "sp-core", ] +[[package]] +name = "sc-storage-monitor" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" +dependencies = [ + "clap", + "futures", + "log", + "nix 0.26.2", + "sc-client-db", + "sc-utils", + "sp-core", + "thiserror", + "tokio", +] + [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10657,7 +10834,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "futures", "libc", @@ -10676,7 +10853,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "chrono", "futures", @@ -10695,7 +10872,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "ansi_term", "atty", @@ -10726,7 +10903,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10737,13 +10914,14 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "futures", "futures-timer", "linked-hash-map", "log", + "num-traits", "parity-scale-codec", "parking_lot 0.12.1", "sc-client-api", @@ -10763,7 +10941,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "futures", @@ -10777,7 +10955,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "backtrace", "futures", @@ -10823,6 +11001,17 @@ dependencies = [ "windows-sys 0.42.0", ] +[[package]] +name = "schnellru" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" +dependencies = [ + "ahash 0.8.3", + "cfg-if", + "hashbrown 0.13.2", +] + [[package]] name = "schnorrkel" version = "0.9.1" @@ -10849,9 +11038,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" [[package]] name = "sct" @@ -10958,15 +11147,6 @@ dependencies = [ "semver-parser", ] -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - [[package]] name = "semver" version = "1.0.16" @@ -10984,18 +11164,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.152" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "8cdd151213925e7f1ab45a9bbfb129316bd00799784b174b7cc7bcd16961c49e" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "4fc80d722935453bcafdc2c9a73cd6fac4dc1938f0346035d84bf99fa9e33217" dependencies = [ "proc-macro2", "quote", @@ -11004,9 +11184,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7434af0dc1cbd59268aa98b4c22c131c0584d2232f6fb166efb993e2832e896a" +checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" dependencies = [ "itoa", "ryu", @@ -11026,6 +11206,17 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "sha1" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.6", +] + [[package]] name = "sha2" version = "0.8.2" @@ -11108,9 +11299,9 @@ checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] @@ -11127,21 +11318,28 @@ dependencies = [ [[package]] name = "simba" -version = "0.5.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e82063457853d00243beda9952e910b82593e4b07ae9f721b9278a99a0d3d5c" +checksum = "50582927ed6f77e4ac020c057f37a268fc6aebc29225050365aacbb9deeeddc4" dependencies = [ "approx", "num-complex", "num-traits", "paste", + "wide", ] +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + [[package]] name = "slab" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ "autocfg", ] @@ -11154,8 +11352,8 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "enumn", "parity-scale-codec", @@ -11197,16 +11395,16 @@ dependencies = [ "curve25519-dalek 4.0.0-rc.0", "rand_core 0.6.4", "ring", - "rustc_version 0.4.0", + "rustc_version", "sha2 0.10.6", "subtle", ] [[package]] name = "socket2" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -11232,7 +11430,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "hash-db", "log", @@ -11250,7 +11448,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "blake2", "proc-macro-crate", @@ -11262,7 +11460,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "scale-info", @@ -11275,7 +11473,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "integer-sqrt", "num-traits", @@ -11289,7 +11487,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "scale-info", @@ -11299,23 +11497,12 @@ dependencies = [ "sp-std", ] -[[package]] -name = "sp-authorship" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" -dependencies = [ - "async-trait", - "parity-scale-codec", - "sp-inherents", - "sp-runtime", - "sp-std", -] - [[package]] name = "sp-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ + "lazy_static", "parity-scale-codec", "scale-info", "serde", @@ -11326,12 +11513,13 @@ dependencies = [ "sp-mmr-primitives", "sp-runtime", "sp-std", + "strum", ] [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "sp-api", @@ -11343,11 +11531,11 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "futures", "log", - "lru", + "lru 0.8.1", "parity-scale-codec", "parking_lot 0.12.1", "sp-api", @@ -11361,7 +11549,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "futures", @@ -11379,7 +11567,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "parity-scale-codec", @@ -11397,7 +11585,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "merlin", @@ -11420,7 +11608,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "scale-info", @@ -11432,7 +11620,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "scale-info", @@ -11445,12 +11633,13 @@ dependencies = [ [[package]] name = "sp-core" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "array-bytes 4.2.0", "base58", "bitflags", "blake2", + "bounded-collections", "dyn-clonable", "ed25519-zebra", "futures", @@ -11487,7 +11676,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "blake2", "byteorder", @@ -11501,7 +11690,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "proc-macro2", "quote", @@ -11512,7 +11701,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11521,7 +11710,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "proc-macro2", "quote", @@ -11531,7 +11720,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "environmental", "parity-scale-codec", @@ -11542,7 +11731,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "finality-grandpa", "log", @@ -11560,11 +11749,12 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", + "scale-info", "sp-core", "sp-runtime", "sp-std", @@ -11574,7 +11764,7 @@ dependencies = [ [[package]] name = "sp-io" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "bytes", "ed25519", @@ -11599,7 +11789,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "lazy_static", "sp-core", @@ -11610,7 +11800,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "futures", @@ -11627,7 +11817,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "thiserror", "zstd", @@ -11636,7 +11826,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "ckb-merkle-mountain-range", "log", @@ -11654,7 +11844,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "scale-info", @@ -11668,7 +11858,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "sp-api", "sp-core", @@ -11678,7 +11868,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "backtrace", "lazy_static", @@ -11688,7 +11878,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "rustc-hash", "serde", @@ -11698,7 +11888,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "either", "hash256-std-hasher", @@ -11720,7 +11910,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11738,7 +11928,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "Inflector", "proc-macro-crate", @@ -11750,7 +11940,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "scale-info", @@ -11764,7 +11954,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "scale-info", @@ -11776,7 +11966,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "hash-db", "log", @@ -11796,12 +11986,12 @@ dependencies = [ [[package]] name = "sp-std" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" [[package]] name = "sp-storage" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11814,7 +12004,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "futures-timer", @@ -11829,7 +12019,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "sp-std", @@ -11841,7 +12031,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "sp-api", "sp-runtime", @@ -11850,7 +12040,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "log", @@ -11866,30 +12056,30 @@ dependencies = [ [[package]] name = "sp-trie" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ - "ahash", + "ahash 0.8.3", "hash-db", - "hashbrown", + "hashbrown 0.12.3", "lazy_static", - "lru", "memory-db", "nohash-hasher", "parity-scale-codec", "parking_lot 0.12.1", "scale-info", + "schnellru", "sp-core", "sp-std", "thiserror", "tracing", - "trie-db", + "trie-db 0.25.1", "trie-root", ] [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11906,7 +12096,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11917,8 +12107,9 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ + "anyhow", "impl-trait-for-tuples", "log", "parity-scale-codec", @@ -11930,7 +12121,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "parity-scale-codec", "scale-info", @@ -11982,9 +12173,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.38.0" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e40c020d72bc0a9c5660bb71e4a6fdef081493583062c474740a7d59f55f0e7b" +checksum = "ecf0bd63593ef78eca595a7fc25e9a443ca46fe69fd472f8f09f5245cdcd769d" dependencies = [ "Inflector", "num-format", @@ -12060,19 +12251,6 @@ dependencies = [ "syn", ] -[[package]] -name = "statrs" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05bdbb8e4e78216a85785a85d3ec3183144f98d0097b9281802c019bb07a6f05" -dependencies = [ - "approx", - "lazy_static", - "nalgebra", - "num-traits", - "rand 0.8.5", -] - [[package]] name = "strsim" version = "0.10.0" @@ -12144,7 +12322,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "platforms 2.0.0", ] @@ -12152,7 +12330,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -12171,7 +12349,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "hyper", "log", @@ -12183,7 +12361,7 @@ dependencies = [ [[package]] name = "substrate-rpc-client" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "async-trait", "jsonrpsee", @@ -12196,7 +12374,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "jsonrpsee", "log", @@ -12209,13 +12387,13 @@ dependencies = [ "sp-runtime", "sp-state-machine", "sp-trie", - "trie-db", + "trie-db 0.25.1", ] [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "futures", "substrate-test-utils-derive", @@ -12225,7 +12403,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -12236,7 +12414,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ "ansi_term", "build-helper", @@ -12267,9 +12445,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.107" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -12317,22 +12495,21 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.5" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d" +checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" [[package]] name = "tempfile" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" dependencies = [ "cfg-if", "fastrand", - "libc", "redox_syscall", - "remove_dir_all", - "winapi", + "rustix", + "windows-sys 0.42.0", ] [[package]] @@ -12360,6 +12537,7 @@ dependencies = [ "frame-system", "pallet-balances", "pallet-common", + "pallet-configuration", "pallet-ethereum", "pallet-evm", "pallet-evm-coder-substrate", @@ -12378,22 +12556,23 @@ dependencies = [ "sp-std", "up-data-structs", "up-sponsorship", + "xcm", ] [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" dependencies = [ "proc-macro2", "quote", @@ -12408,10 +12587,11 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ + "cfg-if", "once_cell", ] @@ -12450,12 +12630,11 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.5.2+5.3.0-patched" +version = "0.5.3+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec45c14da997d0925c7835883e4d5c181f196fa142f8c19d7643d1e9af2592c3" +checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" dependencies = [ "cc", - "fs_extra", "libc", ] @@ -12472,9 +12651,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.17" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" dependencies = [ "itoa", "serde", @@ -12490,9 +12669,9 @@ checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" [[package]] name = "time-macros" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" dependencies = [ "time-core", ] @@ -12552,9 +12731,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.25.0" +version = "1.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" +checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" dependencies = [ "autocfg", "bytes", @@ -12567,7 +12746,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -12594,9 +12773,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" +checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" dependencies = [ "futures-core", "pin-project-lite 0.2.9", @@ -12606,9 +12785,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" dependencies = [ "bytes", "futures-core", @@ -12630,19 +12809,19 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5" +checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" [[package]] name = "toml_edit" -version = "0.18.1" +version = "0.19.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c59d8dd7d0dcbc6428bf7aa2f0e823e26e43b3c9aca15bbc9475d23e5fa12b" +checksum = "9a1eb0622d28f4b9c90adc4ea4b2b46b47663fde9ac5fafcb14a1369d5508825" dependencies = [ "indexmap", - "nom8", "toml_datetime", + "winnow", ] [[package]] @@ -12732,8 +12911,8 @@ dependencies = [ [[package]] name = "tracing-gum" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12743,8 +12922,8 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12804,7 +12983,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "004e1e8f92535694b4cb1444dc5a8073ecf0815e3357f729638b9f8fc4062908" dependencies = [ "hash-db", - "hashbrown", + "hashbrown 0.12.3", + "log", + "smallvec", +] + +[[package]] +name = "trie-db" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3390c0409daaa6027d6681393316f4ccd3ff82e1590a1e4725014e3ae2bf1920" +dependencies = [ + "hash-db", + "hashbrown 0.13.2", "log", "rustc-hex", "smallvec", @@ -12884,8 +13075,9 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#946507ba9ef13e263534176b7b74e26fc56efbd4" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#1837f423b494254e1d27834b1c9da34b2c0c2375" dependencies = [ + "async-trait", "clap", "frame-remote-externalities", "frame-try-runtime", @@ -12898,14 +13090,19 @@ dependencies = [ "serde", "serde_json", "sp-api", + "sp-consensus-aura", + "sp-consensus-babe", "sp-core", "sp-debug-derive", "sp-externalities", + "sp-inherents", "sp-io", "sp-keystore", "sp-rpc", "sp-runtime", "sp-state-machine", + "sp-timestamp", + "sp-transaction-storage-proof", "sp-version", "sp-weights", "substrate-rpc-client", @@ -12979,7 +13176,7 @@ dependencies = [ "sp-runtime", "sp-state-machine", "sp-trie", - "trie-db", + "trie-db 0.24.0", "unique-runtime", "up-common", "up-data-structs", @@ -13008,15 +13205,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" +checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" @@ -13041,7 +13238,7 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "unique-node" -version = "0.9.37" +version = "0.9.39" dependencies = [ "app-promotion-rpc", "clap", @@ -13147,7 +13344,7 @@ dependencies = [ [[package]] name = "unique-runtime" -version = "0.9.37" +version = "0.9.39" dependencies = [ "app-promotion-rpc", "cumulus-pallet-aura-ext", @@ -13202,7 +13399,6 @@ dependencies = [ "pallet-maintenance", "pallet-nonfungible", "pallet-preimage", - "pallet-randomness-collective-flip", "pallet-refungible", "pallet-session", "pallet-structure", @@ -13256,6 +13452,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "universal-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5" +dependencies = [ + "crypto-common", + "subtle", +] + [[package]] name = "unsigned-varint" version = "0.7.1" @@ -13276,7 +13482,7 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "up-common" -version = "0.9.37" +version = "0.9.39" dependencies = [ "cumulus-primitives-core", "fp-rpc", @@ -13335,7 +13541,7 @@ dependencies = [ [[package]] name = "up-sponsorship" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v0.9.37#72931fde262ecc4418928dd4bbeea10c64593175" +source = "git+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v0.9.39#7e74e3937a2c08bf29a00084a5c2f1ca6676d87a" dependencies = [ "impl-trait-for-tuples", ] @@ -13525,9 +13731,9 @@ dependencies = [ [[package]] name = "wasm-opt" -version = "0.110.2" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b68e8037b4daf711393f4be2056246d12d975651b14d581520ad5d1f19219cec" +checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41" dependencies = [ "anyhow", "libc", @@ -13541,9 +13747,9 @@ dependencies = [ [[package]] name = "wasm-opt-cxx-sys" -version = "0.110.2" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91adbad477e97bba3fbd21dd7bfb594e7ad5ceb9169ab1c93ab9cb0ada636b6f" +checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4" dependencies = [ "anyhow", "cxx", @@ -13553,9 +13759,9 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.110.2" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec4fa5a322a4e6ac22fd141f498d56afbdbf9df5debeac32380d2dcaa3e06941" +checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7" dependencies = [ "anyhow", "cc", @@ -13610,22 +13816,24 @@ dependencies = [ "memory_units", "num-rational", "num-traits", + "region", ] [[package]] name = "wasmparser" -version = "0.89.1" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5d3e08b13876f96dd55608d03cd4883a0545884932d5adf11925876c96daef" +checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" dependencies = [ "indexmap", + "url", ] [[package]] name = "wasmtime" -version = "1.0.2" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ad5af6ba38311282f2a21670d96e78266e8c8e2f38cbcd52c254df6ccbc7731" +checksum = "f6e89f9819523447330ffd70367ef4a18d8c832e24e8150fe054d1d912841632" dependencies = [ "anyhow", "bincode", @@ -13646,23 +13854,23 @@ dependencies = [ "wasmtime-environ", "wasmtime-jit", "wasmtime-runtime", - "windows-sys 0.36.1", + "windows-sys 0.42.0", ] [[package]] name = "wasmtime-asm-macros" -version = "1.0.2" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45de63ddfc8b9223d1adc8f7b2ee5f35d1f6d112833934ad7ea66e4f4339e597" +checksum = "9bd3a5e46c198032da934469f3a6e48649d1f9142438e4fd4617b68a35644b8a" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "1.0.2" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcd849399d17d2270141cfe47fa0d91ee52d5f8ea9b98cf7ddde0d53e5f79882" +checksum = "b389ae9b678b9c3851091a4804f4182d688d27aff7abc9aa37fa7be37d8ecffa" dependencies = [ "anyhow", "base64 0.13.1", @@ -13670,19 +13878,19 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.35.13", + "rustix", "serde", - "sha2 0.9.9", + "sha2 0.10.6", "toml", - "windows-sys 0.36.1", + "windows-sys 0.42.0", "zstd", ] [[package]] name = "wasmtime-cranelift" -version = "1.0.2" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd91339b742ff20bfed4532a27b73c86b5bcbfedd6bea2dcdf2d64471e1b5c6" +checksum = "59b2c92a08c0db6efffd88fdc97d7aa9c7c63b03edb0971dbca745469f820e8c" dependencies = [ "anyhow", "cranelift-codegen", @@ -13701,9 +13909,9 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "1.0.2" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebb881c61f4f627b5d45c54e629724974f8a8890d455bcbe634330cc27309644" +checksum = "9a6db9fc52985ba06ca601f2ff0ff1f526c5d724c7ac267b47326304b0c97883" dependencies = [ "anyhow", "cranelift-entity", @@ -13720,9 +13928,9 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "1.0.2" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1985c628011fe26adf5e23a5301bdc79b245e0e338f14bb58b39e4e25e4d8681" +checksum = "b77e3a52cd84d0f7f18554afa8060cfe564ccac61e3b0802d3fd4084772fa5f6" dependencies = [ "addr2line 0.17.0", "anyhow", @@ -13733,32 +13941,42 @@ dependencies = [ "log", "object 0.29.0", "rustc-demangle", - "rustix 0.35.13", "serde", "target-lexicon", - "thiserror", "wasmtime-environ", "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", "wasmtime-runtime", - "windows-sys 0.36.1", + "windows-sys 0.42.0", ] [[package]] name = "wasmtime-jit-debug" -version = "1.0.2" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f671b588486f5ccec8c5a3dba6b4c07eac2e66ab8c60e6f4e53717c77f709731" +checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.35.13", + "rustix", +] + +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67d412e9340ab1c83867051d8d1d7c90aa8c9afc91da086088068e2734e25064" +dependencies = [ + "cfg-if", + "libc", + "windows-sys 0.42.0", ] [[package]] name = "wasmtime-runtime" -version = "1.0.2" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8f92ad4b61736339c29361da85769ebc200f184361959d1792832e592a1afd" +checksum = "d594e791b5fdd4dbaf8cf7ae62f2e4ff85018ce90f483ca6f42947688e48827d" dependencies = [ "anyhow", "cc", @@ -13771,19 +13989,18 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.35.13", - "thiserror", + "rustix", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", - "windows-sys 0.36.1", + "windows-sys 0.42.0", ] [[package]] name = "wasmtime-types" -version = "1.0.2" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23d61cb4c46e837b431196dd06abb11731541021916d03476a178b54dc07aeb" +checksum = "a6688d6f96d4dbc1f89fab626c56c1778936d122b5f4ae7a57c2eb42b8d982e2" dependencies = [ "cranelift-entity", "serde", @@ -13856,7 +14073,7 @@ dependencies = [ "sha2 0.10.6", "stun", "thiserror", - "time 0.3.17", + "time 0.3.20", "tokio", "turn", "url", @@ -13888,22 +14105,22 @@ dependencies = [ [[package]] name = "webrtc-dtls" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7021987ae0a2ed6c8cd33f68e98e49bb6e74ffe9543310267b48a1bbe3900e5f" +checksum = "942be5bd85f072c3128396f6e5a9bfb93ca8c1939ded735d177b7bcba9a13d05" dependencies = [ "aes 0.6.0", - "aes-gcm 0.8.0", + "aes-gcm 0.10.1", "async-trait", "bincode", "block-modes", "byteorder", "ccm", "curve25519-dalek 3.2.0", - "der-parser 8.1.0", + "der-parser 8.2.0", "elliptic-curve", "hkdf", - "hmac 0.10.1", + "hmac 0.12.1", "log", "oid-registry 0.6.1", "p256", @@ -13915,8 +14132,8 @@ dependencies = [ "rustls 0.19.1", "sec1", "serde", - "sha-1", - "sha2 0.9.9", + "sha1", + "sha2 0.10.6", "signature", "subtle", "thiserror", @@ -13929,9 +14146,9 @@ dependencies = [ [[package]] name = "webrtc-ice" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494483fbb2f5492620871fdc78b084aed8807377f6e3fe88b2e49f0a9c9c41d7" +checksum = "465a03cc11e9a7d7b4f9f99870558fe37a102b65b93f8045392fef7c67b39e80" dependencies = [ "arc-swap", "async-trait", @@ -14035,26 +14252,17 @@ dependencies = [ "lazy_static", "libc", "log", - "nix", + "nix 0.24.3", "rand 0.8.5", "thiserror", "tokio", "winapi", ] -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - [[package]] name = "westend-runtime" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "bitvec", "frame-benchmarking", @@ -14079,7 +14287,7 @@ dependencies = [ "pallet-elections-phragmen", "pallet-fast-unstake", "pallet-grandpa", - "pallet-identity 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "pallet-identity 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39)", "pallet-im-online", "pallet-indices", "pallet-membership", @@ -14098,6 +14306,8 @@ dependencies = [ "pallet-society", "pallet-staking", "pallet-staking-reward-curve", + "pallet-staking-runtime-api", + "pallet-state-trie-migration", "pallet-sudo", "pallet-timestamp", "pallet-transaction-payment", @@ -14143,8 +14353,8 @@ dependencies = [ [[package]] name = "westend-runtime-constants" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "frame-support", "polkadot-primitives", @@ -14166,6 +14376,16 @@ dependencies = [ "once_cell", ] +[[package]] +name = "wide" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b689b6c49d6549434bf944e6b0f39238cf63693cb7a147e9d887507fffa3b223" +dependencies = [ + "bytemuck", + "safe_arch", +] + [[package]] name = "widestring" version = "0.5.1" @@ -14216,19 +14436,6 @@ dependencies = [ "windows_x86_64_msvc 0.34.0", ] -[[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - [[package]] name = "windows-sys" version = "0.42.0" @@ -14280,12 +14487,6 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - [[package]] name = "windows_aarch64_msvc" version = "0.42.1" @@ -14298,12 +14499,6 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - [[package]] name = "windows_i686_gnu" version = "0.42.1" @@ -14316,12 +14511,6 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - [[package]] name = "windows_i686_msvc" version = "0.42.1" @@ -14334,12 +14523,6 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - [[package]] name = "windows_x86_64_gnu" version = "0.42.1" @@ -14360,15 +14543,18 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" [[package]] -name = "windows_x86_64_msvc" -version = "0.42.1" +name = "winnow" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "ee7b2c67f962bf5042bfd8b6a916178df33a26eec343ae064cb8e069f638fa6f" +dependencies = [ + "memchr", +] [[package]] name = "winreg" @@ -14426,7 +14612,7 @@ dependencies = [ "ring", "rusticata-macros", "thiserror", - "time 0.3.17", + "time 0.3.20", ] [[package]] @@ -14435,39 +14621,42 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", "base64 0.13.1", "data-encoding", - "der-parser 8.1.0", + "der-parser 8.2.0", "lazy_static", "nom", "oid-registry 0.6.1", "rusticata-macros", "thiserror", - "time 0.3.17", + "time 0.3.20", ] [[package]] name = "xcm" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ + "bounded-collections", "derivative", "impl-trait-for-tuples", "log", "parity-scale-codec", "scale-info", - "sp-runtime", + "serde", + "sp-weights", "xcm-procedural", ] [[package]] name = "xcm-builder" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "frame-support", "frame-system", + "impl-trait-for-tuples", "log", "pallet-transaction-payment", "parity-scale-codec", @@ -14483,9 +14672,10 @@ dependencies = [ [[package]] name = "xcm-executor" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ + "environmental", "frame-benchmarking", "frame-support", "impl-trait-for-tuples", @@ -14496,13 +14686,14 @@ dependencies = [ "sp-io", "sp-runtime", "sp-std", + "sp-weights", "xcm", ] [[package]] name = "xcm-procedural" -version = "0.9.37" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.37#645723987cf9662244be8faf4e9b63e8b9a1b3a3" +version = "0.9.39-1" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" dependencies = [ "Inflector", "proc-macro2", @@ -14530,7 +14721,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" dependencies = [ - "time 0.3.17", + "time 0.3.20", ] [[package]] @@ -14575,9 +14766,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.6+zstd.1.5.2" +version = "2.0.7+zstd.1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a3f9792c0c3dc6c165840a75f47ae1f4da402c2d006881129579f6597e801b" +checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" dependencies = [ "cc", "libc", diff --git a/Cargo.toml b/Cargo.toml index cbb5c6140b..43430fbfaa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ members = [ 'runtime/tests', 'runtime/unique', ] -package.version = "0.9.37" +package.version = "0.9.39" resolver = "2" [profile.release] @@ -29,7 +29,7 @@ opt-level = 3 app-promotion-rpc = { path = "primitives/app_promotion_rpc", default-features = false } evm-coder = { git = "https://github.com/uniquenetwork/evm-coder", tag = "v0.3.1", default-features = false } pallet-app-promotion = { path = "pallets/app-promotion", default-features = false } -pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" } +pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.39" } pallet-collator-selection = { default-features = false, path = "pallets/collator-selection" } pallet-common = { default-features = false, path = "pallets/common" } pallet-configuration = { default-features = false, path = "pallets/configuration" } @@ -56,7 +56,7 @@ up-common = { path = "primitives/common", default-features = false } up-data-structs = { path = "primitives/data-structs", default-features = false } up-pov-estimate-rpc = { path = "primitives/pov-estimate-rpc", default-features = false } up-rpc = { path = "primitives/rpc", default-features = false } -up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" } +up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.39" } # Unique: Runtimes opal-runtime = { path = "runtime/opal" } @@ -64,124 +64,123 @@ quartz-runtime = { path = "runtime/quartz" } unique-runtime = { path = "runtime/unique" } # Frontier (Unique patches over the Parity version) -fc-consensus = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fc-db = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fc-mapping-sync = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } +fc-consensus = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +fc-db = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +fc-mapping-sync = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } # Parity codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.2.2" } -cumulus-client-cli = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -cumulus-client-consensus-aura = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -cumulus-client-consensus-common = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -cumulus-client-network = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -cumulus-client-service = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } -cumulus-pallet-dmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } -cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } -cumulus-pallet-xcm = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } -cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } -cumulus-primitives-core = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } -cumulus-primitives-parachain-inherent = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -cumulus-primitives-timestamp = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } -cumulus-primitives-utility = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } -cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -cumulus-relay-chain-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -frame-executive = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -frame-system-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-preimage = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-randomness-collective-flip = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-sudo = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-timestamp = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-transaction-payment = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-transaction-payment-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-treasury = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false } -parachain-info = { default-features = false, git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" } -sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-consensus-manual-seal = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +cumulus-client-cli = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-consensus-aura = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-consensus-common = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-network = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-service = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-aura-ext = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-dmp-queue = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-parachain-system = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-xcm = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-xcmp-queue = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-primitives-core = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-primitives-parachain-inherent = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-primitives-timestamp = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-primitives-utility = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-relay-chain-inprocess-interface = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-relay-chain-interface = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-relay-chain-minimal-node = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +frame-executive = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +frame-system-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-preimage = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-sudo = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-timestamp = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-transaction-payment = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-transaction-payment-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-treasury = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39", default-features = false } +parachain-info = { default-features = false, git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39", default-features = false } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39" } +sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-consensus-manual-seal = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-block-builder = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-consensus-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-inherents = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-offchain = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-staking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-transaction-pool = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-trie = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-version = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false } -xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false } -xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false } +sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-block-builder = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-consensus-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-inherents = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-offchain = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-staking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-transaction-pool = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-trie = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-version = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39", default-features = false } +xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39", default-features = false } +xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39", default-features = false } # Parity: Build utils -substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } # Parity: Benchmarking -frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -frame-system-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +frame-system-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } # Parity: Try Runtime -frame-try-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +frame-try-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } # ORML -orml-tokens = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false } -orml-traits = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false } -orml-vesting = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false } -orml-xtokens = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false } +orml-tokens = { default-features = false , git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" } +orml-traits = { default-features = false , git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" } +orml-vesting = { default-features = false , git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" } +orml-xtokens = { default-features = false , git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" } # Other derivative = { version = "2.2.0", features = ["use_core"] } diff --git a/Makefile b/Makefile index 6b99e7c384..0c17f501c3 100644 --- a/Makefile +++ b/Makefile @@ -82,8 +82,8 @@ _bench: cargo run --release --features runtime-benchmarks,$(RUNTIME) -- \ benchmark pallet --pallet pallet-$(if $(PALLET),$(PALLET),$(error Must set PALLET)) \ --wasm-execution compiled --extrinsic '*' \ - --template .maintain/frame-weight-template.hbs --steps=50 --repeat=80 --heap-pages=4096 \ - --output=./pallets/$(if $(PALLET_DIR),$(PALLET_DIR),$(PALLET))/src/weights.rs + $(if $(TEMPLATE),$(TEMPLATE),--template=.maintain/frame-weight-template.hbs) --steps=50 --repeat=80 --heap-pages=4096 \ + --output=$(if $(OUTPUT),$(OUTPUT),./pallets/$(if $(PALLET_DIR),$(PALLET_DIR),$(PALLET))/src/weights.rs) .PHONY: bench-evm-migration bench-evm-migration: @@ -135,15 +135,19 @@ bench-identity: .PHONY: bench-app-promotion bench-app-promotion: - make _bench PALLET=app-promotion PALLET_DIR=app-promotion + make _bench PALLET=app-promotion .PHONY: bench-maintenance bench-maintenance: make _bench PALLET=maintenance +.PHONY: bench-xcm +bench-xcm: + make _bench PALLET=xcm OUTPUT=./runtime/common/weights/xcm.rs TEMPLATE="--template=.maintain/external-weight-template.hbs" + .PHONY: bench # Disabled: bench-scheduler, bench-collator-selection, bench-identity -bench: bench-common bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-configuration bench-foreign-assets bench-maintenance +bench: bench-common bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-configuration bench-foreign-assets bench-maintenance bench-xcm .PHONY: check check: diff --git a/README.md b/README.md index 7556595cdf..0329daf7f6 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ git checkout unique-network ``` git clone https://github.com/paritytech/polkadot.git cd polkadot -git checkout release-v0.9.37 +git checkout release-v0.9.39 cargo build --release ``` diff --git a/client/rpc/src/lib.rs b/client/rpc/src/lib.rs index 3545e8caa6..1c9179ddbc 100644 --- a/client/rpc/src/lib.rs +++ b/client/rpc/src/lib.rs @@ -28,7 +28,7 @@ use up_data_structs::{ RpcCollection, CollectionId, CollectionStats, CollectionLimits, TokenId, Property, PropertyKeyPermission, TokenData, TokenChild, }; -use sp_api::{BlockId, BlockT, ProvideRuntimeApi, ApiExt}; +use sp_api::{BlockT, ProvideRuntimeApi, ApiExt}; use sp_blockchain::HeaderBackend; use up_rpc::UniqueApi as UniqueRuntimeApi; use app_promotion_rpc::AppPromotionApi as AppPromotionRuntimeApi; @@ -342,9 +342,9 @@ macro_rules! pass_method { at: Option<::Hash>, ) -> Result<$result> { let api = self.client.runtime_api(); - let at = BlockId::hash(at.unwrap_or_else(|| self.client.info().best_hash)); + let at = at.unwrap_or_else(|| self.client.info().best_hash); let _api_version = if let Ok(Some(api_version)) = - api.api_version::<$runtime_api_macro!()>(&at) + api.api_version::<$runtime_api_macro!()>(at) { api_version } else { @@ -353,9 +353,9 @@ macro_rules! pass_method { }; let result = $(if _api_version < $ver { - api.$changed_method_name(&at, $($changed_name),*).map(|r| r.map($fixer)) + api.$changed_method_name(at, $($changed_name),*).map(|r| r.map($fixer)) } else)* - { api.$method_name(&at, $($((|$map_arg: $ty| $map))? ($name)),*) }; + { api.$method_name(at, $($((|$map_arg: $ty| $map))? ($name)),*) }; Ok(result .map_err(|e| anyhow!("unable to query: {e}"))? diff --git a/node/cli/src/chain_spec.rs b/node/cli/src/chain_spec.rs index b1bcae5361..1236663ccb 100644 --- a/node/cli/src/chain_spec.rs +++ b/node/cli/src/chain_spec.rs @@ -202,6 +202,9 @@ macro_rules! testnet_genesis { accounts: BTreeMap::new(), }, ethereum: EthereumConfig {}, + foreign_assets: Default::default(), + polkadot_xcm: Default::default(), + transaction_payment: Default::default(), } }}; } @@ -252,6 +255,9 @@ macro_rules! testnet_genesis { accounts: BTreeMap::new(), }, ethereum: EthereumConfig {}, + foreign_assets: Default::default(), + polkadot_xcm: Default::default(), + transaction_payment: Default::default(), } }}; } diff --git a/node/cli/src/service.rs b/node/cli/src/service.rs index 941a623dbf..27668b43b8 100644 --- a/node/cli/src/service.rs +++ b/node/cli/src/service.rs @@ -469,7 +469,7 @@ where block_announce_validator_builder: Some(Box::new(|_| { Box::new(block_announce_validator) })), - warp_sync: None, + warp_sync_params: None, })?; let rpc_client = client.clone(); @@ -495,6 +495,7 @@ where Duration::new(6, 0), client.clone(), backend.clone(), + overrides_handle::<_, _, Runtime>(client.clone()), frontier_backend.clone(), 3, 0, @@ -587,6 +588,10 @@ where let relay_chain_slot_duration = Duration::from_secs(6); + let overseer_handle = relay_chain_interface + .overseer_handle() + .map_err(|e| sc_service::Error::Application(Box::new(e)))?; + if validator { let parachain_consensus = build_consensus( client.clone(), @@ -615,6 +620,7 @@ where collator_key: collator_key.expect("Command line arguments do not allow this. qed"), relay_chain_interface, relay_chain_slot_duration, + recovery_handle: Box::new(overseer_handle), }; start_collator(params).await?; @@ -627,6 +633,7 @@ where import_queue: import_queue_service, relay_chain_interface, relay_chain_slot_duration, + recovery_handle: Box::new(overseer_handle), }; start_full_node(params)?; @@ -900,7 +907,7 @@ where spawn_handle: task_manager.spawn_handle(), import_queue, block_announce_validator_builder: None, - warp_sync: None, + warp_sync_params: None, })?; if config.offchain_worker.enabled { @@ -1016,6 +1023,7 @@ where Duration::new(6, 0), client.clone(), backend.clone(), + overrides_handle::<_, _, Runtime>(client.clone()), frontier_backend.clone(), 3, 0, diff --git a/node/rpc/src/lib.rs b/node/rpc/src/lib.rs index d77062c38c..e1b5f89dd5 100644 --- a/node/rpc/src/lib.rs +++ b/node/rpc/src/lib.rs @@ -115,18 +115,15 @@ where let mut overrides_map = BTreeMap::new(); overrides_map.insert( EthereumStorageSchema::V1, - Box::new(SchemaV1Override::new(client.clone())) - as Box + Send + Sync>, + Box::new(SchemaV1Override::new(client.clone())) as Box + 'static>, ); overrides_map.insert( EthereumStorageSchema::V2, - Box::new(SchemaV2Override::new(client.clone())) - as Box + Send + Sync>, + Box::new(SchemaV2Override::new(client.clone())) as Box + 'static>, ); overrides_map.insert( EthereumStorageSchema::V3, - Box::new(SchemaV3Override::new(client.clone())) - as Box + Send + Sync>, + Box::new(SchemaV3Override::new(client.clone())) as Box + 'static>, ); Arc::new(OverrideHandle { diff --git a/pallets/app-promotion/Cargo.toml b/pallets/app-promotion/Cargo.toml index 2833b429b4..d35207932c 100644 --- a/pallets/app-promotion/Cargo.toml +++ b/pallets/app-promotion/Cargo.toml @@ -69,4 +69,4 @@ up-data-structs = { workspace = true } ################################################################################ # Other -log = { version = "0.4.16", default-features = false } \ No newline at end of file +log = { version = "0.4.16", default-features = false } diff --git a/pallets/collator-selection/src/benchmarking.rs b/pallets/collator-selection/src/benchmarking.rs index 8e25a76cf4..f26d357846 100644 --- a/pallets/collator-selection/src/benchmarking.rs +++ b/pallets/collator-selection/src/benchmarking.rs @@ -119,8 +119,11 @@ fn register_invulnerables(count: u32) { .collect::>(); for who in candidates { - >::add_invulnerable(T::UpdateOrigin::successful_origin(), who) - .unwrap(); + >::add_invulnerable( + T::UpdateOrigin::try_successful_origin().unwrap(), + who, + ) + .unwrap(); } } @@ -178,7 +181,7 @@ benchmarks! { Vec::new() ).unwrap(); - let root_origin = T::UpdateOrigin::successful_origin(); + let root_origin = T::UpdateOrigin::try_successful_origin().unwrap(); }: { assert_ok!( >::add_invulnerable(root_origin, new_invulnerable.clone()) @@ -193,7 +196,7 @@ benchmarks! { register_validators::(b); register_invulnerables::(b); - let root_origin = T::UpdateOrigin::successful_origin(); + let root_origin = T::UpdateOrigin::try_successful_origin().unwrap(); let leaving = >::get().last().unwrap().clone(); whitelist!(leaving); }: { @@ -304,7 +307,7 @@ benchmarks! { let leaving = >::get().last().unwrap().clone(); whitelist!(leaving); - let origin = T::UpdateOrigin::successful_origin(); + let origin = T::UpdateOrigin::try_successful_origin().unwrap(); }: { assert_ok!( >::force_release_license(origin, leaving.clone()) diff --git a/pallets/collator-selection/src/lib.rs b/pallets/collator-selection/src/lib.rs index f16a909861..47e48b97f5 100644 --- a/pallets/collator-selection/src/lib.rs +++ b/pallets/collator-selection/src/lib.rs @@ -609,10 +609,6 @@ pub mod pallet { DispatchClass::Mandatory, ); } - - fn note_uncle(_author: T::AccountId, _age: T::BlockNumber) { - //TODO can we ignore this? - } } /// Play the role of the session manager. diff --git a/pallets/collator-selection/src/mock.rs b/pallets/collator-selection/src/mock.rs index 7ba51625a5..00843262cb 100644 --- a/pallets/collator-selection/src/mock.rs +++ b/pallets/collator-selection/src/mock.rs @@ -62,7 +62,7 @@ frame_support::construct_runtime!( Aura: pallet_aura::{Pallet, Storage, Config}, Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, CollatorSelection: collator_selection::{Pallet, Call, Storage, Event}, - Authorship: pallet_authorship::{Pallet, Call, Storage, Inherent}, + Authorship: pallet_authorship::{Pallet, Storage}, Configuration: pallet_configuration::{Pallet, Call, Storage, Event}, } ); @@ -128,8 +128,6 @@ impl FindAuthor for Author4 { impl pallet_authorship::Config for Test { type FindAuthor = Author4; - type UncleGenerations = (); - type FilterUncle = (); type EventHandler = CollatorSelection; } diff --git a/pallets/common/src/lib.rs b/pallets/common/src/lib.rs index 10e41a495b..1247b1f289 100644 --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -76,9 +76,10 @@ use up_data_structs::{ CollectionMode, NFT_SPONSOR_TRANSFER_TIMEOUT, FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, MAX_SPONSOR_TIMEOUT, CUSTOM_DATA_LIMIT, CollectionLimits, CreateCollectionData, SponsorshipState, CreateItemExData, SponsoringRateLimit, budget::Budget, - PhantomType, Property, Properties, PropertiesPermissionMap, PropertyKey, PropertyValue, - PropertyPermission, PropertiesError, TokenOwnerError, PropertyKeyPermission, TokenData, - TrySetProperty, PropertyScope, CollectionPermissions, + PhantomType, Property, CollectionProperties as CollectionPropertiesT, TokenProperties, + PropertiesPermissionMap, PropertyKey, PropertyValue, PropertyPermission, PropertiesError, + TokenOwnerError, PropertyKeyPermission, TokenData, TrySetProperty, PropertyScope, + CollectionPermissions, }; use up_pov_estimate_rpc::PovInfo; @@ -800,9 +801,8 @@ pub mod pallet { pub type CollectionProperties = StorageMap< Hasher = Blake2_128Concat, Key = CollectionId, - Value = Properties, + Value = CollectionPropertiesT, QueryKind = ValueQuery, - OnEmpty = up_data_structs::CollectionProperties, >; /// Storage of token property permissions of a collection. @@ -1082,7 +1082,7 @@ impl Pallet { flags, }; - let mut collection_properties = up_data_structs::CollectionProperties::get(); + let mut collection_properties = CollectionPropertiesT::new(); collection_properties .try_set_from_iter(data.properties.into_iter()) .map_err(>::from)?; @@ -1246,9 +1246,9 @@ impl Pallet { token_id: TokenId, properties_updates: impl Iterator)>, is_token_create: bool, - mut stored_properties: Properties, + mut stored_properties: TokenProperties, is_token_owner: impl Fn() -> Result, - set_token_properties: impl FnOnce(Properties), + set_token_properties: impl FnOnce(TokenProperties), log: evm_coder::ethereum::Log, ) -> DispatchResult { let is_collection_admin = collection.is_owner_or_admin(sender); diff --git a/pallets/configuration/src/lib.rs b/pallets/configuration/src/lib.rs index 47cd247a17..3671ba7694 100644 --- a/pallets/configuration/src/lib.rs +++ b/pallets/configuration/src/lib.rs @@ -116,7 +116,7 @@ mod pallet { #[pallet::storage] pub type XcmAllowedLocationsOverride = StorageValue< - Value = BoundedVec, + Value = BoundedVec, QueryKind = OptionQuery, >; diff --git a/pallets/foreign-assets/src/benchmarking.rs b/pallets/foreign-assets/src/benchmarking.rs index 1317ed2f0d..f22bbf1dee 100644 --- a/pallets/foreign-assets/src/benchmarking.rs +++ b/pallets/foreign-assets/src/benchmarking.rs @@ -22,15 +22,14 @@ use frame_system::RawOrigin; use crate::AssetMetadata; use xcm::opaque::latest::Junction::Parachain; use xcm::VersionedMultiLocation; -use frame_support::{ - traits::{Currency}, -}; +use xcm::v3::Junctions::X1; +use frame_support::traits::Currency; use sp_std::boxed::Box; benchmarks! { register_foreign_asset { let owner: T::AccountId = account("user", 0, 1); - let location: VersionedMultiLocation = VersionedMultiLocation::from(Parachain(1000).into()); + let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(1000))); let metadata: AssetMetadata<<::Currency as Currency<::AccountId>>::Balance> = AssetMetadata{ name: "name".into(), symbol: "symbol".into(), @@ -46,7 +45,7 @@ benchmarks! { update_foreign_asset { let owner: T::AccountId = account("user", 0, 1); - let location: VersionedMultiLocation = VersionedMultiLocation::from(Parachain(2000).into()); + let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(2000))); let metadata: AssetMetadata<<::Currency as Currency<::AccountId>>::Balance> = AssetMetadata{ name: "name".into(), symbol: "symbol".into(), diff --git a/pallets/foreign-assets/src/lib.rs b/pallets/foreign-assets/src/lib.rs index a4ec234094..351b881cf6 100644 --- a/pallets/foreign-assets/src/lib.rs +++ b/pallets/foreign-assets/src/lib.rs @@ -250,7 +250,7 @@ pub mod module { #[pallet::storage] #[pallet::getter(fn foreign_asset_locations)] pub type ForeignAssetLocations = - StorageMap<_, Twox64Concat, ForeignAssetId, xcm::v2::MultiLocation, OptionQuery>; + StorageMap<_, Twox64Concat, ForeignAssetId, xcm::v3::MultiLocation, OptionQuery>; /// The storages for CurrencyIds. /// @@ -258,7 +258,7 @@ pub mod module { #[pallet::storage] #[pallet::getter(fn location_to_currency_ids)] pub type LocationToCurrencyIds = - StorageMap<_, Twox64Concat, xcm::v2::MultiLocation, ForeignAssetId, OptionQuery>; + StorageMap<_, Twox64Concat, xcm::v3::MultiLocation, ForeignAssetId, OptionQuery>; /// The storages for AssetMetadatas. /// @@ -279,6 +279,60 @@ pub mod module { #[pallet::without_storage_info] pub struct Pallet(_); + pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); + #[pallet::hooks] + impl Hooks> for Pallet { + fn on_runtime_upgrade() -> Weight { + let mut weight = Weight::default(); + // 0-1 -- xcmv2 => xcmv3 + if StorageVersion::get::>() <= 0 { + pub trait V0ToV1 { + type Pallet: 'static + PalletInfoAccess; + } + #[frame_support::storage_alias] + type LocationToCurrencyIds = + StorageMap, Twox64Concat, xcm::v2::MultiLocation, ForeignAssetId>; + >::translate_values::(|loc| { + weight += T::DbWeight::get().reads_writes(1, 1); + Some( + xcm::v3::MultiLocation::try_from(loc) + .expect("failed to migrate multilocation from XCMv2 to XCMv3"), + ) + }); + + let old_values: Vec<(xcm::v2::MultiLocation, _)> = + >::drain().collect(); + weight += T::DbWeight::get() + .reads_writes(old_values.len() as u64, old_values.len() as u64); + for (loc, asset_id) in old_values { + let loc = xcm::v3::MultiLocation::try_from(loc) + .expect("failed to migrate multilocation from XCMv2 to XCMv3"); + >::insert(loc, asset_id); + } + } + STORAGE_VERSION.put::>(); + weight += T::DbWeight::get().writes(1); + weight + } + } + + #[pallet::genesis_config] + pub struct GenesisConfig; + + #[cfg(feature = "std")] + impl Default for GenesisConfig { + fn default() -> Self { + Self + } + } + + #[pallet::genesis_build] + impl GenesisBuild for GenesisConfig { + fn build(&self) { + STORAGE_VERSION.put::>(); + } + } + #[pallet::call] impl Pallet { #[pallet::call_index(0)] @@ -474,7 +528,7 @@ impl< > WeightTrader for FreeForAll { fn new() -> Self { - Self(0, Zero::zero(), PhantomData) + Self(Weight::default(), Zero::zero(), PhantomData) } fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result { diff --git a/pallets/identity/Cargo.toml b/pallets/identity/Cargo.toml index 22277c2cb9..18f9415e5d 100644 --- a/pallets/identity/Cargo.toml +++ b/pallets/identity/Cargo.toml @@ -35,6 +35,7 @@ runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", ] std = [ "codec/std", diff --git a/pallets/identity/src/benchmarking.rs b/pallets/identity/src/benchmarking.rs index 52abeb0dc9..38602ee10c 100644 --- a/pallets/identity/src/benchmarking.rs +++ b/pallets/identity/src/benchmarking.rs @@ -59,7 +59,7 @@ fn add_registrars(r: u32) -> Result<(), &'static str> { let registrar: T::AccountId = account("registrar", i, SEED); let registrar_lookup = T::Lookup::unlookup(registrar.clone()); let _ = T::Currency::make_free_balance_be(®istrar, BalanceOf::::max_value()); - let registrar_origin = T::RegistrarOrigin::successful_origin(); + let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap(); Identity::::add_registrar(registrar_origin, registrar_lookup)?; Identity::::set_fee(RawOrigin::Signed(registrar.clone()).into(), i, 10u32.into())?; let fields = IdentityFields( @@ -142,7 +142,7 @@ benchmarks! { add_registrar { let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::(r)?; ensure!(Registrars::::get().len() as u32 == r, "Registrars not set up correctly."); - let origin = T::RegistrarOrigin::successful_origin(); + let origin = T::RegistrarOrigin::try_successful_origin().unwrap(); let account = T::Lookup::unlookup(account("registrar", r + 1, SEED)); }: _(origin, account) verify { @@ -301,7 +301,7 @@ benchmarks! { let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::(r)?; - let registrar_origin = T::RegistrarOrigin::successful_origin(); + let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap(); Identity::::add_registrar(registrar_origin, caller_lookup)?; let registrars = Registrars::::get(); ensure!(registrars[r as usize].as_ref().unwrap().fee == 0u32.into(), "Fee already set."); @@ -318,7 +318,7 @@ benchmarks! { let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::(r)?; - let registrar_origin = T::RegistrarOrigin::successful_origin(); + let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap(); Identity::::add_registrar(registrar_origin, caller_lookup)?; let registrars = Registrars::::get(); ensure!(registrars[r as usize].as_ref().unwrap().account == caller, "id not set."); @@ -336,7 +336,7 @@ benchmarks! { let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::(r)?; - let registrar_origin = T::RegistrarOrigin::successful_origin(); + let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap(); Identity::::add_registrar(registrar_origin, caller_lookup)?; let fields = IdentityFields( IdentityField::Display | IdentityField::Legal | IdentityField::Web | IdentityField::Riot @@ -368,7 +368,7 @@ benchmarks! { let info_hash = T::Hashing::hash_of(&info); Identity::::set_identity(user_origin.clone(), Box::new(info))?; - let registrar_origin = T::RegistrarOrigin::successful_origin(); + let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap(); Identity::::add_registrar(registrar_origin, caller_lookup)?; Identity::::request_judgement(user_origin, r, 10u32.into())?; }: _(RawOrigin::Signed(caller), r, user_lookup, Judgement::Reasonable, info_hash) @@ -406,7 +406,7 @@ benchmarks! { )?; } ensure!(IdentityOf::::contains_key(&target), "Identity not set"); - let origin = T::ForceOrigin::successful_origin(); + let origin = T::ForceOrigin::try_successful_origin().unwrap(); }: _(origin, target_lookup) verify { ensure!(!IdentityOf::::contains_key(&target), "Identity not removed"); @@ -424,14 +424,14 @@ benchmarks! { info: create_identity_info::(x), }, )).collect::>(); - let origin = T::ForceOrigin::successful_origin(); + let origin = T::ForceOrigin::try_successful_origin().unwrap(); }: _(origin, identities) force_remove_identities { let x in 0 .. T::MaxAdditionalFields::get(); let n in 0..600; use frame_benchmarking::account; - let origin = T::ForceOrigin::successful_origin(); + let origin = T::ForceOrigin::try_successful_origin().unwrap(); let identities = (0..n).map(|i| ( account("caller", i, SEED), Registration::, T::MaxRegistrars, T::MaxAdditionalFields> { @@ -460,7 +460,7 @@ benchmarks! { ), ) }).collect::>(); - let origin = T::ForceOrigin::successful_origin(); + let origin = T::ForceOrigin::try_successful_origin().unwrap(); }: _(origin, identities) add_sub { diff --git a/pallets/nonfungible/src/lib.rs b/pallets/nonfungible/src/lib.rs index d33d7c48c8..41c710ab02 100644 --- a/pallets/nonfungible/src/lib.rs +++ b/pallets/nonfungible/src/lib.rs @@ -102,8 +102,8 @@ use frame_support::{ use up_data_structs::{ AccessMode, CollectionId, CollectionFlags, CustomDataLimit, TokenId, CreateCollectionData, CreateNftExData, mapping::TokenAddressMapping, budget::Budget, Property, PropertyKey, - PropertyValue, PropertyKeyPermission, Properties, PropertyScope, TrySetProperty, TokenChild, - AuxPropertyValue, PropertiesPermissionMap, + PropertyValue, PropertyKeyPermission, PropertyScope, TrySetProperty, TokenChild, + AuxPropertyValue, PropertiesPermissionMap, TokenProperties as TokenPropertiesT, }; use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm}; use pallet_common::{ @@ -201,9 +201,8 @@ pub mod pallet { #[pallet::getter(fn token_properties)] pub type TokenProperties = StorageNMap< Key = (Key, Key), - Value = Properties, + Value = TokenPropertiesT, QueryKind = ValueQuery, - OnEmpty = up_data_structs::TokenProperties, >; /// Custom data of a token that is serialized to bytes, diff --git a/pallets/nonfungible/src/weights.rs b/pallets/nonfungible/src/weights.rs deleted file mode 100644 index b776d4e447..0000000000 --- a/pallets/nonfungible/src/weights.rs +++ /dev/null @@ -1,410 +0,0 @@ -// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs - -//! Autogenerated weights for pallet_nonfungible -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-02-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 - -// Executed Command: -// target/release/unique-collator -// benchmark -// pallet -// --pallet -// pallet-nonfungible -// --wasm-execution -// compiled -// --extrinsic -// * -// --template -// .maintain/frame-weight-template.hbs -// --steps=50 -// --repeat=80 -// --heap-pages=4096 -// --output=./pallets/nonfungible/src/weights.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] -#![allow(missing_docs)] -#![allow(clippy::unnecessary_cast)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for pallet_nonfungible. -pub trait WeightInfo { - fn create_item() -> Weight; - fn create_multiple_items(b: u32, ) -> Weight; - fn create_multiple_items_ex(b: u32, ) -> Weight; - fn burn_item() -> Weight; - fn burn_recursively_self_raw() -> Weight; - fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight; - fn transfer() -> Weight; - fn approve() -> Weight; - fn approve_from() -> Weight; - fn transfer_from() -> Weight; - fn burn_from() -> Weight; - fn set_token_property_permissions(b: u32, ) -> Weight; - fn set_token_properties(b: u32, ) -> Weight; - fn delete_token_properties(b: u32, ) -> Weight; - fn token_owner() -> Weight; - fn set_allowance_for_all() -> Weight; - fn allowance_for_all() -> Weight; - fn repair_item() -> Weight; -} - -/// Weights for pallet_nonfungible using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { - // Storage: Nonfungible TokensMinted (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Nonfungible TokenData (r:0 w:1) - // Storage: Nonfungible Owned (r:0 w:1) - fn create_item() -> Weight { - Weight::from_ref_time(35_333_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokensMinted (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible TokenProperties (r:4 w:4) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Nonfungible TokenData (r:0 w:4) - // Storage: Nonfungible Owned (r:0 w:4) - fn create_multiple_items(b: u32, ) -> Weight { - Weight::from_ref_time(19_091_371 as u64) - // Standard Error: 3_221 - .saturating_add(Weight::from_ref_time(7_304_849 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - .saturating_add(T::DbWeight::get().writes((3 as u64).saturating_mul(b as u64))) - } - // Storage: Nonfungible TokensMinted (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:4 w:4) - // Storage: Nonfungible TokenProperties (r:4 w:4) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Nonfungible TokenData (r:0 w:4) - // Storage: Nonfungible Owned (r:0 w:4) - fn create_multiple_items_ex(b: u32, ) -> Weight { - Weight::from_ref_time(12_655_339 as u64) - // Standard Error: 3_655 - .saturating_add(Weight::from_ref_time(9_051_919 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - .saturating_add(T::DbWeight::get().writes((4 as u64).saturating_mul(b as u64))) - } - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) - fn burn_item() -> Weight { - Weight::from_ref_time(34_068_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) - fn burn_recursively_self_raw() -> Weight { - Weight::from_ref_time(44_840_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) - // Storage: Common CollectionById (r:1 w:0) - fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight { - Weight::from_ref_time(44_567_000 as u64) - // Standard Error: 1_014_743 - .saturating_add(Weight::from_ref_time(209_619_240 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(7 as u64)) - .saturating_add(T::DbWeight::get().reads((4 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(6 as u64)) - .saturating_add(T::DbWeight::get().writes((4 as u64).saturating_mul(b as u64))) - } - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:2 w:2) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:2) - fn transfer() -> Weight { - Weight::from_ref_time(29_508_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokenData (r:1 w:0) - // Storage: Nonfungible Allowance (r:1 w:1) - fn approve() -> Weight { - Weight::from_ref_time(22_168_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenData (r:1 w:0) - // Storage: Nonfungible Allowance (r:1 w:1) - fn approve_from() -> Weight { - Weight::from_ref_time(22_063_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible Allowance (r:1 w:1) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:2 w:2) - // Storage: Nonfungible Owned (r:0 w:2) - fn transfer_from() -> Weight { - Weight::from_ref_time(36_386_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(6 as u64)) - } - // Storage: Nonfungible Allowance (r:1 w:1) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) - fn burn_from() -> Weight { - Weight::from_ref_time(42_499_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(6 as u64)) - } - // Storage: Common CollectionPropertyPermissions (r:1 w:1) - fn set_token_property_permissions(b: u32, ) -> Weight { - Weight::from_ref_time(5_317_000 as u64) - // Standard Error: 42_045 - .saturating_add(Weight::from_ref_time(12_179_871 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - fn set_token_properties(b: u32, ) -> Weight { - Weight::from_ref_time(15_428_000 as u64) - // Standard Error: 58_002 - .saturating_add(Weight::from_ref_time(7_195_842 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - fn delete_token_properties(b: u32, ) -> Weight { - Weight::from_ref_time(15_498_000 as u64) - // Standard Error: 68_276 - .saturating_add(Weight::from_ref_time(22_441_281 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenData (r:1 w:0) - fn token_owner() -> Weight { - Weight::from_ref_time(7_006_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - } - // Storage: Nonfungible CollectionAllowance (r:0 w:1) - fn set_allowance_for_all() -> Weight { - Weight::from_ref_time(16_761_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible CollectionAllowance (r:1 w:0) - fn allowance_for_all() -> Weight { - Weight::from_ref_time(5_577_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - } - // Storage: Nonfungible TokenProperties (r:1 w:1) - fn repair_item() -> Weight { - Weight::from_ref_time(7_670_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } -} - -// For backwards compatibility and tests -impl WeightInfo for () { - // Storage: Nonfungible TokensMinted (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Nonfungible TokenData (r:0 w:1) - // Storage: Nonfungible Owned (r:0 w:1) - fn create_item() -> Weight { - Weight::from_ref_time(35_333_000 as u64) - .saturating_add(RocksDbWeight::get().reads(4 as u64)) - .saturating_add(RocksDbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokensMinted (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible TokenProperties (r:4 w:4) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Nonfungible TokenData (r:0 w:4) - // Storage: Nonfungible Owned (r:0 w:4) - fn create_multiple_items(b: u32, ) -> Weight { - Weight::from_ref_time(19_091_371 as u64) - // Standard Error: 3_221 - .saturating_add(Weight::from_ref_time(7_304_849 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(3 as u64)) - .saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(RocksDbWeight::get().writes(2 as u64)) - .saturating_add(RocksDbWeight::get().writes((3 as u64).saturating_mul(b as u64))) - } - // Storage: Nonfungible TokensMinted (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:4 w:4) - // Storage: Nonfungible TokenProperties (r:4 w:4) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Nonfungible TokenData (r:0 w:4) - // Storage: Nonfungible Owned (r:0 w:4) - fn create_multiple_items_ex(b: u32, ) -> Weight { - Weight::from_ref_time(12_655_339 as u64) - // Standard Error: 3_655 - .saturating_add(Weight::from_ref_time(9_051_919 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().reads((2 as u64).saturating_mul(b as u64))) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - .saturating_add(RocksDbWeight::get().writes((4 as u64).saturating_mul(b as u64))) - } - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) - fn burn_item() -> Weight { - Weight::from_ref_time(34_068_000 as u64) - .saturating_add(RocksDbWeight::get().reads(5 as u64)) - .saturating_add(RocksDbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) - fn burn_recursively_self_raw() -> Weight { - Weight::from_ref_time(44_840_000 as u64) - .saturating_add(RocksDbWeight::get().reads(5 as u64)) - .saturating_add(RocksDbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) - // Storage: Common CollectionById (r:1 w:0) - fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight { - Weight::from_ref_time(44_567_000 as u64) - // Standard Error: 1_014_743 - .saturating_add(Weight::from_ref_time(209_619_240 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(7 as u64)) - .saturating_add(RocksDbWeight::get().reads((4 as u64).saturating_mul(b as u64))) - .saturating_add(RocksDbWeight::get().writes(6 as u64)) - .saturating_add(RocksDbWeight::get().writes((4 as u64).saturating_mul(b as u64))) - } - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:2 w:2) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:2) - fn transfer() -> Weight { - Weight::from_ref_time(29_508_000 as u64) - .saturating_add(RocksDbWeight::get().reads(4 as u64)) - .saturating_add(RocksDbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokenData (r:1 w:0) - // Storage: Nonfungible Allowance (r:1 w:1) - fn approve() -> Weight { - Weight::from_ref_time(22_168_000 as u64) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenData (r:1 w:0) - // Storage: Nonfungible Allowance (r:1 w:1) - fn approve_from() -> Weight { - Weight::from_ref_time(22_063_000 as u64) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible Allowance (r:1 w:1) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:2 w:2) - // Storage: Nonfungible Owned (r:0 w:2) - fn transfer_from() -> Weight { - Weight::from_ref_time(36_386_000 as u64) - .saturating_add(RocksDbWeight::get().reads(4 as u64)) - .saturating_add(RocksDbWeight::get().writes(6 as u64)) - } - // Storage: Nonfungible Allowance (r:1 w:1) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) - fn burn_from() -> Weight { - Weight::from_ref_time(42_499_000 as u64) - .saturating_add(RocksDbWeight::get().reads(5 as u64)) - .saturating_add(RocksDbWeight::get().writes(6 as u64)) - } - // Storage: Common CollectionPropertyPermissions (r:1 w:1) - fn set_token_property_permissions(b: u32, ) -> Weight { - Weight::from_ref_time(5_317_000 as u64) - // Standard Error: 42_045 - .saturating_add(Weight::from_ref_time(12_179_871 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - fn set_token_properties(b: u32, ) -> Weight { - Weight::from_ref_time(15_428_000 as u64) - // Standard Error: 58_002 - .saturating_add(Weight::from_ref_time(7_195_842 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - fn delete_token_properties(b: u32, ) -> Weight { - Weight::from_ref_time(15_498_000 as u64) - // Standard Error: 68_276 - .saturating_add(Weight::from_ref_time(22_441_281 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenData (r:1 w:0) - fn token_owner() -> Weight { - Weight::from_ref_time(7_006_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - } - // Storage: Nonfungible CollectionAllowance (r:0 w:1) - fn set_allowance_for_all() -> Weight { - Weight::from_ref_time(16_761_000 as u64) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible CollectionAllowance (r:1 w:0) - fn allowance_for_all() -> Weight { - Weight::from_ref_time(5_577_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - } - // Storage: Nonfungible TokenProperties (r:1 w:1) - fn repair_item() -> Weight { - Weight::from_ref_time(7_670_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } -} diff --git a/pallets/refungible/src/benchmarking.rs b/pallets/refungible/src/benchmarking.rs index c73a966ae0..8555e918e9 100644 --- a/pallets/refungible/src/benchmarking.rs +++ b/pallets/refungible/src/benchmarking.rs @@ -297,7 +297,7 @@ benchmarks! { sender: cross_from_sub(owner); owner: cross_sub; }; let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?; - }: {>::token_owner(collection.id, item)} + }: {>::token_owner(collection.id, item).unwrap()} set_allowance_for_all { bench_init!{ diff --git a/pallets/refungible/src/lib.rs b/pallets/refungible/src/lib.rs index 934b43b5e9..8d96adc65d 100644 --- a/pallets/refungible/src/lib.rs +++ b/pallets/refungible/src/lib.rs @@ -108,6 +108,7 @@ use up_data_structs::{ mapping::TokenAddressMapping, MAX_REFUNGIBLE_PIECES, Property, PropertyKey, PropertyKeyPermission, PropertyScope, PropertyValue, TokenId, TrySetProperty, PropertiesPermissionMap, CreateRefungibleExMultipleOwners, TokenOwnerError, + TokenProperties as TokenPropertiesT, }; pub use pallet::*; @@ -175,9 +176,8 @@ pub mod pallet { #[pallet::getter(fn token_properties)] pub type TokenProperties = StorageNMap< Key = (Key, Key), - Value = up_data_structs::Properties, + Value = TokenPropertiesT, QueryKind = ValueQuery, - OnEmpty = up_data_structs::TokenProperties, >; /// Total amount of pieces for token diff --git a/pallets/scheduler-v2/Cargo.toml b/pallets/scheduler-v2/Cargo.toml index 6f4e1e1692..fd8e975ca7 100644 --- a/pallets/scheduler-v2/Cargo.toml +++ b/pallets/scheduler-v2/Cargo.toml @@ -25,7 +25,7 @@ sp-std = { workspace = true } [dev-dependencies] pallet-preimage = { workspace = true } -substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } [features] default = ["std"] diff --git a/primitives/common/src/constants.rs b/primitives/common/src/constants.rs index 0d41a16f9c..56b000ef49 100644 --- a/primitives/common/src/constants.rs +++ b/primitives/common/src/constants.rs @@ -19,7 +19,7 @@ use frame_support::{ parameter_types, weights::{Weight, constants::WEIGHT_REF_TIME_PER_SECOND}, }; -use cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE; +use cumulus_primitives_core::relay_chain::MAX_POV_SIZE; use crate::types::{BlockNumber, Balance}; pub const MILLISECS_PER_BLOCK: u64 = 12000; diff --git a/primitives/data-structs/src/lib.rs b/primitives/data-structs/src/lib.rs index 003c131e72..45d2f6fbd9 100644 --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -24,10 +24,7 @@ use core::{ convert::{TryFrom, TryInto}, fmt, }; -use frame_support::{ - storage::{bounded_btree_map::BoundedBTreeMap, bounded_btree_set::BoundedBTreeSet}, - traits::Get, -}; +use frame_support::storage::{bounded_btree_map::BoundedBTreeMap, bounded_btree_set::BoundedBTreeSet}; #[cfg(feature = "serde")] use serde::{Serialize, Deserialize}; @@ -1200,6 +1197,12 @@ impl PropertiesMap { self.0.contains_key(key) } + fn metadata_encoded_len() -> usize { + // Max length of key length + max length of value length for max properties + // + max length of table size length + (4 * 4) * (MAX_PROPERTIES_PER_ITEM as usize) + 4 + } + /// Check if map contains key with key validation. fn check_property_key(key: &PropertyKey) -> Result<(), PropertiesError> { if key.is_empty() { @@ -1259,20 +1262,34 @@ impl TrySetProperty for PropertiesMap { pub type PropertiesPermissionMap = PropertiesMap; /// Wrapper for properties map with consumed space control. -#[derive(Encode, Decode, TypeInfo, Clone, PartialEq, MaxEncodedLen)] -pub struct Properties { +#[derive(Encode, Decode, TypeInfo, Clone, PartialEq)] +pub struct Properties { map: PropertiesMap, consumed_space: u32, space_limit: u32, } -impl Properties { +impl MaxEncodedLen for Properties { + fn max_encoded_len() -> usize { + >::metadata_encoded_len() + + (u32::max_encoded_len() * 2) + + S as usize + } +} + +impl Default for Properties { + fn default() -> Self { + Self::new() + } +} + +impl Properties { /// Create new properies container. - pub fn new(space_limit: u32) -> Self { + pub fn new() -> Self { Self { map: PropertiesMap::new(), consumed_space: 0, - space_limit, + space_limit: u32::MAX, } } @@ -1300,7 +1317,7 @@ impl Properties { } } -impl IntoIterator for Properties { +impl IntoIterator for Properties { type Item = (PropertyKey, PropertyValue); type IntoIter = as IntoIterator>::IntoIter; @@ -1309,7 +1326,7 @@ impl IntoIterator for Properties { } } -impl TrySetProperty for Properties { +impl TrySetProperty for Properties { type Value = PropertyValue; fn try_scoped_set( @@ -1320,7 +1337,7 @@ impl TrySetProperty for Properties { ) -> Result, PropertiesError> { let value_len = value.len(); - if self.consumed_space as usize + value_len > self.space_limit as usize + if self.consumed_space as usize + value_len > self.space_limit.min(S) as usize && !cfg!(feature = "runtime-benchmarks") { return Err(PropertiesError::NoSpaceForProperty); @@ -1341,20 +1358,5 @@ impl TrySetProperty for Properties { } } -/// Utility struct for using in `StorageMap`. -pub struct CollectionProperties; - -impl Get for CollectionProperties { - fn get() -> Properties { - Properties::new(MAX_COLLECTION_PROPERTIES_SIZE) - } -} - -/// Utility struct for using in `StorageMap`. -pub struct TokenProperties; - -impl Get for TokenProperties { - fn get() -> Properties { - Properties::new(MAX_TOKEN_PROPERTIES_SIZE) - } -} +pub type CollectionProperties = Properties; +pub type TokenProperties = Properties; diff --git a/runtime/common/config/ethereum.rs b/runtime/common/config/ethereum.rs index d18dc539f3..b9a76fb840 100644 --- a/runtime/common/config/ethereum.rs +++ b/runtime/common/config/ethereum.rs @@ -15,6 +15,7 @@ use crate::{ Runtime, Aura, Balances, RuntimeEvent, ChainId, }; use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping}; +use pallet_ethereum::PostLogContent; use up_common::constants::*; pub type CrossAccountId = pallet_evm::account::BasicCrossAccountId; @@ -88,9 +89,14 @@ impl pallet_evm_migration::Config for Runtime { type WeightInfo = pallet_evm_migration::weights::SubstrateWeight; } +parameter_types! { + pub const PostBlockAndTxnHashes: PostLogContent = PostLogContent::BlockAndTxnHashes; +} + impl pallet_ethereum::Config for Runtime { type RuntimeEvent = RuntimeEvent; type StateRoot = pallet_ethereum::IntermediateStateRoot; + type PostLogContent = PostBlockAndTxnHashes; } parameter_types! { diff --git a/runtime/common/config/orml.rs b/runtime/common/config/orml.rs index 8c9ea495f6..41fe0ee6ba 100644 --- a/runtime/common/config/orml.rs +++ b/runtime/common/config/orml.rs @@ -21,8 +21,7 @@ use frame_support::{ use frame_system::EnsureSigned; use orml_traits::{location::AbsoluteReserveProvider, parameter_type_with_key}; use sp_runtime::traits::Convert; -use xcm::latest::{Weight, Junction::*, Junctions::*, MultiLocation, NetworkId}; -use xcm_builder::LocationInverter; +use xcm::latest::{Weight, Junction::*, Junctions::*, MultiLocation}; use xcm_executor::XcmExecutor; use sp_std::{vec, vec::Vec}; use pallet_foreign_assets::{CurrencyId, NativeCurrency}; @@ -30,7 +29,7 @@ use crate::{ Runtime, RuntimeEvent, RelayChainBlockNumberProvider, runtime_common::config::{ xcm::{ - SelfLocation, Weigher, XcmConfig, Ancestry, + SelfLocation, Weigher, XcmConfig, UniversalLocation, xcm_assets::{CurrencyIdConvert}, }, pallets::TreasuryAccountId, @@ -50,7 +49,7 @@ parameter_types! { pub const MinVestedTransfer: Balance = 10 * UNIQUE; pub const MaxVestingSchedules: u32 = 28; - pub const BaseXcmWeight: Weight = 100_000_000; // TODO: recheck this + pub const BaseXcmWeight: Weight = Weight::from_parts(100_000_000, 1000); // ? TODO: recheck this pub const MaxAssetsForTransfer: usize = 2; } @@ -87,7 +86,7 @@ pub struct AccountIdToMultiLocation; impl Convert for AccountIdToMultiLocation { fn convert(account: AccountId) -> MultiLocation { X1(AccountId32 { - network: NetworkId::Any, + network: None, id: account.into(), }) .into() @@ -142,9 +141,9 @@ impl orml_xtokens::Config for Runtime { type XcmExecutor = XcmExecutor>; type Weigher = Weigher; type BaseXcmWeight = BaseXcmWeight; - type LocationInverter = LocationInverter; type MaxAssetsForTransfer = MaxAssetsForTransfer; type MinXcmFee = ParachainMinFee; type MultiLocationsFilter = Everything; type ReserveProvider = AbsoluteReserveProvider; + type UniversalLocation = UniversalLocation; } diff --git a/runtime/common/config/pallets/collator_selection.rs b/runtime/common/config/pallets/collator_selection.rs index 9f879ad10f..0eab66e682 100644 --- a/runtime/common/config/pallets/collator_selection.rs +++ b/runtime/common/config/pallets/collator_selection.rs @@ -48,8 +48,6 @@ parameter_types! { impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type UncleGenerations = UncleGenerations; - type FilterUncle = (); type EventHandler = CollatorSelection; } diff --git a/runtime/common/config/substrate.rs b/runtime/common/config/substrate.rs index ee0e1d55fa..9aff7da9f9 100644 --- a/runtime/common/config/substrate.rs +++ b/runtime/common/config/substrate.rs @@ -115,8 +115,6 @@ impl frame_system::Config for Runtime { type MaxConsumers = ConstU32<16>; } -impl pallet_randomness_collective_flip::Config for Runtime {} - parameter_types! { pub const MinimumPeriod: u64 = SLOT_DURATION / 2; } diff --git a/runtime/common/config/xcm/foreignassets.rs b/runtime/common/config/xcm/foreignassets.rs index 5a1f552b27..98a3181d5f 100644 --- a/runtime/common/config/xcm/foreignassets.rs +++ b/runtime/common/config/xcm/foreignassets.rs @@ -15,13 +15,13 @@ // along with Unique Network. If not, see . use frame_support::{ - traits::{Contains, Get, fungibles}, + traits::{Contains, Get, fungibles, ContainsPair}, parameter_types, }; use sp_runtime::traits::Convert; use xcm::latest::{MultiAsset, Junction::*, MultiLocation, Junctions::*}; -use xcm_builder::{FungiblesAdapter, ConvertedConcreteAssetId}; -use xcm_executor::traits::{Convert as ConvertXcm, JustTry, FilterAssetLocation}; +use xcm_builder::{FungiblesAdapter, NonLocalMint, ConvertedConcreteId}; +use xcm_executor::traits::{Convert as ConvertXcm, JustTry}; use pallet_foreign_assets::{ AssetIds, AssetIdMapping, XcmForeignAssetIdMapping, NativeCurrency, FreeForAll, TryAsForeign, ForeignAssetId, CurrencyId, @@ -126,13 +126,13 @@ pub type FungiblesTransactor = FungiblesAdapter< // Use this fungibles implementation: ForeignAssets, // Use this currency when it is a fungible asset matching the given location or name: - ConvertedConcreteAssetId, JustTry>, + ConvertedConcreteId, JustTry>, // Convert an XCM MultiLocation into a local account id: LocationToAccountId, // Our chain's account ID type (we can't get away without mentioning it explicitly): AccountId, // No teleports are allowed - NoTeleports, + NonLocalMint>, // The account to use for tracking teleports. CheckingAccount, >; @@ -141,8 +141,10 @@ pub type FungiblesTransactor = FungiblesAdapter< pub type AssetTransactors = FungiblesTransactor; pub struct AllAsset; -impl FilterAssetLocation for AllAsset { - fn filter_asset_location(_asset: &MultiAsset, _origin: &MultiLocation) -> bool { +impl ContainsPair for AllAsset { + fn contains(_asset: &MultiAsset, _origin: &MultiLocation) -> bool { + // ? Shouldn't we query foreign-asset pallet here, because of the new non-local mint + // location logic? true } } diff --git a/runtime/common/config/xcm/mod.rs b/runtime/common/config/xcm/mod.rs index 247519dc76..716a0c0cc6 100644 --- a/runtime/common/config/xcm/mod.rs +++ b/runtime/common/config/xcm/mod.rs @@ -15,23 +15,24 @@ // along with Unique Network. If not, see . use frame_support::{ - traits::{Everything, Get}, + traits::{Everything, Nothing, Get, ConstU32}, parameter_types, }; use frame_system::EnsureRoot; use pallet_xcm::XcmPassthrough; use polkadot_parachain::primitives::Sibling; use xcm::latest::{prelude::*, Weight, MultiLocation}; +use xcm::v3::Instruction; use xcm_builder::{ - AccountId32Aliases, EnsureXcmOrigin, FixedWeightBounds, LocationInverter, ParentAsSuperuser, - RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, - SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, ParentIsPreset, + AccountId32Aliases, EnsureXcmOrigin, FixedWeightBounds, ParentAsSuperuser, RelayChainAsNative, + SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, ParentIsPreset, }; use xcm_executor::{Config, XcmExecutor, traits::ShouldExecute}; use sp_std::{marker::PhantomData, vec::Vec}; use crate::{ Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, ParachainInfo, ParachainSystem, PolkadotXcm, - XcmpQueue, xcm_barrier::Barrier, RelayNetwork, + XcmpQueue, xcm_barrier::Barrier, RelayNetwork, AllPalletsWithSystem, Balances, }; use up_common::types::AccountId; @@ -54,10 +55,11 @@ parameter_types! { pub const RelayLocation: MultiLocation = MultiLocation::parent(); pub RelayOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); + pub UniversalLocation: InteriorMultiLocation = Parachain(ParachainInfo::get().into()).into(); pub SelfLocation: MultiLocation = MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into()))); // One XCM operation is 1_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: Weight = 1_000_000; + pub UnitWeightCost: Weight = Weight::from_parts(1_000_000, 1000); // ? pub const MaxInstructions: u32 = 100; } @@ -80,7 +82,7 @@ pub type LocalOriginToLocation = (SignedToAccountId32, + cumulus_primitives_utility::ParentAsUmp, // ..and XCMP to communicate with the sibling chains. XcmpQueue, ); @@ -110,12 +112,12 @@ pub type XcmOriginToTransactDispatchOrigin = ( ); pub trait TryPass { - fn try_pass(origin: &MultiLocation, message: &mut Xcm) -> Result<(), ()>; + fn try_pass(origin: &MultiLocation, message: &mut [Instruction]) -> Result<(), ()>; } #[impl_trait_for_tuples::impl_for_tuples(30)] impl TryPass for Tuple { - fn try_pass(origin: &MultiLocation, message: &mut Xcm) -> Result<(), ()> { + fn try_pass(origin: &MultiLocation, message: &mut [Instruction]) -> Result<(), ()> { for_tuples!( #( Tuple::try_pass(origin, message)?; )* ); @@ -126,9 +128,11 @@ impl TryPass for Tuple { pub struct DenyTransact; impl TryPass for DenyTransact { - fn try_pass(_origin: &MultiLocation, message: &mut Xcm) -> Result<(), ()> { + fn try_pass( + _origin: &MultiLocation, + message: &mut [Instruction], + ) -> Result<(), ()> { let transact_inst = message - .0 .iter() .find(|inst| matches![inst, Instruction::Transact { .. }]); @@ -159,7 +163,7 @@ where { fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + message: &mut [Instruction], max_weight: Weight, weight_credit: &mut Weight, ) -> Result<(), ()> { @@ -171,22 +175,19 @@ where // Allow xcm exchange only with locations in list pub struct DenyExchangeWithUnknownLocation(PhantomData); impl>> TryPass for DenyExchangeWithUnknownLocation { - fn try_pass(origin: &MultiLocation, message: &mut Xcm) -> Result<(), ()> { + fn try_pass(origin: &MultiLocation, message: &mut [Instruction]) -> Result<(), ()> { let allowed_locations = T::get(); // Check if deposit or transfer belongs to allowed parachains let mut allowed = allowed_locations.contains(origin); - message.0.iter().for_each(|inst| match inst { - DepositReserveAsset { dest: dst, .. } => { - allowed |= allowed_locations.contains(dst); - } - TransferReserveAsset { dest: dst, .. } => { - allowed |= allowed_locations.contains(dst); - } - InitiateReserveWithdraw { reserve: dst, .. } => { - allowed |= allowed_locations.contains(dst); + message.iter().for_each(|inst| match inst { + DepositReserveAsset { dest: dst, .. } + | TransferReserveAsset { dest: dst, .. } + | InitiateReserveWithdraw { reserve: dst, .. } => { + allowed |= allowed_locations.contains(&dst); } + // ? There are more instructions worth checking _ => {} }); @@ -217,15 +218,29 @@ where type OriginConverter = XcmOriginToTransactDispatchOrigin; type IsReserve = IsReserve; type IsTeleporter = (); // Teleportation is disabled - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = Weigher; type Trader = Trader; type ResponseHandler = PolkadotXcm; type SubscriptionService = PolkadotXcm; + type PalletInstancesInfo = AllPalletsWithSystem; + type MaxAssetsIntoHolding = ConstU32<64>; type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; + type AssetLocker = (); + type AssetExchanger = (); + type FeeManager = (); + type MessageExporter = (); + type UniversalAliases = Nothing; // ? + type CallDispatcher = RuntimeCall; + type SafeCallFilter = Nothing; // ? Only non-recursive calls may go here, but do we need this? +} + +#[cfg(feature = "runtime-benchmarks")] +parameter_types! { + pub ReachableDest: Option = Some(Parent.into()); } impl pallet_xcm::Config for Runtime { @@ -238,11 +253,19 @@ impl pallet_xcm::Config for Runtime { type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; type Weigher = FixedWeightBounds; - type LocationInverter = LocationInverter; type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type UniversalLocation = UniversalLocation; + type Currency = Balances; + type CurrencyMatcher = (); // ? + type TrustedLockers = (); + type SovereignAccountOf = (); + type MaxLockers = ConstU32<8>; + type WeightInfo = crate::weights::xcm::SubstrateWeight; + #[cfg(feature = "runtime-benchmarks")] + type ReachableDest = ReachableDest; } impl cumulus_pallet_xcm::Config for Runtime { @@ -259,6 +282,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { type ExecuteOverweightOrigin = frame_system::EnsureRoot; type ControllerOrigin = EnsureRoot; type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; + type PriceForSiblingDelivery = (); } impl cumulus_pallet_dmp_queue::Config for Runtime { diff --git a/runtime/common/construct_runtime.rs b/runtime/common/construct_runtime.rs index 7208460feb..fddbd6991b 100644 --- a/runtime/common/construct_runtime.rs +++ b/runtime/common/construct_runtime.rs @@ -16,99 +16,99 @@ #[macro_export] macro_rules! construct_runtime { - () => { - frame_support::construct_runtime! { + () => { + frame_support::construct_runtime! { - pub enum Runtime where - Block = Block, - NodeBlock = opaque::Block, - UncheckedExtrinsic = UncheckedExtrinsic - { - System: frame_system = 0, + pub enum Runtime where + Block = Block, + NodeBlock = opaque::Block, + UncheckedExtrinsic = UncheckedExtrinsic + { + System: frame_system = 0, - ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Config, Storage, Inherent, Event, ValidateUnsigned} = 20, - ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21, + ParachainSystem: cumulus_pallet_parachain_system = 20, + ParachainInfo: parachain_info = 21, - #[cfg(feature = "collator-selection")] - Authorship: pallet_authorship::{Pallet, Call, Storage} = 22, + #[cfg(feature = "collator-selection")] + Authorship: pallet_authorship = 22, - #[cfg(feature = "collator-selection")] - CollatorSelection: pallet_collator_selection::{Pallet, Call, Storage, Event, Config} = 23, + #[cfg(feature = "collator-selection")] + CollatorSelection: pallet_collator_selection = 23, - #[cfg(feature = "collator-selection")] - Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 24, + #[cfg(feature = "collator-selection")] + Session: pallet_session = 24, - Aura: pallet_aura::{Pallet, Storage, Config} = 25, - AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 26, + Aura: pallet_aura = 25, + AuraExt: cumulus_pallet_aura_ext = 26, - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 30, - RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Storage} = 31, - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 32, - TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event} = 33, - Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event} = 34, - Sudo: pallet_sudo::{Pallet, Call, Storage, Config, Event} = 35, - Vesting: orml_vesting::{Pallet, Storage, Call, Event, Config} = 37, + Balances: pallet_balances = 30, + // RandomnessCollectiveFlip = 31 + Timestamp: pallet_timestamp = 32, + TransactionPayment: pallet_transaction_payment = 33, + Treasury: pallet_treasury = 34, + Sudo: pallet_sudo = 35, + Vesting: orml_vesting = 37, - XTokens: orml_xtokens = 38, - Tokens: orml_tokens = 39, - // Contracts: pallet_contracts::{Pallet, Call, Storage, Event} = 38, + XTokens: orml_xtokens = 38, + Tokens: orml_tokens = 39, + // Contracts: pallet_contracts::{Pallet, Call, Storage, Event} = 38, - #[cfg(feature = "collator-selection")] - Identity: pallet_identity::{Pallet, Call, Storage, Event} = 40, + #[cfg(feature = "collator-selection")] + Identity: pallet_identity = 40, - #[cfg(feature = "preimage")] - Preimage: pallet_preimage::{Pallet, Call, Storage, Event} = 41, + #[cfg(feature = "preimage")] + Preimage: pallet_preimage = 41, - // XCM helpers. - XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event} = 50, - PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin} = 51, - CumulusXcm: cumulus_pallet_xcm::{Pallet, Call, Event, Origin} = 52, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 53, + // XCM helpers. + XcmpQueue: cumulus_pallet_xcmp_queue = 50, + PolkadotXcm: pallet_xcm = 51, + CumulusXcm: cumulus_pallet_xcm = 52, + DmpQueue: cumulus_pallet_dmp_queue = 53, - // Unique Pallets - Inflation: pallet_inflation::{Pallet, Call, Storage} = 60, - Unique: pallet_unique::{Pallet, Call, Storage} = 61, + // Unique Pallets + Inflation: pallet_inflation = 60, + Unique: pallet_unique::{Pallet, Call, Storage} = 61, - // #[cfg(feature = "scheduler")] - // Scheduler: pallet_unique_scheduler_v2::{Pallet, Call, Storage, Event} = 62, + // #[cfg(feature = "scheduler")] + // Scheduler: pallet_unique_scheduler_v2 = 62, - Configuration: pallet_configuration::{Pallet, Call, Storage, Event} = 63, + Configuration: pallet_configuration = 63, - Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64, - // ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65, - Common: pallet_common::{Pallet, Storage, Event} = 66, - Fungible: pallet_fungible::{Pallet, Storage} = 67, + Charging: pallet_charge_transaction::{Pallet, Call, Storage} = 64, + // ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65, + Common: pallet_common = 66, + Fungible: pallet_fungible = 67, - #[cfg(feature = "refungible")] - Refungible: pallet_refungible::{Pallet, Storage} = 68, + #[cfg(feature = "refungible")] + Refungible: pallet_refungible = 68, - Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69, - Structure: pallet_structure::{Pallet, Call, Storage, Event} = 70, + Nonfungible: pallet_nonfungible = 69, + Structure: pallet_structure = 70, - // RmrkCore: pallet_proxy_rmrk_core::{Pallet, Call, Storage, Event} = 71, + // RmrkCore: pallet_proxy_rmrk_core = 71, - // RmrkEquip: pallet_proxy_rmrk_equip::{Pallet, Call, Storage, Event} = 72, + // RmrkEquip: pallet_proxy_rmrk_equip = 72, - #[cfg(feature = "app-promotion")] - AppPromotion: pallet_app_promotion::{Pallet, Call, Storage, Event} = 73, + #[cfg(feature = "app-promotion")] + AppPromotion: pallet_app_promotion = 73, - #[cfg(feature = "foreign-assets")] - ForeignAssets: pallet_foreign_assets::{Pallet, Call, Storage, Event} = 80, + #[cfg(feature = "foreign-assets")] + ForeignAssets: pallet_foreign_assets = 80, - // Frontier - EVM: pallet_evm::{Pallet, Config, Call, Storage, Event} = 100, - Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, Origin} = 101, + // Frontier + EVM: pallet_evm = 100, + Ethereum: pallet_ethereum = 101, - EvmCoderSubstrate: pallet_evm_coder_substrate::{Pallet, Storage} = 150, - EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage, Event} = 151, - EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152, - EvmMigration: pallet_evm_migration::{Pallet, Call, Storage, Event} = 153, + EvmCoderSubstrate: pallet_evm_coder_substrate = 150, + EvmContractHelpers: pallet_evm_contract_helpers = 151, + EvmTransactionPayment: pallet_evm_transaction_payment = 152, + EvmMigration: pallet_evm_migration = 153, - Maintenance: pallet_maintenance::{Pallet, Call, Storage, Event} = 154, + Maintenance: pallet_maintenance = 154, - #[cfg(feature = "pallet-test-utils")] - TestUtils: pallet_test_utils = 255, - } - } - } + #[cfg(feature = "pallet-test-utils")] + TestUtils: pallet_test_utils = 255, + } + } + }; } diff --git a/runtime/common/maintenance.rs b/runtime/common/maintenance.rs index 7332aedd91..8147af4e49 100644 --- a/runtime/common/maintenance.rs +++ b/runtime/common/maintenance.rs @@ -82,7 +82,6 @@ impl SignedExtension for CheckMaintenance { #[cfg(feature = "collator-selection")] RuntimeCall::CollatorSelection(_) - | RuntimeCall::Authorship(_) | RuntimeCall::Session(_) | RuntimeCall::Identity(_) => Err(TransactionValidityError::Invalid(InvalidTransaction::Call)), diff --git a/runtime/common/runtime_apis.rs b/runtime/common/runtime_apis.rs index bb8f0ba4e5..21b91c60ec 100644 --- a/runtime/common/runtime_apis.rs +++ b/runtime/common/runtime_apis.rs @@ -42,6 +42,7 @@ macro_rules! impl_common_runtime_apis { transaction_validity::{TransactionSource, TransactionValidity}, ApplyExtrinsicResult, DispatchError, }; + use frame_support::pallet_prelude::Weight; use fp_rpc::TransactionStatus; use pallet_transaction_payment::{ FeeDetails, RuntimeDispatchInfo, @@ -486,6 +487,12 @@ macro_rules! impl_common_runtime_apis { fn query_fee_details(uxt: ::Extrinsic, len: u32) -> FeeDetails { TransactionPayment::query_fee_details(uxt, len) } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } } /* @@ -539,6 +546,7 @@ macro_rules! impl_common_runtime_apis { use frame_support::traits::StorageInfoTrait; let mut list = Vec::::new(); + list_benchmark!(list, extra, pallet_xcm, PolkadotXcm); list_benchmark!(list, extra, pallet_evm_migration, EvmMigration); list_benchmark!(list, extra, pallet_common, Common); @@ -604,6 +612,7 @@ macro_rules! impl_common_runtime_apis { let mut batches = Vec::::new(); let params = (&config, &allowlist); + add_benchmark!(params, batches, pallet_xcm, PolkadotXcm); add_benchmark!(params, batches, pallet_evm_migration, EvmMigration); add_benchmark!(params, batches, pallet_common, Common); @@ -667,7 +676,7 @@ macro_rules! impl_common_runtime_apis { #[cfg(feature = "try-runtime")] impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (frame_support::pallet_prelude::Weight, frame_support::pallet_prelude::Weight) { + fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { log::info!("try-runtime::on_runtime_upgrade unique-chain."); let weight = Executive::try_runtime_upgrade(checks).unwrap(); (weight, crate::config::substrate::RuntimeBlockWeights::get().max_block) @@ -678,7 +687,7 @@ macro_rules! impl_common_runtime_apis { state_root_check: bool, signature_check: bool, select: frame_try_runtime::TryStateSelect - ) -> frame_support::pallet_prelude::Weight { + ) -> Weight { log::info!( target: "node-runtime", "try-runtime: executing block {:?} / root checks: {:?} / try-state-select: {:?}", diff --git a/runtime/common/tests/xcm.rs b/runtime/common/tests/xcm.rs index 405a7ce843..b3337afbba 100644 --- a/runtime/common/tests/xcm.rs +++ b/runtime/common/tests/xcm.rs @@ -19,6 +19,7 @@ use xcm::latest::prelude::*; use logtest::Logger; use crate::RuntimeCall; use super::new_test_ext; +use frame_support::pallet_prelude::Weight; fn catch_xcm_barrier_log(logger: &mut Logger, expected_msg: &str) -> Result<(), String> { for record in logger { @@ -45,16 +46,16 @@ pub fn barrier_denies_transact(logger: &mut Logger) { // so it is irrelevant what we are passing to the `transact` cmd. let fake_encoded_call = vec![0u8]; - let transact_inst = Transact { - origin_type: OriginKind::Superuser, - require_weight_at_most: 0, + let transact_inst: Instruction = Transact { + origin_kind: OriginKind::Superuser, + require_weight_at_most: Weight::default(), call: fake_encoded_call.into(), }; - let mut xcm_program = Xcm::(vec![transact_inst]); + let mut xcm_program = vec![transact_inst]; - let max_weight = 100_000; - let mut weight_credit = 100_000_000; + let max_weight = Weight::from_parts(100_000, 100_000); + let mut weight_credit = Weight::from_parts(100_000_000, 100_000_000); let result = B::should_execute(&location, &mut xcm_program, max_weight, &mut weight_credit); @@ -69,11 +70,11 @@ pub fn barrier_denies_transact(logger: &mut Logger) { fn xcm_execute( self_para_id: u32, location: &MultiLocation, - xcm: &mut Xcm, + xcm: &mut [Instruction], ) -> Result<(), ()> { new_test_ext(self_para_id).execute_with(|| { - let max_weight = 100_000; - let mut weight_credit = 100_000_000; + let max_weight = Weight::from_parts(100_000, 100_000); + let mut weight_credit = Weight::from_parts(100_000_000, 100_000_000); B::should_execute(&location, xcm, max_weight, &mut weight_credit) }) @@ -102,7 +103,6 @@ fn make_deposit_reserve_asset(location: &MultiLocation) -> Xcm { let assets = make_multiassets(location); let inst = DepositReserveAsset { assets: assets.into(), - max_assets: 42, dest: location.clone(), xcm: Xcm(vec![]), }; @@ -114,7 +114,7 @@ fn expect_transfer_location_denied( logger: &mut Logger, self_para_id: u32, location: &MultiLocation, - xcm: &mut Xcm, + xcm: &mut [Instruction], ) -> Result<(), String> { let result = xcm_execute::(self_para_id, location, xcm); @@ -148,14 +148,14 @@ where logger, self_para_id, &unknown_location, - &mut transfer_reserve_asset, + &mut transfer_reserve_asset.0, )?; expect_transfer_location_denied::( logger, self_para_id, &unknown_location, - &mut deposit_reserve_asset, + &mut deposit_reserve_asset.0, )?; Ok(()) diff --git a/runtime/common/weights.rs b/runtime/common/weights.rs index 1793b0dc66..a2bf040c2d 100644 --- a/runtime/common/weights.rs +++ b/runtime/common/weights.rs @@ -27,6 +27,8 @@ use pallet_refungible::{ }; use up_data_structs::{CreateItemExData, CreateItemData}; +pub mod xcm; + macro_rules! max_weight_of { ($method:ident ( $($args:tt)* )) => {{ let max_weight = >::$method($($args)*) diff --git a/runtime/common/weights/xcm.rs b/runtime/common/weights/xcm.rs new file mode 100644 index 0000000000..56cbd81b23 --- /dev/null +++ b/runtime/common/weights/xcm.rs @@ -0,0 +1,218 @@ +// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs + +//! Autogenerated weights for pallet_xcm +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2023-03-10, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// target/release/unique-collator +// benchmark +// pallet +// --pallet +// pallet-xcm +// --wasm-execution +// compiled +// --extrinsic +// * +// --template=.maintain/external-weight-template.hbs +// --steps=50 +// --repeat=80 +// --heap-pages=4096 +// --output=./runtime/common/weights/xcm.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] +#![allow(clippy::unnecessary_cast)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use sp_std::marker::PhantomData; + +/// Weights for pallet_xcm using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_xcm::WeightInfo for SubstrateWeight { + /// Storage: ParachainSystem HostConfiguration (r:1 w:0) + /// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + /// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured) + fn send() -> Weight { + // Proof Size summary in bytes: + // Measured: `142` + // Estimated: `1274` + // Minimum execution time: 11_382_000 picoseconds. + Weight::from_parts(11_812_000, 1274) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: ParachainInfo ParachainId (r:1 w:0) + /// Proof: ParachainInfo ParachainId (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + fn teleport_assets() -> Weight { + // Proof Size summary in bytes: + // Measured: `136` + // Estimated: `499` + // Minimum execution time: 13_195_000 picoseconds. + Weight::from_parts(13_685_000, 499) + .saturating_add(T::DbWeight::get().reads(1_u64)) + } + /// Storage: ParachainInfo ParachainId (r:1 w:0) + /// Proof: ParachainInfo ParachainId (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + fn reserve_transfer_assets() -> Weight { + // Proof Size summary in bytes: + // Measured: `136` + // Estimated: `499` + // Minimum execution time: 12_784_000 picoseconds. + Weight::from_parts(13_155_000, 499) + .saturating_add(T::DbWeight::get().reads(1_u64)) + } + fn execute() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_569_000 picoseconds. + Weight::from_parts(4_819_000, 0) + } + /// Storage: PolkadotXcm SupportedVersion (r:0 w:1) + /// Proof Skipped: PolkadotXcm SupportedVersion (max_values: None, max_size: None, mode: Measured) + fn force_xcm_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_919_000 picoseconds. + Weight::from_parts(5_250_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: PolkadotXcm SafeXcmVersion (r:0 w:1) + /// Proof Skipped: PolkadotXcm SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) + fn force_default_xcm_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_593_000 picoseconds. + Weight::from_parts(1_723_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: PolkadotXcm VersionNotifiers (r:1 w:1) + /// Proof Skipped: PolkadotXcm VersionNotifiers (max_values: None, max_size: None, mode: Measured) + /// Storage: PolkadotXcm QueryCounter (r:1 w:1) + /// Proof Skipped: PolkadotXcm QueryCounter (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParachainSystem HostConfiguration (r:1 w:0) + /// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + /// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PolkadotXcm Queries (r:0 w:1) + /// Proof Skipped: PolkadotXcm Queries (max_values: None, max_size: None, mode: Measured) + fn force_subscribe_version_notify() -> Weight { + // Proof Size summary in bytes: + // Measured: `184` + // Estimated: `4880` + // Minimum execution time: 16_832_000 picoseconds. + Weight::from_parts(17_984_000, 4880) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: PolkadotXcm VersionNotifiers (r:1 w:1) + /// Proof Skipped: PolkadotXcm VersionNotifiers (max_values: None, max_size: None, mode: Measured) + /// Storage: ParachainSystem HostConfiguration (r:1 w:0) + /// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + /// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PolkadotXcm Queries (r:0 w:1) + /// Proof Skipped: PolkadotXcm Queries (max_values: None, max_size: None, mode: Measured) + fn force_unsubscribe_version_notify() -> Weight { + // Proof Size summary in bytes: + // Measured: `341` + // Estimated: `4829` + // Minimum execution time: 19_256_000 picoseconds. + Weight::from_parts(20_228_000, 4829) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: PolkadotXcm SupportedVersion (r:4 w:2) + /// Proof Skipped: PolkadotXcm SupportedVersion (max_values: None, max_size: None, mode: Measured) + fn migrate_supported_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `108` + // Estimated: `10008` + // Minimum execution time: 14_437_000 picoseconds. + Weight::from_parts(15_750_000, 10008) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: PolkadotXcm VersionNotifiers (r:4 w:2) + /// Proof Skipped: PolkadotXcm VersionNotifiers (max_values: None, max_size: None, mode: Measured) + fn migrate_version_notifiers() -> Weight { + // Proof Size summary in bytes: + // Measured: `112` + // Estimated: `10012` + // Minimum execution time: 14_617_000 picoseconds. + Weight::from_parts(16_000_000, 10012) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: PolkadotXcm VersionNotifyTargets (r:5 w:0) + /// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn already_notified_target() -> Weight { + // Proof Size summary in bytes: + // Measured: `119` + // Estimated: `12494` + // Minimum execution time: 18_395_000 picoseconds. + Weight::from_parts(19_858_000, 12494) + .saturating_add(T::DbWeight::get().reads(5_u64)) + } + /// Storage: PolkadotXcm VersionNotifyTargets (r:2 w:1) + /// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + /// Storage: ParachainSystem HostConfiguration (r:1 w:0) + /// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + /// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured) + fn notify_current_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `255` + // Estimated: `6705` + // Minimum execution time: 17_443_000 picoseconds. + Weight::from_parts(18_435_000, 6705) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: PolkadotXcm VersionNotifyTargets (r:3 w:0) + /// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn notify_target_migration_fail() -> Weight { + // Proof Size summary in bytes: + // Measured: `149` + // Estimated: `7574` + // Minimum execution time: 7_714_000 picoseconds. + Weight::from_parts(8_526_000, 7574) + .saturating_add(T::DbWeight::get().reads(3_u64)) + } + /// Storage: PolkadotXcm VersionNotifyTargets (r:4 w:2) + /// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + fn migrate_version_notify_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `119` + // Estimated: `10019` + // Minimum execution time: 15_008_000 picoseconds. + Weight::from_parts(16_271_000, 10019) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: PolkadotXcm VersionNotifyTargets (r:4 w:2) + /// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + /// Storage: ParachainSystem HostConfiguration (r:1 w:0) + /// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + /// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured) + fn migrate_and_notify_old_targets() -> Weight { + // Proof Size summary in bytes: + // Measured: `261` + // Estimated: `11673` + // Minimum execution time: 23_554_000 picoseconds. + Weight::from_parts(25_158_000, 11673) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } +} + diff --git a/runtime/opal/Cargo.toml b/runtime/opal/Cargo.toml index dde38192cc..b70d600425 100644 --- a/runtime/opal/Cargo.toml +++ b/runtime/opal/Cargo.toml @@ -95,7 +95,6 @@ std = [ 'pallet-identity/std', 'pallet-inflation/std', 'pallet-nonfungible/std', - 'pallet-randomness-collective-flip/std', 'pallet-refungible/std', 'pallet-structure/std', 'pallet-sudo/std', @@ -174,7 +173,6 @@ try-runtime = [ 'pallet-inflation/try-runtime', 'pallet-maintenance/try-runtime', 'pallet-nonfungible/try-runtime', - 'pallet-randomness-collective-flip/try-runtime', 'pallet-refungible/try-runtime', 'pallet-structure/try-runtime', 'pallet-sudo/try-runtime', @@ -223,7 +221,6 @@ pallet-aura = { workspace = true } pallet-authorship = { workspace = true } pallet-balances = { workspace = true } pallet-preimage = { workspace = true } -pallet-randomness-collective-flip = { workspace = true } pallet-session = { workspace = true } pallet-sudo = { workspace = true } pallet-timestamp = { workspace = true } diff --git a/runtime/opal/src/lib.rs b/runtime/opal/src/lib.rs index 6d0fb6a971..d90bf518bd 100644 --- a/runtime/opal/src/lib.rs +++ b/runtime/opal/src/lib.rs @@ -54,7 +54,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!(RUNTIME_NAME), impl_name: create_runtime_str!(RUNTIME_NAME), authoring_version: 1, - spec_version: 937053, + spec_version: 939053, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 3, diff --git a/runtime/opal/src/xcm_barrier.rs b/runtime/opal/src/xcm_barrier.rs index 379d1b461c..e39463540f 100644 --- a/runtime/opal/src/xcm_barrier.rs +++ b/runtime/opal/src/xcm_barrier.rs @@ -15,7 +15,8 @@ // along with Unique Network. If not, see . use frame_support::traits::Everything; -use xcm::latest::{Xcm, Weight, MultiLocation}; +use xcm::latest::{Weight, MultiLocation}; +use xcm::v3::Instruction; use xcm_builder::{AllowTopLevelPaidExecutionFrom, TakeWeightCredit}; use xcm_executor::traits::ShouldExecute; @@ -30,7 +31,7 @@ pub struct AllowAllDebug; impl ShouldExecute for AllowAllDebug { fn should_execute( _origin: &MultiLocation, - _message: &mut Xcm, + _message: &mut [Instruction], _max_weight: Weight, _weight_credit: &mut Weight, ) -> Result<(), ()> { diff --git a/runtime/quartz/Cargo.toml b/runtime/quartz/Cargo.toml index 322eea62a9..dbf8324c3a 100644 --- a/runtime/quartz/Cargo.toml +++ b/runtime/quartz/Cargo.toml @@ -95,7 +95,6 @@ std = [ 'pallet-fungible/std', 'pallet-inflation/std', 'pallet-nonfungible/std', - 'pallet-randomness-collective-flip/std', 'pallet-refungible/std', 'pallet-structure/std', 'pallet-sudo/std', @@ -169,7 +168,6 @@ try-runtime = [ 'pallet-inflation/try-runtime', 'pallet-maintenance/try-runtime', 'pallet-nonfungible/try-runtime', - 'pallet-randomness-collective-flip/try-runtime', 'pallet-refungible/try-runtime', 'pallet-structure/try-runtime', 'pallet-sudo/try-runtime', @@ -215,7 +213,6 @@ pallet-aura = { workspace = true } pallet-authorship = { workspace = true } pallet-balances = { workspace = true } pallet-preimage = { workspace = true } -pallet-randomness-collective-flip = { workspace = true } pallet-session = { workspace = true } pallet-sudo = { workspace = true } pallet-timestamp = { workspace = true } diff --git a/runtime/quartz/src/lib.rs b/runtime/quartz/src/lib.rs index e0cfef3561..795714f927 100644 --- a/runtime/quartz/src/lib.rs +++ b/runtime/quartz/src/lib.rs @@ -57,7 +57,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!(RUNTIME_NAME), impl_name: create_runtime_str!(RUNTIME_NAME), authoring_version: 1, - spec_version: 937053, + spec_version: 939053, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 3, diff --git a/runtime/tests/Cargo.toml b/runtime/tests/Cargo.toml index 1ec31c57ce..7f9d6ba82e 100644 --- a/runtime/tests/Cargo.toml +++ b/runtime/tests/Cargo.toml @@ -11,22 +11,22 @@ refungible = [] [dependencies] up-data-structs = { default-features = false, path = "../../primitives/data-structs" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } -fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } +fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } -frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } -pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } +pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" } pallet-common.path = "../../pallets/common" pallet-fungible.path = "../../pallets/fungible" @@ -41,4 +41,6 @@ parity-scale-codec = { version = "3.2.2", default-features = false, features = [ scale-info = "*" evm-coder = { workspace = true } -up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" } +up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.39" } +xcm = { workspace = true } +pallet-configuration = { workspace = true } diff --git a/runtime/tests/src/lib.rs b/runtime/tests/src/lib.rs index 7960ac5217..e91016a4a5 100644 --- a/runtime/tests/src/lib.rs +++ b/runtime/tests/src/lib.rs @@ -27,11 +27,12 @@ use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, testing::Header, }; -use pallet_transaction_payment::{CurrencyAdapter}; +use pallet_transaction_payment::CurrencyAdapter; use frame_system as system; use pallet_evm::{ AddressMapping, account::CrossAccountId, EnsureAddressNever, SubstrateBlockHashMapping, }; +use pallet_ethereum::PostLogContent; use fp_evm_mapping::EvmBackwardsAddressMapping; use parity_scale_codec::{Encode, Decode, MaxEncodedLen}; use scale_info::TypeInfo; @@ -204,11 +205,13 @@ impl Default for TestCrossAccountId { parameter_types! { pub BlockGasLimit: U256 = 0u32.into(); pub WeightPerGas: Weight = Weight::from_ref_time(20); + pub const PostBlockAndTxnHashes: PostLogContent = PostLogContent::BlockAndTxnHashes; } impl pallet_ethereum::Config for Test { type RuntimeEvent = RuntimeEvent; type StateRoot = pallet_ethereum::IntermediateStateRoot; + type PostLogContent = PostBlockAndTxnHashes; } impl pallet_evm::Config for Test { diff --git a/runtime/unique/Cargo.toml b/runtime/unique/Cargo.toml index 8d77f69e42..652465363d 100644 --- a/runtime/unique/Cargo.toml +++ b/runtime/unique/Cargo.toml @@ -93,7 +93,6 @@ std = [ 'pallet-fungible/std', 'pallet-inflation/std', 'pallet-nonfungible/std', - 'pallet-randomness-collective-flip/std', 'pallet-refungible/std', 'pallet-structure/std', 'pallet-sudo/std', @@ -167,7 +166,6 @@ try-runtime = [ 'pallet-inflation/try-runtime', 'pallet-maintenance/try-runtime', 'pallet-nonfungible/try-runtime', - 'pallet-randomness-collective-flip/try-runtime', 'pallet-refungible/try-runtime', 'pallet-structure/try-runtime', 'pallet-sudo/try-runtime', @@ -214,7 +212,6 @@ pallet-aura = { workspace = true } pallet-authorship = { workspace = true } pallet-balances = { workspace = true } pallet-preimage = { workspace = true } -pallet-randomness-collective-flip = { workspace = true } pallet-session = { workspace = true } pallet-sudo = { workspace = true } pallet-timestamp = { workspace = true } diff --git a/runtime/unique/src/lib.rs b/runtime/unique/src/lib.rs index ce66c810fa..1bb07b22b2 100644 --- a/runtime/unique/src/lib.rs +++ b/runtime/unique/src/lib.rs @@ -54,7 +54,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!(RUNTIME_NAME), impl_name: create_runtime_str!(RUNTIME_NAME), authoring_version: 1, - spec_version: 937053, + spec_version: 939053, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 3, From 03617566c0b4d41aa639c1f4af7e6497c9643362 Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Sun, 12 Mar 2023 05:23:23 +0000 Subject: [PATCH 014/103] upd: stubs --- pallets/nonfungible/src/stubs/UniqueNFT.raw | Bin 6145 -> 6145 bytes pallets/nonfungible/src/stubs/UniqueNFT.sol | 5 ++++- tests/src/eth/api/UniqueNFT.sol | 5 ++++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pallets/nonfungible/src/stubs/UniqueNFT.raw b/pallets/nonfungible/src/stubs/UniqueNFT.raw index e393247845c6ef33ef1f35aa2b98284f07cb8f04..e18131270a46d45ac3cf64142af80cc19584f627 100644 GIT binary patch delta 44 zcmV+{0Mq}0Fo7_zuoob8=tMIoCGQD|hnjb%s%m7H_{#=6{xW6rH<@DDiy}*t&=)bd C{S+er delta 44 zcmV+{0Mq}0Fo7_zuoob|*2;Bc;8F5JZ;^f9f=fc|t=kw#Wdoc*=geS9yjy3J&=)c8 CTNR)H diff --git a/pallets/nonfungible/src/stubs/UniqueNFT.sol b/pallets/nonfungible/src/stubs/UniqueNFT.sol index 0aaf7d6489..454beed9d8 100644 --- a/pallets/nonfungible/src/stubs/UniqueNFT.sol +++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol @@ -1156,7 +1156,10 @@ contract ERC721 is Dummy, ERC165, ERC721Events { dummy = 0; } - /// @dev Not implemented + /// @notice Get the approved address for a single NFT + /// @dev Throws if `tokenId` is not a valid NFT + /// @param tokenId The NFT to find the approved address for + /// @return The approved address for this NFT, or the zero address if there is none /// @dev EVM selector for this function is: 0x081812fc, /// or in textual repr: getApproved(uint256) function getApproved(uint256 tokenId) public view returns (address) { diff --git a/tests/src/eth/api/UniqueNFT.sol b/tests/src/eth/api/UniqueNFT.sol index c63a5e0b86..0fbde27162 100644 --- a/tests/src/eth/api/UniqueNFT.sol +++ b/tests/src/eth/api/UniqueNFT.sol @@ -781,7 +781,10 @@ interface ERC721 is Dummy, ERC165, ERC721Events { /// or in textual repr: setApprovalForAll(address,bool) function setApprovalForAll(address operator, bool approved) external; - /// @dev Not implemented + /// @notice Get the approved address for a single NFT + /// @dev Throws if `tokenId` is not a valid NFT + /// @param tokenId The NFT to find the approved address for + /// @return The approved address for this NFT, or the zero address if there is none /// @dev EVM selector for this function is: 0x081812fc, /// or in textual repr: getApproved(uint256) function getApproved(uint256 tokenId) external view returns (address); From 1e886955c8053609e39cfe561328a59a0e0db998 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Tue, 14 Mar 2023 15:27:02 +0100 Subject: [PATCH 015/103] fix: checkout unchecked nft weights --- pallets/nonfungible/src/weights.rs | 410 +++++++++++++++++++++++++++++ 1 file changed, 410 insertions(+) create mode 100644 pallets/nonfungible/src/weights.rs diff --git a/pallets/nonfungible/src/weights.rs b/pallets/nonfungible/src/weights.rs new file mode 100644 index 0000000000..b776d4e447 --- /dev/null +++ b/pallets/nonfungible/src/weights.rs @@ -0,0 +1,410 @@ +// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs + +//! Autogenerated weights for pallet_nonfungible +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2023-02-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// target/release/unique-collator +// benchmark +// pallet +// --pallet +// pallet-nonfungible +// --wasm-execution +// compiled +// --extrinsic +// * +// --template +// .maintain/frame-weight-template.hbs +// --steps=50 +// --repeat=80 +// --heap-pages=4096 +// --output=./pallets/nonfungible/src/weights.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] +#![allow(clippy::unnecessary_cast)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use sp_std::marker::PhantomData; + +/// Weight functions needed for pallet_nonfungible. +pub trait WeightInfo { + fn create_item() -> Weight; + fn create_multiple_items(b: u32, ) -> Weight; + fn create_multiple_items_ex(b: u32, ) -> Weight; + fn burn_item() -> Weight; + fn burn_recursively_self_raw() -> Weight; + fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight; + fn transfer() -> Weight; + fn approve() -> Weight; + fn approve_from() -> Weight; + fn transfer_from() -> Weight; + fn burn_from() -> Weight; + fn set_token_property_permissions(b: u32, ) -> Weight; + fn set_token_properties(b: u32, ) -> Weight; + fn delete_token_properties(b: u32, ) -> Weight; + fn token_owner() -> Weight; + fn set_allowance_for_all() -> Weight; + fn allowance_for_all() -> Weight; + fn repair_item() -> Weight; +} + +/// Weights for pallet_nonfungible using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + // Storage: Nonfungible TokensMinted (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:1 w:1) + // Storage: Nonfungible TokenProperties (r:1 w:1) + // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Storage: Nonfungible TokenData (r:0 w:1) + // Storage: Nonfungible Owned (r:0 w:1) + fn create_item() -> Weight { + Weight::from_ref_time(35_333_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(5 as u64)) + } + // Storage: Nonfungible TokensMinted (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:1 w:1) + // Storage: Nonfungible TokenProperties (r:4 w:4) + // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Storage: Nonfungible TokenData (r:0 w:4) + // Storage: Nonfungible Owned (r:0 w:4) + fn create_multiple_items(b: u32, ) -> Weight { + Weight::from_ref_time(19_091_371 as u64) + // Standard Error: 3_221 + .saturating_add(Weight::from_ref_time(7_304_849 as u64).saturating_mul(b as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + .saturating_add(T::DbWeight::get().writes((3 as u64).saturating_mul(b as u64))) + } + // Storage: Nonfungible TokensMinted (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:4 w:4) + // Storage: Nonfungible TokenProperties (r:4 w:4) + // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Storage: Nonfungible TokenData (r:0 w:4) + // Storage: Nonfungible Owned (r:0 w:4) + fn create_multiple_items_ex(b: u32, ) -> Weight { + Weight::from_ref_time(12_655_339 as u64) + // Standard Error: 3_655 + .saturating_add(Weight::from_ref_time(9_051_919 as u64).saturating_mul(b as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(b as u64))) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + .saturating_add(T::DbWeight::get().writes((4 as u64).saturating_mul(b as u64))) + } + // Storage: Nonfungible TokenData (r:1 w:1) + // Storage: Nonfungible TokenChildren (r:1 w:0) + // Storage: Nonfungible TokensBurnt (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:1 w:1) + // Storage: Nonfungible Allowance (r:1 w:0) + // Storage: Nonfungible Owned (r:0 w:1) + // Storage: Nonfungible TokenProperties (r:0 w:1) + fn burn_item() -> Weight { + Weight::from_ref_time(34_068_000 as u64) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(5 as u64)) + } + // Storage: Nonfungible TokenChildren (r:1 w:0) + // Storage: Nonfungible TokenData (r:1 w:1) + // Storage: Nonfungible TokensBurnt (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:1 w:1) + // Storage: Nonfungible Allowance (r:1 w:0) + // Storage: Nonfungible Owned (r:0 w:1) + // Storage: Nonfungible TokenProperties (r:0 w:1) + fn burn_recursively_self_raw() -> Weight { + Weight::from_ref_time(44_840_000 as u64) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(5 as u64)) + } + // Storage: Nonfungible TokenChildren (r:1 w:0) + // Storage: Nonfungible TokenData (r:1 w:1) + // Storage: Nonfungible TokensBurnt (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:1 w:1) + // Storage: Nonfungible Allowance (r:1 w:0) + // Storage: Nonfungible Owned (r:0 w:1) + // Storage: Nonfungible TokenProperties (r:0 w:1) + // Storage: Common CollectionById (r:1 w:0) + fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight { + Weight::from_ref_time(44_567_000 as u64) + // Standard Error: 1_014_743 + .saturating_add(Weight::from_ref_time(209_619_240 as u64).saturating_mul(b as u64)) + .saturating_add(T::DbWeight::get().reads(7 as u64)) + .saturating_add(T::DbWeight::get().reads((4 as u64).saturating_mul(b as u64))) + .saturating_add(T::DbWeight::get().writes(6 as u64)) + .saturating_add(T::DbWeight::get().writes((4 as u64).saturating_mul(b as u64))) + } + // Storage: Nonfungible TokenData (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:2 w:2) + // Storage: Nonfungible Allowance (r:1 w:0) + // Storage: Nonfungible Owned (r:0 w:2) + fn transfer() -> Weight { + Weight::from_ref_time(29_508_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(5 as u64)) + } + // Storage: Nonfungible TokenData (r:1 w:0) + // Storage: Nonfungible Allowance (r:1 w:1) + fn approve() -> Weight { + Weight::from_ref_time(22_168_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: Nonfungible TokenData (r:1 w:0) + // Storage: Nonfungible Allowance (r:1 w:1) + fn approve_from() -> Weight { + Weight::from_ref_time(22_063_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: Nonfungible Allowance (r:1 w:1) + // Storage: Nonfungible TokenData (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:2 w:2) + // Storage: Nonfungible Owned (r:0 w:2) + fn transfer_from() -> Weight { + Weight::from_ref_time(36_386_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(6 as u64)) + } + // Storage: Nonfungible Allowance (r:1 w:1) + // Storage: Nonfungible TokenData (r:1 w:1) + // Storage: Nonfungible TokenChildren (r:1 w:0) + // Storage: Nonfungible TokensBurnt (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:1 w:1) + // Storage: Nonfungible Owned (r:0 w:1) + // Storage: Nonfungible TokenProperties (r:0 w:1) + fn burn_from() -> Weight { + Weight::from_ref_time(42_499_000 as u64) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(6 as u64)) + } + // Storage: Common CollectionPropertyPermissions (r:1 w:1) + fn set_token_property_permissions(b: u32, ) -> Weight { + Weight::from_ref_time(5_317_000 as u64) + // Standard Error: 42_045 + .saturating_add(Weight::from_ref_time(12_179_871 as u64).saturating_mul(b as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: Nonfungible TokenProperties (r:1 w:1) + // Storage: Common CollectionPropertyPermissions (r:1 w:0) + fn set_token_properties(b: u32, ) -> Weight { + Weight::from_ref_time(15_428_000 as u64) + // Standard Error: 58_002 + .saturating_add(Weight::from_ref_time(7_195_842 as u64).saturating_mul(b as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: Nonfungible TokenProperties (r:1 w:1) + // Storage: Common CollectionPropertyPermissions (r:1 w:0) + fn delete_token_properties(b: u32, ) -> Weight { + Weight::from_ref_time(15_498_000 as u64) + // Standard Error: 68_276 + .saturating_add(Weight::from_ref_time(22_441_281 as u64).saturating_mul(b as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: Nonfungible TokenData (r:1 w:0) + fn token_owner() -> Weight { + Weight::from_ref_time(7_006_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + } + // Storage: Nonfungible CollectionAllowance (r:0 w:1) + fn set_allowance_for_all() -> Weight { + Weight::from_ref_time(16_761_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: Nonfungible CollectionAllowance (r:1 w:0) + fn allowance_for_all() -> Weight { + Weight::from_ref_time(5_577_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + } + // Storage: Nonfungible TokenProperties (r:1 w:1) + fn repair_item() -> Weight { + Weight::from_ref_time(7_670_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } +} + +// For backwards compatibility and tests +impl WeightInfo for () { + // Storage: Nonfungible TokensMinted (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:1 w:1) + // Storage: Nonfungible TokenProperties (r:1 w:1) + // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Storage: Nonfungible TokenData (r:0 w:1) + // Storage: Nonfungible Owned (r:0 w:1) + fn create_item() -> Weight { + Weight::from_ref_time(35_333_000 as u64) + .saturating_add(RocksDbWeight::get().reads(4 as u64)) + .saturating_add(RocksDbWeight::get().writes(5 as u64)) + } + // Storage: Nonfungible TokensMinted (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:1 w:1) + // Storage: Nonfungible TokenProperties (r:4 w:4) + // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Storage: Nonfungible TokenData (r:0 w:4) + // Storage: Nonfungible Owned (r:0 w:4) + fn create_multiple_items(b: u32, ) -> Weight { + Weight::from_ref_time(19_091_371 as u64) + // Standard Error: 3_221 + .saturating_add(Weight::from_ref_time(7_304_849 as u64).saturating_mul(b as u64)) + .saturating_add(RocksDbWeight::get().reads(3 as u64)) + .saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(b as u64))) + .saturating_add(RocksDbWeight::get().writes(2 as u64)) + .saturating_add(RocksDbWeight::get().writes((3 as u64).saturating_mul(b as u64))) + } + // Storage: Nonfungible TokensMinted (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:4 w:4) + // Storage: Nonfungible TokenProperties (r:4 w:4) + // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Storage: Nonfungible TokenData (r:0 w:4) + // Storage: Nonfungible Owned (r:0 w:4) + fn create_multiple_items_ex(b: u32, ) -> Weight { + Weight::from_ref_time(12_655_339 as u64) + // Standard Error: 3_655 + .saturating_add(Weight::from_ref_time(9_051_919 as u64).saturating_mul(b as u64)) + .saturating_add(RocksDbWeight::get().reads(2 as u64)) + .saturating_add(RocksDbWeight::get().reads((2 as u64).saturating_mul(b as u64))) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) + .saturating_add(RocksDbWeight::get().writes((4 as u64).saturating_mul(b as u64))) + } + // Storage: Nonfungible TokenData (r:1 w:1) + // Storage: Nonfungible TokenChildren (r:1 w:0) + // Storage: Nonfungible TokensBurnt (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:1 w:1) + // Storage: Nonfungible Allowance (r:1 w:0) + // Storage: Nonfungible Owned (r:0 w:1) + // Storage: Nonfungible TokenProperties (r:0 w:1) + fn burn_item() -> Weight { + Weight::from_ref_time(34_068_000 as u64) + .saturating_add(RocksDbWeight::get().reads(5 as u64)) + .saturating_add(RocksDbWeight::get().writes(5 as u64)) + } + // Storage: Nonfungible TokenChildren (r:1 w:0) + // Storage: Nonfungible TokenData (r:1 w:1) + // Storage: Nonfungible TokensBurnt (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:1 w:1) + // Storage: Nonfungible Allowance (r:1 w:0) + // Storage: Nonfungible Owned (r:0 w:1) + // Storage: Nonfungible TokenProperties (r:0 w:1) + fn burn_recursively_self_raw() -> Weight { + Weight::from_ref_time(44_840_000 as u64) + .saturating_add(RocksDbWeight::get().reads(5 as u64)) + .saturating_add(RocksDbWeight::get().writes(5 as u64)) + } + // Storage: Nonfungible TokenChildren (r:1 w:0) + // Storage: Nonfungible TokenData (r:1 w:1) + // Storage: Nonfungible TokensBurnt (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:1 w:1) + // Storage: Nonfungible Allowance (r:1 w:0) + // Storage: Nonfungible Owned (r:0 w:1) + // Storage: Nonfungible TokenProperties (r:0 w:1) + // Storage: Common CollectionById (r:1 w:0) + fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight { + Weight::from_ref_time(44_567_000 as u64) + // Standard Error: 1_014_743 + .saturating_add(Weight::from_ref_time(209_619_240 as u64).saturating_mul(b as u64)) + .saturating_add(RocksDbWeight::get().reads(7 as u64)) + .saturating_add(RocksDbWeight::get().reads((4 as u64).saturating_mul(b as u64))) + .saturating_add(RocksDbWeight::get().writes(6 as u64)) + .saturating_add(RocksDbWeight::get().writes((4 as u64).saturating_mul(b as u64))) + } + // Storage: Nonfungible TokenData (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:2 w:2) + // Storage: Nonfungible Allowance (r:1 w:0) + // Storage: Nonfungible Owned (r:0 w:2) + fn transfer() -> Weight { + Weight::from_ref_time(29_508_000 as u64) + .saturating_add(RocksDbWeight::get().reads(4 as u64)) + .saturating_add(RocksDbWeight::get().writes(5 as u64)) + } + // Storage: Nonfungible TokenData (r:1 w:0) + // Storage: Nonfungible Allowance (r:1 w:1) + fn approve() -> Weight { + Weight::from_ref_time(22_168_000 as u64) + .saturating_add(RocksDbWeight::get().reads(2 as u64)) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) + } + // Storage: Nonfungible TokenData (r:1 w:0) + // Storage: Nonfungible Allowance (r:1 w:1) + fn approve_from() -> Weight { + Weight::from_ref_time(22_063_000 as u64) + .saturating_add(RocksDbWeight::get().reads(2 as u64)) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) + } + // Storage: Nonfungible Allowance (r:1 w:1) + // Storage: Nonfungible TokenData (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:2 w:2) + // Storage: Nonfungible Owned (r:0 w:2) + fn transfer_from() -> Weight { + Weight::from_ref_time(36_386_000 as u64) + .saturating_add(RocksDbWeight::get().reads(4 as u64)) + .saturating_add(RocksDbWeight::get().writes(6 as u64)) + } + // Storage: Nonfungible Allowance (r:1 w:1) + // Storage: Nonfungible TokenData (r:1 w:1) + // Storage: Nonfungible TokenChildren (r:1 w:0) + // Storage: Nonfungible TokensBurnt (r:1 w:1) + // Storage: Nonfungible AccountBalance (r:1 w:1) + // Storage: Nonfungible Owned (r:0 w:1) + // Storage: Nonfungible TokenProperties (r:0 w:1) + fn burn_from() -> Weight { + Weight::from_ref_time(42_499_000 as u64) + .saturating_add(RocksDbWeight::get().reads(5 as u64)) + .saturating_add(RocksDbWeight::get().writes(6 as u64)) + } + // Storage: Common CollectionPropertyPermissions (r:1 w:1) + fn set_token_property_permissions(b: u32, ) -> Weight { + Weight::from_ref_time(5_317_000 as u64) + // Standard Error: 42_045 + .saturating_add(Weight::from_ref_time(12_179_871 as u64).saturating_mul(b as u64)) + .saturating_add(RocksDbWeight::get().reads(1 as u64)) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) + } + // Storage: Nonfungible TokenProperties (r:1 w:1) + // Storage: Common CollectionPropertyPermissions (r:1 w:0) + fn set_token_properties(b: u32, ) -> Weight { + Weight::from_ref_time(15_428_000 as u64) + // Standard Error: 58_002 + .saturating_add(Weight::from_ref_time(7_195_842 as u64).saturating_mul(b as u64)) + .saturating_add(RocksDbWeight::get().reads(2 as u64)) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) + } + // Storage: Nonfungible TokenProperties (r:1 w:1) + // Storage: Common CollectionPropertyPermissions (r:1 w:0) + fn delete_token_properties(b: u32, ) -> Weight { + Weight::from_ref_time(15_498_000 as u64) + // Standard Error: 68_276 + .saturating_add(Weight::from_ref_time(22_441_281 as u64).saturating_mul(b as u64)) + .saturating_add(RocksDbWeight::get().reads(2 as u64)) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) + } + // Storage: Nonfungible TokenData (r:1 w:0) + fn token_owner() -> Weight { + Weight::from_ref_time(7_006_000 as u64) + .saturating_add(RocksDbWeight::get().reads(1 as u64)) + } + // Storage: Nonfungible CollectionAllowance (r:0 w:1) + fn set_allowance_for_all() -> Weight { + Weight::from_ref_time(16_761_000 as u64) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) + } + // Storage: Nonfungible CollectionAllowance (r:1 w:0) + fn allowance_for_all() -> Weight { + Weight::from_ref_time(5_577_000 as u64) + .saturating_add(RocksDbWeight::get().reads(1 as u64)) + } + // Storage: Nonfungible TokenProperties (r:1 w:1) + fn repair_item() -> Weight { + Weight::from_ref_time(7_670_000 as u64) + .saturating_add(RocksDbWeight::get().reads(1 as u64)) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) + } +} From 2ec63fe9096139a10247ce4c11c93426b566f72e Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Fri, 17 Mar 2023 17:27:22 +0100 Subject: [PATCH 016/103] feat: unify unique nodes --- client/rpc/Cargo.toml | 8 +++++++- node/cli/Cargo.toml | 5 +++++ node/cli/src/cli.rs | 20 ++------------------ node/cli/src/service.rs | 5 ----- node/rpc/Cargo.toml | 1 - node/rpc/src/lib.rs | 5 ++--- 6 files changed, 16 insertions(+), 28 deletions(-) diff --git a/client/rpc/Cargo.toml b/client/rpc/Cargo.toml index 3d3c8b45c0..c302fc89a2 100644 --- a/client/rpc/Cargo.toml +++ b/client/rpc/Cargo.toml @@ -36,11 +36,17 @@ frame-benchmarking = { workspace = true } sc-executor = { workspace = true } -opal-runtime = { workspace = true } +opal-runtime = { workspace = true, optional = true } quartz-runtime = { workspace = true, optional = true } unique-runtime = { workspace = true, optional = true } [features] +default = ['opal-runtime'] +all-runtimes = [ + 'opal-runtime', + 'quartz-runtime', + 'unique-runtime', +] pov-estimate = [ 'opal-runtime/pov-estimate', 'quartz-runtime?/pov-estimate', diff --git a/node/cli/Cargo.toml b/node/cli/Cargo.toml index 7a285ec36a..04a0f88b70 100644 --- a/node/cli/Cargo.toml +++ b/node/cli/Cargo.toml @@ -99,6 +99,11 @@ substrate-build-script-utils = { workspace = true } [features] default = ["opal-runtime"] +all-runtimes = [ + 'opal-runtime', + 'quartz-runtime', + 'unique-runtime', +] pov-estimate = [ 'opal-runtime/pov-estimate', 'quartz-runtime?/pov-estimate', diff --git a/node/cli/src/cli.rs b/node/cli/src/cli.rs index 2dcd0d5d2e..a2f52f3d52 100644 --- a/node/cli/src/cli.rs +++ b/node/cli/src/cli.rs @@ -15,11 +15,9 @@ // along with Unique Network. If not, see . use crate::chain_spec; -use std::{path::PathBuf, env}; +use std::path::PathBuf; use clap::Parser; -const NODE_NAME_ENV: &str = "UNIQUE_NODE_NAME"; - /// Sub-commands supported by the collator. #[derive(Debug, Parser)] pub enum Subcommand { @@ -99,21 +97,7 @@ pub struct Cli { impl Cli { pub fn node_name() -> String { - match env::var(NODE_NAME_ENV).ok() { - Some(name) => name, - None => { - if cfg!(feature = "unique-runtime") { - "Unique" - } else if cfg!(feature = "sapphire-runtime") { - "Sapphire" - } else if cfg!(feature = "quartz-runtime") { - "Quartz" - } else { - "Opal" - } - } - .into(), - } + "Unique".into() } } diff --git a/node/cli/src/service.rs b/node/cli/src/service.rs index 941a623dbf..d99f952ced 100644 --- a/node/cli/src/service.rs +++ b/node/cli/src/service.rs @@ -68,7 +68,6 @@ use fc_mapping_sync::{MappingSyncWorker, SyncStrategy}; use up_common::types::opaque::*; -#[cfg(feature = "pov-estimate")] use crate::chain_spec::RuntimeIdentification; /// Unique native executor instance. @@ -506,12 +505,10 @@ where #[cfg(feature = "pov-estimate")] let rpc_backend = backend.clone(); - #[cfg(feature = "pov-estimate")] let runtime_id = parachain_config.chain_spec.runtime_id(); let rpc_builder = Box::new(move |deny_unsafe, subscription_task_executor| { let full_deps = unique_rpc::FullDeps { - #[cfg(feature = "pov-estimate")] runtime_id: runtime_id.clone(), #[cfg(feature = "pov-estimate")] @@ -1032,12 +1029,10 @@ where #[cfg(feature = "pov-estimate")] let rpc_backend = backend.clone(); - #[cfg(feature = "pov-estimate")] let runtime_id = config.chain_spec.runtime_id(); let rpc_builder = Box::new(move |deny_unsafe, subscription_executor| { let full_deps = unique_rpc::FullDeps { - #[cfg(feature = "pov-estimate")] runtime_id: runtime_id.clone(), #[cfg(feature = "pov-estimate")] diff --git a/node/rpc/Cargo.toml b/node/rpc/Cargo.toml index aab87187ae..ae9b4838c8 100644 --- a/node/rpc/Cargo.toml +++ b/node/rpc/Cargo.toml @@ -44,4 +44,3 @@ up-rpc = { workspace = true } default = [] pov-estimate = ['uc-rpc/pov-estimate'] std = [] -unique-runtime = [] diff --git a/node/rpc/src/lib.rs b/node/rpc/src/lib.rs index d77062c38c..2e11d0e5e0 100644 --- a/node/rpc/src/lib.rs +++ b/node/rpc/src/lib.rs @@ -80,7 +80,7 @@ pub struct FullDeps { /// EthFilterApi pool. pub filter_pool: Option, - #[cfg(feature = "pov-estimate")] + /// Runtime identification (read from the chain spec) pub runtime_id: RuntimeId, /// Executor params for PoV estimating #[cfg(feature = "pov-estimate")] @@ -197,8 +197,7 @@ where deny_unsafe, filter_pool, - #[cfg(feature = "pov-estimate")] - runtime_id, + runtime_id: _, #[cfg(feature = "pov-estimate")] exec_params, From 57b560f51aa1845b96dc47a800cc17714d17f699 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 17 Mar 2023 18:15:06 +0100 Subject: [PATCH 017/103] fix: patch wasm substitute for sync --- chain-specs/quartz.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chain-specs/quartz.json b/chain-specs/quartz.json index 686bd6b597..bcc8b09a36 100644 --- a/chain-specs/quartz.json +++ b/chain-specs/quartz.json @@ -18,7 +18,7 @@ "para_id": 2095, "consensusEngine": null, "codeSubstitutes": { - "1161532": "0x52bc537646db8e0528b52ffd00586c9504fee405bf12501040ce281d1910520b65321e4462b74965410b9d952a8a8a12b4c27b9528e0402c3ab38ff619fa986d06f6390ca34c093b34ff318f5271734a34656db37b31aef6a4ddf8dd9fec2dc9de5b4a99524a01f714f210ce11ba456147524f5905bd0ffb7665d507bf3d65953a11b3782330d715e8f367df6e0af761cfae4dad34ffc167c77a4839689d5d7b4839e8c37efdc3fec39e5d7b4839e8e37efde3fec39e1df24a59a5ceae40ec21f9eb0f6bb7ca5412b879a3409f7fbbf28a5d5d79b5fec157e70eb2aa7dea10a70e59d5be9b917acaaa0ffb76dd8c9455ed44bce23eeedbd7db53bc82de3e395e29abd4db757815bd7dae063b7ddda21331116fe70305fb75ecd7f381c2becebeded27ef494551f7c75d8edebf6649dbd8f7d9d8815a83d247ffd61f56e175349e0e68d027dfeeccaab7675e5d5fa075fbd3bc82af6a9439c3a6415fb6e46ea29ab3eecd975335256b113f18afbb8675f674ff1aa9d7d76b7cff14a59a5ceaec32be8ec73b5eef475834ec444bc9d0f14ecd7b15fcf074afb7afb7a4bfbd053567df0d5757bb2dedeb7bf4ec40ac41e92bffeb07ab78ba9af401ff7ec5379f5adb743ef0101076efdd39efd6b5756a9cfee9455d009c0adb7abeb16651da93d6515f43eecd595551f7c75229edbc1df9489d2b63ea984e7a2fd3a3b4a99286deb934a782ef2d7d93565a2b46b9e4bceafb3df2813a56d7d5209bfce3e57db8e5f53264adbf45ce4afb36fca44695b9f54c2afb3cfd65499ac7fedca2a758c57df7ebbfaec0e6395fa00b87675dd9c28ab3ef8eaed61ac5227e2d9da76fd9b3251dad62795f05ce4afb36bca4469d33c17edd7d951ca44695b9f54c2afb3f31605b65abfbedb13aef5eb1aaff4d9757bb2ad5f2762222662222662ed9455ea0ac41e12f7fac3ea65194ce5a91f70ebea9a4d5dc2adab6b365500dcbaba66735d79f5a9afa7ac525767ed1299dad412f37a4d3500b7aeaed9077eb00d423871fa20061f08f2010c3e20e383373e18e383323e08e283130421113448d00e8260080224c84c900d82d0082223e88c0fc004951194469018aa2482c4042d113426688d0f60085a4190164165824c10d4441013414704dd1094c4073304e91094439012413404111214439011416c8286081222e885a03b828a08ea23684d901f412e084a138447d00f413e041111d443900d41407cf0e5032f4160544a04a140c544d00caa2692bc4025844a07d50eaa2192fc91c48f2436485283246b92f4a142426544921c24214455840a88246d543da87e50f9a00a427502151149cc242923c91849c4486245922b927091c406243b4092032466207102491148a8405205123248ae405206123148b040020612239030816409244a2049020912488e4072022441201102091048bcf8290389163f6420298384889f2c903c81a48b9f3d7e68f063839f353f73fcc8f113c70f1c3f6a7ef2f879c10f0c8060007ae1878e1f3d7e6600e40250eba7cd4f213f3bf821e447073f83fce4e087cd8f203f38f8b9c14f203f80fcfcf1e3829f343f2df861c1cf0a7ef0f8b9e347053f76fca0f9a9e327053f6cfcb8f1d3c64f1a3f6afc9cf1c3c54f999f2d7ea2f819f3a3c40f113f42fc00f1d3f26ee05d8189d9818107693a323b2fd851d35141248e9ba69b2e6ebcd08902c91700880145c40d169d9a8e88243748124827a643a23b421bc323039703e765c70e0f065d1149d810a9c36b38b2c7113d8ecce0081f47fae892c089e148130e11db143e88d7c30e1d3b77cc31a8360070034e053836101904c7879d383a1876eae8ce705960637894e03941e6c69114a4feb891e3c68d1b383c704174033544a744b704a7448e1344e4c89122a5079139362b724e70a415d4e63483931e1eec000039c8e121a68153c44d21dd0b5d1fb1079c1e7e50c083444e143c5010a1e3c486c81d2740221a417f2499011134393ee48c1194c5ce0a382f7084f07808ca01911cdc98b9b1a21b03001988d881f190830417266b6307cdce1ccb0687071662e70cf6c429901d15fc98f1c10b394adc6cd1c9805303ce179e203a263026ba1ae4fc9033c526c5cd15580f37629c6ea02a1383f01de410c19304114282b0986472b8086af270f0e00feecb072e9cfac8e038ad39f991d3e43938e10033c1ce1b3b7870317810c89c623b622705395470580485c103830f5a4137c821e3244834c10d183956e45c110b0912e46483d31f1c0b3c00240788a03c825ad0bdd1d3e2b9a287869d1678a02615480a10e9c28d16b186e805cf0e3755f0c4b0f981648b941f3962a45c90a48624342441224921db152921ba2a5237d8714197c54e1e73860e8b9d34445210d3fc607153e6260c4d0a5763c78dd40cba26527ba4f8b839234583d805b683ec62c7869d2a76acd8a162e78a1d323b6576b4d8b9c1833c8850d199a0f321278b1c323960e46c91f3454e10396372b0c87922278c1c218848c1a383ac05938c217e64776476cc338604b2b54027079d304374909201162615032c87ae87247a0c512348071fe060481a9920397fe4ac1972c6076d7c7006878bd40b6ea6e8c2245193d3c50e1b9d0e3b6a043d81ea210583541e3764301cb420920872aa4197c3690fae01b301e503bf00ea71e223a7881c1378c082949a1c1d988624802021e367889f3570a6b8896327063773dc9c2142462ba2bbe2868e9b3720121b0bd604128b95618dd822b23a3a2392e491848cc84344222e81640cce8a2ccdee10a7f03376e4b8a1e2e60b2270a8b2987be4b8205b81fc22c78c9741440549f8c074484283247b4826b01b7e9ae0f942e4cc0e1c9e1a5e1aa817a4dae0890255030f5e8002e2660c2459ecb49153c5ce1a3f629c5a48d2c8d06c36d8d66c7f6c79745668467427e886004021dd0f5d109d104906e980e876e878882cc8119373442626a78cb686968676865686368666c6d9b8c9421342a38167073305b30c9e41780849e190a9c09b628ee14931cd48e5e04591e131a48f216ba61ca81f260d394ce4a04072a133452a8d76026d08af102251109922090e32160cb1818e14d91e1b466a8c9414a92b5256a4c4489549a9914a2385468a8c9419a9335265a4b2487191a22205469114a4bc484d91fa226526a5452a8c141645ec285247113445e8485591da224526d545aa69078c9d3076bed87162678acc85ac95e581818185817d8135615e606260663235282b5060a0bc4045811a83920205056a09140a504ca0a6403d81e202d5042a0c9413a82e505fa0b6405d8122832a83d2024505aa098505aa0a941247743832c491131ca9e1c89723361ca1e1080c476438e2e5c80d47663802c4911f8ec470848823608e04714488233e1cd9e1080e477a38c2c3911c8e1471c40447c21c7981870c9e3778dae00183a70c4f183c5ff064c1c3058f163c4d3c5ef0acc1b305cf199e2e78d8e07183470d9e3278ccf0a4c183068f183c70f098c133060f16d99a140eb0173030314c8e1639509c68c0434825168c1b2e705ec8d96105591cec0d36900564ff581bec9af563fbd81a2c1fbbc7d26067b07aac0c36060b8355b379ec0bd605393d44323946e478919304c780c7c85922a709b6012b64ebe3670caf0d122e7286c0649062c826c9868442aa219d906bc831a411f205f983b441a545b4415c13ff8831882b8876c0246216118b7845b402c998c844542226118d8851442a22145187b843c421e610658837441b2218a806ca0086814240236011700878041c0397804c4025600e1e0ee017e805c2005f802ec056b7e9427a074d48eba007e91c349b16a471d037e8401a90fea36dd06bda8feea36bd07cf41e4d839e41ebd132e818340c5a4de7d12f6817749a6e41b3a057d078f41dad82b6a3d1741d9d82a6a3e768393a8e86a3cff41bed46b7d16cf41aad46a7d168f4196d4697d164f4182d469be9a60ea3c1e82fda8beea2b9e82c1a8bdea2cbb4167d455bd15534154da6a768293a8a86a29f68271a05dd448f81313413bd442bd14934127d448b6923ba8826a287682164147d02f683a3e033dc07cb80976033dcc42e603178061c06ebc15fc82c180ca681f4829d601dd807364112321c840cc340fc04c13ff00e5c041be10de2e9c0cb01cfc05f180c7b913bec142bc5e2f1812a3bc762b1506c165bc5de21c1d827420061c96c145207b9844788b783f5617b5818f68575615b2c2e5432b061a42c6d41fa28b033786005280d70d2c488010b78a212968711442880d0152c06735f17e78a8c5b0b952315a44899db2860399222e5e4c181ea69816eb96285cad2110a528e8e5248d2c30211281db190b484e56805115039c17b56a04755b064c152054b1608bc073d78689614b058919225052c4fae5cc9b2800580d0738795213d2a502c59ac2c5151620105294b59ae6c916245cb535162e189f4d8d1f5a0d12d22384292b2e50805295b447004e56802477aea58523ae28225cb02847a52a02258b252c5cad2162a578ee850a5a3a52b56529032875eb942a5eb9143b72c69b17254e54809494f1c70e896a32d2c28b15065003d67f46889ca91529537f4ca152a557a7adcd0252aded3862a6551618905233d6ce8121529472864a912809e35f4a88a15252d52b65001c1911e35b48a952d3f3d69280a56a448b1a2e51770820424b0020b474a472a2c1901a0070d0d81152daf7484a494e50251ba9e33f468890a0a56ae50e122e588852316224001148e4000022a1400a1c70cdd8254e548852a65e896252c474a472a60b1e23d6460b192824fcf185ac5ca162c5694965a389222822b5ab45091a27484c2152b2c142155c972a5c8488f18ba82142a4b5450a0b274f4009c1e3323b072858a95252b58ac10e96952a42a59ae7c40cad1120b558e5a38cae9094395b22c40eb0143b72c5959c1ca95232e5696aa1ca590c251007abe50148e94b26cc19245cb162f74cb1295a52d5d70a1285829d2b385a27054260459ae5cd14297b658b982c5ca0a286411822c57ae5019d283054ecf157a54050b952b543ec0d363858ae08a162d2c6c917285ca52154a65890a0a3a3d54e8162c59ac6cd9626505a5232d524400801e323d3d531ce991228a2d5956d0e2410f14aa748425045988f43ca13b3d4ef8f4a0e08885242b582a90ea6942b79e31bae568052a58a41cad70a4c2d2901e2674cb9212152d52727a96d0a32d543ea0f528a12258b2a294c58a92162949e896a32a4a2c64d972a444a40789a514b01ca15b8eac2c291d69c9a2a4c5831e318ae54849a7c708dd82e50829cb9294252c2c64a95285ca4e4f114b2960c1e9214251b02245041f48f50ca12da060e5e8ca952c55a42c6da172458a152d8fa4b482047c748fae7c80ca1216165290b254e548c90a0a58ac4891c2630257c815460d40c0bcb2a636b55abface691980c3019ac96bd20475931334761e65594566dcf9d3a8039b328e7ec6e55abe6ecd8029833aa66cf55a9ba7b766cd59c320a60bb55dd73b77b55dd3db7e3dceddd39777777bb67cf9e33729c516ecbab63bc668c71ce566dd538a7cc5475e594336672bb63d69d65338b71b19965524ed9b1bb77724754969de44d965d98dcae1823ea92737b93733bc5d85b3663c7de2855c61821b0b1b3498088cd195b7677b6cb248b5142913b678c1c7b4623315b99c918e54ec9cc5773b79c13ee4602689a08baf3010fd818e392254b96f08cd3c8dcb90570409c998c1b97ec841277ceeec95315a3eec5cc7276dc18e36e8cbb02880dc011404e034e4f64dc9d9deeb9739d98e044e75475a25363cfa973ce9e7176cf88cd39bbc94e38679c4ba491c9336ecedc6c4e95ee8c46713260766412a3083fe784308a1017107763d0290072f69c448a44f07eee92254ba4ea6673b3ec92998c3c6716e569ca128866090a884273ee4ced69e50cc0696211cbe28c2b4f1163f2419c30de48996db673b3384f31c6b831ce183926000138721e800993b964c99c7342c998dcd3e974caa49c533bc68d4be254c5b8dc59b64b62b700328e312e9318a394d9cc66ecddedb87246120c40c2e438e746cd20847367cf18e79cbb52ca19773339b34ce714c09c7337ee4ed553008662af540b1077469572c6113a6de59c30ce480039e5dca9edc6b964c994f274dacdb22ccb6226a53c9de6e914e3098bf18465bde1e46cc419c2e168ce29e6e06438923b6113bbc186e88d76c4e2d476979ca60e40b5bbb5bbe59cbb739b71667d64c6397f6614e147849f1f11e68c5167479d1a35c68e3d63cb2c935276cf99c54cc6c81ca3e4c83c77ca19e35cd9136e8c9ab644eecadd1985ba23777373cfa9dd136b996519b6d846c56eb2ec06d3d369356de75c1297645996c918e38c33c6393776c659969d3219e7c63859ce9da8dddd25bb716edcb97089ee6c5cb9322e0a8542ed9245a1764edd19e39c2c6326e3a23aceb9cd19b5dd183546d8da94aa9e5300514629a39432ceb9d9ceeded8eb1e3ca2877ce39b3ac65dc38a59433dbd9bbdb73f6dc9ebb51899c214c1062fce00339e7dc196763989459ef9cb137c63865bc895175ceddee39658c73cedd39e746b9bb73ced972eecedd28777777cedd18e794714e39e54e9949eccae4e926dbb62dc66cce8ef294cd2ceece9631caed2855caa81d394a6eedd872ca2cdb9e7377596ec739678c7277ce18a7eca09e598c3136375fddcdddaa24482207208b9c756371ced8dddd310269ec86dc3de7dc9d53ca9e73ce38e516659c5146194f32ca19679c739b913bcede39a7eafcc08f0f6cd02815e188cbd115292d5059e1c88f8a00822c57a480008b15108020cb151e025cb9620549c84bd2a95c55248422498e7c00002122285cb1a24215294b5758a092c2110a415b920128fd78b04445e908cb1108940270b465cb91929615b2541932a20338e292a5ca9192142a5b50a872244504a4550106a0a5cad19610502a5459a2f201292a6cb182c54a0a2a9f14ac281d71916200110a508001a0702425cb9216112855f9f1168e50c062450a162b5454a892420a593c5d61558423a514a4286559a25225cb952b548cf4a070a4748482521629ab020ce0c88ad2d207472b5859c2c28292b793c2120b1eecb470a48294252c5694b448a9b2c5ca0a4a5496b62421b28507ea00b26451ea41aa42e50357ae6451fa8087ca91528f088e90a42cb570840500a9a52310f0e86c59da62a58523239b8a80258b95a52a54b660a1a2b42465c9ca0a2b645115d101b460258523252dde8e1295a32b557c88a080e5488b162a528e40404529cbd2162323ac3c68214b089600b02ac0007454042958b258d9a274c4450a09031041ca008e90a85cf980141060b1a2c2162a2a48596ae1c8b96039ea21ca2250cab2c2d10a920b96a30661bb016b9ca24c4c2c18999898e4c5c29858d9646262b17a32695394c5baa6288b89897582cd6a169cc2b44c3a459998989898582b9998e01465b1ae9ea24c4c700a6b999898a9a7b09898583d85b52c269ec2b42c26a69ec2b44c3b85699998788a32ed146562e229ac65da9364626265539489e962615358ab5354a7302d134f51969ca2ac384559d714d6b2e014655ad6f214d6b258ac9ea2ac9dc25ad64e39217a5955dd15b650d1ba83dfae5ffabcb4f782287522ded7ce83acdaeeea54090a1cbbf0d1e35895a465b0ed1376de4757e6eee4bc3980154673b727f6e9275f2c7324cda7cf53f74de76ddb7c4ed57afb4e272fe90607c7b9e1c5ab305e1275e3517be39c50bbfce4d127d7f970aeffb19ef353a724f449fb5c96f83947753edc5cedd4a90e1ed5f1f79f3abdc1a3bafed91aaa833f2f5d6e78c91d3caaff06e513ea420851378ac773b77fd3b1131c54271de9e4d33f9f70ba6e4ed6e79c4ec4136e26109de2e9743af9dcff3455d2bebabc10c51e0a1c6cb9f09bb7cfacfbe067dedb8d777fe6db8da350992fc9477dfc996f9d12ca97e4dfb86e50a4dca0bacce76a5b9775df7ee6ba3920f32e73ddc6b93c8e55de472f75b3170e5e9b6ee0e3d7e7cdc6c0c5d7a61bd6a82a09c0ec9b27d2495fcebe98f7e598abef66a45deaea2497fdeb728939e6f9cbeef290308fd189b8bb2f29bdbbbb3ba9cbf33ac617638cb12fc76ede34773eed8c5dbe8e75d7e558c7de9dfa35b7310c73dd9e68f929dfeda986803911632ea523b55f3eb10e6b575ad2be7d497e7b6be1298f6198a71a426f4da2b787395163ddfaa51ebbde9c2cf430567172af2f5237d027ec74eed644c9a0c0c4fc633d6f174c555db12ebfcb5d523f11cf1b16dceeebd26ab55c78b8ded7e5ba92ae366dda10f2cb9ed4bf5e12f4be8eaeddb7c47f72e9930bf75760cb85ffd8932e425c68f35c3024e8edda7d994bbf5c3dee34762ed7b327615e5e70e195b85cbf8545d4da49e74effea3e75e9ea2df19fbca425e461d62df143f77c9e6cd3b7f366d42e3b75a2c6ba8e0b3fd410d8257fd2350476dd9a3420a9cb43d7af5d2fef63fdb55d1e73ee3ed8ccdc29e6bb85f5eaec49fded32a91f3ef490dae17a7b48eaec299644954126178eb71be6f8291c176e5d7dcd73c9b9e16f7a2e72dbd794c93abbc62b5d40e6fabc919a6bfbc7da53b7353979cf55ed5e65f5755522f4eaf209d661ae9b9375cc89386584559af9763b7533d2c6e15875f2cce7c7faed52ac52cf3ad84dace3b2bf1d97fdd3c9b14e1fcee6ed4625f5fb34e9cf3cf35c95a8ef63ddc943c23cf32d097b00e6d94d74e8a96dbf70edbc13eb3eccb393f7b1fea49bd1697a5f979fb0f96bc07ae6449dd4e5dbe766fd1febdb3b6bcfbaf5c271df57a7e465a7ddb758f7455fbf3a9ff592f6a507c2eb66b4d75e714c0ef3d0b963e2902e4ff2dfe5ad0dacd2b78157fad08f948992d08f5167690c7c5dd58b9e97189414450733a4681dfadac02b9d1cb8efcaaf0dac822e048313bcc42edcb7363cf44f61f0d0bba8731dc42ad21b0ca185115a9049d36a15455fffb8d7a2ed5af0091c927801892f8abcc4a0a4681dcc90222f31709174300a285a8f1d18051475898202eb5d4ee820e87be6a147ef120505a447af0b510741975e972828107dbd2ede41d0a327a41df461ff6953d3faa767140732a431a6062a70c20571f8430741074e8b583db0f14511459841530520455aa4fe0951c05bada2751b7895e4370c13b3b6a198a9cae41362ddac4ed025844cdf328f879efcb00c7ae661c1bc0ff32b2c2ad6bcf430ffdafbba3cf475ccbb836ee4f09837264ee91fd37feb2dfd0a6b88c7b024c04bd34bffa0f7b5f08d45dd08f3d2bf113cc43c2caae6a5774213602ca9430c7803196fe4b5e986257eb226bb315dd4995843145ddbe6c7b4765840050c336841df312d0f6e588207314a011033051aad252daae6c7b496d421468b4b02bc34b5d05237c214a97f2378e9aa07505df269530d2bf8a5fd312fa89aa2cb6ba99a22f5baa8336129e2083b5c20a4d52a8a5ecb4bab55a4fe7579e97d5a26d462a70ebb76de2cb0a40e336d8ad475b3008e0b58c0442130b46953a426e87c7bccb4ac655a164719c66c181dee85c5e8ed58c7c528990a6daae18b4fb12aced616ba8cfb90394d3b74754c9944579fb1d7851af3cebca5b7f4f64c3a26a5f7e5dddded51fa648db780d157ba0ff47d7e1fd885f47879ca2a0959a5105325cd6ba64687ca44ba7a5426fbea537623b02a4ef142ac8aae5b7f1817cc7be8e4d1553d343dba115e4156611e9d0465e2aa04f3e8b3e33808f353877110e6580fa53808f3cc63918fae61fe1be1a31791983714db461b07f3761a087923acc230f7b9bc9fdfe72fd7a61aac786daa818a4fb10a7399043ff39455d8d54555a2ae1b5425cac4acc87dc5540d7031720b606a07fc863d246df5f509b5dd9aa8abf36a0b9cba749dbb35e9d8a7ecf46314e9ec5787241d6a27bdb70748675765b24e4eeff289baf4be3d3911cf53f79d34ddbee97b9a1dd2e5eabc35b9fc7ac0f580ccd5fbb06fc1cb0b2eb45ee9e45b587ff24e9ef48540073b68f35bf44c133cd0f0d3b7b07e7acaaa93f7a96373372899e7b3b5b83939bd9432c60821ec6e66defdb835d9bfbc313f75fa71aac65b9393f7ed9f5c3d6e4d4eafaae43b39e6447df281e2d7d7828784795297fffa31ec2fffa42fdfece368af4d3534f15095c4d8619d76d9463da666e1a07fa98f2ec4ab0f23815751e8a3471f8157381fbd86d64737c2435c1411f031848f1edba37a5c8fae40d143d226a6a9baaa8aa58ca030b575bc4c0a7af40b8bfe97f44fd1fce524609c0abcba1c01bcc2f9cb31c02b6da2018fbf9c033c048b2e45a364fc5584042236c22bf5cba776d79a15e4af8e3f9583bf7c2aaf36eaba2ebf5c812e0f49d7741353b3381835bcfea58ca81ecf40ac3f7c605a9967e77452ca64df4bf8522923ed5cebbc93b931703853517363e0d67567ae2bd0e753b876c8fd7edc7729235666bb027dda348398670f81e355e33cbbb76bff71cfcb69acda9100ab4c1d3994f9a30719a8a9a148218ec6aa9ec27daa67126640f3ec21f01023e0d9bbdbe778c5aec32b22cfae61db7ada6bd30c683cf452ac5a6dea18a66ae118d3b8004c5581639f33699f7be0c389e6d1b9dbb2cfce9b09fa998714bb8f3ffa764aab4aa22f619fa46d7e3a6f4d343f9d5c3713f4a7c742ea97521ffddb8fdced6bddd2c039bbe699cf19a76e4e4e9ef976dffe7ad6a92a59e76e9b88b7fb326fe70d0a74cd757b92b9e644ece4f2e9db4dcf3acd7b838239e6eba92ae93ef6329f1d519fbaa46df3ea59a78f755cb04fea425aaf7e75dfd23efb3a4b2ec740ccc731bec9bc7ff4a9499c361d11e66f92b68b3e7573c2ebd0fb54957cda84041ab83569d8e9c7ee633df4ee7ca0c4319e7d3ba4f56f0bebd9e342a41d26699b366d788be21f3d7a1f8b0b113c9a1cf92e8ef1dd2d3194230fa53b24fef661d7de317a4bf395559f361d81e697f8dbfbd8b9ecb7b77f77febc345f9d15976b309587e284dd3e059458e33f27852c11f1df520b0469fe5b0ad34afa6fe90567aeff58d0e18c36d2a469725a53c427699b3685402101063f7e8d52e0788ad72620f87816f3dae4031baf7a6dea8190ef2d05aeb3786d22628adfa6d72621fcf80f5e9b8410e2db778b82b55a4f60abf5b0eb8f9d173d13c596ebb9f08340698d8eb8ee2ec9eb6694c4ad679fac75e7fd6e4649b0d5d2bad33e7e42ad3bfde367d4bad3407e464d6e4d148fc7e3a746c852f6622ad43a7f7742cfb42ce64e0395c47c6d0203c4a78c4c2c35a871079919b0f96246916a53bddb9fbb194156ad2babd6f359ea87ec3d81ae9dfe9cba3991dee72f1de34d1b07b24abd6fa9ffe4295e4d6f37c2ab6b5e59e67d999f3cbb34758e5757e6edf3eaf667c62acd7773a2f390559af7697ed2baa5fecce7b26ea3743afd53967a75ac8766f022e52055259f9157ef93adbadf7e5209ea58b7149f7d4ed67493de761ff6ebdaf5a68db329e368acbadc5975b5eca0f7ed4bd78e638c55cca560a7ef580fc156abd56a15b5ab94497f40df7edad8c35457a06f5bcf1a024e7d5b431d1387d4aeff6d8b5f9b6ab8e337cabaf0ea7ddbfaf6a91b74edb8c057871d949b8ff51f749f27a7875ed2cdab6b1d2ff49fb6f9af9d9da8bbd3d70e6adaad0edcfabe7201d4774bf2e77e5b3cc66cef4e0a17c18479664e4123bfae9b146e5d7fcbd40b48e0840a70984a79a6320e78e00005065ae0a0af370f683c08af4d6002f9a95b036702352760c0046c340e4efb446f67e7a10ca661600a0f40c022b8383d5c6102af3e3f81571f100678f5a9a6f0eae354e0d59722e2d5a768388057fbd08578a54d3dd8f0d047e0a15834e43f9d2347d15083f39ff2f1d09557f13f9dff841e7a08bcfa54bc6a9f27b005bf39fedd9a2819add6afa794a46b5aad5fcaf9e8bd9dd292f651b47ca79454c2b32a595f9240bc4ada36cf0e95d497e447df0d8a94678f5dd29167d72ea9845f55b2ce9e6a08ebcdb839801546cbf5eeee6b973e65f791e0a377294109982e266ec2deba398015c6ab8680791f3bd2e57dedea5f6c127b7bd29e0f94af04cfae1fbd6fbfbb759fdcb5cfdd4c207ad5103e6ec2beed0c257a50d653bc920edd880c7a7cec741d369920898f5d7c8e57ead07578151dfa8cddeea09042b68d86a01ebb6df3ba358015c6734b43506ebd6e4fd80576e81aafdaa12b10f49074cdeb0f2b6e96c5540b703e556375cf991c9a2690830d3870041ed09e6ac8107abcfbc5ba0c68588633cf1c431a9dcaabd803020e1cf4e8bd19c5d84fd6db1363053b7deed879dbcd687db616b727941adc8c3a6e46ebbc450f6e46d86682113bab77d14cc5c269530c673ebe367d61f38ac3715fd670dc9734afe215f4fe72e6db351ee2a2662762c8ded2a39bc0b12b3b92f49455d1fbe02b84bb6ab48280d3a62f4d3cf6daf485889f37d8a5ac8257d29187fe692000c1b5af23455fef8bde0e91a24b9fdd4108a14b2762e8214567ef6b8f8ed42ebd2f7a5ce243c7262bed2ff1c7a119bc087210bb3a8410e3d5b77e393bc761fe5d2e7d5e9d8cc2de4ec4580797d9af4e7fcaf6b899a0df9e0f149fe8fa4b5ff6d1f7d707ca7afb7a7b4bfb98f316651df3945597f7c187ceb10a3a11cb6e3f76bd3d695fefdb4f7bed8e7bfd615d1bbdb41371b376a1cc7500a75b03580fa1a7b16a7d59bb0cd8dd9c549132e764953ad98ff5eb69de04895d1f49bd24a6575ff59455ba458738f8dccf1be9ca2b187bdb61944ed879e5d384bdbda56fbb948ef1eaf2bee848edd0a56bbc6223c93d1113318b77d398ea006ede40f7e2753d8d55d0a1cf9b22ae9d3d89e9a1435fa3a47de811316bf70353792aafb857dae4458957d7ce0b0f8464e1d83fecbbbddbbb9b8defeeee2b3034e1bc52f1ea83295e7dfeecec40bcda6718c23cbbc6435dc45f08cfff19797665a12c53813ea16f87bc82aece50535e29ab3eeedb3f6d5f1df210d641edea73ea36dd23b38cb25eec42e82ff5a91ed20e6a6fef57269847f48214aa44ffe35f573dc0e511bd00852ed15fef6397dee48eeb6787c28fc4ae71bc62ef5b97deebd03fe9d1a7ec3856b5c70e63553b01b875fd0ffb76dd1ec0be4ec41ac6abe8ed1caff47bf26614d9777300ebd967d4b6d38793b5d8edefc61e372365d517c2b76f07c4aa76dd8ca0e7ac6adf1cb8f6cfbfbdbd5d81da43127afd61c9852d98ca02a74d2f0cf104786d72e1cccf1bdd88d8d99557d2d521af2e7ff57975fab2db9f3ac4ed5fdeda6e46d201accbe76e4fa45fde275dfae4ed09f7d27583ac82ae9b51742296ae5bcfa91be67dacc7fcea3eec72a2beba0ffee5ba19613eafee63c05f3e75cbbcaf85cffcea3e6dfacb65d7821615a660e02fff9455df097ff9275d59f599d0b2d3cfbaa46ed3a60d9b977e751f021efa5cedeaa047b9fec2baa4eba5f7ed5f5ed2b669d3a6cd7fac8f3e57939dbe6e4bfdd153567df077bd3b65d5a7f3eb0ac4d8f60ea6fed4805b57d7d3d42c9c36b9d0f41ff6ea18afb4c98532afaef1d016a9a778a54d2d36fa9f91575720dd2d61aa125ead73b7bfdd3ee4d5baea435eb1abcf9dabdbfa644d17a7017ff0c12a7de83d20e0c0b54367efcd883d559c06fc1108abf4d761a7ac629fad71b7cfdbba6eed41dd8c3056311113f15c6d3b7deef6758380fe3a1113318b77bf98facaab8f5d1d7a0f083870eceb9fbab2aa7d6aa7ac824e008e5dbd3d45fc6b35dfbebbcb29e7cd88c7793332d224273ad1c721a2f5d259d51822cd4be721d6bce4fce319e21f4ef61e383b5008bcea71f6d5a13dd341edbc9a8eef66b473245584bb791f65f23efef1aa55e5e3ebaa439706f938f4f1b81b083860da119c7e4f13ff1e3f69bb19f5b88f1b197122e6ba8f73f79ceecbf1214d587879e9ccc323ddc504f243dcf339441bd2ed7bb73f75333ae2ba19b94f5ddd46794ec4444c64a79bbca1cefd08009af07b3e77dc7736a323beb319b9ef78dc8973cca7074388a451a3071f6ba68e36c4bb6f1fc8a76e46485c37a3243e8b70373519ac6ae7ad9b58d5be74701f0cc3a6c3401e8050266c78e5dede84f0ea8803c03f2c897fd00b92661300ffa00ddfde67d6318ce35229f5ff3aa5bdf372a3dc7b3ac893c479362324ceb31925711e7727fc467cb8c0674fba79f6368f7320e7ad0990fb383b7601b98ffb00b5175e79dede607aa873cd8df8f0aac7db170f5ef178fba6e155cabb88b727e99a0cabda91747d05abda03d0751922a7ad893bfb90ce7d72f7e3f3c7b7887381cfc393e2e1e171945f45244feac7f381e2cee33cee113113d1727cc8e6c427691fc8b9407794fb24edff3817f849bbe63d4fba79cf730f3c6e51a4bbc7651fc8fbd839875b9421ee795cf67fbc8f9d881375ce669433647392e321718e3912115fda1fe2b388a63cb521af4614bbd73510ac6aefba1e8283dabd6b2558d57ea4eb2658d50e80aea160d510bff9273407abda3de8160dabda87748b07abda89749b8655ed46ba55c3aa769f6ef560557b4fb77cb0aa9da7db35ac6a4f751b08abda8b74cb06a7fbf6711cdbf64c1d1c09ac6ad7f19d6e045675dcf64c0f711dd48e11f13e8c1bd29ca7e309657ef24fc80e6592b46bd8d1f0164542917e8657286fdf39788546992894a4fd215cf687785f8edf3817bd55534fd4399d3e4ea7cf75371ed6e9b7847cbbd67da9f6d97d1bc8b79f9636497a10fb6e7ea11800744f1913c217fab581d3a62b78f8e8fe52fb78709ed9171ab1d0cf4bbb36a3e8dd99966d46ed515e3a1b3b2056419738d0d985b683eac5cd897fd436f2b2c7bcb18ca93c4fd93c9d4e99c6359b294ef4312c0c062cc118afecea549540c73a98e1388055106298bca2bce4ee2e8c516e5c9846d358052fcf1cc3e4e5719987b10ac2354e3827b02acb308c5582c06ecb3e54c5d1c2cccd7b858c529e32f96198439fd86604afcd047d79c9cde8baf621c759765d7a69b0395bc9878ae3b82be260007365e99c0e3373aa51da7494b1218c50f6d0dd32c33181559c63b0a56719bc164a2151c68630c2ae43258e1156711f7c0c835fc8be2ec64100abe025a584104a086594b1218cb0a98099ef461c1558354f8cf96257c77184db13e9a793c418db8ed2a6251b70394687dd1566e6de9e405fe2871bec66666f5b77bba3f775f9e80c2111476ed8cbdcbc532cc771578c128703acca9c3d15399d796d46d29359c775975489454c398ee514dd2d21945dd2fe16d64becea2086430156619e393bbcfca4f192d0a373a750830e7915e376c7d8e52f871deb31ef831806a38c0f631faccc37d1d9fba0f43e56ecf4c22162955fbeedb07b7b121dd325fec80f79b575caddc77fb569d3a6906f870cd9a13243281b46a8aacaddedf91a54b041851769e607af2b4a1c1458e544a3b3305645879055d2a5cfd5a4abee16e5f2fdd8e5bf25fe0bf24a63d5fa5ebe905512bafcf5334070af4d55acf92a9a5e9bac68e253af4d56b47eb286b14ac6ccfb60e644ccfa6b89ff92ce310b2e8eb20a62bf9707a399b9ce5062270dc5e5e868db395119d67c8a55aaba61c24c1876977b870c8430ca22665cd77561d9ce0aa6763a9d4e533b0182d2b66ddb503753ec0047e3388ec3c9c98141471b3264c8101d22a81e8a683b3b3b3b455230891e8d878787a7c707678c079a91cd48bdf814abd4c89604dfc86694b46d3ed3ce836d0240db4e3b6c049c364d21e6bfcd94893ea64cb2d72632653ec5aa23da7664cc7c4ae729c32e1961f3aae64c84872b9e50c2092dacb881828925320e89130c9107185ed2b0a20c1ba140a0f08261180f0d2c2672884208367dec2006324b9e80e3091a2ca1e9b0992993030e4830a183009eb8e289a625ae28c06b93146efcce6b931465ae255499c4ff60fb175f99f4169de86f6fef8250c5102d25b0a881207f280d68608688247e1883873b606b2a9032596fd72fbe7efcee9ce877f469c2ffb16bc2bf31a9f359d7f769b2fcfbba5180935eeb163d9d18a3a7c32a6e042212d87812465034233cfb47c2b38fc0e950d3b1461d72b4a2c8a38d22f6940eb17838c3023476c8c20a2ee22862771d620951440e0a9923861750504411bb4a872640c31b50d8c0823bb81844d32c0b3654632a902a13e9bdfc13f24ae3745253f30fe8c740ef8ca8aafdd4a554d59e753aaa5255fbd569aa6a971da65055eddba9aae0663406fa6e4edc484a87d3fee1af97d4e577bdde6e0ffa6b53146c9ec33a8fa9401f8779f66bb6d6d8cbcd68045631110370b8219bb3d766c4f108f3d5e3a74d4cc336a3edf42ea812d6b2ec23a04a4e5a92a6cf009c08d33fa057d52b514aa883384887380f801ee0e4ea499449a6b9e2703a3a6e82093e3943886234419b1860c2109fe8e3c360180caf6ce0558e87e3b26b2db1d1cd909a70e3ec13b5e5785f97cf7112486015a7fc23a1887f423bfea988e8f8971a3aa183d83faec73fedbb1d2a130fbc3d2a1323de2ef7003edede770501df2ec42af621dd077f88cfee4850826bff849c8c408207dd7a5125ec46bafda24ad87dba8d6197b0f7740b8655ec3cdd09d259f5d253dea72ae27d9e7ae93bde97924ec4fb38e93a1e2ca3a34699f0b3eb88419346874ad0028933530c4285992c8ad8570f1d4a400b1039a088e20465ea286227e255747606f06a8813f5900ee5b2cbe996f8a3500f6124f00a094e9f713aae5356dd6c4b95b09f3973020690e0560cabb64e59b59da04ab4e0be6d352cc2ba4583554dac12d2fedb33bbebc50c31b8820e18b44e400325840a2fe2683d81c399326a031fa0c8228726d4f44184a201051c2d429e78a3f58502ace22dbaec188c063ba82aa9d4047e52978ffe047ef4c68071fdb99a94eb8555bc2d56b163e0846ded1c6a78f569d39ed95db9da4414c31f8204b1460842ccdc8065821dd6704106ad3362c85020871bf05104122d48621005e45007204d0471072066c8e07a685b1dc40efd2b22fde33e8c6b15f96fcf3cfbc47e5b3da44545ffed0fcf7ed264b73f9537a33197cf4e5589f453b7ba447ad6b52a918e75509548df560f450d92ce467e2012e6797be9df82796e5d9e949279d160157b7bdbe4491470df363d3b0578f56d0b055e7d4227f06af15831cf0ebd0f639ee33fa16776215eb5748815a68f1ca440011956f4914711fb82d121ad065d08e247103950029022f60da3432c225e400333368cf9a290368ad817081d3a2a22093ace08f3041c6114b177b76238cceb0f6b876959b18ddc3185580591c630091545217db57c5cfa88c4a57fcc0830571830efc22ac2b0eecbd42d021ee6dc45afebbe12b4a2b46b5877b96e11d0a2cb89180656ab494c18305e5e70a155f48555d4dd27bd6fd9037a081d2a13dd265e234e03fe20439ba0c0e2bf05a307b646d9689a87fb1aabbcb5831d729fa65101f7699ae8a56935c33fa6027dbae600fbea3b59575312522270415f37a41d14fde3f9fe302d5326ec5feaaf0eb20aaaa067dda9e3b626fcd0b587886810f4111efa7744c943ff5201f020f690aa83a26bfe61d33feea1abae5455df91efc8c755f5d0091d141dd3bc0fe3a6f7710abd2ff59feae309d031ece334e84b3df43e22bffea57a7be2ff213d64147b3aaa643955ad679da6aa75acc354b57e755055aa5a9d879c863d3b6f4de0b3c763d6a3005cb814388155d1a5d4632ad0e7a93299bbca84bf579589eee51fc69b9111dc8ce018a9c341d179335a8f6b82fb305e14701ff65101da415f4a3723fe80a02a614f8755915b167c9ae6d77db9a998cab30d32727cea868c1daa4aaca4c6a452424c0809fdf0c02979119238c38c1d7208228d1845ea3a6472277b3723f6d944dcab3e3fefbba27d84982665765d1d51275d2f9d88b3ee63fa8bd786ff96f831ef76dd2e0ccd5c8db7274bc32e698fce5dbbec2ef791be36fc7af1443c63b7607609fbd57dfbb23dedee68d8251c851e5064f193b5b97b7271b736b08a93ae6f6741ee305ed64641e71577eb39abe499a9ec447f7d335aefcd687b9bbdb9b5bdf879a34073886bb55a2e14a9f366c4de43c84170d1705c3b74e870b798d8aba66e5ecd74c146813e8e091cf256abf542d187fdd0c029f609bdba8a876011202f20a3268c3d8c307343510fe91a575c41c81d63c441c60e45499eb1f7d78d3d7f2256a0ed027355c3044dcf2c31be78c97a1f74a9faa04bef2d4a1718a1eff6a404718302bf550d1390f976d6f7e684f5707d5ededec7df1776f9c42e0cf392fa2f1825ba6e0f881ef430d6b54dc3545ec1b949dd86106ead2a61a6277f79abaa4802f8edb3b575d83d81d297b0575ae2fea3af2e89f1ebc2db93d6786b8f1ae4c22f7d4aadb727f0a5cf6dde465dae5b93fecb4bea971a9b2597c3b8698d1d960417bd5555d2557aeae9c3762c5ede2ef1cbd74d468f1e177ee8418eb3102346ccc2951b11c03be632ba645c8ebd2d463a7b2a2ef1af3759df8db083bf75c08f31466f0c74ddc680f122e83121a0280a388265ad07841cb875356ad7cd8423212ee50ea40a01885797afab42c83c0c88555c0e0198410e3ef33eccbb22f4599665995fae19e6027756a930fffc8158b597733d74f2bc83d6d7fbf631ee4f590d59e6da434c72f461260e3cd4d49182a2cc315e21f9cc39363ef3540a3ef3be2b428f79ee9797d2e15ce5409b13ffb9108c83cc1d82458ac6ba7e23bcc208afa45ef210fb17c2abab50d0c4e3bc3635e1c5eb3604e6eb463eccbb7c3deb745885fa4fa7a9d56ac550f41979ace8037accb5878af028c20e314444c18710459863bc0ac063ce95790c05663ce67d977745880b82d3ffb8e71506594504b7cef51056b49eeaa16db55a2d3045ebdd71a7c341eb9e205ceab5c9891dfef4dae40498ffb8f5909c6959db3d2625442ab5de0302103da41d845dced2a17f5784fe720cebf4045c747dc65e7b082be2b2bf9eb782d04b0f097aec56107aa476cd09cb904a75777777373374eee6b563e302b11df63aac0026a1a228748cf4ee96fa8dc680f122e931091545113d1f28f0dbe1436f87ded2fe7ecbb42cc86b8713fdcd420b5525eba9fa76bbaa84a12a61ef69028a2696f8754d049c361dd1f49ff6dcc411cfae295426edec5199a87c6d6a4288418452cf2a5ea56408e4d98d7c3acf3abc5241bde7d9e3f94f13f2614ae1667c6d3ae24c07a92b4a4580b063e290a027f96f9d9d2523d343ffb23c5eba76d16507bbeb637a895d1e156b8aa2d75237c240ffb24ff27375d340926fa66571f31c52b8f54f03e183de48d0a3b32fecb8318f0221c422e6136ab0fbe0c396dec70f319f98b6db13cc67a6f1f684e831cf30cfb04e3584eee3878e6d4eb6f549dbf4aa4a7c9eb047ff6284de5f3f7bd08ba93c84f20fdbfce34efee94cff52af8ef907f4a93e04bcb2fed46d8e75ac9f734e1fcc33df780fc02efca78d8080d722759432d157172241fa94d0e764ad96655997d4657a52fff4b9daecf4a763483e502e8f7e4d27e2ebe68272dd5cd3319fd9c9f5b393d704f3cc33360ffde47a3cf4cc676b48d133cdb16e3f3b9d4e1e52f40ffa1656942dacd71c493adca240cdcb9ca83fc3a4a69be67d5d5e73d9a1bae6185445d8222f288f415504e95b44d45a37a526bb7654a745580725f3903687beb96e462084e1366f395d7adfe6d3f3997e7974e89be7333d28984bc7a6ec4e7e2161d80505bbb0ccfba44f9fb3fb34f7c95c7fbaec7c32af49f4e9d3d3df01cd439f3e5993279fdeb7ff49d77cb676ea34fff6358f4da667aedb9339bd3df392b64d36bdef349da863b72f17db870eb3d69298375e32f71245cfd5b8296aedf3db06603caf13866d4eb07c12d313edc86f106089c936272c319f34e54f3e354dd3b4e2e6002debb42893d29b736b002b076d8b22a46bfee493b56d8b42d400d69f7cdba0f077a3aa1b511f5398973e9bbb51a88f49cc4b3f75ebda1685fd84755a34370debb4486e4fd8a5f7317d98322f9dc33a6fcd9969ba3969efdb6f13748bc2de4fa0774bffdaa340df92fa91daa3efd684f5f1929eaa92af7d1b6945f0ec1a5bba10464c7360039de4e1d5725b4a758ef3ea7c2ed7efbe1c939dcf85f9b6945d7f6fcb2c9328f5db6bd31c467cbf36cd31c40f7228f1b1495e8eb97a4a87bad5411db3e9a0f6ab931deb41468f344da4412306cd1920cea011068d26304d6562ab0c1936649a58d384183dc4009106883068c2803903a65b687c7bb7d834b15903cb7c3bafe9a0f6a12f908c1eec7d518beff558a6799763194c0ff666e635f4f866673d78f5b11a568335ab399a21071d316a7b7570ebd10843d78eea31ce6143dc391889650111080e667e80011576d4a182389248c2cb1b6ec0b1431348a039f383d4e1a7103c66f8810f287ad0c28e38765862072975f0830e353700a3c30d68ce70c13b48a972a0608b218cd0c18f3efe289275c48105e391c45c2683885f6735b8ebb5a98d306c06275f9bdaf8e1550ed48612ffb9d00b796459f6823b6480611886c9d18ae1260e185270ec51088e1f7960ae7220cf5ea0dd01870c260dac1bb6689a618f2f728851260566c001870f710e0c06388ee022870fae8c8c07302e708388176ce8a2093ae040011c5564599665f1cb1c43bc714684e307a9c3d20f65d471c4207d7c71841c70b4e088010fec0d3118866158764690e8450541230c14ac41c6043e4c11c71b73bce103ce1db30aa124fea3431c087be481b9ca81dcd7cb9917b8a1051edb830f4d8839e20b2f50b0870c709c61e34c1b78f0a172209d2dfe7321e9c31e3004e00d2ef050e26a2a2eecbab0eb5a2390bfaeebbaae3bb88bd3586390876b14d25c70c195e13eecb7a12a8c6d07c74b08e3c0311482833e62c08214d001a3c607aba1a38f18b020051b745d6e98b141df82b1596c903a5f68ece0b080d063bc2e8f4bf1823146d58c31c608bbb734e690839bca9061311c10a930dcfda95e75068d6e3a7a0e218d0726a30e2fae60959269a2174c9be9a60c106e083b3ad4c569c01f7c489652c2eee861fb107ad0d7b8e2f5957d358ee30aff8e4c868bde4bf1e310afbededdf2c02a0d03a6f5e8235a0c1a31ca96524a29a5c7408262f1cc94524a29235c3b382475ec3ff5b8f48f11413bbb172f5ec09050d40e4317d22a02a3ba0869b58ac0a48ada61b861d36ab58ac06045ed5ebcc070640d56d40e4309695245ed5e60d0364dad560caaa2f61848286a5f205e7dc3b04a3dcdf4eae0f4b5490d1e7e89803bc4e7320c6e5d3529a594324295c0166dab83d43b133315e88b6a78f905b319f17a7b485ce2afeb73ace2f574a4e03e663d94c917bda3ec0cbf1e52f4ae2c189e828b1e9605f3bca607041c38197e9dd7f0ea8b6c4436bac3341072e0188ed747c3c5336da8f74df9fc23f48fde1c9c7a9e1cdcba2a592762af0e4ee735fd96e0dec145a427dc7a98c3e52f66ac82fbd26a81cdafb7a065cdaf6b51418f5f57614a9a5f9f820134bf8e8113cefcfa0926a0f1eb26101191408290d0efea62caaaefca82d976612ad0c769de391d4a75100f711dc41d5405f761679e7dc174500b8d169a9ebd052d659e5d8b0a649e5d85294d3cfb140c8879760c9c00c4b39f60820944609e9d8804128484546b9e5de57a3cbba7d204b17fd10efa164d500f7dd9331dc4aeeb7d5c071a65d203420e1cd2fa8279fd06d3ddb768fcb71e9a6747c369bacd5c1da243eaf3ebcc871b43b441c51e3a2923dca5c32a6d86cf8c324be4601032557471e6cc1e6fcce0e2529c0ec75d990c5946258e24f4a0828d14c8a04551f6c61b789c518307c6478ac86b131b393ceab5898d36e01e424d0809310adacc7f1cb7fe4bad17269860e20934d8a071031445b05a6cee28440a16e071833445981b8fa50186c7f013d86b131a5fd0680d3115e8eb334a4bfbda4a112a35174ea9b1e84a4b49d72b49da36bf85f55cfa959296cdaf2f611fb56b55a912668fdd12f6ac4ad8939cc1a1f9cfd93c7b1233960f5eed9a3dc03e2f1bafff39c6e906fb4c173115a88791e03ea1d4d0b6d699ba6c51f42e514067baf4286a5fc75471d6b12762205e7d9811550f099501428a3384c0228e408ad8b7ebb483b8212d62df65411957bcbf368d2188122ff4da44c61f7fc61a33d43c16a3ba36f78cb9dca09cbebda56197a8c7cdc9e5b2f55bf5d557cd66a45887759011fff634a023b84f9b3ed53393d0439c4a55af431c07293482adce92a11d66d8f0da0f71c93c9831c717e0b5c98c21be0c3eca20e39bca20e4e7aaf979f3a58cbc723ca4a15c76998672ad8b7eead651ae3dc4ddf806c42b9c0de573f6e9743a2d717748587f8e94d2fb3a0dc9f14bb28e0ff13e7ecc752e662fa7fbf6b11cffdccbf190da3167afff63ef62756192bb9efc76cd7f285f62a41c677aeebefe13cb75c9ddb77afcb7c49bd1b77f8af2f1e7f8a24efceddf127b4bfcb2af68cced2149cf71f656cda3187a1f4a7a4e8e73d77dfbac43daf600ec72e9f1e5f960be8ee2fc463a7b1f3b983d003bf3f387f26fd5fc729b9321ce1e127b8edf0c99ceb1a388e8aca33627d2912ef621bec9eb6227e27df0513e3deaa0a4f70d59576d335a1e7e76a7dcf1b98b2f9da3c49739289772737279e6a84ebae2749f8c0e378feba1e8790741cebbf138ff300cd529ab26e6df15edda0bf390a4b75fde77d1b007f8f6af4fc2932b9fbc4f7a57b44749dfa57e9487e4edc9866796ce27efdb0f46ff96fab727bdbe36fc7a3e989f9cdb7b48a883a0c3f5e0e57c45fbf5ef8af628dffc837f5aea5f4739fbb736fcc9e5e6641d09e57d1eb728daaf0ba11ca22edfbc0f3e6b9d6a502f0d7b80bd7c7aa793c3cde8a4e6b32e4ad97d2260467d2478f924be848f3d997f794bc32e612f63da8d3a704ce595c2575db17fddebda5ff7ee0a3643e903407e86b28fc4de50b44d9b57f6c26d09cf5e230179681aa4a9901c2852ae18c7e9a48c4008b1ce614b123048620b17ba98a25504db30b383991e302ea5c3aae52007af1af4f083bb64d4d93152f03335061863b8e03fce93f07f66566c973147c242180101400c571806bffb91da631543ff521f87b563de7779e1fcf559fbd5f9f5e87d9c111d821ab4decaab1e82450dbb9801c3304c0c343da4389d3184f88ff313f4c0c31014c027f69081872f6258c08618438831050e4278a0032704d14109316d0059c3cc1a315cc001a70720316a60831930f060051b35cca861e60e1c6e7e10a3071d44cc10c6982f5e1465699851c28c1538f41080d726317020860b98809021746515e685831e26866b0d4208370637ce3c400c42cf8158a5c160070c1e7a5fe65d117a08215c98f108200c343a04ba00217c028c87de8703966513828190454609359c5063471065982982683c6c02e26153120f31089d0be2a1eba4a03baf903c6c0ae3040f3d8422af4d61bcf045f610820c2fa60231066670a30637102105126a14e919ff7140db421398308478a14f630b2f24ec3a0278a566fca65126905f07e2212eda11b09f379b710febaa102e8f9d7540ceaa553daf5983cd0e5f98d88206368ab88c67e75cc5aa651c523a5c0fcccf3b83e7673e6830011249e050c68b1614b13baf948c6757d1e017763a1e9b75a07565305c8069938c5e380ce7a0633c2bcc0d6eb4c162067388a98188186f811cb031840bd6ac3103368ad45567fef0c0a999676d51051264ec600308205014a92b11be01f6589111294263f802cc17407048d8c800c3300c43d10007062429f042063758647b9cd89830a840c4152d18bc608e969aa2ac098c343c6cf3c20a8289410af1a1066180f145095e44e10517188661d80d2dc8a087324c0004124ceca1002fc4645efcb063047606cbd005192ec6e0189c78b204163a0001833356d04502ba58411735c8b22ccba20d6a87124154a1823e8a00930602ba60a30b386496a9ba68eac20c7681c86b13183410b2ed60af0ff3ae003df6452033146118e6b9629843ed21eec3bef8e3056e418e65e0529c0ecf6bd31776bcf6daf4451bff710e856018f885037c07b0a0e386397c50c11a3ce81977b079a1065d3419c104132edaa4526d8484dab4d1412aa5031d00011502e5622a21a6c343b048ba2b937d29a54b0f63d5c218a494d2a5a7be78193d6c079c3e7488c47e5a1a60f090c6174cfcd4805d017aecda1c70dc6b1317517ce67dd87faea51ee3a289c71cf29722ec31efbb02f484c041540ed4f3dac4050e2f5f9bb800f39f0bc1810684d03b08fa3671dfcd43e76077df2813a12b5ef15a31b8cfffbab81080385e45bf5c271599d9a3142264cd40376e389dd637b80feb5477371e63701ff710ba0e8c319a59e9531aad1cdc977a99e2957423bc62970ec42be852f552ba265d3b1070b8aedd6b251d18b62797d22fbf3ca4cbd9a57f97e7f3e4e2d3ba0eab300cc330c7300cc3b02ccb300f4988c160a1c8a9c17deebc8a1e1d8857ed316e27570ae9c1e63f60e38c171fc26bd316617e95b7514d9a0daec9248303001c65701ff69dea0077905571dbe03eee63f414a7836940b1cbe49e8b83fb6e9e6f94c9a6e14d27faea99c1adabd054a06ed776a302538174db353848c40ab5086cd17aa0d7262df0b87a40c081f3810291a247cfe749f4f5e858cb3d43d55813e6a52b90e475625e9d7e0bad56cb85ef7aa88b172da44d91e6307c611581b98a2ebf788524314f39aafb4e78548a53cce373b51ebf7aae9eabe7eab97afc53fd956af33c3e33be1c76fdd7c59b7fbb5d97f7653ebfcc514ed45977c2cfee13faabcd6f90f3240c7a5c78b64e554976759ceff604fb24ccb720659e72a4cc99c3b8cc33e7322f09faf8109f9b1bd721629feee3fe26e5fa45bca74b39e7aaaa84c7fb521e3be7448cea382fd27d273c97790f0840709973fe61cf7d99739ef9f624f3cbb9bb3e4a76795f9d3e673e7d2a067fd7315eddf87213ccdbe7e518c671a9d4e7aabf3ed516d6b3c30b7ad2e65f0b97c785e751fe41f69236ff2ecde1e69743d62e2f09e58d9961c7775cdbc9718d08fb10fff2058739d7f1cd27914ea74b7550fb90ee4b0e8ec775df093f5d37a3ccbb9b0e49fa063b1072e050be6dfedbfcf2b81941e85787fd6e97c7ba397b1fcafbb09fbe796334d74d9b9dcf93876fc405041febb15cbfd4cfcefaa4c52e67bfbc0770d93f793e4fb0c7fccaf55cfa332dd8f80ffb2cf4f8183d3559bb22936441a6655d31478e09e585651aab7805dcfae5df694e88825b1371e42f2fe9883289cf5d499be6af79da0827bca4a6d735a133c6ab6ed2ffb5679e6d50a2b76e0fb8a6f73536db4f8ef5177fea9030d7cf3a24ccf381023dfab79312fef2924af84d5365a20bb9216a0b3f17c965346055748dafde26a045577b1ab62920628009bcd28fded15346caa4521f638a0727fbf5d5d56da74c49cfc89642c311f5d03f810707e9ff136a58758619ca21fdf279f34d8f3e633763f775211f9d59af391631871b1409a50b69fdc7e4c2c7363f995ef3bef5934fe7ffd6b3e97dac6ed3e6899a886ff813d2e59e0f94e8d2a34b0f7e7ffc37ebacd3320e538888d91bc32ed7971e3b182eefc22abafcbabccbb7c3bcab93d27b8b026374226e8fdbc1ee63ef63dac865303b87640bf8d85271833911e76840aa8730fa67e421918729ffb687ee51751c3a5426431c7adf09bfae0f1442082a5e21b5abf424e85f0b45bc246df363a67fdb1529b2233da04dc32d8eb3eba66295faae27dbf392a07f457c7379829704bddd8b60ef9dc039739ef2987322ca79f4be229fe3dc9a06977e5be820b0df5a7ebd2fbaf4dd8ca447ef8ad0232541ff56db3a1836efc22ada5ceb46b02541ff88781ff6448cb66ddbbc2fa77559c44bdaf1c668ae4ea4d3d7e9c66c3e64f3eebe135e7a40d303c353a4793368fe25cb34cdb32f9a66fe45f3e95f4e9b7f9927d7d2439b77c2b08ce334ef135ab339ae9b937dde8ca2b6bcde811086bb5c8855ea71b726979370e3d0e304b408c3bc250e62c7e9b84e29fea76b6e3c2d49aae0d83123e80c5d3f3a7f583b36c3e65fb44dc37cf3937fc94e59c6f5d00cd3bf9ce6e9e49baba77a6806947f99a8cda7b6695144df5cf3cda7abbb366541e63f20a16f842ca0d83aad9b243cf453a71d94759d6a74d8a9e268d1215f9ef4b4017f10c22b9fe8d0a33ec45e5b1f75835e03fe20845527a68b257b0819d3879d4ff0cbaf2b427ff29092da3f762efd63a2eb2b0cd0bbb08aa0c76e04d093da3fccfbb0c79c4f88618b32cf24a045107630c0d085a94d182df043101deca04d11f42fac22e87d919e79aa411ffbe544dd7d27fcc5b44530689b22303c45d0b94b1a03bd19a047e8cd902afa023d7a3360455fb00e52ffc269d0fa17e875391971041641f410c61a628a98144d133bf832871a3a0a89a228fa1755b81e3dae83d4bfa8422fd541aa4ccde208c54ca8d068d97b127e8558b51b7b6b07079dcd980af4c530df3e93d4c1b1affb27e4250ad4e6df08df1f02be1d8857276fd57708dfca043ec0519de637509a8ccf88a79fa554f376c58210ce3af8a86e0ce75b37068c17714dcfad6feea307bbe9c41fe5103e9c51db1e80f2346c9de0b824dd7cf44639eccee0a14707d2b2010825c87881c61c69f8806ca2175e71e7258acd63f0a228ae6b8312fdf23eefb51b1a589bb218e237d736284d86f7e9b0aa7df36e3afd6be39ce09eb091921395ee64fff29b8e1fd5a92ef9345fdf0d0afbe6ba4129c16b4ec468f06af3f6cdfbf835e70d4af434efe3b2ff6561c3b39f9e4026e2e925ed473f758d46d4d58d11757909fef2bc3ec33d07abe2f71955d2de02eeeba633cbbcd2186663ec0c28e6dba76e463b3e55dfdd5ca74c386723ae5b385449fb5c368410c2aa66d34d7ba69b9a8c46a3cf341ea933019fdba8340a16ea63819ce4a06388666606c28006e31440403824120c4704224994a50f14800e9cac4a581f4ac35112c32888628c41c8106000000400026044886aa80321776470ba7462bb54d28251ae6a671f7b608c62d4737b95a10ea38cf90c830fc925fbfed6c9d6c78b5e9c78bb77937c8a893bd7c5c16dc5f0249e7a9c9a1bbb26dd00445f3ce2c36605e71542f4effcf39535b0dbc16d5b713d723da0cf43f2784ce44543de1c6c231bd47bfca32ccd4e7556aeac4363c395f9793ea3b18fca1f7c590a6692fc0694e44f9bbf9de0091e3c6f86c90927618aa70505df7ff1ed49cf0a7b83b8de27394cc00a5b05c5c3716cd2eaff33932804a5756cfcf150fd2d8cc5508c326df8bdbd0a6630e66241eebc3924b87908b7c3bb9228436f7a48333b0f560d6e859f2db473e3e61a1034a25783520883f3b41909e921ee3b07c29a0076570373028139c5d12509770e441de4e40627732916e3a7b203f013022f330a2d73c9a8c0d4849e2623c2e889014411ea9204b24e8ea68320c89515fecde84659913040ec6b95969aefa028bde73cd9ef93474f883e0293706bdec3fb55cf88e65e07bce7f7895fd085b2eb69447d68518099537748e7b3a36d33bb0b7410904ca2b2a4a3ce46bbfe4b647aa47382b4ce464f9cfe2ed0a59c117ce66235caa950024fff5c6f0f31e1f4f5c4791d3d85076b7dfcb466aee560d2ede4cf334dffc50f598776f38b5885064af445e3cff71caec84a2056574342f16f1320b943902014c3844ac4d8e86a9534214d8c12fe219e8e2aea1d074265f94af5cfb572ebefd625ccb2264fb872ad94890fc51312e6933d2b8a8b953461a6b17aa88252746d188d3e080e9430d1d0825c801f408f1496a041be2d28c66b407dcb799978e90fd7463759164a964f71e3b289d5aa4cc23a76c052b3d0e653ca4344df423761e8280022d7c148eefac471ad451e009704e9db1646f747977557c709898495a79ec3be698487947957f45002f3c6d55307f9178eca9c6d8dc4442017f70be30bb8e6c495c8004ec212c698fc8711542f99ef3f52d4c0200ae5176747d002d6a0de4b38f0b8b0062fca9f38f90840058d4f3bcf33c310f893e72f2401235d4f254f9fc5e7c557ba878f9854b3aa0c1d87211fe3e93c59fb2381477fb96fe22d2701719510bf2d570bce6bd51286596add7ba9d1caae747802a6107cd1473ccb7ed637468085fff522c39bdd203244a98a0d0450300ffdd03b635e57379ada6750dbcc5c85dc45cf04a4994eb0b298211a61b798573c970e6814c73e963ed18f4bc5fce45360f6353e1ba076e3e45e413788ec21c763a308517fafc411fdf1920fe7d1e4fd1fb9c10580fde08a1e4697747188e82e99ba8ef3844df39fbc5bed5523b037c01c7257cbf2837a10056b155a3de3c490137839087bd91738a8ff956b80202a75993628e9f663e81f3aecb56781b69435eefc174baf13347acc7260bbf14acfe89e4c74d1f3e5944572433ff2386dfa0c0186a297e1d51820b8dd3e9ee9af8038decf1835a5435df099a290376f4b258b082202e27243116f5dfd90dc05a27bcdf91bce607565726839ebb2bd7f3d5abacc010f4b8508ca2421bd8045865e2df17a05479961fe0912a6caf029892b71dd9e7684cc42d27d68dcb54d9e9a8efc69fb9134ab989cf19ebe60cfa348738583f9bdc68f7b93e318ce1dddcb64e6468f35f3ae9826ba5dc93e2ec244ed4d66426380eb35d589f6940cb84128bc02e10dde78b95cf97286332e8bfef560c99a2120fe6b227ea63bc0e1e14fc100e799334db8307d74716e390aaf1ba906d5254dbc9ab3bd3fd29731b685be5a49cdabc8227d5f3c42d964565e87ec522bf1215b33062906a6ceb7f859f94fbb4f80d862459ed8f1e58e495b7a021994240324d74dd97af3817ee563cb3e907f2446fe39ba15ad01d9517dec19f0e33b77e916dba0791469a358d65386996169d5af560db4bd148a89a1254b6ac587a2b3da57ccc03e94aab32b9bedd3bbf783b8d6bacd472a89e8e2199a8662e0d30f783556d7e64990a6002b569623d36747d6884326e019c8db0eec3321034ffa33fdd7a356e5d314fd8d29e4d00c14fc6e07cdc1ba10d11d9012723a6349f5a2f756642beb88d8519a56c31fa3fa5e064707fafe685c14c135264121fadb8b0be43933240b5af2189d991234d39aea6bb992572dfd396143a5b6bb46a6ee7a5268569613dba6a07c46227eb7b94c76fc217a7bd2cc803ad6a97933b2756910d14e454c14968518bce745d0fd70f4b3a94d28dd3824179492c8759afda9aba28431b8ead2109c7bf9762a9b1fd25ed09b1ff986866728dea927630d4412321ec07b76d5573f174273e233a28cc3cfd0174e8fe58bdd21d20135b64921fc787c3960c000e49b53542c934dcc0bf87fe2f969c1195ca6ddddd008784b2737838c25a4e8eb77396455732990a22b78f8f37c2b7ac58f36f9ebd53a441007a76bc58fa1b2981dabd41d771726d0fd663ceeb92ae796aa8ee5f5b70afc7e809ded9e2ac1718f474094db803c088dcf46ee73713932a50557dba9cd2e42e7f1c003d7889950f5a26882307f1da5808d427d491c4d3eacdca16d38a68477736bc306148ca4ecc2991b2d2e8df99c23e6e0a6044670d74e38b4679a0c78271c30e150449a857bdda09446ef6bede6e9e78062531f659470600d5bf743c72819b67220bf66652b4f38eb90786c0a628812047833d0ff69181075bfdeb3b1ba972b22200f40fd2b031f01773390dbc45d1ee1893006475c6d8947988234d91cb15e5b5db979edcd69beed5e06d53898cea5f413b2b89f7a117601427998cec10dd4be295f047a765f1d5dc64fb02d06b7868ec6e35e3aea4114ef80823ad585eb0378de3ce6ff806ee400940c924a559fea4be8e0975cf64e949ea54a9aa03fa2ef3050c11e1a99ca8376b33d845707f66b815972afac7e424121d8595f78ebbc55f7a18eb24326255a504c534fc6db59313d259b1a1498370af191ecb7db279f08a39e5bc18ab5fe57f79dc7f7ca878fd9da491bc4ae6329cf273403f3b319aeeebd5eb5ecdee7f0334550d65d96676273100d177e12baaf1aaf05aa248cdc3a630a72abb1b1679dd818a2ea5e088ca00fb6d275a39cd653c1c8fe7c3da6e49a6664de2a476aa8e244a8685b4eebdfab4e1994d736a7df6704eef4fcf33b2cce42f062b6e6b175a0f79eed1fb341d9fb087c97911ca6ac0359ea4a75e8b764946073e4d0cb057ee5016e4351c22a94ae85754171a933bea2ed16ffcd3e42b217e75168ba95373b988877eb86299676d16d7af4cebd2aceacf82d3211f3e0ecfac3938a74501153336d99c9f1a5b81b12af7b2e24f1b712d3e980fcd90b3deaf7f8f294f40a679509c6cbb8633804dcbad0316956c343dd7fa83f67390db8ee48b20887bfe11be4d440d5077eecf0f3608a7643b77f669855682d6921e58760904ef9aea36ff627820b7f407f464c620ee2b0cb236e1bb5023f01d4b5445fb4dca572092cb32fddb5cbe9dae0884355f20594aedd6ef43b0552dce5a892a34540747057006832330b394d09977dd5fc08a670c2e74147fc807d00793d8246fc4cff34ac49e5db1dd4b19868a450403a2e89f32e4771c5aab7ca72ee099f2a1754d2bb85a4dc82e26fc0ee2b451889838d7a37401ae5e83fa7949c761bc626f167ee7d5785361fa394d9aaaefe7dce67992df981ab46a070303a8559d8ee4ce418772b42416b741fafc1c856994b75acb72f7d2a300725686dbf5550237d0013e9ef40a6b9e48526fc28cd1086caa8bcae38b17e9e41c69e1c8bbe61960d07030a86c0449b9c454123078bae6ee9dabef5f6ef04b574232cc7338702fcf39790563913359019221b52a37b32f9e0c42d5a730b2cd8d7938e45c4ddfff013b5c1a17587d1fffd29af5b5b0d86fc3385cf28e0e4949380e0fa26c2cf1832cd50dc2478bd48671dd3cc644ead59aab2302c0102855325ef80d453bb7125c0f2c451280bbbba7fcf09901ddfcbc0350fdb9611289ddda8f6e17e90e70b6282fcc1b73dc49d08b81b1cfbb9b65fc7072558c96622fe0794ac55e48faa4523baf376d5658388061a379bb88b347a0b039e5c108aa00e93e207d6f44a9b3b4cb63015985a0742fb2194a5cf1582872a21eefc905e5779efe9ab567cc789d69960858bc9d8387da0560213e712b20da80443a4ab727b4971c6320e86daa1d667263aab22d816c0d47aaeffc512d08f10cc8db6ff798afc759d5de3dc4a718e98c15489031d4f3651a4f43f16cf5b6cc960eb11da41a0fd955c32902798f8a0bdec363786af0948bd4ba1559403bac600e69054fd6b2c4495f11f45fd53a4eb359767531ea9779259a99e2ad01cb802e7433f23cfe6d332abff297e733c56422be68bb5805a68140a570154625214120a3a0252674d790d57b7d1ebf1e66ecf13fdac495a5e3cc141aa9629769dac2d8b5594683c9d44b12064c1fa62e553f1ff466241803ae07dca36591ab5b97e96d10cf053b976e8207c6e4ee5d6219cf63cd4ddd7706ee1628cbe1842c564060de787ac2d57004314b1747d858855ba09c6771dfb276f4f55ecab598f89f9f5a188caae0640030ff1d409956ec6201e768718b3d379c26bf2ee8b36845069e26e82086266838efba4479e4bd330d08e42fd1e6c841379b327957baff35e5dc01181a28382ee341680d6c6bb5432549a27d2e7500056f9f5ea2f51b15426a3b190715c62626f8291da90c2c423b98f566f22f43f4b99b589ba43dd93b6cba95d25f449068be3593a6831fdf7f1d526ed966bc76725a1785c201d6aac382bf543241bc9c42ab0019f34a8fdaaaf73c8d4ebcaa8bca2f00fdf3b1c8a2e63eaf490a3e11822a35fad932c4c74bf3e7550bc6e69bc53fa1c776f58039d5594760c92ddcc9a2353502b65874d9d6228bc312c1161526ade382deea1c215e913ed2e3425ec42d7e7d20e0256e4cc0b860046a87a5cda1d5f45a62782769ac838c1906d45465d31da7f7d97cbf16ccd8bd47ea5fa351fe080bdd56a2d805b3892f047f4bd6974aa6f2eb058c2641e62189e902885cc1c789d6bc300458a24dd4b1764b6eb5c1ec9a251f9da3371b80d55b21229d77c5f7dbb54ba9ed58f8d0631342be4540ad9ae3a50dc2be3814fed7ddfa1633867ae471ee8612cb391cea2970c6692d654ac85e93292d2ee0956cc2e6cccd811d104ebd8ff4a3b3148c07d111799c74b0ae4fd5d8fc55ad5e992851b13792fc4c10244cee4b656501aafbb2841f1ddef3b8d963f6f32fb2b853ffb656619f731f9c4337769eb5ea365d6192bf73708b911d8111276091a7937d18df690cc7648b0452b358eb5d69571e334f6a6c6015596066d3b046f971bd3b7fd61acf74648441b63e464f679ddb1061376204d562e8a7570658cb42ae827e5b4772bb1431ded4c2e00c995631d3a5e5faa0778e9604441f0e4e22c95cf24abfe4ebe425dd634e65121fc3561b418d19a83ace89a63857a8f9ca3090a32e0e06e74786104bc78bebfd9b174d8c27665cbbec5cd8c28ef02ae8719719f681e6fa12c095655e1d524eac158ecb2b8d050dcdcb9e28b25650f3f2ecdb815f0e0e743e0acace008a5d95b068b044b2dad71d65068f838f9539c02ef571c8e4ed3661de56ab769018cb966cdd5a01260b727b85ea6e0bcecb30219ed65aca7655e446b4dac7856ad9463a2cdbc6f285f51a8252a9e934445eec906b52257cd541a9dbfaebe78e832f864d68a94f7e2be12f893a4216bfa41e40cfeee2f013e4af71e08d8003aa443aa4b3c47df4293f401b474d800076adda2205ef78489dea63b086a39a22ed1b358c2130651a46b89d120165cb25d1d249d09b43983a27b340aa821454c0af6b5eae291b4887e19a04e1f3c8d8931341c76c0a601b9ce6c50e4ff68195bf577a9997f8d9d4e4e47efbf03e1fb53c741da6bc22ba739628e1fad4664605decd4d292d96a11ffa64670eccb9b1077ddf1e3879623760a1a3fcac30751c7c5b5eb02d9a76e3f94ca295304782bfaa957b7743b9ee1a4461e858b538f32a97146db7929bdc02e46244cc9f3714a5f1d6d602eefa3939e23de8eec3b4c71889550a8645732c3f466af50e69d0951232af35370e69000c69e803e5d3816ad4d3ceb858b39310997f54b2b5829f9041f6656859558115f886fae7b439adb3d6a6eb25abe886f5eb941a3d697827669f5bacff376c06e030fab1ee77a298d7d7cd38b9b952c9e84bb16134947eee931cfa9bcb6924e6b2ce607b4b19c6045a7fda283407fecc47be8f83e3d322a9887c8a0c1578d20aecbf690574fb601ce3071c71e68d775fad814b60a7553bb97e02ee13ca65a0b671a5b2fe8ac13463f1a51a79f1460df0ec8283064dca37521dede08df015fbef1afca40626e251f25f25dc524ace7611136173cd64ed0e6e3ec75f0395ae6e58577162db47b1964afdf05be3cf7b188886678a9407bf9104e54e1572c21eaa247385940bd95cf74a1dbe3888dcc2051b759f9cd046d3a91cbc17e555b8647fddc649d3dd74198576163b7dc649c8972b579f8188d6ad57741ebd0b95dbb469e8be0e8b34173a868555860333a66626b3f06b4b024cd1626e30f7a4097c76a524d593e59e3c7534cebbb845467f740bd5e07ad0acf586c1104cb812bd1adb8fdd03a780e805a8f467947e339c2db0205f36abea3452bb9a37449669a109c512bd52db14033526484f90d74f01b42be67346e96770b4fa448fbd946e5448dc5a048a9e1e0ee19f121afdd71f83a286cd939721df21c43e54a7e90a00f8f9cde971023bd7b66c1380c8df8506e6e804d4adb626d66e8d5e5b4294713f8d42c0d1354be842d6aa99e82548b72a8221b4e423b21eab0c13c90012e43d3ee990f27d0bdf7526c455b5bb5e822402a84e96e08274cf2b80a1f9e85d6aacbaefd4bdf8f0701baa4bb2a7943a1613da819ae8783d59f91829df18967fc04d6ef3e8eede3490e8fd629feca93507c8c939a9254f3b10d4c472793694b82aad2d5aa17f9ea7fc62b4829f6c5f5604db32359076de688e2d4e185581c7de1980c80126ab35af904604aa1358337b2888d9bf1c02f7ab91e2dbe3b38666e0201740f989f9cececb49592e8b60c9beb1258c781cb8aa7fd164a8ef94ba1d593d3cebc68990a99e4e5e40bcdcf4d00b6513e3a59ad488cfc958b7d79d0dfe4619e4365669014a735c02fbba4f5a74ff6a5b0fd36bf36ccee5ec35f275df9b0a92fea3261d0eea456a520152b9abbef0eee4d9c38b6f809d782fcf279d890506d5469c4459476d0ef172b045b45c2dfc58f3138182261698a346b2869d839535ba68025e4e1da6d7308b88951341275c98f9e0fdd239ee1f769f98853ee65be5213c9e558523003409fdcba2c6558e6f278099fea98c29e7f9b0004d20e4bd9048c700f5bd40c9c68364a19daab78ea548d052de29c0ec0c7c5b7ce49ff4083a748c8a821e646144e09547e645cfff26eb80763433b9275346868e4e28d1b8be5065639469e8eeda5de61b7688c867a224d0b254a79e144092e76f61092829285736611274ad25a5a407c9c551d9dbdee87197bec2e160a21d4af871a44c9748d55d2d4b385d886be01ce263b88f7e82852d72f14d7e45cffeee06e46f84d7cd61c168956172db5a877beb8958c7db7b1cb49f6018a66fd30b773d4c38ccb8fcd88923d3c7907674e3ba06e98fd45a5c997c005c1d78be2e86eb57e87a14cb22b768ebff44eb104c016ffb842d9797fe82661384168ca21b42e6e8502dc0d4959e2b48ea135d3f7524916457c94ed2c76319af8e9bc98d42bba5037a23ee6de5727817912f3bb008d4f4e76cfcca1afc015a27e8d333cfb1354cb51b957cce6851788e3f1ce9d3002236aab6fb060c3e126a67326e42c4b2d15b045cd9d57f00bfb0f7344b8fac0581f42285e71483bdf7de6bb4c476c79b39770d424e0c95dea8c34af76d7c292fcd2cb864910490f1f202eadd6b3c189e5505eb299bb0e82add8ce2ae2d76d7ea8cc83e9f66dbefbd0c3fc2f4b67ebf9f14ac51098dd4019c769d385ed8aef4c04c800a26ecbb6f55ccaf079deac538f41b86e50dfa709dd3d326978c2d3d597800855ec253479e6c4a3a17f5e41d0c1b208ff712a209a45611d36a71893e9b85f0e73fc5f6bedab6dad34e655013c7dafd772a67ede1e2a122680360438785eee009ad45557b9126cf2774906b79007acc6b5921bcd7fdb23162123c43293b3ac4e4c2c67f39a3789ca2954ebb29b42627376363db9383e721b0ad149e2823cf7725b99e9647ae9fb2db48feef9db1bf0ff280180cbaed5c6a9ca8e9e097bbbd5ae9e1449d6d7f87081cb8a1dfb63e21e18c4a36c2bcb91a6b7cd8b8c185d206c18e4470d9b8352022de7031fff96ce6ccff3657fc0ef24377656e2da28f0cd98cdb047c40d79b73e148ee35a2a096cea10584eaa273955524f7228d0a407e29f1ab5e64261261ad673c3140363f0df230aa7a527dca537152a221afb7d45480356ec8ec43c544938509eb24a69bc140819ef850b213f4f27211a60b38cb487fe31b6d8878df1a826c3edccbd84fa746f8336c0466eac24700ddea057b0adae55efe99632f80e02f2e9958bcf975cc6d2679dfc0fa14b9284dc50645bc3269014e08e3822ee2405c44e7cadbd4efc4c20065c2e298070cb94665f442405da4489df332980e2d85df7f4f2f9730bb2dc67c6803171d9ddc04d42cc0b96b651bcd72c16e0d191d37d93fe41f2506a997623b19e9b03dc377918c56b9c116b6d4943cc469f9378df003f54f7acb43e412b8957d3b0c3154e85d3e24af5554e1fab988dce79123cd93d17700420603f62fab0dd55120edeebbba9e0e58681d76a757bf4f0ea16abe142cbd0b9be78c08694108113e51c113741a858e3e45086a50a39a6ff3b73c8bb503d8454c9e6b9d2bf16c17a67a6a683bfdfa46eecc7464f77d3f54cf22d13bb7d5e317de985e327eda3b0af1ad3f85b1c74e67001653498d219f7ae18f9dd2041bdb53715ede7a58ec1f8b6320a8e95852ba0f6757ec718ca1764d6df1ab91fad6cb814d36482c571b4ce4f8cfdce56ea2d00344de29a3fce39e6b733ee1e8432ea82bebce93413e788ec8f9387a927d4131c51454c6d96366cc9d9fad54cab3530ebd670e9c8d310fc37fb3e143a9fdbbf0b41e89131956004a345cf3c642b643a92f304c292e30928b96a3a4806d6ddded36fdbf3581515e07db9693e3b75d22592cb62986c0b145649ca906ba8e9cf93aa0998ce9aee72d12a19e7b3dd758dad961dba9beab1a855b96641b8c3dbbc759a17f9dcd9741108376e8c773f90ccbfb9a6f94cf3c0ecf021f2d0425fbd2cb6693c7a151c522170a45c9f4d198bdac6241bc9a9d78f3ce57f7ceed6e4eb590835b4a68330dbc8a4f04568e0f8ca84d692344ba544b15783e971ba83e844dac600e86edb5fffff5086220e048f668747ee37d18fbdf7820015ee4ce7b1f7f25e434d37b23712baef655f34483ed3773187e0db519ee513ae1fa51afff6d7e9b1c5cfca0630b2bc3f2cfe2da723e6d8f47f43788015d69d6cd2f9eea6e8a61668159673d4d52c0ee4b0a9a565d7a717da2481d576a77d09d9d6332628ff6a9e1afdf71d6862a514bd226acc6f1c43e98199407fd5b0c0db7e7a7740015d8fe1adadab0775d7a303fd4f43eba033ee4135c574e4f38b6c5aaf88adc8ba570433990daa1f0a8f1cd0861bca3ea59f65553ba2e098e8c235b5de05ef9a9c10674260d1f4ab522a50aa273697fac98b1ec1b9458bd4173d25047e4316091d5d9072ca393d11538ef2b58c32d5055063f62ffd5592930d240d03664c886d7edbdc49010b486ff5ef39bb5638d8f079cbdf9fcd10826f94773aba11471f928fe9e6e31a28370af5642f802e1039a8e61627e85ad62f316efa460a4dd7892ae33af8e37190862f22b2201b4f5df6f8e4bd92e2b657897c5ab39539fafadcfea36c4785f953004875272439c108aa49b9319e324f9010bb41fdbc8cad75fb6e922d1292e1fa91f1313491200a8c9a66b41e958bbd5ce0929eb0ef1f2e8eda562f3175bd9042e5ad093c5ad31301ab03e83086048d53c0e50f48bed9318bcd54a22968e72d704e45ec47f720d0327b061765117947f7de3ab0491a7dfe250db7238b8ab931fb79c172767223e37536eaa67a1ab1f0edb30a97036dcb6258f17b86191b6adaafaaf733c2d7c71c09659d9e5c89e2c6147a9fc81ed4cc3809e75b8dd03f50872ae4fc809f5a621f9c9320808a13c99d1a4195484d9f06bd1f37d7c23f58d1d1ec62801e15b2f87191032667869e6f2e09ea8260862c4b293220a89c213cc7c7e42a8eb26120513189308b391206fb1c31fb12928e2f8e32e472919fd94d74fd242d4e1079b693fc9ad37210e8ed41478009532982f62c41e2c7ce4de7d5172868da048f0302a8670cf4133f561400d0063201d826334d6a08a807ec0f5fbe0f883394a560d09f6234d354bfdbf950e0e1ebf961be0e93a8035eb45357c411729d43e5f6f3e48d8ac3278c38989e621f242c59f3c8952e86f71a284f44f3753b52d73846c5a053b0233ac50a9bf90ddc8c635c31c005524ad4288190a7a0ad413ed1c1c6e868db16b3b1a0b38531838dc78f373c2aae64fcef351be9ade777f30a6d2a90b6135a672cd9ecfebf481c8a332cce220a91e0a55f9e98229beb98281393563360f89fe660c57ab192252c1cc603c2af9740c81c79c7b0f06840fd193694895b2c6fbe5f2367597d941e04a1f3ed56ea6c39a2bc84bcf761d12d215ce1a0bb2943f4abe29f93bebd2345b6e603121acc5d65069e9b95efffe94997fd7366c4ff71630ebf7bb27c80eb565a38d0c4f08defd538dc41fc6cf425b45c7d4ecc72b7981e583eefa7e5de476d742d08e90e5d61f34de4bef4816366b018ebf1988f419aae892cc8fc35eceba41e4e16986a529453cb90f6bb24cb480274af3e7a9399065ca968aca97e18cd4112f1877d7677d3b7a835885759b389da5ce3216ca7e7cb01d62a9d8db0e8bc947f65c6eea12f93817b7db70646291244d52e04f357594f1991918e2f9ecdeee0fee88ce2b431d42cd47313dd560718a42feb298f88877b771ba4197d340417e0467c7847a13e6c55f4f463969adf418ab2809952b751fd75b3c1331a70b01593ab8a02b865638e2bc711078936a57459b0e5ce13f1f5d0631ceef48c20972620f6c8a79c08922ea87f5140d448a0f068a40cbcd1bc3f741a209876f3d21d882b2a3f49fef3ed6734f81bd5203a4364b0ae96f1a7ac5f89275015749c63625da7862b657ac9c9cd38641879e6245bde619e55cf26fc4c98b7f67820020f5a00c1b9dba1c2bbc9eca0049143aafdaeebd2e228a1a7ed4dd12cd23670956bd1b85ce10390afbf8aabe81d4f999e66f0e4bdb092c2fc46048dedcecd63c50fdf7a1aaa9ab6183ad612e849aa1772a90f8210c009d0db165dd324c3c7c5b4e9913b3fd064b8d714d2238f9d123bd9c525fabd18f034e5aed1ba14df4bc9cafda19981165b3b0cf4f07b3b5b37ad11029d2ee8f03ffc8c7f347f259502718dc0278d86a30f6b210f25d848bd41932229c804e2f89d04609ffab910b5523bf388ab26131505b128cd57998ed8ac54efe540bc251fba08643cbc3e5b7e118108ae7272c5a2081e649abcab9700f1ff7ec01ec606a9979fb89858ab9776183ce88a89ca6b2dc632dfb95dc95f9f870e502cbc8f94768b861ebd732b4de963fddf48e6c511fbf9bdd2e65fa69a12a40b70bc25b88d4ef90e43d0985b11de1dcb8e6fd1455c8be673d53a2e2c4c877785a7828f34628a30c2af120047b3dbc08d635cecf1a9be5bdbdb1c98de2062bebc4fafb10bc4690496914d71fca08424ec7147694c1c87a4e1dad60ca1b4b053cdc0a82e340be8ff7538485010806d1618ec27e85faefa9819522d5c4d01fdbbff3777d6212219756dc17fde9f2b9a9873b653e866ac4cdf8d74b939cd38bad7df91c86340fe85c7b7aca74d0fd03c32cb0ca4871b27e227bdb535e911652b38d40177d89ccd6d05ecfb0ec937cf88640d9bbbd2287ad474aee883e6e0de71d55c63627e434628071d0b2c8c4d650d5712a37ca3b6cab307058b91f0ec6de4fca225f6ca8ca677980e24f90aa91615de7caa895c03632af332b23f14168f2c3c03adc2593494f02f9e413bc23643acaf914fc1b0a6e4660b960d6c60cb35d7c5b2e2fea8ea85c647bf8688401e1c53b2fa31e7fc2860ae99a0f2b22c2117e428eadf138452b3773c932beb8f02c4c9e04a833d0529d7c5c357248e47a5a3fe3ce7d6950bd1db24bfa253720f09f97c27ebdb3462d29c3d81ec77941b98c9d0b80e78e5ea5f81ecb6b3518c1248d7132e3750740932a12c0655b4aadaf5c8db06eb1f193460638bc1748f40dc7e565504e8705881f3e087938d103485969543e9394498908d6d78c6e60f07b242cd19cd4687696b6c3c9e75551e06196a3282771f40e850bd6193e27aadc273a34e01347630d22198c61fb4a179218cea893a6f434772f8cec1bcb0608dad663c8ac9006311c34c30cbb43ba23513c4d6b8d300b99118228fe6e1b8269e7fd7850fc343bb6100832e782f9e584c16821386bd8de10d15abb32cec26a8335f48b69d01f5b0b8d0f1bf04cfd81f645aa21e51f2938162c6fe0346931794d58e7905576e228e8d27ab897d43217b563ececbf3c95a90d1ef68bc7aaf9dc5ecc10f1bab82c0536969ac4a1c3492efc96c3713bdc9a92c7bd61bbfb898c78a4e2eb13e960760632c27e4f1d450e217e32eb6857d2934d6b21eafa2b7100e903ff24993ed5b431c2c332fae2cbdfcbc4bda8361088935affd38e4fd40f3d102637a2706e63f69e8780dace5b4c44a6d35baa7e2182516b38197dcdda95e3c22bffa621b432766f934c09cee105eab715496e4a545e352916bd03074af719e9035e355e15946259743c2cbc8df9d8d120785d5913f5772eeac58ec1357bd21330f92c047a0890e3446d35fe0728282813fa6452337fbdc310cc51b60d1049dc986b1ed8ba688e578cdcf380406e7821863d685e68949178477c15c6dcb0045a673bdc419e2a70b6a5b649be70eba16b94820e3164187746a133ade9a2f529927965afe39ec7923f3a5544a78869b3124b3ee4660e2e6e1626ef73d25491d2d2d4184e5134e1300013330857389f6056e63e9545ed5c200c86d6b7e5d2181610ab1c00ce183669b1d590c3b362d6349e558ae288897356ab16d8d1082c24437c9657eb6a6d99a426b3555f706f4dc5a4573b3fcdfc3830679210688a751a976db401b36117a1bcd7cd6955ef4acd40f4ec2419c4f851096bb1e3da049b841ed48928980bae88f598e3a273a421c22de779bacc7fe7884fc834ca8386c8da5765b21665434cfc64e23c3747f25215fcf325cf0feb85b64254c63553c6ad2872da2527903e184636b2c361b9a09d6a3eed44d9dd7795dad7bddaf73ae2b5db54c2a3b4dd0ea9a63676d64eb38d377f142448fe5b97baf34e76d1210d7137652a53d742be184ff2407fcf51e0dadd71c48c45cb7648eadc8efc247168442ee5b22a130e42f7bcc89accff592921c405eb2912b735ff1a405d07b1e24726e5ea64790bb42a9970c88f2dc4e31f501ec951d8922f7154f6a00bfe74392e73e24520ff0af998845b98ff852e81d545cb20f44460a710812178686583446f53568f84144617d5376a7d9d581fcbb423b8c18cc359ba0cbd63e2d014719cfcbb86d2382a86be5f9834f4ea00fc089b51044f840e3b292a341c45c4922f7d480345d54eeb84724fcab09fe3179a567a4351ed8c97fe48e364fd18c36bdc84cb1b5c1219f8326f80125e438ce9a1e8d4924bff28108c0e7bc881a5520c5cf41a81204828a5056cbb2a7ab6ebf9bd73a7f280634c99192284178490d10f0c03f3bc929c6c19d7e2084f1f84f5c8114a52da88901461308e42466378976c335863f7e2207a59454f4d938b285b2d8ad751894c58a03cb8d3a9ef4b129bf3e81f3b43979036f8001a53f81b92d60cfccc0023ef9c875c2139d83fa427f1a8e91adf341306ab9778c12195a384d4f179a552f901c0ae75d914a315c364e318a1011fb22cb55272cd56b18388acf61913d6c4fef754d1495a9d966b26a832a17b26fa80a8a6c25733b570bb90816eca3a640c79a2789e60a58ed1be172cce72f2d61e6b4f219660f17b3d9cdd0aa534d0c91b94c01b98759d212eab4909d2a4e36b677b7b56ef8ae0d95bab065d37855ab028e2b144286d470551c7f2bf111047cec7c37a84061f5c027bce62b50026c24d37aa2eb5b47be8da65516ac134a04732875564b5a4dd0303f3a0ce3d6eaafdc28d9be96b9ba05a629978cff82d616f4c4c0c5b78ef1ffcdaa36814ed3b239ea070312991d821b02a5e4fbde78f331fa113435d9524a5610fc02feeaa84e233add1ddb123c9d3f36eaf62a0192c31423d0ea938fd06a1a4608b19c740c8f3f73e623644d798b6a36787ced7915ae97b4712630dcebce1db9b9b65601ae7a3e3322de2e2be5afb9914c101b7cd5cb07c82b2dc7ff1f1113fb303145ec18845ccf6e6ccd262058ecc65fa7fc7b6b14d53edbc870bb27d05d3a2c70f220837c3ca2cbc61ca0bb2565ce8823570939bf6e1848e5e297048e87697c192dfdcb910998355580af67a914e0cc04d4895d993bcafbf263c0a8991b445759d5e84d50239cb34ed87e2dd72312ab10099171a9ea12ddeff0a06d6664fe774922660266d285cb8cd4072f717cca5b12c5719c7bdf373dc4f68e8ea1ef54a47dab7101792b0e9d41cfc5a1e5477530df5fca1080a6016547343991226dd0a079b2827927282b136ae1dc58dc437c3c248aa4f81cbb90733c8d1115c42f8fc91e614a9ae1a30542ce20affd9d623d83b1dc44884ea1bd60dd17bbc8b985335c0d4916ea4c6931bbbda3b0a589c2665173922b1e4db26594cb086f5d205b6c02c17ab45f8d15d310d59403e304b985addc479654415445af0a4626d67ee9cfa24060059aefc295be9656ab2c065e857e647e306ea0002aab298ef674997881a2ad164c562715dc5654f514acc6234e35c574572be963cd16dd56fa2139bdcfbe1ed51cd5d6bf88714f52da4e9a863d9d5643a10198644cb0126b91bcd7ac54e42454ff902c35794a75dce629d369dc674fe256834e5d1247e1365e6bd3b74216f9a80fa2ac4e125dd781b0f3889c4827064be332b9189f50267b11535b949295726d556ea8dcc0b1e19a7b5977f628fa9a4250e5ed4394de7c51f7c805b22ee5ae4271b743147641ac118ccacc29bf3932e360d0e4c64884fb0a410a3366bf94e8e4cd900be97fca5c3645230ad4f5dbe0fe478942426660ba3230e994e7731204f1266d3f57473413fbfa378b384df5dfb71cc337ad20d535a2c31a4135934c3366d9002c2a3a2ea34844decb8a101076d211709029265b95fc3d2208fbcbd6c9c5d8615482c24a1b7b3b715769197f647b7aa34121e1ebc33140324bb685458dda0a06558550e6d4da43ba19bfbb3bbdd83d51e868e386b345bb1d9e2d55b1b0645ec3de1094fc34e1f8fe98b178a5e9893493f5a54879033d84758e65f6b0bb13d888b5fe6eee99624bad7d0627c041c19c0854ad4c6dcbf3e8f3992c185e67a7a25c9ce964db4d446ebe822ede6fe379cf6c1a58ac3302d965496681584973a31a0e1218a950401baa27c1e1baa59a20a4d0ae63ed45f064af44e37221ba1a0ae14eae3281e40db44c525c7940abf956aac14c5eb60b26d4725b7f8f0a127e9db890fbb50eb199920fbf7903bf2b1fb2e7d16f62d487644312a0bf2fe98a667a7acb91127bc46fdf15abb67c2d2464d1064bb338949a28ac408360c46499a444afba26c68fc1c3888a09207b706e7b286f6659c4347e10006943701209bda6a302ad3880108ddc7ed8cfeb92e97ef5397fc7dbd68acdfff6a1cb4e2575812e01e100ef3f19f659ad50403ea0fb87f3629934c7d686bd768a8ece428b765163cec638828d560477234af89af3292e99cf497384b0d9feaa380afe66561e409a311142be7eac17f5104fee41d5e5ca3342efb1cb5a6dc918d26ba18a27afc5fb24c33ccd38d8806acbf1442bfb7051503aef31de911c5ab88d8522202567a71accbdcd5a3487ea366438f232699a88fed88d04a02c1972bbe55516e8b7eaa70355dde237f6ded0db879e796181eb0bd616a7c2c6b6f82b3409bf09d4632eb1475d14031f499174365d8028f03f5005e1df79faa83a5292a0837750a66810bc7f2c4989a5587b543ea2080d75a4fc0827062903a2d5d03e89c067e5f0e01578fa743fe0b2b63e55ca47f40b25b1b6c13b4a5a5ff54373257af40f9eb48ea2063b9cc212b2a29563ffe36522120c9eb1151649c069a6d7383e1ba640ee835236463a8e82a4a49c935743a80f17554f6a4ba89164aa6193754fd1a945915cae236fcf6eef9cd982f5b3ade385a550982f68d163012ea5d0ac4995244a9291573d8e65761bcb2e97d892276472592859d9e10cb836f6488a33cf5b5262c1e8446f1431b290e6400fd4f21497a22872c71658a210ada5fc549a6a81dc04ef4cff8fb13c05309a6ab47b9901e505be1946e9ea24b3199d8c45007721292f24e51046674bf3ce2b369a2a8824a3ca8098f2657bfbaadae581162a84d0c09d2350b6c7e8277018c0a5b083e492b25586e27da0c7a04b50f327517d134de755ff316b056b3b0a0e04fec9c01aebf0a8da628a02642fd9a7de7a894afb7fd25d5e6d14d6718d240eb75fd92e444128b9d134db745d33e12d594a40b304598d028d14cece68a09a75c5e9df65ce8604422b64077f44039658cc9428b38739ee936cea38212031b3e072c5fdda37872eafbed796dda60fa5e26bdfeb998e84b06275c77e28227f07ad7f718e4f46c4544aa6eaddd3f7bab5386e42458a84605130963270c48124f42d17a0f6fad5eef3dd7d66ae176c914e1d07f6e4c543e60cdd08bb46821994022edd2329c266eeeccfb847691fb7063a40dbceceb38cf33de612c8ca8b19ccd86380d94033ef17d3e2e0b44401e001aafe1f7911a9752dd1d39fe053c236ca0821f50f8913307bf15f6f4a7ea451c8aa068c1f25e9f819386dc948196405177b9453845b1dd1c8257aa632f75882c7056a3e81f7535802c26df6f7e162a7f67fdfe970e52eddaaa6d7755a7a2697de3bfa6905beb4b9edc3c42e6da914d9e48414c275ae9a538e84f5f4c691c36bb8ecb4d23501179aeb80e76715c708bcdac8a5c9bbb11ed9e16a3c12b0101ac9ba53f345a5e0193bec3cd236f8beb1d5d6a94c892643660c30f97624bb3b9b3126560635f49d20e154be39e5c913b5640eff7b6298ebddb4492ff16251aa2249acf3df0ce900991503f065357356cf1fd2bdf5d915a582ebf566739071d8e4eca17919b46fcfbba0d0fcdc3c48ed3981ab7a42133d88ba23f4f3d53e4f87cdd27386e1b8c1c94d088e8fb54f540ff0c1ceec0f88fbdba4838ae8ab8fcd1a7d95145a9c2b625e9b36ed4578079ecaba4c286b296338d1e9255d2d9da6781aed6077ef34f55e5882dd44ed4a40565224697b07ecc8569ae8fdf00dc168c6f75e022152b616e3d28ab17e098f5310d061690c53a1e1aed8500c100f132715c370208c638bcc06403cc2908466333e64a9264ba4c9670c378328c164b6dfa741520be0f6d55e78c7c02037c6ad2f51031a1b92d31e5deaea096226482ed0e45576925b946a2d4de4de60f00e852438e3d5ba2f19d6e1530d54d596aeeb360d66e878a043d534bef334a485a998840610191992251d52c9390557c74bae046e86e4c2087e726c4e0a8d3020b2c70418e1e789698d8e24ddfa0d31e95bd2c8d5eb1023025340a98c01eb173b54635ad3c506f7c3a7efbb5522251c55c5e679881a24ae29333809df5aed14b69ef30f8d8945e4c7e7a6873e51d027d457ca7979358383f078482b85b4dbff863d5484ed2ba52834cd851a0983e44d5b180f732b26034f92820c1381f08eb880c9526134aa5ba213a2feed39c79b106962428b70d09bbb052bd8472a8a8c151a5e1485ec052e8fedb3aef5e3164209bd53479b0d615475adc2eaa2cd9e8d3e461cf8155528e006f938055a460b86417b2b2e1140924f4ca267270944b42a44fde36eed9dfd8ec08408ef274a983dbeac0f80fbecc4352f0177b99d33289aaa2baaa4c4ad89e84e08640c867e954c4301c1ed44428452aa944ceb218becd416e909ffafffe07037bcf47bc1a07df97764c6862b143d69983433bd06b67fa0b386c36081d7b237ff2ecbc4c45fccf0b7b0112f2c996b250cfaba20076d1e4229d93bc53a0baf770c2e20b400f226fd398a33ef6d5dc0e22d1b8e0eb44d6bc5cebcf7bc1a0dddbf4d40f526cc95837b006ad63b6e9cdede81ffaa966478b197aa9339bc87226682c6735d5102544530518da242bdedeed4e010c28088a9df028079b13214eea48b01942dafdd5c8e9fefcb840c643c035644337c741eea725c3db09db46273967469b07a4838980a956625309d014e40c82623f0bc04c41a461580715bbe663950922043431f905071d194b738412155114706b032b5641fda0fb504ae262364e41b64d3f655cbbdfbeb64556c40a49c8bcf9fb96020d34ac1ea9f7158c45e51d516a423207f5037794314003b150c420b4051776beb682a9a4482635cc986c60084d3c2ae896b88105fbdc74bb621561bd9ef0c1877779987e2c72f62528b2909087433cdfd203758c60af548959931c82a8d7ba0c770ab1e96352d565376de08b36eef1fb0220b7a914ac03af2c026b528cb5d12293566858a0f7b03b70ef4b882fb0e458ecfbdc092fcdf5f7dc75f3ee2f711e7a8b582ffeb99e729977530f7253130a12d98156ec4bbc2da5e7d09d4f0d476c8b851eb445cc87bb794e93b2141951017749817878d44a8d6b439bc8db8525cc8166d3a5f6085fdb4c936d67280ac2d8f72eb07b7a6918194d5c60ca11047e6f27da9d2b4a274bc0b6e42431e8dbc30e10ee05017cbdc4e208af65c3611498431cee5c237af121cd0f10940df7f374988fecee66aad2611d3ab6e5899873c5729f86c06514bc71a2d43bf2ba21a3abb4388408f1e7119266c8a22d7406faa28f31f205a931e6b793eaa17cfe26f5e5070ebd51e2255d4ecbc233a7cfd91c35809015dae90935b630a0186b798841d816b557feb4e25a365dd3144672477594024815538c8b48c1b56e5a45a5cfa0d360a9810cbfe81116f6928b0db923bdb244bfd202d449555032a04599803978d57ef452ac8462af8b7b13c502e302a2dc51fec103f66bc16d35416855e7e4a1a505a5003f704d625514ac265bae177c8891cba7f2b503c14382a9f496f92c70db0449ddf664d9a8b875dfa71fc3269dfda5222fc9ea189f1490dcc769ea58bd867a73f98de73de71826b8917009fb1568fb92e6b672b179a8c1d31a6478ba6f10ad6237ba3e49a3515992f7015fb07397d3c65e4aa29322eec717f83aa467f69b4224b9b2e1ac396ee40469da89d1c7dc8449fc0ab53a861363e6cb9c494d5582e0fe44dabfed65365b5bac191b5e8ae07fc6bd8efa96b513faf4e287251882e5f33c2084395b776f32a28a0dcfe83a1d2b2c03d5ec1010a594758475ad095b8812b097a160f2815814219a3d177479e0d015a8fad4255f815e380f766153713fc83b372d77182bb2186c014c7c606a6bac4eaad8bd766a6e052f2add2a102cb2f29c097c8ad736c2783094d63c8085b09800a7fa108d21071f3238e521580429851fc0633556dd856450c18080083825b365234f3f87bf0a7ad3b25f6b759b7d449e34d233b0cd76540ba7bbfd313944605064d63acce191577acecbdc20b9fa750c3b32a94dd328a46ecceced94c8955996f9355414fae7c99d53aa0a9267dd51253bcf0bbeb514d27fb55a4d80c066d92abea23fd77af5dcc30f5eb3143ba662c5ca65240248bd157c9868c4660ab88d2155fecd87287c7ca7f9dd657b570f58b8499ade9304129af0419b3c5e26a5e3ca9c06d988343c3d068ee9a9d6255b714efe3a06b233642874430366d7ced6d5bdb023af6abc0a9d25e4b83e66877fd05d5fecad691aac89e5ae22f1e373e071dc2f5e369cdd92d913f3dcd5a48154c1e7e4af5a942674ef7dc1a485bb86c0a06144f850449e9072289ed1cada59f6ca22d100c51134eb19ba9c6823f6b854a5c42c9191d0aa0c9207f90a71c620c3a7128798411a80bf8b7949c018f15f21916edb9c6442932cfea4092a509dfad90464295bfb24db38cbf1918f0e6d3d3386987d811497c65a5dda88d584788e53f639304daffb43c367a45fb80c594026eaadce3e0badec2d95a85deb392b35b5d79a36f76bb7eafece80a617ec9494660b621c83af01f0c12a0ccea065d322cdad041ac23a10fc0a7ed7d844adb951b28cd9bbab512e842fea1a2b79a9c3eb4d31e7fe13e4a57cd5c7cea3af774fefdcdbcb67c1953d0c693366d49d0bd51f65860163d1c65a4dcbf874c7e8808da9f9b83c3e1e75e19b4e3141d4bd194fa1b3391190e1e001ce5209b3bc85368700c1deebccb1800f19f359605ef82597c65693b57318ead7840a399871e03304677ad74024bedd686a1a6d50c90dcac118a22ac0c030bd219681d77d1f1c022c939d00a37bf3063631a5b2e0436f66da00d8bbf6eb40af9028f39302a901e6b0e8af3e225e8225a8e624ce2aeddd722e21454a508321e140a07cbc2f1e12559c75a2a167f73333b7be5581a385963eead9394d27ef837576985cbdfdae4818674fc0c27d07b03e15253b876ab1206a0ec1ab28223e03a4f7ef71631fae10ec004111db04d757831c4d66c9d64d4b12edaebfe20c2e5d495b11fb053f37e0a50ebaed058ebc7ba42e7243ed889ac06478972743200922f2836d76c704433fda01d2f74935bd5ccb2450083ff6f656f0146c4270668ca8375f71229850e515b370fbbe17648ef5b66a8eb7ff47341540b06cd16f53c6430b476e90a5b1004b7e5a0c881a26bdde1b6b28ea5235d05d9d1d6183c2bbb1162053f98065bdc4818e7bac485da8f9b489012609d1209f259f9777f1443895f0931e76861fb050a5fbf3576e6015fb50e72238615f453186180410a2154958e7b6b03f88982336296ff7e0c96183a87ce3a3f6ec2cbf7907d84f31c88b6fe95976f8580dae76a0422236044bde06aba9991f961be094cfbf039e6ba8094d1786fd3b45ab2b2bab9d5e7b1cf2f0e6dffcffabc126d1b56c3cb85ddd3b4e29b543267d0754cb7b791879453b0718868038c38f77cd64906f8dccda1c645fea6911ba1b6d64dcbe2d9417cc5cd0ea6b1bbe2f4f4d55c1b93defdd304221d43f5878ccca27d26c2d6bb050ff3df8f365bf23b7ca8abac4f6c6e3c1e899e15fd79d3f25e3082b173db0b5a88a8920a7dd9aae9731e7301b03fb9f87d4926c416259a8f43b85fc11269041edd0c545774832c63793b4360a18513931fcf54d4cfcdae610816a1ccebf645f608d47155e0d5e01399bf87691ac1080ddc01ad8a7551ce14706d7c942368ab9b5ee5e5a0132809564d8204976995ab8fcec22e71f901a13467cfb9293f6b322d786c0308feaa2008eec447d5a4cd7d73946e4d1f5ce21765e50270389301807451a844a7f83c37de387281cc7c7a71abda83a16a42fd24638f8940f089d025c310dd7e8624b10c5b99036468e8125afab278f557a42027fca596024ac594d3dd76e3c4eb48edfc917d080e9758b30c1b01e98736cc875cab64e1589218fb29aa09fd3ae4b44ec232d721357b99c864e0a71b0f9a4026673d0f80134a2fb1bc1684cc48b23702b4badc0f1c14d0c234eab51f4bf6148f18342aece929dff894efbb298400954411723cbc9ba4c78c349c0abc63903053ac11d71234b1cedab98f1d71c9dae487b1c86fe1bbd25dbb3ea28a2480acd9fa2f030ea95519f625dadbc8d31bf2d249cc07edc6764516f16b90e932008b6d3f46c66dc114a9ffb1166e0f12f31bcbaddd351d22eb10753efab336e3d02512ca0018a898c915c64811234721daf78c7b08c4e24521ed4295a7ac70f39c2956d43d2eabd700f52bb729986854c57314f069392bb68212913d3edd23e92d12bf6296a114d54b8e94a0d438bd8755124e7d637faa2906c3c3094e65f8b65f147e4175105ceffae32965d17881599d4d391ed402ee4731170039fddbc79a357666999ed89ad251a3c0fb71308d0a9bb7e45c03abd8568ce3600a41f7789aec0d913048756a84e4ee16d100e7c4cb4f971d43e3f96b83152a1bcd238ad0ce2d08a20dd930567ec51f9cebf80d2acefae39b62bec17040c2c3df76e23999789132392452901edda305c9a9d902c80532611a042af4fc1808f762e52078f2673b7a6281cc48dc9039caf204b40cf8efc9002241b3d211a8b8118cc2cc509c355e1cc8feb5989534ade5a0711ae5a3a2914a0c59961414ec49366a8a64fdada80504caf44fc6bfd482ebe098c9eb05317f7f32171692151332d2ef15b653996ce1b61f1ef6233d4ad673ca7a3ccc7d44ca47872d1173cbab9c7ad08a39c5817b36637de6d0e776926afbb51c15b3204c4d60f14305c45f26eade988b15b8a5d8e18cd3dfb2daaa36b73ca7682240d462cc7e0e139ae0ab26d48fa3f7a3b23afcd5d6baf4a312a95ffaea92d8841b62846802dbea1e3cac21d264cdb723d7384e566b505eaddb93b1713c83c31f92e15e0241f3b87c0f22f97b042fcf2b991568635a30f1e51f465f266cf743305674320fb52dac7a295b8646d07fcbe5898b6470d083b44d71057b361aa043256881463a0a57023c892412f7855f593db4775054008eb7a3fe9a04718e6393f9a3e600d925e073695a857da9efe6c5c561175f6935fcc50351fbbe25e07f92ab334d54db2b4d0477afc253144082bbdaa3d343011e4fdc7afdc7adc7af72585e4db2cd518832d14da01ee1b6226a03a98c1b133751805b373c7a006da03b1d16bb1d0278fde649321461e807114cea0a39637524f593f080b644552b59cfab521551e566a5df4898c45b45e77765bc1ac856e2edae4748423f3434fe314edf5028278caef9898ad7d329cb73132192a1c4778031bcad2d828071db9c8c4a8a7eb5b985b20ea4753082b541b530345d07cdcde138f18290a1dfb16bf9bc5f000e62e0f63393fdcba4b3b9e9779af7f34cbcb178b6d24ba0681bcd0bc59efffe25f5b984738462404baefc0dcbc1edac17b53ec37cb022ce0e9d7be48b117873be21f588c88846b0479a055a80ce9adb6901cd729719c2af7c196b9ee89c24bfd7ac9271387403019a2d4cec2bbdaf8399fd0ed7b680bfd6615ce92705769d530e8de92c20aab49bd8f5fc1d0ae9a96cded234f3c1d3a737ff0ff17097298f0076c6d63b72cbd2ecd638548ca53ae8dbe6c96562b18df68dc2d74a764121719f145b8f91ffcaaa0f95248758cc20da409f1914bd98be527ccaf636ed07b385bed71643af55bf2e36e70df5e7522064b588c7c33510ddec6f0bc88fd38215a0eaf414803bf5f60db0a20af352548cdd5fbc1b974de898a5960dd7dbec03871bf679588239cd16c676be7b01802bf5ebe5adf43f55354601b97ecfc5a5d783b06da66bb91a96ac4cd7c001566a5d698cb8bcb21837d22e6be2f2a46245a88625253eef7006ed629861e6bd31a28147bf03789099550fe5348493994058a44704527d25bc8d03513daab4f83f3eb9655209d34b68726c00d0b72c29b6f612c90f451275fce322e45868a058dcf0e08a26dd30da8c72fa150ffc34e10f478d6e485b8c2d73fb32d3c1481bb9ad84f20403616a33cbc5125cc48f8da3099b282130d19bd004df794a517f414678c7498842325c43c6f77e620afa90d7e9945f7ec00e0f222930cedbba1eb66eeb9cdaac919ac3c56b1a41b42792cf812072413e7bb5c54edc67390e37e31652ab58d681089ac4be1e27698b659a97cb3f8ce27e31c1a92f2026077ef774b7d8ac8012def9fc008e04d708e0aa18e54b9b2689218ef4041f66523eb06abdc036cb199a28e462a80863cfd92dddb7465bb22e3461dd0f9a738a27b5649dd804c64318e9bbc2b9a67a31e5ac269d29010d92d8841a0f3f1684a9031547e2a00bbd40286750c8cbb1b810ff931e08e22e4358e526e8742ee9440b90fa65944d432e2a18ad834c95044f10d1bf4fcd46ebe1806cd61ced69076081d860d3b61d6d53669a15afcd899c1be603af3df59da138c75182001cdfdccb933499048d0e25db52c5ba32967c9846684870d6b90a67ef02d41360f375faed1657b2581f46206944261be62385e44ac211041ea29e03fb3aa5673febf35bed94dba2db0638d08ca72b6d6220967b722859722acf9ca64306db295d3fda1eb78f6f1949389e84b538cfa337c0f170fedc0446a2b31cac65cee22b8ca60b2021cabef7e0ad57a369c99201519c960b8ed5b690dc9cd93cc84c20041c871d621be68c065ec5b775190fa91a6701ee27af16ae0dddc851281808a9436a4e3e83a4a06ccce8f4e65daf7b3dad2f9c6b9058d381173f2bc629a42fd042a366345100b4eed07d72f6f3d42c66e1e743a8a0e8800ea6f601f7f42b7801315d021ce8415675c4200feb1a11d3db02d947e003de511487a4318824f34e065f31fe7e76a4ef6e3800fc7c77848ce81ac807856a11ca7b99257fef21007694a3f0895ea6518882ab9bfdfa7dcf0d91bacf8c50e071dddfa3d0b6176cbca163d6aff0df64abb10e2477a8ed218b8b0f067fd5bdd4ffd62a58348eebb2262c76fc2c5c3cc9f83d48a19d7d7ba284c430df199bc7a6b38f79f524c15b36d9c66f97947045fb7857703897e7a91bd940c42498e288f82a72bf06a9d790e1a468758d50e07952eb4e4b70c89dc5a6771a397e618a9c1842379772ea25e1fcdb7f38656d78a88b1202b676efe6a8d4cb9421a7dd74d5812c302e3c8a9c03b42c219a9d795e063c1dc3dc772bd1e7040e350c7dd5d40c4f72c8a905b8aef44f9a76a99a5f0a7cb72cc2bc9d21e84cfdf777290e0c4b85eefc6a878beed4df67af501806503ae4ac82045da624e49b933d243acd22275c4633e5b0554231a695b88f72d94c07deefae281f0fd0883d746122812c8eca6d073b14e8970494788054889eb34a8c7a5e0cd007d91a1d64b4d4320d18de1caa30f33b5f03284f6224d28433184177d9d893c4991e761607e6fb91b01898a18719b57d523bfd43fae8896e8ccc172821d137313f26236b896699d01250e69ae442de80146b906d4d690111d79e181284081be89ad415c5452820ef5af490202531c9983215da82ba5cf2c29f210ce0d513c130a4625e09eddff32e76bbdefcb048307c3175545badca9778623f93f4777e8990e4d2dafb7af989131917564dcc604fa856b76483920554da5037d1a03573decf93d40b5fae829b81f8cd5aead40a64f5795dec66800669c6d02d13ae85b3ac6fa9ff4e6e81e76073b8c1c35eec5e2d6de030a436a49af88e867c263aa5d931e5c6c2d24becff0df32d150da52c1c6f72cb5812a2993d3af97efff9c7d8084b88aa55de5659dc86c1579cca1c5f5772b293dd555c5ff4a22c099c486af21724fe1e5cc651655528c17cafd06248a781b8b33d00bcde38a9e82390e08002fe70f31ccef39a5a8404cb62c0f3a0c6f8145a7082b677d1838af3ba9030f61cef42a0bf0088d7ffaee98002a1b5549e2a5149a244ffb1e80c8236bd486b8ebe52adf51dcc8850f51f347f020a3fce6d59409ad5a6c54d79afebe9235b31231159c2bf3324af682ed9c6ac017b3e829d7c45cf74e879c5efcf0a6b85021b2007eb0e64827b80bb87d14faa0a2d2ee7d888c14dab60b998bdf40067ca9f6f6b2b0921228908adeceede01e9067a06bd06a25086b169a0611ad9a20a2dc84248c7daef507ec734e06e621b9ae0edacb243412a67fe95140591c4109d75c227b5391f43b3071009440291ec68025b8f984662acb1ce2ab37899c2092ad421d3c75c53e2a79178e9843accd715194f7fa850876961c482966587df70a6f196652b32cb9a069170164238339313652013c805cc81618049201288c47a96799ebd57a37efb3dcc91244f473f29d27270ce9ef5ef913acf4edfc9ef89ae8c233bded935dd596e67daebb1eef0a6758076268f59f07367190465b71eb31c99a56510ea0e22b19040427bca663392046f6622107873c11b78b3e7b50c612a83290b533010c6188824ca64117321d6f8154bdc3c318514ccf191663ec87d82923c24cd6c58eb13f600ba053afc0b959c92636418b9c21e40ba83372d7b61e578d406ddca9615a3f5b82241f9e42fb37162598f990dcbe6ea30d763b9520cfbabb0876924d6c01e2df61ee906bce3771c5937ccdb9055724a8e9161e4274559fce1c21a299ab7f885ee3077a23b0ea4ad8e3996be1267cf78245b00fba5a8f0041642368cfd5254e0625f89d19b7944da442922dc6fc21ede867a1a89a168df4d23a0c36eee1e715b3a1ec22e54e37acc91a41b340e6d55344ed11d17431f868e3930cefd3d528ca3fc3d528aca3f7f8f64c33b7f8f74c3b7fa1bf27b221bf27b22959c92df13c5c830f27ba2eb2f8e83b34f63bac31fedd11dd7d1f8d5c09fe8f7425577a57df27a4d77a37df30098c099d64163cbbfd09ddda01b2dd6e786ba456aebf774c757d8033ce831cb014127a05bdd629d6e99fd40b7a52bd42182f44a5c89f207963f70f73e7fc9b40d773c3592148b48d1bcf50edb775cf72ef4a266cf1abc193316b9aebf2872fda4c8755091ebb6c875ab482cb2e73f39e6bc19f3f1e57ede7b7437baefe82e748f75f7fb4d779ca63b6ce72510dcc51c2cd7df6c04dc5dcce9a40df63c14f278887b9eb4a579c80eb52bd28b463804e4b0e79c12673f00b854d449e45e801f7ffdc98835b00a2184f0f54118e163bde0765988844e786b67ccf60fffdea92fbeae785df1bae2357fe5c419b7eb9a33fece2d5eaf13f4f901e92e42249d1a78cba9aff96ec679e190efdcf399baf3217ec64f38e7a4d6e24fdd3271fc78de99f11d1c8fa356ddd1968ef3f89ab9ee6bce2bde9ee6b9458b65600e0402753a401bfe9a53fb3bbbb1a647d8df9b5ca6398c41a00b04ba306c2449382cdde1dd8d6a4615b42fd0bed75bae751d87bcafe1f6d59d0e50cd65d95a6b7d381175494f144836b63d9f930b2a0cb9828b7d85912b5a70c5917df7bd910d71b6fc5d40ac812b8490de42586165af7bc41dad6e89af20fd7b167310420dab4ae563693febd7fae3504e3e9edf7b3f738737eae472849dddb4d975763eef27ec61fece9afb6a3bbae5be82513b73c680114377711ad995d39db528bac338eaeeba0b6d19431edd8db6d4d57df52ebefe7e25569d62679e04fdc9ed4f6a7f32fb93188c5f73cefa59a71123f4dd349265373caf982757a803bc0e4377234e772114ddfd85eeb82d477eaa0e1a37bb31df12b5e757f603b6e7e18cb476d31dd674c7651ad3fa73e9a93b8f35b9d8f7d61b23dd35d31d5fa30f7757314fa8c3bc759ae361a6ef64d803c5dc437301256adfe9a0b1e169c9765cf79224ed9022791c679c71c6a9bb91764c77a1ec97ee5ee98ebbaa96dd684f1abb65debe7a476357f35657a8037e6737d629d50e498233a34d77a390a6bbd033dd9de330be2fc79ed2d857078d5d4f9fddb86fa9d7abec076cdfc3196c397c2ef40ece94686c7bfa6eb43b38b3affd55331b701a99b4ee2abf3de7dc55d515ea4035c4e1600c20dc161c371ac36894331ae5705ccefc410629e44801081727b0f60146d001199830494de10a268b338597256400ed97b26289154a587063e80557058eb302013410812136e8c20858a8e207575c018a0d5ce0e68a255d9802154c8cc10af4070e831266c08417212c6952052aaeb02ccbb22c15525c478a1085c58321d81b58327505d71236cbe95c21089715595ccba2628a29acb5d612c1de29865861052b6e4ea460773793cc1a4a5fac998941921cf9c17e37c16699b0a2e63d2b448a62956b6492629253242709ce8d4d4daa089119992684048997242033c58446416b680d132d3061126b74918bc8851466ac5428e108163547a688e28815d67ea9235998410a5085912bb0001286225950b1061b242e2042206149126e10832a80c0041653a8e103968a325c24a0b049c2e604438e14010997d247ffe4a33287297510a5c0f05bea8e65e7b05f8502ae7f3a72d047b0140386f1657733b6bc84f533e6f066c8596bad95dafde693da9357188d382e5241860c1a841e00610b44c01102136870b6b61f1368a878d92ffb6e3476cc21cafc6628741fe078184d91043bd08e2a36e4cb8e3da873d6392727d330a9d8c2aa5468c1c204b7f4e91eeb95130d8bf54b9f4e4f8a6858ae5f7dba4e527472e9fce4021353326987f9513569d2c44463440f8c7f72b9b7eee2f965d9d1f50eff992e8d9f887aaeebbaaeebbaaebef7de7bef634aa6fb67c21dfd4c58638c31c6186bee89a87d352d95cf00f65aaede0e56077b2c6ffb9ec8decadc13d9faaa564a2745451789a25343c18d76c63abd7da4edf4f8913ca7e71ec99e5e9ce10c944902e3775066d360c3e3af44cbb22ccbb2acc7944cd6b70ce3c91e8fc7e3f1781e5332796e738e211bdeca279af993f5eb744d18ec9d5b19e6fa65b19e9d25fba64f34d53316eb9b3e6db756e28b6fb7324c76ed9d0c03fac9b10cd3f9e737c3dc63bf328cf5ebd793515ee5ae3a8be728fa044d9ebf0c0228b7faa4b9279a47d130302f32ccb57da2f9937c50fee44ed65566e9dca34f1a3fd1c4afefe86ddbb66ddb1e53326d58772e5bc64f54dd66ee89aa6b1926cb30d7f689aa63f9e62b5b59f7a09bbe6a28430f67620daa673674a950d0c5a2e6c498dc077b783b5e0ce163848f0f3e0dc808a394524e234814a8a8d038df0c299f2842f842f25d944960cd012338b1060f6c78d984f8b2dfb3a11692a8961145f153bf28ea304892fac5a8e537232a816184351d68bf2e23d1bfcfc7838c3723521d80278a8fdd758702f30bc5bf78787832dc77c33a05b6fdcc5205787e45daac4365db2a86aacabeb280ca9ebaa53a4d621ebb141b7b764a6f35667d5eb38ebd9bdf7eb72c9bc0d6e70ff12d93532101ee42d6638749d5ab31e77c8fec9b7e31847deacefa90694c77df33b3ac7c958d985287ca9e5a839405df117351834031f40eaabad3a1b2ebb10c4a01aeefb057d5df8655a55beabf5be82b495b6ac6ea69d5293e7cc77fc7b7d0571a8b2189638d5a83beab79ee5a638cefc1edaa25674d5577746adb0456d96f4b29210572dfe321be839f2fcb26300aa626aa3bfaa9f36b02e3b0698e1b760bd57ac68c9a100a61ca5b297a35ee0b41181fe3e523d5c7aaaaaaaaaa1e533255d65a6bad7d4cc964dfe16edb51c43df94450cf2c07cd3101792a29096e8ca467333118022c0f1f63c8ca10607898852776f579e7fb8db29ba79d85b0d2ddbcd41147dd7d4315182fab49b2ef40338a3a108d9903eaa1ee8c302203dc86cf80ddf046f0a8ba7879d93dec86efc16da8e10bc5db189249e079952dafa71c426bad8fddfc6cd849f944a4fb44f0ef12db74636063f4ee2edc79397978a7598ecc077aa93b1cf60d36a8a4c480c1a1bc38017d3c1dbc6919762fcb56954e19df0cf897c13723470e223a1c768cff8e1a4351288b701f5c62c8a69f3bbe6ac1ae5e1f4fafb0c4a6eff190dd989bea962c47e60311d2b399fbc9b7f8f0dd221f1f4403fc012b0cabbc56957d6b65af8dd9ca7beffabd70db9bafdbcb5a6badb5d65a6baf6bfbb2e2a1ac2e8831be5f09a194556575dcadf2d53386e4db5513dcad01cb439da2fdedee19d9f04fde6295943f20ac37f0c107dfabfe76f55eb5b1124311a4edce654308adacfd8050d3f275685556c5854ab1c676f9bb65ecd9fdb7fc7696e3865bfeca4cd32b310433bd1243b666c76352ec78ab3a72734aa97fa6934ef44288d97bcbc650f5976dfb4ecccad9be14b332b66fc5ac7cf7ad302b5ffb5acccad6be166665bbef8559b9daf76256aefb629895e9bed9d5302bcb7d37ec6adba6a5f8a0ed7b6d5fddb9ec4bc79d62f5a5f9e4e3553a0533cd2c435ed792571a85f0acaa69640165c0ddbbd94348127e374942dce8f2e6ddbc54a9341a85ba43217505375ddc48618522551822ff64dc59edd435cef959278433461966c0f0490867c76df9de258ccfc648cc42a80ab7827b42490909d82fbef8e27b28146f80472abd190a8d469556b84b37eac93ed9b5d2921a0e50f242080bbf8283c263c283420da51d42a2670e86a586921a5e4e8542ef67c37e32becbf6fbc923710fc7e381befe718f870765d478c026bbaaa43602eeaa8d80dc9b1161705904e3eb027732621738caafc4c7840d8fe3f11071bc194740c334023f737d9cf9ed17678452ab8f33b331d38037ad353e3bdf8a94b99bfb61b985181ce254deafb518d35aab655956c7c9dc81b6fccc56eee4e92b2951db661da0156931e5b81a5c2963c80fe0aeb42302620deb2326b22bbdf8e28b30d25bbf7287da978dcbdcd1e866be11b54db9f1f6d403108241bb2badc4fb97dd90afea57e4963a68ecfb157981ded977987ba824495677d656bac3b8ea8ee3a82e4ddd8542b2b4e3933079255df0577e5174063cdf43f6f1a59a52a305aba754d583f699e09f8db1c90ea3cfb08c338bf64d9fa049d3163f91655996ad64b674a9a85a2d0c867176f6cdc9038c6308ea1e31042dee7c7e05071043dccbba81f7d401ee1e0ed5dd4b6d58c48e8fb61a87245d7de9ebbaaeebba2e4b5b9665599665514aa98f4dcbb01a2b869a3143c385337b4efa49297d4cc944f58b06e8f0ee1143b0833b42264232bc691987f166e790ecf89a07cbf6ebf4da5358b2637d82a6ecda4fd0a4b1e05bdf7e59fa044d18081c44d4e06fd74e8f7529857ebba67dd050ebf49b1ea5502dc4767ced963ea14c1ad6279469d343f08bd831e70db013d9bb97a488244968e72fb3d1c97e236eaa578a90a467ca79d9498ad871c4cb84528bc20d9cb0debd542a95e567ba31a33a8525be982cfdaca3f6bdbe125f8af44c35fba151c9e2ab0446d9c930ab63c5974d6f33fda5b13f691f428a66e75a3e0d2145d36eb7b963c96e9dc5b2d66d66c96ee91310526459b663fa044d5bdefe3216eb1d7d5a390bf64d9f70bcd46f80ef0fcf9f14cd1f27b752347f807e7cce49d1fc8bc3ebba9ec9e6b75fe4961e723b611d32d9573ec1a04ff664ee89b4fc4cd933c164c79ea9523aab6c0cb7fab49f73524a29ca64652028137ea269b24050a6f74433c7908992319600081020402a15cc39274c85b1671926a6648289e14c303031d8f4de0e5ddcd5df2b40358370b7ec15f6eabeaaaaaaaa7e5ce79e88fee61ff758fe81ddfec8ecadbfeab5d2b27c06a89ee5eaed501dcb3763aebaa5a81aa50a60acb5567b3b7a1673188661188661b7523a5134d22e5ccbb2611f1a95269571c3acfe4912f744d6da14951612d65acb02430e7c5c931ee02eb4e7b30142928620a288506854b25c2c5415ad30407a3feb9c436e8e2999681880dad533596badb5d672f6baaeebbaae0b5f415c6d1d95c21244a61f6ac39958636a51f5cbca96cee902a735820bbc141686ecf905441234bd148e147b1ec17962cf7ddde27394528a31c618638c41c7ef58efdca3ddf34f860182326dfffc420ce71ff8a077f28fcead7bf20fcfb57ff28fcf372782d0f050c0b6cfbe12ad9c7272ebd8b59c725dfb8b6f39e57e3b0a0f21b6a3681f34f79b2e691e42687fa17dd05cd7f4a57908611d3bd1425807e913ca64e9cf607b1234cde3b0d9ef66673fc4976db511f657ce80dc563b61fd6542e060b2740c67da34c618638c7147773a9d4ea7d3e978b4c7e3f1783c1ecf477f3e9fcfe7f3f96019dfab52fa70a08b456bc6c47d329e04dd7e6e6de7b6aa5050505050505050eee9d8683d9fecf9cd9f77329491a2792e770efa8986457b479f3ed77ea261e9fca34f9f77b4e79d8f3e9db2d3c078e7a0186872f9fcdec573ee32b381f383913feff0be9f77eee9dcf3ce3d39c0705f2c432112650508ec208d03faa64fd9419a08d0317d822fd8337d822f52340fd23b72b0733fb96cbf3fb99cdc7317947feebb97b2f9bc7b38282f677bc1fe4c9e4e27bf94a55392f4039a3ab7d67e459e6c36dfecc95cf6783c1e8fc7e3b912dbf233a1e467c23234bd0c4706e2e040265046923afaf3f97c3e9fcf47cf7f3c1d8c5fa00b4555d573869b2a04f992859afd52385decd27e292cfc60df88c9493ba7a0d3cf298661d857a2277732e8e4e4e4e4e4e4e4e49fcfe7f3f97c3e9f4f8629299af7e48e4d8d0d2098c0d422f8a552a914953f49b2e1f1459256a468de5a8c39ee0f8546a35269e220a65e6010ee312549f3b126dac49b882349cf6483ee4a2a3a9592da2fb53bf8f2c9cfe4c9cfd4c9cf641f43772118fa85d35dc9620e0402814020d0634a26d0e75174177aa1bbd1497e2650fe783a197b85e9ce07cef889b06fd8b5fc9e087b86d9a8b5d65bd956f962a1a0cb444d7a72844884c3568ae61c821f0f9f472152346f2dc6f793e38e4224e9999a9089337b0a912428040a8142a010fae3353109914dcc472192544492282449149264cf2864cf959c540e116fc64c724fc707181281455235442011497a268fee6c471321f2d0a8645f24625154769a6479e566cf6f364f4a01e3cbb05f5a511a1c731996a279cc4ad19c43ec1116842fce62f2f9033c6dcdb3813292642dc62199d09e321b638c31c6b8d3e9743a9d4e671ee27c3e9fcfe7f3794cc9f4f9fcf40186389274efbdf7de6bfd7a0c076ba00dbcf9644f075794b3a08b85aae4360428835febf12369afe71e297bad3294f996b59ce58b73498ae6b7ace59014cd67f93ac01d7c91d662fc24374f8424cd178161188661d8634a26ecf33b2469fe08497aa62d3f93969fe992f44c36cbcff4b22ccbb22c7b4cc9947dde4a92a6699aa6699fe72409638c31c6787ecbf689e8b59c652ce327b20f5a148d59ca07cdbc8feb960f2184f0e143081f42a086f021840f18e5ededf12359b7e71ee9ba853270c6da4be37cb31ee1fb4b9f7051a7b0d0d77a3d08aaafa35258e8ad0741b505b37899e9bed1bad1a2b163a197c542e95f5659194b118510a0b7fa1459e8ab3e593de72117f7c124e2271982ec79295be6bc8d6b2dc64bc418230f16fa99024f03350f96f90a0465e2a408a6c8cf577da2919a0710f418406df9a981a04c588a608ad454fba07f26202813d556fb78a6f760e421b7d47f33e0638c4ee02084220a9910ce8e110a25c8ec2831f82b21ecaa860d40d9279f7c0f05ab9cc21646e4312e83d51ffdb37feffa7b1f4912f6a79d457ba6e95306337dca4a592e61993e61232c8fb0b360bf983eddab4f377473e89ee5febafa74fdcabfce72ddbaf4c9b2f4c9e2a408deca9c14459669f589a6ded2277bab4ff63663299a2cf453bf0c02f3953e3d9679aa4f16ce6984fb24695a4b9eacc7647f5204e9c93e263bcdc764d76d0e627ffd4aecf798eee4a6b77210fb2745d68d4b2f377dbdb2c9660e80470862354da57928405429748049ba441a692e96f23de4ae9e5d07b99a868702764bd48e5d0e1f7fd31ddc2939e4ae2e7775abe998fb4c5b2982c7f4ed1176ccd53497e6a1801de5aeb46c2225b75d6a15b5204113780912245862822596c8eceea399051460fc841258144adc2a40706111c4d28212560b254a685a9ca104d51222a82c5082da600433084bc82a27094ae09c2942006fadb54c98ac9d395ed8dd4715e64265abaaaaaacf58555ab040aa0073a018824b22e66ca5e40c41b4f0c007e6dd2fa545109a8299023c4f80a709f02c01def64b29c982921b1460534a252f6260322755d2841221524a49a992194a29ad95921a25a937ab12dc17e113f14621ad2aa6c5826aa15e25d567bf941667b0db12d665c1d5b1c1c58280dd246418ccd97ea99c2936a76130e760a165d895d7b6d49dcba65fb853468b12c0472d86685103086d64fb66282192b345cc4b90d8dc1213c808dfd4e22472a70bb0bbe4a5949ca1da2fa585072ac02dc171a3c9c46814ab70820c4000032880e1480dc410c5cd108e586106994d1792b822053b2092f20117c04084281c0141b5842ac02c410b4b5cb0832a9c2003257480050a98b42009912344a090b2819c4a8c800b410a8ad0200644969801da88a10b33480cc30f76fc7c9c39be7b0a8e87b3e93b888ac1a6c76253fd5e0efbd2dccd0f400478be08860b836098b25f1603913018e1de5cc15441b462b46690b90208535de4000d2ad86226c744c58ec760b8c28e0771120c59c81fa311c74949f79c3d2803e07928200a12ca9d92631a617e60427c5fac516d88d646245b2cb1c5134b86bc2749dbbb12b4bfd7adc35f9232fa4bb78ee53a3e0bbea64f34f4589f3496eb9a3e69bffe32fa95884f7347cf82617f1904ec337dc267b9c7f409eb2ccbb22ccbb24cd3344dd3344ddb34e61edab40cdb6733e3b5850ee0745eb0cc96d24e38d90b267353970f1cebc5ca54a9ea82435f264a06c8ad7fef1e078e42ecaf0676fa0775576d28257da5bb955d1dcbf2852084f0575bdaea2e6e58e9cec6cc12e605cb6c29ed8493bd60323775f9c0b15eac4c95aa2e38f465a264240828ad95aed41a7790cb59945759fbf77a50813acc2a4319fbfd24a952813d4c2badb444ecae9b32899c7f1c70b8e1061b6c50514949891103060c8e434179f1e2e40404fa7c3c9e4e07e36dd3b42cc3b07bafcbb2acadaa5a299d534a29f677a5852776bd94584a29658caecabbea16f9fa6faa3b5835d53d6228a2e17e28f748f5b692a24a29a55f91227818e714343227052f634443deb7e07e25da1b23cd73bfcc4648d2f98ad26d4f3a234d02e3e6cc0e4d1043f04e5487af7e65ad6aadb5d65a5722b62f88677a314a279ecd88c68a91f846a311dc4e6487f82120b3d975e31b65d7755dd7755df7de7befbd3b74386cfb9ecd8c551672478f085f20cc8afddb417710c1df707fcf3b811d1eb3d857e235e38e23306badb5d6dac743f5f9ea91b0cfcbf7600fd9b57738eced1d0a7db7bd27d232a5c772f544f4150dd1876dad1435a7850217357b3bfdb4150afca0a8b1d950d448b1bb97c59e7f9b8b35de9e2504e078526018d25aa2253a73e10c5692248ec3f81bbb04620d4c639af3a6ba8b9b1edf660ea0df34c6fe1e0f5877f4da3bd4eee8ad85d11c1ba63bfa8c76d85f0c65b9853ec507ecf49876e23ac63e8fc3c6340e01fe7e16df78fdd22c881d7f19cbd6a449932695fdcc827826ebd0966e9abff4e73f6be62845457999b811351d709f8cd44a94938642a15017b2b6881d47ace0006288f9f252d51510fee795eeace7545b6badb5d6da7befbdf7de7b5dd7755dd77559fa1f6c3d18638c31c6b4e364e446841d305a8b2dcbda5abd2c889b2e7d82a6eb9e100e177b3e87928da1ce3d8799032cedc4e710c02f2f2f2fa6cf0f2ebbf3b1ad149620b60fe8dab793dfbf788a75ec287f190f16ec28fa44631dbba579b0dcbfd0279a93df9f681ef820cd92fda34fd7b3abb33b6208069759a8944bd98a8a9632a5484600010100003316002030100a86c442e1789a47da3e14000f799644584e95cae2b11849511003310cc3500062000100004288410a190eaf000048974298c137fdaf913cf1245dcd81a1a8b66a42b40e5cc04a1d1319b10dd0abd2dd1a20b9dea163e8cd2a4145bfe2318b873471df7a0bd54366ca48ac5d1fb12ec49105343a2ba045bc11abe5c6b12b7933dedb57502b10e4aeea9e6b7027cd8feadb511df2222888aacc6e30c438d07b0a41d9bfc1259c093c75c14bc16c87a2b09cec3c0fdb2c812137553150402235f78c4201e7fae104eb4c54cbaa6c2f70d36ce95408a00fd91a827c3efd2023e328ffb221d83f907511deb2168585b1803a2407c591d8751587d2c50a7b14641b88ce9b2220ee92d118b87440f9093a301bfb34b22ac1a4fa5d766cc817e137adcfabbba1ce8c9c2244899caeae3ad1f80dd3db9d7e77cf1ba5e7a9ef149d913960a98069ab3a719b348155536384f8ad8dcd7daf49cd38edec766c53932e5d1f1563f8653362168ff848679cc557f191ee51c1a0fb7beb80227896c4d645b9908beb6e18e2a447fa66aa79b94e1848cc57d06cc5cf9d7968e0a550724bfae1d9431cf8ee092c3c2186a4c5a922894532811a508a4de032ba72b8b1157a021a1b16046c28378948644c4d4714131ab8303332ed9c3f8f7ca3f08abc60c3e6dfb5ea6e866f66845721dd68e7fb689faa882e9fe27e1a599f49cd5ea1538948656a98e29178a46ceb450482e7447699495e0155aa3d6d884ae9675343ad961599c3fd19e265a10bb0dbac81d7d6701315544962b6e7f2528a625c2f5f369c1af324ddb17691ce1581b98ecfdbdc56012f684d841219c517ec70b0db63a529c672e7417665ca036e3c1becb9f591e89293193ea394174bf85a9095c87f4d69510c143a6c95f6a0d685dc1893f6abda72c0035afa2de519a60394ff148f1b6ef9f3ffe91301595f9681c9cb3368843f4b873fd12168fdabab70d95808e892670c60e05e41b061e042e0142f4bbd725b1e59c5b08618a97019f4933ed3d16b6b56c917019db413d22c27617e443ceea39a675f047ceea39b73fd23f1df7e9479ec8bc4c37d94b9ec8fc49bedf76e8de3af50a47710153532cb89e4bfdbfd5182ab43b36eb28a844074a99e06168e715d7aa009754efd0e0f87a4525741046653bf1bc08d55983f17ebcd4d86295d13455ff7748b8a0acfb5cf47f0e3e8449b144caab3de6f2dda9120c560567952fa47cb4888c10ca220a7dea176a181af01965bf7a9a824f2323dbb7f4a2595fdd3049311e01245205b8d08fe5054dd3d0198ab1f9c6f89a2eec36242b1c9f56144d19b018c1742a92f82fd30984c466d6db3c0f7a276833cc19951c4ffee9115e6845ab2037c5943d70633b3acf4918fd99ac9c6e9d0dda5da1a9899cfe068cd2ae52451a262f79ba7c816a95cd6a2a6c891dd422138564b513f186c3c0396b04670a1840a47fdf34cd56af54500b653c4dd8decffdf9183b9098dd5520d0c0be9b3f42d0a14417c9428ca2c1029f160c094ed30634c3abb688c5ac6291c64d4230b518a252322371dbda83f7eced20d4ce947a6b423439aa3b4465b3a351d6eb0a635d8d39aace90df6f4066257f804af38cce9ac510044c5634a64293bd78e69e7421847478efd2e3c167c6940539fb06977d5a8791b8dc3e11e9aba525b6e0900536ed1c714299b4ede0f3bddf2fd6b8773bd867134d6028e2a3376516a3bff64750195335f096dc3e4601531d6222284d7233e1ac013b2ef114722471e7d7a655384e2b04c34c3ec01cdd4705d6a41e397ef5fa684c47ef0699a11e562f016eb7512e5da52068b456c75cd6b8743c0d00b8d72874ac87ef1a9525d6f26d0f1a861c8c14ad9d23460325b2f8ea2a479387a4f30c3cb0830f32368097682bbfdbe9dbfcbf2fe91b869aa020304f157dc85fe9139bc7c4081395ae6c974174153b09377dfd77cd80142f498bc921963cd59de4a763445cada32b63057e8412f6e736747697b4e4e5d2481e82415e1aa86c7f2218f309a3015a419fd0afd38a29fed436e87bc42afa2736d3b4ff89a4e1350f34f90bfdb52647f404c951df5f423d4a81565418e773ec2fca61907b077b42f3d977c6df1cc27bd70c7a2a9b12dd28ddb62e2bb2e6a8d76baaf523bb3d9c25d63ea16b96be7485d8d021f7db345ea424336e4a08b58fe342c3cdf1169356930615d036c4b1acb59f5e25b4d4404dce818679cf561f894d7456e03d8db12ea1222879f09581d6f093d8cb4fbef1dfe83fe0ebaa2616dec4ae66aeb5074de65e6aefc53c984f8a429fecbcc6cd3b6a73dfc3de84d4e0c4106da7127415fa6c02576892158473999d3f171d3b293e9ab420e85201849e72f2dfd632efcd06ddc4a85b7b2135fa3e0dcc0609124e4981609127ced35dc687dbcdebb8dd5df5318d2edc2486610436ce3f91d8b5a8252b652411f0b4cb0ad18897d71a6d674c67e2b6c5d731413ceaeb1021384f2265461d246f635e8e2cd89a1d4abffd8927b94cff0e161c1cc603edad90f9ba8d5ee60b969308ce2aae80faf6dd03b6b082b358c7017be64fa22466ab1d5345e6320b13dc1c5d6a69feae3b0d19ce1ddd55208576fe11481dadd5e142ac2e593431cf0076001b8208d1bbd8950ee89514fc41559c1e53f5102c33ed432dfca78cc8e2f2555f79eafcebe87baeef3a3dbdd43dd5bbeba7a1eeadecb8f4eb787ba6ef9eaf679a8739f1f5d5d1eeade299f748a3674c9a3ed1a8931938879c16876d5e4b0e5d16885214dee9a249552e4a51d28a34c6e33268521126431dba777413049d11a0c5f791b5a5362dba82c963832c24bff4c46a170de3344779c18b16d373c2ca5f12fbb34038a4f2cfe0d879b34af58485700ce7b19b705cd1a5cc29029aa28dcffa9d8349e202c421fd78a377b93455ea57a63617bfb26dbfab17ccd6d1bd8e8c7cad64d9b6cf5c3ca353737b3a5072bdb9b6db2d18b556bdddac4562f61c57074f7006316428a97c1a2bbd3e36973e7b78eb69f1203ef85c63f7c366360e29c23eaa14f8f0c15ff475209fb405a48ec529ed1e08dfd9d583812615f26010401bba7e1a1ed5f859db78d67f6bcf341a44ebf015f5ae642f871233ea5f682408f0132ef8222937d7806bec6c2f48387468f752f276a4bf3d1a31f07aa0a2d98eba9de5ec265b2b4cb87083fc532d65078e2d73ab8b36f336fccfd9b4fdf8acb77efb8f9e8f64f7efa2e3ecfb5e3e6a1dd3ff9689bd87cd78e938766ffe4a36d62f35d3b6e1ebafd938fb689c977efb8f2d0f66f3e9a4d3cdfb5e3cc43dfbff9e836f17cf78e230f7dffe4a3ddc4f35d3b8e3cf4fd9b8f7e13cb77ef38f3d0f74f3eba4d2cdfb5e3ce23f4fe2d958293f2129d9893bff849fb069b4e92cf2a92b2ee2667a6f67293c35a7bff6d094d77fb12b2256c694ab5884e4a91a5866cc275c094a596129ac6476a84a6461ca822805956cedc690929cd6f4338f96a92426f8af267a6842d9fc433964674d7a85e1c134a3adff847c0eb38a2440d29711c2aebf6ebce27b9b513d613549c50e49b360f6d739668adb10adc8d82c2ad5c5606dc999437442ffe9a167daba419f871a0ca7cab8d918dbe87a764c3c9b9adc9b33c73d08f53f2bda838e55c364c6e92ccefbb9ad56884f386c23d0cc19d8699c21359c2cb9718701ac9f02c2f5a5d2fe6dda807edefa077873c3c3d4ca433d67fa098d3f87356d38c032f771d3e447e8a6761aecfcd69cdbea5a46f18467c5f785c7bfcd0ec248c1efd3f475a0a2f8ca3bca050a8ab1a418921e31495e8701a0c4321647784c8b89b9cfd646f115f9df4c0e1696431e884ad8103efcb4ac8dedf0ac577a3567364d5f2b05bf805b71df7b362313c0ddf8751c142995a7195c1c3d4dc795532ee7c1e7d1ce8e226e9456f22953391a95cccb86b8e1cfe57524b77324eb677a05c9a55143f16c03534a619e67569080ac68f30be0318f6b3a7a4395db14dc494026b875dd72178a9c86b314dde1404e23ac778d71b5898a4a8ca89116fcb03449ebb00526946bda1a3d3217bd6e68df098543201722124dfa35aa3cffffa09c10ed7a1b7089b1d677f8566386abb0091c41e771b332aec1b214174300d633d3a5e93e774c470545377532a3633635c3b715c08413b274ec4280d0457f826976b89b5248ab8a676ba039a81e86b21d4ea3ba803a9a7649390b6d854f09ab7e24b1e44d2403994126b055e328347445ce7bdbb4d7619b404b3e97b881d18dab5285650e85b09343513a0a80983d79309693de843790ac5deb15274e813fe1b37aad11c7a6a3fd60a66014c55e1fb1ba0fcb9598205621b42150b0d598ca89361a8a725c5feb634bcdf818028b601374d9eb27ebeb060dbec499cca8c052dc76767e8d830e5c4892b969f628b885b44050ae69688031d96159b026de2d06eb4c22830d44931ec2ad27e95f050ec6a280fe8960add7f24d1e072608ffe7b07e7b45fad3446ab050c9a4941e216357a87ad151019ad50a44cf4846a52f870403ebafa574c1c39d775f1e624662de822768b48eb55a8d775c81c956d376e275cbf001060028bfc32c149a19b94d19878407e0b802c259aa84854a6f3eeb8460611eeb9d0342c09a19fe449a92bacfba69d2347271a09739338ac84345f5982a4fc4350cfeadb2cb66063017013c14621e695d4d5b8420ff0d742782c6298651452900ef51d8f8899ddf7b614ee7087dbe8afd3c033abcc0b8c1d931c9a93e30883da4efa69941636626566f4a16ba167f354b5367e7dc0f53cd38b1fb5ecf8570d1ec35ec1c4bb305cddb874ba453b23fa816775c2de261716c9e2f0b4bcd8abcab57aca7fe7e35568cb8722d14bb9db429eb83baa637dbaf0349a1bc8f1f34326066c9a0eb30d1af23d4b99c964238c75035d003b70a96ff07db1474cb9cb3c1e26dd7980eb53773e67c2891c9af409a5fa9fc8583c0e4e0bb874509b0799383a3468430be6a761d0fe525d30280db1ec53f0f42f063c9088d22affb828bf87ad7644221781f52229d347c761361d5850f3ba6dec48437ccf267987cadbadcda5adca6d2b62f6157fee16ee09d97d43d291a37341613981eb4788bcd7616bed545277d3b022498c68dbc3b7fa850bd64b085179bd94b18e5710c1dd0e249055db3745b8864d6a22188b5265362a9892100054516283b6e22dfb6a894b5d2bfb5ee3f1d8b310ae80ff9168bce88c361a7a002e297a21a0b29682114db9f5bcbcfa42858e4d8075ab4a20679ec44211f56093604d0cb2a98acae04a6335f8cc03b15a3ebaf431900fd477013eb2efda63fc89abf0c5c5631fabb1fad53c6a8afe069275f66c2acdb13aa2f35ad3030973dfc119c03e1d3db82eb9f2e4d957ec947937b8d44b82ba131251a083c98ff7d4c3a6c26a02654af9367fabd89796cf1e8d97657240a19cedcc66ab70b7b0328184249d5b2acc8270c102c390df42f9ab471c0f6856d7a8ee5ac4c2ed54676be4b3fd6078787a177408ae313ce03caec279f52dd24debc3bca96de3bbffea7d80c590874233cade3b77d3da6ab2dc33ecb63baa99ecb70a4715c81a42978184ca7a0b00d0e9313954c386c464239b0146315dd103d9cfa451b0d22bcf68079ca7059c600ba4c02ac90e8b9ed4a189311cbb3736e56fc01cadbd04cf3e72b081680d52cf272ca85f79c4b8cc7693497a9ef2751aca1633dba64fa612c1db2046bfa72410f2b9850153c96592eade21a41e408197451000d150f8c5890d52c4472bd62178683dd862d736e56dcff260080aed46e26e94495e53adf7c351517f2ddfbdc3c1ea29e1ec29f9b99d4f52aba9b5a5399722edd11642b238aed721b26bf0a00b4429270bb33abc255409a3faea284842aa9b2b8ab4a7b56e5dc851e6db477857ee8f9348344d8c9209efa2a1ad1deb15eee123f7b001966fa634e6c4b8a0dffe17b2bb66fff2bfb4d2c5d20389db51df80caa7423ed655696fad4de76f1ca356f40a26ad20c7ad8b8fc31685adc055fd175f4a96bacb95da1aa9897ecd75d6f4f1db69ea18d3983a84a2efa6d57b7ec2a8bca8041742a2afd6887441a0e8e08c71d32183cefd7363b95bb3b094635427d11d04d8d742d24f4eabbbd6268d651ce8819a6ecb6c73d3e3b43a7ae1cebc0782afaeeb6fa4009578a5bddb09d6b0ec8b7c19cd7e13f86c97ed8855273d919839058f50af0818b5d29d2621eee5b728d9dc01ed838c2e1b71953c6b650379adc881ed078e390808cd87991c1b9eeeaf464b4278bd058743d3dd3501b5abd611f758f4546b5c02213d5e074dacadb38e3dec91015791594272fd7ec7b50bd599aece2cae42fae8c44aff62119b91377c2536e10abd383280ef031a75ef4547b10289ec6dd11c3ddd1ee15dad946a6eaedb0da8405cf3cca44caa325bec5e85760a8e0e00a007bd928e22c9d2b1eb3046fb9323a8ed96265a63a42fc8a3874d09bb591ccca7d294ace3c4466f4f15938a7bd2cb8755d78386f7403416c87a0a735ddcb46b03d94476cf46f85cf4e155d987b61feea7b9e9ae55623e7bc7d64277ba39e748dfc5fc4e5be0205f1f67dc4834e41986476f6104dae157cf30ffd6b7b069436cbc2cab5172059984a87c58fb387f5930afe4b810767bf4395847e5be1b5303b628c568b30ba9d8928233912e8a22d22dbf67e9a3f19425d5dc5ea2c89434bbe7c10b220c55aeca8835c7a44491a55ac33d4c3e3c511fe06ff100d3baf43012aac793ca9239493f1e8244780d4b7bc8889970488d234e388e801b4a4b5eb27085d9336d97f3a6ecd61b8fb948f0449e08b54325cd506c3efac556017c577dcff43a65a5b8311aaf742d43e63116c497acd76e58796ff66388d3f3694e2056177408b52ba4f1d1fbb82594cf1fd675e9f018639291688058f7579c461d0d3ac8527b7c368e6d0b58a0f373548511619ad02958ade1a1958faf86efaf87332523c256216da1d8910a4f382b4b7c9ba6b5a51fc304c4d72b5ad74a9bde753fb084763d7302e8a278726a44bb512e7d422e6468bf0eacb425582d827b6a85f80ae04196c695d2e0f3ac60c72882929c585d9177ced5f0eed47b6f09b3331ad64f712862950385a785d79761e5eb8500d75df1b29329bfe900aba5d7fe91d5f075ce4f956c5eeb69647dfcf6b4c5e66f9c90e8bd72aef4bfd549d5c37515d6ef4a40cfea129aa88837b5593c106182a15b9989f3e30e7a065d0152111793db363f425ead6daf447d7b16874b7d34953473739e20ea57ece6aedf039c4d148ac2ebdceb7a880fa395415b9f1bcd7516e0a7bdbd14bee5014c56924a4b01a2747198f90b48e580e15fc62ed40eb12d1a88f88adb5a65caab2b78d4e72c80788da46fde52d660907738beb3be6ccd9d54e0e0b0e46ea7d582f4ee3d5e15be39cf15b373a39633c85814279569563c1e6183a12975e2aa3c5a5ffb537da13301e45935b04c32d71e8e7f151e4c2703fac013380bde64cd8f0622c75629e386eb18077373f71f62d48e60130be42553015a30e448e8ab3de3859c2d53b579941c82f9380e85475e4e4a60a7e05602e0129f87d6d4ca8610a5a6437894606f83b012634e88105fc03650c5d8ad57212b8b32a9e190e5b78ba1970d13a014407542c766ef2ec617985d270ed8d15bdf5117035774d08a3737c6ab9cce55faa9b7b55abe86c63a9be1e7fd5c16baf2bc37755b0fdadeee58099c0667ea0b2869a0377cc7bc597e73aaecaf5a56d17a529c0de845fc87ccfdbdf5da94fd6a3467f3f8a2ec18cd9c5a602c25ace8efc5a2189d82688dc5fe47a548cd3ff9554aac181c2f3e2551198f4c3ce0b6060b74156e0e498ecefe360bc36e1f80e03819c2a2d4ccf75bb15595febd8fd7216fbe499f76242aa13bcfd6c7b9247e2561a33ecb80077fa4fb159b3534bed891d70695e34155ae662b90977680842fa70fe01935a18e59442b0c68562cd3c4e8568698d181c640f47d4e9dc2b5dc397de832b84b130bcb4a99e1cc400104861b534ed0aad8e104772fc5c93caf9a2420649de381462903fa2102326da16a68a884a8573a07129fd669a1f79b746ab77eb110127ee9e370c093f9fcbb36d688296004af180799f1fb5d11c7bb213c673ad9cf00d7eccad99affe18ed6277f346e1dd216f89fcee135c3ba8bdd1f34307a3a3767dca511cd1a71f4c33c903e1c00982f30727eacefdee025e8dff150b4fc48fbf765343f783d22b41cfb11526d46a1b0dd4558fa64febeb6977852d5965a7da21acae9912738c7dcc360b39e3cdf9179d1021c79ecb6af13b9ab75917313b48311c672432699bc39d3e5552d6fa9cd26ed2faf65bee2defc064f199a6f3f9d45d60b2a393c20c003afde77e514d988c9229efb877a03a8c1f83af3cc68ddb48d6b5baf6266c91abbf0c85edd33198c309e20ce32ddfe7d82bd00889ad00aedd9a84211c25b784f51042cc0d1619c4f40da5be09420fd5dac92bf6195fbeaeb0f69fe2afcc32a90a955ade2e9cadcaafe26cb27d445b289690d31097cb977b7f2df49a22a0af2f62d7a006874d4a4f9a8043b4ba3679a565b326d0e18dab97ff8c32311e802bf93b7a089d31c39b8cb25f21f7e32911843f2fa29a10da135c5ed09bc78744419fd805d8ec9e6580aff96da6cee498e5f74fa464df7e053d4db49b916624d3f35f2376a41db63586963575b17694e70040aff2510f44f07929a5dc24907829e9153e3072df14717bd944d00ced676420465f5b79b50385d85d50afc906032dd01fc3dd1baf78abd26eaab07a3b773f8433dfaf0349a1b3e0b15c805cebf73dc82a1e47efe7164e80d0cf488035a85b485200f3c2e7da34ee0b95b44c653216ffb6ed48c65e8dcdc4e4856e64c554469237112650d4180880de558714a0d412658f64ff9d80b251469489b3ecd48e75d90eebc534bd097c92c48c95022e42b1dccd514f6f66a67971581146940f2db05971905dd3f80817382dbf25c35c875bb3fedf1cbff60406d96fb320434a3f453e0b9406bbd3badd3e22d46a9a4d3868f54e53c0505c9bec1b7a0225ab3e3e811edf95dc2af23892d5b86563effd725c3066c6e7106652793983e40b1e558731bc8b7fadeba94c4f4ac65aec580bcc62ae86464d15384776960a2325ebb6f9ca34de4f2a217d6b18367d72bcbddec3cfded13d8ac2cd582ec49f30b2c996fb18b6e5a98054527c5eb72eb7c30e82f64a3773fbc834fb2d2184bbaceb3377aaa8259c4ca6956734eb29aae942a6418cedaeb3b91b9d5d9a00774858e54da112172733cbe032ea1445df08969a3e8f7109698f378563dc9f13e5965983a9abf0213b2c94452188d585e5e7d0b3084aca4e93aec9b56fe6bd2fa357954ebd94ee8eeea14c336cc870d50e61b74c70257e9fd36081137288ac251a66ed40eab0e93293685ce2b723aca7833be2d536754604f40d98f1062b97d71fb445562d4141adb297281279227df094a5e1e23b842a6e0da01dc4f17f49514d3dbb07ba1a950884b5b38bfda60e73d0683eab15e5a039383a9201985e8f13e1c6b9c2c46804ed47e375d169ec472714f0f3d5817773ddd312eff013980ef598abde3b655c987895928ac5e348181e1d7ee33f8bcadf4652800c252fa91f252935e8dfb4332b9a801412b27c5ce847ccbb478cfeac2598c0e20ae3629dbe64b02a38ac055f1f135c2a2c8de13eaf6a1c43f3c458b0222685305d82558c211c8bcdb64715a66f655901606a14b4276f97b10d09ebb99eaf941896ddbf10a00b233893c8329533e1cf83b0841c49573c747ed4fe2c7ed974b862cd9a28ee1589ebbdf1755d31b025a15d66204922e11348d503320c661622febeb811f6eb63011600bd033bba59708da059b58e13e3b9b57629869fa86ddcf4368436c7af8ecde70a48c1149a4d8e5d2b3281ef7720f89f01ad3fefd24538efc6f4fc678d930f0c3588d140da1c7daf6b83954f59a1d6076a7f270b4644590ac6b39be4cbe7f6a810ee062e02a2648876596ccad309c0eb7eca96bce72dce7c35f315820b8221c20ea18fddc694b55786aaf092e0cef20770f1d28993515677bbf6f73d86ff80a96c1e7d45c67e81894c37282175392f0bce57cc0be2712c45531b4a429adb7b8837f51df360b44a7332d1fc4987da21a3bf5de51c54c00b5d5cfedc3346aba604fe83f62432a3ff657616705b8e394f880c48411564de6b4199cedb4a72fb4e6ed4737ee6698d1636e420da6f91e2a7006d1c9f12ed948c259b903d27effa9410c9ab2fd61be10527d14f6fa8033d8c3dc36fb4009b108529947f47ce07dca6958ed4a2f37553f97528c1dee8200dadd36630089b80ede00ffb184a5345d6ec97ca80e3b16fae646320962951c96c91429d7092a8242668e8aaf18aae8e46284623cf9ad6d003d5bc503506daeacbe31fa8a08b3b9ba85009732c9570805bed7b9f06d94d0089757e1813b2594458fe2733d738b51c58b289c4888890a95058c42d9cae40c636ae53170f1f7137ce7dec4a42a01017de217ff505d0cd7d26e0a499ff9114df337122f0c7c3e1c41604eb7d57874c23bac84877418931576a9425588dd6e45c084757c599fa1d8e1b50bf336218cc62152172d3ce36e08eee816146fe33d1ddb7da2323d82465866a6d582e8f85caa79dad3d33f96c89f73d2ea1e1fa1b11a742eb7a49d36e9bfc2606aa5237d2cbaa4bf1cccefc6e0d85bd7deaa59e917c436f6db6b2098ed3d3505c8f2370c17cb05efada7ab45267e0a5e95aeed20e0fe047fde34e202bf4c5d61c8be01f12b918b3b25251f50938650da54d3f007dc4ff2c670fd4eed9225c486d974235be059156472df4ad98ab7ef051a19541cf635854754e9a09bb1dd1abc3a12d81baa8056c17bf17e5b11f628c67cbe3f3281605f667a35ade8c3485479b08298104e4b7333fd14526fddbda8a88fcd58f77aebfb472072f9d030d48aaad23e8e6cacda180dc622421e232900d64d057f9a980b70a29799901dd4070c85cfea00225abd677d262b0c8e0aa183517e09a30d9432eb092b4a4d8cbf424b52a23ea5067d11ed81cf0d7af59e7a8880cfdcae1b30141aa567dff053ef8d78765f633fb47b0fdcfef46de15d77dd8274c1a0d6f85feaacb09be7fdb8eb24b1036a0908d95eaad34bcc2092a7992ba9d707527e65933a98c9eb793d11ad3b8fdf414dfebf5ca8211322b6c0bfa775b8a661d39264c15406fa6f80f44223a2c2d850645385e181cd6079ab9fe0bcb58ea67b1750c6650d63a465e6d66c186b5a458efada9d537c307dc6bebbe00661e45725e6b97f65d57375bcdb88817a5b90c3a700d44fc6eb839f237d42903fdee42c457fb4748f47e6214b1c216b31b3306e0b75749203b9be861cf04af56dd055f45a9f2d8b238ba97f01ed021d52f19c2cc99b2f8fbd49c453264b51ab4ccf5c1d895a99acb117b395723e6234a4ae200b8f15baeb4de1494a854a079a0cf1f53c1744c98373b339c20f88d68b0230c4e14e16892311b2de9f3c14c175abd8081cffe4764f1750ce84ccc58f3cfc8e6f60e82226ab0a9eb6f3661aafbf4ce58600a63a67a569cd01cac049fefce5638c478a0d416a1140a4bbeab115871e58b59ce7de6dd3541d48709e2abd2ee1c1dd4f26efed01088eef43326c0d575309e29725118ad8c27ca9461fefa590808ccf44b1b837114db75f4ed93f2c10716c1a9064432cd758694329957a49f876ca83022d9b6c3f556a5dadea4ed6b313315d42d94b01772eef72bd201100718d18319902758521030a6e9ab44a80c61fbca092cca42df4ade4af341cea0b95472aa9dc3f0e805e7f7c16294e7259d93fc0751b2c1b0085b2c215e6845cf58d9cd7c7fa2ae8b8f7d607caec1429accc49fcd03f2ca6c4599a0a681a99757803f6c18228842afb2324db5cf6360044fde0241e8c0f2fbc30040c4b840479d4d2f437382aefee9198dbf4fce7c5c6c4b2c004294520b88d006c42c3858b698133a5308bf8b98383a0c4ebf07087ed3014ac7a2474e36e1be4b991ab5ecbb079249ffc0718c184365fee20486cb60ae0a890385aedf2820e9721351270bfb6398b755b378b5caceb5d228f2a73b2a1c2a5b9f64e4924511f5a14b83c79ba220abbf5a3519d31322c03304de7d74c417bb5ea4ed0cc18d95968a2d0e72a2c4c0f78e04c9bd50e6277068f57653d09171821ceb389490d8b62c4be486c8c9e39ddbb39920ad9d77c32016c1526d1b05f057a027992b389ca4f13acd1848c1fef36ab22117e2ef5995f43763e92e4d1c112cb9c2d8dea608a684a9086dbf947839eca496b39b31f40fbb70ba7510ae219c36a2a03d400638021dd93d118a24aea6fa5e5a82eefef9576115c64b06a32c779c5349b48e5497e63df40f976b7d7b0c066d541f624676e1f9f6b36c263d1f928af823eba9473b522ec3db207af24110ee8f3faa9a92eaa887a041110f4ede079f38e93b9d185f1b7113e48de952497fea2d7d828699bab572977ca7308f435d131cf7f28cfa7254708bbf29cabf5b5e876d0f6ae88e4c0f2e60285436e18cb68a4e272863badebf24ca10fcc73dd00c9619bf625b6d403d23ccfaa5a99e1a98f1c340932e2481ee99975a3b255bdd1f4f1058590cf938f3e6593e6bcc2ec232921b5b4daf501e959f8913b2c0bd8a35aa543e9fac811497816ce71fc514bf6a40492934faf7a0d7c3a03759fcd484501876d8d8e933d4f6ecf8328a789d0036734e425d4759e87bd99e0c35e6d9ac09f3b0eb05a02de87132f8b16bac89fcd0be0c44e5a1921697c378dedba391f04f3eb1e292066efa53a4f27e3cfb4f30c0e2f768651204adcd2498d3eca9cf15060645ca7237c92aede853e0d5822bb688578313671a743df983034ca9eabab1b8aa4552a301810d1a9471c51918db661bcda351db08596eff794e2ca8a06fe65aac87eb265efac8c311c07d1e5c0a72e918691ff312aa729ce4cfa345043c5b1a964d7fa11d42d2f4ac7afb158e4867c9b0444a95ff72a55b1d839a091d05a9399cfa97071e74b8baffc3d77e8baed2043b5252e1622848a23b83134f50ed3edeae15e4268ac04e37f22689ed5b96b64549da143351c53b7a9d8a192030e98fe6def6dd29524535302c27eacaf5fa9f68960ce206696198ad5bf024423b30a47c25f0770120bb466d3f848633b02678593352285f0bf5028b3655d1afa13af74ceec462d4a979e8016c6815fafe98ff048171671e3cdb5245b7f6de4a0da7eeca974a0d1e4b424a303d4a887783609b9d6c921dd165e8132b00d8e4b25c695017488ca51c06f86dbdb95e21d32b5aa4b477f155517635df278c7fecc27e0d4522673fab91a3eed5aa5e097ab8f43a4220ee649444f68aa9ae3bd1387acb52c3390a7a96ad5709f0d32054da2f7e1084ee979d325a10aa6b301b6b048c05cad1b3aa341c24ca9683724811c20965a3e6bf3cb9807b3eb4ab040fbe9db816008fdee0c11ae374077fd04e721e28670c2460b144708247632b648c6e8f3fdaaefa430ee308eb1b96342fff4f8ab036450126129744f986424ab81e50891c9c6c3ecda94f2252f80f4e38a0dec546501672327775ec5d90ff864e2ff60b20ba961aff21baa17238aaa577f50153624b7d443d2de543c3b658d363b8f310e3ed30d028be53ac194a5ed0f2436117066cefe84c07d0aab90a0c143727660c8af6eb35a5ee9efb61b8762b9cd413f3b4556e61ec0f6e0245e1814837180ac7cc4ecdf29e927f29de8446ee870874aad7595d5a147f05f14e101c62f3df90e2f2ceae8919d700e7155c14460f66991b458adebbd08d9dd051ada183094fd85a6135a4da2834d9057a4cb08e56b11bdfcd2e2760d2a795c33328aa8db8a878a2e25183820ec7248ba1d36fe53adb0784e749533be41e21ce7b8b773ab41aa14a347b7e3a29f9f43253dd385a4a44dae3006e70a02ae7404cb9598932cb8972dfc6b0f6ce966496cce6c154d66250e52133d50454276478329d22d7e6e700393591d6534eb60c31ce02ef107ecef508933b1888255a6ddb8b08e890ce10d998c6f24e1e729fd7024458198a5c7d8835da41c9aedca2c28c8d318c1f7d484ea94d7c73bc9aca6c20ac66951962525346a0e970b861cc4b9a5201c63aa3cdddcfb408f8f98c78cb36d8cbd070fc07d52214e0ace0aadc245297e3d95ad325cb01e24b78a37b76f6f6f7b5a51c767addce42d2d5a00765e0c87ca740f70d9ee7671eda5fe4d5d6ccacbee3974c7718cc52bb77b748d4f960d1c2ca82b313d9759892d9d3ff6e4690737bdf52165f8896d45ca50095ee69fbf3c33b85f0857edbe9220b6169822f84a6630544a741759fddd7cfb6df7ef24339836322bd292e1d6fd88d10b505a4bd6e15509aac04080e8d06facb80c12b684a5aa135f45e9a6b1996b4e04e66dc5b5ac01e107d41825512de812349aaa4f1995ad82754b82d6603d7422ca5fdbab8f5913e8d45eb88d08e154ac4938f2c8cc61670be96c52eb4ee441d82afc88ecadfc4c10f8cc88a42a8f69261c62160b297f2db3e97e0d9cce7b3828b7c4f798bd53a14464309aeafc5d4ee339ab5938315266e05e1cd3416421e949732ae1f6c39f5502dad519d5303037508d00d9aa129e4d93e9478b38d6613c42152332aa16e7ba38d157b13bad2b268b4a838a5d178f9ec07649bc2ee543b31f82f1b4ad5f0bf484567f0fac6bd71013a854be4df1b232922251988aa8cd32b7904fe1ff9e484e9de5498b948516542fb78b50711fca79c1c776999a9b7d79846bb19e792d8bcf2aae80341f2355d0d5164f7575c1ea9ab8c0ce5e5e33e27702550feae54353765010ec01a92145c1abccb2f03333f816c81af051e9ecf81fd55e761143934d28bbf8e821e3b5b2baabd9d5ffadf415ac784556ee85a8267d2a3a0f08557917d9c487baf97c4d805b82dd78469a1f6b13a165b8846e419f18b75dd61ab76d05a9158ba0e4086e138ac4e9f4cad6988c232376a66b1413293a00054ed8892fd1fbec2ea43ad76114ef8e852683dbae4a6519fd85eecf3d43a75d94e8aacab57890f81adf5e20ca8931a1ad04175dc5a551843aa9173de8cd6eeb0966821621481e3b78990f47d2dd585b800090d6b6b7eb3fad275ed063591f3e5f415380b43276ae154223ac413fd0f37c175a95c4a6ec5b2da4723ca48e8b60ceeab44eb1ede61484e08760fc1158f5fbf55fd4743124bf7d3fb72d7c81b7567327a8115115787cb3acbd085837e6d407901d7145dbd4a22ce5875c59454ff52fd65daada5f58415db301adc1b2d3c32a02060f6cac8c797ebad707e74a5a4e05de4eccff9b9f5727da2185d68407a27ca0fb92910723447bee551bf9409554c99231eee998e70c0e4ee17b9bcf6de8b62bf3db1c3b6e69198094e4a23a6a58488a3d685ca0ac85572eb28fce801b3a17fed4ec72a0f7adbed35a8c6b03e5028beb10db19df219191229b611e91e85c524f6b50fd0549058b9d5a4b5ec873c10a2f22408ba2e8c4bb090811238cab0c3c3f4cf06cf36a8fcadfbfcc591da142b98779d00eef621825737adfdee54e1c4492ef440c4194ef202d06d0a0c9ffbb164068f28c683194794b5d886d9cafb47f904630cfe7e45e5bb650f811e68c9fc83fcde58dd215839c2969ecff0f74e97d1f23e5ea25d5e35cabdb41c631cec6e2a7acd3bb0a0bb86f3c6ff7ef39b126ae2df318352eacb1815f356a6db8c4fe49a6c237aa8c8d1008b457b6445924c82866f469f227ca2cc0dea977b38a24d4ed7c49d2ad8e1d8e3066a7a4b15798341275bcb49c34df89c1ff139e29df53d3c8d73885cc946d664582e4e2429132312573258f8d444c8f62b498a1538ca6273369e813359691a2da63fc89f55698854584bc8ca582eb56275304ae5e32250b8b7a75419d9fdf9882e038a08f1865f764249d32d6614c7922dadaf13bfee054e8430ee0bea04764a0bec7861ebdc89cacdf50b80a681e52054df9d2a08e78dea828d172335cd46e3a2ac6a2482b5ed872cc614663fbc98733acd391c7e9eeaeca6f6d243722c1dda862c1464d1474f20b7e6dac634ebb6db495c7c28aa98e2bacd7f02a1b7d1d4eedca46c338055c34f930cf0d81c106ff5f825f653cfb7465eabedd152083b3d24f6837412bfcc190587e2be376f1196a37a1d46844c9d0badd12484461a71850de71d40db001437a4e95659346e65481eae788322b878325c0a91ef7e560af2077826c1a748abd707af7b2405c41263d4f73d003cbec58b14aff10ac5c4d602940fbd91892665ca44871833fad0d14b233450dd2c7d1149bb1bc75621e97d13f8f37568492839009e53578f2a0102bb464a8bb8823de1e2249aaa8d9231102af8b068f285b434831e110b0419cf11bfd9d24f132173b0b1ddecb6e1378a09702277c0e36109496026bc63fc70ef59d85bff2280f2b90f1e83519e56af7ed62e41d8a3d12a776c28e9dcc7ac5a9ae17c83c58113f6c4cd6d60b6c5bebd8e2065ba7800d7c4158d1e114ec4a1daff5b80410140d2e9413d0efa1e8ff94d944182f3dc8de5500ad16aa11a3015c41d7e39fa34b2e31656457bd39a5f41a1d2bc4432377e4d3f4122e6216b687b4d5b1ffe2fd42e3a00e1b62e0092a6330f081b0c147e5684826bbf2b21b6ac87fc83bb4850d4c4f854213b3bf141e69846bd90ba5894732222a216e6b93d3f8a45111b88595367d5a9aa434ec2264a29b3d1fd60af6e6596fd87af1c4789bd2a1837678cd6d74c4fd9078575c95a952e1e6f535eaf5a381c1dde63d6247913d3f47bbb86833c752cbfddea44320120b2c2076d28cb8cc6f02b45e3e7f3098b8425c779d9653a1e1515e507d93da7a79c4a072b0d29b9419f8753dd76b35a801062ac05cd2beb328a877add1de77ccdbc4712c48f559d5a4f41b20a148aa38628ce8c81d20127de9b6d9c3e988f6d71e8dda66861863614105046037350241247fb8074f178989584f4cae351bb1afc2883bafc4035488ffa224f6b48b0d26312b247721911093b398c4e4976772fc359ae718af11a74682983b486ef584993bc1f59c1a16abb19d88e38f1f9259c2e147f8247f75d830107c8156581177321ae3e21dc602e59b388cfd08dd999882d6bbe11977cac4064ecd1498d35f19875b06762f996f190ffb2c0ea51fcdc1b02bdbc02f1175b7cdc16649510e1fdf1191cfb95ef3b5cdfecc34a35cfef4841cda1a6004b0f71a524af64d1863f544c9c0d54070ae712defd70e53c6b41611832dc42d0b1e588a0b4fd17d97fb9442a59b3eb2458d08847cb28463b4f778ac50ba251f70a83b8ec2057b94e7ca65ef3d7e7728f82aac8f7bed9d489c2e3c1e65bd79f66d947ec8d3520d59643fd5ad39644b00df2a25c75b8783272cd8087fd14bef299206f2a9dd5cc6c18f6905280fa5f2595dbc1bc23ce3c528f34b9dea90d7e159971d7df42d113c36b8ec5e9873cc3d2996162fb8cad1a92071231a2ef84dc8cf771e7b30773984725cf329045c14118de898518fcfd1c12fb698a615171415042b503a8245b06a8655f44a51116fd16ebbe5c15c62c09272c18143a0e8c5989c341d36c16a8c033e987a0745849c24e9122247072a0b31d00407a2a50c978b98d286c3d64a582f2f4da817228252a7ba80c895386c34b3bcb50dc74ae9a2820df94601a3e23d7545e00c9cd3206668cc295f62145bffe5142f02c16a647e4c1b880628895fcda0f465fffece2c3fe924a5ba558616028e1e187e28c552f19585fd83dfb48ad725d8e7a08c231791a4ebb29f3fb616130450b8d869f143b286ca323b8c47df10a3e4d1917635ec7093c18f27b4ed24a29a347f4139448635d0c277aa36fbe7468bd78199eb750995f42dabbde64335bd2da40048d9fdc56366c95a2f60c81edf717d0dcc17aceb1e0808c2645494d3a205abadef51db26b2c978aa3ac6af2875161a901d116d7f26a4aa05517f521963ff98e810e61eeca594ed1dc2a5ead369eb7ba1445d4370820f930e353ea5e697dacae0c5fe4cbf9b306d290e2efb59cbc763ffa2693c68f743d7800c2110456eebd9676f8cdb360eb1bf436c47fed9bc52778e90e38e5a73d0f7aaba107be548b97f1262791eaaa25f823cb58104eb5fc482de85e1ce7eac8208533c7c7c758f11bbbfb57e1f1bc8b8c99578fdc7dfef086dc4e6db88d8dc429582d8bdb2e405e69a62343b9b28d39b1ae86210dd16d6bcc85c13cc46ba7c5b267fa3af66eeb0357d9d1ab52d48748d17b2366557bf2a365931d9766f73dd8c7efa05f830e843710e3ab5f50069d0eee269c2620506f2ae39ef1a89bbac321a9464b9c7562c2f114ef6d16da37a108ac04447e46a14795e3bf93017d73e824cf3f1c11222d36a36c18178e91eb3d704308ec9339577ffe10452bcb961a1fec7408d71f4d64fa0c7b09081f2b30bc6dea5d0730917c89167f4329b555f44153c8cf8466dfff921b6bbf25031c9488e6ad47a931f5394baadbde03db2a202c8fb6067bb2b5d16024d734502422918b2b770ecba373519a83112c0d0d46c555e56b021936b98c3d1650d68f6cf6c53d58c48b046718a0b4c88e98d98b5d298ab65e0d7c1c7b65aff786c6d6998f5c2bc81b9274cbd306f604e2fbe71120a02b7305fa42dd9ca2e8419d26201c1fb03a1bd249f7b46d0db4a4fcd96f076a6d835cf5736dd6066edeeb1f8dc1883d25621c23079206446f389c9387f0b6eda2061fe6dc34e94f78cc060c1914b0dc396e3ac5e20df16a9084242e653a3f6bab24e55f6022f6804879c21ba75ae3fb0fcf87058c9b5755bf2bdc459c2df7e57a0eddae07eb470642f4a9c04dc9a3fc99253db917ed4c500a827772ddbb1c5652ac3c3edaef5ae346f033adeba8f5b305816a503256dbd455620517d8a6c0d339d7f3136e24e998d9a25a015266e46d9342541be1ee4e6550deaf2227bfc2fdf0c9e006306607e3fc3c109d686098f940b9156817f3be4d2f4a9b7e9d16cdb84ecbdf7965b4a99924c016408d008450956e52994a768133abed2be371f5f91befb23505422065121bd0f89fbede3937ab8dfec4d94f8d1d6685ffa92bd89a0f61d759a311a7ce5607f0dfd82a7fa8b8674b0a0747868980182d2c182d2e1d1a1010b162c4251b86760ab27cb4de1720b88a3ab494aafaf8ff5cfcfe46b476ae46b727e366dfd6a2f5b239fda9b0c94b6a3a14d74211bd5e02bf9fe39f88a418f46fe4d04751cbcc101a545a20318695848861c90b9229e1202991342332d0d9ef2ef1c9067ba061a8feed1fd55be2ae2a97e063daf5e79e43c416c0181a55b40e4dcee56098a6e37cd693ee9bbf7dfe26bcf1da9d19ed3b62f6dded568df626f2c8ae69b28fd893ee9b9ef8f3cdb77df27d95fc45714eca7a16b34eda53d1225fef6d11ea1b68673812ff733dddd44de105ff9eba777fff6a93e209eeaa2073bb3a1d7ed5d38585325b4f9486ee67b33dd481ed4bab958e7c760b30d55574e2132fe732d658cb5b3c23ffc650a6aed3acffb47a1188678e5f6dcc7b03da73de963d09e847de963c0bef438a79afad7c750ff7a9cab7dd9635fcbd7cf0507d43e1c10fb70c0fae1802e2e5e958fb5d81bec6bd5b2af665fb3cede7cd7d4cfec4db5f5fab62f7dda93befadc87e180a50f07247d3820f7e180dbe6d1ebb3af89725db2f3540472afafa97fd99b783d666ffeb21caa6aaeaff6e6627fda44fbb831e6862619c2dce82f63d0d149af8a65dac6914a5da9eb27dda675abbebaa98f3dada98fe406b3d553f4d953b1e3d9aebf49c25d80b0ded47532ba8ce55e9f447601fa73f0d46555dfa9bbb3e5111a6b91bb7a1faf770967bb42a23d11f19f1f83ff54f589663ece8d81c1c9098932e01f21076e776514d662bb9c5fbcda56ab7019541bdc661dcc7cb73f350003444ef56335c7fbc0a9e87a5ae9a25f5374de17151549ac4a37b556b75a40a3e4739c9019a1aea8a8b4cdaf815caddbe617d1c801b516064f0cc61e4ff5dfbce0a9232ef0157209b9aee01f6d3d7ab96c42422fdbfce29bb6f975d3f6ba178afc637e37a72b6eff89fe293e83276ae31440208337a72a8040f6d4157b6e7ff469066b517f9e14bafab51b382a8e6d7e2650f372a8726cf38b3d3ab6a9639b1f7baa0afe11ade7b2c996d9e637410d669b9f83da8e6d7e0d6a26904a5cd7e2f262b261020e12d83772a0718ccfce5737dc77bc6d5cbdd1be7acaeb16d4c5ee94fc295dd03951238fe5a1d221e1e166c0eccdcdf6da67a7188510c820733106fca34a1874f58d3c4a71b721b76eff099c92ffa316e04a045cb9811ae201ba976f03b370d9884aae7c4ee3caefbec8026852b8817b7d5bf08fca60b50600e2e37688326934f2784ac618742d53ba927465cb7057be26b7da3273ab2da3ddda32596d19eccad7ea565ba6deda32d795af655b6d19bad596995b6d196eab2de357be46da6acbf4953fd9471e5f65364ee9947cb94989a24372a33df6d987f5462958b4d5d629e957c3b6abcd6dfb4e44b64fe2e0f63a189864fbcd46095de07b84c7f5c7615eb73fa5d73e2b712d9f713130e8f29ac6b9d89b28be6d919b617b177b4372d21781ae9aed491fa55eefaf659c10c7fcfaaecfdc6c542d5d6d6e4db7beb6ae5b635b675b6b5b6f5b735b93b62e6ddd6d5aa9bb9e742fabd12d7e35065d7deddae257ba5adde247ba1ab6c58fbb5ab6c56fbb9ab6c54fbbdab6c52fbbd8ad572b6df1bbaed66df1a3576bd9e237afe6b2c54f5eedc5e5a57ecdf62df686f4db47ae3ee98b3e1a1756e666d878aaa73cf65cb5f4d2ab36ec6a6743afb3e17b25d4935428160a2bcdf6554fd5d3656b1c9af205085a148add446894a1b47dbecbd2257177bbdadcfcd3ae4637ffb2ab5d9b7fd8d5eae65fbd1ab6f9775d2ddbfca357d3b46df34f5e8ddbfcf33b9f74a70d93f429da7ae50deb8d614c2924defe4a246ed332ac5e7496f835927cd295b62f8e8ced85b65d963cd37d573a83a80bb1afd8d7ed74d80ff9a1183743876158e5b2f7bf9ec8f5f39a16c9f54e64fef644b6af1b91f9d522a93f9fb9ece5b71191bfd91b4e86eda945c2ef2927e22f2d128bf254fc19d7309c9b91be10e7921efb429c8b655f7aed314e08e9232704237ddd97be130cd8939e646db2c7643adba4d7c2d263256b937d92db42929b85d806706ef63837b33f72da39392e0606378d13a269ac3dd5382159e9f90b49d97782217b7eb636a4cf2c9652567a2dec3eeb4a61a661a4efc73f932fe54bede9732fb3bf7e7b597fe280f4facddee080170e581fb344e64b8bc49f5b26c6ecb510fbf8daeb5001041dc637c3de76b6fad061cf3fd75f776f2ecaa74f84feb448a2c4a7f2a54684be7c22f2ab4512057b6991c8a744e8578b04d3be10c8c5be107b22fed4dee080feccc940ffb248ec675fa82242df2d127f7a861942b71f0665c6151f6ee74cf75bf6545b76664f457ff654c759f280bf6b2db4c73ea53b697ebbbb03f9eaaf72776f6f6f77778f3ade73fd9f71502dadbb471fbaf39dd7cfb2f3975feb7b9d2c1c903ed35cd1e3fccb2291f2416a3d9f96dd7677bffb0a347fcddd6dfa6bed6298cdb910d7b85a098723f1e8dee0b7dfd7b85a33ff682f348ed1a494ee47fb78e5b7cf8dcb98729541c6bdae32b26874eb8f3f1945beb43f244a3918e8bbfde17e4a89e3a5e965f79454a22f8fbd8da7372877a426fb6a6feae3b09ea7fc6fd82335d8dbb0371134d9ce1e89608bbdc9beb3255bc33dc9de68cfd98f85cac872e5c7b7392134f59d23f2eece96638c9e6a8ec3b9953d6569ea33b3f53c755d38b14e34343e82e5cea7445988e6d72c47b7ca4be9c53980be8dfceb65b4cf0da13f5f7243e4d3eb7f48c562d45e0b336a439c2f9c9fd96f94f4c1667e7d9bf9dca85987d4f781d921fdcd9c90cb529c193d08ada469cc390bf9198f61ff09067efad4daf4336a52692f9db65ae943e7cf977fd05dadfaeab4cd8ffdd9d7ebb1e78ed460cffd658fd464fdd9b73d52435fdb6c4dfd696f94f00091d467b0deae5c5b912763caff601ae595e4f10ffe1aba24dc2067adb552af3778d58cb60d4863ee6f804673a375a36e038ca86e77163688241202a4513166808b6e5b9b055c0e720466ae567c1875f1a787a8cb8d4385ad5c7f59842ebe1b612b574aa9b9956874f1675ccaaf56348ed92ea9d4c9640f8459b8645a9ebbbfa5e59b9be93ee297c3a2e55b401442ad8074e65b7dec939cf6dd7e77150dff884fbb389da872a69e611664e01ff151407cf40ae5302dc33dd7ec33bb842eec34abeab257695e3b268b06342ade1266b91e3addc65d7e915e8d0ee5a365b820330b20bad963efff42cb3cc986309ce6dc966557901b81ac80396d62c35e2bcdf7313f4479bd7ac153f3f9b75e01f1d4ece181eebac97ea67becd0f51041f7b1a765fabb9f04b5cca99f2f56ffc7df7e0dee731ad9f9f5d0e9e6bf2003b3a0fd7cb94657e4022db3c59c9689d9cfcfe1a6654223a8db0d6899ebe7766df606e942ff11e629fc637efcb22f8c3d3d74ba30f6c41eaf61edae54c29c5fc30d112834227be293e813a46562fdf93315b33ffeed36095b01a3c86bea1583159c3c7ddc1a85ae145c3fe9928edaf845e7175649296a8c3ae98531ffa0a1bcd1a97739dc2e4be9025f20fc839f05d329657951dad745af8b1ac1566e728c18afbf2ecb6de90df2c6efdfe20ee6cff08f20524e2927100ac418c148cc9d2bf868143f2a668cf0238c444294b25e55f86814056efc9b5bc30d30d7879198cb2b04f1a1da5e4623412eb3951ff8fbf3711bc8edf067ad3fb9e90a403c4aa7a95194526ab9654b197992ba1b488d330bbe26ffc56f734db653f23b9b72ba31baf833a78b1fc3b0d7d325dd7c6a43c31a4a1853a3e887932e99f2f9071721a38b73da66f9f3e9c7b7a133081cd354baddd9ddbdb9997d0561b44c60d432c11209c60ebec0300cc3baa0c10dba1734d14d74a8c28c200cb146097eac442ea434216b00a444adb50505274774393cb2280c7ab925c44e2b88a31078a80ba46524ca4790e84514bd3ebe6a85fa54cee71e3d60df12089dbcdc0a22cb0dbd1b51decd46b73b06c517e52bf93d8c0cc3876a052ec2fc603c0fe583722b88316e7c53cbd09924e2b8cf20e903f9031e5c7e3645d9832220542acfeb6ed781e4414c4cc6733bcb69542fb94117e792eba971639396919f452b75bc9e41b7d52cc7579327cbb9cd6383aee3a28b4537a43ef4c99d52e7f6d39e46f5f3643c5734f6553773ca3d4e39881393c4d6404c388b6ebf16dbe5a4578d3912cb8d39457c357b3cd5a12c924497e550d095cb154b377bfaa34ecb34c17ec657f24812498fa81b3af28010a95032e84af734504f4be9e9a01ea1234f1d35cf51f71cf910612132223a22ea1c214ff5175858f1a1e229d119f1c4c7539de3e45132681bb7913692ce75af9f41db0ccaec2c82cd2039a934aa7f06f1cce1ce3a7b66cfec393a3ac2888888aa0cf2d514ea64d00cea26d16d1974fb2f4e08cd0c9a4139f7fa293758c8ef9eeee99e297726c1621ef9caf38e8ea2932464486ec813111111656972fde3f551a885a4106781a384e95e1f7d28f5a13e210bcd5cfff73cfe3b67d1e51e54ba60a1714c589272bb56afeeee5fa56c72fb97344a1e4935aed79cf4788cd13fea947ea4efb2f4e4b6139d4675a9c9ed501a5dcd8846f1b44cfd9e9147876f7dcd88e9ca596bc9a77e87d3894fcbc4c77832352efd703ab99df5f0dcd67cbce8c212d0ed67fe917d09a8654a4ab44c88937d2ed032a4f8228ccb8ce21fb1663d373631dd5a925299a8d1a89c8fbabbd3a7d24a35ec5ce2596ed079ec2fbae8717ef5bcae198b8e7e37aaa974d248fb5c7ff949a346c5974737aaa0f8c7a07785852a7797aa0138e15f3182db2c6445191c9108de6080480c37b7bb5fb934e84a2cda50862b4373b8f2a59520c7b4a3a131dbb8d3c6d4dc33c62064630ac8320406e376c12c781c8a595c2672a37ac58b44178b3ed4475e77eda2db4b88abda4cfa872ec1194408e3f2ebc006973fca80572f78d15484ac5cb9fc28949429419127f6f8bce02b0ff2540f0d0d0df5f4f4f4d43eaab576770705b5517743ddd3d3d34747dd94077115c3082311e219718b4883cbcf315671f9e30be2aa8f3e8c4f44262e7f84c22b0f8a52300b2f1f417efef8843f1ad132f38b902c66a98d4e2ec79e06f29451ed723cc8c586b5b341b78d3c355489ba22232cde95a12120439ebabe3dd47b8fa73ae5e2f225ebf29c75f9685bb7f411061add282764fbdca7bff3b8a62fd23d0eeb62c3ef964c36acc0e55c5e7bf9e27db1cc3f4a9d4bb472fb2ed0b6080e2e50446d11a0ce023c061b811631eaaa91d110e584d014a1c153fd5c647b7a1828f4ae3432324a49a0e58bdc108cda9003941b52b91c28f13550164646460d859b89da4ff475db405b0c851e501740dee33d8ec9e945dcca235fb514cf02511674af7d7d6ab4d22c738a7a5eb5cc76dafe2a70fda3f4c84ea2d125cf4cd2f302c018439206ddd6a89e69cdc99d1f7d9c3ce1711287ae8c595c19c62977bec7e72f5ecc5ff8f7ba6c9cd2a8f9344a69549c229b14b6cf95b68db48d5ac8a1eba50d8db4cf15dd236fd085f5c6e0e0655b8aa7b4e8e2872de5ba94f6699f2b871a08a5d22a4917a59fbf7f7eecf7e72b5bf64cf6ca128b0eb3fe457ec6a92a42e3186ff992c31be67ddb7d4714e010305d69a5e735cae576e50afbceb3a23379359d0242ab75af5197a5a941b7354a72d14520924e191ab9d2b921a62bdfe44dcb45f30ac58caebfd67551c786b5934127ddbfb8f44393ce0d678ed62fbf3eba72aad15f88155d29432351a7513336b9d3e8ceb7b58f70372dd569d40e72ae1169746585a135208d2e66245b70a57dda67ce2de41569248db8f8283bc6eb6f4ef3199cf154ecab3529e30c294a05ffa0fd851e775dd7755d7f79e791d29fe9cb999840633747faf9a5ebab6c4cda93f6f2b7cb9efab1cfa63dd1bfbe3ec9d6cce7ec4d924602a824ae0146d18ed460d875d94602286d475387babb2ba852b151f52be44bf72ea56fe148cf916c4b4976efd2b5482925f792f4b224a594b27b52f7a4d2933e7ef7b2f4a4978f5f7ac9bd7491524aa96df26b909ef22ae463dd37034425a594526e529332c364bd249d60705fd2b4ed0ac70171700b5970cb092d9c60e266975b4efcdcb07b969703cf5311a9545a68a185fcae515eafebe53b8e0a461b4adbf10d6b8a7fc447b54cc6715b262b499332939b941c47b1ad925a10e58821a21633a0428a1863ec5e5c549e8a1b69db36fa1789dbb6c7b6af258e23711c37632eba6959e454c42a7533bc217460708a5b70d96971d0b1a7c40d8c78c8b1af8c7dc72bec3d5e6136fc978f3de5f2b57cdda74d0163ca10a698e105a7f8a25aa6ce3927e9c3bfa5a7406bcf2db112a52a8afdf53143318d72d5365429d09a0d998ccc86fc85b42867551fba169080537cef142570caa2ec37cae750c7f7b926f1d4608a163a584cb1a2072ca654d1c1c28ad3e5d6949f293d575c3167c056e49458c5b04a45572fb79a08924d48b9ae9946b598580113506ef82a1e6615ddcbe51613258801ea6398e0e162975b529670c357f50e3c2b9e37459523f8bac2ed5e95a7e8ae97570a164ff19d33fb62be511fb8ae005801020f471802054310015ed108f7baa464b917a594d22b005298524aa90a85ba649df6af25d7755dd77b46f7a2f6ab48299d12d1726fcd96eaba0a88c7abe8c548da3253a5142b65a5ad5492f44996826eb5acc36c905e31cc654eb1954989bca1ee0aa7f8de258438c5975a5b19061d5fe7e29c325fd0dded2edd1fc03762f1a0f0bc25a060f2c414264b28b10414254f2c71c492279650f28414ad254670afcbad259a04795ed05c811a97b5b8ed7f6a53c755fdf93e805498ae53fc61cc9d1faaee0c83dcda29e7fce3102e4b5fe53095b21dde0be9f967e4f3d3f82ae6f965f095cbf317a1c1573c9ebf861c7c75e3d93e6fcfcfffdce3b97bfe9e3f06f90ae6f9a390afe2ebb038be181b801fc00be06d7c3d2c0b85131ef52d9fb52c1fa957e1b5efb32c540a1ff3f5e361592a1b2f80bfbe9365a90080fff1f483b1ac14621e859fdf0ecbdaf17d8fefef2d0b003fdec79becfff7f8d2c7b23b3eb301b2aee7617748a009ffbdf7b1b21dfffff2b176fc9f9ef4b1deee38c8c2f17f7a98c7603efb93ddf901b25afef4f263c1d81d04802ced6132bb0303b2b2e7f13bec8e0964c9dff12e1f2b000378d5731f6b00762707c8aacf4365772ac8eadff136de3f960dbbe302b26cfc0bc0ee449065fad307c0ee5090457a98bff1b17ed89d13c89abfc387dd890159ffdea77e53c1ee9440d6f6300f00bb030464d1e7f129bb93812c973f7df7b14e78252c1c106577520059fe3b3e05bb93025937fe3fa260771200b24a0ff327d89d15c8c29e477c1e1f63771a64757ffa1c1f4b090b07ec61777c80ac973f5956e959a46771cfd27efbd35bbba302c8e21ec6b2762208f33c9ef559d65b56b4acf92cf92c7f56fcfe9d08f2b02cd3b35e9ee5f2acee5b3ec7b7a2005d1d6fc2c78abfc3b2602c8b559f45fffa9d089e2c2bc7b3bc67e178968dbff133aee34b2274737cde87f2143f8e8fc653fc37be1c3cc56fe38b3e9ee2377dd553fc2f9fca53fc2e9f0c9ee26ff9ba2f02798af9491f90af88a7f8b72fea788a5ffba2940ffb663cc55f3f1a3cc57f7d91c753fcf48b41df7b8a5f7e2f788adfbf1a3cc5df5fecf194100e9c982487d7144ca024b448c2069dc4501256380105091390814413484471755e67eaba6d04621881849f1d74bc30da018809018911208102216e5c6e2531458bab5e5755c10f9d77dd56124134f9e948975b4934b950b6cbad2472eebcdc42220d29b4da321d9fa3c76805a661544a2cd6a0811222d8c18a247401ca20dca03491c0c890524aa9156118f5009019570209e14aac56e9038d88c417b7bbdc42220b2bb4f047da9c2451f8a3d81831c2df5603377e92c689dd826a0895ea04b404f389124a516821c1338530428b8c0246c40e41a08104195cd1e20931c22802e60511190e7e7470c357a551afc0b02ab556ee071044a184073a10411264108230a0fc4099220409ca08a010210414d4c75801f4f3644269010db57ec09848986e250106d2303ac3490d7c6af004ac60dcfa5d1a2da0254c212694d68f0b7e9200d238266c9f2e0ca248a83d11712494a361d0f3d58988d377ab02c38f40046fa210894468811539e07cf93749e8fb4f6993d048e5c64792c46d8e7721042739207d1a547de5a70844f044644af6545ba3cb3d3c095a0cba717e3f114732bf65ff75d918186c3bff442324a7ed3cc5467cc458fc6d384244fe7c9af9cc113911997fcdc701193cd180cc1da1f9f8271af6d40d0e183f09c85ccd895a1a4e861b69db56e99247e3f6bc2062626610f20826768e4082071e975b47f470b5cbad23729ab48c30324289db3d77baf0afc7eaf5dd9549973d5ffed8d965436da4902ab18869d186d7f591931bf6c55b2f5b3747c35be279aac952a952d0834e0a7858d2e372ab882f72f0dc130a115c9dd799ba4ebaa074b955c4951b704f20ea9228416cf1a409295e5084f8c513249e34816118864d1f98f0410b0a2c3eb043501122109ef43c19823279d2e48908b6cbad22a87880053b4500f55044114cb8cbad224870c60e2d228e94cc1d2610372eb78858e3cacb2d22d2681141d42202cb2582c6ed6b44014402d44063187c927f7c1de8b8f5e48a7cc1f5a270adc4abc8dc6ec398c3c150c2415e69d9f99baf7fcd039841e4308895cb2bf4aa822d21d468090182598249e77ccac39cb3e8ceef5a4f6070a70de554d2f27972ebe5960f14d932d0f839e6b51653a34ed7732bca943bff74d9165a2b30e2d2787d9071fb65b840af5ca87f8596e1160abeb8ad92392850e3723e3939393960146e9de08b1b7217b79f0165e47c0c30d2f91860d4a451f75b26ac3db8fd0c2863097f7c3f3635aa3b9e2d0c30caa2515f371d4d525b69a595d65bfd56fa61df1abd05fa2eb5da32b15afa85f5ba289d3394977ad8a1ffac4f7fc6ebd75f3f7336edbf012bbdd0b8552acf93d30391d9f9faa764fbebbb3aae874e973df65b355dafc170bf7d3f6743ef461b6e57eb8e42a351c5cf88eac60ca85efbc298ab85a6abc15cedbd9671794d23bd165da48d2ffc6bc3c5f4128ff87d79e684bcd8208dea153efed932aeebb22eda10f585aacbf6fa19d7b0cc651a5a3f6b17b56154e1878ead5c99a5ab1f7211fd486b6ce1b2a61f59bbce0806e5bfaeebbaaeebbaf862a2cbd6e6aa4c14e4d6da759ef78f926674d96771b17f217636c86bb7e82399c4d8ed2ee5fcbe8b13e211a1631b9a6e1c42c796ca333afe49e27a734d66130bfdab4f7f7f9b69d963acb7facb8b14e6703f94972fbf6766a85017bda1942ea5c3dc1cfc63ca1b97720c2923a5bbcfad2f0ac408c148cc954fa35603f4c31e1f768f8d0b7c3b08c86be335e640f73857f38d7d75a3247acabe6d792d26b9f54d51dada507353835d3f6fa6bd998f4d9b230a58638d25e078141ec7f3d5e29178a33d0dc1f1273c8e3fe104038e8ff998c7f17c64de6851b6e5e317763610e11efb9a979fd3de44b181c8fcec6bb0bffec5f49cedee86e4b2374a2218adc98655f26df98e24b921ce3d0d41e15d1e851650df9178439c5bed6988cb9ff02e7fc2c7162291f9984572a5f029d8b0070aff277cdff3f80983cbc77c8cc5c1af4d0f8bba2e2f39212614191531c25203f61e736ce4f194bf8e0fb9e8f4211bc17c1873c01dfff3c33e7e33ccc7ec4d8ec89d2280fdfc1930fb33449fcb7b06e9cf3892284585100845a12825c7cfc7ac100cf2461b268141deb6a136438eb736e2801ce2f8ce461bff7d7cffe36171f01ba2aecd0d3e845e1bbfe38b439e22f25491a7b078ca3fc797c30ded0d7eb59736fc5dbeb0aff6ddd3d3c3e4463ca2efdf3abecadeb98ff7267b26379ae8c61bfa4c6efccd7c26371ebbf1cd4f67fecbd34f47673e7d1b9f8df6fd1af7e9cc674fbd609fc9864d34bf28d2da949e856e13f9ea7aff2eaa4d543b4d890240ecb3afb6e5e973df611609e9199cfff22ef235250a00498f99be65b85505d1f5ef2ebab13419de154a5cc173b5b9bdaf905ccfd9e49e815c7eecaf0f3b95cf78ca3f7b6c5a1a4ff9abd0a463903e9224f4399b437ffefccc769eba683817e435d9d08f28e09698903e7b97166b43133121fdfcce32213dfd6a2d0ef496ec0fc9eac07dd844be62b0764d747dd32c0ef4c6215f513b6bbd5a2fadcdcf65f343bf7ea54d31cc7a5fe75c4d7e2c74af4f07f654d481be16391a7aa9eda2d0fda6f5625c4b42716292d8cde93081d6a2c2c785bfd172f2a364c9cd84ef8b4b4b5722719b9661f5a2537a332a0664dcfe7f7263ae8c4ab85e6c5d71e203f3b1f4028d266145092a786ec85358b9fd0ba0c1e2364d41177251119fbf6a2944479f2f2f80882efc776f7f6f4a44d7dfdd120a6f08cf533d51a95a5340e1c104402e975b5300519b60180c68001961041a44c812041053a30a13559ec0b22a3f58951374557e2055c9d95a595e2eb7a6588291418160a0060c78e88fd70586611876eaa1e582960d6ccb498c110e1dd8b0526facc0e50987821008849ad020ae2a59dc1c975b558470c357715a4cceb22ccbb22cc3b02ccbb09afd06706ee53679cf7ee9debf019cfb5ac53e3e6759966559967dd8f3af2cfb2ae53387c9eb0be76f00e7ca672c5e41a86ecb8472012d13c6a8825c9450cc9598cdc42b9e224b131d9c2184a11c1801ec87e1d517f5f043132c7cf8400bc02da21637ef0f02ee69fed9c84efee4fcfb3b0d991fad4dffb427b7431ee7e2dce87e1ad27ffd8340dbf8dbc87729b936c9d84b60285df8d7e35d2126bec70fa56c99aed6fea127a83254050b0a14802a5754a1829a20003408cf53a97a64cfecc8c45b21f471c3986cd20fbb95fc48817b3da3b0ff91918381c7ad369417abd794a97efa81aea913cfa152041ea81001c1438b8a500fe5412e516bbd94d45ad3e82841d01f5a527cd1a27206f58187980429b25026f407132eb7a880800a0f312b34ca39720f1dfbd86a9555d6184bd07164f7743c4f457754aabf2a25c117635f32082a554fcaa24a6619ad28b0b00c7fe83ffba77519c9ec7d8066f676666f19bd888846144533099d5f6e45e1451a2e975b515071e9e55614393082d6dbcf20749d7f58a390d8ed2ea5112ee59c945e55d6ea1d6bc526a5d7552b46af5a312ccb342b9bdc36efb86d58c5b24cd3b68d234912c93b924858b669dbc671245269e348a452a9eb5a5ca48b8b777471c1d43822ba6205cb1757ac508cb4953aad6b69b972fb5dacb838d0ed7f71234cd264f28e26f7b9fdb1db5dcad96d2d2e2e2f2f2693cbf66232d9b071e3060e4f7a9e77f46cdcb881038797e3c686c3f372e4d0a1e304236160bc238cb7e5d0a1e3748281d9618234c104ef68828eed04e3303b766cfd26343161f38f07191d1fcbedbf429445504f6929cda3463fe91c358e88ae58c1f2c5152b422e95883cb149d4712c35473730510df30fb7b1db5dca4925a5de91d65a6bfdcfda1e3d62624e4041a280827744a1b6b8bcbc984c366cdcc02171e0f08e386a8f4af28fed2ee59cf492d7e51daf4b4e4aafab562c9359e61db3ecaa1896659ab67192e3bc23c765dab6711c8954ea64d779c7aee348a552d7b5b4b8bcc89717eff8f2d2b5b8b8bcbc984c366ec81b37bce38d1b366ee0c0e1793972e838c9d3c93b9e4efe693636ff6e702ec4abddc08163f3cf0be26dfee5e05c88174687d4a1c33bead081913cfed1ef55d23ceab8511e3ba2db5f3401a033cca8524a29a594d3a9949308b34a8ed2a5f4696ae94c2f3e8489842efe94524aefb1dac2cc297e694329e58c31524a29314c0c2160f1c10027c0820c22284a646183781445d018935e15ab210b1d452958da87c8797ad2ab5ef5a2b3897ad28bb2d0519482a57de8a45fc84247510a969e92858ea21467a1a3f6d254a38bcf25593152bf947e857ff0e3d48891f1cc2c38b364669e73ce39e77466669743c8e83dc988d29ddd59ba7442a371b67476e74986bbbbe4d0dd6711e49c4e437776e7f9030464432b8a9e3b675869d0b8572b664a299d351d28299df647ca8fbb79c0bc5ad1a7efaf69a7fabc44a782f3b197fc85496a3a079c2f7190f7fad390e8732f7baab603e787f54f43b25bed91528873f9673c27e6dcf9214949275a50608141f928a3e356143a37f48e6e583d18948f138d7cbe359d036a59ad3a15949f7d4b980001e5eb5450bb30cd66339ed550af0bab0410e3b2fd39d1bf61215007f93a4c2923bdedc536c4fbf429b534f3a95525699c96b30c8d639e387aa2c9ccd2710b0aa216143a500c3de1e486def76b74087d0731ffc1acfc19cfe1d2eb43e6c93ce30d7da9c5c12fffcb650e86142edb1f1da48cf4f635d6e803501be2e535d600254f4a6fe84b4401a0db96730462789e1862b414c3f3d4b3f04296202a57ca20be01fde007f38ba02076004250087680e08396134870a20854529e1d4a4ec8d52dc3d776599bf9dd9c0a3cddb46d6b0a6074f1ca15fdce51e187ce19d4a1c20ff1ce2f7ebb27c1c50e321470152b8440c4078cc8c14f51192e5882133a5cb49cd8c209316ed83d14176069811254cf958b2eec3a9307b303296565128f7065cb0547730b2e4c1e8c74229f80a8c42c3785410c95423302000000006315000028140e09c442b1601866b2ee0714000c8394427456974943610e832888628c31c41063002000004388510a195507627a6913de2f971f50552b308a26e0eaaa4a9cec5c6c9ceed5206be8d2ffc706f01eb5fc949969a06702a90ef50af2e400032cbf0e4543270793bd1a103c62698eeba208456794a0f695cdfd20887db16657f9eb673ea50b30d7c25f341b37d8e1b98177eccc596067eee228b667100bd0f8ba649e48ff5706dd500bcf2148f53d3607879a0e7140a5dea6e7b1c9fcf3fdeb6e65a0402afedca66b4d050056ce037cbe97988918957cb1980a9cd75f77b9a1e94272b88e0c294796c8a437eb362f61cf9f01368c150f34fa8f17c085ca24aec750c2e6d0435ab3dba79518aa656becfe142d1b27cdbe017e67abaf91a0450942223b303ebef46e7c446703367492ee9212245e8251edbb927e86c33455c89d73dfc5ca2ed3df3f00b0ba97d19d041dedb38a0f97eb667f02548d34b02f3bd82d4194a4057aaa13849abcf4e4ab2be58431146cb16170ae743a0173669e62c0f7fd21d1a1bf41ac2f3a61bebacb484511154c1f39d1dbb7cb772ed1b048a9848c4e4a2198e595ecdfb09da5786a11727c89a5becb77e9c14bc07aafad5f3116b04325620e5b054fc673ccf2652dd84df6df4b6f4662699bd07a621011dcb20942af8cdf37f63688442606a7fa654ca92c6d4fcc296f3d9fb4fd397abf8ca0a423f274ac2c1fa49dcbd881908073a504c3a9359e4d43fee081465bb1a79b6b8f94e60f80b265dd9892f29775dcdc6f1c04d1075380f32d5dfc25ed42e99dde245bff02c802d104bf6f69a041dc37e56207f1f86e68ab0a9ee33d5f0b8f4394af7c85349b4f0654400949d43dff4fce7b24d621e31384e889d7eef7d84cc489846de42e1d7b67fe90ae0bee9baf120d6a343eda7586f31ab258bac1690cb8eb9dc082247297723a09e4b38f6b007a2abc442003a93b386b62ab6fd99497ead57dff5241a070df7f86ab62ab272d7fb556fbefacbf4b2dd2ad77d64c85da8a8d91ece5f2573909c76decdb6dc14ecb1a177fa05373accb5032740d54264f8637eb6384711a91d341b14c5296c8b9ad913e1c65b6a455d76c498938e753862c4fa6bd0793ddf43ad1b9a44819c6530c2f7c7099cf03e27057777df1b206abab76799b4ab57db6ac0d1ceab596a72c32c633d4dad4c53da2bb72d6fb84c5b48144236aa9277639cb0bc6c001e01c468150bccd40ea4a07791ce2522ca2d2e795d2b432a53e1c1178e50129473af783c5f04ceaa775c58862e12913fe8c732399a24f843bca8c7d226e6826f423e2c233c19f08779419fd849e5bdf14ef468ecdf1e825e9587b488a6ccf3b6b6239286ca976b30903816de332f7ac2a9b13a8f9323b3a15cc2e5c16afad7f7fd3386d3906bff385929dfae8eed8cba7e265e530034ab61865b0de325bf6bb87c283cc370f8004708c1dc40001b39330070b9a031a83c33742cfb66f2eec958c40fd7e85f7b56d9da2b7695eec19bf5c478c977d82d02454e995366ad0b3af26c0d9601e773e4780b92f9b37669c5ca673f49fce555664a65ae2b840ebe13eeaca40363dcf494e5024257a2178d93cdda614c89a788c80bbdd3457349993e4b8a2c36099a41bd5ad5f4f899fbcfe63b0e68394702022ecf0aa839a1358a5d4eda7a38857973e76818434f617629c08b8747419a62dc4781a71f52817d7698a4f85213a80f36a170038500ab4d178bf73805fe452c693c90f127f605852a155a916f40b826704f6ffa2a499f7ff7b3fc31f57819ec3f57cfe7c45a5bb3a7e9037abed399ba303538d6fb2c2cca6850a49f2f502dc548b9076d4286002d10f3b50ba5bf772854035fac887c994e18f4a4c0bfce1a19d7f42e1656c10a8c08ae4bf4011905bc2bd5d9137a057a0fb3df355582bbd263d472e29689b76d8b47b92712877ad05bb572d6208a17913e14b8820ac1217b5808845456eed5490b2d139926bd1e780e7fc8c23550053e04b48f646599e6052f2c9c41e869d2ae7dcf796c3201ef76e3fc526a9f5e5fb0db42d7d13b8637ed794aaff54272f2c1fc52092a983ef064e832175f253e8e3b86d6c76d6b6aacb52112d25daa083c320605a27c0d462086128ce4cedd90b47a316e3b71044c56cc0480e2e44f5f75b0c81d8e40202e620d3761c9367c248436b6474f8bff0959f3ffc88e5e0e8e6a0d07a2b5e1ad6d2f477475dd18f4f035b35f8ea8aa2ca8866a2da78dac68b1d10fac1bbae48c79643a452a4adb7881f5dce73891f5dbb435676f443a538a8f34f5dd761fc601d2f99b6c909ee12223816f567e4c714b9a9bd31ec1fe1513982b24e50cbeccdddeb5bb4e43d3276a234c79f3d44ab5fc77a4f700640ba3f4480b586647952d2bb266efe12f40ce20fef5159b8ac7bc488f559edc748380f06bc6c26b47a00b622f5942e34e416e0710fb139e34e34c1d6d49ce02c266333cd35c14df86037a8b590ad5c8ad4d71bffd36190d3d15e6cdc9041a9848522ef08c165483d1098077049d8c14dd4a83373ec3bc3f113d4f7417b26d00ff76cc8c38f8d528e4bbe91c4c370c4ac77e550c3b7ab701f29e16314634bf4ddbb1ec0e4bc7561de66e262b84d118d975fe0126f0504f4210ffa7bf88b28695ab3d9baba22ea30c14dab294065f263b54b59a9fd05347d032722fef7021a447f0b3e51d66803e3bad1eb59c27f7b95b5c1369850719546177e720dabb12517e097969936d5a4f2bd3a9104e72d20dd84ae7fb2179f556237e925f8c94a03fbc384bdaadb3819e736205a2441ab30e840f98d309438c5b18789f3818622885647e2311664ed66e85a48658ff8d6de11dbf038c13b57e0a3fb25b27711d9a38d21225176706da2532b498205fa74090a6886aceec51f8be8270455583e6982e46b67fde9d70420e548aa572c3f457fcebfb23ef0196a5b91c59eb9ad76d08d0ff48142ad6bd7d7f0411cfdcacf59443ee7e195cd9d7c4e8341e38519bff0e35778c503749f8b14916d839ef508249c4e5c2787b012e8c9d92d0f486605a0c998e842961ece3256fd705f708c2115cb0d985010166848bba0a6404ca9288c11892925ace9c9934b13298b69678a18498d67b58c440e0cdb8cf0a5c071c57aae551628c17588ae2f28e1aa3f2908a0a729234ad0abd0a0250ff4fb6969a6eb443dd9221b327c27be12668b4707c8932c3af227782948aece5598a43c5b39077d68db51aa17b13f4d5c49940ca72dc50b7bd84f0e02b56275a917c3f274f100541c9b2e3c0ad2a8da71bc8b43d50173b8b0e7c4cc64d496aef729a740bdf4f2f8ce7cfef45a715a2d97a1daefb8a688316d8d2479183121ca2e171a65960cab406ce26247268608ddeff0a4a0044edc9d5ecf1a47b95ff930a090e2c7c6c7df4be3f6dae92e39a594a53ab1abb8254d59b5201e7f3cdae0d677a862a05f18a996b4fc81240fbf0879961be3c71014d8d4bf83f804f667af8cf920f64b5822552e6f010517290c9406e71a40d8044f2f950086a119c3e5c71b49204e50184b35ef0859f4845fbc519dbc814ded538fd8bec6ba39d960a0812d36ea99e4e219657dbcc11b4d9cb2a85237a82613ee58e28161c721cd9d4bae1dc8f76f2900575b1d0186c4c44cfe345c5a92b3f31e1aba4f74433eb9848730e78567deea226355446e9a6c099d53465ed6516868ff4ea8d6dc89d0687a8c145a9ad9b9cb58a4b253278ce31642d4e2da9d4cb491eb513948889e066336fedda18b221bb5c69444f5fa8536ff9e11d64ac889dbdca5d578b92a9f39d658ff58979e1b4f52475061876274b2b0d59c57c150abd1161be76f0f3b741a01ef49aa4686514158ebe7da490d21040c6df56c27e986fd4e7968c3a0a7d1916908a79040dff4c4aa8e818d6cc598dbdc7d17aa68c005cc408f7a47c79d26d785fa4e72f086333ca323189da1cbba1838a32873724bc7a82908a8b2dfb45d219a3163471fa791199f9391fa65a3aff9680d8e89f893fb613459bda0941114b1c8a8047f28cd65eec19970544a42bc37e5f1995252592644f2a5413f411d9c194fd156a606cf63c7b1be6360702d8444980a0116a4583829d1a73daddfd4d4affb015b08914381bc5b1e5b8861ad50023c2a855fe5f7293a1f4d666819c3b3a438efaacdb19775b5b31840898e5e2fb360b1adae294ee3169c3dca537f5cc916060ea587836ba3cff1f9391495c9810d2ced17a3e4479102ea99670c69d742601a590168ce7b403de2d2bcc401d151ad3e81c8065ed50d34a2a1b5becf429cba4c6d89b1f77320e878c7636aead6be51da0e5b2a62535c0ad5f55f5514b4a76c79872ab5c1d2e1d940db79d08f441db35c0121b29703f61a639da17ea01e082bb0d82d1e71077e222ea56b62b45a158bd8bab88855c688cd315209456557ee96c22b01d4172808a563534812819e044d603efde12cf9148168304b2c924f356d4647efdfa24bce2ca30eec72e7c7fea46da46d099256b3176eb89221dab686b3ff63d0a5672e714746a9fbcb7ef236139644a9a6dd0f341c957ddfec1fbb97c9ea6d8f112c46754fc4bb0f946dcc942433c30928159f1213d7fa117d91eae5d2d1c0c4ccee1a31f5c35abaaf8e7e089b100290e7108310bfefa3aa6131bcf6902b1114c35a0281cc7850ebc00419729602537ed32ba0174f6cb30f9d4704f7d474f48ca0d5b334c6e90bac47d4a1c3201f652da032ee796305dbad8aa0fe54338384a904e5be0f2bc8db4eb65df4d3f2377b6260a45656a139a0d6edadea06b561ee3476523d9c48f768e858ae5733dae0ffa4c3d01d0fa8ee0d9d66b1d07fa96587dbe6d9c2be207e51cb439bbee84a96ed7f87fecd9bf9772469676ee794a8898050a27ff60d0e445c71010baf398029ea4c51911f8e575b8f188128cc18630ffacac191a0719110a8747d0492eedadc7fa38d5b26f5d3d22790d63c4400f0d005e3dc80c6c893fc1deba142b16786d60f3106df8b4344404486cc4eaa3c8aa3f0b3d1441f1dd749249904e5a642f84c8bf7f5436ec8ca350aac7f9c2014f3668835f3ba90e06c2e920e6696db9a1de57c4888c0486f9e77d058eb1126492838f42fb643bb282ccec5d7867836eaf799fe2cc918c19cce4e66b2134c9477b08cceaab1d482903001a2415e340d4c81e1502a1f3b6eb1da4770280f8096efc33eb7bb1f07e063312854a743c96e39dbf4129b163957918959ece8865c49a80213adb879ec49185acaa1c418b7d127aeaa44b0e234b4634ac14f0ecd0d51bce582898f5e8073fd37f55152e724f4d2dfc7ded8704ec96da08f3a02b8031eef12ecc256e621a2b1fe0010f7c5816e58a99674162499e46a3c7c5a2e8e284881ae8c7f03d895fda3131ec19b0ed645f28b3b5c1a9d2d9117dd3b4e3ab29284c8f0545cd6ff4045d82f5ea622b98e465b0b6345bb01f376d31bd77f5a9248b65119f6789510565de26e5a1afd2e1d5db1013411d75dc2bdd3642c059e1dd36b709743ed81a3522f9d88339775632d078feb83e53ac26bd32d4178d7942be9bc0cb24f25bf1d1fb6bc9cf3654c31f3608470353557c976b5997af2412b5f9d89bd79639eede078a4887ae1f74b90aeb50e753d4bbc6afb8726668106ddce408e546c0e98d70437559c11dcd78cc3fded7b1ff27b5d05b6469558201c3d28eb81a880051964ea314ae41ca5a7d62276c3d0fadf7331a0468ea5709ae5bcbb80e494517ad301534a76b26ded7252cad433d7be6868e5e55c6580ae4d3c169369cb7974222a9ad56d1e21a3b210a41323feda608d2e37745355830519cb71399447c88323b82989a8187d970075d0de3531f494b4e0acbe9f3b5b4a161c55fa2bbb4f41bcc87bd0b8688dc15303921e159e64664b9ec51984d4b88273cc21cf09d816da8dd5f18fb7d0675a410cde5aed2c7caa3d48f21cd45ba4be4d7d0fc08731ba04e640d7a442f86b6c3eb56de3b380b66b9e80b748317db7ff98b408739c6e33bfb7347720f20d705998175e7de5aa37b4ff71d983d61d5ec11fcaa88e9985488d705b98651f5e2856000dc20764ad7c2b0b5bfc4f456cc48659612a8693405044cc5c413f8f8c803914a3fc1f1e7646af92c8e73379e25a523994c9cc251292d2483273e55a1e48ccb4ec03deff6b16f2c74fe69d5e1fced5bfaedf16cc2bbb251d2e849ea617b6b74c569e0288ae484b4c319e2ec70c60b496cacac44fcff5b8ca83b2efd0050e36ba633879175f92c9cf65498841f2c92e34e5015aa865990ead647c92ade586b2894ba84eebad39cc7b8b552d5b65c1f26cacb7a2c3914b15ac42dec452c4a50046c8267aa3694f5d0f70417a19779fd5801e19078f50a076b2a22bb30bf5cb6ba0e8d4e766c1acc2412b6a39c08121fe96b0fa160621afc820fc6e0684b8da6469798f7a04117ec58c2b4f346f1b0deac9d7a78fa6eb95f7a7f6f76303c50adb3a837d5d9f010bbed127af19ca014549e9984f9aa952b7d62138e6da1867eb151d810c0abd03f8ae2fe8491d8acba31d3439081146743e3912055c2a770e78bfe0615f3e74fb20813b570946d3508dcd0532717a7471d551fbde4ee98df3e48de445eeef35aeab3196228c903c8077341870eeecb6eb5a676660868e15d038ba2e91ff88510574830a94f136192c5614ffab81984a287ca4ef0a2bd7a16073bea72210dbaf250f161d4c1360aad578af4340cd7f14ec3993ffb6da82599a84ca7ef9a096403d7beb2d136cd63d4b8f0822cdfa89f43bb4956491f2b461f00d998c1e277f25cc30972f8536cc43de60a37ef9f8cd7c44e700f5b7beb7b9cd277be486bf4eb6983a1a9eec81ee1d7c297bf76791e8766deb71ddb0d074dcfa17b19e48dc244a86d32cc53819705334e940d2466e47adb4f270af9518e922b18e0a9f52aea0567d27bdf0656bf2b15c212b2755af0a79cdf3becaf8006fa78402433a048639d8e83b8c39c0f0b24a772c177160317e0651f171563075e321e32cde13ef5d3851ec6480eac1e11d484d5507f6635dfc380bab95ae15225495752a289a9fc9bcc8ee90845e8ab6051981403f6404b671c4dbc90b66f6146db29239ab37b0d0281a3b48fb0e4f1f85fd5ca7335042f07da1e3c1d6101e62e1a63194349d2eb124f0a887fe568e80b76557902b672d5635f9c8fa387dfa271957fd7a0951c343ada0559a27dc6e07f2ab341d1ed1fb14b37292d2f1b0ae058069dad802f8146346d87e6c6c643d83a51220e707d0cb9af07041d07e3c4a15480cb151a15b41b89ccd67a6dc68a003f2cb31607cb1c0daee140b840c711a4a9ae4b9c14eeb0af284a3c9f6caa2f06a93380c3308ce6d2be9640e827b08bbcb2ca57d5c55c91c35aad6a6ea38aadad6440c2380d1d8288827c0e6ebfbf56cb3909dd19ad419fbb5a76c9efc4069e768a86580c941d7788b306933b5fffc6b60035ca68f039ef9b45e4876bacc8948ba95eae851d4c607ab9f623199eec8556b22f06ed32558442219a4ad4c6ad8d4a88cccf68f7255472d97572e83eee48e11fa815ef51f506bdfe6b49e1dee1647c8b475ed5b8084e620bbaa87d0c9a1b0b0e118e688cbffc302305ca44d0052178c9f80dd480b948f2a84381aa3361e46474b64bb773f685de79e3151558671ab53f10473b4a540798e67043cc95de49c4a63cb5749ab68630f40a59c8d53d661912b23f71941a2e8ce534ccf5c3dc1df09b6b59258e90220bde94450cbf40db18443c33ecd4f3d48f3097f42e8317d7da827cb4a6187eeb51bcd35995ea075ac028dceeda4a0c16b9b847c36bd8b29dd2668cfcefd0adce25c2e0505695f097d20dc07e2f32db533d108c14edfb9f756a1ebc969dbb4e03b59a1122f312f93c8927b049f933728154732a072b16b1bff699e524199216a5f66ae86b4391bb1a506b3911ddc2ae3d38c8690d1a4650de25a3edea26e3792c285db7db8c0126b314e026e14656a2a1d82e9535e4063037d5037495e22a5b1b591d98f987465a3e152ea2b4f299e511eddd43df0a8fa3de5354a04a00d874784597e9da77d48d20000a30492633ee91d2acad81e70f863e4b32ed16defac34dc80498f87b0939538b5c770ddb04c528b511a837dcfcc3a7272056657797165bd9d27a7ae45f003cbbf64fe6aef1243951e102a32c88dba621e76ad9e880d8b42c29fa733876f888af1c3f44954ab145832ef482c0824d3830698fd05df6ea3f31e42322558c0dc77ae453db7450579c530f84b073cd70f05c600c4ab3beb869d6ee5660241557ae462d199c48a9a1fd674e878a8f24362950932662daabd2d5385d511ddca3c585b1bba25b7e6fef56a5db6bab5f34652abbc99d5392ec7b07280cad158008ad60449ddb988a82264cfedc3bdf58ef8647728b58f1b7b8cb8058e7934b1de1df86a397f900bf19f77958561414a49ff028da531a6d6df552bf024e7ea6f0a32eccb4b3befc719b1741a583691e2dafa8ce30efb133f0d7af1c3260771865fffcd1d7f4bb0c8c10d21a3ffd06ad0384c640593b5027c38944ed72bd927a7067f52f7ed72172eb3f9284a67ce980ba068ab1a7956554730a9588036a2f26da7500d889fc8d41a906f880874fa8d390410bd7b9730b34c91d92c02a40712d9f95f85498225444b180e4c01ff398ea5238757ed1a04a2ff3ea7f4e811a8c261bdd2938c2b519041c320bd5e926b17824195e7847c66e39be6c3ed8d1e5505d78d7361a1f16f3a1dbef04934262ccc8b698fcb291abfe43211491fb1112bc52fed6c729625ecf817a7cfefe054cd0647bd1b706d36d87a82e215cd3b774679b5065a85ba60b105248e025437bd31ba4b6d4d5235504f7ee4d3dd1c29c308ae1e3ec8e409531cc814c24365d2622b4cc44f085c0d0042785f6082fda2a8077ff384ec932f38d124d486208d3f6d51d8df5211ac47658f4ca2828d42728d575e5e0b6faf19f4464e847b89fee9453ff459f482a09f8c263331154a505d471ff5d903c45210896faee34c3de20750e28725fc0194f88156ecf7f5ffb900a11fbaf6c31864bf09aef9991bf1270d7a987d12550aba4e3b1e4afc11c7b92a8f562a0f7d3954fee0b7757d46ca0af45dad8fa544465e7e811fa609402cd14458020218ccac7d1ba7abce8d49f42e43002c73a053871d10a16b10551aea2ea7dcc1f453c14f0e831aef3c8d2e22978929f9accc779db04704835529682512d0ed50f37b3e08d1a14412203bc792a41b6e87a0f7638cd2917b6bccc6c92650c2b0c8e3aef3fe3601fefc7a6e0c194bbf0e238c8f4469f27ffdf36939f85c32ae1b06c6052d17c04426ca5f8e0792caed8eebad0f0460f82a4e2035dd5f2144ca223e59ca974007b4179fa457ade58c097197aa4058cfc9efd7a9acb9525d9115937fa0a76ea3ceaa6c1da229951d7d721a420deaa7850bfa50c6d2678d4233306822fff4c821292f02b17594ff599ca4a36c2e623438a453ea2e2d211a88e937168615efe88b6fb25b18f1a1901c3e03e844e77a186e3380bb88cdc1c5b71cf3388dea86f33cfd4609a80781eb7a466066704a43d4de2cc53c1971f9a8329c1620fac027eadeedd21e9153fb6caaf9e445da7d26ad296c3a8a31fe841567f548cb35a2e49e65c15edd525c1fd3ab46eacf8d8b7689a910f8d66a35e55e885ab63f9400afac4396b0e8a8452be002ee37cff86cdf41d5ba57435ea5df183730c0d0dac5a52de6c26adc3a36ee2dbb5fca0597c6a368b4d40b8a9b9b56b56945619d711024a54c2db049ee0c2207d3c1e9804b72e527c0078ddebec2123abfa77dcda0bc46a46866a8929fd5f816f8089e4295470530dfa3806afe73284fc0ce1987920d765531d64a37a5cc56033156baa1092304ec523b29f410023687d19115ed4fc07f63f7c3411b1595a259e9b1ab7c11c322d38ef86202152e330381a0dad04453f7a71a8b85988176095faa2f893447a1454ac3f9811ad8ee2c36dd000c35856aeeff4e9542e857b8c110c268dcea8acf49a00637b6fe8ab538ed2b742bf41f07dac73c9de0b932a8a9c205552a11a5990f093c6ecae938e3df2a9aeeb20db7a071029b70033984b773e99397691464962211ee61c07ae159d6fee0f009303ac4ee7fa8bd31241afdebabe81ced61e097c38d0d1eea892b5eca3a88c5be24c85b36ea23002d24bd6c24a34c42dcdfdfe7bb0c01cd28050929fdd91e2f268e84a8f3e6fc65b75a7d4a4682113f3cadda31e26839d4dd83dd8b31b4472b9988a7338b7d389a24255b93aeca0a204a772b9e2b24618d79511992b06a4b0b5e1bb1fe7bfe827c687b185bdae9f52e76fe3da69c04bae2195d293e02c58e5fad5a28166871d598090c5d3111db45b0511e0f804c5b00dbfaf4656e5a839918a51dee60c676cecde828a20a2f61b2e905d5237942df2a0e171d0ddeb0d9adc5328a536dcf88ab2d48cf80b980d813dda19850227907f3456d4eb355fa8623bfa9955f29162d68dde0e052ee2731fd65bf27049c59c9a8611ed4eea1c52e58b3235e85a9ff8689b3224d662252a379acd20d25621f9f7d97e6c8ef979fb21c3515e0d8223fffff09cd7569c8b2cfc441865897958d15f79383a508b312cd556d2955bb4a522c3d7f8f1242e5615cfc4afedbd530e9272dc1958b4f1e31fbbc2e9326efe079d72479c1ec045f442750c1403e414eb6520be7fba0804b31c860607cca998a1c8ff5daec025b52cb269e3e05e689f8b47f81b19ece497f2d6aac93324ad619ad2a33072098064076f613383c9c45790a5543fa992dd15cec5886ac17c1d25058b09bd4a3acf065bfa75e7aca516bdde0738a1bf51624cca91768987071c35a048d06baeea4a4fb20b03450b95c30a6875fe61b7c176806d1f6ec8f70a7c4f10df152ce861cd76a3e1e35273df1ece48b340014354a879ccc7647ab2af2ac282b44045b561761ed53ee81c4a16e665e080242382b11e401a7f77bead628a16ac48a07c8143ae7e5d9e0e389581c85489f93ee4ee53280e5ee9cb6abd929fee8ce52e20dc0b22a9c9984d39f18ded3e35a15109433ab310721449c1651627615b33217deb9e74a70fe966c1021c1de61ba231585b6ce3a86163d0d22e8e012589d10f5e2531a4442197f5390cf1d9345088c0ce4f3b30a754d42283e33e85a4538912050171d5d7cbc32158449004a53da4ef2a9f8806a08384e3116d92d587388a6f254fe544474c1ae82f2665110018320ea553630a615ba74fad259805c954aba663371cb3db97f676f4261d0054a2ff2dc666fa2c16406c21f540d3c2f19181e8fe6ab393a66a7a6af9c7fe07c7908585c1493c6aa42ea3c9d4ec086fdfe95b14b043c37a118938ffc0f5dd1585af273c94809ce06af66cdf4c380e82b0acc2a347382605ceb21a10afe43dae8ec967d0ade6c63e897b52b9827b0b588ab5eacb76f1d69e02be29b4f126ddc3c5f5a2fa937cdef4cd292f7118ede50d0d9451f24c29b4a8ae760917eef58825c99898cacab1d53312a3f4a5e61e8140a7f6b7ae72cf686424d3893fdc28fe0e01f045f8cf330a031c1635d2810ef52884dc7bbc01ae52dcfc46e6a4fa6792be8067b311fecab1af756cc742cbb0d1501659d1e4cd41e121edc1c98146906d3d9b502985bdcdb94f477c77e7aa982034e2e493d196612d35dd386627e740f7cc411c212b477e8db8d02f74ce999fc3b14109afe1fbd9918227b27289c43d477e83fe87d2c412c8656ad1fb4fb08ea31e32f31af27ff89e011709d42c311b1a7cbc738ea5e444c968e88e7b61c36e08609e4d773cb323548e959369cd65c9a612e11b864e4c40b74e76269fa461116b9fd3801c7999c892c416a67f38159b80aae68b8f6cc424b066d3a5d47e5821ea25323a592700293907f9b1137f1e270cba3911bcdc5da6b00358e2d083a92f544e72075d1b388559de353ab0f3f67b461df121971dd5e629f9062f3b7c084c1c6671f403105032ac673deb2ce7b9a6ff1f1c6b7668b814e8841a202cf01529e765265e29cf1c9e5d04a023fa2a037189f4490eb23cb470d71a2105878ed49a1260fbd5dcd33e10c71f471d9aaa6488bc14c3dc663bb262e404ea5d2c1c3e5470da64a2f2940151decbe6e8acea89804a03734bcd4db943cae315244b0e4d87066b32e91695d89773d8cf058b515d8c4f5f24c9300d18fa1958f8c5b6f7f48224aadb7b797737d4be0c7e55ca9217442c473aa5cc54216e7280b67f5ea2c7250131d7b234fac5aff1c93ef262e6166257c54425180c715340056d8d31af6b90cbc863dcade62901b6d485d620317567c5b86928d8cdf63a82cb3c63a683ab18884d92728a9de6a95c45fbec04f8f63a0b158a5f8ae7b95858d7fd878dc8437c2495f1a3e641f4425c54c82a6e940d6206d98c01706834415b42e002a92f60d79cc100c6bc00a5de275e6849399d95f548b1492a3c94fe128fdd43f672af9bcb6e24eddd34dd8c84b68bd7ebc01c0c244db63406701facc2ed1ef55f18e3577cb3d62e5349b02b5585d33c015f86b6cc233ef15fd8396c0c2dab016a4033505f1a2ddf059e059960585f8c2b9bc6dc4cb879f5fd42aba8d3a0e3eabf8d640055ab580e1f55499c85671de4d762e31908492a91b42bfbaa152a21b560add21a5d205ca523fab76019a95dfa87df366d38e78f965a4c365d938f03a5bf9893049b80faecd316a931459828673a5135de30d2f060ab8754a7e6f9d21657c3cb904b95f1679f34181218b88b361642c2b9285ebb4fa6e8f414dc5b6e62fced6e9b789b79fe24599147beba9a7c00ea03345604aa25ce6f300ffffe2f538e697004f60ffd546c5b2904e17225c28641e0d2e9bdf204fd07e2426194e8c4daf022bb9bb26c7f8d1e0dc00a3aaee6d296b131db0a6084929b95ce6f36f7722af9c10e8bd45bde23a04828b5c2cf115168e17128ac38100f34600b1b4508e417d35ab8612e59178689a7bb51242e94c23fab5f8f884d59de589769588b37e9d3a21f189fd627fd252038a418fd8f7e63492da01055676acdf501c71061a29dc91ac59c7c3b8ef4498982dce63a5b4f10e376f0f17adac82d7cbbacfb9ff90c07de982b7e9ead83847d044caba1c0cd8a99efc29c5e40b25c2adb6950d8265ada36e336cb2dddbe9d855581b89d1cf8c91cc9a3a8e8e49da266bca461796003fd60b15aaff334f2ffa04f7699f8e27e7f62ecf5af94b1bdf4bbc6d2e2889cde24117062b857ae20c9b003916ec4fe89810850f36ef7ef13cfd044cb5aab9e2648d28f5dfba039489047db308a0f4754d9a9511473601d90bc8502aef5085c26aeb76ad71a8908c21bb032eedcdb4a8d9bf753a0079eb4717cd6ec4430bc62a59070cf11db8738d118b6ed850eb1bb2da61bf8aad9403ae98295620cbdb15122ac15deaa5de8206c15b39482eae9b851c1151cfaabf5b830acb26b66c50eeea7109b942c6228641c1741c1f489389633d349b45e4f1448613ecd38969decbd743fa234cd5489b73d159bd897fe121dc201e2a5069c3d2feac31d85a04814460a08457d03f27e6b330a53fd308c5f32b5f3a6b589cd984f934983a174e638feaf0711e42bc281cde2770f35c1cbb7b5c2b4e6a30e5667910100e7a1cf2b8662cf4a604add7862eefe63868d318d26209999a10d33f30af003712f49d2e0c204662742a88ebf6ea0a9845dbcdd45643f5b98bdc8172561a305bace63bad73a4704f5a36f530938bc6e5f1d58c7c056fb9537420f715f995815683a7a942be15f856c09895064510d9bb3661d979286f010bedacce2f16fa22004a614e5bcb089a59bb1e222a4ae52702510052fb30fd40c21e0a2e4b5b57c78ff7e54b8328a981a849b87fed9eda31ef853a2e3dc7d3ba5a6cb267955d94c457ba912c2700d3bc5e3b1640550781e3557e17897b18b7e56e8e0a9453ea15df9415e4dff8052dbc07e02ff1cd33f1e25ee22c40fa5e97153e9980ec682151a31886b1c30e3258b7866676c7250c8a4ea0958082e2111584e0441c911b87223eaed0c4a614fd2e01b83ae139f9c674ff7a13278a5104cad3bb01e98ea808d5e4fb585aed8033fbb84cca769f417d9c4b000d7279380a831790710272842a11f24f50b2cd6b2b18c52710d174027cee31f03e3cc36a17c839d4dd5c445c390f1a380c3b66768ef515bc385db39e2599b831e24d15eb7d59f2322eddc33c4762a58d39a4d02238d49d2eb425769788aac447447d31a68564ff5dcb9b60694fd4ae0fc0594a6559b9e525026bf90eefb7c46f5563447ba809a40e259e442638fec78cbd0008e48210ae948d90b069e59f56e41903704270e50ed03a7725f9362a894e74200aad91bfda43302b4511b671aba8dd6f8197d157d0d7a5989602ac77e7fda63b9d403d47d11ec2c862c428337a72fe5c74b0709913a151dd725675ab6408377d76119cbae6e1ce94643b6eb8b85cb1f71d0d4e7142f1236d29f470bff2f35575d6a4771d1caf38edab60c3c3c6e1c4adc4d0549964f9e42eedd3b0c4d2184d7668eb85f27c08e062e75a4d6ff869ae1c202bbb380f6d8a2981f76b7df3c184d39406265c284948086fa4ee88550a373be93df1d7d209ac087aa53b06a1b1e922656bf1c40ef2dae89f8c2622073ed40941056e2a79c76a7a9de136f067834a713dfbb13c4653ae2ed95d432b77d9c5377f117e3438dace174f858167957c8662a99fbc886d8e89e7c664f87f9d15cd6465bfb9da2cbfd4d5a6b9bc05506f969133af31b6a20b772364c0e87330344d7fc9ba760c3bc678a877bc8d0d03a58570aebadbb295792559683ddf81cc7ed64eab36762480bde3ecae675ff10223806fb12dd82192f3ec2e10f1d92a875034e45bb1a0b772318a0344c73d75aa9eb9ffa812182679e6a49653e16a08cf2deb0de280f91d34f4b73ce89e840360f5e72c11e52c952be57a99555e7dd256e3dc158a8d051516769fee16c70522c257d5f0e121c325a7916d46ee9b3a308ef56fa50ed9bd43d30550e103c4dbf650ba19ed8384d58f1bdc59120845a77900443c640f2d6f952535bc37363f2dd78050d1156751a4b50b2e1a787a856422d8fee5ea9387cd0a7c4defe4194fb7fd5bce8a3230092a962572786b5ca7ef29142001b99aa7d49dae019d0b7d3a3b4263f2b73a6d3cd9abee073687887d0a81463ce6c188d2ecbd20d3acf43e14e72e0adfab13db5b20484e07786f2fc0f4db28321af57da7cf406cb859642644456ae495f6dba5064803092df66d1751189363409a73eb9c87a03e5192e6a78c6095112f45bedcf6bc25873bfb21fa8a15e7c3aba2e37d38955b86be8f5947c4612ca66d419aaa70ae5a1f039a1936eaf55a0a1ec2e26e83520186194c6183b9f228f51486f01dc806bd977f07b921004f628c4b213170529cc12c1348790833dd5797c7c1807b113e9fcbc7fe1c14d1d1f77438b0357e00b1b0a3560ce1c1deadf9d2a326b2dbadc488c0709d1860ddd4cc759d87edcd6282f17d1568aee562c241d92742be68fbeecdceba81ef4930b913a0e075b984038470fbe74936d1152b4d759dfd518d2e1f5ad5cfb60be104806d134dc114c0dd0e19173f3f4378a2ac3d19fb8f79c68a4b776864f0bc6bb485618033b0eef98011fa10486ecdf9cfdc619951e114566e91c2c45e6940e40b2cc54f937fa49802b4a5a800219501c02b8cda7d5755d10e5c882c04ea00ab6c9a5e809d4126874e277b2039c0a0a57677663640457988b90b9d67487f46c0d3c2cb928643fed7f9e0e3276147f21e1dfb5d46dccfad9a133df537480ba39223a07a61459985e740c0df7ad530eea099223f89577bec63013eb81f75ce5d9831dc1b6b324faeb1b57ae0462f0aeafc0c8c62d90a7ea784f7848c42e79499bbe6c2362ab406fc06405ca8e58acc5811ff146b31058e897fe44925c38b574b4028114dc0b233f677fcdfa2f139d08ab32b6895aa42f68bd12e484c176eeaadf1487dfac4e21663bd8ec0e3c7004ae9f9a4f2ea313089c1b87f4ca9473ac23d011410a286da972f3480f0598d525f8ce3f40b088e873e879aee69861301b92f7d05211f15153057e440f5397ad0245753ee9de249264290aa55a30731b5f925a491f869f5fcc64125111692fee72e8b1112272e1c8f8c0b0a5e6a9db084ce94a36316b946507aa36e5e2375246fa3418c1c269bc44eeb0c7e6e4c26009f90d0d0a997c000372358cf0d8318e301660b745bb146fd0f985ede71c58b3849f00cce2b0bce3c6a0e96e47171590acb8a4b2e93109b67a96422ffa8d74c6cfef285c9c94286c1cd512fcf8920ad3c57a53991d4f3d307a52e9a3b18f4fa5e6c4d680a06447753e9515dd023395458f1edb11acc89e97ce74dd5c0ce210346b7e073838b11847f9b386cdef72b2df10743e33669c49f6865520087d874bc0d22a73c3ba63f9241b78754f80e31c9f335e3dea535111989a4faa330e9b6564b40230ab7e6f98f9cc72f7959c912d76761cefb6188b2ca6ef222146fa00778829774121482e8db6cd48602f4b31028bf60447e3a3ddf9231e7f4a635baa0bc0c900079d5b56587004ba4eb157b363e4a186e74f1519cae8fbf6d41afa830a86aa463951024e1d10355904bec6e3c62024627fa889209e8be667e1d0a0a1b352e52e5b96b117a9b243ce316c5a0c6ca06eafde52b8059e8e78ea5027463913bc021f67e27af8a14d415aec8e53090de418ba07d8367bdd53d9207345bf0ba407977973a42f530d66347efe7ae2de528ea03ad151f749c8723de56e8a4e628cb59b2f7a3a00a08d76527fd97a4f02264e58aa566f96fe489635a655d11090a842fcea58fb02ccb11466b5202377af61aacc391a8b62a7ac134617fb5250552987dbb17c74fb75c3fc7d263edcdae1695078d07fc8f9df8153dad17ae0e20d8b2762aa4ed1449e9f2128d6525c2ab3cbd31515d6f65d2289eeff6409e3ecaee7a91c32e2fad0eb089400156b26f73649761641713a4609b122aade738122851f9431d7559f3e2d24bc7ea8d8118f4c993caf1f3ba5401fe9a8be5f2c09d6c3bead33ebffbb8390c15de60d06496e6f003b6d3ccac39f8a9ad7e7769e1cd5c030d240c7774d29c8a048ff139b5aefd4f1e650d4045ebd43b038f17de0e255a75c58eb012c2cdbf3479fcd88f2e182b39ef7b9800053e5fd14813ecd5108ea0bb5b9c60155fc0d0a0207fcd21cd9a5c0f2aeb61ad411378fddf31459a4d4e0b476c79e2bebdfb19bc8d2c1fe8b61778b55611eb4488dd37dbd7fbf88dc0086819049d807877fe9759fa87a553b0dd92262b79ccc8c24b0b880a4447e02c8f2c04ae9c7361f0576c2377c8be0df8290a9943817210d34cb1a96715ba5a24470357261026a4eaea0954a983856d12e3bb6fb1eae2712934dc41386fe0a85233f12e531bcc09829cd8321f9d699fd3afdbc877117952c7fbbc23cdc1af11960a1b3696dbe5ead8b076c8302d650818fbebee781def08979658aa87f268e2b296063286a8e22d0145050264ca91f55949ef0294948e41e13b3f5108eaf9abeb2623716ed74ce7a16bc71ae87193e5e5d34e080080c52ae517682360bed43bb847a6237f58899672c566e4580b8ab4170c680b04b3cc39b0a4449961ed0cf4fe36862b4957837f55541598a843c09a654d6ee2220b711e6a4fe974bfb271d7e25c2cf547ef8f44a3bd7302d26b86550fdc7885584afd175aa2c8afcc6cf388fe0bb4ec88347074a016a577764297058bfce41b371cdd1847d4dd33f38930f1423fb14215b5130d3cfaac83ac61821cdd966f308bb43140f323b2412c4861ad1da4bd3b18b4208fdd4ab4dd69ff70006b7c52015518ed2734c4cf5bec01c7ada2ab5aade184e16164828ad906562ea45064f266db4d34394467ba480a80f3395a24037687a8c93c06f0ce889d702cca235a65e102b4b7320455e76fe621a45bacb75e931fcb1380777197c6753a8cbcc0e84d09e3a93197a759291b6522f8f36656d4f82dfac7cd9ffb5eaa05b05e13cc2f3c3c06f2cc01084b2cb3e9fbae56378e6b04fbb2a2be6874e56b8ad5e454d24e2f157212670cbde424d67bc9d54b5c40159f2a04426ccb12fa359e9b182a0b8aa9da9f6260f2d3d65a9836ecb0f5973f4463258db40a4fb315495682bec7738296976246a46c4ac413903d8947a638dabcc0896676c1c5c22e1e3b738e1271ac0c0403448f459961b5f8abf8c0339d276d356146268d358af3824815a057672d40803b5f8f3c0019079fa39f608d6515a8cafee7dbdf77eac09ad0aa5d7b9f56a08401621b597d85dba07b52fb16899a1e4761617506d5770fe090bed4fcc46bc018620d554e29b25b36c3f6a94b630ac05fbd6da1bd0b3889fe9278367418b0ec0da81e21cce00069f5503c0f5025b61f6c27494508a8d16a107de44ad7439a40e53f6b07c298071c64207dd61f08a90e714186f88c03b60cae4e87ec9b428b2d36aca52ab10ec437014172cd084e83e57ebcf6f68fbc50063c24a2a372487c2ad7c2bccd359516cfdce0b6b4424a30c6f6269ed9aa240ddfd312ee89c2273783b4eae2ddd0b3323221c15cc5617e840f4097027bed0905a4384586401dda02036fde36a087274255cd5a5f257b6e451837f814417b08e88a6c0e0bf6146b3b70e112fc4cd106c256b2092a81e44a0045e6140485aec57b1f18aad05e3c36760398fb43aa39e7437638b6db647d746f69ab75b1ae12db76b5c9cc781edaeb7b5d01b40689a643515536bc0da0f81a2bb681034908546820cd41e86acb684d77980b528b6f3c3e7e401af694b66554d5f5ac752396519a1f59b746219a02a175e6a102ba7ba6ebd44f7a1460abe7b269695e724069af7554539d2c2893878b5e052c1b97de3de294c93e9c161273bc9b6ac931c5e8e4c72473dcb0c53e9933dbf02e4e6cd5c7c0c0918d9be25d49235bd9d3e1febb5491366a9211d55e14a0805814cd426034b148901445f3208300a6b641094d9b46cdcf40827dc6efb13eb10cac30a1db419c4bc93da22ac9eff31341388673a8d9e3fcd43ec16719a4a4e08d51223742fa15d8d3ec41d2a89146743c64d3e567492146076b35c792018aa62eb40602dd791e6724584af476d6d380704cd3b2758bf5343dad041af0bce9dbd86f2724454d49a11a167203a071294fc3b0e351c8fbf4ffbe753e5151f69326b39686e7b1e4fb8ca6205f5c8e28522bd4b22b91fb3a4b82e2c3dcebbb56df49f8d3e10c4d00ee5e5bacf18cbb2fbab29ce4a7fe2e4832015cc186a2c8e229fb3b5bd39295af14a86e7959f4117e5886c0b04ac6701f50745778d5ffbf8512b59a566add4affd1bc1f434ee256f0b5610c38d9a220d1227288adf946e409cc128ad661c19c848d6b7d2b415c84510bcddc35c38ba3bc3b047c480999e7ba639337c57d0b53473ea6503d99e1ee264d4cb828072a97b7fd7624d7b2ed2aed35fcc3a18000d99f11116079fc3e1aea1c7dbc7027b74855ff7868c2fa266ddb253aa7657cff502c6c970fbaf41ef4df06f4b78c82a79dc5083c44b23b567d09570e51083c22c25a7e0093182d498107474c32a12764b1e3dbf020f3c1cc79ce667761c523a35feb1655fbb5dd21a3843eee293a9c1c6ffef9311b00c33341cc719bfe3ea84da18aad3aea2d6e06b383debad51faac93b13d2c5c92f823442d5cde5bb59429bb5b9981e51e3c92c695a0410f216a7fd936033c65a533f3870db5731ca37a00820978614fba18890c66b2d65ff2f0a50810a3c8ce721c90aa78f268fecc9a5a71bab7a8d3dc293cb8f1a607e8a1030ce1884a75efeb3bc7a2fb9724c57d7059c031117073983d4e2a45019e148a0db077cd610df5946b4ec218baed1de45d08d241637da33e0993841b3ec405c13ba58e63dc399b6a20fe4e911f952c7ab7b3fd522606170444abdc1e5833eb49470b7f1797859810f1cd13a23111ea647fccf0b0e861f1cd53c00d2dbb075ac4dcea23b60aa228b8224ecfe62c28dc10a3ae5fa2dcdecc4213aa7fa6d9a13a78b9d7182728302188a3ea58eb9204d7228e4b1f77b6800dc2c2e34bcfa5742330e933f3a757d3bef6d2f53deedd068a73f02c2336a0c27126ff19f0ca2d2167ea1a97e49e0387a86ab27bab95da216e0494987fe90adce6de95726e5a4c1ad8410818f8ec19210bffff0a61a71b16d4f946708c3ff62c4364c505be54edcfcf4304beb5c6234e9661daaa3d63a5968569e09deb2bb93fa961cbce0d93f43a8485777036b47121544a3f688d65b4133e0402aac8f948e728ffc01510c3dec0dc7d27df443572da9e722ec08222802a9ad608f8d8e90c379adc71dafc3f4898363625908f6183266408d7b766f95635ff6cd260f472afdc346cdf0d3e3bfd9055bc45c3506aa59cee6ca16f162cbc4a23021b5de4d150596cef87243d1de3978faad5675852cd3b977479b784d087a07644fe461d2bbe0c89036cd64b358e81b5ecb196824d1022f84e841fd649dafb12b67b6e9b0938f4a339aeba73ec60ad7d3f0a672d327fba8ea97b5c7b968f288757039fbc739bb13ef72802f4d191ab8a372bf68856dd0c261e43ecd3b786fb18638ef13774a52ea7932faeb4f8cd81a750cf6f5b53bad2597316bc99a3868fe2f8a1f1f5f90013806966d05c02481928dfca76e8b53eabbc57b67f275f680f29042fcd41278944516462f0be8d2cbd31fe9b95232d3193868356e5d4f85e44c47b65defc7fe089b408172c24e90cea255f8d2015723cf7fb782263f80f9d9bc6200900cfdec13511b9dc3b797e1866f64de0fae7f81bf415d26628a92f36c0536385d3d9c15c5afa4e6b96b3681ee29caf8d4e9524f07062f91577c341857c5c051aab80a7d29a911a017cd32c5f1ba7754ac38e4ec629fd959bd0efc3e2784f5957e35e728c5e07a8832ea66b37b182b018d6675245204053b2678ee7d7fb7a3853bfc0e24a878ab39c74e0b7d3ea01fa9264e2c035d52ba7d242f7465ae632f562736fbe4f8ff6cef4a656c255acf1e1d5690a944342fc8846980a1fe1c8d5504ceef5948eb92e00fa10cd2a4d55f85622bdc455d367907455321d4ac09a853e8261b9c7f6037a63878187ea0c3b092ee99e97b0bc56faad6280d1c8903f82dc02d96d25121a5f9870a421f217ec1a7f894d7b47ed7841ecc3d055d4b08691400a43657718901f73c4c238cedc84eedd3ac422436c57e6b6a58526f96c072d8a218d5461a7f8a900ea8cc862738e6591549fc0b45c3562962b2f62a0a6c65cfa010ac76420ed162b65ecb535c8945708323d9c66b538df5f3454eed9186f839e1e234d00f768d9f9a220720f4404e9fe4dc0838f432cf5c1b9584e5dd10f895169ec9126474f24047f8001a1bb972ef998085900ef5d88b5f4db82ab3b7a2ed5ec40b340fa4832fc8fdbf83b638f0d0cc3e3956bd0c5ff181ea2b638c80a305d5b7388c850c3cb39860432c7e1225b6d39bdd9ee888e8f6cc7edf961c4d5d122f8f94311fee990989762099fcd18d4adb614f009ead8f72d4ca9b081d6fbdb4efae2cb4d480fc97aeaf4e067051b12dfe4b16f44717df3223a57b89d9b6209ed8ff340feb0d357e581b0752f69f7aeaae1c8647af84f7005a4ca27935419f51e5e891ac3b38cb337f74442513ccc151615a02878ebddd1535af3a8c117464b35affe4d8db5a1ca90d7adb5ac45c0f7e11ee54615b4ff8b920a4627f9461c0eeffbc968246305760638ce4b113647dee3d34c4a8200d830a21513bdd5841425429af024167dcffbd55c21948026270ea020484ad3fd1d3aa6941a100fd6d6d7d6767a70b01068f596548f1baf0d8531eff283f608f320fae0970c38fc2b5481984c728beffec7022e0b141c5484a582b80166c77a7982a0381080f53f0048112600d7f5254f3cb6ad91738ac17305fccf47d71ff9e632a270b7d8e7f243da2323642ce0b1f2be7f41d4437e595bde4bbc7f27751e4fe5eb093e0a5d1b74882d98a444a16fdd10583141c4e1ab2ad7e02c78dda87033d0e1f08580d6d084a64321676244ae0bda880f93ea69df56d1ebe359e24416fc29bd5ea3b56d7a5a5dc0c028f96855f11df55c87f9652ea57d13e01d87ff9cb742d0e7c7b3627439621832ba56489af60e91cf9dc1d5c9f85e62d2b16e1e73e965d1bb1055a18716795f812c7946a0f3a825fcb5c57b0fbda3d762f1041ac3b9abba588094c00ce9313177cbf6f5eff4c50d1a52c00da5d2b92580cd5101857c6a2845b9dbb3d9be29d447953dc952e07d1734ef1b1a8e9e588749d959e326785a6de358e237fccda0666d5d37b4e4b6efff36ea9747f8b711b8c02559396396fd53f73471781dd26a1ead04931403f91986eeeef59422cb15691b59099835fb97772d58a085e9fed0e451b2f0d416b2723d62c5e52a594243dde5beffeb3e352f86245f34af96ea00c3a5ff7bf5864717e30491cb9ea0c9d7b9ac9437570e9ab6e432f5fe2e5046c81d9fa864ecc740dd5fc386fe20282f0a524ff43fc1b40537ea3add9100fdd7b2fbfd10ce7f54c30ad99d56194a0384cc2a18690140ab50f6b826aa8b252050c1e0140d56cc466956200b85ef174139e88ac8b31b84956052fc66149b7179e24c4f5bb276d882d28b4ee1f9a5d8408d554fd0f68575c0214beb3988c0e4d58d6c2ae5169e592eec24a57de85d389f74786b7b015e62d53dda94f3ced901a92ce8f1941a881e2a2641e9373dbfe47b2bc2fc525c9695797ad2df5d1f78c78c94c63322b9134b0893b89d04fc029e8de9dfdc2a1abdfaca0bf72b2f25c970966f303c2cd88430e7a6536147160bd41cbef984c679447e96f4dd503edabcbacccc427370076c42f8bf9049dca1e2d1b546521ab1ff9b1a2022871bca6582d7faa9297a3d5948b3f8a286a1a0b420880a90c37b00f793e35ba6d82576d8328ce09f555da4d98ee6fb8b1755bbfed397491327ac8a3fd54e44f43f518ee1f07e9c13d8e4832a3248783de69b4efc3bfcc1b959560a900c1a9162771731ae08b070ddc45647c98388715a95ea17687a141f0b05e48bf460bbd46af0350f9dedc6c96fa618540afdd4cfa118e4b5522e5a3690740665cbb5a635acd371b622aa8241300715390ed8e0f145a899920f030403d61d0c12288b26866b4ce392fdff44aaab2ef5c5df5303a3756636001705f1e8f95a00c12071fae67bac41871744a7db26dc3541e2877a1c52b4912c4f2fd034c05dfa64b99d193e68b5fe010d6a863db20a31ea84c7dd27076e600ff91f7b3cd283f3e0cbfdb9f5012b5f27758a3ff5825591a6b0a751d8d490e97824dd12ea1756b1c6e5e80c110bfeaea07989507f7c1eef92c0305d2792a54d7b7ecdd6d698d8ca7e5e2dbe266ac630063e185334cf11a8aecd5b198b250c5aa8cc9251f451c372047c7cfafa67a84844c010789feb4caf1a5bae486a32ea4c056373edb24fed93d15709216f3127193aab2444fc61995e182db0aaff8cb1fdb2393f9b598794f5db917eb9d7f26b832fc30b3223e82c03ae01b025a0488ddf0de4f516d7a2370f497686e583622f80e96541f51983b019bcc4927201e371e9b6baee01e18eca23c8e1236da1891c24c86eafab46c3ce7a631655bbc06954cfbc9680ed23326fb63f9297784c8c720abf5da66ead9629a8764edca999a2f627030bda43a1867d69eaa608f5f8313a94da8935f679738ce6460d69ae51f8335c68d65ac0b32970a28fbc0be728054d84d9983141097a3579c7f4c017620a8381d1775e26e12149a4e0de2fe0ca467414e9487426d2835d2efa590af441305c1e1491888464b76a5b90cbcf9386dddc45848d27e1acf288d5e5400557147bc26c0c80acb010bc01c46b143959146056ca6878c5dc5d0a0e18647c7d00664e7951b7f8063d4b58a21d5a66dd0af39982932097db3223a31e60a19f98611f826b947ab4d770839a0b33742a989226722753d14754a4a5fa8e3a447fb8f27ce15f9a8d3acda501a7012bae7c66f4fee795a39ebedfe10d2edcf9bbb46b60b2cd0c6736adab13cb6f579d0cefbfc3c982eb8189d91b89ae4cbd6ecef77532e5006b510a6435cd837c1944e51ee7c6de173731ccf3da464326dcd30e20cadd84f0f9a1f21e7d039b674b476855cab095cbee77c1784a7c70d68ee17e7bd39218a320a0bea2d430fd28c50839e2e04be8b3433c1284415063b840f933d0a5b69bd377def14ced9cb1f7c8383ac70241bdc9b519040e688b864d22737738339eab3447baed3ec5fc46f1e9f15945eb79b5d02e6d80d40452bee5087206cda9a58f66f6a3187588ec1f26e7a490f2cbbb4564b7107db4cae7c3ef92ea8746d7b927ea36986e3e3faa3a90a30f50a495bfa03fac6671d6d566cb13c638825096f65ad35562283569ce8218a540564c6f642ed472cafe301ad6604a43b3b97fb44639c3b93e0d225dc41517bfa53883c67ca6d1f08bb2a1e988a9a453e70c78edbe3381a910e1e6c2c8422bab9656c7f6a76ca27eedca751caee3077966624a38224ec81da01b6a4113f7b065c9b927517a4b1a110b21576b92eb3042a204cc5bf6926b1ef27317e521b92665200b59b0eb9b3249d8de0417391342f214605baeba31aee117e464dec9a1611fbff6bafbb63302f180acd0570c969f927ca300ac49f34267b6505fe945583618af3486718c0304e036e519f503706183018df6016f89f9c6b1ea2dc02d64b54456ff5fbccfecf73864a901882e8c6905b14007d118415486a707b97024d5dcad8783de99d1c82f67335777165d30b35f8bb16edbf635614928abf38d062e68c354d6cc56cafd118469718783ec7e8e62c75a2a008587a4e5651b9962d19ad0277669a5ed1205bb3646f8e90edf21b133e217440afdbcab4ed0a3dcf00479ddccfe78da07652e07709bb69b7460c2db74e67a4797c0d76cf5137a136469e034b7237246066fdcf0d3df9b289b811cc4ad282faeeda1737a13d449dfbcd47984b4aa83165d6c26f9262e4d146a44181e2ffe14af6c18c3fcc68a7fd0abc4570e62f009d5115cec9a14fa167e6fcd59ff55a2149d14be686034b087d9439115a33fd9e4dcd0320875d65eee0ca12d8ec24676f776e0403f78c10aaa658e3aad5aef9990fae625968a14f919069263b47ae56aeed81972d25d26a9a49b1465c99ebe2d8453e416723a92a9186817851612a6998a13430a80c4d5507d48847176d4f9025e5d57abe13f8955ce12c1ae455d4fecae2a7ee3e9b425667a0482560dcb1e824dd64d804e1bec105226214e821359552a2683ae892b9a52dbb88c6f0e8767d366496623f51c621c07946b34a4d09655137f40da29a734eba4d028f70183d87697fc74d98d594a2e9e1161ddffa06d8c64b497a300efaea66def99e71afc3079f62c1195e8ccc30bd6e3f5028a59ac72dc5076c8cc6013a3909d924840c877ada067ffea8d311f32780ea1e7c91ff28e7d4a8d46bef9d6d49935725e6f174d124ad5df75b5f8a189df72ba4c30ae6f236e1cf71c7a7a08f576e7fe52057f60806d3ba454c5f2f917f26648b24ec579ed77b97822c9c2f0e29be3f15cf45b7ab2d27c4036abde456accba57acfac0ba88fcb3a234faa18a7d41194ebb2890881e92788e6fe117e95d7dc8b665f0437f7ddcc1d6b42b4113e32e86c1b9933fb7b63c743dd79d80f5db7cfacfcc1a02429a43e08e747219d413c36040a732f9327bfb05dd06a66e18214b77d771dfb07f965ac8222744ae21018af2c822760f0dcbf7af1737e42dbaab3f8b1a90c930a82e51a4d8127602989f172c70723a97bc0267fc8fdbb503c7873122cabd40f552709530161c6ed508e4778e65a1e91d8c4c39cfd36ccb1e9474b158b2cec36acd2cfb3316f57140e34b41eb354da20d91997aed8f2335cefb37b1f08473f9a4f83e464e961e18c70107d736d55e7c55b6dbcf02f0c92490a8599b8a5620462651013af5def2a21420e769a542fd7a83fdfabce692dbcbcc0a9132c942c1f289211737409dbaa886d4c9cb9af265f0d703916e9b5c22f550cd5f85acfa05039915cf316705eca3547e67cc073e9287a89d91b444879944bc8a2f616f215a93f062014c8897e8e8b3cd1d37464e1a8bd42af2c6b5bf69a2d6cb3ceabf32dac5f1a448fbae436b47c5f5a0e2217194b0394aeed975e5e66c403fd984f46bc62fe1bed45952d2d87daccb5fd01e2fbaa61c0d036c09e39e1f697b006ce16d06fbb620aeacc470439acafbdf1f5713990dc5d70a33869f86c508674831c2d30191455696753a4ba8dfeb511be9a0fd2f93ebd614b4cfd0e75e35b74e3aff5fd69a858b92c034b1e857cc18973ef2e32bf326434b15ab9844668e13385b3501318c86173c9d7f4c75ca32103c3f18a2e7b8687b189ffa4cac47dcf56c16adb6b79f021ef800ca6b6fde3d7bd539406b7f48f54f1439301dc50c6152b26c240968665c2bcd615c8b05e9212dba5a015088c311dbcc87c000cd0d3f042c82b83e2dfccd560592706c8c035d2faf24a208cac19933358b88f80606a4567d4469ab9140e02130ee5416005d6759f731e8ca9cbe27314dbfeb0ddd841fc943b1c02135b3dc5e5b5cd1c99f7c05b70b433f79b05be318360a7b5fc3458f640e2d85adf1a162e04b3032ae6528b56405a15a53903d22ff92fc0955824ee005df3b3cfb5bba27b80fd4bbe83b7427705b8559e35160178d2ffa85d03de05b917630cf5ffffccd9a7e76be8ba5784a96622cd210dff1093b5226bad6dad9b906e2222222449e70828085e08870ede0181709a2e7b7b490c56077f9d72d4bd6eff90523615b84e383b6298457cd8b6a7c70c5e66f115dafe71e26ec437f9a6373ff8eeab370b2da4557561ccbf471fedeba9b57fb6f60f296503c9a90f4b438c42600bde8d8ba2715f1b1cdfba26fec9b8f98ed621554da7b7b2e654e8b5d934dd56375b3b2308066f8cc5b0de5e4abe42790afe681dd38599877f6f5e18191f90fee1ac8358a8500a3698845b1551e8c15638628521b83a1b75e09196e38060b1e148f03670f7b30d0c77769e80ab7c9fe23bdf7a651caeafea01130ff1bb3095ba595e198765c4f0355a07bd30b7c6bc320ee79988e3add12b30dbc05da357fa543f2edc01006e40c4a2041696258c464758588ec0d69a05ae5dc3021374925c2c60306d621829240dd2dd3107e7cd803ccde80e99bd2322ee28a000013569980207ca40841e9cc071a009417478dc0650d0012bac6082199e9083236cc1d12cd1d189a19c26d1802a684b7043df810aa194d21b77a3052cde76d01184f1e2c4c5db6b67474c6fd85b6ba13793bb4cd3a5f6a293fd44840917ead82d61a7ee624fdd127547d7a89e22c2844bad77a95e6fa95ed245aad6ab951161c2c5dabb58d62dd99be3ca41840997aaba4b8b57b714dfa2ba425cad8aafda8e1a2deb2ef1d62db578b4ac9bc4d590b4b8951161c2a5458b162d5a5c085cad458c9126c68b81ab9588b860d8edc61afbdcd2a7536e63dd316e63ddb7b1de69ac7552aac6bab176348df5272b1171f97cae731ff77129d77d9c8b71ddc7b9eb3e6ec77d9ce3711fe794b88f7b34eee3405989880b0874df033dd04bb90ff45e8cfb40efdd077a6fe781debb0ff49e92077af0815e89884b2874210cc190e8964430e5c21084312e0c41786108eec010841786200cc108435024ba318aa2c8e4964c62ca8da21863dc288af146518c316e14c59872a328c618378aa28ca268929588b898985c6983df53648dc9246f490ab9913714ce1039a4a63c86cc41b9d2883492921161c2252525e596527674a44e4acaab9494149e94942b4d2412948c08132e2828778971945b42798c2b95c48871a589ec417902e52d52b2b6a3a264445c50502e0d0aca954b9eca33914ba6b471714b2e2eefac999e678d9c505c0839b9a5939b79439de09cfcc52dbdf8c99d43e69093eae2450e8c5b8261c43e4f2315c60ebc25a8533d4f1d1855d67654984d9ed12d8d90e48904bf5b6f717594cd1e172eeeec792a72f6e051d676b44b9fca5c22ca421928fb272361979561a3b31c3177e4b9045321a31eaa883c94e658c2a284d4739ed1d3a114c346a39f44628137482095f106229913b7cba604856eb353a313697296185182d33384470844f270d4f0f078d374e28de827272f5ec4e718cf507411beafed02a23ee9a4192c325992937c753fb7557e9ecd8e4cc67bb80cc942c6552ee32a329ef294cb98ea0c1a2c6c7529e56b95dd7e6a67cf3e2c7af8e83d7c446374958fae22677cc6cd317a787195930b60f494a7c4b84d078f0e2b1e017844f270f0ecf0e8b4129a1c1a1b2336427084e00c713852e5b91d37af6b1e93e756d2e2d9d1b87876364e88c3f9b3cb01c0b3db91d2ba7c8cd2f1e0777907389ecbf134e194d03c9aa7625dbe9d474329769175497a3b719271d1fd49d6f08b4c004d07c3f403900d41e17b0064cfe6dda0644fc81bf2709e91ece5644fe77a36d8fd28cb0e638710dee018c9d1813bf841c1c3a78c57f2963c1cef10becbc07878cef1c6952e6965252b962a58aa8782879b1f7690879f071ed95b1c0f99cc6ae45d3c6635f2d36b5623dfe25556236f722bbbb21a793318ecf4d566354d71b71d2e5a64eda9c09b1d762659158964a17813858c588832928b3714c346a29bffec66d2a5549ec229f17f8c7a949fbca8eee223f9eb2617c9db04e86d87f51667e128287b8e375cc0b1057148d4418e252c4a483de7692d24961c54b4586fb6cee98a54abaa5bd6be7a663922c747bd7d6e3b8d87a63e37253442dae6ba8d23a4733e3d37cece4e5356d6e853e99328ce6e9e4b2000872e14a0538f91729990981e25fee466128cfa1737dfc5a8c58502f4ea2caec9850274eb222840bfee6eb680c4a12b05e866403ede3c1c6d07c54627b1bccb0f6683e3b228ad30cc8e46f57f362c2cf9d9d0609d33a2b9cb21b1bc1c70447397437a2c2f07a4c173b61040106a6a964003e4a605f87d5a42d91eebbafca4339dbabd649a90d4eaf19611fc6e6ff7d8cb5ff7e6a373dd929c26117a1b49756bae63b78d94eccde8e1c06ee9b26e8942020178f9e92eb93da4ba5d93e3a9bc7a4b54d499370922d3c500e9a93c219eca5ba27333cad163a46b30526e242fb625a31e24ed9a69474da0c3041e1d3730a186521f4978010a6a8c34210b54eca076c094094a6412a4ce126c966045ef3881c1d437ce4d0a38d7b737dcb87d506f35546b3b7806d7560dd176706e51c0750657ea1df15420e023096cb26029e873bdf39314703b953bc01ab5a3bd8dc808ef8c11606d0737ec3e8f78b1516cf45476224c529b73efee483c37d34e38d722b83f6e38bb4b2000b855b1041cdcaa2132ec24d07660175139dfaa92a43ed1bbd84b97cfe76b4ebd558ad72717ebf152bede257479cbe2f6d46d9e12111793cf7f6ca87f0eba9df3b9a539dd12adf62ef4f116e8d62ff9f9f550e82c4c44b714b22c1ff6f43ae873dd92bda55a6f6f4d539d689c929ade76c418e314699c51c61da19976130db5c980f64d1061c2853a7cdba144be14279ef87997fa280fef825d9ecaa15edd5642dd12a4449870819f77a90eef027a7cc53179fd749b471e9b8efd733be79624bda5794b258a8979f84ac8e7d5addb3bd8e54137b9a25b8a0fdd12e896ac5baa76aa53a7d7c75321e2425f3f6f69defae7b610ecf0d72d59d42d95deab7bc45321e2426f89baf46277027f2a342cd36d1b25393623161e1cecbdd34294648cde11cfbcd88ebc345e089a69473bd05a6b0d6840134d34a0890634a089261ad04403669268a2014d3c1c333333333b1e0e09a79e46eff32ef374ded2fc7379a7b7341ffcbba5de01df2a07bccb5b72a1eeb9103c0ce2195c9d1de5c0588cbc777773970d017143f15eb1eb96d759e3987500013b9ab0785cdf893a32c7c8c351c3e253c953799f289517c346482aec59961b6787d9b3fc700458d4920ad3344dd4344dd3344dd3a74a517a69eb9579989aa8944f3a810a46a830840a345350826be056c514a8c0f572ce51cebab7128da97ec353d6dc6e8652ba265d93ae49d7dca90ca65e495d89244b3cdc453cea144551a7ec29f57c7db2f9bad5bbeac1822bfa2a1b61d30642092184104228df01ec01e4cdf2947a6dd3a927f32807a530051d4ce1094c052e006e55ecd4e07ac5d81cce7d3167a98359a284e51b96edb9afcc85b155d6919ac891e49f3c65c176bede7a954d88ad7d35230826af9d628f3c0333fd5dfaf297d6312f4cbb6a88bebc44540cef4baf38ab631436360f0eae57644145ada366f435a3bf5e77776daa8ab6ceebe2b4b6a9a0dd5350fa1a073f87e5dda56b4d47bdaccf1d84bad9da5e1c9a31218361d03f341ebb39e6e50682ad7c0eca3ef2f645d8cdd313bbbb61d5e8b035e9a7fdbc6ec6579f973e2016c082c4bc9817f38000a1310f77ccc31590ac83e0fad656720379785eb2344e5f6d52645ee254a7a9d807b7d69a4e7b42b3026eed32ea3593d63f99ed8cfaccac5fd93b96c1bb80718292327ab69a2951fa9e4202a93298a9554ae7abf714d5a4d5a7baeaf342d23877e974ce39e79cab3eb939df33a5792973131208ced665dce84ee0e9a835e51372742725bd30f323772969b07529a59452ca79799dce5b1fc9cc5902a860f7d6628cf173571531f575d985315dde7201e366ece4e6d1c9512eca536e268d6e5e99d3089c9ea275ccf7a5c9322e4b1a2cb10bd31ffd9ab2c5330bcacda4930be3bab82f6edfbacc6604c1acbb17cf3dfb960f93de2cdf432601f07c0b153ccf226b6f5e341f9ab7ffc2ba8bdb43ace3e17070adb226ab39239eeff991f59ea257a66b91651616592689b23c0a65198bee368e23cdb7b81ca3d8f20a8e6f4fc2dd007de27b658544fa690e9903c79e9e6560534a29a574ba30f2152dd23ae6412088adf9d6dddd313fd0c7fc802b23781aa13998ce68e748bac75035da68a38d364aa93ced2246705f18d3fbb3b1b090487f8c91ce0882c94088adcfd71f7095637ec0d6eb3f980ca4558fea30d6b59510703f761958c040cac2a7306202eeae02f7cd313f60faf922ada3b2af6f9c7a59f1a8920653d344277abb48af4c696529a8d04eb4fa8319fd9475ebcb8cde66d8ab0cf498bd57efb54eceb908df209ce0a76a5fa28db252f194a42af56cc59b21cc3286674a112ad13a5e740ec2f6243cf5a6ce34dacbf9fe2ee1292a52efaa88795f72bc320ec67cffc5182f63947f7d553d2a750bde975e89cff2d633cb95f703fae762f25ab7aaf7e5a5a7c413c2081fe1a4ee4bafbcb738257a253e563de45b9ea49eeba59494a44ebb4d32576a92d444559682729afe2a1e1395524a1c602ecab8fa224fa7bf90c22956afa71be984f75e93ad987b96ab2a87dd8c3dc3bf8bddcfc55e1501af8c7b90fe038a2c18a5cebd2ab35626472fad03e6f98e3d5d99fadccb75330bae4e9fadd39b5970d722e427bd320e435b0dd1d5ad57c6e17aa33d95d94b4d145e8d91606a496ccc18237c0633a38cf10d9d8cb08af579b201d377ba322edbc059c430adb633faae7cefb1bc1c99c14c7702bfc69203e7ebd37daa6abc6aba35af2be3a6e7e9d6e8953987e8ae8c9836708eef5987a774fabb306faad12bf1355ac73bb4ae8cc3d6a74ff4f18849707512cbd77fb233965ea187d9abb27a2a8b5104a395b77f16c24bea4e35a65b23dac0f4c9f7de7bf2555da101ebb6693cb85e74a6a404cc74942a4125a55ce3f9679cf1001694d3016cf5664a4e09d7ce80b38c7bcdb9a644ebe8bf960453f73eeb4beb70a7d455af9b5de3c114c2ebe69379f3bef40a7df4c270978f4ad0c6431b4fad7a60f314f6d22b1262d844e9cbb471af0fdb5d9914f63593c27a674a482a93d7cbc8ca6abec3fe45e6c93c2af35e5ea85beae505563c64e379a1d1b2c25a2a2c108c83610d15b91bd8af28fa663ac1afaf8cd26399c8d5d8f77114354f51194c15af18e3dd7497fdd13aeaa7c32eec6637abeae294f5c2b83a674a6d6bdadee0fcaaa3bae36d4deb686b83b38c7bdb771987a303821fc5aecb3ba7bc4fd6cb57e3eb1a3c210e1bafccdcbc30aaf79fab7938a0bd99c29a6981b4cd16086e5b2de8851e0fea695fc599419909853c68bbdb5281ab73ced5676b7a45be69e36e381c7fbd1b68f37040214f05f6b5c1f0336eb0a6c173d2cf9e33c758fb63e22ade5631564efba357fa31b65fbcfc6e303c14f2a09089fb5966e2ea1655ddd25ac1ea570665269eb7e46975f8ca5afb435a20f607c4c18d87994fb7d8e9f88ebc2870bd44f924cbc03430cb642f3347658fca9ecd7e9939187fe1e2f5d913f75aa939e784a9ee0496d13e462a9e8af19eb642a9d13aec532e51aaa774c57cd82c37ae508e7261e6aba3c88be1999213187867917ff109c1d95dc6a1dc092cdf84f12cade3fdc92cbf1b9c1be5ef351e7d9e2ee5cd2f0aec5e516a03d30b138f72f93ccdfca278f21d01024b1b58de2c132d11f12828d59d3e207df1eae25811558c8b7261547f6f0189580c112f8d8897f24fe694bbe717057e8df2abb1b73079e8355a87bccbd9cb2937c6adaa473c4ca7c4fb80b47676b38dc770f2298fc73b82ab2a6b78c638650671ab506e8d5e716f71d265319e64d98d0e61bcb82e6e1e8d6ecbb1d0053deb3e9e8abb32d845e9ab5e9dadd13a72db7037e26d6047708c37624abeba52dac0efe54ade47576f79387c8ce6bdf332e29689b83a95a17c865575207a8ee0ea4fc059c6d57851c418638c357a45de48cd110a70b0c5d7a9c04bf00fb85521851c5c851484e08a1b48ce89bb51392965bca3b0db5957259517a66f0fe5eda7cea6b76bce9460770d84b15dbb3fb3a3f5c2cc5bccd58f11d8e7667733a58ece5bd844d8761706bd3cd5dd01d70571362e48af50da10c0f452c68c70a41746d21c679333a188c6cad9e08af65d906e79552612b920cec601a12e88b37137680e75417a257e284629cd16531764ba203294f53f55bd57263a9655ff64f3a1ac6f65d3419f6edd553de841efd22bad10e8936132ab3239a594569647337b94ca0992a88cd15b48239b202007da828c4f803a9436a6f28dde36e248d27e9ed267777a63c60e6aa76845698eebfd8a7e1e9a42a77f1794c5580ca2b2ed4b812e0c76417d0bbbd5a79e1d851d04ba5d2434835d98eea9c5d148c9cb8edddd17c2cc9e36d2836b8df003db48280402815a6b232d0fd4da486b23ddd3a064c194b6c47e5d66d66b955dc7b209931995188661146bb4c575d583dea257d69c4acbc3b2e922d199650ccf2983f5cd63183d3552c448112a8292506bb3dd4564e360d775a564d775b118b590b271685ade957d3e3845244d19b0cc0d86ce424f013713b0cc5d0596b9858043201eb29b65d9b318d78d3eac2bfadceb263e3e9435c8c7c3f14e9b013e7fd7f3ca75163793ae9bdc7cd1cda38b87c628a0cd03e26aa678620a49e348f134d2462b257479737b94cf232c41cfc7d3072c6fa6ee6e76b118b73d9516cfa3fbd937a2f7cd3e802e9f0aca5bc311e3277f91ddf370166fad27f7195a23f190fd6659f6ac359518596b1445fe44beb8b975b0bc8b9bb1dec1f22d6e1e35122c5f5d1637374f8f01d7fb008a5706e2f839767af7038e9f4fd8e5f5cf8dd4de5ed288e9bb887d3c865598eba2b73952b775c4ab2249811e0d63f49fcc6199cdb8c1da12706e9a84bbd1f793397cd30c30ff7e653382606d09f87ac5e6eb93683ab883b0de57662fb39784124898689c29134dd19c6124458a14691eca093773c11654a8b5d9083f10e44020d0e7ba7db5ea32a3eeb4b610e5f4d9a3ab2026f7ac798a9ae6cb3d9c6c40c3919e8d4b0876e408088a7804e63c2a9c9176e38d55106d3dde6c5f3dfa106fee20d8e9ad9be3031d74b3c5a0904ae866884199750cfb07bb39e655d98c2098bdedd8cd0d64b2d8b65b93bd30edda8a7a753f511786bab5b77f50aa97703842089798009e8fbd0486fbe609e07998883125f058789caac2e1b1160787470775aace69fea950f4347ae5e501384ca3f9a0041c1c1c1c1c277a86becb0e55464184357818a1c570c219018be38581d74e2cfda36b1ac834f58f0602e9ed1f4f02102a0530d2012e796e704aa03b4312785d8feb9187d95d78b3eb09895e417afb968743745f732ad66973f014dedc54403ad563d6cd16c39b6520c807a85e1988eb41ff549f83e4abdb2b03b183f83a76e7217617e6baeed5f3f5ca424ceb85a17797925e9839e37530831d1da9733c8cf10dbffb2a1ef08ee6cd8f1f58ddc51c095e180b440c7fef9489b80217a6afc8915a1ce9ddf5bc1b5c6bacddddb08276ca7c3c9527abdb62e3934c7785eb713766cb9359ad73ce9e9e2e89bbc2f5bc9b06a1bba257604f919b8a093c9507a7678ba9bb82ba2d0d61bc2d0e43029629a614c346234a72aee70aea849b913074236535236594d27acb38ebe6769511b5b3f8ce62b78d58f1882dcfcaaa4ad6a8edc11a36ba4968257c072640434343b3c39e664ff40e28be83089c1e63562f0905acf6983eb3799b49515b37f7ac4a5947722afdd2952d6f8917df4442adcd9622e8ddb23b864ee3277473579ac9d756852ecd247df1e16ed09617ca40f9a5e98b0f774352d9fd7255c9050c863ee2f7ae8688187337fe6e8ba2acf49349611dcba4a85e6b574148615d8a9aefb82ea5a82ec5f5296b4c7daa6e732a945297ef59ef2def2d6f622f6f867ad3142fc625d00d4f898c32de4ee248f1a23236887aabff1cfbc3513910c8fedee654407f6fa09bed2bd0e15b16633175ddde7fb21941b0ebf0435d98eb52edf3b9b981c04cae2282ba1348ca962794c6b8c48b8008c70b434fc9ace1393f3373ca390f7a3f09cef1a02bdf9994fd43563c2428fb742799dd35b27fc89673f60f77e3a2b67f58f3d4954daf7f38b0bfd77b65d3ab0a09ecd65dc5037bd35b15846b3a75962da619857d091e18a413f6f70f968811a1d6f65008a28442b0e211fa9ca57598fc63f2781323eac7e4e6196cf24f463f1f4a3fa78f150fdaf24c3294b78a07cafd7cde158f4f73374237434a6bfc45e16ed04f8ba1d7e8956929cd40606a03d39be94520ec355a476cec2a1eb1a5058b51bd9e8c43200d9e10d782c6f1dec886e37d5138927c8bf7238bc767ea513ec278e1e2e60f7672dbe8f76103c78feedd743310d424cb268f5a0aba2894cd08827dae4cc42150e8b905a587387461ec43a7117f3edd6c8345f54cdd4acad7681df6c27c1e2222744dec3f1786d217c5b4da668ddb44d5cfeab64775898352d0cdd8e766ecda7736efe3bd9a6560099d8a945276e6aa20aa4bfb2b6b56066565336c56d214b33b635683bec5c9f658bcd00d148e54f1043754e18438d80dd80d4c6ca81504aa205005812a08242b08f45a6b0555acded041a0aea0aea0aea0aea0b73c50831eca60aa375c41569621ae21d043f52dafb6e82dce32a2fafc7a0efd7373e37966398bd1b3c95948eb3974166ff1518b9bafb3c0ae8cfb5ccce462a2ea3974651c06ddeb5a5db549cf1154810bb849805b1554d0c1f4ed57555595fc95c1e4f8792762555d174db2c4c39f8c4e51daea55df0c3f59c6f0d5bf3e57fffabce57daad70cc67ac3fd01b5cf6b5541f596f54f5f9771b85e55bcde1c0eecf9a2c0fb97ca75bbaa2c11154f37c75318eef3de975e81d73e6985b5ac5aad5b56ad56ad56ad56add65b9e655db5deb2ac75bbc4bbacbdb9f1d86a9d932ab8c13de0564515ce80eb05e30494d77508adbd6686b83a2ce2e5a5571a5ef4d65e96de5e6f79571fcb60a8374cafeb3aa57dec3a46dff2685fc6617a9778f87327300c3d75bdc559b7cfd8ad9b1bcfb3f5d033e821eca1e648a29bed43b78a15e8f38c5d19872f2beb975ee90b1d69de1c2d8e664f40c1b283b602c43f410fc57750946c05884e4cd38d7146ca38f3032c4119a79c33ca1821dc00156677c5a3ce39a79414261fadbcb0c558060811e07a1a711b9c54462ae36cc2070e11c61b0f45385ee8ee6422944162aef0834f408c53c2030c1ed21c60f95c3d1a2334ba60478386cb31ee1d693ec4e8c26b49c0f935481d74d10739cf0a32c2166f74016d24f9262906e89416c38bb92442e05382e1eb798f07c33f242d07d6e0e0bdf71e129ce14dacc15062e008242d2809c1f00b582e098931b006c3c70bdd8e79a792a77287c09bc713614d0d9e792ff680baa16a3091a0239f84b5ad11f0b96e27bc513a256c343a1763ac78c08eddb7c12baa76b022248532104788a123e15c77a034d4d62cc1f0213a2cc1eed02d4981c59e1b4416cb0b5df4c01a58432df696bc259446a74919336a74a4024a318c47bca45014482448e190db019e9b1e0c1fb2430f195e8f0e1e192a96f72d71a1e42d794b5ecfeb993c32aacc600e2c592a29e7445d56652bb43bf2b1857adb3cdb36edf1d0079e86389e2e74a408654b89a123358eb4c2451b1a950cb06220a9c51abc016c946298c88e68c80083161b8d46236a5d68d0a0580b9196432d468386922178200e1784314617638c6e04af054aabe71c0450c970166517188e640b1045308b8d5a6250a309890fef1f1a788806fcfe8000c206bea1dd5de2c188451a632917c8aae306303c85f0135e4638e510f05a1aa1b3d03e3887481f2505110ecb0b9b0f920465093e2ca7b4c01b431d9d9070d3f9d8a208c719df1de69c703603c0c7886030274b0f30eb482c98cad6ce8217c237529410138d62445002a28e398032c618e38b31c6e85096c02f80c2708265a5a2fa01431f3004008628189a6088c1660079211e8e249eca5bc1198b75d41a1209efdc9116e31c96f701991cb00ae786a441da8ec07644880492432986c59014725e1a2a15a13660f0ed48430b29c59181c0d0060d19b5a2ed480e8ec0469fa67491a5fa40538a61a3d14fdaa97894a0e12328c53057b58d08b07e6e1b0a658c6947a004da110c6b4f42a81d34c183437370aec5152408dd410a5349c9e629a1794ad4f094ace0a9a1a2095d4143f3943c2553891412631c8d2e1b027964a33b79eecac790a0bc39a0c89183faa0f5c9bb9b421e183629540195052c8f3029c789bb314d142da2753075659c6477a411a58593910ed63cdc63450475248b8d46710ed3060239e6e55031d8e9c1f9edb81e3160b96f5e0e86b0077cab18e076c0eb625e0e3462c1006b2538bf9d97f372309c364f497d2f766cea9cbb58b418162dace21d411c5fa45080c518df60e2697d6f71f1dacf1b48b08463bc083a680188237e6c01a54d033db003183cbcc1cea540c29b19c014502c2f1cd27c78b7aa00874438e4e686e61c01be242a849684e561b332937142451210247574be2a0887e3cd21871c3207a6124212e9066b57b3dad4422c58e21f60f3b33a89c4d276726017b3b7ee74f3f1110f47d5541a9d9eb1d670d0c9079471ca39af8cc45146e9049c992f5a01b1a45964e14805f12e4e0860772a0b1849084883050809a18b8d74398035131067d2088e7620115ecb1ffc62e60e7e940f3008a580e5f3073f1c3c7730bc6803188c993baf07c5f14e1e176fc0fa79f2e0c9d3209d3b73e7c201416d77f588afde8531047cbf077cb7760f5a7906b70bf1dede68600523c45822c84cfc4e85cc4483668a372775ee458966834cd2c15906c63c243df4a0b28408ef3210bf1799a271e08b1821dad8040162644eea5c0d961af8600a2347ae185b83734c4b82df9cd4b939f174424a6767bb22d8b061c3066e49ace881a6071a153bf440837b50a183ca12153b8c21098d1a1a35346a684041a306d33042e3091a3434a0489244420906d7e37adc15ae07bf1b97c45d312199904c48262b262498aa99ac3059d1468c1829620477cf14455e142f8a1a2f0afc8eb0d4903492a608cca2a4c112670a9c2e3206248d838383839ba7b2a96c2a9b2a486583ab9c0a481524099024120cdd353089b371362e88b3c12ec701714192c0c9c74be3c16da3c40b120bc402a9e20a5354e18427d81f1608b654d81afb2349ed3bd497ddb1b090483d7a1846a99b615361f5ae0c192727558fd7a3ddeee603ac7a40180ca09f77a13f126dc7131ea0d30332563d228c1e7d9876f7769dac7ac8e902ac47955697f5684234ec2e0cf8475543c0d7da5977563d68a3ed1e8c724e96fb8331c40c6e5510efb6e643f3a1cd33d4da7aa0c12e0c04ea870eca1a0edd5b597e48b0f52b94f5a88468f8ba303e8709fdfae7ceb0c142d77e0edf0dfe3cbebbbbbb618504753cce39e71c12f3b921f8f3f9f7de7bb242424225104288448c9f4f8f31d20a09283fa72ee55421f166d399a14b5548b81da2576a4399ac03565f2b247a87e8d5829c14a24b1de9852e8c2142bfde237477de4ef3e17d06b7ea3202f4eba12040d6dd2f2cb3afae5b310f09b657c50ebde230fc6894b821ee1d664ef40ce6a61f36e67bf3d1f780a7efee5dcee0e770bc35ce849e0ea3073c7567f0746110113fbd47fc443190216e2f4a2815c58830bc520972ce4e2227a5178610f4ceb0c1289e59a6f3eed5cde098f58fd6a1efd1d70d833acc7478eaceb0c1600c311d7e8ad9cae049333983671663b1bcfd03cecc6e36c49e34f2a8f534cb3630fdac598f86eb021aaef31086100dd7f768b85e7a47e70c96598c0d1cafec9507859b9185921c1bd870c5d46ef2e1483de3c3911a46d8309dda8897ab44afbcf44acb0bdd2fa3de96d762c33c83d7805996305414dd82b56ab5ea17ba80c1d07a6a6bb594a2a8305014ad5ba0284a691828aa0b144529385f4d189b9a57c6d9a6e4d0e4d40cd0d8d5be220ce34275205a6c56cdbe56f260b9e9084129497a0183a11e7126d9d9d1de0738d2fc3b045a4fccb457895e391965bfbb21df155e72a15f61ed9b67967877b883040326ef05ace7df1570848b12eec6d490e0d72f37ce0f70a4f828d060e46e3c215a80df159084139e80df4fdc8d117e51a0c1ef34da7be99558af12b333059e65defc342f5512b9d01d690085bc16b81b2c258d024b799d8d234951e56c3e2c4e6f9e1e3239683af6968783c5037df470985c12fdd0b7586f0e87c9b54097f470987cde5c53693743d0a9b7cfcd1644af1a2ccba25337f774614453e859148f3d8b6e8cc555c41234cdeac2c418a495a8c40cf8a4450c158d0c0000018315000030140c06c482e16820c871e80714800f83a8446a4c9b47b32c876118630c41c618620c30c48001811993990600c078ee628d7924404079700307210821b6f5f90eaab80f21bc2e0a44a65a36b695c85434fbfe1576cf3644be6a906dea98c3e3c4b4305ad9096fb661d556a5c708f39e8e7ba117dbce39460dbb21799e60458a395dc39f2c94208ce2bec96a60c9465ed563beba516420548fd10cea463935329e6e5a780a9dd4d475aedeefc62808e6fbad7c5c2c499efb2531fe5c800e9a4eb21ec2ef8285b27fa1728d69348682abea5df4a34948c3ffd745c5243d47a835b63144f275252327e5bffebc1a486dabe16aeb2e2f16275c40acc07e972fe32e7a88c723c655592cb78995c8dfdf851f4bfcd75b2ff67df79d6fea427f69d3f98b48a1707b7d5cb24c3802a7c4245200eed95a9bb442d9c62932af2a2f0aea4d034f4ba1a03e3f159df50059bfbe9dab539b533654ca016e2ef78e4cdf6f6f29cb4f2a7dae129b4bb6bf31c7d944180c8251c35bf5f82c8a9afeb9d768eec6bd02ef117b08edd68d947c453c23d799e9de663a1b4356484b233406e0800f58a6df9d8d49030af9903bb687a57c66513ec4a085e14926358b18ba06213625e8462453029d87c72463d4907e2c5f0fd776e7393042801abbe80127aebcdd8006a118c30c1f0dd3149ac441968c0f88679821b140dff3c5da3d15082206b324ae1f0bba49d06722144cce06bfc656cdbe12d19aa580c2b49aeee63f57695fc290bb603f8635382e3eb255bc19395dddd60be8b7b8fad67cb07b5bb57fd4b728e52ac2989966ca4b94b58a6f45606517a1ac56d659712ef565242c7dd4eb3cc853a6043ae47c6300f89e0700048ba028219aabb37d17527a641016cbb732c3bd3696fcffa1119ae7adde1b106c6de58730b7df280bbe342ef2be9872cdd48d95dcdd6535a89996b0807428772d58af6d939ef4cc6783e5ccbb10ab0ddf39f82c6d42c341825bbf07e0a8f25f2392cd867be63f3de209490e646110218710b2314d691875133a16a2efb81786d2c47e0a94be7df108600f5e230bd96c7a3fab729c50dac55a840ba0f962b9106e7725821f9d4015516cf7daf620079378918cd626d6dde59ad926b576fb5b6372c1027ae5fb5db91393ba87663a6d51449b907703edeba7d8972580550d19e059fd98317220bbf389a0b8583c4aba02db9f4d6adcc9b243b0aaa3fe4c37a6ac38d543b09d1a3435f0b0fda1eb5bd869809833fbc3c1bfd298dc050bbc1322d9252c8630ed35ff49bacc1efa9ebafb99f787691503ad93e7e612b2a4a946045e4e2b6c3003e061cf800f4d9898386cb8b3b35fe03cfa71935f0662ca46473f8dd00a5addf1f65b14167481b02b5baae48141cbd5c3a1b8269d8a71c5c6ad96ca8678da18a009212b5bbe296b2b46d58acb384ae92e51dc583f78e35f376423e00426538335de1dbf9d0943ace82333817cfb821abd495be05700cdc4090e7029841b411cd0007fc3df48d11720857e47fcaac7e43c1371c6fb03f9037db3f8d57ec66e90ae1bcfc37b824a3b61843bcf0efd8dcabb99998573024a45f4c633ed8767d29d3f636c3378038a1ac78257054c1613ff61ba04cfa3e347d0eb31bf94e45d24d9f09cdb94c2d2d9a4baabb377149b5cbce8f8880318453fb9d13f456813b888e651eb7d2aa313e7968f00fdfc747f9d5510146c29a7e4f675d7e04a14615519570cb64e7a434b2d7a2df4d34bb4154073341f3d918f714832aa3440b3732ddc5ba137831f604dc3594e99a8c2b479a982c58612906346d07d544c708053b5bbc4593855c2b730376941276370d670e08c2c87e35ae7d60fcc23433e0e3127b1121ecb7cc8675f0eaba6578d489982ae7d3e277b692dac574c014aa7f23b1e3df41dc06703a337ec8159df2ac51a2fa2df6f65fa425266c5e28bbd16b9688958d86cbebbd1ce25443f5b5c7832a30d0f6631d416f2757fdfdd3df775678de091db5a0c1d6e116808c015771ca3191406e99cf6fb096d2149a48974f9c635cfd081fb1955e1277abe38e6291175bd5b6871330559181b7a8147b320675d59e4cd5059fbfea362043ee2599ba8bafee37a18a50b22d67bdbcc3a0e05661d65e97ee1d8048916995058f613d29b1a49adbac667a054ebdd46bf64a072a05292aab2bc9c34f4f4d72a2896e71d59aa8487c7b8654fd4a4b1e878c226dca5138687bd24690584dc7ff76327a4f6f3708b42b9f17b51824a1c9869d1fca02a397739cb86b253c985381ca992157938da85612ec846fe9c0241c385ea9b19919b0b15f232c2d8ce3544af419646e959e85d2c623ed496b41a1a0241969b5a083389b1b7668cb60ca88a164cca4f6c87e1d1e7aca88f96948bf3959f1d637374d299b51b77596f76b8d4adaf26a66b5a76aafde958150156a0babc2533b960cc6522538f74dc3b8ceee3d1479066ecabedb0a2ce0846b765c3761d8f3ec1670cb41ed85a472a281330ef98ff2baf8a785f6ca4ff9be1f4f05996b3f130203ba2d63fa9f750742065c713b32bc3c09c77f2a0946fac6328962edbba6e7127ca2b5669650f47297516302f82403935b5900e4670ead46442cfdfdea9663a71bd0706d4450d90362ca82d508852dc64f98b0e4bea62cdb1faca8408009115962555599cc5dd9c22064ecc695894a9225595c9321f9cb35caf9c1641fe0c3e5b0927c4cfff4f021d9497f587ecc255779d01c6bae773581d5fc2656ce7aa1ba38b9450418bb7eae26c3002625e1b58098e1fa1c0f39e67af0664977f2bbd9b658c340c86adf9f1ab0b350320733ac40f654fbbbeffffc73ff15e826aa44dca34a84a948d2bbe1b499aa4baeb98533e38c4068046d908c602caafc31ae74db48b5a73d2034f034be8f6ca033db5f8e2eb3895c01c9cd84617d4a4e00bb10581d9a6b23d9c9f44f386e05157349a36e4f46f82a9757c0ae891e9748d19200aac6940d7507e025ec30a5474eb3481d1344d2a3258339aa94d0daffa5d5b86b034c8d249d640c9295a2b5976e4d93009a06f4bd9aa6065975497ba638bc9d58c768b1e5c35c3c9d6dca18b5f0b282e76f4e975010a4cccc1ee01b7b84c687a40f1fa6de80de3810b212c5baae130c5c0d32afd644314098f9e3c1e82e72a3a6a9bbe380d2ebaa66e05e4796d5c16340866310ea76aeb91da5e880a3f44d88ea27b550488a1325ee9c33a15217e7aacb29f2b49fbbaf535abfb381bc17d8800801bad01f50d43414bd7f686298f5d61c706432a3faa9c6795383cebcb6195e7416095497920be05c570fa71ce24eaf974d97ea933ba0afb528d329eb3c29e3eb4301de86c7ee94aac9a0ed8b0312b342ccbdce937eed095e58d8e8189086d77121a63ad21745b73880faf0edebc3eae48f703030c10d5a6548aeb62345c13603cbc157d0b674f8cbe288671743b5cb9cab45904c99372e1e2d09d8b2e6f27f49b2af0212fa75386474a28b473d41ddc126f9f052262a90cac06a4df69bb8cab4e3c7e213304d7e84ae6e14958e0716f83398f02109728b2275bf35a57aa1ed4194a2e4f8aa3efdea6ba97f8bb642a3b71f21f94d5f086c9f49de22505dc87a3b05516aa553f229bbcae7e55bae1aa571ecc29db3b447bc331855289f69082e0252896f92084b8dee795bf652abf4727453d3ecbf5f4b173c13a66fdd4f71570518595b7f07ac7604b0878e2c2afd8cf21f33289038a68db41f9671a6977db676cb5ef634de31ee8af89f64b9d015967e88b41aab70889620f0bbfe88e3752bf823e71c3535f5461919455b0a8b423a479800dd4ea4b631b183ef5ace69597d1ddae02fdf62ef2eaba0dfd51955de63c1684d1f3ad2e36885641c2098496b9b62eb7977271ac3ec2d23e4d57b2cd2ccd3df3bad495aa54c8404cb264eec38714ec6405fa2def09fcd29087b78b75101ebbce85f5ba27f877f396895e2c8902fd445699012e4b73c9ddc82f4a78a61bbd50460d54731ffa469d13275cbb8bbe362de2ead0a207228944d75d86fbd7501991f193a5151bbc9f7b707ada51c68e490cebcf7ad3c2a11b6c555c8956c8babfe62ebd462b8e42e51208da4a4702bef2928b6961d6b5fb04a67505cc7e3882c784ebf48344d8ffccab94144ec602d8069f4aebe280c4d46631a9bfa7f6acb184ca6a1b5d694d4f958dc69c73fff2ca34c4492bb6d2dd60853458f37016818eba0903aa893f902a049588eb0383afa2be5456f933abee48357593a52bc17785ad39f801dd44a9b57d6a4d880c5e9e8021622e4f7e6fe420916e2d89787b6eac0f3504882a6c34d513abea240b5935b62b6a0e2077326cf8f0ca4993e08d827fac33b9690933be7932743f5d1024f451e3f3f2a55acb5958b55e02f582b0aae6865517ae27af66ce6b39157eb839afb70310d06855d4a726456918fddbe1ddf9d1fe9ef502c1dadb800f93cf4b37c6cf64f39fcc6b0b4e9a24c1635aaadb21bb138198e18f63a812399568ee63c102e16815b65523b7604a867059ec19e66cc4aa69e6651fdda7d2b3d4f54b5df1fd3c599b556240043794735a325aa90288bf118dd5128123e2270a3cef31c18de19c810a1b9306591aa45f10be7425ea3f88f52b5347fc143da73d6375bc535f65db136b07c84eedfd402d92c2d088e47a2c58ed23e8e18cda81fe10a1f64e5730f24e9d24545e157644f70004d6d95f1ccb071eac9621e2f52d2477133b3252d807c755bf048656f72da610129b291137f27d5f7270ba90bd2c23cf2a9e4b9df23e3fdec052917e64b69f1526c12f7954861f3dda3ce9c4962824a029b655cfdf7f569eec21b21b0613a5f370131b715702099e86da5d51a90b930d652d9b0159de548995180705a97631d1d322d4574d5ad9c37081eafce22a519bdc649aa4f3788f48010fd86e545a7dfdac38d86ff7a41a2224c356459a4156cc69b0f0f59181aab0c196ad8955e0df547b8ee2ae77f1015b3d788e5438a1fe9ac37fd6afe8bbb78a35e50034119b483526e10a3361d1c16cc407b061090cce12d98804576208d7560abd23a6571ab97c890aba0450a30d23038bcb8604951e8387a1d4929b6c7e4da5b4483e26a3d84e02263b59a83d4780efe5d94a8d0cc0c83578f0af049c3664a8c966dddb1cfefb4e37e3a5f3a9a57b208e2157562342946f7f6d999a3155813c27be3abacf4bdde864ca1a11ff60d0ac015f118915d285bf1e6349d02730523a9896d057f167db7f235813b71432eafa5ca31a61249240dd1dff411db1e8319090730dfd1d49401d7b63666c560fcfb8937623ea2f488d47c94d140d8388b369dbc40a6a4bfb595c8deed95cde9c9a608470f97374ea40a72d9098beeed5b7b6acf083d051a660920f5c9b999b987658141442e11381e32aba38f093aa03f03fbcd00cbd1b9d2aec8f267d88286499ede2debf3ac55b13edf494a188f744ac558c6bd813200592a0505b54598a0aa8919593485ec5fd00ddfb1e382a6a8b565684f11137b57d5680da384354f109b7f324d27f581556b73326d45703d8f36cdbde41d67107e854e2e324a4dd3352b93e0554ff02d30dc08dc145e4b9d08758394cfd0a7caf2b7f24def7c79bd43494c834a6d468da944aa22de6215581650d3c6f2e4af4983ad8e7c38bd40e786482b3beed7368f352d465892efa030568c5d14e22bcea8530b9765220c8f3b4b38700e7a3fa2766f555c3fb9f3e092523b89cce6b65af27adfe96d33e9aa5d83bd7070c41a4593fe80212aa5604d2e7f5b3eef82e9a8c7820be272f5cbb3b2363fa3b3b7c2cd4d694db35e4d327e6a46263985abf19cb8d7f77b7a3e1418359c486fb310b7c2b30fcc1617c7ec7a385afa219478b939efa953085c18c36628007691a514350b35158218ca68fe2d41fc4f0bdf1261ad71a39cf3447a74569274c1959cc817ac239042b0f08d1fb1f186f006e4805649f690bf418b40e9099c65268500e60b58c8b592854353f20b44139f7ef3e937a03d04b6fcec2ed9217e1de99b786cac2c493eab8e450b2e599e5c5268da449adbd2b400916374ac3a849b56c836fc1dc0048017465912170466a6dd2e3a3cc332bea6e9d71e32f7a591a1b32ffd0655eac9f1c52e2cb2c65bd7899f66912346c8ef1cafb6ee08f41921033a33d8f977d1ca032ee4384e37e712ac96dcf4ac7151f4eb179154a3821157431f8be11f4087a30498b4d062e45a96b788cd0e3f68ebb9ef51dbfb5297e03b3d491aa258646ab975ecf6a8e3fbe9c62d76a9548362e3d7a7856358b185a8ac853c5362a3dfa7f56390e663070be153ba396001bd7017d3f6b381eb3e1437e2ab6f01889d330230b91ac6344d680478fc64b1d6f7cf37e38c5e69667b566116bae63fd0c37654abf672dc7175f4cb163255a2249b3b11acd3cee9b84154f36b6a7d68ecdac4c702961bda710d0593fa28b2e6801fdb1c755a27908fd53ea21b601c82fa4f061564284811d1bc4b648cb6ff57664d6a7a5a0b009ace4617cb852f612cc301a5f1d961b0a9e563fa00c423cebc8cb42019d679cf937bbdb88a228111b5faf5ea67dda042d9bc0015fb5f38c8d63482532d4c2315412c91b436e5c0b0b657ef74ed7fd233fc7b77565e064638d499ad8784e197eb4b7e997076e53cf51758d1c91b59b0aad455ef14fadf5237f2b48b9b48b4b025cce536fc2f8279611881b752f7f0e194163eaf396261b0d2196875907403d4cef2d2814e42168c6f87635815efdd6aa2c4c626e286877e6032d560fe15845845648fdc3d452082934a7ad56ded17e4efd95b86b16c4346a180494b43bd3c67142c7eb503da5d46b59ceffb9334193c071eb84a5c8ae9f28bb1a21197b36590021ba8990b6d3185fc15cab06608109b88c29bfb3e06eba94119665c1e90f07cbf0584cedfb18932bfbe0dbb019f416994386f3582d4a241e2ba8415b91435b45d05f4aef9f3891f11820d60eeb5efe5dead49a0e69b56825d09d9b22bde051a4504581e3d30b59bcf694895c7bb8676b0b17b7ee16a8fd83f12f62b637636b78668a1336740146467019049c5667cb227d2fd3fcb9d63273c193aa6fe30400325338e0a94d6238c296423fab276756c18fc0fbc38bc6f42a44680a52eaa57cd6fcb045d68497256d8684d127ce49412ff19d0dc1264ad617b4aed971da47caa43687b6de62710dff74b0fb8f05b0b18f90325d17fccbeb1591d46420e54cb47cae41d70520d288dd502c034e35702cc3cfbb9b575b172d6abcfb403c4a0cf1b59b8fd50f2746ea6f73edcb349d4042c5c8025f5da98c95189f89d4ad607bb6817400d85655449cc926626a942643972d47fbd85fcd2d3204fbdafed03fa2d23bcfd0da874399278fe404ec04ce164dc7190a32a3c5d49870a2c2aab16c7102d118071d20f3e96326a435b59fee2f7fb1c00730fb6a8627c107badac06bd03ba52003b81e41c6076619d34b010635ca17ff16c658ddada5dd6dd3fd93aee5f7bbab0f241dfa494e3c6cc68baa013dce0b91422e15c9042ca6d0b2d751d922259ac5691639041e9e16b81c0649ca6bc967be41b01061da50a6f586b96b81e77745cb22e572e917f145e17d7e1a06a891841c7c49af6e7a38d865bcf5a70fc8356bb72688340cdec3e4c9b479b956313a0c863984c3c6902006f6473eaca145acd421bb5ab05dcf8dd1dbeef6bb9fee6b16ecd4c2513e334c56dcf03421e8ed828ff375384b1033bd2ff4ba6506918eb3baed9a4d3c88f8daf30107baeb85990429babffe0e6754a41fc7e5045377bd059f2718cd08a17e526d65101aade30af5701611e1bc6b8431c0c748e7aacd69b75b0d904878809b1076fe9024ad16705b12a5b625ff269f5d995f9a91c537deb8a0223525f0400f09d94aa5c86c75cf3055f9c10aa256567e7f9607eaff2a55ff5baef81445d6b40fb5e11b7319bbb7c7e6a03b1256e9d220f1d31d2657da010dd23b9bcade59275bca509e69e3d7cb424ce7a67511f7e9be3d46fbd0e46863fba3ef9ac976a089379c5c5e7e02d5272edf9970d322b610b9f10a402f9ef2bf219950899832266bb9f6354102e39dd132d201f78c4e9c7c891859850a383928bd11d61f9a94b9f983eeaf26c702e1b5e6aed8183ab8c900482344f3595dcbe7ffe2e82c0a70a160ce46c3039ae842cabb2de1c389f3de21f2162a1aba69583732e753ae333bf0ae2d24c6c7f73d1cff4331855683c6071e0c8a5d9121d18daf4d7b85ce8123ff4bad3892057d931de8750c7baa7be3a864d7f6ed7915d5c62d598ae6b32e667b8f7e8f0b9a89e72663285fa136a04c0ebe3471419fac1de8e8e3f64f90f555a99ccb111f830db8372ab224f6dd383cad69388a68ebc1ca357dcf0810186776c40dd746434e4e5c7f506d873ab311db759a255b6c25cb8814977898f27e8af8e3343394c035289d7ae115fe51fab5e46ae367a41cbcf3d57adb86e6cd9aa0a091d2bef3b730b11451b23e743f789687bf593bf8271ccb9242613427aa151ab30412e0ef41af4cc2473f874b875f0a9993e98c47b393d8e9b44e913d93becacc1c6f634291619ddcd783f9ffa11603e3761c803304bca9629b55a0cbcf94f1e1d8e2573ccbb0256457302b87bb17628444e8dae5e386373cf9c54125dea6a873384d77ae3c01ccbf367734b52ee2fedabe724b07b826cde3612e90111500054ca3c517f8e463b729335a5a88342106ecc1605f1f8cda60f9e5f8b8ce5ee4fd98e4a1f0fb177e7332293a477f2aaffa35e2ee70d040d3eda5aaf2465d47919642f375e52f260c608aa8d110c71a3cc2aef115d7ca35fdf63bee59df6108094ed08bffb50368cd6b06e49b17ff75d58aa7ea335b7b904036af2466d8c7a60910cc40bbca38415f9a09a6f91eb66d31bb4dc91a49759c91772d42fe4437ff822c0c195860440f30f91036612b09b58a3a9e996c4696229e29412dd59360c2a0b2083e2d648f282e4ce45409527ec7051550080389a9caa623704ac173219e0433d531e0e51a88b08f6db0c3406e5475aa60dbf53351412bd8ae7826e5a6605b449593589091640661d14eac6b0dd3f10fb0cdb6c0402bca0711b56299caa6e2293ea5135c47631aabdebc9ea1dcbd82d874a70c42d2fa4e157c94f2c4181f913ba0485ecfe61e985c44b91160bc576be0512ae71ff5774f02a8efb7ef6f7f44eed681d4e3468923e07722c2c86d859c69c3b333e59d560959df35981ed5f48b8113b55333d2dbc7a95a52d6c7f00ff542216f9d88417fa83d7eb39ecd88b78295b5f8b8b03b227a11803e636df017b929daa68379339d92d8c00bdd3714fd4a526780ed6cdab435dd5392b21dbbbc1ba83306fc714e870bc3f2b294b286781dc39e307d2390b7fb0eaf2b0aa5a5ff095874fe2cf1075f21b4bf69d16a73e94a2e14e1845d4cd38d3d853d0bdfc6a65b99fdee234f91bc5bb6738efe925090234b1649c599a3c26127540b49a2fa6e160b6e4abd17b5cfb2e203a140128e16c487037d08c941914caaf712c1ae18b096e7b8566fe2600cfc86f8dbb0ea9c9af5b7f8858f970c79bee1cff97c0abfe9fe39239abde48cc1f7097c26eeb79a24a2e343f0e240d918a6fa61740159786d399bcedb747ec2e3b28a003440ad16b8febeb19f0a843145cd958a36591948531736774080767f16fe6086432b14bfa4eba7f873d1349adb0ea8c44f27817b2cdcb999e8cb3d6f38dd8dbf38738a319da1ef39ac8f6bacc8e240319882b5e397327e33e31a5825661e0c186ba5ea654e4b119bb7cc323fe7054a76a390a2572e0db54a981324e50123e679293d7f698e740a64f69ec9f2898ab988bfbc91fa1cd3358ba2fd3445fe19361725422ec20a2674a338db802774dfd6f138503cfd717455828dde736cb91144d312aea3f8c5e66135d70d64c5825021abe5ba01cc0f59babb7f151a274ae00042f1c581a853541bde9826b800b49b013a77c1ee36d6229782758b4aa6f9f6bea2752be48b16e1e3c403ec0c70d37185f46316dc89e304f8d70bc898ca1dd2a7339cf923839789d5ef42290fe44e123f1b3ccfa909901483bc02e03ec936cd953c609daefa1e3b63b9a7007f0b8bd74fa730b6994e4443f22213bb21d493abf240a03639bb292f17dd936bf6266edbd3b6ff1c3835a2e95637670d0b281ed126c8b50b4508e4a0237ed056d2bd29b1a3996f9386194990434d6e4af8daa02c7cd1513543e548b6e4f4757bd2ddf5b4ab744837cc067e254b9453a97f762017e6c1a7f65e2c3bec1b19083339a5c1377d472bbef0be30d184893710e488c1bc3f4a6e6a8d2c39020f0963b12f3260ae92b5dfdcd8318157088b9c187e96ef085ad07372a0b4be133348c0297ba0ee68b739b74d506891c04e4d9acdb6e04b01e2177326f739a46f3f86d86928227096f7f0b40c1395a9ddab2512ec8d96375a9c429ccbdea0cea2939cfafb77aaf1e006e4c64c7c126220268a7a8dba96b34701b3ee9f4e66cb4571b9ed6ec8d3bbfb2c1db6ec32bba2627818c2819cb080ce5ba0b8bd03397aa503454107774c57a59d0cdf4e05fecbc7d121c515a44654c00f9236678463d3e02cfe5147a1ff149b2fba8271165fda4843eb5e1306bb9e5429444399a70e698d5601efe058139461db5f05953d64ee03ca2a73bdc95e5e26e60e117df426bc29c6217c20b9f41b6f19cc7da3ac14f136e467c3a6fe5270463ae194d5b08e4d0b6c0afa7181151bb312c2efb9c59bf5a99ef7484dac6a336c9d47892fdd8d0e14ac1d0e41fbf443060f084d7fb1344c65f372eb897d6dd460df4dd286fdbb8e010efd9ee2eca6db857bcce783291932bee3500ba3468d74bf079c4c70b91359d7b44a604cbdcd356cf62ef49e08679b77e3782304a181346f222c99afc2c6bf456e43b6d96999169acc761f02ffb4b123090b931360aa925388f76a25c3b4ff5e287109823e59cd379d646eed4b660b4ea508324e98dbf6dc0793a2b7092f2dc04323e9b86974fd277f6a5061e44e30b31933c212e5691ff14e237ece33e47090835858791ecfa8fa890c1024f92ff20259e6b23cfe6d470da722e419c1544c55f1e9d4e776443a87c57a539bfc7002bec4d5a563dff27426409b44fd8b72b39eb4e9fcaeb08a4bdd69845a707999032dc253b025c015f23fd457ffc3ce2242d423d1fb47fbcea1f03065407e483467c5e29d25834818cd841d152408ba920067e49d8945bf116f74a0495599f152a8942064e92996f2f87409036342f23ca14821dc3ae1df588ec927f538081fb24395147d85493b4e38dc8700213147ec60329975bdd1c5245d19e50857613d483e68c75c80c5a4be5cb50fd455426d1c784974051dda39415d0ced0215023988a66c1e349eb8fc78f7df639fdb51dc441213fdc9a8027090ccea361519fde1c2de1a81fa0ed4455d93979eee8a7e64b2b5dd84aee40d0ea4a7231dfd53323c648d64d72d2d12b4320151669e2daddc7f32e4cf6aa3e0397b8c994e8b3b598d5e3dd21f48c06bc2ec152f671cb519656728aad03aa74352227a0bc7f369fdcaca1e251a40c545f7659e5a877daaa6483ee816a758588fed44ea6f6e4dcc2cfa29029e1d531edc8fc82ac955d8e48794eb43cccbabe7df0259ff3d9452d1e4bfeab9e8ff659e95dafab2ea5afef2b0754b67d9d193f210b26288e2d7bfac7ffb3a13cad0ec7532d20431643ea0c438a7dd5e557e3fb92ab84329083254c71441d2fcb994e197adad9e880f842eebe0a40dbfbdb3f083342a02da31bd42bfb809d3607b706acf1b9bd84168843a7f4580127b7aa6b4a0a139a9582d01fc875ba81a964e946dec8e7856c74e828d7313d429ce04078e49b0348968d0d92048bb3e8cc54523bd27c70c941ab6534d4a59ea8ba8a278fe391c622a49595f4a2cf170836b1728a94ffd65a149d0e6defbc6a6fc075655b9d1d1f2bc6190ffaa29f85db5315dade179561b952ff7575d82f2e72df8e8531b23e15b0fc793026152c3cfdaff9516aa5b56ee9a8d5688360acb14bc47d669b4639f69b4a5cf26a6434938266a7d408306a4973511d900391466f32ebee588c6d998810ee577dc863687d699f07cb9b362037be0e97ade49a0a4c09ae06327f84fe6d59df263d4e015c43cc6509dcccd596f1cc2b448938a6e618e9d1b61808e23e4e9a5a58137427121bc732941027dc01024c15556496684c8c1cd3b992ce64a5560483be6fafc52c47780990c21c65643f6e48bb42bcc8d27759aa9aa1eb3fd59913de5093abcc7080e282f49c68b52e0a49ec4fb32e8106055507bf1b6a06405795cb1a7be525aa8c24a6fe6c8324db2959f45af90558f166359ad6d4eb58aae09a90f19a454ac9a24eb8b76311cde6cf415f609eecfca57912e57f6005e70c59c0bc92fdb6ea96db9e07143f3855450b1ee7de2bc094a31b38f57fde1fb6fdf8772cc41749b0d7d45b2129f6feb041b601b4edd2effd308fe06c5508360ac1497c500c3b44e0c8297a3a62aa77c6a642e0831d5f6c6d6d0a700ab2bb0b623fc0bcc56cab0a61bf5089d1f312139bdf06e12598a71f21b9ba5ca72724604cf095c49e5f90a3108d3530416a914eaa78aeec2327d3cdfe0a090b55d75f50a717a6a94c54cd34fdd0407d5976e6d7fdd63ed7e51b5b3a3dccc824cf2ef20a995b2d51416b6b44702b799a81da6d418af5786c5bf09e5404435bcb9cb2b02b4d62e08bf12df7e8b654e422ed6d70b0e0aca73a3a9560a22358e7e3ac9a3810c22bdbb09d1c0575ba2be2c601d76c232a0bb0cd203ac6d56f0459f497c8e5f443bdf611982f418d1b4cb34c40b829c34a9be0534ee4da750161b5feeafe53bf46cf2249cb59e5ee1b7941e136109957817320b5b7a1ae00b86e44349661da3d297cb130efa3f177939acd456591edb600b54820b1fc681501b530286ca3f0c45340abd88e0410c8c57522b1866acdef707521a8a028d6c989425741d5a7fa3a64af68fab366ff4de4246f140c10ee9b2056c487400a73f6c05658677ba39e8c834096982c37d375c33236dd096ed2caa8907622016ab10af692c344f8d721313ffdfcd17cc9af90e81a64a5dc43c74a71e32426d3e9a6f36de286f044a4fc3e0a38b73efbdf74138b709acd6e354eaa3a32be4a6d8d94abd760ce1a51c61f16ca712121b8e576fee5259898c9c34c0a5e57f76b5ae3539bac4097aee6b05b662803030bd63a9fffc78a208e99902119516ef92dc40be30b9b5f7935d216031107d6b504724674de4a6ae44d8e6f0298baf5e99b38984d3db0f512929a5322dbee3d36b7d9003ea1007f68a0f7c9588357da461587de1c460ecb160fc488c9fc4cae9ce0053013f8c9194d342cfdc196a3ac2b5889de1f1b2d85f21203ff233800ba9314e86cd79bfb2126e3951605a20b3def72c281491c1ad04617f25433ff5453183f1c58b7d9dbb854079567a2df18640d4be926ef9f63552410ec8581d065fa0e34f8877366f9e2de784474b2043ff2843b32319491d054f4cbe94389e3afcaa42cdc4b226c4a2cee4a90050a2b66cd3dd72dbcbdabcbccd86857a9cf17da04d3e7c5b19fee7506a671e468dba1581a83039c470667a8089a2153f931624f8afb1b0975685be102bf0e81a52e5502c8080e0bf171d8b3198a2bc9a203981b42a2b6b995ab4e22046da010faf0acbe1c64905bab4a2202151a6c7221ce4275b392dca203852161c2132b8a85b12b697fc9185ced15116160bcfa343103c49999ff58f121afe274eb00498c8848159300e2f0b887269a56223d176735a8f44613d1796b2c4010bfa2847da492767c9b191eb0c3aed61589f342eb2b5b445b0617f59573ec7cffa520b224a3668ac927090ca1a82eba257e4943b7cd50c2541e0ef8964d269341d1e55e90a52d2435768310df2590725cbdf468f58e0ea175139b551e78251085a3c9f78fb68ff1647c170d41334bee8c7f20de02e955b948e6a69b93ba0f2fb1c88786071e1ed894dde75b62c93dc9caec88cbd52568dd2322bf083e2e598effa3e28070fbf92f4158d2648991d610620ec43b0737e1cd9707a2ce79429f03f342153ab12843696c360bb5783d4ea0c69949d93cfea6b8a63ffc0dabe53a70661231772107d73d3f95f3bcaa70e6f2d4083ad111a3b4b24b8b1a9cfad8ed401630eb9bac9b4587493b4ba54ceea500829b640e8ecc7c4ea65f82d2414947dc9eb5a15610b80892b3aae84029c94bd2df97ea9afe82d338de072924e63f2678d25c98713d59c483cf002a965d827d0d648a1803a22cece44af6e9a41c7fa505f610020c23bd62badeea3d10e821d809b0e4c90dfba110363dada203aac494bd375700f186aa0765566d625c12e1d318a266f4fbdc7ba3d5fc2214187d90da17ab394632680d497025b28c5cfe6cae61cc50e2f14072de7ae7e153957b82e5042c0fc5489f23ed9bbea21228c48ed178af8e5b12972e80ea92f9385deb84f61510791915f0a4920769e269af9beba598b4b9b55b29cd3e00b6d5306c9671cbee3062ed711275cc6d10be216e58f8584e84ec2611c70a092f69492bbd8227b087bed3038129c800b983494204d54fa987e386b10c0f544d1c88f342a248f1c3d0f2a0f6ff3730ebce64624145cb3b128252e1fc251fb77555e40eac533248026005feec7b9e5aac4ff19a5d5162163ad3ac04f383ed8dedaf59e2e10e7d3c641eafe59442f5682e12d4a8962ba2534110d3593ee5c92275746be88c802414ad38061ab45d3a4d9410c4d60815b424d103448a1133ec5c30e78eea5e3c3cf864b2776c647dc48fa78911fa89ec9c9aa05d5af4b36415610b0bf3857a03338ec0b6a5716ba9de97ca4edb9998ce0853c78db5148035e9e280d6b13deb5dd7efb3533cc3ea580bcff5adafd61f7a45c2be43735bd5bf02fcfd51304bf45471b2acf92fd7b48f4c6b42a6f2a66162df45308c12d7cc442d2088a8ab29623393e79f1a08810236fa7686510fcde93984ed5298da02133eea35c61dbfc38a22d4d53cc0946e22e8a32bc910191e1abe9699dbfae7a243aeda0be18a27095a262761575c3b7e181ba95eff7c7afb296f302ba545f97da3547e9fa02daf817e04474a482af059a1c8881858553e465358553e7840ca906ac0c7ace6fe0f28c2e948b3457f9b86e3afcee487f1bc97d42c2e5ce3227729fb0dad2f1005719dd46b23357d0dd7984b301d4e5eb0cf67a792717b2b4ecb572a5e779023495a0ccacc0df53ba8b18d0cccaefac2a2582cc75e0affe1549c4e6037c54be44b1046f234abd892a1d23ce416c143fb592cf39c4a05f7bf23fabb38f43f4121ad6daa103df20bd005af084b3d5dde4382e35727a042712f60c87a95a77ddd05adc4f1a2e021ea7016023a1055f54e8e89926f4638c67fb24fcc622f614c23e99df7a2da9033c0d28d18fbc93b4c431e75e96aa5a6fe22606364b8db3d9b29b86eb0abfcc2f50a63184c83c35e64846e4e8ca378bd7f0e884eaab73469cf0eaa1ed3ddfb911a43b15703637e4d906f97e1285cb4b3d770ca2c6e8ac0511d742dd3faac00b0b550a7e67418f988115dedadbd4246569a92101fe39c9f2bbd74989dffa6fedb2076e88512076b52424f0f3db395511182d90b2ef09dd03053aa6fd54ae6e1363872af0e2f352a956ee22d57317909bd00b483a8e060344e4e44c36de9df264458cc5d6b871c8d81843b0f9135348bf0379e8c35e4f0a248910d9ca8e7e11d627aee4d4deae5450db58e784a4536d6ed5fb947e11fb2951bae9ae9c1f05c6926eb4fb7c53964674b19254c163c1ca18171065f7dfa99dbbbf53812e5b2eeab58bc24b926e2c5bc147c8c2ebb34ae7bbec70d151c721463a530c579dc9654f824745d254b9dee762cdb37fc06c8ac47dea51bcefec776435ecca06ff37fd101ea5af5d5f7de33fccd6c7386a431df8357f32c90bc675e31cd2a0ab8ede4eedbe57627c004d0f1b43eb3e8155c81cba1eb719c14ab6dc2d8f19e9243c90be764ce9f2420413a36444b73a327da16421baad86feb01b72180939830d0d123e29ae9a9fd8957745722fb6678a7429f03286a9fc28b248c9eb7187c22e0960719c8126902501538d890b0b2d3109a113f0d193079ec35d8f285a0a8504b4c4589fb6291302ce14499478982938583dff834315c0ab822e33b7ecfa0e73846698aa8817699df87cfc3c19c00888f55492a2045db1e8c9e84675025920ad61723dffadc2f6013519b7deb37d007986cb2f42c8cccadc384e002f46e3868eeb442a026923992cef1a79445966f04a1d2e343a13e57d7654f81ea276c78a138d83302634fad48606b85151651580054f28fa46d1eee8d76bffc5f88f4e48b4fb7efe9f4215d592e7492d7641a2a7f2bf129cabc1bf542867d5f4f643e316b675abf8c4f1941aa3cc7f41d16d423b490c6c327d87f8721ce1c4250902fb17e9af905305d9264ad018e26bc44c46d8842110b40e20baba15a8fa400304373c8fe277ff9b9ba50d8795d0185c1fa77df127bb45d8847e9f9c509ab94d5ed53d8772d9a3bd7a81a31e05170ee43eed47ed925e392cac9a4296058b0549c27f34b70010ece6419b784ed337dbbaf0b8cc3d305665c78bb5bf4a0e7b64e93a5c300b4656e7aae5cf9b96740147214178ec31fd160195c25cc597220f8b02c843c8197b5962d8b1deea05728652d1431075de4d566facef60b417045ec268e26a8849cf422fe90d1d3dd32db8c0deead2dcb77745a86200ff5fe4a9f9f7b5c8d88fb76cb81acfaaed480090b22e82d41aa3cc6edab3385568dd3666fe1f779c2f59acbbbd290db1ae432d302fdc9b0788981f6faae651d42222022cebb8bb4991e659ea0e36a3ecf8a1a09df58e36cfc7fe0809711998693cf36e183585f9bea967828dc0ccacbe676d49811e93ce98a51134c632fe40815a99b2f7e63f7444c55c221322533ce9661184f4be0b8dfd808ae55524ac48de8d62d657910c0fae38dfdab6ea0909fc677cc011982e34a5e7cbcd4cbc341cc5a32697c1c75a58bbdf2a22780ba1b93b38e687e07b3ae5ed2d0b234546df1d8cbb77f0d355cf423550bf4290be1fd1897f68a3f33c014a683cf404ad07abf01cdf8bd81978206ff862256053b082556c6782a96b950b7e733c9cbd413299923a757268e95166f1e6dba1fad6330d2d1315c970fdbf54a24c298a50542003d62ce8995fdb41c8b6b2d5339c63612dc7668366df1a4ae45208758d2dde4cc9ae364dcf69802bf073010452359d950448a2ed8fbc20077885737111b30f6016dc98495c14c0ebcfb33ce67bab32c0406673a6bef725481561a96ff69f3841eca110edc7b9810f29c56c6812112ba5336411bf94b7b2b863f5a68e81bd2a99984459a5c99129cd8ecd02a24953a17e36044c4b3be5fe19677bd281ecd1c6a26488b3eb5c43b8a4b5a0b487aa8015e7d6cbb117fd8ba831fd766fd86984fb141d16ad39bd61a94f0735d699b8423395eb61d2c58ac2c515e370e5d85816ef188df1d98d30a0bb05e14ab7cc58852310a140f4d1bdba79977803de0df9170408765ee0c38eabfb65676c1abeacf71056c8cc5df2f68a8935265c1fb52fd2f3a01b587bf6e219a24d6e024efe2a3302184d6c123597915a3d22537b5ffae87f8912fdb7670db45aab90d56de4c0a154b56b86c68aac621490e15872a555d5942450981eac3edba04f225c59cf2c7fdcb4a98bd06e7a796edf100e162f17c2182bfc5861ea0ace16a8b7cd1afabd46a778d9c2390b0527cd9c11343d1b49a13580241f60a67f7db3f2b570a36b0c641a0f8b542c6432423232e1073dda8820cd1e327617d3d5eb5c8b1c4b212bd286b1a0645433044e3aa492e66ffe6b9862ef674d3354b1118ccc5c8b0d663c748af1db9912c495b6d0894526032f925936c6f0549b359b4436ce7f18748a0f2f38fb54cbc3d9e8414d9578d1cd1b67f3c5caf972174fda2be7f3bacdd82ad7589e137d1b0da3bc17be563f348b772797e9a3a0c349db4fcb64d3cef7c2e6d21d2957e177c9e8ad133dd3377139d54321774e81c570eb8d6cff3614ca8b8db9d91da04738a1050a191c6d7961f137e317a6c4323ca723940c86c83c4b74206712eb91b484152fb4089dedf7191749bc866dc45ed173467f248c4edb70806dca366d6d30784e339927c31e04db7ed4a7a224891b3ccb790fa1c9c4adf7f6418ea76d39a433ba4e143eb40f1c2ffcaf2f3717e5e859db50e744ecfc7a969648fa3adcd7d37af239fbd7f3fd137f4681ae6a5a1059e426c890fd158723c44b0f70f46fdf39db64c6da4a3ef95569621820b23f983d46b37821590ece89d072a58cfad1f79c5daf67daf1d845ecfd5d5d4b2c88267b1d552c63130e5f1fba3a8e41904887858f7b8403cdcfebb43fc647878b2f47ad0a9f0eb82f1cccd81fb4583fd1419c2daf341684c941f22bd91e08933a0c49208d18583e0315cb01877f2e97c53f05fba30d5839b092797c27f4dbeb082ce1258d89a2e9353a452c69bcd0b90fadaef7497198d887a326e7c7c2ca9ad967c2190e378871dcc24c9ce074bbc87038cd0dd0ef8f77637ff188c4d1079255b34d0663b30787baf91292cd04f194c4119747d5020ced68601ad6e97bbf06b0d6d03835b53ce221bb0880b22bd8b5b9adb21c6b2028825dbb8fe7e15959eb7d891c56a106e17df6a93f23f2c03be0a4334fe3328bf143eea3d11e43b52182c8ac94fa92000d6dac2e82c85b54eebd08b9dba3cb22be9747cbee442f854fcb783e52929542467bac6dcda57456cf1b8cb6e2cfaece4229e4a545800f0b47839b1517c548ba8997b06206a3511bae25b82e2e3dd8dc95a25defa26de2b08c8f5017edf04ca15a03b1f242f70c29e578abb99f8cefabc5aa3c5116f450325d9a38b2e2ba64d7bc6b00e28e6f78cf5d31ca9261543b1634b63a6428217b33bb17a31939accdb002d78e38349c47c80ce226b2bfffe72d9b0bc4758e5ef5c7ab9e2eb6e236edaed8b174a9f533db3ad94610122adec579cd019f25583280739e3c3e0cd27283208564ddb321192b251491840e290b243817b5ad62a6ebc6cbb2cfe2039c46b06a9e6fb43edb78d059a169a8fe672f32442eec1aa9114019a4dc7a269bdad309caf2597a056b48d8e79a09fc04ac5d370bc9163c0549e78612ddd6bd6881da7d6b412fc0071a942221e715cfc10a08ea79c92145fc951840c5ac477be1636ebadce0f104d96ed09587c161aad39c8c9a743bb7e79d9d0ec23f18e70126093aab210ced70f066cf271f6c5278a5c9ac0541b16b412db4ed4f5fef7eb474c241d0ed14d748e5428a3539640fcfe61da58ff3516b205b4aa9b6fe2acf7d9dc2ca24c984270c679cf5df47d3ba0d2ff8afaaa417f26732592b1464771e0ea52d53134a07a66841dc60cd7947e6568ac4fa597380dc2aea674152e4914a562f6faea2ce9e0bf8451d3a7bb21111893ad23b90a6a7c465a4ba54ae69011af5c62f8e7f591cf26112843917bdb41708e6830563a521065d03487144579d87ffecdfd6fa4694fa578fd9e77b4ee008d077409d9538d34b5734a916bff296e240245b0ce9c9e202aa32dd66a9ed0455656e6626ccb46ea354b9a625a16f364365cedf3a6cf48e9f25679c7e1e0047e349a9b2d3acf72263945d5999175470ff7c53aa860eb260b4a9e5cf92ee6cc4efb4f6be9757d4a9c8510c62eb3aa6f3d78ad62e55bddb8995c6d62bd722f99edfa55ab2f57e7bcc6907f0c974d8d3ec1331e35a9e92dc6662d012e6a8d5bda13841f158cb205a60a4789612fa4bfd023df92316b993c4c056b2eb60be243ad5be2cc5d1f84b4c4ffd70982fff2c20049dc4e0542b7c015281530f045d59823967cabf278a97e874e962a1d27b00974a3361a48715ea336e52ca49bd4ac5890f6f712565e9b0e227fb37b910690b86b9b58046574e7d2b8b64814e4c8034f0e87eea89fa90e505fab3316b2bf445db5cecdaf0281c060ccf24c026d352cdb0fc0dc89ff95c0bf46e82b4d38a1171395af9a09b9f682c578385d1d6bfcfa7743adbaa78911abe16c186f7821ef9338ce4c5bc35fb34a5aaba9f770a83cc48c708e52b0b39d7fccfe2165971e79d0aedf7f60f93a22ee39d5582ca4df1ee7f9c5e60ff04c61ecc8ce86134ff3b5396306a09c588246e6c4d74f62447d2d7aa8b0920c063cefd2cbd03a8266a4def740c7e983c3a3a7e863b6a90190d21c1a2938c124c2eadc1ee1eb76b464b9bcfbaf60d201ac8e276bf16074af50b3a60ea86e3158e0dcac905d61d0abf7e668cb845fee3da0278591e81ba9152b2fbc0ac42664a142dd7255b11eb3236e49c187ffd9041134c4d9cfc170f1d40835f2eb87760d18dfd888ef38277d7c3e67a78e0c144088e0249ba24dc3f9f6918170ac4529e4badfa2ca5c5b4f06a198b9d2e29bf725c88dfb881e033cbddfcc7853c58bcfddd414f8263a6ea8b686b77af71385404535cef455d588ff87d72e6b93007a9ab19898f0a5c568a03f04ba4982b49785326ff579f8eab68a98dbb69ef2f21c60ab27da00e32a7f65db96db83dc9a6a929f46f0846acb3ed5786dbe6634332c778ec85f505e4e1e13832931a46ee8d19bc429c3b687db3d877d5d88e03540783ea79b46edd96186c310449590ffcad24570f3c8dd5a2524d8744d65a1a55291779f736346588a17d8afd3cf455d8a5d61040d9746ee89bb3fa4151abd3cca6cd4ee9471a3317c57bb55ea667b6a8fce1e39805adabf2ad2fbd389ce25ce1e1c0150c83bd24735d5cf309b2ae2168ffe1a388614e13f06af02b89196a24d39408f83a15e66099049e942cf54dbbb3259755b93ec90bf8bc23c5721d42307cf29c8f3c83ef585f8aebfaf331716b56de60688fa0a7c53fd0466cc2c3b288de291891afb64669f0e8eb0d1e0a75051fd420a36b4767a5eaaf98d03f2e530c5290f99fc0efd0548a53b8e073083ad5f4fea4e57789b124539af98e166d095e9a50a8d44bec0048f4dab8d0a20ed7b9cb3f2a9e70d7959cf11bb3db0cd5c346206add2112d1b7ce326b8d2b4ed9ec51f072323c962e5000630ca101122ed8e54aa975003e32775600782dce9bac25e53bd603af9af143d5a6c3b6aa334224dc4fb89e48e46fcffa6b9785df23ac332dd489d45c65664799f97a0b8c6a3eb16aca98cccd067b1b419028394343555277108583a4b03cc29d11752d7335aaeb393156b23ec00ad912f7babb20129024316b4acd600fa7258e85b258df79c03a9ed0f1a6e76f6878cc165c3347df077af0b764b07feb6f96336dce3032eba1694d1f997146276c5a450666a85ab6bde0c1fa21d7d4e6c5e32cc7c605bff1dccbeefbab3ba2b9ffc30456889e164218dc18bb1240a41e1d8e49f75c4bf09442ad6b8db5c5736bdb7d45a7126bc48a07633a7dc1e06f989a706145006384b6e622092877a913ec21e27580faff1c61f172525fce216d147ee20df63f2175aa569b3849a79ee2e450c4611f49f501957c2408f9c9909175de2fce3b21ab7e15e2fd1884913a8631acaf53baad63f413c633f16713d6f5f45452f06d135abed597e527155aa03167add8b38429db09e84ee3a268bfc4c4d04cebbe6cbe139d203dba380cd9f0d557de03fe6b4679afadfde95f4f2167666ca940ee12d02e8d8939bd8535ea0c52caca15206757efab6d62633707f63e1e0da448c186578fc5e278dfdb5757a9d08e09c7ae3165a6807149fc81eaa1f81f92e7d374d480c8ddeace34e3cd68267b73ede787417f54808c9791784a916934599833b2936e16f0f17df65732d1415b328a8571ccec774e4da833e25370682e5b455d50a39f0cd90a95e9e753763d506f5e10492eb2e9ef5fd7bc2a18fe2818df8f1cebbd4cec5f9dc862a57f6ac65c2eef51003378052872a4030a2b0a22b28e592c0d91798e63e05e020bad0e933785b74c141844e17674be81ad22fb76c63a348257800d18bfa249eba62faa9e51713b5cb7314afb57543f13c547c47c986ea3db47c2bc05ca3e7a935bc8e0d18615082d6b20e9057b3a701e7ec5a6aa5ef41bfbb83b4f41240b5b3d71674004485cf7130f2e8d559cadafb85731e7e367aac43dc6d340917506bfa1f79a97ae972f35aea04d370fbf846673be5d2796f928b75d97f8f476cd0ca87f18e57dd3182a3c5ce0426d9fc386c68878d21e9b86b34b33b0f5463077e297e2689a117857ae7df32895ba9fa9b683c200bcad5574232fbfaba757f6547f9680b56ff64ca815a008fb86163bdef06ae8c9e1c09d08f6e2267a36e46a2baa943f98831faac41ecdc7b89c75004a2e3b7799f117be46121868d574052f2553abb0a702ce64386b088e4a8ff85a20b8a9d2611cf445bdebe258169b264b2a6a25ce68813a1f18a0ab6b21f18dccb6fbf5c54f36d7ce6a49e3766226466ca0d5cc6650a2eb2cb5d044ec35e1a1c375643e382f9b22e8b9e343c7f3bba9d2ce2527b6a6bc50dd39afa319c9f99df34701781ef811d71b4e074094a29c9c084414b5aaeeafa1e0fb34bb6e910ee682159ef4f3a4d65c4253cce6e5538b5022178365014b341ca9ee61fccf606aa11acf154ea6e87d070786842ba87a2341e5c1056f90a9f43d42bbcdaeac3709229475ee5ff4b1902e0ec1a7f7564d3fb1c71274ca6c281159cb8405582960c5ff74902cd793d21b2fe1a57ad7d2a42314a8cb43c298cdf4f22585c6f2070c132cd4f922112abd110b00021a02ba8935133ae94fcf2e6fbafcd0df20d8a7257742ee68be8a0f927b56666088cce8baf2bd857f40535e45f3a6e8b73501647916a5a80756c13f90b98e28f26bb2091dbc54863f62fa20f1405c308cc251277f580af6a22470ecc21d573d7a53e0eb3da53645de21e537195606b5eb9008181dfa00516fc1a62e45a2eff10684f3ec6a4f41dc13d4a36a403ef0fed2f0d9bd37882130f98cb2b8bc3fbbb508773a4023053667d0bdcdd397200bc62b060e0ce989e56df0deaaaeea0921e3f537a3258d63c39c91166abb674fb0ca15611a946657e9f20efc562968c488dcf9acd2e0e0993179345e101db1f4dcd2402a8256e81004882834bf0a53d8ec42dfb20ee2cd4ec3e9a2d18dbd54ac5f25b5faa85543201d57485b83727784cfcfe20cfeab7c561ee41f624142e10140a53cf643ae5df4022dc0b819411e7b5aa42b8ce4c055a72141e4fc8080cb8398c331e727e0c750ff18fd318d0c80ad5cfccc294c40574a9c83eb3454b7d2fa426bb4133093f07655f21ed0cf1c3616926b775fa7a168aec013ec34311f5271e695f4d6cb00481c9f6b031597d99baa4faaee836a3e9cf8f9bb4e27edc621dc259783167c716617929ff5808df0586bfa72f62d01978b53a5fa7a23bfdbfe261ae5a07c91e8955f0d9cf7cbc4d0de75b0ec2d80cddf6732597f2a9113f0a87599d6d770d8c5028c5dda1fe647ef2059a76848a5756513b22c24fe6112c141846d5ef70426fc8f225ee0d283af871edd346a8c8d704610510e0ba066a242161114ab426fa5a659c88b08c40ab0cef129accb57ff5b1f606d5f438af094b6488c770e1fb80550884ed0f54080c075af1fb207c4cf3456b8d2baaf20b3845a51f7d4ac903846b835446b384b287f263bb62521d67730cd406af2d176bab39b12570406a0205fd287cc09c43d867789aabd3c0aa6fabf73adc432a1e468c9553d4820d3ab595c3d6e5307af8c1f9f8a62c5e8c10eb137260fd47100b8f63d0885aed38f069ccf9d9154053e50e1488aa32335562743961227a368705fe281a1463f0a7539ded9146270501842a6181b8494f3dd62507ed85bec154a0a4bbb10d19ff962ed5a09a5ea91dad89ebc059b7b62d1c0ccf14bb60b5cf943d3052226c0262df218de412b93ce5638b7674b95c3620b6c6c82568220b695c60d0dab14754c16c96ae40ed0501f2110e444cb2efa84a93494640655eb624ad5faf73ff827f6842f3e0b9d1cc10872c5f4b3bd2093290dc5ed3fe66b0ee887fec76b3ec7b062038030e54c839052bc4cbb766e0daebd197d6b554e994e2be53b515dda9a970b6acea3dba41d4af5b724fb48bf0c8224696a02b784c1c436f490eed32c08e90f27a4daabd0f1010d611829d254c870c29b47c5bf228d03bd2957b7024b28faabd72cd2f8b45b93a2d98330eb6bc768a4c957d900b91b8425d74f5f7f5d2aaa1daa91b22608ce4b32d02ad1ff190a59f16174db9eff629d389789c3613644dd1c226c43062d9c0360d987a29d0a14461243b81c9e60528ce15b5700540d191aa9765546067ca7ff245f8003280324bf2b4cfc8988cdb879f013a148b7ec71c810e7c50112788c6a2c23227909affa2f114230fae66f465c5d3777640ed015b6bf00be7ecba1d0583108f99ada8f2dd0e0046206cedf162339335090859cab59c94340cf597db4a1127f0bd408edca60f55bd02942092db43130078d70ed247717d06f81cf943203e736ca04c8b496c90c10c39ba3dbe58c05239901930e427faa45fed929a0af8914a6006c4d01da31f323d4492887df4128667cdf2f09204c2056c0f50f0f4db7647264a44c0639871d06b1fc659a5948cd207544cee00d10d8be2c4c450619651a67c02121344d280894c60ad89e5464a83084936b3a44115fd6982ece4057113377e7166605f73dfe35f9fda9c928ca80c8a7fd0793212365635613f4f56a72828308500fb0437dfd13cb3dbf4d6110e48da8eee11e3057ef1406d63767cdc840f81c27b432ef7a67c985c200116bc540f1d2434f33f084011b15832b6adf5941ae5734d0e7df0c80e09b041d7b5e2ae5970272e6073639c3b4280a264303e0a810d1f9f2858f193846bbc09fa0a6b71eb29bf2ffec35d4dad15228afd50dca900d1db5c17224686332c71a8581a8c99857689035519369865aa9622db80faaba3ed97d7293412fa1371ab46d39de7ca701bd17659c9d061080a2ca4a4e95a0f823a81a6c154725a341fe246b85325bdc55760b5b84becd37ff250f7bd31b514674bf7d71e51c9299d2f1e0fab73e27aafee0f4ee0f85138c49aafdf82da29c047d29f8973b85359d8bff87c28b9cd61e0cd5a02da30073538ce809886449de456daf01f26041632b486844eef238f2045339169c1e4c2212306d13632ee87c6b7b85a73fe47500eb78bd301ae9e066f5fda0c33015edf23befb3ad795a8ffc62e73c8897387fbd31425f99b8f86a6d3f932bec3eaa73045bd1a5ff77ccb412d211be671450342100d2fcd20f4d31f4e27dd7b931a440ef46831ffc41d3172bb43c457e5b2e382a04731c17adb5154af9064859bc6f4d60fc0a84ffa5ad08d7997d7b3171e28d47b6f3ef727cbfcf8c7d450b95fc252cf0127a6c4ac3bf5712282c74b2ee7c72336f49fc3c4e7e11dd19673421f8d7db313770c94a2c100a43a578ee501fc8bd2d5cce8f943f20a4bfb11ac580d263bd792132b9dec960e200eb09a88fe825de286f05bcdd2addc6dab01accf86ecadd8801fe37d2f82db76ff59b4e1c0f1ce0177f582fd529f8a523c3c3c0dee9a5f32e39b5d332b6887b1950bd9fd8d81f15db8fb886ed27f2f987afc507336e7a49f5d63a825876b0cb4c47ab20e8920d230dc12fb5ed70b7070da32b709bd57d13d2936d5dd35bfa4c96047e424794ad5de9b525bf8724586c361348f57a9464c9dc5bb76b1a95b029e75c9d0508f49b0fb0581b3f052f08d41f2e38df5883219d6f305949c1ea49f8fbd30df10f4470b18ebf47f7d610e2e74067f946bd999256bb9188a43ca98af7b2a00fab9be28377a8204b15e3467553b4f92f83d753926b40acd4efca7f26bf7e2ff8ede4ff5f1d9315a9e56a44d2b48e86e02a5870223d96b7bb1325c265ed7b929b20b831caf33ebebf7cc693e5890a92c29b38022f31a45fbb5503fd1ceeeabc8e7f1b69d72871cdc4a3599e8f243ec4d39cd3d8a35bd4b55c7f3c45b3106d77f5089b5b7ce0e90a46d38da09c083a969a38e4488ec1701c4379c17996f9d11f96c05fb1c54f2f0b7e62e5545a5db0f7f8c686407e245f0e32a9e60b30f1a4520b2c8782aec7f620ee04d61794762e653a4097cdf8279af36bebf74626d8025913ed2106624a948fd87f66b03b7e5218c2d84842e53be63a1c5882ec94d76418981ce25e435eacae8328547d75a09c52e043734a0bd0479ecc8a5baf5c19f809283c5d8dc92afa15300c53e8122b9f7601c887fbc8658f7f7920fe16d5ccce6cb7899ed3ca9c75510d020a1b565226887d08628e1827efe13878573eb4cce98b12f736a1b20c47849822b54fde1421f28b941c6e414a76ff97f14d2b0f094a1c47c86cf40237215b8898df20d2c60ac836b999430d191b1438a8252de436b115d3602fba923f6e0323600eed1b798fe300ddf8d4114e5a95ecbfc915b21f21a42439753ec0140591e19ecc1fa12e10a28499f54c3714b2623010e9121e4a9b8acff11b42076f3cc446b96e00e22a101304b8121981f811c6dd6298acc75180be7c6a08a7db9f280a845024593746c8094ea26d415ccb8e27412811a284b136b651b8e61c864234fecbdff416eb2677fa69c723ba54e6d0f56a002adcb092b201ec238830c49c7c0f47e1fdf9d0274e2e95b83f93163239464839e7f4154230f492cc96c037a7193353c5376882c32164062330bc8fe92c6c433ed9b736a1cf85b29d73d2d9e1cd8164cfb7a40641850d555216c4be041147ec93f7703cbc0f1f7ae6c475813f075f2e80c202f643a05e7544d590a7a061256583d83510678871fd6ec97bc31028c7b6dc24d0ce00be72e50065c1303941a82b96acb1da45cbe54f5bce510415905805e2eb4b66488d3b2c2f7827860c70f858f93d358d87260564d56e30a684536b30384c92c06f8d9ac63d9a92e177e32bf66a38538a0255ea03d61b3e78fab7651406a715527c441738152c8ea140e6050afd450e08cf08399c704bd952bce9690fa3c4a27e5de2c0c3e2c09bb02a84675de2a12298ef2f064ef9bb270d37d304e4d018112660d9456d898d20198b7dd8f801722f674641c6393625214fdbb93526f4101797a44a2f0ac1e8c1b1f23cc139839f25a1df416881649dfcd3d2a3bd7f456cc32c2f57ca4f7a043972171a375e8ca45e74f1d7de7854a5232cdc0f223d2e51c06490148fd43b99348a81edbf7c9aefa20e6224226d801b906e33d20f8a4258002e3567bfeca3cac4896c7d548e1005cbc51638db797dd889e8edf076cf029e9d1a5697e7a24fe9a0e029a8bd9bc72dc79068ea6576c9768e29ea02fd2290f493d16e1834e7a7ef2e98228882f761900502b1fc5c3ee1644a3ababa17250e4e369d017632c3d5987f2fffac0752a3fbff584cd6a571682763f074f8c2af77eafab861bd1845ab7a546632931da76144c41b41f8a4b8a7e1f671d4b11d92795978e2646e5967c6375ae6ab1aaa87b49c0ca1e1b2a8390b65155b0b606635fbd282173a19ab8a19fd1619e54b794e7632d48e68b55741eefba4bb791041a26e44d51a5757e3ea119d5b3f075a94ed9d4857aed00f196f1a13d3dc7d9bd45b3971a89377cc78cd217fa08158c06c320bfe33551d28c04252e189f67bbcf95d31c51e73be2bb2fe3000ccfdaee023dae2d06adfd91a073c8eafd438bbb42e44dd5c7b10e3dfec45ef8a25b0ccd4d61b825468ddca7c76652dee70ea2361f18eb792608fcb8a8719b2ddaad01ce27f6cb6528160fbaef64a7b644cd8c75cf199072110291d04f3320829f5ceda53a5f06f12ea78d7393885427b4c38228014ca189f9d5328347e0239b8898ef51f6d21b86365e6a2df72ca8b7a40c9e64ae23d470e67bd67c47fc57a8da59c64bb2e824ab3a1f8e5eb558e03096da6f87f3319eaef90a1f314004ebf11f3ded3b346749378dfe2c24ddec0759616847953334c1de2e8d8f1bb46377214621324b26e60356b40e67191b5b360d698bf33b0464a6a6ddf2907c8b6a3a363a3b9638d8b7e80788ecd8a9a62dfc39ae4917362093e48eaf31c17e7365b15afe26389fc02986d1283270e26536eedb7253ee885da202281a5723fd1541b9041593066a28f1097a0cb1eba773f8450a096ee60ba3f15187c64900eb7ae5453b225f4bef8bcac57c35f3ae1ee83d06f51e9105566d44eaf54cb286179f84950f27dd91201a4dc76700c4b084881e61a8115c9a5759c3d910fb4afaaf70a90b706a664693808687a9c76f7b563f1e389f88f03486f204e96d5c14a645671a09cf44507b92f9d97010d840c55ec56049d83d86e3af916ced38578b8f2dcda3088f9d39e251b8e6d4d0dec6a3648facca055d19bb823adfb8ff9eb7871e4156b37e5ef4e47bb62ab8848fd6302578804fdc458a07dfecdff2ef5e1d5268052ed477f19883cf281943b2a532fb13b7fee92b81cd485a9e05eed0d3a8112177713693c6882374814e2deb9d3b0c43fa99277cdd5042e556a4a1d7406a6d9e8372b708d1550d7c600cdd6041016a8dfe5e4bb8fc954106b08d9b68500869a98b0f88a35c91b4eb3018d624c2437f30c360afefb51a4cd2ca6e9557ec2d928e67ca20a6aed741bdd2e843c953ea3110978f53cdf20332d4ab65e46360a61b51a73198cb9c00e0a51e073f032963be82460f302937c7d1eebf083b4d20b7b638e4291fafb30c7b41e00b60a861679127714df064c542f4166badba6d2624d996d9cd136fbf31bd48560b29e4d65e8b136b78d1348303049f7b679534966cb207ecd3bc82e3f460c2d4cae4433cf978f4aded4e32581721ec208940d31139a9ec7789657fb94ed2fa21922ce6eb3dc138bf4892ed165202ce290eff6d9631fd241020cd6ef6deaa6b4d726a32bbee47312b313cb727c8a6b45c5a2667793933a6f7baaeb65651f1be14d044483faf1d163ffcf71ce846e675c926db79ca3e78962543c8606ecae6b01fa51896ecc37602f6fa993f1eba9b3dffac57c64202a6bdd057997139e77acf6d795eb0f34b3c04de97ce8eeb7647f475c0be868e044ce23abb2dde3db11544a79a4b89f21d6bc048d58d4afd89e0705011d996acfa191d3a8d7198c59c6be4721aedf7a91244b2d00cbaadde74437b9349fe347ce172a470f5bebe400875b87b672983924aaea514652e011af962d7a84ae30d071f704d2136ae6e2ee48794231e9ce986640906ea11964a0f36388e63bd0dca70109a39844cfa5474cf9854ff9ec549cd8e7c724b5e2634e0c99b1fe272da984992b1077431eb3c0a152b702c6ead71498e7d9597b6e21af0c037de06646a4a2c8385840a53b7d5340b7d2876c4f6077581097c847810415f8b438f6aebec727b1891b115e2b4043b8b796040ac74a81ba9cd29ae57dfe64f80857b5b631e30f099ac3daaec039c98310f5ae4f135d548010d09b8e071b126f8cfeb58101335c50f88587f6736778bf7abeb3379b4ea6bcde2fe39201e829b4a6490824d89ed31364e8fd3af2fe8d4f576056bcb5e191c002816eea1f9e55ec02098371c24bb0cb4061a58d9fccc5a90cf263943331aeb1b09ffaaa5727d54386113fa90f4974bc388c20d551937abd7c2f6d960fa0c52841b235e116b49bbc84218309146ba2386b6cd2d663a606db7d6fc613deb9edc5196d8706012b74c5f29f9f48b6d24fdf0643fb56e1a34abdeff8c1560da92b5ac3d26d2dd8c2bde78d251fe12fc420f4fdd7e6c414989e1123fcf411861f2231959379f02aef4c4f0bdef9d0a1c355ad7d69a98f9d7c18e8f20a317e28f7ad75856a4d27670de49d5a7d0f3fc2328e5a275cd61041c1809c26e73f168369f8e5b877b23cb085b8fa020caf90c41a7281651f18601af93d2413891bf5380d1819fa5df4ae124134191fda4f45f16e83827b93f6f3428b288dc42c419075034255197a10343f4106f101990dec22474351b23e60a98e0167261ef4ea21b4d39d15440baa27c09793160c56abde0d24f67ae9d7203fb9b58911fb85b23ece56b9383c32bee8eefcbe6aeb7a9a8064be09e6c4136b7ecf742fa1204f041e0f7e5b9b41c42e8f0991d463a09f777ab6974c6b6d016e82b175cfd78a24b4da8d24292f5c2c9ca1bf87122bcf32807abff9beb89f0769cead3a33ba38046c8f035a6b8e785c501416a703394776bf9869c08deb1b5309284179272dd0424cd3355ae39dc661e7004198fc4db86864ec8a83bde53d43191f8428841086308c81031bac630bfda6a9237f0b9819784964f601034051d1060a697befbde59652a6945263075f0781076d799435b334196b36350bd6ecd2a6d70cd3ae4cc3b61ae0735c334dcbb61ae062d987b765ff61e6edde4664456a8c456afc53e52176ec8edd91af79425d1071cfe221a0eec653ed0670f74722d98dadd7e46eb76484bddbdb7afb5f77ffb674773777f335b1cf6ecbfe6cc2057a326a704af45e0f6004325c66a42c41bd6e912dc2f800d48076dd225bf454914bec183c6d815518471c0144460652e8982da2d0041c204566400525863882d421d8420a2a5bac2ac7e881d04fda0798010f6870800334087ed86267c7c78e49053f2c2a083faa0eea1651992ab73360600e6065c080686580f28ba86eea8cba45808044cd404816d5c5922abb1d5d7f10d52f03a552a9ee1055197c143766fd727e36b94f765f7cc10044d0ae5ba7116abdac3cc87780a87b74a2ad1f9daf04f52b4e373431353b201e40ccb003179c4843ba4b815adc2de6c031a9fc2845944292d29b232a51240a496105fecb70cfdbeaa26c7266b8b8b8501775e3446dd8ddb73cbdc44e129ac04589b40218b40518123962a644da8ed1a3fa96675535338991204c4a52f03080d2efa7b9414d51aaf4fb6b64705043563cd3a3450de17961123fdff4688b7081b3840e8da94607b504ea070b18dbde46777743e8f1eba1fa6f58d01f6ca4503f5ab5f6988a56ca8759c3acfb7aa85cf6d1ec7ba81d1f72f1eb6e07acb2e39ad8b5b0049a6243bff5d6b7cc329892654c63a4f273aa4748fac539488fd6c80c11363283a47e7caa6c440544eac7472a6711720f58fd187ddb03a447fd01e91c536a8f3f033c7af45c5d5414508440b4720eedb10eedf1531b2e5dcb8108fdb8a402d39d4854f9c5c790481fe4ad7d2888f30182270de9cf401b0cfcf8877ec690763cf453102744f6d96024c826c68362744068a42136200ce506f463b3727d0e3a64d766037d9893774e8bdc0967837cef78581bfcb56f2efb76541d5aa59f971d0fdb1eec52e056ef526c90ef9d6203fcfeee78c87e83d1a155da7529fe4bd2a15938c51f56ef7250017d16eaa2568004191b8c779ec741daa3e119141700a02e4a0a2ceab73c33a48b0bbfe42033ed15414feaa2a0f041ade13468c0ac9f3c6075e453172545109586ee6c9c4475514ef4d4bee171b4c7ff35a09b9d3c6095d3ded6505d541028d4ee3ebea97ca4bdad393e9ec1a13dfe1ad01dfec0167ed08cae5456d19eba740bba9b460c6fe7765d2abf7b37390b2c9d1a1db197e084829a71f87039b81c7468966e8f08fa79b5a3fc19daf6f9c4aa41e0fa4c656ad4bba7356bbf46ad1b52a9148eab7328a1949e11c130daefa769dd0d9da53c4fb9883e11068be8eec9110711a95d913be20df9724ae9801b52a9148ed40d3a4854491c80a3ad1cee7ec17e7f00fb827534344bffa519a076a780fe15316d7eda9e8886dfbbeecdc60fda7bda60dc3b9bf9be0111220db1422da2271bceafd1d05ebf73169c8ba4dad896fe1dd91611d992166ad87ff3af87f58a73bef5f15fdde481dfd29a97e0c3dd3ddf87eeebebeedb0d0117eeee16e11939cae509bffb6085168f9a9bfdbbc37bfd97b7f301d61dde4240b4b3767b48e624509e3c60d5e4e3c218b5f6e0372b5411c166d86331cf69cd69b13c82f55b8a76966558966959876d31c3b20ccb322c7bec2f4cfbd67e35ed3f9f7d38ed37ec3f236c8b18b6c11174d955cbb46fa971bb3260ff699f69df98941deb1049d9f9eb58233305314acc24db950fa546033a35e254fefa54f9712a7f168308f49bf56d344b9c1a3f29a44619a4464953e34b202f657a043f762e124706f2e42cfe539ee6a49f3c5597a99f26776ae80a3b94527bfe2d246155fd3fbb2db2ca88e2a3bac4a9d2921207a52632217a8c909919fa20db95cfaa49b5a9f2a35481729be6a4d3542184824218498d533fb83ac51324c0958c6d6a53851dacc971cbb2e20663756e4969c921ac22e68fcb929ad54119ad24fccafc873c692842086186c130d6d3a405adf61e806a4e562a8875822855a05f94a9dc41dae3bea96ca52a730b4109835a294bd542112c95a59a1a4da56aa6582965778c516e945282628d2c943cee100c3541491126f0f0ec4c29a594ccdfc11aef42309330e34f7fb92c4bb42df15dc02e2ef650e133dc1c40ebccc09cb1dd89ccf9fd23d01c7732b0767254353b5d500601e5f71d5f6d467ce53bbe63b1208612950c4543922577343285229175511184d32d19bb955198918644dc8f63fd472fde171a5a22826afc28ec5444cbccd17977e3777f70bf505c39b725c4dca15034894222684d299a0e21941042285bc611609c2e4401a77484d56ab513e104e364e10c8f157876663576deb32d4ae0e1d939551143aed508862462594a2925c328a59452ca1dc29038d84a284428959686e02eec0fa4710c518b1a7cffafbb7e5a9db2e378e0471fbf2f969644a8bb253374ca42159a56e3632ba180512a4588e17c889873a594124629a58cdd0aa44482f347d9f13bd7fceeccace35ddddb1f7aefe0dafdde7dfd56c895901a312b5059c4cbdb5ff12bdeb370c5431d848258c20c1aa29088c20f8954b2d304fd7f7bbe62834b6ea1f7f027f610c2ee3dac081a338e379b4985b95e7cede2e0e500582f78c9f65ff1a6cf86432c6b655819ae243eff750ac9f30c8dc5c6d0af44944407dbd2ffb577aea3a9ea0e4fa73ab52d46e05c82fad759a1f3e62b2c54d875ea5ba9cc41aa0fb07e9daa8185ea5dbf0e52be2bb66290c273c50b4ca0585d141155a86841635d1411262270563c19bf72aadfbb2c610ec91e62dfcbf84f5a85aa085098877bb616d06f723118e79bd06ffa497704d41a89cb91daff7995d6164e8e40e5564f50a0715a4f3b0780256656978317866919671363220834ab629c0f103c6948f6f0b224172129e32c0d724ecaa60639265d9c259794699ac6494e8b2d564a838fa67130cec4190548d3382fb58c1454835d318de3954f6eb54abdc80526e83763689a8dff72bce29849b3f45fdca4f64f1fb5dffa51fb254d10217a68961652fb8d3c91cea9fd970efd7895314a8c130a5a163eb307fb09160e52f1607caf3d96304618a394d79430c61abf95ba9fd53276fc15c128397f216e30168ef5ce557806de18e0af546ef81f0cb51f6efcf80b9c2ba0dc3715fbc10f2592a68aa0e0033aa0428a9913e99bd51aa27eb45a336a54cbb2dea547d6d3a00187eed3b1aa1bba3546d8238e4985de2e689d9f3b290d89541e5e104288c580ee4b0d4fd4380b1595c0346748a44243b12eaa042aa81ffd21a27e81894c0092a0565d54098608400d65a12e8a044c529c40572412f030fc908dfe951f4c51615d14098aa8dfbb04f161757f578bea83fcecc031f40870ea5a5117250224d48c37168011fab189488f78a4401725822f3c9804235918a909a86b44c70335032dad557484f9a9a0312546f839e8b00ca45f7c87d5615277f947dd08471f8d1c4b838df6f645a7afb1418ad4cfabfb54d08f72cd14ecebbfa4fac31f6d921c3e40aa415062bdad35084d6ccbd60f72cda466b5e51f910adc6ad0d6637ed8f55497d9967e8f4dde22137333e91eee7ac5743de6f7d2aca9a9fd19373777adb9208475cd8524f403fd077d78156a3b146abb126a7b116abf92ed26b5bf91749bfce5d43acda4762fa9dd496a47de912bfd9384a6a63b4b827e8e53fb334be3c9f37321b57fc9aa776a2ba9fd361a494c8f74ba81d4fe0af4d0a312fc1bfec1426a3ffbe89736bd34902afb57e545221cda9bcec2dd9712f986cd003254ab9b83170479d88e85f3d4172fb6a09e45ed9d97ee696ad37792f61a088a09289c694fa6bdee87e10899da011e29728b24e7dcfd7788aad3ba4558b053fb7f59d8fb28acc928122bc3ce3021e913559795fa1f5502bdbdfd2fdf60a077bb7b4c969283c76a272913e00ec07ff83d4819e4563b49a9c1dfbb1904e5b608173975b71b5b840b53edeedbd116e0ba0f44f7e86622b20cb4bb1b97bbbd9040bff9c9581a7ee4d42c1daad018f201855d269a9aec186bcc7059799194466ad07091b1f25627c383a1f9210a6c30b0cb5473db7ae36de917f4f3266749d02fb47302011b822604fdbeee5e34f474439828a4928942540b51df3618fa49213102da60425c50d87d7b646795707fe60c4e442a590c2c460cde944905ddf6b63b020f18f40b5d46a09f76725d1b0c8681b24c734c73a8435ba879480b0581c2eed3b60f08444ff86466d95504ba4b61346dbbc199b66d1f0ee4527797d293136db918db8dd6e2e7eb31eb6783c9a640bf4582a3bd231e1235ec1cd0a99d343b0481e806c327fdf97a54a86518a5d7a4945a5446e8b439f4198011d9fec0eea81f4016f52348fd54ea7e5d02d095c1a1c38f3c402bbe7f8619a1f299071839327f27e2e69fa1df7481c6a00fb6204ae383b9d46b2e41f93231772835a0d0d2306d3fbb3826418e815c8225588251c6e92f9fdf4fc78cc18e9259c6264c059ec2ce00551c833fe3c0043faa9bda074e4f25e8c73173090a9f6378866b6454b9589a8b75a29d9c6cf364d3e6dc81024cfa0461ba5b7f56a9542a1354994c9ef658f6e11e7fa15d835cbc4fc73d3d3dfc99a87e8df3d5043cd8d69da80afbc2a56571fe244445d048021419fa953bfe4fc05a4101fbb233f0e018fcfd065509fab5a9baa95315f2cbe9325da8dce6b669d66ad3e64ac5c4727171715102774a50958465644ccf630f2c8bff10d59f4d60c496b645a380f3e019e2c650bf6d52fd336c93528622a5315c83651dc7384b57e2ee1355d00ee8077b56060feccbf55ee310f21bc75fae0ef6cc0e364ecfb411cbe23721a84c54ef12f7380b56ff063f04ed5919b67a64554f7c56f90b8b443d13f6cc693dec814de24dcc893ee04e04124b7126d64421d3823b3dfae00a2a89dce33d3d3bb4e71480ab1e7d8d0399785dd40aaed0ef026af2976ec1b2f8cba016a9fea6c6a2fa37ceb638413fd883c353fb3fd803359cba0300c27bc8384388554ffbd7113a71f6856ff69bdfb4defb36d542fd3c78c94fb9aef97c23c49f55acc49f73dc3d553d49f56b4aae09e2160ef8be5d5487f0b73d1b0da43de7981f3dfaea4f30a9dff654777f5e491fd40cd4dff5a586e4bc2cfcdb1b4c57dee6b6f04f1abaddbc2bec632f4f74fd1513ba42bbbebfb2d22aedad2441fb3f951abb9516c58e4643af59fcdb670845c278c587ff5d975fdd84ee7fc315e175751fac53445fe4bd8bd75abc76af87d0aff74bb42cfd9def756df58ef17bf6c8c5b11064dba3fe6e8fee91b16bd62c6a301d77a25f9f5c5c4c2db93d99fad427132cd51d809428335800f951178b2870b0884226548d981162691a8c3d607bf16964804c23f4833beb03ac493e3fd22f1e83a449fdda4775977191e89f867f8492c390a037a046a1e4a4d65eca599ca23e9e9c32523f78635a61512a5872632bfc5dc93ad49efb84be45d6a5e8d77781ff7021e4264a3d64c05f64f4135705fdf6e46f633adc0e966cb25de9aea03046128494e3827e5fe1ff7656c415c83a9bd130c3f084e6f8e2ae39ac7eb0a0fcdfebacba8b8c076bcc3cda5bf6d1437b4b434ebb876cb9cb41a4ad10b2fd0109264a88c0248919d0fe2903caec6d030c3c446d0dd62374ab109168452bda4fc431dbd2dfa59803191d9e017aa0ee07fd012b2156a0fefc5eed68834807664f9065bb376e9a7199bacf2d8cd292d69c17966199b69d76b5edb3dc7e562090b6dce7a5e5bedea9fb27aaba6f4af54dd794562db3e249995426c6e11a2ef5a838749e4d3177bb4318b9dd218c51c228a565cd7959f3ba302ccb342cd3b46dfb7c400c02694cf924460c6d51b40d2df7d1050000b46d813994100b190b1acf6d999f9629731da1fefb4b4c6d5706aceeaaac302894fdcc71a511351967297690468d1ec1df6cd0a1f35877cba1bda6b129151789da7bb38013f4ab0c6eeb1344b74b7bfd530605382862494d405d1c143144cd40fcdc2ae9140bc70d19f091e3a4a4ee5a327e1e0d0b997bc6fca68cac2eeaa609bf0ca8cc17a59e18ba28209c80601a822e0a083e6a3fa37ed0643f6a44cccef448d9a954cd8b72bbe12de5eed3d44571d184a2841cf1a32e2a083475515b685133870fb9f6cb4f0dc2d9d6149b14ebb90b3be29bf6588a1dedfa3bb7603d7f9701c2837e003eeb69af49f3b487611a0c9c10daf3e841d2344dd39e394ceb86010618fa6b67d23ced09c1091293b4a7f2ded47484b490c71d8c8baa2f688afc183fdf59eb26340aee98c6197782670b9cca5217b5850f177eebbe1a75fbdd0c2013e32f2e2ccbf6be7dcaf62f6cfe32a795f20228e505d0f62a1f52d9daea2ccb3e9f6cb3ba48d39ea7bc0052e1e2921017793e1d35eac96fcf1bccc907806b810954fbd0a340ee0bbbae08af88c51e08d9d49e7f4f931efd0b75514f98ea07795454a225322ee52d2ed2d410fa94ef24e8276362e6dc7de923286d2ffbd95ef62cbce4525e78f95c2797f2c2cf77e1338cb3be39171e725f9ca96e31b74d81ca18e717f1b70080cf589331de828c098366cf1f79da8b4bda739e1e6518673d6659fff97c6297e280f8d8df88fd51a04695dfed860e1bdda332a7a35edc8e58553aceb4e7590af702e7038c7c1be6bbd0c1f6321411d7026781421cca479a2cf2f80b4c0295ac96f4cba2b460513645560030433f191377baa87a22aaaa0b39f5683fdfdd86404017a59299a95055b3a299a14921399280ba28243315aa90c42c4047a707a7ae2eaa073415aa544cea22a98b52d5541b786019737303fbf8cd611f75d4c00057f8dbc943eee499db8a71bbc170e7d2dd6c62963fda7329c302af7ffa6db443c1d41a0b1b8c8704bdfef31808636ceaceb267ceda2dbbe9917f68830181beb9cfb3b0c180de46fb002b373f9ffdc7ca644dd3c09af69ce1d700d1a0610019eaa64c1a11bb0e44838d13a80854c31e931ae75920d1c24889a4ba36598adc9367094f7bfeb2247d4051821b361ca937f98b9c93d26832f9cb924ea9a8133fdb7f32e6f3b95ec6c81fd2248d48209147069132f246e248229f6b8b3c3dfaa22a2e913132261289a6a88a497ed40ff2e4c870d0893371a6a34d802a1d7250f9ca59fc3f1a991f9868dd219a28b02312bde74243fb50fde04c480714c21967f1f73c17171aaa24edb9e7f9c915e80755a6ba30bb3618f873c3b1b0ead06a3c81eaa2a0b0a2b60ed855209a22911e9dfa04063b620fab9699f99fd966724e4452551aa9fe7006beeaee9340a6a4a1328814529d069fb7d11bdc812a189884376eb757f5a8fb93333c3edcd60cec6e5550ee1903fac9981f52a6a6468b1ba8d222a64255163d75515c2ca902a88b8ac14ded94bfc81fad830aa3a61aa02e8a09cda6edcac09dca9c49fc9f0bb72fdaa7fc45ebb8539c624d6b8f3bee2e9e4905fde48c8cd99623dbb28365f14fd23ec0220bd515d52bec260ce807559dc2faf953dbe234943b8d5b12680726905154ff2413f5e4bf6edd3727a558d75d90f6fc6b6a9aa0cd75d5382631f77d8530b4098a697417dba133f2c6472c65248dac691f5d7f37986666886118f6907b72403f5e52dd44a4073f7ae0e36483b1d19e3f09a4ba4dcc93b4ef8f75513f1842cd340e266916aedd41558c26d447562afd888901ed804a99ea56d44fce00b964b2e0a932a6478bcae247cb991e491a9466fff4777772886df1c73619b32dfe4c84dec8986b932c039aa45f96d4040afffa0faa6060ca5f3a48b3f80b999d9a39f485f902fa750e98b0a4665cfbe09e8b9b54ffc8b94ccbb44ccbb44ccbc898fad1ca34edf9f34c7bce339409fac91819d36d270d08be648e53b63fa08010f122c78b232440a1e0e485173425c87cd7fb4408947f777779a6806f60ebcd50892c1300189461bb37045941f97777ee3e6f7bbb37140018947fbbdb7198b71b5da12579b2254138c0c15c16f8f5e0d8c4dd270de0aa36f45e4463f7ded59fe591f63a17c8f607257e2841a284a726099312204a7252c071c171f1031241bc50f2c51224aca031524fea5a81846aaf5ff164ac5c40b8ae2bdbc9c28a1ba0b0164002a08e38823a82c812d9bcb665e5c37def766e4b7f8cd09b9960e2ef273486e2127df6dc92482e974bfb6370fac36e467b6db973345cb819583783468fbca3e15299e45c6859fc27a72d8bbf25a1553f1d35aeec2cc0a3c6a65f9b3a4b1bb443ef21306e4711a5b56d452972f0e8c104eccea1df54e5a003901d7677579583861c2e60c7b66918e54aae467bfc30725de1ea847478e53dd83d8af83d48d35f1ee37a905224203f7e0e099f87ec521a7639fcb18e8777369a77b0b39392a307e90553bce0083db0cfe18ffd6ec7a3070d7a7a44d92f895324e02f7f02d8675d07b2c75e761d1892b21dc0debb9425554173d02106c80ecccccc39280d35442d23114857fa5b1d6ccf61f74d1961cb18612e618fec0ee435d1fe1b3c177ff94812f1b62f47f7b4dbb9f4a3d8d0af29a81f65e8494cd53be4e5cf20dc5179d8d7a1d5f8b386e51838860fd6d9dabe2fb71576a16671928b364fd083402a65b426ec1cbeece2b422fcf6a0eca0ca0852ff4247c94c02fd7a6477f899e4cf5fc3fa6799835317322512e49ae49c24418dc84f40836851bf900e5d7667018a052a2d88f40c0094807e8d10a5b5bfd58134b0916fa365f7becb5d0f9bc59c94da70ef676ed8c8d5a9dc75db70f7b81e6401fd6a13448d1d7c1ad04f248fe4f04e15dd50535a4f9ac3e03d178e8167f7e9d03c77179ec106c7c05e7b16777573b96f47dd8f870eaddac88f2b339a8539585198a05018a17eaba3b2d161139ee003e544bf1a367432893ec80834a3fee23df3a3e450283e6043bfe92c7d04205900993c9804bbe58101fda6152d4be6a0c1e609187017fbcd8ca3bd8e71e0d01e7bc78333eb90030ec7c1bf3daf13858aa0d0b395afd22f37340bfb0b246d0c795b97562a9cb2ec8502df6ce108f4a3f58921f63403facd3929ed1f95541ea0c94eedb191f6e229a684b4c738bbbbbb2b242703c2374184cc0061e6dfc8461ac047da33e5d46fcefe6f962c9dca3f4bfe62ad9a09bf006aac95b5f217de6e65d5450561a27ed68ea5939a3213275b223ec0761cfcc5c6a90036a0ef35478fb4f6425d73f4c807e64d52f9bbb92dfc374a96bb19da6047d573ad7852269589bbdd218c168c525ad69c9735af0bc3b24cc3324ddbb6cf0724ba5ab80e70828c3fd369cf42f27d046ad96e8b4be6ddb86a685b7ee5bf0d7841f7bd796159b6278dbda7eea334f11e1bed758dd59954d0fd6d93c0d57d2809fd64700569930afa3d3f8df1850533a9a09ff754fe4905fdbc13e827272727cd0b82d9ceda22f0a91f109d0ae61f8c31ff84b685e1e5575fd775f175f2a15366caf8cb2cc954da433f5aaa6cd384fa592b6ba7f2ef37aba54367cd15023068b8320cea27b2421235fc7045db85da63ca437f0a1f3ccf0ae9f688aba0598528ad356a4c71c5a7b2dd7c01fd287c5edde721582851aa09a88bc510466cf7ceeac9f062fcdddfaea0fb367c75f84ead513f1afd3c854cfd44f305940332f03f1f80ab854ddadb185b00837ed386c7e8fbfb9f0fd03ea206a7f2f372bdbdbbed2bd8451fdd8c1206ddae813d1e4f2e64eaa26c8ca85fac91598ea9fbdf8c3843883bae215ae528a30c193641a89fca137693a287dcee0513d0a775a9c61dd5acb5a4949d8e90c7d028df82ffc9387b8820744a3c2b777777570714c012540a26ea7e9106c21074561044133a39511821a70849645d5410199317489e68a2899e151c51451147526c9c24e392e0ec29880cf12fbac0e95f924ce9cec67f49119222b724c92d29bbaceb9ad7b49824398eba4087c2869b1d888e100446a0c1eaa26cb230a5bcc8490961498cbaa8289034e1c50d9c90531350f70659345133903333333333337bd300694066e61b2215ce375119eb07259a3429c20f20746df40d8f83bf71b487837ce6816f68af75e891ec6c621e874327288f1eb0daf23fe81a8c4dfc6dda745bfa271614561e55761f0f866ff1a83bba32c72ed42c0d395823ec284a14f4ebe7714371842adb7882430efef5dad309facdca1670c02aa930540787548efe58bb5311a5701cb9eaa2a4e8a27e3456bc7f27e8f73bae02223093d34ea080a347fc37f4282556ef2876f28095921aeb571b3c450beae7f23f847e221d29c42035fd85739a484888c954714efd19d603537b4da4bd3ed2236b150355036a33a9b7bef8a0a89c17bc9ceca04c4c6a3f9ffca549fd30baa77af4398e1fe9518ba0f63b8ee3cc784d2604fdda674a3d728f3d4ae995fba8dd4a3c2605a64098d3a345c540551b50238cbb3b740869b4c779edb56561bf4260cfa307c97a8cfb40b69b043a21b077ceea3a508a80bcae2bbe7ce73cac07f4639c934e8f62e59c1ec5e69daed1bb56d25ef7926d11e2bfdeb9619cf6ba574c3afe4a7a0eb57e5ad08216747728a7e6db269ca97352ea536987c2d2d539d6cfdf443005aec02a3f45fe924031ba2e25ebfcd439319a9cb2b9c16473cbb493cfc909dd4ee8676e75665a76d2e604c926fa246526e7a74f9f4f9f7ac45cdb48afba491ff19eeade3bd59b49f5cfa6f5f4e8f39dea9e554b2e719ef6dc797af4f9c995a878146110450550fed7578c26f4fd541d06a271a884ce7535390ad58c0000000dc314000020100c888482b1603c2c29aaf40114800c7494447a549a49c44912e4380c43080163802186008011909119997500897d1572d8b9a79ab4ec5a00b53cc2be6c4be6b90593496fe33d11f6f8c71e7eb9c974a5dbb49e45e7037a753840afe76745ffc3ac1cf7652a696ddcebbb0be624842d03c4a6b3f263f7adb530980a70110412528b00d1fa4a36ff5f1aa1d21806085764f60b9d9924ca94429000e75e940f1269a3983c204644ca4ae0d78ae8c893c9b34b3cb025ae75af93d9f4aaeb675766f2641b6aba5caa43047181e71e80a2c9c3f305bc6495848bdf5975496044d86fc8eaf8f683b2c1f0061095ad2788972001b6406c2e72762be0fe103ef2e87e5aca2f62cf92148c63306f14fea75b85c42d8b89ee95c741df8d17f9a40e1918b15d2323e533d79b8f6dc5db2ae843f2360194821756c7069a82149b8ee215a35448c71cd3e9e1007ea583722550bd59cd1821e592a77a1c816a144d2950a97bf91860664ec410cba3d3f17319559a0e981adab22fb7b85af22bd0c5fb9da51b107ffa0c02c2c373b9b2712ca8a38d9f026df9fa02de85f0313d635f5af25dfc06756e5d380bc7935617040504b0130bd40c9d38040b98981e76cc64808b19e89b9035a1def16db85948f5b90f38051c55de8766eb228febd7a03164b419213907bd9af35988dfcc9d81c4df40128098d0c7d9c07118e7e4835915c765d5767cc72830a22d9d62c25a89a57c919af863f00b59c194dadd89c3d411bcb8b7f37144776714dd4c6c67f07c06513709b1d8e3ddf934346ab61d23d9b29138216345ae728fb2f632b3aa6cc1f4135d26eccb2fdca91fc8c25f81ed06ea1fddeff000bfc623bc72e63ea7836a8520b563f8ed0432119dd95481de22e28cc1ec44fe098cb3f6454930320d38a382938bbc64159f4fa6f4fd6924eecd95529c9b9ec4af0db02f5369e22a39e8f7cace6fb7efb91b7073c960c868b211d044b7b9109e37bc5ea30628fa5ec634849a27df430558e1141e889853a2502bb5e7225ca53fd925c0c7e3217a0a6efe70ab4b91482a75e81d182050d9c108904a987d0c0d62fd8cf048c392a5b32d63cb70515effa290cf4c5f133c2cd8c0c76e096bbe66d758bf83b8f2a34ed9ff775654cdf9e86ec02ec3fa5fb42f2f6ddaf06ced65a6ce4a83b22410058228051ccd6f2d87e7dbd3a225a11e98734f7fa1a84623f78615f8ff03308fb04323c05a8d5552db218c60a797a154a238892ce361894bbcb4ace36a887b009c4da6c0cdccc5db031e247aef4ed266cd6e8216d970ad172be291ed3e63c8f07377a1906593230ebe69550dfb8eaca84430028ea2d704df88e4186d448b1e86672e924d9de1026392eed8645f7256dad8eca8bdfad24648e1b6dd236fe4f46cbf2cba0fa17bfeda6e333eb483736b0a2fb811bd6e095a581408ebb0c4ce366411f75962e6ef86b0c3d9a10afa50c5bf2c1ca99e267d0abbf6ddf007d2cacdda2e6959a22c0986b02793f520d2d39e023a56a07d4630026b0e143ffb9ea78b3324d7fa1083fb3b3d6d3fba6f93666befdfe3205023276716532e7f0451aab6296d915c3da6a50a28fadc58c2f83ad068a54fb8ea0447ba72208ac180618360c690baac48cf244e392b8133871fa0029a5742456ee6b41b4b7139c6cabf702ad3f44701b24493117dcbdaa6cce715d1fe8f6b293a3b871f45b0a1470838f6a55c88744cab16535f2622b55d73396aa161101467736e030febc16b0860d4bf8b6f0cd99cf70810eb8b0c2424ee0923657b3ec22d60b07525349b46175476feb08533ff16d12d1d97fbdf959f15808235abc5c91b205f4826a444f82f6704d6ca55d5a3a84c3637378192cf32d335cac9daa33bc18fca0b1f38b2d1f976b409ab144cbe782f1909e2677af867ac119a72c07c834c7ec3608af5132c742a76ef688cde8058e5fa83ce8d4a5b222a935f3b1f215771f176fa569f61ea0fe9db080ebe1db1478e186304a1b409527e492a6fe2031e0a31e54697b69f24f6a346d6c6cccb675ab56f5fa321b0c68084c6554c916ce90ca66e39ef19262948ede715aec7ae2dfbf7d15148f522035c1e0bc17bab5fd9f5928bf6e596252717e5909eec73975c17aaa540b941e6459d81b1ce3b8a1800518bfb30ec1dd3e6a115344f8a0780f065b4743316e70c002fb32810a221080245110d795553892fd589a90fcae202decedc6a31a1787c12312f9246d8937681354608349761128509701d99a071aaa0fb3b432a7767e7ec86094223a970ec171295005951d30f06e213834e7a89c9cb593e9326fbc23647e1a69dd7ef25bf4dabd7ba78e3326b4cd1d7e5058e9b40d755432ab439f4094056cdf4ef9bda9dbbd18fe372dd17822b7dab5df656abcbae31636f66e29f2072c58f8a58c7dd5fcb34279362d3d207bb3d846b4b4121c7993160fe224122bf41d8c9407d5e70b87cc8dc23a1b1d7705fe06cf80aee85930c4242db10cc91d1350e29ddb6687ccea02fed90310a4bd16257e52ca25f6dd975987f5f2a0eb462d96d0d17e2a3d228754c47bfb9703a5f1525e01cd0c125150475c0cc3c420c6e33351d996e7f690ac29b1092ef35b0ebd424fe4bf70d34408b3a5efaea3c1853346ce143e0d8c959be3cc6a1ae069435251dc6079f7056c961c95199b6ee9335a919c37eb24115dc5ad0111893bf6cec2e695b405286a6f4a785b72d05129c7eaab64d0d51fe152c5c582cea47b3ad9d2e9d85fc145bab5fdbb37da52851a75d0de0ae205d9e1cee6bce409ddbde2e21e7a6fe44c353b82ed57924dad431815a7528575365b2c8b5e0d8b294ce9ff9a9b5fff4d2080ca097dedd97ae85d1fa084501796884335fa60c0199bc284fa463898b5e63501c87b68a72310770f4d2827d1345198989ff5d5d222bf718de36fd506e47f8f0bf3bcde662aa049f827f63f0e40786006b3039a00a77b2176bdfd5f6013448c930fa720bd67dbae5852b70e30e9960686a0928cacb557491fa8e977ed86763b7b25dbd7640050b86deec5b721406ab5696680b8a17d1a825e05ee364e1a66bc0c54b6649c9fc529ce0022586cb7294715ab97d8e9e894bc97994b05bc5d2c3ce5d92c992243946fb18cb375cf259755bbd8933df4b94a0f16455361e2912c22a2a9e0a7b8015ab940864b2894128ee43d53e26f970468698c5128347688533cbf8a94cd1a4cff650273e3baf71031492322e706dd99f15234ff5cae22dff9f89a2e7a046467650c881084f13cde824ea74436b04a3dce8d6494a96931b96420d0b32274cb4080e8de4c7804a7c89aa23e08ec0be158ba4e5dbbac555a1598f6c4d62f3a61bfe14e10eba3acdc21b5425b6a7a041b2a67cd419e5d67e4528f87b599b10aa88c52708bbc1e4b6e333919bb5ac4ff50833a069873c5ff0a01505ba5d23a66450b907282fbf15b30845b456b43853cc2367a725bc3e0e22f7de260e3986f2ed97509c59fa7618ce93337d9acecdd9b49db1b2ca61fcc63956a608104fcd4dbf2ca2c55de041b374208b65e19898204ac001a78ac187f8372fd796a0b5778cd4940a6d329455219fd1858786a6b67161e08c9f2e8637cf6a7a898b109fc24dc99958fdf4316903f22c94bd24ddf02a1323db08a14baf03d8fbcb045966798d6a561644c9b2fc298dd0d32183545b0747116cbcc6caa337726d4e773e583ee43b4cfbf05dd034b9ca57d53f88a5eb04c8843ac6294c0796d862ba27e1bbc4e4e285b3e3dd0864fbcbfdffaee4549599bfcfed01073a08a106bcda144bbca781298b1cbc471974afa87fefb918143abb884f2bd4a1eefc7dd0e7d86dd13f3d6405055d15220d07101c5441e98a8fd7f54fad4df543e100fb14f442968a81a0a03ee64757e0c0312768f37ea207294101153ec4e01bf043822a9be84e4b8f1182363db2100b820e58d5b97ff24fd91b84038528bef4b40d04bb61033516df971a28e8ee2a1f8af78fafdf15591418a877cb2a56c59606dd4299a5a5e1c0202a6f51509d5bd750ef3ab5f03620a34df1fda24654a0c7164889476519b476f5acb5ff730a5c17436497d334abaeee44c849807a3c9925a42b69cd40858e001ce922505abd5e7fb244c08e091028c59cf0803e369103aa222bb267bb6354f0c3022708f23da43b58d5a164a8c0ce4eccb45f2f452bec7e5dd84438a13c82c783d0456d67a9d1e4e1571854d9473ccf158e1d625bb4f8749f72a75663d04c1cf4584ee5394f55df55cfaed3c92cc336b6af550e9cae1f92c3bce95e4d72bf679a0a48f733b5e9b9a20e3660283819440f9eb3de3b2bb345ed21f4723a1bdb5d597fbfdf3148c566f5570769e81cbd3acfa18baf029f1c752221688b85059bf45a5a99740291e649f67252579b4fbb974e56118627326a60964134bb893c614671b48eab5c9c206c30a11bb7674467a36928af2121ce6aefc70842444ad1bdb17d19864f6aed3d161ce31553c5185b283f32bbfedc22d397302eae21bc312e9ac59dcf65a11fd969e07cf503a1630fb098800e09580ce015494351f1c657317199fa431b451c198ac890ec5fd65014419c25717a4785aa7ac18faae9c7ecc789e18020c220f1fcde43e4050cfb73f413759eb01fa0dfbe5ce91fe85efa94cc83faf59855d2746984e4e00400fa73ef48cf68daf92bf7b4080bf7080e65e872d5c2b9d09ece7e8ad7826f24fb91dc452cc4667983eed849a25192fe5348fe8f1279b93708ed81b1f6c5d151cef687db236b103c01dff85a2185a384ed09d238e3514893258cf67800ba0b0df245d9e4439aa2ce598f8636088ccd2322c5f5af3aba9aaa669d737de0b75b3eb16ee8b7c6ee53662325747ee621f51354c427e9de14cea2bef89d6bad53e0a5f6ece50047d4302e847cd3f00823f353175fc65a7fac61c82e6a96f408269595f9805edeb750b8b22d8f2f808f8d8dd6225e3c5fe2c9eba3f5049f39bc4ba604971a6a68e3ad1cba8a121c54b4a047b0c147acb03ca47b28c4f150874552fa42030ef680fb038cb2b002ce9cc339c36ca95bb959c2612d276d6726cdd5449b56e5bebf15849c43df676d826fd0f368d6bd29ed577f126a749fb4e16ac7cc6c8c9363992c39f052552554b93e206b456e86e47046c921ef4121d07fb0f68c710b6d5a12884eb03c647be49395d0f401011a2743aa267cc7bf19929b5e0b77dc937aa9f743538430931a12084022d1522449a5d45102fa91617f0fcf17be67f23eade21044abf983cb263a54c24c4225624dfb8887f4d7ebc9550bd790a8e3ac4f22f557c8f90cf4b491c80b4247dbcdf9689797b8fee51a6c0cb40112140620868a0a1bded1eaf279ba5e14a71c27772ea6ccdf24abd98cb388dd23cc1fc4072738716525024c5ca22f6d426a77703215e5944c9719c422d505fa7208979130e116e9e1903ce62c074e013310541ebc272b98faeeb4eb2ff48da64d01cb654d6ef626a7053d491a3159e18294e898bca00ea6606f38435118f67d74d636c6d4b38c0951cfdef8e76d55aa210a24053b5665885d6f225a4226bc5027b4437172f9b367dc4bd32cb465bc72058492e029974d4d42bc726fe51f4d47deb7c269c9a7551e4300f11ab62b43a24c7b26791c647d049ab061f6be647042c51c067a45acfef393733e7e95653591845bcec00fa16d8461a866bd14546c3118a8de2a49f99b804a3c181444d83c7ca9a5f635d9d72bdf88b6380cb4e683bb8efb9a60199effe60b39de3b50dcbc2e58a9fe0f49ef826136454a39072243b837d1f176e615398b6e271c38350a2d6c16d6e0874d0eb6de3cbc9d4bc85a46217bdaab51c407167e7a938cfda817eed1fc193ed29149e83d7a5e248a7ad4deea43b64bcba9fd39257cdc54f2bed06a2cdb44cdeec5378fa4996f81eb89c388e7ca878a276a8065673ce0130ac04418bbf5cc03565bdaf80882e17892941d50d463dc32d7e2f1e4201ddcae26f7df44c7c44c6e138db1f279870d2108da80bd8fd2054329e0d88dfbe6165d9fff06f40fdb18eefb3de01f118f7a1ecea80264a53241dc7e74b7c86d483196d66853f8efae4869d03cfa1d7873f976b8b890f7b6f7dde44c708ff5023d9abbfa25c27f9206073fbdd843a0847ac805caeb086ffa91cb9bd16c3a6b9910771a5bad43cae6fece9c84e848fc11ad43b45e6c0baf8385f9d97407f3fe7cd236a42c7206e40ee4369b220c3c815334a1861104ddf99119b063e36cb7ba4f95320840032bd2bb916453c0781228616587557bdcc88f06b1f1de63c2f96fa0a354a4501e8456ee1772e1fe3a62d34136a7e3cafd2c10ee405c1203497e48ebd3f89d088fc07024c7b21d0a7d4ceb4cdbf4c7886ea820dfcd905452f71492d1d9526c63d3800fb731bb2ec0c14ad557ccaf69e312f208f31ee7565d00d6fa77d60f87bdd2cd4b2b677811a659929157931c34430c18b9c236833a2cb484448481f5f3a5f0bcbd4838d70f18affb4812964c8801647bb7afb4d590a904f023147a9582833b35a9bddb62d8992b5c01bcf019cc57a0b0e22f54c408314fbb65a64be5c222ab14ce0d211b191e3c7f7e80ea51c263ffd7a7361c10f8d69a5fe30c23eda63f632aab98ad53c070c8c3521fce2f19135b214d27e6ba78cd584d4239feb6e6f90453ac7c76dcf4f339c311c6b6f1851c6d64200d94b8ce671bbb4f739131417cc2c183a385e511995f8bdce67bd1dae754e57e900c8f58eb2d94dba13034cdfd0bd4a3d2e35e0c739bddf0232042022483ef67deb0249725fccd8f39f7d708c26f255c024de802b6dc66c005a0c7fce92e5ea422a7c9062d7adeff2112774843c03816c53b2b0b63144d9021f90616201188c351ec0c030a2a97a16c0aeeb86ab35ac3c474017a322a29ca820628fae48f63c6a7379bdb0886563273e5665536924fc5baa46c277bfddc42f73e48976ed05dea159c9039aeb325fcd86262bc0c2992a8b5d117ec82c4d0495606e3e2bea4641bb67be90d438d402171cb014f385c6e5079d28799ab86d0189f4f84cad2e10a8965653e62983bf234fa472b12590f9a0dcb3c31100cb0ff944942276b9144b0aa2b9cab5311626f956fea66fde1ec701d9540d545347a632a9fb07fe40d1c27a3be8298e9b23a4a134fe0a0e1fc24da85b25727140e631572a80e5907c9dfa0c06f22ab0bb91fb4d874b6b0c7da5b2e6f306eefc15884a699fada5860b04d1c2077c42dc054096c798a36dc821c607953339c2bd90bdd56d1688d40683143a0f2c1d6f027d5eca7a5a02373548be20c99756218a995a2e4c0c729a55c4fcf1b29ba3cb55f5c954847adc4ca5ae708731dd3546ef7cc3fe457af25c99d5a5493ccb6899d0ba31619b3b976231b57178276eba1830ef472610a57b76cba997718946f82b83a5d9948594572947643c06b52d763998d332f17845676b6ccb262fc4dee551d32a05d71b291eb9a2c9089bf2b3476fd7de68c78e47f88210418833d52fbfb707cd9a3b6b4e99d5944b134310e960b4d6181cf726018131dcc2130daa1671137dc058dde13bed71f6147e8ece333eeb2239aa9fd1623b570b4c17efc70b40e7820861fd06785b8db177d77c03ec0dbc6d90ee7f4a573a932b456bba6539ef528b5c286a86a757594a0ce98924426f71aeb3bf323b3f69c907c4c9dd11f6bbf32e769489fe6f22b1f6a3b6d47e6de92842a0a33f9b057cd11423704d19399411d5a597444b41aa5a45c1f65ef08210819ecb1c1587ccc16a1ff16a1df692debdb4cd34493bbc83c8d66011cc12e7eab932e12615c5929b24b42185fdf7dfd69f2e22b65d118d18ccc36dd4e91b5cb230f2832a30351bbd66fab9ad9673877dbaed1a721a37a32307c4a95edbd352d1a6f31d5fb3611d2943042036cc3b63eac2e1c3726c62b9be0e014ecaaaed5b091f4aa1ebb83c12c0a37b604af27a74284d4c778b8bbac0baa8bdb082760f7471387a0405d5dfad0b612f8eee5d9a72777115afe1dad8b720ad9005b74b1804fe05e332d0362e9a26eb8017c2fe322a47f31645c6cb3ea9bae6acba5e0843347a82ffe2c213159c972643b5a011a0173e790de8d6ea651179ca391af9a99d6cc34e5ccc822e654a4704ddd308633456372d49ed2724ab11d5015c68c5574f410cc1a0fa1ddfc64093198c17fd8f904895ad5e5a041af6ff9ee09d20759f6602d062b1b6f74e3c412463cdb6af00b3093bf63ff5b18d9f5113c5c74f897ca44eee16f661353c487d25f6dab413b8e72bfa841260e557542e86ee488c6e4f9983643688c213912d153479feb8079d7abefde0046dc8be55fb9b2a48813e8870ec19d073ce41005093a97e6de3d9923379c33aca2ca087a9fbf9c9dddfe12ff33f45f5b22c2175c40d26e3cbb1170a3a636a1d3a044a888868142ba60d07f080074ca579fb46ff4952a0130e0e8cac8d10f8e96c400a4dc1f4d308ae86f9e619fb941e0c8677baf5a48dbff258f0c33dcc0ba472d746f98ff457c0d06834ba52ee5557d5c4221c5eb06d6887b0c04fc2f00ac1bad9d9788c12188409dc347a1d58b83d170bcefb32d846170a70f2fb81015f94209e0a4c1ba2ff009a8d97f709f9256c4360c16cc30e7c5ccb80f3f1d2ed2eeb57470b9d8140315f5c9a1bfb6711157c26d88e4a9449010396c6e57e84f5f3e505f035bdbb45a73603baacefe3246e9dd2a2510039e898a72b361e8db8345dbe8a1c1e5e3d807311f69e7daf47f41d83aa22d1d7622c9fbb60c0b07b05a120f16320f91710adfe872c483f605e14403d6066256c54378f9467d5e309aa89372078519892c6fb9f8d5c8fb79e9ec653b36ad2d6fd3357e6de90e935dbf8c5f0f57b03886bf98359970e458113a258291613d97e9bc70c038ca1a3f598f7a3d5951fdbd53c4d1054d811e81564dd5cb980fbbde6752b8f1e25d5a7a021557d0d4480378116ca71818fae29309a74b987cfda2169e97c282f119c97787f0e910a5f692caf0cc38c026a3b6241647a47ddf3cb75d827f51a6a12d746cfc01d4fcdfb0c11fd654395329f5515977284e0da89b042103e598f5d8478c5bf20e5d7eb7c075a8b39187d2ee87aec762f2de407876f71f6a2a1b3080289d5ce5c5494e21aa5379a1e25ea80f04d1adc0b36ebd99670a6c318465a68a75b19a4e9dccaeaf0109b6b8acbc9d41dcac75052ce0e66bb157a5dc50d5d960279f742f8910d7595a9804bae97969ed041e2798923751aedecdbe932174904a1113d972f1cd9e538242ee42c01f4bfd76edde15cc1a176274292ab72b7012539c7b5cac2898eb6cff0553c7b41b0f2630972cc1b14c3016cf270c1ca42a781e0f38949d69d64f3f81501f0128bdc5f8c83a33100e42b8b82d75e2606a44f5f0c77abecc4dc30a6dd003250983821afb7c79e51e48d31f78012a11d5a287dae019a3f565ea204ec0150310374f68f0a2c4862ef514c44a9af8843bc9ca6bd1aab4f0415016b346d06153d45c6df6cfda4432be59a876e22c4e56ce4237f767dadfa7393f2148038d4ace5334fae8cbf0af97e91c5664316c10b97c5a0c5b3b19a970ad553705d87bc1a2eded7c194296f7d40e50dfcf672f61e268ca223ba0add3522c4af122aac58388f4310b61d46c6cc06bfa1f2feb833c041bf271d2b4c289293a4b04fec95b3a16d2542bfb8be24052e9e6eb730b4dcc3239b691ed0d9a50eae6d347d47aa8fea8e3be58fb9001f9a95fe9dbaace49265bd3a87afac94eea291a699426c5ae9c84e561f9a9334bd1182eb02467f1b7656af8980d730bf9e7b8a56d2fe7f6f13eb28411a75f5d3b00b2dfbd2aaadc4dcc4dbeb4ae9c648d1c157fd19e209778ba002f6a5f982be537a4ee9e4e1c8de32db0647edcfcfeaba3cea2c2d835550fc928d4242fd1b98097d67d74965d5ca87528fb390aef2819a4edcf6169a3f3fd71cc7900772ecde9cc0dbff2cdf56e7cf0e84d8dace0cb804e3e8c5633a65da30c2d37c1a88a33db7b7036c57fd97b9c3713843396157c9061684f6149c0dad433b32bd8cd070aaf70b3f493771297cb7b13bee91a4a67bf320f737b6f3a7444430656bd3e7bbd2ed27e8069bc1bf64c221d87a084f771e5f8fabe2aad63bf417f987363e8172a474f1413381b40884291937f56dca6b72593158a6a74825b0582cf5c1097c29ad26b2aab9e2727f7f7d8e30a61ad3275a0bb98ef6fbbdb4cdc4937a4611308c29b7c79401e18732784514b10c60b6e7bc01f38b32e6453431082b78cf3800b983aae09e5ab8975716737ac0b573c88aeb339c2b6c37c0c81dec55093ac1139e5395c4a2a75da4a17018e318317db782439485da59a31ddc1768bcda8b3e14c60bfd85393f088e41336ddc3736e2725b5cdb75d157b0c78f54969e235cfcbfe88eedddf0062b904f4229df04e32439835834275d4372029beeb7d5a9596e0b862b2509e2dd2e895f8c91ed0f0a7c60605165adba56c0fb8f14de60bd84bcd4597495560ad547aface1bbf919c5da312f5de3f9b94ace3e29bee4d7819b1b28e5ea95965faac60c59ea50d2f3d87470fa55c966586c6941b0f5aff95296b146a4bfa7d823a5546c7a1be9496fce498394ab08692d0f2418aafedb2a80e7627563486f64ed835ff2f5e20985450e317f35eab6e3805ce8c5238c8744afeafa69389ba68b259233c2bde59f3de6f732a4926081c3c920137e1cd48f4fb07191c1ead84e58c7bc0de65c60312d4780221b4e0ced503db67c6658014a4086ce62337d205b858cd240e75ac0a91334a807e4ca27125c82c21a8657a9687859f3edee40f6bfa6b910694a95a84abf1e8a72c38428e9259305443740ae0de16e2bd610dc05435217ab32e05b89a00e6e0d5eeacf259ccd35cdcb5e4b1fe95dc0457199ea80258ff1539d9e382803127e1b9d76807577035aacc404f609d914a4e203660d5b4513b7dff83951cb161ec7aa8ddfbf36d9ba9ddc283c80d73499b3855a0db273b92506bc8ea8da649b7521008410ed7b5ef85b3a23911d53442a1d19ed6a852345db543d34bdb0bfbb1267cee16865dc0d1466aa90b6306a5bd10e21c9e827a26a083a87be1732a617196927b45183495d517490054563e9b57d3576b81639fd179e57bb51087158b010b33af82d3de9e31701b4f0b44d366bc0c112be71e048636bb4ce7ecf58eb1860043bd90b081cf6b740691ba71638012ff141c5ad9646723b4e96c75e86de1914a40360fec60bd0c97d5bad6315dd835c7df2352ece14f028b53d8ad60637a7d8e17a48b69da0288161f92efc4b4523f36a4c6282680b0189c75fdec25004dc93136bce48b39c181826f7dea78098032d189aaecddb90e10ab8309e0a612d3f36f750a25c12d5dac2037f6ece957ab1830309180839da5f07925b197b8a16690cfde75df8b0b57b67c7d0213cf6dfaaed379ea89081cc31078ee2662516b39707b754b31c2fe2dfac0dea5d0f2359ae4359e499d0d3529f7f32340a095ef92cf05e675840c0264119d33a576a8cd2568e5134427e5e2abb0ec98b4eba7f38d045bd028ba9519044695bba4e3e0fbe8a0014b50e1ba4c932eeac625b11a5aaa190d475621d45d55f03e688868393f46b32f6e895a2f4966c4123f98814e356450ff0d0447c8ecc73694ea63b53ed1a1bc94ad44c01d3cbbc77b2652227eac043d6203fc2f08916558d228ad55843c62d5a82a094f724590e7000b5293c9ed09c0ba7d65023fabaa9715dafdc9745ad7e4efc6db4c6fa5359e764ee68bf78591473a3d5d94f0f5b018ca11b5a5fdf8d9c0a18248c691e4f471aa6a1127e14b4f42356cd07879a1e85563c7aacb37ea7222399ccacc95686586752cb3493f64b4b343886297c67699299955007c544073a23c971f3c2c52422458cb6ab9d3e3dcdeb3f410680296c07d103419338a4f65e70713524640655c61b8bc33cc6579ad2b9322ab29d5d88c0a94b60c536a6183a4559b0bf8bb838d1aa70ea8b2fca579f6d6ee931f49db82130106285e87faf519a31e0038dea6932c161f532e037f5b802a2b459ff6714fc5ea7a8a305133750890a032cda0eb7183afe42661b222df21e41f62d082881512702fc166d89847d3de3bee04db924643ef9992a8e74f9474e4916925f2f6614804a2a146044a5889293136200fa25857fa8181feb5d09e28cfb5d30cf0b583afa5b300459ca6350803e0a2347f5795f0e890869afb692551603b3b5460d51103c3b55dc8718e3ec1b8f2bd9ad55159ab07d3141152772164f7a2bef8ea1ed2af03c4c1ff21866db7a0a8f16c37511d0e537a70b48d2b0deb71552fbff88d59566aada086517d4a1febae92084939eab3ee01a439a58c4959ce589d9f2f509357bcd41cc7186ea53366d46f4a4cbe100541b92241ea31bcec038cb6272c74f5c86b6e210d5ec450920f13086864aacdd28bb78e258f18b581423ce298a1506e995915d7215536b0073bedadc9f5132f361fddca8932b2bccceb975297bf536bc06df5f1e95ed7409b9a49e1da3a08abfec7c36477ed7451a29b52ee430bd871c8eda3871e20e2a5e4e99aa5d7957d138d695a5bf27d34432b33e18ec99c1b3e4d2f1831c0b0134e7c3687e296012b8ae1eded443e86b9288ed3b486437bc829d77321b287eb0d95001e7c6540d19d2325a63443e4d66f5c96066ba7d287df8dbed6b124c8060ac60df80e06e72e43d1da6bce580c6fed4c062372b3195de75523d07ce91f347607de89eb8b9f8d5f3379ac04c09c6b0b3baf95f907d9e328a9e974ade9e7021839eec348f14ce5ed122f500abbfcaca9474c559a9e02c1551ac3ba57b5a26ed585125f7b5c7b700cf3bae123d238488e75d00ba52e10a5402bbdf2dee592def708f4111614b4c1ba9b319a3d1deb0fd6303cdf55f98ed29b2ebc84529127ea3e43c60788b2da0a783c6989374dd337e9404072c063fb87647150b640621f955beae97e677a9d0fdd3d1fad86620e9bfbe79ef3b2af287f0e4a735b805395fe1b51a8862348ef0b38ffcae3071089d746313827cd57970d50d36793001299ba09e5d6ef1bb13479bd7414c4736972c2ff04b7337954fd751f71d1fae31b217b1af5abfebfd34ddf9728f653967f021b761f7b25f5f67b5582631d1b8594a542796698cd33e515e5261704431e736aacb17c23595f3333cd182a118317c390bd2b3d8f6280d4c935dcac4a0eddded778df84d3510635e933f05521353e037b606f6bc5d4e9c887e421c683a7cfc273d699e1286dcdaa187519f05663c85586e0285b8871e90a6c9e21d0f13881d7f30b189018206a1f47851bd5755184c1d24ff62508ef111ab6787612d7c3701c6750d209cca6b83a23cfe81908aa0c21e4e4991020ae27207a2c7c999928abf0e58545dcbbf5935192dc2ccb8e514f1327a1e1445d1a7cbd08d0dbac29ac5ee04e06d25c63c06e1a86700268fd5d865d70f1993b28e1c1363900c1f92f83b54deeb3ce7ea0c776aa0cab4a0aef870ab99077e978895982c622cdf1a7467da306bcc0081dab8cfa40b8898ba63e1d62f8f24ce315747ed760fcb1a429072ffb0baf4285a1b478912d19f43ababde1cc78dfc0ce8e88813553eda128f6f8c2743a231f8387bfbe2e0c6dd6601a15b0f1ebf5f8a9b778a242d40c85ce057f9804fcc0c14bfb4a5bda6972dfbaa257112786c3fe86dfa7c1ae8d5d5ff55b36c1266d35df20ae0733268f26f285b189a068f43a207ad6e82faeaf1213e68b75f337cf22db466d522eded33910ed174283297c4480d2049e38fb08fa2295b5e840f07695d54ef9e40cdcc57811a76e6fa75876c8e40aab4cd96466c3f8434bce287214f76a8505058874b9dcb872769d4548d01d90be620f923a545c06f27dd6e2c53692b79c52982262a4420736310a4b501d3df61fcbaf5c07887859e4bcb250a4d3425aebf2377502ab644a5ad83494287be4c07f066289ed871338a97316600566ecacbb148db672ca6dfb547a0bebf06c60d14ec75e69bb814bd5a8c7fdaf1194b4534de3e81453024619729d4193e0ab087ac43ed85cec0d1d44a0c2e011048e1b7b9b32aab1b2adc8ab6c266ed11c3be75d807e176107da72aadbf02faafbce382877b2b79104ac479a6be0fcc1895ce2e11f688374dfd929a14a89171a7b007cadd78b9456ea1dca6e47f39b5a6cd664ac7c2d744c075258e90ad985cc275d887ea9c9718cec40b4a8eb0b46376391de3374ed5a0be6e0dd0c1e23180fe249bdfbc6ff3e02181aa797abcde1380660d04c14fa710430aeeb0600bce17eb881043bc2292429ecb2ee0406b8b6ba411f13b6e46be75b59f242a3f4f30eec83969acf7bca50f489eec3a6af732e4ba990b351e57e6750de99f467d5417b77128cdc4be9eda8abbabca0b38773c82cdf04c95a622b482ce824ff1fc6c08a69680741c4a923a0e6d5dde409a27063a903c5b568f0a827bd030f9ded0f60153369e9132faad04a9264933715ec1397b899b661409dd833ff5066d190cf6db67602b58e321e61b9819f1b6c821158af5e2a2d3b89facdd20b8a6260299488fc615c39f747a282255df3167be201997f99fe0663e71fc1960e061f8d7f2ac6eaf31ce84cb8b8fe54e9d69f36b2f5276cd4fa53455a7f7223df0b8cbbdba1acb7afd2f42dfe2db9b020cad0d9c606ecf24ec90dd1436f3ea95500c87e11676b57d995cc589e1f0156b508fd7d73cdab1562437a3ee9ce01ce3269ba63ca267b3308c01f3dbce3ae396eb2c1de5082888879490c22f2b67ec98110548c9a2e47925aa04db44560c27908a4ae1b0ba934663341b86718fb7b7fdc850dbaebf365a483c9e6ce1955629d9eee15503d03b9366bfd4231965195d067b0de1d2aab7c7205c5edc2aa302d95122bca06e1824ed5f5a70397e75c0e3a56b502e5c3dbddcf4c3e0e1aee0ed92dfa24acad4f5687f85a71a54c12689efaad3908ceb1b5e2f9065e077e626d0b55ce342f4fc942e49fcf1b4e1ae30182257152a32120a774a692e3b546c373910b636024e0cb19be84726866ff0d5e891c35195ae56f102efa941e47a577bbf93727a7b6815b7fc3fe5ee8f7e18f012630e889ffbbd679ba2f0a8ffc11a77fedef47bc8e5639cee1fc3bad2a9e6b79ce10ffcd6827cc3bbdfa355d54929e7f3a95b00043fa59a040407352fc378d1cb6fdb85e52eba2ed1727a4cda2b0c0e56d495bf22b75fa7e6ecf71de33b9439852ec6eccd36c51f2ef9c7a81a89b546336f2ef06be53b30514e4e351a386a69b9f8b8b75c916cb4d9d7ad490bb3311377bd3535785aed224e0b3bb6d373c3103fe6b93f1512a842d029aedf6167418257e98e697193c26e2b1cf9a1d93d57c611effaeab4add9575c57357bcaf709c107a43e3d364a6e1b9ea3070838d9abcc448241c53ec8c61a6fb228e7c008640a11827ca7a143c6b82f85d2ebefaf9480ec07bd6c436124d7e20393389a56fd0aa3ee087dcabb383e6f5695425baf307a2e8e48212a84c3b21cf1adb921dd9a614dda610e225dcc2436020e1d4a748b0a424e55f5c57eeda777da1e3cb39267d48f5cd757a19d49199d539b0d758f0bfe5706980c088c4d3584f1058cbde3011099f6b022215606f689b2c9bd097652b3a67532714dc1396b32aaf06c49420c626ce3d7e68390c95e5bc29b49bf33e3d9f5732b1e3c4aa2f8e4a74aa1890925829bda2f40009f29451158271102265b948e26ab9310b5b89c1aa49ab0764ea2d5a946a5a0565c10ce21428113164435c9c04e9443137305cc00f4cb93e5ec230d4b493e670848bd4ec62bba372e052633bc117ee96f0245ebc88e523c60a98ebf4bfa7490c233cd151a2db2a99a84343fd92dbe60b71953e11b7109a197167e302881858555144173a6b81b27fd9c1831ee7c3bf019c0c9230c10305f4066d20a7f400e1d3eb665aaeb3a7f22d1119900bd98eaba1ee09a5d315e8c1689858987dcd1f9748953088389a87929ea7d1d5b2a3259b33d78258056e5950b233bd4f7390654ed99aabf752d459c735c0dcd8e6aa957b9e58903733f16288e1d6aecacee2c2342d7a605aa1b242c3e1e1b45f8cc25e9a9b69887d2bbbce97ac65d05bbae2f44b753917810784419f6f37c6ff05d6dcfea0a01910970f865a34ced2d61155f9647dbc9d88970fc221e868770b24b7dbc68b980a13440e60d5144d592aa33de1614920e5aeed71d08a711c21fd99e3865e4f4562ed7248a92362019b13cdbe5852ef3ea7799cb2451ef6bac70f6749243cc151e9d184222060f689d57e2d8ad8452db1439c688cb0357794ea127bd0a94ec1d75619f2f7ae43d6b6ba2fb02aa80d235a741c5218162692156fb31edc2cd7c84e4dd886dde22961d38f1c85a09a51ee6ae60961ebdef70c237fb1a18d859770912124e1e7ecb23300b69eae4fa08d114b7e4c3faf937e205a16ca29dcd5353a8bff1344373b8a3d5e462bde23ac9080111e08bc34463b26e0aeef8472efea5879e2426bac4159d0dc5791363cc6b915d01c0700fcaf2157669d012fc00d85c2118600e597fb5728a158407f765b3480e044b7d8d01a0141ef57046260432eda030940eeadf617a75d606051acbcf69d6ebaceb70ba1a6885c973f53e0cb4316ca47c0c6f364cff08eb13d705f1d75a8665d1d9df971d1884113d97dc54ad33d7923c933c03edb2e527ff143544f7642979c9d82e4158803243001285bc38fd892067f259621bb2a10995cac901a44de0249559915db363e2a24e3db95bcc5b78aa61fad89af0d91526045ea86680c4261b1253f8d54c0b62750cba00982f35d33019dd4c8405c64428ba9e32862085748ada6015887e572ceb9d324d0c0b03b70a20ed0709a6e64b7df5bf1fa1081baa987e9d69832234a8f820efaa7e6d103cfa62845fb59a27be2b60a69c5b12daa493e7b54eecde70a5388952f80c0a43ca60bb1ed49fb0e0b1413973e74ddd2567d285b898220db8397c41d7590f46ac2f5cf0e392abf98a0ec2875ca5c90893030fb2842262f5ba1ece460580341e4c4badd1f0e527a03c5c3d44cf8911c9e7fcc8a6377d12f73ee3182451826d583132608353adee6606e03d6eee2e928623b8e387684ecc8d1399bf08ee4ad22fadc51831821593a3d88a1181146a9fb6242acdb3866f64459d768bd8b3d1c66a7203ffda2bf5ee0aa8f22a27e6a67649016c6e2f32a1bed1264f26afb47b764ea59bbfb51c1fa9fe7948e0c3b31dbfa012ac8a4c201161f52738c1d356f1144598826286ad0753370753e930ebc60bee56859bfc703ac7a31e1228f94f040d8435644368a5d2cfd86fec078a5f06983eb238b33fb967e242ed50d80ce8b4d80ed45ee4d21de66e6a2682ee8188be6bfb210c1424dfe0b0e1020d13f9a74df0add070ab717a3c80047268c805ab1480dfa80fa4172b88c68c8baec1ec4385a58d214cc578c4dc64c17aeaa0172d256735d946cf62574796c30fbe1e645cb803f867336932534775c6e84e2d8a5cd73305f0a29bbda3cb10b973c57c4907836dcd5b21fd1afeb4a51099dc8d0c7c1d45e86a145e7f0760b243d86dc0de4b5f3c0df84d48155f114fcdfa71b042b5a3f93f8c2fd6d6988c983d4ae1bf420e7fe899506368c70cedbfc7405e3c7890dd22f849828909d8914605e6b96169a061b0ba172b9f3cdfb34df7e2bfcda9c8f58449c497e4c78968ee8d5280d4e53d96474419c3d9a6628250dee418c8a6a8fcf818172f69a4f9109c13b5a171d76bc768c58413c6fd1cbc8905afe81b4aca5fc8e096e27cb7813b3e8edb47d112eefd7d380ece6e1c480cb6be90a2d9bcda1902c661c36b2b84581fae0a6e927b9c19c66aa88e254653d636b93dbbb16656bc6d2bd134f6bd2b23518981306bb649e9f6b67ab9741d94666f60ea7187795956bd68265373c43f15db600a4fede2e025b109ffe5248051677bdde07bc3b012d8a37b773c195f55ba8835ee109337218152ab375eb01f67a4a5d7e5d0e42e19bda587b969767c675b3e33e1abb7251d1ea4dc99df20621adc73a8f4d0a6486065b2e3cf33cc25e2a4a9e431050084253cd7fc542358b6d662b6aa2c163542b02edb8dff7191ac3fbf1442d0520b8841d7a5246159fb076a2c0535c67a9de13e4922c34c55b5faebba702ddd0520956e5d51c9579fb8c64bdc88945e2d7b5363413e20eb8051e24303b9c1e392b2132fab7cad6ef2a1bc2b70d96ea513a3719bdfce094eb4daadd00c4510d11e16cd3ba29d5fe397bb1c9b1e982d20c7999d84be58eca3843a311303acd2950279426f765a3daf88648d0448ce7f2c94635920c46e2a25e428a7fc43256af48e59bd5a1ea5c66a9a69e2c3dc41a140a2caa007a26919c998d82c626919bcc7557abbea1ba19cd43c35c7cd86403ef94b7d0e860f88654e5d8249e388bc78071d6202cfdb67eea0cbc8f354518dea60bd30cb7c8e118d069074e8e61409c1d41672b174f2b10db20935b2bf1a9e09e2b6cb76ecf5fd62f170993d33d5532f3cc708dd3d4bb37eba354e8694c01fd55dfaf96895b34a2449225027ca26fa237f3bf74956f5fc9ea52499db95adc6169c5c325dbc669e3a8b8ca8ea798af792ccf6c7b1c58d0573d0c49ace58ec2c59cd00b4f896bf47fede80e85e0d52aa3db144d8cb36f212fc4e8a9562c50f21349d9550d807ab541d520fecf53baf11a28290a41f47ba0f8c209144e96962bbc002395d0d787f4d18638b5f15a5cf7635e8186ba0106197a9eaba820f857aa189a52b103d3f7a6f989e780ef69eec23886a2993503a3c84ba35fd24a3028b6f74230f9e0ff5c885f008451e3363d2a5fac888ed07b971651016d45ba788587addbf1704027e1c21503ce6c744817ff5c9bba5fb608a21edd395880a651c5fe49742ad85388fec5bca9a29477c912847a2ae6125f77e95aecc1719b9f9e8b061dda665bf03572bed72fdf7f0e8ce8ba6ce926d331097c93b138226021ffb9ecd3d2a26aa52a89328d57a024d21bdd7b5c0a33127d6e8eab16cc3e4fd623aa4b3bc060199d7c00488c1f81d82370199479540cf402e85a417d38116fb8b8849c25157c6d20b4bc3fdda2d28f53b5fef731842d740031828434d657b38422afc3197995333f0aa1215469d207c2e713e2f63bffa1709e02c21338f7145aa1cb09c1333dccf32432d3c0117210fe78b54211add0624f5e302ede1dad61ace4152aaa1e50441ef510a54ce466dbf3e99f6cbb95c70035615c30b6af82930670a730a2dee9f513400ba600e5d68823e94728f4890009ace737a829d2a5fd26975b5ed47778aa20ace009993ad96bc86a4fec69f16ec0356c61357f61d2d82ac0016b0d84322d9516ab318d32ccbc9a0756a23c5ff147f2623b819ecc074951a4011d0303a67157a91fb8df099105cb088826fdb3061d74172622da76243622c75db2179c1e697f67c2bdbdb5b551692f600c16ac1692837ceeb8cd37b4eed42a28262d9f540916d43608a1bdbdafae633b2c1f31d3dd628d280c0c3e84794245ebeecf29052ea6e0d930d1a0a705feac4898802568d2adff2d3c733fa6d638098bc4bb63d5b67896b1b2c4616f20d4f2ee7d282d8fc33be01d1726ad1dcb15e57651f14932c1a81224dc8092452c03bebb72bf57b041bb9e69c5c761efe9696fefce9387ef6a439a8ac0bd911fb3f482b6a2ced4b1d546d7c54563f09da5ff0c6db33e3c49f290163a4d39333b0e73cf6cfff7cf7721ca89a24e1d5acc778145280c405abdd0f6f1b7e90868dcea41f07e8cc4e71990c92b5917546e8051d07e676cd5eb3564e5ba95fd8bd9a4bc283e797a08b63509c8c368b0eca32ad042810cfd951031beee781447b1380b3ee5390ce28244d2f3cb4b4404b34e7d26e77618cf49e349d33fe7ba332700a3c623153e17dafaae29ffe79db2d26274ace2f5cf76bb6ad08b981d05bd097cae9c6943126fc8321e4958c88ac4f3003baa4a64a73e94c0cf17115e70a51954c151775d22ff6bc66f512cafbc235ba260fec6034d15283691e21891c5c01894d34ad6d8711a28e44a69e0ecb65abe389066c408a411652d1eee19ef85428dc354c13ba014c712a6488f286004105731e4aca132b712dc67a701a0c3d84e6c58e063ce35b46d4b49302b3519f4a7ec32bc20676ce56cfaa90103bfd51e2e645c03468857d364034f2019a6bdebf0b0d22646240b56fd73d06f037fda6b1c505a912cf3ebd2c0fc4e9264ff11360821c316de45c4f40d1e62b2d7c9d82038a57e4a03f357c76083a5647d581c87cafc9ee82709ef6f25cd8b9d229a0b2992c9e5466dbd4f4bb001840948c1ffa1ab5d68756fed534d544f8767af04f74c4ba7884b0639d1bcf451ad1614fce52a389ff68aa679027fb75350ad7b9e90984cda9b1265dd4db45633e5d50b391c873efd2e909a6d11387771972fa15f6fb24623418136a7b99fd1fd135d83ba654dba2c93e9e1c0520f1e21025470de72e26e68928765fa8331a96167d6d96e215c4b65b303e76e9af59a8a3946d3ec6ecaafdc51170a423f062f7798718281e4c2a2cb31b9892f76273caa34857755ade793a9d9f142e128963fe23d22921e055f3976be9a175f0a84c5fa4603cf56887a62ef2b34cd454847249f2bc86904b163a86a7b7d2e33b8a7443001aaba7ccb1093f212ed22b19ba989e2ff899604452e94a208163a8a04b82d469af51f805f9fef686444e370ff289b8023fabb48ac53f897ea9948478ec4729c30877d446e1bedbb23db39e6a56b52ffda5344d62a2b4386fa55d4812ddd986ee3706ccbce300330931485977686ae7722cced9a5d291ad425608331146c49b5fe30d1dbfd08bb5ea62890a433c80de3e7caa806268d68ee6226c745eccbdca80e338f658deea363f17573824228f646ae0f7ea5b511568f3e5f07e7436f2e61e5ecd413b3881e190b949b3d91a2b34e41e4c4f5ff68170ee756dc8df31dff0c062001b30535d83e5dc2ca0bce16b04687ea925fb6c0da8514f7015529e0d497d426d087b045a989806a32a48e2e075b10c304200cfb986107dd1cbf68861cd06f117dba5cbc223cf410581389f644bf6da6b440f908a232065879dfffe8943bd16d8b2dbbcb85300e60f96d7dfaf640f288b0d684f766e7d6a035a20aec00cc40d26fbc6a0ac0638d8a00db48201734f991a4d92768ca88e3e265e68328c98c10598115f0a83a797fc60e803fdd4b23b90d37e04e796c971f71af67425c8e3db37e1a05f3043054a43cb83be2faebf2432000c5175e5e16f83525208cfe29d153862bc590be67220f4063b295a1be7ca4ac5fef60235b9df1d436cba615e366c8f8299fa7c46d56bf0745bbc23386391e99561eada9b383df87d07bbe02ae9032ac9a51064c4adde9a280f01ec689fb30b2d965b3aa12a9fc8e8e0fb0b93d9e94530c4f95298fc9c27efd576552fb555dac5ec9e1d782684d9133e1fb14f2704e7a20dd022b26c23d7cd3e4436ed38a0ef65ef36600c8afbde628c0a6c4e372bf05e79ab36ce04f4d6184f72a822f519bb7f746d724d38b69c36db98e905340fb0aa0982e85026b168ca81a885eb3be4c2f06c2c953d919b3563f53077fa82d806f2620066f6c9b6f381e1669cf64170524ec09a0989596be70aa1359b32a374181ffb22c06074ee7021167755c08e8619e897e64be826e8db256ca1374035f4391abcc501e7123c4bd7370e06359d382025ef11faa1abfc0fe98a61a3bc2dd995ba47368a3c07a7f3318dcbc4be42a94fa8802502113fec5e62d5455d8958f453b049ff969f1000aa5c18fa68b2c7f88bf9e15649a2b3b430a7738c7abf0cb54452d3bf4884289a64ce5bed72f69e88f6dfc4bcc885a3260420e0e005e67f604bbf2ea635b01280d252b9e8aaee48360a8378889a6543261ce6b260aed6e503d3f12034c84a710cd8abbf6fe9ec160dc1f103d71374ff88daf46778c61d1bab5e41b894b166048306c3f34e0889a306b8b186fb742bc250f5639d62b2bcf658c2c73abc6fd0352e3ccf9ef5d1517e1981f3a6160d18e922dddc385585b7e0275b2e91685bd928044c4d751900498b95b7cbf237a1e49c2f52d310aeb06e4adf863a1a2c8228ca0497b2d4631148533e6d6059a4c829e36ef17568bc708fd047efe7c3bbfda4ed0f41ef71e071a9de727dc5e586c23782c1fda38510bde66a426faf6c43b54804d21b9b6a8047e2de13300deb6b738abae1d8b894fc763704edf932aa5d812dce4857c7b13211ce550ac0fc99020ce6c1e12a2d3b461c78c831f8be557b1a3e615b7f84bf080c2c106d7258ac68b9a45cadfeaf311c219a1d446afe3726c377121b6466fc2f1c2498ade34d218aed6979e15eb37889e8cd01d69d69a9a2fe03fba6eccec3219bac16c7f115e9677995a8736efbc1231527f147c2d64370612176487eefb932b8b662102d87d62cbab2774996eb3e0a5dfad86fc534f443ffd7d336e15cd48f62f02e8005544a9ded15180b0589eac657ddac0227d9be89742492765235f9e4bd904a3b833782f2ab23347ce68d03942cb046ce09355e0a13a6ed48858842994ef0b31829cb61f4584bc0d274b76f6099191f81ac4fd89e81e92526d259eda91782267e779af0f5ec67960227343a13002cf5bda0518df8c1bf308f55975c1028e190e65b7525655f1155904e5bba212e468a7afe69bda513c405e4993c7f5cfc6260ae3ac61f70d771a485a8da10cab90392e8f27bf3e232a1eef5b3267c8ae7d708ee2dc0248bcbaf0cd92d522465ca100c5c3e3429043ed0f6351bfa1f6076c606f7efb0f3080c63b89230ed682a1d340d34c0bdb5d88ca99c0b900ed1a3c08dc980a915760dae40881aed980356418e2ce0f7eac1ef74fdc98203c1a2fb1293a8ee70d0b75dea6bfa4b6569285e9dfbba53bab17cb5799ea4f677075d81230c3b706e257c9b0fd5838391060d91ec23ee3ac8ffb0e5b0af19ddb0d03ba1ff010b6130f70f1eef61976dfc44dc6289492210962fbcde56ac6e640e53f9e91591531fc62609018016eb3fadb5543b9cfb196d2727f9dde7bc2322885bc24c00100c9deb18daf9b7a99d0cb0300f08438a905fc3f893d4a6b266404a217fa42a144fcff3481f08ba7a3ee42f3b7470c5922fc62fb04410da6c261ff4190c28ff08b75909a6df92554e05881193b1089b5438bcd1c46cc90074a96ef58d902cbba65fa1ee0367e5d174b2f7282f2830bb626398f6fc496b51ec4b7cab8b6ab99be11f27057d0e437305fdc45363d039c2edf88cec3ad4c239d4dea65d6021ccc46c29964ff563c6ac509bd22701ee6938f3b0143fd0a5947237b46fa1ca6dc741e0d3d48f9768bd169de5e7212867ae89a85ca32b6d1f37d8becc6db3cf4a02f1c5ba7b08f512e7852762b49b49354b327cf0259c94242e98f6657a01076c722e37787896c2e7e1f644164a91ab8343fd6c58d0eba7e2db3a0c3d3a65d9dc48bb39e1d63e365c1bded96259ff295f4ca0be2102cf9d626414204c97713674ecc5cb40254f04066a184e7b26487dca3a4b4eaba30b61737ebcb793a7e1e2098ad4eabf9ba66201b0c743bd217571d18274321cb02f99c734f39ada180c3c42a6b1178e0e62243fa4b1f42c0e7cc18af9902dc0b9fe232554c9bb5b511fc395f804553aacb20fcde54c955d163578c38f6624765389404bb88e0e44b829f4a6a525715b87ef3fdd3e143b67d3c5a27a52d4c4d2a365cd4328e5daebc3c8bab1c8b646323429a297740b401d33467729591739ab61019444112316a79716b17126f2f2b641543544abc9f66fb3008ed47cde4bff683b630c9a900766c21fea542cd713f30bde9b68ea91698bc395df7d8316375b964dba275d60b048ba1c0b586ab65a43949dfa68bdd371ae7286007520da67879e26b1ac056ef4d997724513ed7a6343e1877aa4b26a17b01b96f36b497514beac0b83bed64a8c054895fa82446f6fb797fc7635d73811394be2f9693754af5ba0c104f7493b7776b6c51a8306f393ab9ed6f99bd5c50992cb4dedddfdf0a759c6e0a2908aa7e40dfa2a4730ee1a2d0ced2458be1655e5940605fa13005be2f7b5222925deaf2a1a1e8450e0aa23b9d21f042773934d52e1f67884b4799649cf5733a61c93ba2e17e95a510288b3487d3cacbe743bfe135ab357a0af61607d5cdc24a42739d983d5d4f75c1bf484ec5ab14eef9cd71b3703adf4deb78cdf8cf4fe1f410be69beb740c8d166656b4e8186d348cf0756716fda47b00da7f300e52d30c297d6ec1284184e3b83096e29b4cdf21f45533a09286c71a5488324ae27cacaba28c7b8e2a596f923b3d1f0ba462102d8231164126f8874f3b1125c1ece721fc0c2a9f2cb8641c47d43b11f1c0194c488431f1bdb87cc78d7c7000ae4b9e5533a1e5c3b9eebc0c0454acc0b9d92cbe6106c902a0c4f2df1687683c7f4efe2069307e010edc96070067de73eb03a5d3f8ba55b2eba24ca0ea877d4abf63ed479afdf18ac90d97b701b24c22508a7df2bf853f29988e6a0774293164d2f5a861cf8a9732b0d951d6633323fcfaa542b5a820cecca96fe93698f4fc73f6f28d33764cca3c0523f717be89267aa8abaf74bbd0ed6655476164a6793a99ed8e6aac8efc2ea5d01e7757474522d755304d12cb8881f46bc5dd708e11b8bc63e0963c81c6fb431ec18f2bf8867825efe2defb56f4cd148d1fd8adf143f3dd2dd15e9701a07494b6d78bd2215120be03449f0a6b928b300dcb0f41146cab1ac93ec03e64cb6c4e7684405d97fc43d751ae83038303c748ff626e209279384ff377edb0f75a480413d964fee1edbef696948e4dab728db1436125917677668ebcb49b2a0f74bb347ed53e2bf89057bbf9f746cd79a306d6e40c1d29308a262f69005417ef9a6488b7dde8fe751887e85bd570e3cccd07bb89a7c78152805c84f99b614be3991f962657b006cadcce703301341365b5ceef39b0ecdf4e7179d86fcfd75240bda035deb113f97b9dc93adfdabdc3e318de7ed945a928f9a011faa868f8ccf19b31fe016c9c1ae3c65bf66c4406ccff5017f2453a68fd5ce7fa9b4cab05140e0c031885d842a6f72a3480c9ac04850040d85bdb049a51e71ccd48d8552d57b65409c9f50e800afcdc1006ac608eebf72b81f5bb67513f9121eab0990b6c06775b2202f7f07c02c3b7512e25863ad9392acd3782b44a87a2d9e9cac681ded4f8030007d57bfbe6a69c633ae960197a0951c7ce2e822242b077f6b2e05a9060defa1c81acc404bded4a204ce1feafef0059537812ee7c5cbccd2df2b145c3f97652e0c6f8648641652d7a4f1cdb83c893c48e7bd657367704227ba8d17b7e9d5701de6ed696f00756dc46503c70640f2fac80357aacec38c3ba8e96d0c88e47a0b749bfe9c1b897815056761787360950693eb97bb70e1e0867249fe0e1d2aaf4aae00ebe00c2ffb49f0bacc044953c5a2331454119118157e37142b2b605de8200e6707bb23f41cb47b784090270fe6e566de2599e18ee4391284a6022850b82c555b6f18b84d4176a2d7866d9a6e0533c226a9bc50d9e1105dfe89fac9b7e017d1357ec287e3b65b93cfec9e7a45432d66ef29afd1f295e8fc939e3c25272abaa808eb8892aebb05856858919a852dc2b738420a6ea7d8a6d8cd974e33f930986e29676f739ccca25a395c727a25ffcb0d7f9256febc7d6546c9e0cf028610b193edde05f036f179396f6f9bbb15ddd1af887531489b06e4fec081f885b14e4c3c277c3c8b4c755842a8edd3f75cf985321acbe32a91c9a200a40d43212d7e1532a8c8c87591f6d4a426c3a1047acb17ed21e1c5992d6052538559eabb3a929c58d7e57eb68186c946cf5c99da7aaf8bbd1fe1aec81857e7623a3b77d9063fb0013cb97db62393ef3bc324286fe96cb73a2db4f478ec7eab33eb28975aad327b3a0ecf1d93788d72a229ea4277301898d9d2a6892d852e10b51334fe0e4cdcd48ab655eb332a94173ed118aefe60c12215605f26a25f4719968745cf3d712af5255cabf15aa2b48ee42cb309b386f4cd2bc113b4cbe110cc11052de5dbc21d203e4ad8fc8dd5f2b587ed0c72429258a5d833c046d469fd3d6201a487a928e25cad09f4ce233136eb5880aa4e9b4a2d983a9e0f379aab62c6caddc6483f31f06f42f09459e5f26bea3181178fab4d7678c25e1b83356c0ac51745406a65b26abe0c3a3b94fe6468a9e0fe5c8b796687a52eb26f7925fc32a92ed5d2b475d3351f1d6806c79b5238fcef907098e519233593a610511efab052e484ce199614508774abf236617c069e251438c08be2e838e90bc04dc0bd9106c0720673aeca45718b8331e17df745606400cbf63b096418748381a4ca172d5a60db73235dbaf67ff5a6c0dcf27c1102eefd703bbb607bb1b6a5b8ef3d4d09ed46e04651b84db8149d473c1fe52f82721ca8388936c30d9826e08d3ec1c5031afcf7873017b3a5117c775d64c3e48139e67f8a00f278e400fb19f015463d00daad610581e5f1280f745f96a812e73894f191e1ae4aeaa1268526ddecdec21aeaba310ab41d068cbf8e10b95413fd8131251b341537be07b35c01774984ef3c1fdde6fce11df536ff3d3c8c11847ea20b2af9f816ae87ef76d084ad9c091638004ea8c2c653de060da7cd7d6107b059474fa9c1ff6744622688c6c16a4cbe6451cc6313676efa81c6d8523aae5faf7161b972cded938c68bb3d3d0fb0a5f3293ac23775bd99937e527ad9777291a90a97af4ad2b7a2e4ce64970a4fff92730799806025578fffd864eb436651ce8bc04ed00c71ff590da0a7656ad6a64d82ddb798159c02f91a318fa9b863c0512b2183c0dd5b28d225b276c5a5725b69eea14d00d87a4e23531fc13285e0b3eda29022e83d8d16674ba6c4f4b3b01f5486dc524fac28de32a1e15401316a810e175aea5628bb1264d19ab3622853b6dc314e90eaaee2a9692e221014d0af0b5e2aabaae4768913404232e100a95320992f03d27414fbee1099ccdaa421e11aac1291b43f6d52cd8fdfebc9be76fd2e77b9bef495298265c560b2688e6f4d11d88f57726f7290633fbd7163be3950163e6052a86f85ab2e01f59bb03b0862b2ff932fd9e53c21d2b3e26a5832189d72051856f0a344c0780a9c0a8a81c15ebab6456448d1c0f55de3abcd26fb7598f83c3ede77b5db16e13cb33d5d06fde3a3cc0d845c89257952dfe6321b03fe2bdc72f07bf3c391436fcba3b941b056c5deb5cb0089404ad9e56c63403fd1d9ea72b45fccc22063fd20979dd47b3ecc7464f681af4942497c881bbec37ab9118807207215f66f3c433bba05af0dd368f948f15a314ca437757f5bf37a997c9c58d388d3a3087ebe27bb43ce09df9132a95c93c5b8347d9d1e70f0f4eeff9f83c30bef8c2b1d7e7ae1d75540c7b4c91afd2438d4a6e3dff5dbfff2c3512b9cfd6d626119276714629fb61648aa92302253e07f2d7f0c716168e302b98d533fd6f3086ae3d802bb7e2b093b13aa89399a0027d87712cbc5c4d9c4d8e768284c5edd347b3fe4f108550ef16afe857af54f43d816588cdc6d05348a49aa21805e2488fb34106a4d2d3bd787035592e1f88b48854b3eb72b69f9034d280828c91ac95c19de5537c0ca22410ffbc196d771f74717b6cb6e7b5875c8beb297c7ab3e19c48fe000f4dc0443d5730f25bab7d52d7ad521d1d4364e29df2c05e64659060a12b9239a0371f2d375a1ec26a06d490a8a551d9f7e6fc7f65dcfeb0e480f895dc976e9d6b9280e8f7edbe0c10e0e025b805749faa741e2329dc0624da258e6ea778d3f74dd0e560529043720123af4f24f2f79a5a2fd8a63ba24267d85c0ce03adbd0df5b9fc251be20ffe1bc49c9d44b39f885d177e200b470c29d647ea121f3ec30fba8989f3785134f741b4ac480a77087eb6a79b84195a84fe51c8cc88f0a200d728787bd72536105cb0ba3c8b242bb2ca5578715b407756b02a70128373027b8fe9a4b89ccac79b23b173262053ffd1efa5c533bdd10023336902a79b15b9e55feeadbb1a3735ab65609cb1022ef5d193ce3198b4ffb33a43116feb61111f8f23f3d61eb4ed2f564b336e52678115115d1d1339011af9df7fdcb0ce81308141c7804dc3d0649cd1dfa90870da9e1117f40c6b705785be342c9e150e5e460bcdbced3d4a739da947ab972c5f1d72f1e161bdffd9c781970c9d38f6bb049a03720162cd25c57a718aafe3799a8571aff17cc73660ccf236d9d610625ed60f18ffc6237e66611a19632754fddd5dd48fcb4b5f44f49fbf719a57182d9808b24583389b85232e6075818c00fc0f0fd87a1db7b007a2a32331186846e15918cc973ece2cba69cf0adaa39b7124c8c94f90345e775fe89b894bd20512c3da51c28c9092f764d485b08b3850b55242d3c1b732f87a1f60a277a1dd4ea687ae2cec824cd74a1234e0a32ad6dd12d32b98284e2cab0703776fe84119da52baea81ae788fb6e3242b1716c094e264dfcdc01d7fe7749bdef51d01b39b5cc64d12144a01ce7ae12cfd05e976531eb92b148a4cae7579ea203842f581df39e8d7d0c80ed61ad3c733737f2f1f19063e4750b8f9adb22884bd23db27d885c757f7ebae7db5e33111c1602d630d5075f27568587937ee7ec85c75c0097a0f21919360ca2b8d66c7c2bd5d25cfc5b78de88124c80e7c7ce289ba20cb76899663c8482dc82ce70c1757b9442b46130df4d9619fd069a42cbb1cc8b9fbe30d8b80c68cbc8380265062401fbb4bac119189e81f510381773a02fd64461d4cc15d220de4f6c9b808cbfbb95491d03abc7edd913ef75b30b39314d5646bb290f57fc4ae189bd86dc3166c300fd15a3dc0253fe46922dfb1f39e48ff65b1ef9f31571e65f5476f28f30885ae9126a769991653fe97712951d9c0cec938d9bd3725093e5bd2f638456b61f691db4c1627e9b490d9ff903b52179b1806fbf8464c04f8b6952b7468e5f6833ea6f61323bc86839f1f8811b9e19ff461b026e2bd94c418c0f36e10ddd39fa0bf1fa5a4909ae9f04fc5e32f9ccc3b113d1096a3790810f668dfe86a9cd24dbf5a699998a5ab4776ada315814d05f767f2652ba0c77bcac38229f647ff0a9a798e7ec951500222b01d87fb873ec60acf06545d5119eeabe9808ef532998eb14e606bfd4e13eb8fc526b328353a53d7124db0c8b4dcad7ba417da1ba2b76e4bbf6d9da64bc06ccb0dffc787a3bb10830912a60190ab9e5842851fb80e83f143188ff0f8ed75238a4fb745c61046fa199f5d0bdd06ce4613375de434eade20e0da15039255f77f5b7eb1ccf5350f3d361fa70f81ec8299eb6412085e17c137888bf9b6f7332f73849eb909f12b7cf7246dd381d6658714f37b750af40692b2a988764153494b6af4935dc99fcb6c9069a9c798c813249e2e3959708f43e86f209d69e97b890d3832cf0e536a66480d3bd29a696af874f6414694ca109918fff48a84bcc10e0b254a67a7f4afb6ef5a1a7ad9ef50adc4c35e9303e020fa0a815e0377707c244aca7181e5c942eeb235ae7f47d1c14eb3c0fc910f205380ce19feec637b5f3e46beb47b75ea6639a67c2d2f40b0900af8583a2c66c9f24922ca32c97a66bc191c1c81b9298508fee0af4738af9224f05aaf6a0ab7ec10f066e87b49ca424c2d11fbea2466a8cf8878672fe12ec7d9640d3c4cdacdc920604c3e0a5dc792012b8b632fe9320fabde3d2eba5a0ac1cc6de49d81bb89dd09d97c547a163beacddf077f817ac3b83e200631a69af517725b007a04e8e91500a6eea4ce3507dd83cd0cbbb7e5250fd76655900dfc1e4327237f9e43759752f8f80aabdae00b913c08dd57bdb58a44cf73fe8f2e2d79e38e601fba1916601a1d48a026c558806c7a7104db5433c1674871cce9108d5de72e0ec051f7f44b04e3243d2188f6e4b63ff0e235317799dc32d5bdd912bc99a4bdab77d31428d35d0c23d47f3a7aa7a40a3883a7f4d267cb170e2dd440746a012c0796f0672370aa16399f85f6b55e8d01f6f3229d8183fd624e1aba24c6ae7cb923c407b84d54e4f369c1c9ee5c0bd70d2c5daf54ab82dc6b8aa6a91582d602fa20fc7d76ac9c16c090aa350544613b404b76e6886375227c8153937fa608e22506e6642818514ddea18386e6e8778ca73f0d35bfb8ae03ad01a2dcea0f91b6367157f49bfaa18d2aa0b444772559e79088296e58269adb3709ac4503da520a775c3090b29a0ea6227a2107f454a2ae489a49866d54b0528138372ebd8596c24719719e37a8f0d77975c5186fe8885869384c3f78e6e75d08c3dcca7c6c38c14b07549e221f9530708f8cf05ef97844dd6d62b1d676b72df79632a594021e07df0708073b38cabe05c4d412b8c6c05b8cb0c233140e50f94f2eba1e910354f9d99ab0f500557e52e0e0619723bf13e98a6edc10639c016ba1fbcc495467b5f2b280b346eecb1eee73ce395d7ee85cd79946a12341f4872d6227b2453478c1535aadb2f87b4ac1eb10f68c347b10b7cddad57eb518657c76a1fe5af6659137d6d0dd4e70fb736dfcf7a3dd2f4479bfed23dc2c460b1ee48008480494ccde15baefec91d5d8b5e9e72fd4de9fd368d57e7f88f6d96bdfaee237d99905defdd07d8f31d2f8e1873c84d7996574e9b21ae9da7d209e5ceeeb43a95d544ae87ebf7f8cccf5574456235e9d9989cbeca1fbbccfeeccbc5db93296f9f1b5f76fc8aed60d2ecd7acf6f6b53f9ad66ff7a0ce27647d80fb35f99651f330e6184961c3984f5ce62dcd687648fb184ad737d6cf652f297b1e3b01967bbbb990ac695b699adb69fcfcd8d3dd39eb76fdbb49f5f6fb74fa16db6bedba3ee6bd9becf70f82eb31d8e5a8cd13f8c2f3f8fd18f681c77b8cd001090145711517ad2d849c367082852aac48058304e4ca440881c3ed09ddd524629bff9c5303e6fa1811b00a14144173e5f5c01c40b1340d42d09ba35d62e22b8c35a586b251ab91c212206549a84b1b3460f4b4d522beccdfec4a03a87519371f16428045f6cb10225fd430d6915a12e91d4aa230a82dfad8c871c550099b1832d4e1c81c1240a2aba225184cc70c1184cac40c3872ca0ac81c3b66e28828531050e482858c2844b0a28323982d60aa2200a83891c84440fcc0c9921640609927802b8c9dd95589aaf654ea7fc42eaee2b0f02013f54883e900412a52a94a4947881cb0a24b4cd0f77efc1ddddddbf2933bb5e52811b9c081ae38c347e5e49c090d25bd21e7c8484f15bd55ca3cb1a3dd618cd28eaa2a0e282284b5cfc608390e66105123ad6342bc61f1abf84d8ff2baa5a75f42925976572b2cce609476a3cc5efc4186208fe9dd9242b8435353213a9893c3b9f130250d957a8fd1ba3a6d5d4f8cbc3033236c8c307ea33c0d0acf8029176c00ac9e26b5fc80bd806e3720b3fd4eb1ab45939f3bc885c52827e40a979c24eaa7393eacf790e21289d2bfa2b70c5e30a57ccc3491af47f49018daa666dc718230f3f8fc7d76987db99fdb8722d1776eba13b8484110bcdda15e4832f5f0490a6c1f5217ff381f24b229048e2f706c77f9126e571cd9d79dc8645b034f24bb0c48a1e9f2a81d68754e2095d9a74c53c2bf99a37a1344bfafa731a2ff16abcb43ee4cbffaaa03696a0e16c9f2c8decdbb523687f969db893e72ea57fcdf74283d9bbfcc04cdf56b96dee8edf8b0c283fd85c335314ca5f428f06b3e70fd2355cd360f6ee810d666f22a247ea665f03f6786e53b70ce834d9378a512822dbaa7cea56ed3c220d660fceacf5e3470d08feaf3c7b41081aae6ab692c96eb65f68839e651babd973ad3a770809a3da79c6405a9b8ae0768663c7c88006bb4834c1061374ce49b9ac3b6169e44b3985a261c2e603ed67efe127dd65774ee282dbb00e4b13df871a638c46d4f8e12e310f67c3c7861134e4578dfd7352ba5a7df32b02f10ebbb034fcb019fbaaa01912434800d5f85f39efdc9deb4e5e6db38df15b82e73d7264afb1710405792c41fb88272f90f282a21f30c04d986a187f4cd091992313b6317d5ca569d8660e51fd9759cc474778d7ac537d7d4d938f9a266e1ea0e14c3592c0def0bf6b75f4e328d4567e04766ec421b8f39169cafa385a23e3238e576cfd6e3f62221ac69ff8d32c597dce26cddadea393ea9c94f28dacea56247a93ed3d46280dfadf38018d3fd53fb69ad548aa8392ab74e584dc868fdc8847f0230ec1b90f1d8bea57847c05ebc33ff431eaf653d6e625be4bed776d4cbf71a77779f9780aa371c430e0be90938eb62f641cb40dd57741f985ad030fd87cb43efcbb18ed7f6646622036512d84d4ae7fc8ea6fa201877f7a1b57ce348f407ea4806a1e1d8b778c317647ea916ed39c40bed1a20cb647216ec88cafdce59a1f5ed4ac6e721e374677394907721b97cf8b5ca8b28a7fcb81c65a24727125333377276fe7f438bc90d317857b3ea1404ddf71b4eec95b211df701a972e4ae068b5cf586160ef4627e02fb2088cacfbc0f92a03232173727bbdbdd5cf99dfc4c665186f4060af8677c6eba0d90a6891f6324aa918b3f10b03ee2f3e9c7fa886fa306e18f1ae3bee40eb733427669bb33d0b5e33e061c17c1fae877f9938bb775cb8166b57bae2e82bd7171f9767d9caa34d8476cd460df3001f557b34ca6ce818cb41f35e8993e7f35d8bf796ed4607f0c0f2f97400ed4b95c8cb5992b36da9baddd486a87bc03ae41ed7641f67119b53f7eddd882eecb91349712061cf740c36d0599937e8b86db22c184bd31d5b93edc8604a32daa5b0e94abe1ac35a0fda61a647df8dbb8421b7426dc66c088970b9cb8e08a0f5b0ed45437feade1ae89f981867b3483dbd4f4f012661d1b2abf8566995cb0c00bcdcadefd3b7dddb7e2137b4562bde16a21020dbad0a0057a95aa7fec86683f7741fbd9fda825cf06dcce841cc7aef766431c1db35a1b766944b4f7864a0d636affba1a2462f91189b9ff33608fb8c5d501650c2c6a487584608c283a82c67062fac6b001040f4ef1332092cb1c4171d41d120326c6abe745f0d3736a99ac61979871647ee1dd8d93231fc9b48d0b1dfd7b68cfbcadcada0947fba80bdefdc92d8bb29a4c99f2d7fca8f951e70aac5410f5749aef8b51563f4538781151e5d02b8d2ab3a8f27f458017a51d34a8f23f98389450e2c1185e0851e5cb04204712427ba383c9e8420d0274d1a4cacf413d2031c6186364e188432a380252b4a5ca5fd198181491e0c68c2aa0008d1d80b0d8411449a2686209150f453c20d838f2d344154ca8c1048b1b82628c31461cd070156b4a8756616d8d39e1442ecea0519d96088201b998a2ca4f9d70e44a00387e908831c697134e169b65802ae5165a46d8628b2a9f9e70e44ad3618b27b6282179e20409e80a4b586162016d42a66d5688164b60b8acd0504108ac4069e2a707294680e2551349def4d4f43d6f5f38e71752ed0b578f3ae148d71609d02287295a20d5189f054c48e1051a4267649122902f528c2d2e9d2dba07a8f144123c4660e11102b2e18416524a79c2c9a6a460063555e353d54ae667c01e3522a400881adff463b77051220bedb7026021854a16418491450c40c082871a7fd61ce08c2aba00410e5a566e9050c89594311d1d9d1ca44462a94a29a594da9651e39016351e5d61848e2ba4d45885a8870a51162baee0c41f0a88aa18631654e5c759a3a3a3d381f8048a8418638c31c61877d0faa955aae4a24a2b96a8f255cd3a554969b8ae975d210a8a033e81176428f1010a88a6d438d422a2c69f69b0224d19ce2aa3885057f8e1362bd944165582b2844e5b83aea830aaf18c1a7f0e492141ddd8501548d4a8468dfff167864ea0a4c6ef1169b3b8068c49552b19d309c73f6e316e5e6c30488b6d2d1fb22690e61749641421cd046510119d10f26c9a200743f8132df93a3a3a3734c1a1e94ab582126b9aaddb52d36c540cd124243213a30950f838cdfaac543cf183c904283c62b8542b9989d2618896cc14f4a5ee100f4741d055dd211e6020234461ea0e25b18147dda12547191832c11398139894252978c9d41d8a8204350aa5ba4354a0c0d41d8a02a9faf4b8b21cd5700aad2bcb6b5d5ec0a438aa21071b92e2c52db9bc70d5afebeac20427a0daef9f47f7e8d15d4a2965a8e224f24742f164cfe7a4f6932a7b1a6c2c483b7660817df001cc030f966464925e3a741ce5c8c18303876bb5c2a273e34652cc868d24a49898984ba58ac1c024f1a452482f2f4094b65c5c965028a1d329f6ea3aeeb7e624e9eccd56d36f0dd23931d8de6cdd7eab0989865328c6ec4aed9f52666b16cd57666561b53f4857a9aad5c769244e9a1dc59821d5ce8a6af738312d99b49860a62b262513cc74e50a1a72b0fd2c1672484856b8a32a3c82e90af7b3372b21a1f9e336cec303a4458352fbb398dbf4a4ab07834c420db677527ea6a0067b8b498a92524c2906e36c20372bb5dfa347f7b60da9db8931fbeda8c1d6b4edd5606f46357a5d3922dd92da466af40fe2d123d2d52d49ede7134ebd81861c6c89a76a3a353e17abcd69a99dce5c9a5a7a6a3ba9fd1d4f835906c200bc0e80f0341c11020208208000c2bb978110a304c11bc00006209b743c0d7697646241b358b342ee9529352bcca0d47eefd152b3a2a5dacfbd9a159a5cd5a8593b54829dda6f72352b9c4245cd0ae3d2ab592107331975499ab57bb32d9fae239829a859d124d47a21cd18cc913623131413d0d4b2b96a51edaca75933df45e2143dd547dd212960b55565eb34e3fd146ad68c9456b3889a1580ef9fae66cd6f017cb8e201be4d16739ae6c942697e8506e37f9f9d70683e168228009e9b31a7f97fed8443f3016930aa620d7ee1e4f18554005facf607c09bf1405042b39f3ff39c76c2999927137646477c0780176eebf3c26da7f67b5e9158df0be795da45b53ff2780e962acd6a2875eb0e2f074b152446c2e244ddfa819783054b63b1d2ac6ea26ef5c0cb49b202739852b39a89ba55c6cb49525a8a4b45cdea9fba5587979354f492af24a366f512756b0e2f27c928e9284b3ac2b2d3ac56a26ec5e1e560d9c1c2a361e1216a562751b7aebc9c24a224d74c726969563fa95b6f7839495ab0e86c5874ae34ab91a85b6d7839495762a658529566f511756b8c9793542509894b42226a561b51b7aabc9c1891ab73c5ae34ab7dea56182f277625163bc562493bcdea22ead6949793b493c4834ae2a9d2ac0e41ddfae2e5c4aa20b9204169561351b7522f27060588024969563ba95b5dbc9c9894d64b4ba9590d82ba15e5e5c49496524b41cdea21ead69397130b1282112a6a560b51b7765e4eace8a57a1935ab7bea56cecb8919c58e6262475a9ad541d4ad262f27a62549c74692cefad89a13b3d2acfe40ddba7939b19c18acde38c5c03527065b1f5b879cecd4502ed57e7934916a679dc51e7777cd3deda5eb34d8ada5971aecd9ea99420df6e70882665fc8424bfee3e2a221f3441eb769182f511d7456baa3ce4adb6c414d73e436db8fd3f4f3ce4e0d391807abb11a4ea1eab2c5ce290507151a7230a1dacfc1ae9c80c05ec07297fd5a112528d3d6c827496d8f35190a6ab2633ba41508d51f35d3f8940257b90d6a38924f29c406b50f19883b0aee990c5cb38fd9bb08135c452d5c7422404e38591c12df7f4e19b86ada4787190152a5c26d0648204509c6c3640445443710d525ba818acd891555aaa4619486150f0c898067afd8810cea5e111e57cd537944c0aa554efee9757478fa25a2f24fbf3fe474fa523a92d751294e7a3afa4fff95e338eeb7c12834e6b7fb6262969bdb06f6e841f6c66b0cad325a6528d599ba4365bc2ab731b4bace9b5dd7752167eaa467fa4e9a88e876d30b71b857ad41f77904aefe24a8baffc25865e00af3e938c1b76ce1b4cd1a151ea9a94f47ffcb730dd2516948f746bc21937bd34f8ff77402f7310636c59717ff09d59961855255eb8c2735047dc88c2a2bccace0a7d5ebc3791451ffd8a86e5b83a5a3fd8534cbf4dbfbabae51edd1ac507ef7fe20cddec477ee637089dfbdcc4e2a701f7f0b27afca7d9455469397cdc8c0557e5de636c06852b76edda9d9fb377bc12e86c9c858c7571ae498af66cc9db9589b4e15466d2e92de89610df61231c6f7d6a67d96264667d84c8d5bb352839d827ff6ecfac2df5a73c5536c24d68695584ed48e0941c3f6f1f18edba870d68c5ffa83d59fafa0e052fd6358ac91d71d15d65081e6d2a250cf71dca9de55aa7f478e11453f4853af5b0dba5183be439326d5e55143650055d4bfd04715f1a4ba3cea39add38e3aa40c56fd63fe511e5723b3befcaac117a22f1fae645ebed7b245a2067f9ae52b1cd90bb5d9eb0b2394145ebef8f3c5201e5fd02146b8b6ab41e7f1051df2f246b8a29e7651bb78bc680856ef7689ea1a5f0da2bed0c8aca85fa1be6fd0f545a634a3cf992847a98bcb5317171d50d487f13581f666e74f20290dfa6b7e7c19c5a3bde11a51fff2feda2905d4bb3cc7fd8b97d59c4e40bdcbe7f28145045598473d9f54403d0cf7e2d57822c0bc78d98b0c5c5f3e16e817851a749cf8859fe22b0774a80c9fca751dbb182feceaf2514ab35edefd5fbcb98b83fa184f15859ab5dbcbf4dd5231a161fc307bed4d57dfb163b5a21ad0d2bc9a05f3fe9951b35e5ebcad305eeaf90493fa8880f5e5b9178f568e76dedebcbc73cedcee1245ffc5e36aa5723cc8a02f4f3fcc5e39405042b94a35fde9c30ca63be1c84ca1e1aa06a082385e2aea772b0a2504f5da09a74fa817afad581fde5a1ffedb127df986a0fee5e917a29e9e80fa97e750de02502fdc8b179f7a72a250dfdf3688fa208e33c3ee627cb52294ea3f2750f5d75e45648fbd71ff372d81611832b29691db630a8f828cd4562bb0cd50ea2ce3818baaba3594039b15b58f9af6756083fcb276df5e5853bd0688092cb84064869d254e7e825a4547286f270aa7a5f055d39f3ce611da8614661a547d277a03ad48095b63f03574aafc12f8b41b42687a3ea349ed14fab9ef130a1ca8a607bfb0ebcc17cac035e41acfd8a9fd934fa0cff383740c5c2338bf18186c6f6789e2c05723428335aa1dd0f03bb6f59c76b7f5c12ca57b884a518eea5dc8785065be04f2f900bc91e3c35dc2f121ebac3e649e6c39db2ccbb2df4cfa6f1e50e579f0032a43a5e47db1c728a547e6d9d70d8f85e8c881633567bc91c52ccbb22c725c96655996659f9d7066b665cb34cc30c3be5ca0ae2252995760a1056ea58e68dec55a5762759f959ab5fd2e31528e5f7dc84536a007719a6f3f649fff907f767cc8402c25dcd80bb0980ff705f31df7425d52bf6f02c7dfddad5a7d953cb983e6f785937a5f4857bfe37bc16d184908749bffe00b7fe5c117aea8cca7e3cbf1e1f856df8d2fa4195011658f51e26451368a3f79c291de3c7d6a400b61a415d09097a43c166223c6db9646beca7b591af9301e8ea591ef51a0b96d8bdc9df256c8465d3cba5a9ab9fdc9db49571b4b237ec168b7443efbf8f8842a22f5e326dcd35d0da7239aa3aaa0b2ccbb1c2028a12fb84dfcecbdb53756ac8dc39c26d3c2bf9852b3cff17de499424ea3bd60ae4d98f6699f1541c309ab6eb4da6b7d78fcaf9ad69a426ee3714bb4f8714ba1c62da95df9dbf5c11f7f6badd7885ccd42bd3218c7bb0b1ea90b03878443c221e1902c0783a0d60ec1aad41e82014f6d6dcb1a3a95ff087391a5dd1e32cb011a3012244862c071b308ca2d85aa3a3083e9018e93811494fb590aca73b2cc5853d940d999999999999da736e73c79c171dc3fd1a01e2565666e66e6ed0a45634e93a6c4ede038c94dba7979e5aee49fd996f4e7a06e8e4f6830032b9b0caed07076ece9eeddbc40e084d1ddbddd3d7458e4717777e6af85a614130d3ed23c82fc95524a299ddf6364f72e0157c4c7aaeabd56aa7ff422e015d52d079a319406a90f4b5a9a15df2320cf3042a786737ae63870ec03e340bbeed09456e55f14278012743ab416cc43f9e5491148483af26395af83f59df60beacce03433d0d03640744039eef4e12e9d5cba949625ee0b9987fb7097384e436928d40975d266d7c9755caf6b9e70a6490621b50f7749f380783f8ea05fe51732cf929c33d0d0bc13eba9c160a4e58f08b40835f4112d723ae0bab5a9814e2363cbacb396ddedeedddebddbaceeeede6d99a1a6d0bb8cab19b52f93386474297d5b9a5e407989fecb16ca2f3b945f7e94327a01b3c10a079ddbf2c70fb301161c49105f6cb05fd34148a8097f251ea26ab7374818e80456aa8cb6c37604f423df633df917d790cf5d128e5070ab167cd1e98b1415e014a910444123c58a052730ba273c10818e2e72d8802641f757e3a9b403131d3a92e4a00c1aeb0e65b1011a59aed49dbf6561c10e3764bec8428610595cdb37bf2c54f4a0d29194050a245990f000074aeb0e65f9a10a7a430b0ee8890657549901ed5e324a2887051af4242483258a10538e16d054dd212c2060828547871714070d3cb881ce3464965055183992e8298b1c35a0a7125c4942a249921231e8a9ee50920d35aa563243312c51ab3b14532366831ad23725e9a1640a922d50287d600815803d821d583c5183a4229428410f45478488322509131fc210830b1594a2f8c2063594e060688b233bc07a98c2871cd658f2e35ab08f0f13253374c8410835aa5c812755489124071a04b94088a7a0f68362d4fe1e3573080645f313a2bc994cdab6db9bb6377d735c07c4711d374da6b9997efbe8997ef398c7147ff3e60e73377aa66d6a5e77b2475ba2fcdbef6fa6e758db6e58534d9bc9c4994ca6d5b6edf7b4dbb66dbbbb6dbbdbeeca2897d8c0a18fec367f4fab7df4e66b5e27e110e2cca216a72665773fc89f9f94db715f68249e5c947ffe6e9b49ca6dd3eaa669bfdadc9f1f39884388f28bf1a7a7bd26e56e0c5a9547aae49a45de3a66d98182c79b44816465a60df001254f08891033a9693a08b98466204510218002e90c2440318821102010ecf02d20aa9842858172c874f80532d81baffd3034917555d7228528a2419dfd45ea1ff9eb75e01401071a5fc5bbdfed4283ad5196ef4562cf6ec5cdb3c16db5ae18f19e0012113e2d275a49d04619158dd19f017bac6a64a8aa95442f2ea1e1ef7442c37f2835f8999a0d1c9974b327d360672ea0915fc64a8d5e07847fcc11145c28b89d09974d6198f03d9a15bfa60259ad6e98c0a02158fb06d8a3e646f57eb9aebcd4505a826a4241f0c80585cb040628cd180b313002adbc5ceea3c60e35dcd87c0da9f1a486ab85157e0dd18f2c16d083041ea15f840ac475444ff021188c31b392818286ab9a4526940981607377375715f83b76b1ae75f96a35c5dd7b4ab7777b8cd29d0c95aaa8884ad7ad56eede918a3b4b776f2a7d806f6f09edabe100ccdedceeded2c97077777777efdaed19500634a73633030408083a922365d98ed72bc6588c75ac633a5038010c4665899648f2f0d4d4ecd11eb9f3163284843497e6eae9a1d2a347ab058242a2c8c851a59ac249380995ae93f19d5538ee2d917d35a8c6e8f6586cb5f2255f8a71b790616232798c25dac0058e5eb0e03897dd3fe2480df27b1e7f0be26659966559963d3f5d4dd3344dd3b4e75f2dc7f736f3a4b7729af578c43b4ea15a5585a94368835ddd240cb24767cf770d76f69d7dd4bf9056ee1d6e67fc26fefe3642173a2f1d2cf8cb971f0ddbc51221fe1d11f23a3436c81d79234a889433a0d8d111d235fcf1a3e3fef6921393d260fddac2d4b248940310b53f8d33e65d217bb4daa3ba53ea0e2dd95239eeb8d9bf052bc6e8e180869608d5fd117edd89b1289c247aff58d68e010120cdea29ea3e0b3c423f911435dc22181ee8572c80d052f99be95ad32c1dfc6b8518562aebe00f6c703fa6f6001b880c2a53b4677e938c9949fb983d0ee637cf088cb73dc75eeab759309af643989d5427dac3e0f2c3d55c0d46d3605e4c9036520fe36db5f1c5e0958406bdf287aa424f1fbe8d976f646fb497bfa33617ce1af3fdd446cc0783ca655551cf79d7dab7cbafbbe6ed0cd7172f8ce174f1625eb823f48a48af087709ddb704f7415ae6ebfed63eec1ed2f159fb6685ff5ab6fc51a8c9646a6e6e1bd8a3c3b0375e9bbd4ddb98994fa1a703851e52394e76db77f3c6ccfddb6b5e6c0f061e8159dacbd9b3b5ee5ece3ef69935f0914cc2ac11e3c718638c3182608f1f33b30369d8c0121492188b310dca1f9d9f0b9ddadaee333f4c0e28cbdf6c46a5ca5313a365939eda1a132f35407940270c6e6742f98a5a626db3ac13616eb3fdbe0b6ee34730582ceca5f82ed7eba8c769e28360cd6e5efc711afe158d2eb7893c4ec3bfe4d553a30f124b312dcf8fdb302cd640fc3a95f719e6fc2fe6d6611da761222b6cd4fc50a0343be1264dc3cff311d19048fb64fb1c13a39a65730159f69faac1c879266f8bada598500c8674f472b584807e7c7a96f0c4779d183f46193399354cbe967d43e6b685ceec65d4322d2a352bfe1711a60a9d0dba7cc9ee9236935fe6d57f579a88683fb3fbe73c84e84e2397e58e53a9542a954aa552a99812e4fba752a9542a05934aa552a9542a954aa552a9542a954aa552a9542a954aa552aa4fbd4aa54aa59e3375cc279c54ea51a88f425d8311e5c57cf45c7e4fa90fd2302a98ec157245a9609e4f2a1897542a954aa552a9562af534f55c2af5cd06e31776d5eb177d38f99e6db659e699f30083f6733fef4dfcf6979a0a527af464e878784119d6a0e4ed965e04b7bcc3e963508d1f43545d622e2e2f8fd2d1eff25b531fa4bb1beef70b637e4f887f8af998e7b8ee5ba8f33baf48f7f239cf08578efb5f9329034f2a783588c3fc3a8e5548eb677a4e4af9bdc9f471019eeda824ae5635b5856a48c000003315000028100a0744429150240cc55df70114000d7f9c466e56194983410ea32808620832c410420c310600438c51888a8803a00b5c652e4046cb801210f5cf9b453d62d8b8190213602395476ab5afa3e37179366d6502589a489e90348c148b83d3052eb97eef25223b442c76a6fcbb80a3d2e218afa8f1af0741c8cc1bf210315d83bac05de677bd8b4a073d3cd84e68c4c9d2d060df1df8ec2c8269b03e00e46e6e621d37430c1cac374d7f588be9e98afc455e476bdbdbdd712ebb484a068e1156a8e9d7ae70cbb07d6fd1e22001994a544e546a044382d21bb27ac8bf78308ef39078630e1690d90f3bf235d6808cf3b8974360997cf19f21e19917a0c136adda310f4372cdd8d30b0ea2bb5ea04846e84584d4eb7657ba3bc41abc922547fbb066b901422170e4ffe64a21330f1baedfe594df95fb83f7e856e14917781fbff617fbf2c106fd866887081aa709fe03a4e099e2506652498710907c1156ec5044a417294562830652d6b1ae70e4f279bbac08b4a42ca7168fedab06c14a083d656c5e671d52e181ef06f186cb2e7dfcbc41c84814f2ee0104a99b8cdc3bf9250549773c118dc45043dedee08129b2fc3670a916c1a7157628a909e1937abb236fd68875675bd2b775903497ef945b4baa0fb25ba99aca139202e09a9ae909dfb801223a91ec0e151a815382f218b74323075b7edba32a44b36758e9844290b390d2c47181446e4e1c607daa10d1fdcf3bd18843bcbb356a4bff85fad6386d87342878c9e7899c7e02ce3a63e3d6b448eb20ca3bc1d0be51db2a50edd5648599e56debafd4268c00b21cda3a8f502c4358b6803be5d129d70834d09d9ff967064b2f55b8160a80a2cfebd1d11c78868dd57999c3dad5d71998b2e29afbb09d53e5a5ac51e7e223832734daabeda22ab743237f8039045d926dff116b11a9569ab70a2b6736fe840323875802009f6a11494d031c5d5a0fd7755518356aad392c7e3994f19c138bc0da4c6aae02514015df7bc793fd425bf02e3a5422c45010f892b66304a11f8e53c2186f9654677f021afb141be188fa644486c4b0e4fdbc8872f23e18893cdc01cc4a1440021cae3d7d8a23b535df467cc9690b02044b51b225acbd24b84572449005c9dd0c94f0309584f3310025d133015a32a947f9caba07539594fe7849b69485c62a877a6895e1c8ff0f570267ef83f7a231600170e04234c8d27a00b4a53c674f0a0582a2e08edb88aa1aeb19395c1d5da7bde2d69935b1d316a59504c37a096374ce2b963f27e719c0e188f2f788b25f965d8da491ac238e1d6480a13a4162e00307c36dcb2c77a39860d354209d12021b9b80c1235a722bb29b0226853e3e3b674e6ba7aa183b00663a26661a252e966b0b06ae605595c2ac920aae23f3eb5fc51f73f411c7ae6d83816d7c42d1987b168c11988a4fbf9b1b0529b5cb9548775f67976c3cf554a27b03f66b601a4919568c4f4eb9795f53a848069f908e3b22cc2db04400df319b72daaa7d8a639ac5d6331d958542d4fa5187a037edb5f084f6cce07dd1233281b53a03c6ead46c28328d6034ab9f227c96f138a52a03a495c1893fab7874386ca030aa4cf1c07e34db818ea7190e632db2af74c86e6f29bb6b825029b620a792c63e256c99b176f366d4ed0603a22c305f4f46e07b4a46b29437f17d5b4cf4064d0414fdd5f0ef8661f5cd5d31504a1ea9a0d11e27c6ca916405fb6f0b88cb54226648a1db052105aaf68f746bbcd248bba9d6794851b5deafaed7810277ec60b5a0d243f5a98e5fee90b99234137a6111550219745996a3e360f9e0be24a7b3fd1e6a16824b893cc251c2e3b0122f5d07249b0e47377acde168c5f6430b382093380c55b42971f4360f60a33e77e136a4229fa680ebfaf62459d25a50ec84e864a33eb455b1085356ef18e742699c5eb3adeb8344207aa1a37dd20e2c81b7f8cd77e57c628eff26ea4b4f7d60d1487859cff90e917ca743e7a1555ab5760e4f98f07dccef64501fc5071dd3221924fb54037e1fae8941c6c3daa5eb6ce1dc4a772079d2e9a70da1bc2e178fff30c32e4d1e1219fe15e51fb3c31a626eb68e5f00fbc0d710b9cb08e7f0049ecf833a6f4e2f5725d3bf0c2328f0eef23125ffa3bd0c233efbf9d570428a8e1a1f78df670ba423cd0f1ff8e6d647380f8712a37efbda8c4bae8a8ae8f654e47afc427293fd1972fc20d3c2b656fd755e55ebbb4f8b9e5dbd84a3396f714bd6e057c5409aff6409a6e2baf84e1c5584a64d496d412c16177e1feb305c39c6471a1156e40487216f16f86486efd6caad9e040f6f84fb5db70a79c99b5c2a1da294d2705cf7b9ff05ce89664562e424b3edfac6c7b3b6d76bf0593a730a45b1bdd03230c8268e4b15596745b7db7b05c0b90bd03e08e374afce6590f36dd1437774a4e2b2a793950345f37278782f4ebc095169bfbcb7a316d74c37ab3ac2d64307f645cfcdc5ae6dec917677d78d4cff01dc6095293d2c70b415a550825cbc550e4d56dc719a1f5388861d91f4d67a04167d06853215f6e0c04c1dbc5bf0f6d0e915f8a70f828b637d7c7592737b8b8cda0e9c9fb03b2be473724074fa756fd7560f6039d17c76bb0daa53e6a5a0e6f20dc2c84e96d635d6b0efb60e37f47b41254009379c74d6281fef25bb9464711d625ca9e599229101b7804fadd2e169d5dbb6cc7b9997b3fb05bcad376ff8e7649c1296842a078d0b9ddfcbca97dc79d39223d2f28439d2fbc82385549768d88b6b74f603c6d916cd88da0c31611fbb7aaf3d2c0d2f7b5eb85a884386f9ccefc2998568a88f6e68915f52ee8e45915e3a99586e2bd35ec65fe2c89d3d7a0ce2760f850778bc872f51b30d46acd2670a11df04a37e69eec49e5e49ff4f628d0267fb0d8752e73fa8af57087c3aafa2f41e79bd71e9b04872815f06d4726dfbc71ef625f64ddf79dfbece56d136ff0cfb902ee21968d212f725c2128aba411545b47d126e1a4611efe346b40aef9588adc605b467c65f91c8713375141e03d99f2c25c87058d4a534b2e81d7c0c3bf878e348c89524c50a895bdb7cfd9444888bdc72fb80b7ca2a12b6fca346c1da49d679e5c24c5a948898ff202b99e9754c99a26eaa1075e9a14ce83fb238c632e418503d6d65968ba7f3382cbe69f30b03d65e9d82c3bb7708fda5a97c3831f95ec21ab729ea3b445a0ad61f37bc6021063a559e1052d2dacf922dad3f597ba50df5e4d5da9734d69348c82a8e587a4181d86483289898c0316ae5b643aa487275b80936736183ece18f9544960ef6d8af824ad4764923c369d90c8a2b500842da2f9d369fa334b7f5360bf30e8e9f5ac0ac35a6e2ea1fd2abac47652735cb672239d0409c85a4d0735cd2136bef1b7cc39adbe002ef120b0885b92597842986a96b4769988b25a6fa9585be739f7d3c44b43bee1537aa8e0ac94099dc47f32d415750475ead7c09633dd9686b8b2bea1ecc2d1375ad34039da214e016fa0423b8f97dc0a7af3f7ef225a6587d1cae073d42f46b70a057a6791f8a7d48d058335bbb93d48f1580b65246b91e26e4d3b782b16b736f6fb836bbd981e545964c263a7086f156f70ffb3fa0d3a1643ef449dd2703c65a7ce6cadd0f114bc0a101cb2cb17bf6bd824ec2cb68c2a315c34a881fd7b38f718b9591b8f4b12cb827e413c0acf41957ba8e229855e971bdc64eccb89f2cc935a27fe3c07f3f931029bb0d47ea01172c31d2223113591e78fe0edeeeceaf3e43aced60ad047e6fdd1cd1ea344bafbacdb2eb82270e0b9a0703012399fa16d6b4b0c0421b3f28161e74a4fb2aa42e23c864703ff902a4ac98a2f49e56fb168786d434731335f634287f53f0ac6af1ec0b90957159a17fdddcd667234dadcf7193e0464ef5f45d4433bff46ad37719d8fa9dac065c46078e8b80f0d1395e952e8eb6395e2f45e33600a756b466c8c0976a935f7b3ef922232925d0f1e7622c0f348548aa7b00b3e92fa03b04ccea8a50e344688557d39c230941c31d46a2a12617953a1341a2921c60e890cba097c7bcbf21d30dd339e87198f6a19d1880e25e8758a9ca78986b392e07d015b90ff950fd7b624c39fc43114c559b83b7cf0cd88970ce24fced2e0c2f674f1d759215b68aa91a644929b9917108197637cc02befb442fcab7e0b9f51a404b98d0cfac11517f563b8c7686d5b1640528bd8b6033c288366e328b9a6df3c563009624b5f4edd752f05a29bfb05737d39a397fa84eaad25cb8b213a6443ee830091f035a35f73b88d4674427574ebe703b1a0a0debd50397868454650976ffb5f96b6184950cbba996075f764da227798f6b3ba68a63155c57b280c8c6e29881fa80a9f146a0cded7dbbea1dc10cbd5df4d7e914a38d870e2d7aef58b8555ed5bea9b9fa6ac8e621968540d8edbffc097924ca96184c276cd524bf01ccea4298066ea4cbc93232ee013019a582981e7a2e33fc782b027fa3130d18fbef53d91e31aeb00624910bf1de241a082e91e93e855d99953536da0b0848ee857319eff6a3481fd260e97073ebe0c84b9c847aaaa03449aa94f7d2ea20d061669dd5998f09a57c6c3e920b1e7c6491e73859f1b23036ed1960cf01824eb684bc753132f852f8a5e103c4ea3f794ae359e60a71ba3a22f26e28c501580b2c2d00c06a9afa9d080e1222c5a1fdf97a8a25530f3851b194af132a1b4b89d88c31af94d2e824b988d54b7d1e250556e78d621aaf719778afccf3d0b3ade9adf85b88b9489f002871f5955c3e8f277aff19589baf7945cd450388b31d1e12b678e7fe9d07722c7cce2c51800816840cbf84b686c34477f49fe6e0ba41ccc2cef90d35e184edad96a6e39d25b93ffedc3f7fd4feb00f480effb38425d1a2ff8fd16bb0b912c3ca7ac42eb10c4521110ca89f12e18b2301f602d4777b28882e7228565b86794e108c3220cb09eaa3411293a509fe21af6b0bee29b243ce4061dd592082c54c0ad51479d1cf8a227e095c3a410a57017a72c00357f14a11b4bad9b7111aa7fec3876b103f0186c22524370ed241d7c7aff21f1f03363d20322c3f0efb4476a0d00029bf1584e23bbccdb4e1130a41edb989829d7cb51eca26f5d6b2c7e86b557db62815a2fac047f20fbdeda943be80ed60d7aa6155adf6bec0c6f5d907afe887f4b95ebc35680ae27d7ef55ef05240580410486cccc1d52d6f8bf03233022c6140238bd8480154a1fa3a4dbf8feb123670209c5e7e32376e0bb1d0e173a3a774e3d46c371c42c2e0e476be1f49933cb502b1ceeba92423dd22a9bc2ccefdc7c1e10aa5f04728f6aaf86f3550b912aa50cef126c4c6bb1c414dfdbacea78fa57a02b15f3da46d4937dca1d1fb44769e0bb9855063786a104b81c0a3607760d5f018e9cdcc8084ba5353fc6c427f018704b3f9b9c2338502e71cefcd01242e0737b191bc3d9003a0efe2d0ebd726585b4e8ee1dcd1b519509f78203dea6bc79f95e9eb2aa55e109ab5095f97d6b4f182868fef6aba4d098bb99c555dc6fd1488e2ab90da08e1880a22601c03567cfb88b0412a2bc8d932dbe31d0b44ff3f5139a84bee750393db09589c69ffd3f5c162d027de7d16dfa1c18abb4627705e07f1d290fce6d9d3fa233cc55edbbc934ac841f25c488053b43080a0181d4d7ca4aabc8528c8b3536e4446433ca1d4f011f0fb26350330c9629777d868339e76a8eddd1fd92164004d4c38523d3b94c8d30c3954c848088632b10dcf833f9c90ef83c8b2381912005c530308325716d33686818c4529a861f5c1b301cabe01aa46a16a09dbc687ad848f43a6810011c5a7f7c6aa8e0bba23ea2ec2b49b32518173234cfeb99b147b5486f106b11f4e3d78dca20baca6c85286257662282db4e3a02c0c85eb40986f270ab767c54f2464a2c9cd56337e5573b3e86643fc55d886e380b959df834cd5d0577a9d2bb28bb764e907f61aef0979dad6dbcd3aed6557cdaec3e06acf3242dbd23a9e220df76e166b032b35e86bab431062552a31d811b4564b85b6e5419397d8e04cca8b67a3926018218d7039529d87e7768516f779d2fce8760c8c4b44a7213dace17b7eebdd6a905ff894ef75a15f01be555bab721437da08cab4332d8a316139144e328d8348af71c200d1ec70b4c2b4db46dc727a2fe270daa182425e3de9a1b1d9e178f1e1fa0d5c096e5fcb16401332fa0fce033291bdce0ca9187df5d05a533b7591a8d761c7d4dd470c68439a58bb917875451574c50c5ae2b404b95974d5cc8fc4857de378bdbf31fd43be6ade01652ad1315a280fd1eb3fc515e6ee4ef37ef34680cb461d0c1f4d743a16bd8da9dc0337e932f6aa3ba746e131cb12af77204cb835270484aa5a865bad948f7ae95cd8232c5566e092cbd1a5e717f78a79c6c56c35841b09c40b375d95be5210a75c80331cd541d222e13b9808d773a851934bc6b229f498408e7c10806c328b67c9697d328f7cd5c025aed657c24db98c98ab5f1a9431e26306de821534b80a5faf21e44451674d961c0397984b46e186c3b6562f214e039cdba7d9a4fd3ff754d96369d39887f0289699e566411c18de126bad7634106a9920d9bf307966d1e654e55f16298ff03f5d7b2e627e625971fde9903b008466410757f1cb4bb0febe2a10d5e6078a5ec2652b5f5a8f2c9be58e93c7992b79e429d89a0a7c520c45cc1d9af83fe410643be60c363cc77e6c3a25273b4c568576bff818c6c4d0297aed0bdb7eccc11675bdf98350548bbc074428269ea394b72a5003157f3d1e5e1d347e7150ccf815d2021e56fe54ce8faca8b9d1f0dfa16fb58925bb5f23b705b1cdabfcf6f3fe04ca81edc6f13c54f5f14d2f90f7ebff1f881d4d7a7dcbaca705b6de37a0e289c0de14e7b3c15540f5f784b88c103569b005912980aee9120d1fda7ecb164ca8987c9a5a83082d13a824f5df628e790d9e82ef467880c23ebd23ee8b2ab51fd9b75a48fd9a5f5145496c42937456842454ccc39168c168d82433c49d5cd0d0e88a61c0fa701626b82e6d811ab6cdedbec64f27a5f14223334868b7d12f3ad99baf00c20970da28c841f42505dc200641ae5cda30aa6479071fdf9db93823842d99ece115b37200f13470155c8b074c865ba60d478d876c5c5febeaa892457a6d472f2e2128b9a4828fbf2f104de513177c2e37f14d25ae415834c01bf2b18409afb1c2972e11cbaf80cdae6f1a6596b7f155a7b53edff933b657154a8de4b3d93b078bd81ce6f7b314f228651b8d5df6e51a466bc3722f6652c15ced038f1ae118baf8ab17637d3d5aad3407baf6a393d62b6e4d4d965d678b600d342d61b219283de2e048d3830135a01c2c7740f13df0a9beec2fd2b2bf940185317fc1b0f40ca84ed4402a5bc666c9261f3a2b20f2f3b5b6aa6d0e46f9ab07830ea50cb774eab48e3e6c86bd4b80552924ff92e9896b745de066f6b5cd7df94471d2ad6a3201fb72b16fec81b7ac5ef6db92d8b8eac7016b5d46bafe4c332d5ab53674fa6347fd426b4433dfb9c790a5def54e86a4b62133c2a52709c5f217da85f2000f70e4f458ed5c9e377efa678074f307dbeb4b9250b0f23c0f030c2e725cf6e7e08a28864882c0a9ab9d33d5991a08f48657837a06c56644d545d9cdecbdb94a236ed6f9233a7c8c52b24b6d76a4b1709dbb8060369f65ddeb72c1854e4c26695f8f9a24a00f4264423f061f72ac61d76457b1ce216040a9f228bb3528618236b25d3db9b4370d375e75fbc78a520e649566bf101f7178a3ad75171507f8b96ae3a2e3d93617569183d246e09b73b4a98b9866f8c761c6b1beb118010c0b6a9e517451508a6a5adaa0468ce9b01ce734d9d29798914f78f6ee85be68e0ddb870105e5f25f5f3c7f7f1c1eb1b45fbde8dcf8901160f3463cb781c119ea83804e8e05945900f715db38a9ebeb0080f8d88b47c8af954088fe1828fd25f61ca8f5e7b23447d4560a5db68cfccadddd788a8e3b9eace8e105933d6850eac7ab3be13123a131f48ba5c0a7288e4ea7c3194a16e6120d0330d73cc44d6250d16baf7eef1bba5c845e894fc918b687d64e4da7bd46ba5f9151b6048da12da8a23b46a57ad96dff533bdc92a35612c13cbfab154011937ebc0f8930cc332837991a63c18328e1f86a2ed74ff50f8ac3862bc165f40d231ef7a7aa5840201274124cf92c50caf410b4e177cc4dd9aefa6e1622c1137b564a5d160d4a63274bce745fcb2678cf8a39a5326a23ebba1f5fe748e51411c45f740f44f10288651bc2a0d16ed6fe69183738ac265da84000bd852904eb43990a984fd5c69ba2714dcc6b162230961a472c6621f0fdca367d850524cc0628215b41f87d07eea644fd4e1c2a42120c60da1fe09a5d55153af1c6ab5d0616dbe6531cc336719dc55dbf21ebfa8a1eec962a0c68c555c9927cb392e01088f0223a78b80b4198eae25e5abb0ae6da8c2e8aa810156c40c3e2070a4cd6393d7e32dac7ecbfc7ef88fd4024f2817bd3631da168f42c3fa907f79d1125dcec472b6c19d55b92751bc6c57ae8f95ce8aa65c34a6d75560d4b9e056fdce146d463fe26039ac43903eefd1e1831160ee07a156794fee5d425d82e6f3979536629b9b76ba6e4879c6cd728e748a848b1476ffcae012b46249d70ead9f3949a819c40377d651a840234e40d98351c4e3b8783ea1d0d36efb314c00048fcd66980d87f6a48a74a701426e21a8a3f1d43831b29cd2096c60afc8e39dae482365f04322eaaebba2650598cc40e847b8d85a6f73e3f254b4ba0f6b1d07d07b9c68fe94585f3ec95f04471273cc234254a3db350024e49d163e5550b9355b00f4266049388cff879acb4494257c37b443c2e801449fc9fbea707505b750c1f1559ff4038fdfa20f62de41ac0e4627e2ba4060d57e0d1b998800cd7706dd82afe0bb732903c0a6f810d9cd61ac1ed313d96d707aa4ce28ffb63d7301692630fcb6ae094b002114960fd827366e715a1c0189faec90528e38f9fabf285745dc6993dcd0dc6ba9892244c93eea8b6c867257c6ac8c6507d7e7bf81ce9c371a7e8452e56411888ff2540fdf50931e7aa86f8376f7d7782f684be4783a28625e0d0424522fe6d1d7c6871669fe242ee31fb4f92000923f13bea1ecf9feb429a50411ef61c6c1acf2011c6054c94e45ca06445877364c59b60c06246bf3bcc8c90c8bf3aff7395a14fdfac6287aa8e05da12e1e6db78f169c0350851bb9d1c138f082faba0382ba0606fb6c38dc26c9f7b8ffe47b75f82a3561e4417b5d89d1637a874785de319ea97e7456b98c32a1ddba41e80723bea28a3194cf9d839a9b968b559816410a28832bfe19c980ccda0af666b833444fd37a576464ae5404e1cf22fbb824eef54e2cb5141ee15f83dce76af100e01edcc8108e98928063b07689abb44151a103773295b4ee423ea829508b8d9589ac5403a3809c8105cce33d4fe51605b249181224e911a2479c435491f171c228efd6d482ecca70d8de9ae0da871811cb4c413b074b498be55645c6687d9de4b14884525871c183e49bd9f967c457e0d5fbc3d49d27bf769a0bfe32426e253c43e0ca4f987fb529b30efce4ebc211a1ad5f2e41ac4cd1921a78b59ca09fc110629a453898fba5b8b9931cd558860b02bc242813ea70b896b91047f589799ee6fea036f732725f6eb45e1b9078a77aa163f40d40af5ab925e96f6e1c1171d5437793461680894952cda39acfa627e0ad8231e16007e2fc498de1f30813710975f8124809db6fc30df2aa9843f0788646acd65d17760d9a21bb95885aab3a694a16f50c7e009b5910070b815aad91883a4bcdf30a03ec98050250f6776c71b5343255acde093453798ea1f2707e6a80880568720c9758792f7e6b86809b98ff208637c84255f90b94a8d6adbca88ec9dcde00e8739cd6eca742a709bc890d51c40084ca802f5c2429a4593f94d4fc16fbb636000a7fb84c78e6b0b6184c6d5eb72fa62fa37aef1dc142046bcde70007550f2ad5da5443d40dd6fa55d4a9c4fc47db80501804fdc8e20ba54fd06515783f0ff2bb5f1ef31be9b7efae545aaa688ce5c55f65b2be162f4adc3707f037d44d54a2745d02ca68e9f5fd65a19ada222770edd3ac74fa6b4f030b40e944611ed7928736eb46e3d3834caf0f443b60398131ba5500e49cce7bdab594061cd9997d18c7a617553caf680008b165b43d41445d87b01001ef79a710d0a795740e5cb8312fa3da5143b8a7bf95eb8a856f66651a162ac570dc3c4c12d00bce9dc3f4a2b2cda178e46d2ae91fc19519fa0c330e3f3691bb64986913a9d922f5a8d81a5b6210daf9c2b3d5fe9104b3110c7fba2c9ee8798a8d7f686901f46edaa0cfa9f81da09a780d8c409b16532ec5bfbcd3657b99a8f224b30c94bb26d762507d7242d5771ebbab550223933e5e20d115d9001ebcfe79cceea49b7590811375154832875615eae0f2e685900b8de2615f0505a0af9f935aa0f51a72fb6efb03078015e2fa3be4ed71357cab03a332e3e322a5e585a45c476ccd356c9fb14bf72f488f7487ade0debd9f788a970cd596fd0ccb70769909ef07c9bfd05af11b1095efd185365a8c7883929cc3a00a7c6ed47ddb9db09d8b87c8c0381858cb3deb495864896ec6260a377d026b7ab485a5a0f2116e1a41c273a470f43e0f278248f86f0a67993f0ddcd91516bf5a78ae1920346b8df0eb7862076c75bc101848e6f0caeab58be498425475b3e372540302f2fac489fd44aa4f546eadeab009dc9f6062fc637bd290a20086e3a0fc051a8b82d5d4a3d3abdf6d8054a7c94be1e31c9ac2c8743ed9e27b7082c1e7fea46df4cb5d7d090ef2bb5c839a8e31711a05df71cf296314cd4d8b27b02bbacd30b2035d11d260e8d487f8485b3e08558da4c6fc1381328b8b4c2095266c3a6ea90850fa4f80bcf7ba77ae9033b0de4127d94adde04993794c0ddf578573032079ba012789008207a623e1ab8b8860ba7c55808b1d3e3433993ffe1a51264dcc723a3f425e080bc3b3d1fc4238c49a031d4d9cf90eae73ded4da03410935de6db09d7d512ff4d0731c6136781a21a4b45b763ba183d06d0bad68b998896bcb57f5a9184caa800c1a0ff8434c8772fdf393007876f8fdf26882da1cb7c2be84b27c1d0290015be0cce85fe63b94b00bf129e047dfb550c92ec2f003005afa106db98851acd8175ae6453df9f380bac7b1c1d18335fb9e37a5131a7f9d2866f7dbc961a1938b67a92291437fdb56d70368c49a63391aad1daf1310ac0aae0a1a6239a96684642fa0aef8d3306947038ef3f3d385e529b420b0136bc7ad47211ea7abbb586361fca823e3920a202ab4b7392d5a04f7d8a230398032aa01f62e6614635d47dc8901116bafac759e7ce930e66ca2dac3d4d12a5cdfc70844c40fe45adf794349e9bc173ff9b8faf6c7f878453e275f80e70c16a5da2185668459c7e5d5c1d85b5362bd80fd5f4c9752a81869ceacb6b1949b5571ff1d65877a6a481d2ce8ccc5fb654efa6c2742c02920ecf50ce76042de8a0147b7c1da0ee71a4aeaf0070a575925d701abccd4f325ccae7e4b0e922e28e74a2014de09e2cea1bf2b20aa710c1f56fe31776d4ab1bf136bdc5f782f4f432f37835863c91661693f948fb1ebc986932cb223503b1aeb4203c3a1967fdeee8ffcd88f5e54b1b72ad3e169c251f8c562035fdcee1931e14dd17893ebc3700aadfdad7f33a7584f6a63e1e0c9affcb2395ed44b44240263f5b0c65d236c36f81a09aa7a0466fa4c54f9b20f5e63459fb56f10c500d9cc6582e2a6dc338953adea58e6707270b6439f789c6f8a57d4acef6ac6b7892bac5e2ca1640815d460312067125b56bc631f869ba3482b0a28689ec05fd4cd89d521244a4c587413a759fd3ccf6d867804e518016f24561b07a3a4c5a2d14bfe04604bc1b87f48c9da4ab8db1a8762532b5a3214609ac3596171b055b8d867ebc767ad482640d9637d7520717b859ef28c6f1c0e11e3005bde9564dff7e2fe4ad65bc2f4aa1ee58aea08704e7cb2d5a24f3539c3c0f0d96a78ef281c7b6c9aeb6175e368f40e650545a0a5a77144d58d0e4add775a565cadfeed3aef916fc14651d1673d160251cdb4bbe4ad2cfc4846944ecd978f1da8b7621e5ee5a4f7c8812c897afb2c5f48e09a89dae6aa24764610c4e1fa0997da4c407c098949e105691fbdf1aa351eba01eb50cfb30cbe88610ce79f17fdeb58eb30be460c37b3e3447de76cf7fc3e4a4f39a7c24308f335dddc719762efa5e1a320966edd92f41e5a8f1f9234619c55498009a5231cf9cb68b4b24f411df9ff5bed86683bae1cd4c5a823ec7185d521381a95b3ae087dec5a3ed8471750cc9caf921eceaafbab585ef50e1c64c3ee0050461ad804309d1af51a101ecbc5642e2867a6c50b208b3847e09f0797ffe0ac89b68eb141366293a8471667a60b3a183fac39671063fd1431f973b7abd9dda91eb9287c50cd5502f559d9c0034470819bf1a0f4adf6a409fdd711aa6faee67a1804e5a118e456b3ef494e1afa40cdd25f958459dc0360287dc63222acc9ca5efdb4cfa5fdf0caac79c4962f6898fccddac62cc902c02b42a1f4a8f3113db1b49a3d6c0b788a2583ce804f2cd88a4416c5c7cb91d45096f013da004f040cbb6d51396bb3bc7147e72ed287e7fd606f6c7d0d773f8aeeacd2fc8fb666a35db9d1dd2b822101b63ad2053d61b51e6eeee84e0b87ad1e99ad68078302df944c1d1a040aa510e241cda1b76d89157edf7cb6e1f4d268686dc411fdf771690047658ee11769c1f6c5b8486b6231ea0dc9230f3f5e52a110fe78af17113033e0fa06a1b725a521328229b6b872b32987865ac862e6b34cc59d53eb43f725a81f9a09231c577e1806b86d2a3b440ca2c373dcc6530c04c7db19a3e920c2565429a1f9938a66f57de7a2af864870a246547a5037bc58101814dfb64c2fde40f86bfb57fcf073f7b45ed7b3844f516485ac886a18f83d853427a43ab95ecdc74b0d4e8126d2076b8786a905f858196627772abd7306bd39a71bc2101ed73797c24652daf7878511f4b1d3a37f0153aa71a36bd3cd37c9b10c74c346a47beaa25147f5abff63e994e7e12f45ba0cdce8389e3a1f0cf32bed8c795b880f9b0c1bff3217022b4660664c361d0498e316ada88b10c71da57418adc06023a6a01d2e2c8a7072c1996885296b4d4557857fa9972648b1968c8838c32b853f800f308dae257a7e7e004b1196e2941a309376911e96b0c69587ba4edeeba44afdd0bb8199b47b60599174d2e73b66d547ece73ef24e44e7a61b5fd9b04067d038d54e2aa169390d9d994111d0321a9532a071367ca5f0a42eb99be3c41811d3a2a295c1341aaf186f5ab9f70526e76958c9396ae941392e93a302b0c0f9047de8f953b48c42de30f312cfcaf95df0976819dce18cdedafc7cf1aef310806a50adf253d1e2c613593c82db92526bd792208f3eee3b0381a2e021cc27e2366f3147c537e5a7c31397ee2992a02556ce6e30cbae5fd0463beeac04fd1039c6e60b5b0317978a74ab49942c36372669ec2043f60f7fcb82ea6f0f5a2e4708a8a36bfe711fde6c15f4f5c3a413b44f7f99012d62e4eb7fa212684893cee89043497294e8f8c0d19b7de6679420ae666ace6351f9a5ce1ea5ec88f13247f72bb19d0dd4c9585c41de06c433c40ea86da7b666fd483a31c7c16449f27cfb8cdd7c8cf2e858937d69f80dba2fdea8d2a58729083547536a8bd9d32ebdb95f0c04881182445a0548249783ac8e2fac4cc42a2f6ce2995521078d1bb184741dc642e1801861c00269ecbe9309ba890b8b58acdc6df8d596f8e0016dfb87c8c8498bf706130777bb62d5b2c3e3c577e0f8a403fc7e4c97816f21e81da31649481d331ea79e4ff43b0319c3121e6aec862588c0a5774a2089539d83a255d0e46f81d3ab85adc34a998ed1cd83461ceef7bdb9fc7161787dc46771346f06341ec48487df30b8e613666663ca80e9d115dbf1d86dca699c0a774aa9999822313890cd93cca805c8d7827a87aa2511858416f3646276f49ce1e02189eb0cd24c4cb203750ad616f3509cf54eb6b2e7efc648639ac28caff4c3334569af2a7ecf1f0f72ea4efb687ab08f84494c12ba87591410a3f6e219c094d7ecd82168f54c183043c3660ff641e2d9ceb0ae572fcfc4cca46e5051b6ee25d077392889944ad0151015e530be7f1f3425dd6d6dea9ebbfcc57dbd73f9554ca6b1db19b8f34e9e6e315816e3f54bda1bdd00532970937b61778c8d5184f8aa9ac9e002e49e3fc02c9282f5219e99a2cdf633e8de4b86b95d723c2e599b21704b3cee469e1c3e0fcfed893d0cd2c9acec54bdcad58395645ad7b55108ba66605814d62fc1e19de261228a668284bc8f7329af7dcb3752eac350ea55b70fc7863e892b924eeccbb8198ccbc9aefad99248a12e6dc50c016b1d1f25c5c9aef4eb9050c6184b21b56f8a602b64781486221ae4332ae1d4c2831056d45ac55a01776c9f67f3973a0578c24dd2793319c70cc27d79685cf37c1001fe70bff6566b447bb4c36084a235b7f2fd7c7c406511e823576343f6606e23ce19624adf1981958c0d23f552479ac19561ff46e1b29ea7443b08aa85baf4f5cce6f75907030c3670a81c70cf728c0590d8fda36f858f426763d0b5fced5bdb8806dd21469b347eb89d55ef5ee68d5d63cf123978338471dbe433ef9b9705f87b20571b7e62ed6922b5810b22d93f4f8eaef74090961d3e251ea727d5f71abfffae3f0efc812c0116c2c4570da8d2cc2ccf9e1d5fede31b9c7dc2cd9b7eb731d6a723714d841c7aca9ee754a24c7ef33a6ffc883b574d8462c5a9c50b853edd83022482c4ef44e5dd1fe6dd58b91229f2ab00df199d587a96552989dd332b5d97f8b188ef6d0ea077f0aadf0b5ab423c8c7be9d0a68a38a931c6bad49d301af90602a73de5bdcf26eca69bf2150f64405fd66e01fb08b58f3c830e84750b7af4b8d8035f1fc63b667847f319d8ba687d24372e89e061b1eede3c6cf4d3ea95bbf347d0a86484ac52551d915d0f0bcad5ced334603ce3949d73f9124b1cea257e0d82a000b2063473bbadee9f273a7424f6cd58f5c77fc79ae6147088f9b48a888d3eb026a8914722f16fddf284a26b324b168b4fb5f0dafa437b9b71a7a6fa9daf8d00d82b25e1317a1dd352221a14f4bb495d6931a276a7495030fddf803baf40f6a68b875372b292db86026e02a54bfed0f1918ce8e717e4b17cb5c7a5fb90ed5f9662fdb8ef6416c49b00895697d624cd159fefcc7f0978c32d5230a6bc9d6e4eb449e28da5bcf98344af945bd19ab7eb2342798d85daebabc817620a5906aaf4db349742dde2a19d1155f6cb52213f5cd397723a5c1661be3777ac9206959bfe2866f5669fcbe731d407855ee3fcacb1d988b1cefe53a21122e18bfcee5406086ab68cda9f2fd3dcf1806ad3e164f1bb4197cb48ee7826ac02f7633433e24c3cd995a0e221d9850e2f131181fd7870fa4490a9a7a4844eb154db494b1b7dbe88deaee20567991af1984fe7fa68b2df7a17bda6c36f3ea2a6aac75e1c969a08da3b8d637e9efc96e9082afec598e96cc35b94907f90e695fe60b6cebe98df4c3a37f36983ab1f912ba9a09cd9a637079fac974d85fc0dbf825d9da25785231beb02672495f60d72b4ca9512f948ba15bc6d0b21045c061b16607888a6b1b1cf3cb169c85d81fb45d3054b43e10f3c20f2358ac991f06563d7be82c62e0d6b4d3f27444761b79867293f3c5513527cd154b7f94759240bc2c38c64e093d91b0135f394839a9f560dc976b7e2cc607d80f55f8f6aa1fbba03eaa4ae325014f912f73a1556d2828b2faa6e24566ca692ca970bde13d54c7da2ca7ce653059edff0419ac2c024eaaa8ad2be386629063c0a0964bf0312bdf85e48b1e69b94b1f8a6cb1f59342b98bb2d81ddf34cf2e2d4e751a210991d4aa1d04121d950eb6a7026d68dbfb11043d90e0f0928fe0287a5a432016c0b43667b9408e1ab10913d22e986d98e513ca00ca9264ba9823d23353b3959add258e7ebced02521d8141133a308df1932b3b2ca76be7a4bca62de82fbb17a096108b8a1ed6c30390c4281ed29758a1fd3f1020ec2d9e4ed36fc2d070015af6d015a52f979be20df3963274c249eeaec32427d2aa9e28ff492e9260b321604a65c9f952e3fd3ae5c4576b4f3b3f2aa19c2f5bf5afdd7667a1a820a011cc037fc93abd3081a6dab3dddfcdac2e9c233dae524aa6299d3b6154a4926b192666c4d161d35e7a82e35d9e31f568b345fea7499b6f1af6f27993c11cdd0f543c9e2dfb4066047577a7b890d1a4c99b448611163660b09232dab0707294d4efe24fc0e6209ea72831c59d0f25121ff90436c559a9496c24e4048c2f4babf8413d6a3773e0661889a967405f10958c0f9b8f884f5ef4f48a2a9736fa8cc4741eabd5289d5ffa5d7b5e0937954a7cb9fbe3206e23ae4704dcff613e54cdcf50324f43fd3bade06cc12255e1f40b828fb0aa231b376e3e4c5605b1fd35df163875b824d52da1408c58d5e15dc10f781738338a848acea16baa38fa563a2fe86546284ba0c2f86ba2240b64db88808844ec85b423f1b8be42538473c39bb870afa61f0a41d6c2d998e70d6f1415c7511dd2e04f011ad11c8a4c316f1285491959f7e0ecf570afc0f51137f0e7864adc1cf8c8f85e2a127cadefadd6c5e114219f5b14abc20f0766bab2c58e4b9225c79f880eb61c4599cfb9f44bb16f7b698cb25d05f3eae673a398c077dd162393c5406ca7cc9c1a78dc064df093bb424d003ea5c5af59051227b7a91ec0467d130194868c934a548c9b1319d48d5427c24ad6bedc29f52bfaa0624e2de4a9ee6210e4ffeb0928be1fd4c5e64328163189536da57e546dd5b49de21028390f9e18c882cdfb613a00e97096e54cee0f29be3de54ff18e487bc6350ee2839e70bbcdce8b71e0524dddaed76fe5e57bd4c5ed24bea8b07bf8b96d6411ed9298238eb6aee95dce14bec045b20e6aa5a0a57e98d35cade51fb336b853f61b249cde3f5062b389cc3e133b98a7610969cad4295d222e6758b42316bb87433289bb8678431fe0019988e061a361a733003f3697a8cf4867fc93ad917ba6844576b8e820227f4a4ea4e21584e9e026050b67f1010c1c42fc952223627f2ecc548d146a7d12c63f02ee3a4e268f37bf92741352b1c00d2e00f0254801054a09ce8bb787723b7ab6d497ff00a5a632db45625ee298449dc0a03e58afb3901c02d3e90803ff54b03c82889d60cf28e9cd8efd7874f5d72f8889cd0e17b4977a0d3a014c6dd4b60dc7792e4ace2eb1433fd7d58e44bf81dfe812703be16ebedc2b24c1537921d17eff5094524e84ddec534a7b0d9dddba0e63e65e3840080e351ca95ea0a10ed9321689930a462a40c67f2e2b983737f29083a855e9d8606c7c303728d878465a6da08be3bd3e8be28a69f2479e5843b7c6dcc08d94483de895767a434ef3e19fae26785cc521892b53beb59ca0d09582c0674cfea4cd150e4784d97f89a9b9bfd371bf8d43df6dd000d9af86fd93ad7c52e56ea0b4f323fa58bf20026893af1be347f63167f9b1ae8dd17cc2c9be364c7fabf4fb2156c5e262cf2afd22335458e5c40e67b7052a165e575058f07e22e3cf624d0e2db735ff27f9429afff85d6feb350a7f76ae1fbb2c415c2b2aa9ea99329580d7a2574c19cc97ccc0aeec797cfc051ad58b61388b196214c55188774d24e3adcb5c3e96dcd598cb94fd7a98cb40c0bd3888e85629555e77bc8bdb5f536464e288b4d993c3e924ea343afd37a5c448636b4ffd0cab787cd32c5f4f979d8f7f3d082a09ed61301264f1e50a05abe427da5574eeda9c0bf43cb1863611f1b7f8faa167259fbf670bf77f55776cfd356a0b14af7dc39216741e7d8f66dcff4ba6bee99926dafc6a3dd8ed0bd567d3eb8133bfdd6e5bbd5f54fa6d9e7ad073c7e5dfa5eab0e3d9b9ac41ab94c127ffc81d1e8acb2bbdfb4b3867f5476d529732d52c7074674267218e875e39e77c7a0efe9ae144f9d2efac7959d67048826d23a70c9dc5e68da8858ae8944c71d989516ee89fe9da034d45334cea4cac62f9dab609eb5bfa0b9bf4be9d20332baceef140a3081e186475ccacb3748d093709f95206f2805705770ea8702c9c05449e2944723b5b36077c8b1836bbf810aed84baab6e99ab8d3de7fc3a20fbfa63cd54f55255eab13467de65a01be7f224a3da632028a170fd12b20b4ec5a28fc4f2edd5039cb6f484091c5ad051019b61a9cccb0765fc0ad3635df345a477581348d6bf117b1ea43ef2dd36ae18461155795fea758677c77d2330fa710ccf8f18e8a7b376b51c38eedd8756c0a120100b698fe6930429f1b21ed7123cdc7766c2f431cdb7828baa0874a4a4f4c96bee403de76c787b781d4603bb095c88e42e5c2b1041cf0b032870b4c71d8eaf523c585378b983d88a0852d7940c92ca659905e6fc4b22540f68fdea02017142081a503d011b8eebfb02e0ef09315264844d977aab7bc6b1abb5e350e9d6692761735e1dc94f293f828aa7730bc0aacd05271eabcb220f7eed88250058846206184c14a8456150617ca5e785f149fabf43c83317ae8fa8f1f4a8b48151600d1d520dac217a8ef998b3c99291744020c538e799172aeb642e95fe5039774e0f7a6fa674a0923e6f2fd2598ce59af30430ef3a46369bf5e19177450187a2c57f6ffcedce9aa80246fc09d1a84779b4847fc04876322fbb746822ed3e0ba4a4a325da60678a5212081dad0b3f7d8d647099fbdcbdda6e5f9f931b74be93d7203f399fb47efb4a9b7ea91ed5b4a17f71c533583e4256b06a06db019eb61280cb3d1040eb9f7b64349dbd2157c8db27ac8ee52892b24da5b5ed7b21403d3b3671045cb143e6ef693e1ec1121e295a60be8546dc9df0634edbeae99c746cb0c5c330be6ef8626d6a08d877b8fd76e7563e6a51a232e0721746687fb9cdb269c1114fa46a90b7a91a0f76b74bdb25d4a5c434d2731a05a62e0fc7a82e4b24c889656b80c4dcf329c9b45196392e83cf607d92bffd53b613aae1bba18cd19f18f6cf803b8d1c78d69be46b9b84de246b50922364e8785f57467863bc4c271a88e8693a4ae1923b62ac5af83af0be105712806a1d0f600f56c776ebf6f51256a8f8369a405aa68c6ddfd14079c2b99ea0b41a7ff7509ce88598ca5909876c231968a750e6e3480151fb47233de6ab41a9e9bd3dc6ec826c9e46bcddf56876f05be2c5bfe67fd7cedc859a350752341687c9e33f4ee2949ac22ce1a15395530ccaf2caa4f76c6f5821041777390bd37936554e009768616db8d3ac6842e9a86bf0ce043ea0331ba5421efb3a12db0c84affd22c9d989dd5393a4bc7a5b695b3066806a193ebcb63677cd143bf6505861f16b4d920c60a77f395a94b0f1d3304610ebda004f515f7397bea9a989d855d80ea60d2ca98c55c454794bbe1a5df55edf5ed0936656c78b97325aa3a13cc7a44fe37a83ff6a84865210d2c282e312e52637be3f0e6abb9e7ca8af3b62a18fff615a548eb319ab5281f1c5c6df49ab5bdc97a18b09adc914f057b053b4d3a6b70935fc3e8d970c9508aa62dd0c7d69c9a9997d7f92b7bf13f21935cec172279ca4132172fc233e8c247dacac8df801159f4143f19666ce28976bd6f54da83cabaaaa707f628da273af2075833e7841ae65267ea50b3c8d5560653e83b83b2c234197ea4ad7ce2c272e59f7a3a9e4cd2ca5702feb9c61c9f774a47c5ae4b55b1b468a28f9463b1c923b46bf0612f6cb6df8e8200825eb4a0065b9340919592dce53038e005d2c1cd497e386ed63ea68f79e52e120c2026d4dbafe92e010337768cc24c5c8128773c78170146b3037e3452e4376781b5df627a4fdedf64eafdf04939043009866fefb876bef048ec79871f29092a2576d4685bd6005a9c15620432e3e1b01e390615ebd3009c829e9847235d1f277f98b153ae04c35423e976a18be099790abe05cad25efd2def6ac583281401904d235ad50d6c502a8b91f5a8774f14a4eb217f4d049f3d71c6a3e8dc40482a15cae001c40b6401a65d7d2d90614bf14a4acded1382154f27175a73060d60f70c5dbcde43ac12bc2829a6c9255e4d3d2ad6fb461c3f184a4c8cad807c0818f76b1c638c3ae76d2e26981bee17ebcccfc06f9aeb1afe10d9d9d7e3aa6b6576ef24754a8546838b57746934254157e698a628861cd7b1ea2dbdc805d88fed28b8873fb3a05d1b991307a52aacfcb8973e56a1d36ecd88473c360aa97d6300d946d6865e2f18c8709a3d1fbbf180743a359b0a43dcf52601992c80626b77c8ff85d1565797a654d4137eb07e46bcf8a343b84891dfaaf7193df4cac1c8e7709e59fb1b2029f272d2915b2603b3a61a4f3c70f403a99cdb94bdee7390c497d2bd5c91cc7d01731847e218ef53ae14ee6e79c3d762f83be5ff947a4775f49db86438109c9413b58ca9cf79c19b822b475c7bd284257592cd3f979d4f39c4a51391157aa73bd41f6ff22c0633c4911723d1ef0eb695286ef525a657544b7f9eb6b5a0c9aec8da01393b50a6595af2209ae60baeed6086d16c2c4d6a1a36bbc17ea16f7c385d1b1c19c57bd28c2fb932c4123a91c0f85f83b02d535a8cd07c181e33aace788cef18dc969e625a3d9af3b3f04d72aaa114d677b8601db51dae197865cb88d94b18487b6d9c06727ff02025ec567fe3f07cd89798aad6a6bc382871c87bdb3bf77329af89c58e8ae87b75b91fabbde8d98510bcaca67a7baaf17a7bbd85eced61045d5167bd807e598eeffef31b472cb92f262cb0efe75fda44f87a58976948e0b86a9e9ec4cba0c0288af68e87a54d3e63cf9e30750ec7cd06f9f2860c68a9999310a1d873b3f15ae72ca4dd0a9a633edad930049380f966919c7c4d5eb9100e36d80ca9347184b73148fb4b125221c36ae8a2fbc35d8366ecd64811db6054951fdcacfed8c02c55784b58aa4a204c5ee277580d313fae82951e0d73a04fe0846d985ee6daa65749ffda5d36518fd155f6d0e6af948227b0a97addebd98c733a54ae3d44721cf457b2c894c09ce9ffe7b18db9847756f97edccca26309e75dc36b7b8067583fc17ba23bfb1d0b65889513c4d7d5ba919ec8bfe3a487599532c9d9ccf8382c99df847c334499f13c7991f4c28bee085cd18fc5a25c790a8fd1739faf68101da174464e5b652e5ec15bb5fb579b608a965db160b25b7e4235e091de939db809d37815d48e85b380123e94b00826de1a3e4456a527610d1ba2d01391fa6599744a36502651258db40ee0b46911bdbb130ac00e6f36d4fa0ccdcdc5cf06f8b5ea064f42495aeddc8bd79f135b02f17820979a2b4338bbf2805c8f5498975e85f7d55b924a0edfcfcc8442bd5fc36487104916e930c6a4229f443c9c606bf4e72ff608737f7c22837e19930fe9279b803de7169f4cdd5e83740eb86a6813c0a792ad6f401fe5a7149c4b666a9cfa6414392c9aa1c5ee0dc07bd20c3f26f591691c1dd49e8b691dbca71376d5953aada5f3e112f912d1491418e7dec4a87d89c78b218962026b49204a249c9a5e5b88c065d1f34dba85ec968080ffd3d6cb849f1ed2a0af7008c88d45a29828ecdf2057dfb3fe08cb8cd175b44ee6cb9e0aa3ba77adddcfe4663334a9932bc006f48735017a7b13800b27822f9c14130cf20a4475ccc797ad72710aee5956e4235ae3aa66968b14ec16050b8656637ca45fa5cf568c238896ce7ec4c380e0af55986debb049e8e90334197cb1b72c18f20759158cb99011630fdc97024bb69084838384a07713ad318de39b701f04f9b1c9ee05e63250c28352637c73d62e69392f5fe759d7a497158f0006c3f428048604d7c2fe9aa178b2ca3049ca7a20efd766c70a67039c25a8b03543d42fcaa71e327e71a9055b96c6b9b0ddc19dc845f1f800a01ca1ae39925a43c7d2e559cbe6cb6a1f3e5644e03b8b62967032607538682d43d6e171140b1a7d6f81b8c523ce9989a77a38c47497abb61db3df72a5dea255195e95ef3a14ad6cd4eb909e0f969b53eb5f90d074f4318cf804e0fc51ec1610b2df748e0923e689e3eac75c99db80d2e2255c035a6f4bef0fa8ccbea838f769b040f9d3aef32430f8dbc99c3088f281da2f4cfdf6cf35ae80220af46726f511a9494a7f2a15a8fc37f6492b5a2dbb7ba06b9d1fd255293149309cb987ad1dc1afc624268b569332d0269e2c0ec08c15d183aaa3034a4a168636415d1a8cf109215b1d9ba01a87fabad65f3eab82ea052ec12556ec2163425bb92201f4521f71408a7ac7ac773ae3587e422452e31767ce49c5c09d62b04b437e936be04a2263b290e17cf4c98ca74ab3491ac742e0a696cb8d54f10506564b011253c6b576cd3bcf36fa1fe227929e7f75e1304895918238727f33cbaf1403694b01e7e2575fe3f548bf7c66b04257b25fa97356c3abac4dfaf825529e63c2d46b6f0c4a2ef0a24ae1b48bc1d056fcc2e907656d5babb75e83d6b6d9d801e526a7ac9af3f05abc5ec07f7e8050ac0ca51fee96cf67abd4e19b05f337f467593a4c35fb7c0812c6b135841fef0886a259a8b0e6ee3e8c75ede18946ceca4ff1da2370ab9b5deff9372f318f8a40edb24e7132679e4e79ba38374f87463c6e3d489c7edfd4b1f80b6bd34a2cc76a7296f15e6a14c6384a7fc611723db0bb5771114e3446020479677b9c82d965147211de276adeec43c296f9063d799105507d03107ead788f08941b8308de048abfadd890b39171dc1bf4dfda3ed9c002d98f77d14ae4624d21f18a078ffbdc9f3d0d3ade6dc5ba2ccf76d884c1d41ef4ae0ace6b7ea480b06032056a04f80153b84707965c20cc5985afce62470c5a52e29773ce6b48d7a4196c1dd15367ab08720faec452642b8bb594240ccac1dadcf7c9be910e7c21de9ecfe3f4992e60da771ebc4eb0771cb7a62acdc6d7912bd9dfc3c4e5a07f9689d6c190da3fe136a35231e6122f453f843584b1fd8950b3dfc815ea061317e7a792db0761568e7f6d35eb0bf16bc33468578422b59c658615998b21acf759c96312af674704db3de0cd3bfdceb82144026ae30a540d629994589efc6702063fd3a99064c43bf2ab136edcba32f9539d10b9e5d03275d4894857d0d1db99f6f0127b03a59cdf6c8794759fc0a94fdc925aef1af6eadb81ec1d50dd899e751f534c1005974201fe4d9cd2d16b090baaa50c97b1a5686038f055efeeb8a10e841c5e400948a8b2a3d26818701b698814805e956d28f3a910cf9f84b64131676981dfe35fea6481bf6c13af184ec3966a54e1a731c984b16f79ed68426007061313fe3f40412d5bca96b383a50c4c25312f1bd45f17f561e07a777280aa0167e3110bade48f636b2afc49c2fc776a08a263f4c3705791fad25b4617a831392941ec99035725cc660a476d619d88faa29d0e38f21b0eed150d6687e1509ae2be8131e666fb7de32f7ea0bdb8024741c17b911cacd80a8d473f3c9d90722416462eb118dd16538bee6c552a70399c0469e3e356a632e5cc8359e4a2eb7bd55d0216570db3f9f750b7cd2f20d97b52ab41b8b4922c36bbe5d0f3bf3c12a2265a05f3781e5ad576bb04e8584852be8fccf3d08cd7c45902917ad320df98e912e8d1b16ece8d295ffd982421c466754ce530f64c8f1cbec1f3efd503d3c16e578abae1666f5bc223addd0713b63b43e9d4e6bc6763260dcf4b029f2cea2374094d98f1efc14d48cbe39c20be241bc2d98f4a1364c0fd833e4125d5d17e7e659fd2e011c15ecb4bdc1705c4e6ca88d25a14d72d350e9eef8cbd935d92b0998a2453cee5c581627e574085b4351f3c4e404f9e344f83e855baabbd58c860664da260258f3b8f8898a82262c740c591cccc0dfeb28b8a721742f6b3d5921819e30f78ee3dc14e064758a2bbf465fdc860797586726b2f5ddd8f9bad1e2257f62cd3171a7395cd1f61e32d57e2608a379fa43e3379c5c0fe786c6107a47d485f66a8c1967039c01b07e59ff07cf81aac1b6713a00feb896f84625024adc6113201919fbf9a932a11820f7a780404d1b281896fafb137c6ce41031a01be14073bc03c9eeee26ef40a9a83060a6704870088b97cd1cca32fa673dc3ae8a4d4b0ae8454de8e4324f839626d9b6be356457baa2bfbe4ee13511a8aa5b5a26739485b9a65c38933ab4e6df22017a4c22ac120b4110b51646063fa046b21eb0d00e812d5232c9d4de663ecbd64dc78915381c7d2a2bb04d2dd7143ce6f645d40859591730fafe99e22c5e00c6c2c3c70f9515a4d6219f2c202117b2cafd378f893469bd88b4b49d4c224fce102b885d28a187854943fe1d1346d141f07c4e87d0b30d04ee807fd41cd054ee4004ad3b69416108a6c7ae04e58d5b180947ba70a821f19161b9874edf6a738d87ac6b11d903a23616fdde44b5da76e2d150508db6e3e0ecc942cb6fed36ec984c4b4b6469eefe241d6211c55715d8d8943706207adb27b9f98c52a821dab9697c7a95f8e25e18911bfcc3379592e4ca011c6462542332972464a36daabf28763888be3633bd54aa8838e4142f5e86615870cdcfa187c5d3b909a15e36620b7e9b410fcd2f735fcd9241558050eff7116d149912bd790f079c90cb862df381bc63c56c9288f15ef585089f9a48015da9ef7de7e42557fb3ee48014c9c26fa4a5140e457c5166c27e9aab1673c29bece9db27d1603dbe6d1623a530f5747e6586dba0e5e913df6df1209d191b0e7dcf090b2a8d75da6019f0f3d1be1448e99fca41c12bfdde6010f8296b05004af00d89675770c5f8423c4e15dab555e1cfc9b3cc4f87bf4f099cc7f7135276d3e60be4a58ff2a04a7a542f532103b12fdcee766ca5645ff5c8c1140f65c78ea6af6150c37c4ffc299798fd7ea6d84fe007adcda74fce86368aaaab9f7b759779ddec47202c05c1728c8329777207f312c2e630872c88c0472aafc83ccfe0a34e0a8a2e28a3ef0a94fc75a686055cf2508e0b1942ff33a7974fc96667e1d3b22e364390fe933eb6e6cec9b2056bfee30b157d58f3fdf8331f4f55110457dea7377c1a910602eb38adcafe00185b0b52d837280dade4c6e43b2c35687248cfa0d318cf97c090b31f7ac7cdaf2cbca2c5d06980d18b5ce782d5a1fbe6735051aaddd8b658d8b370557606a266fdc38278c919b607e356d27e4155735b2e8d05bc2351b2a2c2d4a3e43754c9f8ad4c9702d3f72ecb1dd1b3215c2d5fed29db2c955aae4e538a14ff24eb171c900e868acf499f62e05fd43a5af305687cb088d21e10d28eb92e56e346bd67343542d293d1763bcdb11db351daec683a0a82b7dcd8b1186383b4d078c9b4a366df579ccdb66ccf7a6f96251fa698bc2013bd8c710db52cf7825b802fcd65232ee046ed60da2af62d77466bdbb56ce70fd4d1d48e1423b13d4063051810e7b03536ad66dc5e8e48312d37501002a7ace446290bb57f9b5e37fb2f264e6f3c308a1d0bc8783d2be63d086da65477948613c75309f53066b8f8b4cc9d09f4278252bcc495b9bf0701e3b467e2efad162b0de14747121e232e020babc9f04059a053d7404dc3c88baef81057257f72a7198d565c720305a0f5a48052bc831877e7caa4c8c06e663b90275051e7e59549897ca4a64009d1f3f365df034eb37d2d3d5fb6afe3010dad9011061c7dac713ac5e6188857731d520ba277568ade12a2b9a118ca17acb64f621d4dc9cefda0c7178cb2784d39c0b3a1d72889bdc40a12943ccbee46229e8fddee244b9c7b5c29eff5a8cea6c1b07eba5a046bad67d8e521062e55b481ab3aa51a2066658a92553b68eca789913872f56b4b906eb292d16916bd056b25213d8f61c0532c3a02b932ec15420867cb17cf855c80496dcbe92cbcd02df0b8af07ca30605a692549bb5594cfbd26718b8f1090a09fe21d236447fd0b678488a7cf9d822df0f2fbf239d47f58d17fa543cf32bf32fa12a851b7b706c9d5c5c6fa13e9f9b2fd9fd0f1faa7a65f763b8ae5c72aa09a9abea9f23631281facc51a1731ad627895095d597d6836bb3929782210eadd1f3b469a328886ab0de065a41eddd8daa5c8863d8374ef256890f0d435a7ded2248d32cf97137ad0210ecaf173bde95cc57009e5bd0c528093abd09ceb1448a35c5caa4502323838779976f72af91f192c0bf5bc85079d624c84f59d091adfa9a2b88d6e8a1f770ae89ccd63a995db4348792c8818af7af2e29622b50718a7f5ae911c446a7aaf648c995e9e8c6d6892fd634b1a5f60b58112856120e2d488036518a3ce5937502dae262fcb265ecba7e04662255c0d5d8d152bc792317f05d871c46a0d49f9ba196c92433fa6a930a1e5440f66c517ac59e599f5356e7010304e0307ee6c9a0b4b38852d13ecc92bd8bb86cb39aa622e8c16b828b6a2a547202905edfac00bbcc339cef693e417d0ba6c0a7f35e78ff549be4806f4be501ee11eed4d9191528bf57a71ed2971ceb09bdf70c14444b50bada52578b83704c066539325fd3a01aedb196fce0dbfc0c764b2fa6df2b38b3cc11a28064551358cc4868c0e2b9d8a7968a49f4a8b9d2ec1a4aa2c77c15d729be7b4348e0fb4827551fa370ea5c7953bd08c223465fe8f0e377db30bd39293a91638f367cebb92af7bded03f0098268b121a5106d9b59cb5f113102a77d29f159e7dc80e0e443f3bdb0748827a1b55f20e03238ee7259494ae5adc75b56f99b19d81d18aca6f1d5280ca9f78ba4acff3e14451bc9f3a19d5f5cafb24903fefbc9d83d5b49a20fbb3983906e8cce61024e2ebe65c74328020ef253776552ed323eaeb214b4e4be0b2516c80f1be685f40e3a2ae2cb14df0b595942e842e663c80423b6daf51ee792c012a12468e8e22e780305ecb4e46ff7aac4523c7086edcac4f1895c154c9ad1ca54efcb38bf37edbe46b3db7522c3efeb95046acc0cac8202aab59d575c40d619a7039d92e6b410a20d902c1a8a26f45830d266d6b16cbeb0ec47397e8461b90c8f6b2be42b68d42ff24adee8743f9efb9313d04da269dc293fae014468e423087b196262d947702f4f0de887b8f52b1fed956d4b29a54c49ca47056805a705933e0096660e0d0a96d473009c9933033153086772e81153f04bd7d9ebf0cf6affec91bb83797a373cd3ae66df5e6b63be53b353b04b862238937570c67e6f2d3de0faf6fb6cb37d1e6df2b7301b0f80a76e00b646a9e4e22212d9c816ce641e4c8e8651727c18049e1ff946df6825b7867a740a3dd4e229e4c974a97e7d184f99573f9adaaba30c210e702676cd21e60ffae880d9c6fd466b2f2c9f6b520767eaf7f670a67e4b0f98fefcb7b1c302f0d4cdd05f6bd428955c5c44d049df4cf68f5dac33c0527d98adb703ced4bad9c44f033610cef8eb80d97a10ce7444d12dee0560da674b19435c2d06986b4f860f1888102bd31519e0cf86dfb71fea6c28f4f686905dd90ee6cf87e4ac7366b7a88a2cb053304e653805af6c098099e1e90e3ad97a3006f8c1ca07b0bfb2f2719be1becdba8f34237ff6ef6f5a606d0adcf21fa9e50ab9dabd2f1289427f43a1d70173c87b2127f7c8b6cbb28efb1e5ac7a333e7dd70516eb9d76be93e2daffca5a26a9bd5ac4e0296e8d5e0a683e55bde762d7fe39026d10adc1b9d75377051d5241a755696c05aa676499b3258d399be9f00d6f4b66d17df2bbbb8d3714ff0d72cfa56624c3f52bef08aecc3b8b4931cebe2e5e8ec6267a6df4958997efbb4c9e5a78983fe883a291f641aa54f3fae1254944cbfb7e8138442a797b4092a49e5f889e2a0ef32adaa4d5ff7e8b4e98bae559bbeee41ee419b6294ce69d3e8e9b7903679134376dae44c64fa0d449b78dae4e2e9b7106df224997ef7b429bee66c82bbd5266bedf3e0b2f5b89c03172cc19c73f0822598332d923dd5b415176591a6058e2feccbc41d58933d8d291a9f4321cefbb08a578397e8873ebba349f4e9d7e05b4c519bed4fefa3210369265b16b2fdf63e8ec6c8f62b7d916d8ece99a7c119fb37dad4e27d30c90d87d17dfef36d2fba4ff3efc58ca8fb9c95e98f3a97eb7314640f22d30f6d36d91fc04601e8ef685307650c6c9328fd0d85b3f7ac1b79b84928fc792a5b6b3ff4f47dd52698a7349be13a241947b0cac366b5d000e3b4e993f194e7f8904cb7edb5eebb22af594cb4e7de53fd34140a55eb29991b6012ab03ffcae3ee5bf166f409d200037b64a8e27d99679be4326db21e4ce6384da25c4c93e8bb8801f61ccf534da22fc3077c7df3a20a461e65fb990dd9be76a33d056b22ccb2e7586df2278680a2840ff7c9b52e879824d31a64fa772667d64ec113fa0d2cd11ee4ecad0dd9ec6df7699ea7e00c7d3b055328b89fb31e10eed028c65872a1cc4d016e496b920cb79a24d3085cd999153ca47ae653ca801a5e3832c0353b047f5c6eed067f5c0d0c70808d325b0cb40e2cc2621ef047fab1a2537d563a3919be54b54b77959c752198977e14894f82c791d595caded4e74084b6681942b11ca9a558a238e9724a3927ce576a5748ee97aaa9a211baca1c39c139c8fcddd4c5c1a2fc527dfa6b4e9faa55d555eefe1ce44d85b6e8527fec6507fcade4e4fe2f14cbfd2b43daf4dd90b3226445d5a6e8bdb7f2e7b1d56bcb354529a53a4e24d5a034a955545e35a8b8bcd4384dba39b971f0777352107e8c3f4261d8dde0b03cdf45beda4ddd546e9d99ba292d63c934e6caf15f2858ca63392855965fd5c9beca9fd459323b8d762bf949fe4640e40ed6c4784f1aab845645070b01860113a601f1690e7981c0dcfb20122ba048d91d446205941c82eee11d552051f9e391ed30239567f4cc40cd4889e09553713821300f19e4f5caae7a9da08f1bdce03fa4964f863c4c2fc50080e2c14a4eb1814a2969cb295c4a57ae9180ca8edbb4814a9f23681cf93ee7f47e4cdf7224124a9871917ebec5f9605676d823034b7ab696c07d3a0f454d15a4323441e710213f1a0d7a52fa147ac002480a2d8008c10228fc6042c46716e31117937523dcc304523005238ac0822554e000876cfdc8d2fb6ea0d18185bdf287df0814dd639f087922e4c9cecebd45a214b9bffe7c368798736c397af507ce10c1af8803fcd59fdcb0fcd97c5b4ce07102cf50eb6da79d43e952bf1652d9b08637f7fcc5a2d90f4208a184104a08ad7da1d1ee425803935fb2bfc5b8eb6e8b964d296bd348e3932cd925cabfe3c963518b78badfcfd57430c6138ca590ec229c89dfc46435e836e64ebad46f371bf9b203f628d9bfa0b429f4fd0e6b53e42c8c023cd1ef6ea6e1983dbb9f5aac900285c37f8a361b6f65da6d9bd618aff4e062e542f55517435ce8b8d8c123179b8d4369524b595b0e9b9dbf361bff8133fd2f54f8f3d84f9b3efff1f120e831580397e4f9fedf6db20251d357e094dcef3158eaeff728481df2dd54dc73c193e10a218852b22cc1b6694e0b4d36461bb32c14a304202081186d683b592e4d308c31c61a254da421eb6633678c73c638638c344238a59cd23d2b7aa6747942d287213829fdec67473feb68220d3a618834e6db99cd492bad31d95d26cb39832b70a0b86836245848945821cb6f23f087ff8a2100c8526e3c28623b2208157ec03607f8b34aa613765630e2525e82d609460c41c59c40841d608cfac11ccc75851322122b805c5145fef05713d45aeb0eaedf7fbbd301338c5907cc31ce90a1b23c612fc9c6c90698828d20296315304a611d461e9fc86a93c7237994408843167119a3c852099dd3ded729d4125a963dc852fa64d9caf29b04f1b4036807301cf8c0c100f790a5fc884574223281351d5b04518bc88438452c42961dde01679ae00d059b101949361e96b4a9d5e204f66d0438fbac06d84f907de6694fc05c5c624994429611284b29a1c852bef5ba3b2d0638b63c1943e0fe264d923f3e4d924b9a54039c911f8309f88b3e1a921bdb277677dbd8611b113c452599c8a52b7d3572f48133f23518769f0cb5b204ba88c09f85ad5aa1ab737a62597e0e32e7e4dc291f6619598518f9ce09a94a06e294acc5643c7f8ee668aec01a7f1dd415ee1463e00ca7c9d5ae90c006da1204aeb97ead1fa3cd90c15f0cb9c20a652a0b1ac6901303910b65a29d82a566043b043c049631d890e10396ffd1b4b8221c01fbc3e80336aa85fb3f9ad8371af5230638e31fa309f86b9416042c3dae49452e8c4309dc3a212bc3528d1d5354d47845fe2f66916b4eaea95ceb16b97e04023cd58f416c2888510958730258d3cf2101132136912b925c2d0f381b6022b105355c143c9b60549665cf83cb998743ad1f5f503fa68ac8eb7db848ae9606b9c613e41a59d0cab5c2fa5785ef56021cb3f31071da94b3a170e8fd3914bedfaffd8ddaf602b869db0f2c7fba4716115e51f9d9714e6cddf46e3c81e97ffd98aa41bca921f2be121753de27ca5f4c652eb6cd839961db3c6d0aec9a776980fd437f3d6d0adc9809f6504cb9f0801dc6940b0fb8df5954422f439967bdcedec6be8535f6eb675d06ebd74ce4d2c5d46773fd6ae4185370a6be068b292cb28d2a515cdbd6da872d80ed5938635580ebd39f3236663a79ba127f8483d0afa44ea9a4eeee2e218edea1471004846e22cf26c20bf60ffeed03acb18d0411590e325c59027ff1a5e5d94ebe76bdda8778b25e9a2fc313344c90948847b0111ce4f98d8218b188f109b0863e916e4103892288991679769cd7ff4a793ecc216a4007ccd4da27f88b3af986a518735cd4e9a24e9b76e6c75674323f02f1c5e42fe2805ffc62933c71d82a39d0a699ca994d68df28267fd0e3a2ce8c5280a70ec62ae0a983a517ac51f9a948ff0e237842509e736e3eb817cc74464e5c28735553f08b0c2965c973761af82ecb44221797ae2bd5a891bfcfadc1b05b38336d509e0ee8003cc19be823cf9f380239fe75f5143f505c25574913d8d7898b8373712e93cbe4b62e930bc56d729db8ad8b7399409786369a14e566033d1d209cee4a88117633061bb3e54eaf7680500df1244d822f7de6c3253d504a2963a636a7a71520061a99e76c0a60836686ccad700669be4cf7cf39ff8677f7d4ae0ffe48f9fa606b89108a628ef26747315c2874842864320c43a310378ab9dc48c3da0873a33957361bb804e35111f0f4f0e8f18b06f8448604451a9c59827170139bca65e22e81bfd15d9269a15048c39ce6dac808787a9fb66d2a1ad6ae10f01582a6a9685ac8856dd6da0467d7a486734aecdd34334c5c2541428276b0057a45a05b8a1205c88ac55a74b73bca4a29a21e48ae4953d45aadf5001488100a85ee6d02052360fc9012cb91f2924f5a7ce80cac36034e0a71a93788e1962d5eaa1119c41530528844714e62ee4fe80899854a6bc5909293fb35183060b4b4bc78e00916b7c8673a68594461714197658824a643cad38668311c9b854f165270b96285086762ae5811722c494c88d82a5b2a649af84a0af9d1132c484972334492c50f10344324526620956821942192a0144d2c168365fcd2010c914841659b2112a018e7695dd7759e0763062c68323232322cb0e0c266e3820b2e90485280c89cd73550b72465c6666cce5810247a7ae61cc206334624c88cb9171184887b114188b82341a48820528804914264c682cc188e9422a548719722a548295266127690413248caa09b23441021a5102b19b4732383623472b313a3919b9d188fec18b901dab901da9141373208c8049a404031024da0090494034676912225836490944137478c18915288950cdab99141311ab9d989d1c8cd4e8c47768cdc00eddc00edc8a01b190464024d20a0188126d00402924f6410142337476e8ec81934839041478e1cf15e6189eb4f9a04dd5d35f80fb4c0bdf0e2e00fc7d82bb89a930b653e965693d96a9719ec08a6358365a1ab6d2a2b58c4e26214f3028606ffb6689cf6f2f252ff7589f921ba623017edc525fec4566cbdbcc0c470301afc1b1303460c192f6e11323488047ec9039c5e647969081cbf71885a9e0d3817cd63a93e71b5fd10755e4460f4bcd87e883c91e7056605514c0c0dce962bc80ada3d8265b22c3218fc0c0af0d4a82c0ab9512a6817077f07257fd3d5a80c33d87461dba8212ad516eb3c0dfe166bb9e7c49c578ef688b4a05d1c17340ee0f0228eb61f222aa25c20694de46fbaae0f153e90c32169a50c020ef8a1800dae1b5ad82a00008d014daae1054d16c0c6016e2060db216586e6a73961309ea62b96e01451e5079c998286c46d396476172b70fc3b43bb3878469b5d8246c10cf624f7b70ef0345bad205cf72d628bcd96772b005a00369b2c4a933a83d1a0d9a66cb12d0af094c1fc53d121f7742d20c3c105c9609ec172bb3c242e0ded1e81bf2d46a355b9c5bcd4d64bb12de6a7e99a2eb9c5a6eb65cb21f3bc3a70b96c3f70319a1a5d038608438c002615d3054bfd3309f0b4c5b66945ee9887048eff6d3031312ca80c57902b386184111ceb7387ee90c5878fcf1dba43cce2c3c525973f295d4a6fc99f3b748774c2a83ca02ff227a54be9756435161faafc04863267ba60f1516dc692d9ea636f48a4ddeaee4e5919c75c4adfb4b9923f295d4a57d9b0bbbb8f8a4445586b4f869e0f383edd1c56e98ac6e2c342f85afeb0bb3294528371849b3f77e80e4310b2642e3469211c692c2816943b7487534a97ac0c597cdc48690bbc46c087c14de9523a7d65385b341847c0f1a5ff6428654a4a4e63f181e37f5abe3bc0f1e7b3f8a0ee4ef18b4bc3bcc41b030363605e5cb816182f462e58447845658b5169e10738588294269cfca17bff4c7cec288249279d31197590383a9888a371888230ec961e82ebb249eeee53e4c2f1e53b84fe8158fe01c77799ca514ae9eedea47628bc7f949556ca24c6187f0024dba15cd91204b165cca87fd4a71df44ff3a9b5d383c935fce018bad45f1a02de81803ed5261807efaff1441595f82aef9b8d8a8bce6a58608a6a528f4f06c9753439665ea39148a3461695b2c8258b3e51166559b46ddec74376f0c44578a279d19d2a2a31ab74fdb1677eecb82868fabd3fd49f753f3512696421e81e9a8794d05634ed452f331e6ddf5a956ca32194eda6c36e36d43a07f166432fcd6056e9cfb6a9dd189f80234e084a9abdacf3b74d01776659bce1b281480ac5853242649a0c9358e2871639d16e4fe9afd04402d88f2695ffb42f5a18361d32e2d14ac7652a08d83e996d843cd4c1700cde968050ae1e0c91c7942f5a18228ddee2ece14299cfade7a85cc757ced3c35aad56abd56a85030d8cf4fab161c3e17b8e8dfae37ac1628e5aad56abd56a854363e7fc6dd8b0f1b3b2d174c5d3c3f269a9542a954aa55aad56abd56a85030cc2200cc25a67e5f3058b354aa552a9542a5574ad56abd56ab57aa95638786c0f66713edf22fd44974aa552a954aae88aaee8724557744557e48959144e7139af8aab6e75ab5bddea964aa552a954aa988a06467abd8bfbc12d0b7dda62cc71ffa44cd382ac6e69d64f6e31e6b8ffeb84c87a618b1f75ffcc2ddbd4b6dbd473ce1a65d45cb316d64438134512caf89589e128e7a5d6acd4644834a1cd466e73d238cc6c0ae4e58e08f5546a439db7602f6f4d97c2abf0289c8933f196ffb8cb5b217bb7cd86ee80b936f156555149a9acd57d42a2560cc362fec58db0c7b418f3d652ab5239f94dabadd6c6aa4cada40acbb2af311265e94579ebab3c4e72d7ce5f34f75c14aca19cb59dabca5b2f22a65ccb6653b9aac1196e8e8ec01ffe97b754b046b6bce5ad9637f196b7dad4b5074aeef127de7257ed99e12d6f79cb5bfe73e50a476c8c9c9c307ae88b9eeaa722392a7f39cc47e2b89dbffaebcf8b056b68ee8f338889f41145cbdcfe042549245105ace9ca8235d1a75559fe8233fef292c36eede4156d36168f62ce6ced6a92aeb29ad4d587c5557dbc14adb4d67695251d8a741894fec45d3c21914874b1b45a0c63c9c2a2c162fec5e1d8ca4b7e4787c5fc8b1b61ea2f4e6447b8f2c01afbb98cc990601fc349947c45f9fdf15656f6dfd569b224f70bcee41110a2855de71ba1f639cc4f6e452c6d8a2fecbfc8b1592f9820fbcb6d36d9c7c4286185277fc5eeab2dfb8209706d02aedc6643636c3b608eb1b967b3fbc09a2bf04b56d64dc11a09afc01f96b15995e535499b4695d526cfddd5496d92bbb65eb2fcca1ae55859b9b2ae4bbfc43e559697da278f6e802b8bb600e5c76f4e82899fdc6598041342e418af6743b551f057ed7ba5547b1df335af476eadfbfa69f3e89c7912883468f568967073c8409cb2757ed9a66069dd471bb0397a39f0c0f9fe0670eedf66360809d09fd1c878b46ddb5e07cc9b07a3f22adbcbdfe8ed3e1ef9e64c65d36ebea17833a57b0bae6f51c09fcd5166b143af237ec893b4563aa5f48e419b14544440557c60f95a5ff9b4beed3a6a9af63a60d63c98ed2fa0bd6f3fbf478edda7651e39f477eba016ba376839f322906861f71257fecb3605fcd91cdb3f2ef41386867eed75f46b5e8f7c3d181ae2dfef916bf771400b753d72d6f1f086c1b6050d6812b23fccfe02590c7dffeddc93eeee0e9f4007025391067c7758e157d875f189bb3b7ce9c12631b9105248271009fba1d3090469e427d4f2160bfb4f8e91c38133f46f7456fe6a8efb2c20c351bdaa82929a0ab568b7115ebabbcbad0986ffe12056dcdd6badb5e5f754610bda5d828b3728504045851056915a82c3f25da90ecbb13d87c199f82e9280e157d7ea5e578e3c31471bc8d33c31378f731cc6b01f6a9d83fc49296a4e8e5fd693e345ce7a8480e17f594f9901a8f48d9725b9743502000200d315002028100a090583a128c6c15cd87d14000d718e406a5634148723690ec3308e6118c618630821c6004494418686c64a00e0eebce672e36528cf5db76b716c4075ef0f6b837ec8eba8df8fe3be4037d6f1b565d3e2c3e84d1811eee3414d00cf7c029c8994a7cac004ebbe8f3cfb4888de042b8dcdb866991d52a23332adb5600ca4f0653e7d68fd129e73c61b97c078188d0016cb1087329e8260cf2c41349b2f4dc89ddcdb3008093eb35052b49ece92349f944fc39d69f67d9a762d85e4aafbfdc448c8ea58248d0be889c2199134ed75279a7724fd396535e6d6ca1743e8d8c4896aea5ed09bc4f01fe1d429a4444243e1be3a1a565e69e662551f4bd174261282afd3651480b67c981f4dbc9e4d31c95557028b6535edf369630ed73494a91376762ce888d5f7acdae6d00354c5e8b64a40decaf1210c1512a401dc4dccec926c60064caa999e1257d85ff1d4c1c95cbfa501662bd6ab3464fdb3060e29d1f00db37a5ab0c84a1dc2019e63200962ecffb24dd27a09f4034125f0629ec981cb9ac8537af69645ae959409d2d5a8be0b5fe66e124e3fbb025911aeaf8010c1f0ad5e050ee51977fb5c348e1d1dadb6fdd5bae42dcd414636b7cab2201d2327ea10468ee55308457bde3f89cea5603050531e7b23a029d48e6e65a5eb5481f7294ae3f22845345ca9f4794235951ef65bf051d6fc446aa88696302bd4122156c267493e335fbc727fcbdd6db6905eb1f1ce66dccc34101c3782474fcdb8f60f03d42eb24f9de1903826dabdb06a78e4644141a3721973054ede8acba2fed7003542636f9d5161a2f71dc54e7c9749e85d2a5e613ecaac441a234bff1626e251d83f8bac1e789dd5ee7d459ca994539c541fdda53fbc5031020a8d7deeeef941d82c5d1790870b7ef35d54dd058bbd065bb2332a9c55df107e4fb96924e61ecc98d8ca97107c5a7674a8ea2f229329232fcf6a38b93457ec4244a6ccea894916545e9ce0b3ef8fbf733f6153451e73375a9f090911774db12a3c72058d791bcee06d5440cf0a8480145787e9bd3b23aca099207e291d2d2190a4862f3547a853c844d04898b4628a9a04f416d3a8042230c10b5dc35e293183c09901f005123e98815944c3d46847cc7b4342a8087a182ea4c6357af7d7cba2edaf28a86491b4772f79eb135ae073ca8647277f0b4f1c3c0d9bc5841c7c08985721099bdbbdc5a54210b1888323b5323c49869d18131224c9e1e5ef079743ac615e4a0c237086764f91d98a8e7f05f3081fe15e511245c3f96fc5b4c205d05f4e4712e0f0a733cef01cec2d108bea81ce3f951261042c2330dd2a49450429159a4550240c4b311f7029a57715619b47ec60777d8ceaec44a2cccd0d9e03e6c6917c6db9e9ac82561d7be902881d67c6b83539b836be976f674a40d80e05351a4f82450b5c145260f201dfa018f2f8e01795891174c61d36829d29526333ef4a1233049e19863e410908e0d028e2d734da01f3b78e07c7fc6a46209903670c204a8e7e9acd32d739330659cfa7ba91cca8f1b58454f09ade5758c7c1a977566118b65794c7074b77839ab351f46b11c82e4dc80d9de1ae42e6a8c3b5fe5d293153201901e9fa4a13a5aa0c62a53084406b18d9dc46014bf1cf22e3e6ae6e9aefea6b86d14012dd2d793f37c919acd73639968461bc3c254bc95a32960c53b11bd882ab095eca053fb6287e3ca6643a9b247ed1a73f8f77c6f90e3d66f8e1710be74b71b611ebdbbdb91c502580820b95db6c8d16391cd47425e30595b60432a69569653205bba1e01acd9f285586ff76a6338b5cd2bbd0513adc4d008427387dea67a577870e346f43934cf391acaf83746dcb75fe6b07fe919da447c120a61a38824746c55f229e9a822ef50cd3ce748d55fd26059b215ce5f00e5a89498f8700d5a5158015a23c217b36d85402c617bbfe039129d78c92be415590e7c61cd1c0104b6b2a1b41b0ffb521aeac19f20cc1b8ea3fbc7a4697bb6bc70625f8410e893aba34ad4e44641c09f43f0beac1379b4a351e8a2ef6d541e2822cc268513f322cfc849c7d4f79aa68974dc161c766b1a1f918d3e63112859305b89ce9628fc2df6972f161a725c6164187a544aa23ac5103d8ef808e6f9d11483eec38c14a3da5a7b80162c220806648390844cfc167a45479a0c34a0dab2e96a8cfc8b28a7ba12bda04f120cee76559c6a73938b9f20ed28e2175a7eebe05422f0596127e19c178d4d095caf576886ca73b89c9d6887eecae0a8385d0223e9fa51e3760379714d9b9185844a3f3b2e1d61e48e39520e9571a737d8e10cd272ee3c8217728c9a60ab6fb5b70ded01d4a67f320f2867d36701ebdb2a66b19f7be1ee880304154960f59b0f6c7039b0a3a9f73811c491af543b82789f5c5af7d74d21d71ca8b84e31dfd0882a7137e750531cc43a77a3c7ea6a35e328887e757ff86765b22417a569236b9f4eeb07a22f11a323422d09428fc1b82c4536601127e9b54bf4fa5dc9843e3d9422783fceb61b9324623b3a2d6c23cfeccea540bf54e507a04e54b7ec1f5883d954685bc2c30c6aad36a0b69e7d19435e3ac4704573027cc74ebdec63e3fe44c2227e3f173edd47893bfc3a53e33036e9d100c2f8380df27da0e14fd8e1e91344a86e6b0f535d21692fda2459ef7c6c75dc5a12edd9c8530f10beb7c067b73645214cc9815b3ffb9619c8f2298e77bb235bf5a417872073f209a2a49ce7373d9f6a6639a0601f92c6aa1d2bce116b55fa9ad972e831687b3c9f80692e3889364e0f415ddf2691529ef580ebd56b08eb16eb9334201b332c52caf88918d61e6aa6140cbc35b641696b28ca028d363c2d0cdb0b5601cd2e35684dc312a59310eaddc02d2527032fb3fe5ba0134627c32cc16235bd6173921d1553b9963be549b6336b2c6d190fb729e3d24eb458ac5317383ef2a0d39dab184765e782d067c1c0bf92f9b93e258eb05daeef826c8437ed68bc379b3cb92799b65f4389d5062b4bc832f14fe899af9a9f479c41ad09735c9d346e4a0ef9b3bb38b58d42c75579c1e8fb6e3a305b0d762987395128b349509ed89c46e24c9189b68ae595087c9d9d7f6b5ba3afcfe13b2fb2e61f035e5d19f63f684a6006d39bf191a8b7c919d55829b7ba8b9e5e0f669b7742704181b366e6a6dae501ba4804064744260c82bb4e9fec4c68b30275352578b0f02876bd5cd68dacc2a32c9889b60f77882e846cdb4f6ed77a2e3dd6f70c7da1e8e89242a2d0bbb005212713f7a81d3184e3c15f53e86ee03803718d7096dd16d745338853dcb6ccc5f8991d588120acf43b3074c7ce3cf8c585fc2a12c2ecafa4b7c29c7eb084412cf7a7f87fc45f44c03ce0edd58df0391e0009b6e0d3c6e1a8e57565848a166718b7ee5126f25c99e1a4827a5cf4b7fbcd002b723d4149489e82bd451ea03e06ceb1e4c11e903f5935cb6e7b39f62a208d423fa2e0a2ccfb23b31fda54c26f9a8269e87dcc5197c98f7ac424a5e25838d49213275d43ede06ad23a8da6a16ae039a71417a9332741a6dc608e6bd81b388c4753c98e35e121e9a31c8e2bbb64f12735b63bfc3ce00777124b49e8a105dcd75f83cb3f56e7510a60c9493c1a0ce54c252709729d380d2c9520a0adad4fbf8dcb38a80c3d28247fa3542b24ca88112074e83b2ccb2dae619329f7c5b266e2c5f78d57e6667eb1fa1bd2e062de6ddce5683419ead7f940e95dd4340746825e45bff049176f61bdc1bb190cb2bb15672021bde419c361468ebb7fc7fdca4c2f662f471a2424915f4c01dd7d2dfba83ac6420db3aef103eed22a9d4e34ea705cf373503c42ab7a5dcbc7705313c4eb7bd0d50bdd2b0edcce21ac7de5f618d617b44525d019563e235eb5b4dba8c9260b50975118032b361d881e7d7513b49c18b846055af0b252b1226d20476f99e0849a041726a46cfd9e24c1a761e5b338e17c42cd015848dbea04f9956ab411d04afda3ca740278faba10024fc19b0c9298ac4d64fa42f73f85e02792b650189ea9ab1668921052b6952eb233856dbc76a26575317769802733691167bb22bec33253c7ffa8b354458789e504a487cfceefd2a5be3e204d39cb68ddd36d1c84533ecc34378fbfaec33c066af52d0a9e500a14e492d73ac626f414e7d82fa50ea76b3fb770327c529387d8fbd4788bd7eeaf8e9b62ba92ac5899382900dbcdc20a747da5a0a1a5ef5291ae7c34b527fb9389ebcb43ed2cc63cbb8c1b395744ad661c0be846b92370904ee2af92fe9998efa2f09829ab46b338864ff65398404d1140fbcbabdc73b2244217199a769ac3efbc52622a12b0104706ab903fefb929f28a22b12758232caf8611a28c0613a5d3f6d67a530ac1b781deef4f495cbaff94489eb1d449e0ab10f46d5c07025b2c22e002c621a5cd767dd8959ab324dd2b18efefbc151aa5cb97cff880b3912dd2088125b314166051ab697664663d08a68596d1af6f517c054dfa183c1e4cbe51a5f17cf9f19099f29c5e232bc3e54de9142ed62ed44f245bb88107b13e967341d18a7450190395e7e72f032db7aac94da51b436fe737c8f985a3f5bbea88b568f5ff5610dd895e783d8b2e05e87dcd7ca09e563d1cc03293cf5f918ecc188c04cd3089a0c2006a26339a58e4e390c45496d5f8fbe45f7fede5a4391be0940764568cf79dac50c383e1d5797dffb54e67ceae54ffe1b0e9c37269643f4fb40143896f86438ab6cc58821fe348523eb2f9221a9677237446bce9c67e631628d1b8f29f77128d5c2038f36d472683a7cb87d1edf25d0b02d33658c004cdc7cec08c12f7d14c0fe1ea1096def988c44a83dcdc9cc544b0508b87ed7fb63ce4bf9b72f94434222ecef975dae954f32325c3b5b148d0e7791546f9d3918a7a97e0e93aaabd8b4bbcf4e5e021d179218a5ca79284983099904edefef8b75044d68d981de40f7b8b09340d3588ffdd175dc8dd510f378cd4c23713125b137d65f17b33ed1da5bdc68f7c22d69905cab70b01a1899585b6e56e993604ac94da5f037cf1baf6465112ae949572752e1f8a634315b695c9eb4005ea720782b35bfcc183b0510d98c7fd22f4fa25fdb69ca5618913aaa219447841388944c71e3a295044d1f00500839260bcbed53e317684dea4222a980731a48a0a6ecfe47d91d7f9493d6b0824695bef73d35b47a66bbd0d696efe79e3dbc4eccf1239e5654052cf21f4f2dacf968fccb7374304f8fb752b3902a117ecb5c23e7ab504629e5fc3f21a0205a025265836db13c9afa76e0abca1b208b7394f3b165842804077a42b2403682297eb2a1ac31f4d914cf583e1a0369b30771f81354e6ac70504e6da3e496c5f54aabff8e3ac65faca6c8d56e32d811d6f3ed0fc23463550cf6ae944ac5a8150624212b0ff01b5499d3394d56e92c44eda515becdab9fc59fda52cbc8983fd70f225790b3ee5daaa098c65ddf2b2b696c8a553b600d3ca04baa47defebeb373efd268274d23e08483b22fde92cd876a0f50f6bd256f1c9cd6eee8a4ed266d89f5a1492938e696cfea9199b6ae6b80f19ca28ec751493bfa117fd6dbbd8dd56d43d436cb8ceb99631e3c9f19af405fa7041b6a3ba19d28ab54268032d2fb56376347b672e2b6877b97390bbc4f89e0fff08ae9cdc0f80c99e9ede2d79d8b5390e466fc335753fc2192c42abcb8c0f5b8211c03a25e7f7735cd38c1226130124e33761b688e5ed88499e97e12de289ad84a468263105601574ba43b102040f87f6dbd9ee96010c889dae8bd3af85544f1b246a25f474e0001be2c884b2e57071ec3eceb70d93589d27edb1e1162747c5567b20f0d0a8a5a4e003b0a94d68160c1c1445536270b781096246e95bf0a202020e44206087491c69c3ea712f5490efd1cb13922dced1aa0ec8e457548ccdaee9833c93bfd58becf15d2729287486eadc1ba9172d945968ef82b791a04d7b9221d24f7711aad9c0b4aaded54154f9f046ea79ba1fe97be31288318e56cee82e48f223f01d335dd41af055e01ef6fb13f3aededff3bb89ea8e9b114468fc95dd0adb63f12443dc5bf7ba85462f4829656976751e99a38efb681f4db59e61b9e7fcb640cf08ced532982cd6f1415738d96c5b8a52f6d02c3118ffa12363d7aab3014d38034d1da86109d93fbdce41e677907421a46a581847960b3089455d26d9b0a0d376904412d09ce525e675a4f3727642f7651a2a3d8d10a7af23d6c29db20239cd51d30c466319501cd9dc671f088559db7a072ed8cf21e7a3b168efa26555bff7e1c038e23550393f87033d411a25d53e5fb44f86857633b628de9f43857ff5e565c4c9a08cdd20ca8a34d720f3421196a43ddb4246131ee0234e078ad31d8721216cac9ec4d15abf6c4dceb32b04cab611f58832ebdceaafbe3618f1b90f4ef18e3e1e1617089d2be877188af0f851b4158a917554894acff8853756e4fb495796e872d3f121d4d9f0292d9b5c3bf59175c5f7ef5fe585aa5ce59e9b63b481b2075f32e2c1f1964f4e1c29df5bf4105ca10faa3b432908a1496fed8644d7bb2fdee7be33fabd3d9b0720b0b5dc7aca08378744964f0bce0561d2049c7e511762c2c17bfe513db98d4545a104e7c91d0ba51ad7a9c4cd82ee59d3d0758cb05d36748ee2b0641d2620a4b7b48da278b651b3153da35a62e8ccc0f5e3e27e157a8c467ba30f50a77493f0a44b4e969a89a53fe2aa1d655f64dfcaed4852b20983b881dc8318d6825f411f38a500be5a2150e5322e3e58fbc031d27035c7810f28a0dd74723e2fbf33d48954470e5097f72ea7103e6b1a3eca445ddf78b321be8469554b9c865c30bc8121335ebcfcc60d3194e2145959ca3d651c88a6f051279d38c892a810fc2590f016b73fb5448ada0ee1aec56104e4fdf1e515efa4ba59cd9fd0584f5abc4c8e8afaf675cd63f1860498c206ef9f0116eddc7661d4ab8c3a651dcab8c623f6bf90d2d63ccc0dc327d6725e660e40daaa4e34ea33df58bc9769444a8b2f15ee0429ef9185ef07f2a3170d6d0ff04c2459e09b99fed754f2567bb49385b2c4cdc4610f89d4acc91af8533a8479d4a56ff5ec2439400b52e81efbf5a145fd614b23f0ba80c1406988dce58014c743041403198718fb0d6bae65f3ed7a04eb5436b107db675a828a9391b9b63fa27a0a6f20bf758093ea54d47050b4b7a9873fbf56e771ff344365112525a4c986b83d3cecbf7ad90f86d95acb3402806277b31bcd789128870a178d749b81fd62a702f62a2e4e0deae1e7b71602e46211225de08900442800a4091b234736c6f1d80c9eaf871bba0a4010d02c840cb0e403d1cfe62991dcf2ea3616c8d04be4c92a20b1f72af99666aa54936f8f1b32470a3e1ad86f025c724afd65eec1508bcdb8cf335e5566935830c8b10482797729d071307629a0c8a84f93d1464ec1146db581280ef035217ea5c4159ab5892862b2c03892dd41827faa71a96c4bcddb99ed48b555812ee97eae93517054b728eeb20e59f9b679e4a0171a4cd742167f23920c1d4ab666ea442362b2133b0149a5800fb1d6a5dba33640dfbf87353f8d5ce2b49663dadd5beef8b825c2a5024b831a6e63d5cf7c44d5230c395e45d7651b9d6a0a5a8eff9ad24134725844a2f60450f9a56bd8b418564c44724658b7334f9b91d1f392e933eb0d03b9101ed28d7195a163924b4a008d6c81d8b174ec04c9817c9e1e6d75833600b1fcfa3450aff1c8d7d53c18eaf652a045de23212aed2bd884c1e74b5cf224982fb0479a17666d93861ee083d071249e20e3681f40f12be774812c6650c88dbaabfa690241513fad899b76d5bf40ab1ab1878269959e0fe73bd89151b1e8acf784bc41c4c4cd75f201ac343d74bf395cab8f528b214ce5046af99c3fb5e9244578f0ded19af278f96b8b262257f635b3c1a927e9afea8b96982d93db53db24d4f5898d873cbde1d83e253c9f32a3f2b4bbdf310de569820bea2401c7e30b3aba82e327fc63334b607ed6bf4cf81b6b7e79ca69eee444a29e8fd19e96775981c7c71acdd1e8908940ee495fb536e4a5e8d3b5817598649d1c114c2ceb14184c662c59daa5010dd7d5391d59895a42984205bc55d1a97806a26bda14458975926f31b801028652afcd12188f57a17c36d07d19f7e40a82cd76834a6036c8c99dd92e7106685045055500b0d08327374216df854847a630ee3cc71287cfeefc5a4244d63660ff0ebaf09b4e4d8ab2411341f2c045dcdbfd30eed452b74a62c9cfa76874fc3f52c00889eac049e35c328614bd704c1793a9c72ca6b354dafdcf54bc0ecc816aab2c418c97d814a5b2112dfacfcae7f122b14f03b1688ca4885060c2f4a57be7e74820ab7bac4f502d6da085c44c671d685b9fbf98a791d6a34b0e6a41b48347b0a09006589c05db62b05e75f1f47cb1f4f4c3453684bfddceda441a82c7658bc098773477aa2e43700de68078c632bca683e4f5b650e156ee5077d745bab0e3284107429159d9b5acea4eb43bcd52aa1708c457a16b2de4f172a30c728476a262f63d2dba9da262ad93c783a4b4676c769a11759a30c4df4fbcf3661847334056acee2a1bc926da84045f4beb40013964e735ac074d64ffc8fd0e0543a8b582af12e77d1e468443bb7ae5fffe52722a3dffbd2cfe6bd95033b7ce81145c22baa71260d8d9ba271eb1ed1ed7a3c045f5a78b04c88bafb604fd91fa909ccb92756cb673a9179efcd5af419c4ba190b0a7ab3eae026ff072bce04ca94c3d84127c1e8ecc22026912143e379f3ab3b18df029263620625639d1aa9c8bbbf1ff6aa468815363a435be30d69d0708fe85b171fe12e2d1c2a27a46e6cf029f60f3a39a6ec2fabf58998ccb4fb67153f2562369415856e5877b0c9ffc345670219e54186e053203a77311013f292d5e4bc99ea1ee66d8124b3b7249b7e618b395ef59441ef859eacd4020193b898466d9f028c66434987fe3fea2d6ac22ba8711e1acd9bb5a1ed36a2afba680a575ae0a04ed0fadbc14db13ec9494c636f56f7073d2173ed8b55f811c4b0396b54fab3da7126bc0f2dce44c8d083fbc14e40e8d245210690257bf3f966a92b28af8590d9668b39cd63fa735b13a451037d6d5419ee8ac4542371d5ec04626389d1bdf7a7e5dc9188f6c766a80bde40a670c8e546517154b03b9b2bdc8d0edcd929e62b193317631a0a80b333775171862a84f673ab4a205c1ed00b01c8cef6e033efd081cfc69749933e02691530a5bee022c7bcb9477323b5e4ebc9e8c258b9209a6217c96264bc1c84f94285f9ab142cc02b0023192258faeb0ccac8a77403ca222adfc3573cce85e29992b0e1eedd32809b452ef235fe342b12c2ee1997a112ace3e28d9a54e2ea0c1d7cbe1ee38a0f0ec6a1e0f1297ab3c6ff6919b82a58c6e6b0d97722f6cf3524cf1e26fba5546be9a6b09c895d8c5482462be240b5b3e5023984aca0324e1361ad1ea6c20683b0aeb8c875a81c22c337cf4c8bfde4627a6ce2b48458a541312e1a8568d7f162e3bf35805a3493445da0d5d072b5f8d5b0b8b00440b4508da6385ae77063129540e3ed83401693ef64120d6c725037c6767cf8f5338759802f9a2583c50819d2b53cc5115af1efa50cedd26f01e19c95850933a6b1e458906df60d335d2705fa8077071f369f8f806538527deb893b70f9cb69005cc7bf08ed54a019d4086d7656d6c67b0b8b756c590ae6561ddbe43b7f55cb5db22fe9093fb46b468a1c4b30fdfe58d718e901336ca43e51f88555fdf3e4018e8727e8325bdd9112278a73f6416c3ed5de5e29b0469a88fa6d1cc1cbd7a5fc963ba174b67c71b9fc9402283a2ebcb27b421304ee72a45315bb7cad7bb00d2f8ceb78dfb1ae40631c56ee919cab09403f5ca579c4e980d5100b8eb63e222b893d4d372804b9301b425a161183142cef5847791b91ec337b0704010794037fa11589895b0aede06d1881cff7c562df2be2dd6ad6752adf20bba2cfe38a36642747e8d0ad1c82c1b0936aa776135b7d832494eb72820f734d02a823d47f1d419e213a96148c605fc54701d60558873071e602d3d35fa3a1c4474d57c90050028f43e662a3985b6460fe276478d5b14da20bf0fe262b9aa40e2ea456e18d45090a2d769aab14b394a8cfdf7f29b512939994c2fc628e63e55d8f1482aa6211fe149e047e77dc9d1a3b6ca5ad36373e7087e2fbef470ad8846c98d290a3530a6cb383270abb073704fe778362f24b600fa43a2fd9f7003c55247dc3bbcbadb88ebb90e97aa4d37c9c85191fcedfde2279053e826bfdaee1901c3a558910bcda22cd95dfd8412d0c0ced35aea409b71b2dbd6e78102a998a2150faf1b6c541fc1120bab9ec548ca4fe8b619f5070cf672534cc599e068161a7eea4a369ec76cab15de40b43a594fe1aafb3048fc727db7b0c44e9df64db5970f49374b42ebd572fba72adb4ad26f032e15849fe62bfc262e1c3e2db85c733b10ab55e6209666d1928b01dcb42dde51a053b60d3ff7540f97a6f47a1eb80f818a8987fbb0861034b6605967ccae98da1c7947c24fb8fd4148015cfde276f92468d3f1ab7f0e4c722b11da968000fa9220aaa2928302153871b32298deebc6c1dd86afc5bc6b4ea6898d1ea9d558bb54a14cdb04c0aca0b5166c5a417cbbbc2258010e334b0b363e956a85ac68f38f4439bc7aadefb2970cf902a8a03a6a6c6f718288b033f4a352151cebbecd82f1c99c2b5688d1060f3ec38cadb45e3cb67a4a4fe4aa238dd962ccafb4129f469b5a53fdd025cdea3bccefade30ed7f0bd5d5ef5c9fa6db1463a7eb8bb221ae809f1dd6335bd390bec28458b6600fb32878ebae5d5feb2c2dc02311417c1600e862cdeba19dd5ad3fffad06f95e244b95b303401772c575b8bb7dbd9def52af6853a8aaf8db60d4ee1539c8371996a4b108fdb146ad8d22162a6438fd1b3286ac070d06b8aa9bc6285d1e223e83211f67b754a83a852331b213859fd57ac680b1f002732eadb6cef059c55b8f49d08a55b0a9c34a1e71e16f636a05d0081cc488a362912d4e4a18a36c97ae4afd2684c1522e7a72b296c9ddb32fe9f9e18fe2fc7be6ea3838f677df8cffdef6ca516bc9fbdf74bbd314e359657127634b200bb7621f370abd50db9eecabe025ce52b560f3c09eacb603e4911135fbafd6bf0aed17c8e36733f3e65aa92a0419b148df7d42ad5a69233ab03984ee45f803b86c83be15fedfbb55efd1ff5eacef5d08f48e2ea7214c5315ecb536fbdea85e5f7ed1a760586c4ecaf371d1d000312a64a266aa3ab28125241a02c8c209e9e343195aac8740a42dabca8090d6a7fa15ff6eacbb327d8893dc8274f1f1b7080a63f88820b7a5772311c40e43f2512c78bd13ffd12382ffdf4257754cf63f73d98a2670f3308660cfb830f50806698dba188da264bb8e37201d4aef7aaca1861482e1010f557ef01b8e0d6dfa23e9a3f0c55901b8618b59623e201328dee0d6642b2f8e0fc2c1274d8aee1293f26e156efe9b27a1b160b48f89bf26dd08fb53fa3e6383ea7fea117b4230c1de62b6c9964a90f9378acc6b0e5ab5cc91d62e6c40d1220ec337e3271d842e6c0090eac9bde63e783429947b4ff90c070a4068666a94db5757fd30275bd2eb378b15fdf26c19955e2cf4b5f9f7aa31a92e073779b2e4d9017c496e2d75161b6be7d627eead83882e29097a4b72956a0e3ade5ff75f3a8ce8201583509ad066d332e92800039b4151572f2bb8729059de1de0c0ea551c9903496694a217aef35ef2069d8f9aeab4d17481379de7f77f0d9a9dc9460521e9437a5d965ae3e5a28db826ac12aa5033871fda57afc4a5604ac6ff5e9266a11035700800375daf133a0c001103830dacb3f7232f1ffd69abc680b579cb43176b55c396bde541a134d65e7b34d373dd849ff979d3758c473d225b36ea54dceb203b556e7a04bcccf986c962463e0a14ea57dd72c9d63b31a06a74966d9d4bc53705c21871617f829f6157cc054f8dacf816d5402a8c37b507d402dfd375c498d1cc35b895c87e63f09863a6f3e185af5924d1a5540ca3960f76a99330ea7549585fc95357115b5d17e255ebaea3d9d8786325d4ddb98763994134898bef9b2aa9e24dd2a86ad8259c5db3bbf456405ec2d62290fd54bd0ca885c1ca76452d198fad279190d069d432ee651527ac06d6c64b8ce1f05c4d9ff4dfd2ba036418af42dfa294aa5f962607c635390fbf3be8bf97f02160eff521e0de5b3ef45c6983fbd4fd226714c7370b5faca3a4c7f39e63981a1af70c750e465f20d58d49b0e7ff696a2727185cb0a08fe40275a654c6ce8d8f2ffaafd6af37edd41d922f77e0fb46a30a3f71b2609498332a4bbb55600cd18862b2d83d182b511c2d16657f4f4859aee85a5f3d37c0002a03338c4e96a9133a739f8e4472e9e4941ee1f71b53f1de454e05c925196a0667a708290d32fdd9d5225d04c4df5a5f96364c0778d256f1aab6621b54c43480928de89b9ac66ff861a7829e40330940f10b20af0c7abe029d858165e2dd13a5c6e507a953f53f12d0b61e2b8be3cce7247418e44d74dbb736cb2f7192a29d7902e549c688ab8932188ed6c66e0bbbea1a958addd9ca377ae2d5bac0164dd6078dabccfc6c7321a1a61d9c9f9e55d408fd77dccae80a8fb28f3f75d6998adf1a462385a5b57c254eb0397d1a869ed3be1aa6dadff0df2dfa7f1f89f3e0e9302a0eca51cf233519c355920f392880376660fb964a463c906d33bd23e9d040b88386b673a4f64ddeffed1d1932a8b2400c7e01f3906770019fc5c3c2934450a6dfd62c80ef02c31afb7810242f58434baa61f03f141b9e79e9d070db894d75ef291b5df46aa3a4dc8f4af372492328626bb411ac5c62527abc8335994046910341c4da452440905affaf04c4af48e5930d0912e4387508b5cbaaeabdc524eb8b436490ae1b6801637d16d040d4e8aace6eacde2d74908a21fe782899b6ed2801e63b06281c0cb04bf6d210eea0a35177e354ef000a6de9442127b0f045d651c8b43341643ccc73f734211aba71b4b33f92fdb27f4d82b69ee4d6eda19dfab72b39537ffd4a194fbb5e73be4ad063b16db74953f1906e25560b02406a29b1f3a420219e9320eec704bd312894030f90ee5410232adf7001be8019d6600a06707b88b723f00f7e66c353f60b9862302d251114706b51bd189d4d63fc8f6102e61ad10ac3926c80ee40c0e9d5c94ad2ac5de905797be118362d2b8ff60728a5f296eea53e6c5a6cacbb8592efb4eb0b0ea7fca498e9d002f99540582e8afd2e9852085b0c41f85e6706297e0151115614bb9672042debe74810368c01456ee75c1b1ade03d91f29b439a3982c17c79d29b01155170dfa6646f5f14ad95c02ac6d086c5fe5ad4b0a119521496e29b6afe22a459761dee540cbc7fb9253bc4bf87baf9e187c2f7fc614e4d203d32f2d6c9785135f73d14780ff4bc6649a2e4f7d46ab9d9294a662f74e66a11210b09fc507494b10bb0986dab33be1ba064f99905a92074cc00f17910d16c26aed10c41d8a9f87ddeb770242c3e2453ead6a0fd6c3318f1d1725ee636cfc3cd8caf7efc49ba13a40b2fe98c8da57ae4453d7b50fddbca435d4f43009f16787228402c0775e3c6516c9c248a22ef6712cca1bc6b7a953f7ab318c18817b9600ad99a31968a83ca7c5593b677a34cc5ba2899221e4e4e802e875db64ee73b5ac85e96cb6c4cc1eef06327a05792fd89cb586106474086592d17488b37203cd9dbacfcd9d4a79a5db089988d5bccf00d5796b20597b64985dbb78f469b62f1bc812afa05566af7dc3ed78d2e3f2f5eaca729b77456e96206e71dfb1ed8f1b0813e14b6c4188f0b22d0c3444dcf6db58f1a1247989ac77cab0b4fecbd5f6c43137a7427f839fc6f1bf2f7cd6aae3225e4149c0602eaa1fafd106df41083be78ae37b597e4627bccaad5e56cbc4ecb194d041944daf833b2b58fb1cfbedd302e829161ef81307a2e14ba6f09b64711f0ede8436bba6369838730894d3c56042eb6d8da15c66576e080ada6dff8d684af1cd8bbc28401931f1b98b9f51c02e0d5a29af098009f1758b4da3c8c847b77e7e408a0040161c8a69098919635e7eba7fdd214a869aa0e016345eb4e6b53c88ae30ebf6371c9c518e39de4d4f35468df5733cad2dbd5440cf3515028801be57ee879160370cb0ccddfcbcf8d02b77ec730ebf858a44f196526c0cb7bfc8e2d2336ab9db4a3192835137700a1cb4760049c7d349a0bba324230da89d9e33806d6f59b1d954ad3eece49c74828ebfdf4c69b0b6de69efd64cf8a61d548893207f4233d4260e0924936b91f2721287b70878eed10a78545a46da366e8e8aefb0a43fcbc74eb8995b14330239d360811ce74269fd454513f40889b049dbf7d49017443f2e95c725415ef237c198cba561bfb64a73b0181db4a1203cd62927c5e37418818ad70e1d34f340be48a0967a1bf663f345604e199fbca1bd421503256a3965c3e059ce418737b92f6f9618a96df5b82723e277dd4c05bcf1a31a62c360c5cbb2156d192b6146f8130b86017954bf568c9f4bcb2497684cb31ec5eb8969e12f9a73176c158b62241dbc612ba69110550e9d97e4b740c2246456c064b3112580a4fe902bf1034fbb5d4da0f031db72a545f66077a78aa746f41d5b6892a6bce93cf2d6c4ced9b93d0af0067614fb1b596755ae27422953d6035c592a4a59c5916c1d7d0197efe0d3628858b12f94d2bd31db913e62137c234ee92ddb9e7ed1b2826f19b950c843fbfbc092104eb04e3a5f4aa0a16e4ea60565f4d742b14144c6532442c2ee6efd6471564406775b1ad9521c292662db0a61b895e1dfe468818979f2fad0650afe9c2b2ab7f53438504ccbe61b468390c67eef94311b7c0618791aef6d06f245313ba2ac331c5ac304f651c385a878a1ced2e48edcd876ad41739d0e682b3bb7e70dcfd704cfb8943497288992b6cf71915767d224e0c0ac3fb539cca222f13626034d51019b649a4c3143b38df76acbba21da1a754aa78608ec0e64576e5aae7d1292b9c59515e13fcac9c0a29e39af4c923427aaedbac12b1828cd742808bbc95d9cca96cd91b8d7e6c0f4827baf82572f2b1958e26acb39874ef168336bfb7f5a5351da1d9d3f645594a5642001c4bdcbfe8cc492c3f17447084895d537caf6d539a7ba0b381f47baf6fc966cb194cbe72f96aa9e3a6e036c7aba44fa8ff9090d0cb6ac5d3596091abe2e2814a18104db3ea0cbd365b65e601b478f9417f6cd3b3523a63be98fb9bddf56496d1ce973d4bc066febb8f30bf5fc1ab3ea29347a05539b7b7f2acbcd9de82355ad2a5054892e010522bab74f7c51840133ef03b6e9b746d71d86fa4f9ad2066377a139a564a01cdeea0e1b8fba8b9e299ef735cb55bb6c8e4d12b8b784ad51136a1573c7720a9b005d9ec0329dcbab1f13af158e05b6814c3bec50e7bc32bcdd7063d664180ec623cda83a9f5acf2d713bb2c3933572146a943f44251753321522cf04c9e58595a673e54b1a2c89a8f5f5e83a5f955621d38380b8a329bd50105b61d5d38017446a59c938b42918afb6c049041eefeaf10226630464403ee56130908c655c51fbc6117acd1462f21f41e85396a47b939d6a17746b0e5ff4719306315dde3e72c6896ab847744365d3ce0a641804f252e600b068937f80ec83a8fb9cc2eb1f658fa1008a171b0108e6554d87a05a8a98e20cb637b97042f7f32f2d842493de124fe60f2979e93cc7a807d40ae37ba3fbec2f21a91306c51a45641ccb09e585bbb63b9480186c3b47496c4329465c2470043eb7c591ce204729902d654f601f84574d24348e5492d2d0c6e3b2019a93710eed171af42d8ef1714f5e9701fdcc8d584e0826ad3634e8b1d37c12a652ea141af655f15d3923aafd0d1965887b293f79a995b89b1531974a8030cb8f2a74c8ba5a3362ecfc1eb5588bbd24ddf288631bcc0c556dd0ae0d9d87d83d91401fc404d39b6f667fee807a27e4f4ea63395585c7ad0ed88b5835f8a8b4274beb0c3ace57913f037208745f1d6cdcac0b0ec759c546050ee8d1e7cd330bfc662c2c4da28ebb6ab6c123c8293da3bb8cac9b9797aa9dc4800cd0ce22b7b2738457a86ee2b4236ab7f3fff6f16321c296df06777eaf581e1e818cc4467079d304d7c7a8035393fc7a61c39d6ee6ce59461332fc19fa5c83fb605041e012bba4be14f34e5b8162a3ccd35c0af126b0ba07c2605ab684ca0f93af6a226cd51cfe5509c996c3ca96068e38c68dcda4b487b9c4752dd1a210801a23ae7775ac3f88553d08682115a7de568e9d415a5a7a0ea96d723321eca22d23a47a2c6048c01c1a766a06563a81ac965840677435e4d809cdd856b03432dc2e0cc00c6db8d6949e9de1f6a670d86083f74bc76b80e0dd1e3b0c6495cf2cad82a0de900e02c23603ebe227904e413df8be93bb944146b5fce8cbba3cb402862d7a18466cd155923a4840123b82b1161f0134aa187ce4015da52a4075136d487688588b4a48d2b27415528c93b9fd73d436903f33075d17db817571ed9d6a56b406a9ebdacb3d703e029fb130157d64c84c3ef646a6c35d1427937130c6b064e88a8023ecb7267f75dfe2107a811d252eb3193c35a02aeb8751ebc6480c6c685979434c67a3e0c0eca937f3692442340e64123fbdf20007a61df3348b3495de16852e4d11d3e4a144913e63021f91e3e62df50e40a60105ad79473420296573934afae448247b7d6913cc903b366bc7d853b0d74452edc348556262d709fc248f5eab2040c1248b0575bc842e22b827304f274ab0d692fb1d1b7465b0043f3f6c7fd0e51818f987cdaaeddfe595a32e315aa0ed2c6265a12c148172a3a85b4e7d0f8af9159a550874f8a69cb6129b4123f3285ee2997f1c30beca8f6526a1d24e4b05bf4d7b524ec64a453ef8065ac1ed8a0ae4ae237b612c8cecf11c5f94ad088a43d1dacc25db41f321a105150e72e5f2eb1ed7b5762152d12361e0759dfa8034c172d9c3d581d57f49dfe4473e4d0993ef062c3ed6b8f90fed75f347be34bd3702ef78a87f8a8c9dc21941d0ff154c668344eb46386795ef2187aef4047ce5c5bcb202fa25384b9e06338d892de9929346871e87d69034eac4904275ebd01786944b05f65d6745f4adce70de1b45760dfbf9ed32a8480f0871f65a068dc04a24435903f6f2a6a5bf34269877c2ff40ac10c10abaa0b6b2ccf63be714707d12d62274b09990b3d00d20a9cda551395619a9d015a5d989505ef4e26767be45449843028215f51be0e6a652caf92df4db0e684ba60f2b3d1c4d8f713f85b91b1d967197227381db69e83d2e70aa102d4ad3af76268ad8e0ecdc1318d5d90491ca4158903d5b86d3a2122f62a160828039613dc84903082db52d624a735c1d45346690860fdb8b2fd651af52b8a34143cdfb3ed6c82d760efea8e564bf4f44704ba235801671ad3849b1cc92d168000450c77a024160653376627d111f6eec49d760eb7838678c628a9b291b65e64cd851d99e177cc4af4d92760a68982a6b55a4211f5338c15e978e93ad39376e3fc5e8fbfa096acff3870b87674215f54e002257be8a2c8d929ddc9cb7ed6de292183bdc2c6ad55b05ed78d700987befc49639581c36cafa4952d5a61624488a1f6d49d3454ea0bba4746eb74b60c0ba78520aac4f09ae811fa036a9d2e630d234afa9f02e1ce82c5fd9c4f110f71d1ff973b3569e41d0c2c7b6ffa1347c04eac0c801d10d7f87c0cdad0e5924a8acbf5733749c8adeba571df8165af1fbd2fa2e8f076301979fa02a97100df5039c78a44ce0678ed879387fc138ff8037feba05f4ec4d08487b14e31b38adbfaace11eef61ec9b6596a1ada54677c0852610af83d44f0d40648204af2c349a99ff4043e47c1ee42f539e27eb298a735e851ca2ea902c6da4da762e4c43e57d114a6a961d68d3edd8eb0c2647645a0be2c75df9a99bf02a08d9ab313fdf5dbcaddd463e296265c4fecbe2b666fbc53deaff718ab0026d75342a0f3b13e0952e437a69b502b24d3f5e7b5cafd93161b867434cd5c317c24b2e86a03c04ba08c2f327a2de7885355092b4f6dd1ff65e0f3d476dfe0f4b7e93e16e324f5a6c0c23e7cd985fdafdb36432ddb80ac91a7b619fe7f58f4c075fb94976209ba9662a24f999842efc92d02fbe387a7ac3a1cc66a14126a90c486245316da5cc60b07757376224b1c44e78e8cb93e18271e90032247e4cb2449abdb2b712198b9d3b4ea354a71fbc67a26c7c832073e677b713be3e05d780c1834d7e2c7a1f63b33dfe4e844614fee0cd70a1dce17cdb9888c821f39490258c277dc75e69f730e38d889d3f104bb7b347a50944ecf41595fd2a4970944f9b11d9434da3df6d160c1338e417553c13f376d65c6784d4a147d97cfeea03a119ca7f3fe597f919f48a92ade17c6c80d1963441a43a691ab6d32e563060631552cda1490fc64d9026a03e34b771ef339afd4a32120607c45966c6322e1cfac3e045a3d95e7c2a2cad1a03501ca4915283e823083f3c7417b204967167e624516eb584fd4339039207e3468712047c50f2dc8ecf96f2c7e89781d7a03728d370758d22d4d0a1de0bfb3267605af3410a25764819b351d23e1dd19f1571f59d397f02901ae92ffe794917052077dd98852fba902c6436f9ed19bf999f6742dd9d6741b7243a62826c2341e1d360e618ba61cdc638b0011441636c6ddba861b8337ef8ef12a4100bf8ac5cbb1a1b66e2cc664bd8aea23fc2400e73af56ded404dfcb846354ac7558a0904e92f5b599f2354ba5b06b03cf56fa853e3ad00935764e858e9922cb1de2ea198d8f3797411edec9f4ad7cb616955a16518121f0117e2f409716ca8fd9f42e011130649aef860f86569fea877e7a61b9ce1e2e191288dcb868c78ec1562cb96cfe9b9e14782ff472ce78c30c1a42df39c1801eaf87def442da5a0702e59e83228595ef131d7f5d0965cebd04febbf427d8e6b8c702726683c7c94ea74668ca04c593df98b8b87f14f2b7fd0df885db362894a64972bc26faa355dfb99f2bb700759916ce0ee8c9bdeb6126a707cb0f3552078dabaa781d9498b9704bcfc40007a866af4523d022c37de3cdd9a09953c45cae25c6e8b0245de2c8e22804dfcc12262a57b659a289593009711ec8be9a05f3ecc99e517c0ec2097663925e0e6c9ec8b0648d40b7ec5f7957152497c406f3f0916dbb7e2904db37cd6f20508c3f28ee1cae21c476b4d9c16ac2c22c2655bf7922019467842771cde1391fc49920da1b0a2dcd46518dce3dfa9c48aeb2615e1c30b0b85d9d7587817fce15221f1ff9d9d7c5cc5cf943700acfe5db1131e71368ee3b92db890a627ed82523cda6b623d50f895ba6920b9afea771373e628fe77866e5888518fee43b78b785d68e74acfe68883c620e7e56caa4a3b83e76fdaf0c804886d177830f60fb8f8d521d4ae3166b3f6af0df4d10be20dd69c763ec6681a0a233b0d3299cebe07e58be7b54091ebedd23fcf02e0ac0b9ac19a45414e28191dd41e667b5f579a86baf5429553742a1f2de8fb58734bbc5ff5af7216e6d1d493aa544d07489acdcd694a440f767e95e61e865eac4e694ba7145604443e260101739ab3a92aee504f3f286c7acbbc2ba2356ae91a4d69228cc9399cc74d96c3cc7966336d01b464a8cf26e43fbfe35c0edf51183125b125491e2047a52d02f346486b430ee5a89ebeda98e62e29bc6fb1920babf577ee191cd2701828fc3ff52a668148b4890f760e423eb997cfa8ee41e530117915fd438c64aa77ada5dbe66295b6d9263bcbcdb32ffb1dd461ced97f5c48a7980abc30c0ad758477af7b4cd8fba0434dd7c23df14756b1d08eb8e150705958f4a63db693cbc8cf7f3b14afbf7ff8f3016e755e20af6bd4034944216444420900ca655f1adc4cd0d364793543fd0caf2b6c2ab09125981c185fdf2a635506d9a263d216d9d75513bcf5f2d9cb8d622eaa5e56598273d701e2e2c8afee15521a9a94f01d906cbc23c145b461626dc8f3943cce670280be4469a179516b9c92685e11488c2ba1afbc5c6c705a2226be42111659edee9143ba97cea07cf23cecbf95b66d8ff03e5d200c1fd22b63444809b77b841e1daf4ea198570310851e55e3b0ccbe987a6e33cd51b16d472be9dc55e37c01044054c7d2a6921e55ff1933cf3d5133fb695fcd75718cb547a1ab2edeef319acd482ad65fe02749405cbf85d5d6a556aaf4ca9040479d5230f3b8a568c5cf5e2f0418439d4830c371ca94d5d99db901fe54cdde7a9c10d9d727bc7cf9dcbd2fac41bca2c2bd8e39432f15d7eb3012315930139e97bad4c6b808759c63d6390349e5660fe083bf63c04b11863c50c0053703de2f422ed31d8639a641240e3787f865568c3fe6171256041c8fdaec980d1e039f108746cd8ee844ec7bbfdfe884d421c8589651e8ae9ce7ebc78093841c683308de3ad8bf1d18900a24d0c7248e20c319fc0afb00e80932ddc126fc9ffb75751ab5bc08927e0e1d1c297654580fcd15f8685c5466b61d8edf56218e8237bdb688e1ed6cc140b6d087c6a372d2787992f9750a92a1102c30cdd21c579a344502d2bad510fdfea5a5d6cf35c0bb6ed0d824acbdb267e0666a493f8dfc661a90d49e03675e927fa6d427f8872e4cc11ac5f4acdce460e059dbde41d3600454e39233affb636c971aa3c1ed3f13d4ea2d5f18fe699176f821db8f57811dfd9f396c92dae9ff2c6faa21edd199f2b825496d28c1854ba1b7bd824c4ab6d28711483906fe98c0458b8848bfba63a5a6f08657d697e849f0e6a317342337adfc2b63420df90479eabe9e9604550de4834e00d7266fb250404117dc0c7fc34b66580dd8a64519030dab50ba85d7fe7cfe92b5c0bc6644f9fd152bd1606850235dc0debb4adabcd010a08da06fa164a8ec0f055cb8127abfcab6136fed608d4a0244e007f74a2fba24f0c8705d499368538f6eeda02e90b3ffc6475ed84e03d45103aa64ee795b30161aa7030bb7fa31eefbee6da6efa77d385269f323fdef3f5f4bbf677d2c3d74e9ff7dc97330163282c0755fa7215e0f3bbd6371d89e2f22bed4982890af8b91828d14d1b2b3b4672fae26db2c4c5a936e64b7b5bdb79429a514aa07be0767073964422431b04afa1e88846c9f2344d2c26f3dc42a291cbbcf6113aaa42ea45cfa4112c1157e04b2f01cd8c26f60cca798a0e3c9e7870e5c46356d5386523f74075977909575c032581edefb8e9196123be16463505df41fb98a15cb8f6cc50c49c870f34c3431c30c58869bb7418f1b15d0775373505948a90cc5f21a787a1da0f82e80dc7b20d722371059a21b8814b9814b2980e1e780a80676af031cbd0be0b604f75bfa71c306732a63d139c9beaf9344aaf6734aafa6f67399d071c2e6cf293394bdda54cd41478e9fe91a398ca0edaa9b039c533ac65f825fb0382e18bc635c2554bf6103e04fa461f0e73c4089b81cb272a9144e580a5ebe19d01b58869bbf00f7fe447a06eefd31b02cf1fd4925f92de009e8879e4e3fcdbae1e4e32c8ec6ff0434432232a0f3c74d74e1fda472960bda0cc7531d557559c09d2ad301d259b2a3cd09723d819c0a56c63f06dc621ee32f8225a8fe2d802c8045d57f055066e34850fd9707307239308cdc6b73c24d0faa27a9fe3f826c3024d095e2054095eb4881aa3ff72385f5e81051200a850af5caf4a7d9a700bec358769c758a7d2c3a3558745e587466ce3af9788c3f95a56428c8aa3f95398539ebc48d1456fd694faf9cf8f46a2e61196e3e05dbe34645a3d3336cef4f55b07489e5c143c4e567a0fec529a303cf24ecf2e00af3a39644851fa713aacf290d138e944af58d5121dc8666ce720f67a0ff2c05c731abfea798b3e68d70e4381be148c32f56fd4f3ececd0853271f54d8e253fd4f3aceda601ca5a7930964d9015996b0e808c5b480ed2007557c2fca8068abe823629d1d1e973e3d507e3c1e1f19f43cd18489ef45984a26d4bad1667f08e87864d66d51a7fa6f2d81520e51a9527be3220c60e421c0f00e73d8f6fe449cb5c17cc2465ab725927154eb6601aaab820f9d8d0d1fdc464a18bae816661cc9aaef772990693867ddf8fd917ef545d58d174a6d7cdfe87f8a624aa53a81f287b3118e284d814be3ad808e1b9b719596f7672b8dd339bda4f45cc432ee1be7b97156eafdb50eec7cc2ae5078ff59c6ae66bcff9c710c4278c71859544e23826334bec376e97671f9cea55dba69b83c8daf468def6ad0a841a3068d1a34688ca94ac38546f8b9fc967eb8845376025b5a585a585025cde5bbbb5d4c7fdad3e94da76730280825d58380b052fd6d2892d3155569f10a3acea2212221d0710e55f729350b7faf525d6a41c759d4ab668da8144d598723d40efdaaddb80d2db658e32f846378c0eef0f7ad52fd23b032fee366d1b34d4ba4fe9ba2092b5602a8dddd9f10e88f212be320a03e67d53f85023907e4252d32014f20ff800c85a7743abcd3c37224d37c601b920fdc1c0b1757743c155cc9b9a273e575e5255bde655ede95ee9a6bae79aaba3f833ab8d456cf2e1fcacd2f578b2d320e2b3955c13760d6a6f6a202325030051dd57d42464e1d9fca21c8b8193db1224675a9fbc44a10eaf8aa32dc8a1f1c48e8c2081448b181105bd0f81675a43c6cb355e72673b6264edc600b4de3b4d1f6c3b66d1b154b34a99b1154ea46a714835e447490114ba8a8ba414610d524aeb8c848a276271b422692f9363446a0dca3c5655a3708c7557779cc70d86a715bad568f2975bfc89166a1f0f2f10427df14a0963dc18b3a2e516725491db7ca6ab57a798163e887a93a84789d8ee193e23c29e8c8b9a2e0144a9b5caf9ae5c9c1757f2ee49a493852963de816866564c4fdfd968b59d60c01fc86668dbe9fc80cdc8fa9ad32e2c219cec0a1fa333540aacad1b2b6ef8f59d616368d9000b5c300d4762979d09a26bd65273f87af4e29e564af08cafc92220c755fa6ee0a756fcca8a56d794ccb5fb6bc1fe9e7a358e58ecafdb8a3ca1fb23cb470fbe82ee7e03aa14ab0564ee3fc3df9fe3c6282f2d4c6d5a24a6e7a7d9920f5432797931eb7334ba9f35d9aa235e623d0d55a76daf6a6cebd8f7e2f2dcaff7840b9979aa79146a670146b091cbf8ede03c7af8ea8d762257ab9aa3895ba5e856573d293cef1cbff97fa522f94931e275d30a2f82fff02f395a8a01ed394e6322561d459d1674225f10aca09020116b53b712e1df470da872a470f6703fbc11bdee11348496e13ddc2344bc9f6413ccd163699fc6b051051ea5aa96b450760b5730f74ae5996e3fc1cbe2efd98e0f438af081a82aea120e9b711c41fc95e21031100d1f8c0413c4610a2f1701b069a19df120dfccb05081a414f1d533a6674bc6c508e502f94da46a8230c6cdb54aaae061f5c177e8fc37ef72470dcfdee53bd72a272e00e5c494eea967e705da700dafda84a40f742af46a410877dd277e1b8e10666e55eb6d84040c86ae80581ceef953fdd0cc7f6a993991b05043af6e88112029d3f724cb909cb52727777ffd8b25bb69c5d78f7d35ed116a5dc8898392522ea01c9440bbee930d4ae783892051b0e09082a907e4577e5068b98590e1e33c20557120d729e4487cb87aac764898a23a32e42c78d1409a5ca307e905062c0f243b597dddd5a28a59220ad8ccfd5af66228a7c54dc72dcb3689254a2278ff16f3191b62de428b6f7be8b627b18713fe5844a1f84aa496b9f2838cf49143ede1228fb74518c9eb39e1b9138e5846e4f92a3dc406d296b4d689e8fc26dfbef2538969e9d700cda975228741ec9e559c21934688426138be9b712102e3d47517a965290165dc8070e6979973951e8bc191ff573e00c098e9a92141805870ab419e63ace32b2d3ed3edd402337acae1167492636a67fb433169714b56faaa8fd92c23a528bda3fc39177e4106abfe45999fe242c6971ab2b59bf71258e3373220a57d2ac39f4f333e3e9993d1ed3ccaf91757847a828072cec22637930165a0aaef4073a882b606c11849fa19e193027a69c3dce5a9f45ceeadd619d17163958990b085782d024e80f74105b8041a5f4c399dd7deb2a1d6bb14786b593a5d2acf9d3926749ac65e18c5d95c3710a35913209933d4bb4b1056aa9289d40581e1c839519b92bcc5a9e4160d6b2fc0f0cba45103e1d502a6c907a42e74f7dd56879eda79c2f177256bb68287964a3e48941e551f270b21e67fd6e0c2679244fc85303d1591c040f47b60113c0d8820a1d64e1d3221474943c93c7594d1c00437333a134cbc8f4e915f7374c83440234f247be212ae26694da53ca28797ef8a64888c7590cdb84248fbff87d3c92c7b5ee31d2b3998cbb58326a7fbf64306711c56042ad964a2532d72c0f1b0e80a1916f4348d320b1008d9ce11252741627d40252f988cb41385a23871174a5d8587c609b7616a4e83cb421c4bfa5092630828bc6df86c6f436340b337ab21311dd61423daff33cea3d65a12c9485b2504a3d1ace9dc943dffb063d8f721ec771dc7b23cf7b93171ea560067aa77a210efd53563728043b32d40d22a2a79260ce225152ec23c148ae27f55426c18288d8a91b14821794ba411e18aa24291bc306b84a9f9f045b1ef4f93d10a5ee93ba411eb8a90dceefd0f4a610890dd20d0de9e53634b2f42308c95b011d49301f57651f678d8a7c2abfd3d04b82047356cba8c8592da129f4c25df1342a22c15686df6342c74da8f49b90b34cef3deb2550a8b2dc613271664ee5df78c9eb86eef062c78786ee30691669ca0e0f0946df93d55581e4f1000887acf28332a0dbdda684a01b34c42c6888571d42867a7dafb03d6e061d8ea8578a060d113402a2ca8f52d22c1e513995a7c871a2ee1440423aea4e210232ea4e8bfe00b4795b9331032aa8ab837a25a06508753f366432994e947e474dd4444dd4649a319f442d4ed8c9743a69a628502a13ed8cd1a6580dcfa2999516f9f4fd26b04da63799de14ce194e8b423e647c4b182db3534b18565a8a5aaab414b5d82253c2118102b1acefb531bc3cb8f2a392ec8a4b50f947144efd6e2abfe9b5efeeee3699a8e9d7f46dd24c210575589cca9f1297598b2e562a13ed8ca1b5cbccf5aa9cd3e227826571df092a7fa8825ec5e80ed27f76f77bf970402d723e93a9d0b1349b426940c739eb7a101a5164d036bd062ec1d4821fd411f57ad1beef7b7d399f4e1574d46e382da88b90b36ee8b814394b85670993b111e5fa5e423ccebae1d33dedd340336e9c75237663969ad22c1c3abdd33a63bf9e8587ea887249940b478fc7f0e3e8550a3fa25c1a477fdb94c2f1de95033a4a2b56ea887249591d4b33a902d87243c7592d401ec30f8b81e148891e4ce1fffb5fa069069e5c3ace32c53c86bfa848269bcdb899b34c3e316799743cc6271683c15a2d954a1439ce47a88ea5998fb3e84e0f0e1f9f1b3e402f3e95ff46cc59f4a5b3432356f96fcc9c7522f2187ed9178e1ccf5cc291a2706356f971e838eb14a563f887382a52a7f2e3e871d6c9898ee18f0285d4f3b3f5547e1c30679d703a86df89120e180e586936729594848edfeb7b7d3a2929a8cb4b67a7baf09066dc54fe5491b34adc281c594667ae2ae4acd28ec7f073301aab638aa8f2a79c34ab04857f4a50184a2aa759a598291c79491d51ae7064267544b94e4ed411e572960dfa4b937afed48db398865f44cee2743c86ff9b51d98872398b45564444c38fda41c5602d95887235caf5a598b3be97c7f07f1f7dc52a3f6a891241b5c317543c745455d67460282525ffd64b3b35012954d44dc772005918f5c5a063094ae59295efe52c54928de11f420704951f7544e5ff5e2817ea454dae128e2828cae5acd4f3a36e505c72c09c3a3b1f4f38051d73689faabd5a64eda645e63fb1808e38604d80e018c2116b915b4e27c942df647295acf4aab9bb4d252b1d9a9ebf3433b97a95aaccf2141c4fcf12e6a0a3a24252ac45d21412acc5af332de9eeee36e9b4c8a61d7ece94faa123efc7d26c77ddf4bdb497f622c16e5e4a68371a4e2f4d8f8949ea87763f227d831f9495e12fcdfcfb2875c95a36d35c4fccac682e19e7308b5a9c3217d0ae124e598becf3bd747c16e034b3c76d6c9d3aa25cafcfc794c4f37324d83745651c43bd9ad2332c0e58af62bdea500b3f940c5edb0a50ae1e63abf2733ace5a1a4ea7724fe5d7742abf76e32cee35d35cb368ca7ab59c151aabfce3ced81c6a560db149c4352d32ca857aa15c0b8443565705930f6c23b5197aba8519594a4d683f4966a5fd08008e61fe28801996661cc9b034636969c6d30c41e0a84b69b61fc3ba4fb38d400b6c8c4f8ba79f167d7e83b3bb35ede79c734e4dfbd95af7fc0e4f3e210396c68666a45f0b37344b63238892155e090bdfc2dbd0c43c8b8ec7e4704b2893fe382196a5e3fd3923960716cba2308f7196e561d2d15b18d585507d6140e05e5b959ec1851f399712177ee482a8fe9d0be0d2e8d82a513fd35c11e8b811392bc7fb97729687f7a511542fbd4eb11bafc89b55ffb1e492f54eefc048e12936613940f64470c78f40003c07e6f80d94792e915edc401b9a1d219226a41576844856f88ec4bd10ee01102269d23d27647b00844858f8ed4b7f02c71e8a2ae9bb1c60f7427204e2f7f2f3b7560f8e72b245bfeffbdc3549e5cc2739e776b00d2922a57c51223d1216b46648915ed5e04bf4428bd2b51faa7009d57e93d2938d037f0de20aa8970cd00da8ac0390150210955f0703f0163649547e03301368a82ce32d5f4a29a59452fb4d4a29b590a564c92da594524ac9c9f696cdb29fa594d24acf09fbe69c734e9edf35bbf2e737ad3d27f36e555e3c5187f8dbaba6a8641467a8d2d1345efa3192b341eeb90484b401ae76a8a34527f560e425a95d534313dc15e9d54c8b3efadd554772fefd1c92c7e0a8a38e24af041669d165d5b4b00b47ae250490aa164e40fbd31339f59b4cdda6eff640d58c8f4a3f744ca11ba4f33cbe6102dcef3d05479b4abf4b3fe86b0f44be262bffc6f25b02c2dfa04de5235d59c20d9c710a9e4222a61b7a650a4b21053606990a2c0f7f22db83f4246ff4129cdf69e2115a77ac8cbfccee708dd4039b95f1276521ebd5b865547f5f1e3baeecc8ea40e150fe2dfc5a7429797e6dd4fed3c0e7d7a687beaead6bebe2c63cf8bd7cfcdfcb6bfd7ce3051d57a8c63d08e7a7fee6d48a9dccdddcdcdcccccfdcdddcc3f47d5b6c0051d57a8c659b263fa552f689d7cdfe59f3cf7e74f6dcea94ddec9cc3ba7d4593094f02f8cb781dfa27f580ce9556fde442fb4d861b884f6afaa32ebeb31824200b2dde7ac1a3ac61da659ef72956a5c40fb9dfaafeaebf64e6b36c6495088d4f652cdf8b5c3568b2d38947f83709ad47163fd2e17c63725bca57777bb4b7767e92e775772935b8c562581caba4149b87891d1593728c91156c063c593245148b1018d2c4ab2c507802a83927051a52a28c90d6a573728c98f232163319711b9945d69422bf66b3898e23c3e4ec415c95aef126f621c757d37ff12758a8866b222a2180ca602125ff589543ef723474ba0d6812470c6a6f44aabdecfd7a268b05eb10c5bd45eb3b64ba78a65f1c64c180e9647116a945e399516abd8187c08bb83b52a76c52b4e0d26a4c56a0b2d0f92c76882789a26b37d738ea3f4fbfe1dc88158de2d9fb57ce6b396cf8c701ca5dff72ff2384b1615f1c8221e59c4238b7864118f2ce2a93d775ac75933e631fd1c47e9f7fd8b1c47e9f7fd8b2c4da512c5ffefa3f4d5308ea3f4fbfec5f59b21e87c4d03f9d9675b13354f4fed963d5af3c8da65d194f9ecd4967347b20ff79c316797f6aafdd234041da950ed5113aa131ce9c8241da6c91b38e038ff9cadf0414e1d3dda5ce7b2a50dfead62074375abd88112d5411b1ceea8abdab1e72095a204971f6ae7bcee261dbc928ea85d7bee13b4245675d8aa061c8aa0961dd44ef31ab4b1fd56c18321d8d83e5547df6d9e8324316ac7790d6eefe0e8bbe548261d4ee0061e29d506b70a1e9451475d0d177c4047af87de384b7b399bc9bc9ef93634dc613f92f95a388a30219cf65c87a32854391c8f74807a3dd28ad7d3abe6973e4312c8ebf17a7eaa7c17b2a02317935f838b5529a41149af0985e1d0c87785f2b8aa1a6401e3c256876a79e8b032f2e50760593b700c8d3aaeeceb70e41f3886c39124554656463e88032ab628350ee23f16a645e9bf523471526db8f71b39d2ab0d2a22882a9f77d88966cde841d2ab0d3282a7ca1e9c9dc14e50838af0a92333a9d29bbd9e5e8d303ebd1a45a05e8d3a3c27bdf21f6851470f4a953022ed995e15739b5a8884f2d0b384d702ba81dad34cf7a5526588838754ea4c4bc92ff66a9631247b9e9431a5eb29838b3a2eecf5e44a0fd8bfbd08f2a557fced48781321f2a76c496344b730235da6e9ba2d4160f45c8884f4322801a2e19609dadfccbd2ca69103341bb8340c6e2901f2b5108719ca662468ebafb14c415986db4fb9301bb39f42d36085541b69dbb64d8931a670424c53820b2a94f8e2c5877927e203487c21032e7c6810850b2542bcf830ff5c112eb484cece8b1a6b9a36c416822986ca60662a928c7182103c11c30953d0c8e7aed4a04a9b24624e9060042b8042084fa091ffbd72a12b5654f93a54ad9991147a7245892b3a757c15e745d7edd2045c207104308ae4b48102042e97cbb5debc131238ef8484d3ec34a3fe9c178374d5fd1a14a4a02b2423b20c2c8e3436029f54fad19e2cb9a94f5cf94f6050ffad2c2d3d20e970b4d1cfd5aec53b3901c51cc771a3d1682406ddb162bf7c173ac7ae489f421dc5fdd1a58ee29e2a09f41547ccd3ab516ac61299c008d7ce0c14384a83824b3bc859a19d8b7722e3a3f162d08e86773a7d416dbc7477b74ee517efd4c50d1cccc33c3b2d92661a851bd0d2c6f4dfa872460ab5dba536e9bb90796c6a947e8c3a1cdee90829fcc771fe60f7d36f591ab769dc8121952a61842afcc6f47668a445ffb1870adea90af587f14e6350ff159c058f575cb1c5ee26e9d0ee7e414a22281d0bde490cda42e597dddd70771707b89fc20d1b35687c2e28eceece48c148154825af1b71bb69d37b99894c2311296dd86398e876f8235ce5bedbae03bd761b78842b101b1a98c3901b89c491482426851c06b7c33e7f518bdd7dc4eee85ff008ad7d829501bb766937b4d13d697f9668b0c100f9dadbd42e24850cf070431b0cf0d0a6763eb74dfe0c18853675d3293141fb97db7e8d82251eca4d246d786e40b87859fcb331cd51f64b2d085994bcc861f65153c35730333fe18a41f1648826342104144ce8e902c70339574c1d3c0943f6aa81e8eeeeeeee360d11e1a47d8c5c3572644367232d4ae620bc333e6ae44c0d0f3832d8f6f6f6f636cb2f8652f297736e976330860bc03ab7ed721b53772fc92a96c9967ea0fd1bd2165b4a29718e68f721c85e09611a7a6261c4173b14613e4a0d2fd28ff2c6ccdbbcbced76bb942870675f1eeceeee72bafb10df0412a43bfd7eafd99d69b10668553594525a33e3eea3a6c67be0fe2efd490958a6fca59c73ce39e7e49d3c997925ff76483c6102952c4a5ef8173e2a5d1edbeda3a6a6b1e86efa847c75fbb7fead7ffbc974dfca04114239ca05a1dff77d94f338cea31c1df2c924e03c79f283275b136e88585e5e5e5e5ee6267e8841d1cc2e19e87db07bb3e4e620bd6a6666de99efffff6ba6a9ef5b1eb2bcbcbcbcbcbcdcbc7981d3cc5c237fa6455e07552df2d73c33d38de1afe9199ef151c3d267bc86590b3ac34238292288178e0efb40bab6cce8105734b1457b8f5aeeeeeeeeee3ea5ea05f776efe67f18ca51ee69abd56a791c9594bd9f855a50b8dc352a4f8038af25d4f2e9f1bd7c9fcf0fd7ea4139cab5e8f77d1fe53c8ef3284767a6d0718544f92d903646a360b0a3237c00830511e2c2b1a14a4cb633253016f2f130ff47a030d74e6c880d7c937343b70b2706f3f1301f4448d3d4279d7e354362b1582c168b41b1c3dd74aa59fe301de3955eba074e4d5ad023a7ea05958f2a7454a98af0a5e1385c427ba7d9463646a39a1a785022e4a9c08a64564672aa1a08a6e1b6c51e2db6d6f287f9ee9ae94e3fe71ed0b1d5da98f74bfa861346abd5a3c8111f3f0db4b125da2adadc06e2f7612847b9a7ad56ab45398fe33cca515108cabf2bd4eaa782c9149869e8c98e94ad094d38e9d979128669e8092a252f9e907245134fbe60323ae2891d212054b93901142d3f4f74cfec9e935f0be79cb4c539d3e29c539bdad4e66b734e6d6adb9c731e319f24e990789223a79452cec84d6e729352f55e060b883a249ef087ebdfeeeecfeefeeececbccfbf222bc9e18c1ca11a46c4d6842cae5d12b99bac28d1993c3ba31f3bb30f4153b0a2c6b3709be03334ef3cd168eb4b99c3aebb2b49f4f816569e14ad13e1c6912ea6477f9334690d45054e7fb0863613b54e7bb9c36ac99e00b2760c05e4fcccd46efb6716f5f7cd10244ab1868d60dc2d141f59e572c4bfb17afc5495bda905f8d1098976f6d14517a4f3f0209a0150c5581bd9eec8b310f4e186a776fccfc2965fceda2cee7b0b532d307b477b045f711dc7d76cf7c3d7bf6ec4e7d5f4ba1fca32beaa8fa269c74dc7587bb32ceadb722ebc043edd7ba72bd6296e9353f3554e7a8aaf33d2a75d23a67b7d3843af6f8eadc715247983a7936f70efa0b2aee5e74b78f4fcafe9772ca4e49e9352d7a108e17755449e9328aa9752901d455531d3327c769fb05ed67ceeb95fc2278cd9ae9a2eebf2c8fad3ed362d7ccd4a86ae6a435333e5aec059af151e372a6a685aa42c79de9a732e6a9f7ba3befeeee6e7f266a7f8e39e8ddddfdcccccccc548662b0285080bac4549888594863e630aa100d0dc1a24071cfbdbdbdbd477777bb6f5cd83d2d76f338218256f77092e5c1b5bffbb7f6debcbd9df0ee6ea9350eced7dccd0e7bf6ecd93fc3eee953fae7dddddd3d322aa76bbda043fc9785428479f9a82757a503e625e7a4e84b226d3ec75a64a2218ec91813f56a81cce45729221a9243315894ee2a553e15a229b06dcf06b406745c20ef878e0bd4a345f9cb835425bfb378a8c8fb8ed9c3eee1a122a063ab7b96c77c2d7ebeec39b9973f12829a5ccb63d2f0632788aa5b62578d283734b8a420a03d6b2bbde2a19063f2a31bf8d1ede7b66d8cfced3b6d4bd16d4efacd578bb2799a474a19abd25d740b7e752cea10e96fafeaba173b50d5fd2876d2f41c487f0476cf71af957e8c664741ee4da00e5cc6ecba8e9a3a2a73dcebbca0adfd96106053199ca51f2520f3bbd0a632f8a613d5e8c923e275de2c71bfbb9add73251a48b59b47bc1b469c94524a29c594b879090a1e90f0c02e1e5a74d78c5d48d8257590cc5e487a60201867a683a457f2715e3d2099b112234572a8d16d417940329bf1309bcd66331e66b3928f37a4c8d7001b22fa76612f88508640c715fa84a6fc90f80253c309a95ea01ce554544848a886721ec77994a32d554c0aad0bd81f260811234f658b7ab4e8dab65afbfcad1e0b45156512818e0b1bbfeec2840c895454303a82ec7348977eb4f5c160b0201f4d519afae837d3229a5c8541a7edb2aab3e48ae4c046fa8bb468e43b349203bfeacbc87f52ce2967bb86b4386d1059facbb5524f9ad75da14578e815cb279243afa415090e096da0f1b9676081ec6abe9c21ebf0abc51c2974dc583764ce90488b6cc4caf81321d2e212e8c846bc7c748c7f143662c609e19007ac3f9015816c339b27ba9f4e45720077982e35a0e3576d58627b676d6111ad48d4c122dda22d2aa2029a01026af929926ec2a223da5625afd3b4dfffb6ff5e39e93f12f84f2285fff2b52693bec1d1cb92f755d75e3e99333dd2cbd20f1906a9a9a103a046a8248db91439ea10cd00000000d315000028100a854362b15018c661aced0114800f73984474521d8a835912c3389053c818630010222000024220186d25001fee80a5d7c25b0a5ba100f1fb101f9621652355a9125621279bc3e1b5d7eabe7a7199a4187d2cb07ec04d320e6e078df07a0e8437a51150f6a577f4ef021c98dc5e44350fe3921dbdb3971f9fc68ded0e58c8e3a7d3e37c857159fb51aba267cde53d75881ff3a5c5b405e887324b48cf78f6aebd04ac33cd6c7ac32a31e81eff465620d3cbd9d7ed385f8cf00ab1056c6741ad8d03c7bdb5e7a6b527e381c4b5ee605554d4cf2f1a3c1e723b7f3302e1fcd01365099db73b0f44c350b7fdf214b600ac057f0d0625b8210f68ea71f1e3ae460720149f8c54363aa7e73e601e5925ea19d048dd35c54d6264b558e2f6e0d04f8154f79773a43561a64313ee9de097e3368efd5a4291a7688ea2a3a436af8604f99c221b147b9825511b53ca53664cad17609914a2d95d7692ed5fbb736b35fa2b9fa12d440c077986ec67050c0e29124a87ca7e080bbd8a678b8f15a82f7b4569c6638b34525021a0fc5739c9b22ba5314af374d8602bc6c61f8d2689a87f3581767105ca7f350230551ae970f921ac1f4a5f16300534014b72fd7994544203418492e7cd0289f70a36b0483fb118ed34b9ad3818cddd4562c2835c2ca7356c1616be9caf0c6f0c92858c1bdadde9e031ed348f33033028f4d51e30bbdf25d7b41b1436e48f334a7e895db50245050910cd69ed6c2f55f355eb460bf26d5a9dae125b02f6855153042b4b1da6ac0c0ce87c7bef5fe63a8932ddf33305512cc3e504bcc2747d2db82073ac72d823264354d09135637d487ef88703dc82866b5b926bc69a463435cb403543d41d645868ef00335b6600ccaf2145ebb3b5226444b1711c8bd2539905ba28a693ceaf2fbcd88d7aaf755933ec09460d476e8d16fed9998be95fd51a53e01881841e4e45a332f05f85daee7d18357ba90374e406dc4eb8ee9d5cb10dad64b66c98244238ad30199b40ca49a4537fe71346014896008d8e77c3cd213f052c6f3345ed0a049a088a1ccc58c2d98ec5d458578bea94463795a2f71c0f71c1f4422bb610d73f5e3b7fb82e973d061545dc2104b274bed03adf9830f8c642a6b6274ec122663e13045da69dab68db600e0a2838872de2e066cdcc06bcc29284457f0d00366b47a852d89d254bc49c57b7fa019de0215ead108f39efe96a6c6ce05ae0bc7945318d0bd4f7fb1b0c8d546f173698d540001760155eea4dc663d8ae759fdecfee7b1d61b64205ca9be3660c239680f5a4ad5d3d754cb67501d4def616f20c5c46db45f2e888afee92184e2e709aeeb404a778d8958743f63081ba08070341d1bab6e70d1f01088d744551f769903da1c9e82ad8ba6be7ddd02eefe23e87b8c80a07f88453fbdc021ace156dfd5068ca199217e527b27a066034842ad5f4ca8465db46a81d240a82defee8e9a80c0bd59bd1781f50840cfb31fc92983aa31254fc68aaaed7854f80bb2807a1e3f46c5518f37391c40a90e000dcf42e6bfafa3deb7fddb9971091f2cdcfdad2b6cc66bb01b920a26db546c17d98e7624a3c402cea3a0fa95ddf75efb17df73f9d8e59b3b8d48b16c3a54f67a8075d762def783c55b09ac4263d0b872500c0ffe3eefd0cd4fcd522e6bf957c2a07a5fe632a871015eeb93530232e5d6a439df30d91d7d654a073e65698dcfd26e473554e72e265289c682a7adb49da067939d0661ddf6c5e9679c8541dec142e71c29d232b14a44ef1a718c498c84f62ea75ec0ad8bb86468a740c3ad29dfdee7be095befdc1914104088c590f336d176c8c6c23b2f340d91fee78a06067d63608402d9af5c01b042e79b198e451f3fc20f042f4522f8b1e764c350827989e454e1829bcfeb692487252b5cf7ed62ac9e9fce2a017d53cac6d56c009a731382fe8ce90e00ae99f2d86c79a59936aabc049b576d19dd81470ef3bbf015141b93f1c6cbb9f54716c6c8b6328ea58dcc9473e7a16b187f69a3dccc03262a43e48eb2e8b93929798af24b21ac1f3233efc5b2eca6672a84250f2a942aa46a02773dac49d370e9fd0014b94a95e9b7a10cdc470bdec92a349f0cc1d05c86ead661e141c7af325630888d9043a90d0e2e9e4e4599aff3f72b02cc3a0b2a669f4f20c687bca3752d8e80447ebefe55e99ca319977ca20c8633738589e116d98514446be6ed5ec4e74bcadba699c9614f211aaa35221206f1fcbffef985e31665999a40442f091f0ff70a67776d297e209419a98a77c04a7d06553e213bc2627c22e5d14a9b88144c0bc4817eb3d5e5e34832f88f9c4f4c11d579ca8144f8e17cb057fa3eefa0ad98dfb1ca201610749e120b79f7b1a25c3a6b46618df07e47705301a5af0aa01de279446890ff8a6df0b1c5a6a3774014c6074b716b4faf7eeff8f1b4aa0bc05b90280dc0d7d1d3af66e2b469bde79159f044549111d3d016a63bca4c2d31ef03b5a7773c337303648d07806434a86cb6f372b5949525ce36ad9adaba80d64420d5ad6581144e6b38b6447c859789cb6237c4a962fd86d2587627b0c4c447439de47bc31aef47430a3ec8c79c7ecefdf93ede260134475451003a415330a03687790a6dc5e70ddc249a82f5bd7bd7c187fb7027fbd50e74de18c27415b8f3685c27bdf24dedd606f6b8a8e58cc29cda75fd319812567f4b4080eee8a646753ceba46e85e03d11be11760504c9546dac9e2b7318bc25db543375d0234eac2a4703644673324a37cc00db4fb68843d2fd89ca80b2c3cbd1ffd008dcc5fd6d0d16482732572808f2b726a5ebda1f19a16dfc78da1d3a845fdf108ee810d23ed792793713acb5edd23f596a2949a095e4e181adcc155b05ad52eeffda92eea7872a6f706c1542fdf413970b354d321f1834d2828fb8ba81276badb40ab24962d80556d020c52516355afb037ceb000e855cf3c4bb03e26d9968212f4214a28415104e311670b135694049501a45c9a9807cab8bab6e4cc60f351c500e2a5677d67320b15c149179808aa8dd52d7eea642e439b9012b26d4bb0717507629d2f6cc85cd191b372a7bf7164ce4a7acc8ab99495dda52da3442765c61fb12b6ce8acfc2ead62fb84deaaeeae06dc9990043d161fe33157e6d1c0642e34f46cf2668c7456dad4b4610c281a39ca3d0da5324eecef3867b528b6c0f5edc79e9360ba2bbc9985b5133f0b75c3d58c5895042f007c07f71cc4195f3600155fbefc0a4010310cebfec2b115d567b96e12002b5711b071c7d0dbdc85667e1d3750371e31130765f0374fa9f904bc11a96e140cabd4aa01e8f8938018cdb5aa6de5a50e10f79a8e27e7c63605172286f54086ac34fe15a4a8995eac913f10f198f4b00313865300371ab680006a7e3f9bdbdb2bbd1378cfc7d5fb5bbca3b3ba00ad8ae794259ceaaa04d606ae85100f98fd0f107423f490cba3215680322318cdb00ac7e2a823110cca8e06e339fc1a16b52be9e3238f87056541d6df2999479b29dc5532ab1ad43e23b62b806540da01e2fe9763db7b744c049601c50e820ce24c213884cc9d8a658820d0e7e3083aeba100f904207d49833f7438ef811fc1fb9bcbe8c083817643ed566756be9e68b3d24ba080c5d56554e267c6432ab074d736c36a6a279c8a9d1f9dc7863d1fe67dc24fb11c2589fae922fbe91de9be1c2a2a63e4eacf7bb92876d16191c01f1bdad73714051f515ab161d0ffbd5417d86f55b5c31a3a55262e24c9854ed51c5de2aabdc770afb1d6e0ca7d62f4b0342602bb78db171cb835101df92d1fd339a952e417b8b3c1aee7cb00552f3b6258f7cbea2508fbf231525677b30de3b16b645b29413ead75316e6d0cba5b5d28dcdb80b99f69ee56d7f5bad00cdcf644876ff09766de3a22c08663d4363306243294b32ce7082da0b8a88b5b71a15ab2491f6e802bd57a24af493f94f5e454bad2fa9eb24cdb9c4640b224fe7763842c258fbb05c79a43d15766ecfe9ec04ac7bf7edaecd6c4373c772a32b08aaf4034dad184b78e2b8ac7eeb874a708c3864085002e2f94ee86e763ef520f5b391b3da71fff229875e0bdfe72a9ed4245fbb2b426d79a5c4c5534c1fd4511d05441519f1992e31ce727f5e3539b3b23d0c2a607d3b8c5aa2e574311def6bbf6d303e4fb2655c98b35531823c19df3256db2cf7d0316ffc754fbe468d83719044f94193887a8535fbc54020a6f2db3a0d1364c71b46b9a78f8863a51f9ef2d49bba39a1059c2e95e5e27a2d208eb903e910027eff41ef7d8fe9b98f435d1903862b7de77c72f16aedc56baed7de05c75e118c4211a3ec0b0e727a2b87ada61886d805e158d72ff753fe9bbd403ea3b44457fd116e9b8f8a454b4cbcccdb34fdfa9394d1447ac72d18e5c4818dc434189b5edefaece02f20f0fd0fc30697281c002007354464775abba5c0603d485e7a2c0c209a1cb8fe179078524e6e1b6a753a3a8f80a41b7710863a49b5c1f9f230c12b6e3edd1ed788dc75b1cef09de18980e2bb283d19b61c68543f19115a78f6f0ddcd8841ed564750355102c588f890fb9b14e469ee2df78517a0ad90c36e9ae14cfad777d428e6318021551b4a50f230d01e255d6c674f7797c46f3b756448d63f78b8fd6d0cd099461d729e61547d723833adcbc919c2a19f844c685b51519ed2079ddedfc5132359092cebd3471fb9e6f49693b800e43a60c6062d3757595d19e40f1e5d3a99f592c81b9c52a3134a8ee7bb6e4b1b85c46316a1021f00b6ad654073148966f56e1014cc09f28abe0d7d27fb8aaa347a1d833aaaf4e63306fd9614b7a9995de6c300efb0ab7e4d412900a650216438f1f9d6b86632618b244af5e394bbe440ad982c5d735fa3856df462c8951f1f1019b1f561e01d43f60db3c035e185d8bf018676316fb7adc528de76b63dcda99e3335ede447bfcb0a9490ca17fb20284cc1d195c3599206beafcd5445424f2246ac3eb18f2c034244fd688b6be20d220e3325d5a3c6659122dd568c578dc1fbe663da9f446b86b88056125f715e1d6baecc61402f22b035028c3402d01b3d3b8ab774b62019d83c7ebcbd548d50845710dded445336623f10f1477ebabe426de175cc75528786dc06fdb647dc5f3a769ae734245dfe833a161ddf77d4d8196f1ae2d79b9572c0687332b6b949e4ef259361b18da695c01eae28a1ead479105491ec10b75f004e90d84a8d1c8491e60897a85cf8559ad37e1e928da00f7574138680fe2233d5dcb320d47993d941b27635629521c9345956297be0d15327f37969ba9a8098a32a5322aa4c9dd8a384d85dd18dcfcf7980ff8622d70994765730c134b746f27562f5f3e19e4b0f55e48b5f285289b109ab2a9b88476602487a7a4fcd1a384044aab5c3f6803a6deb733b0d91ea955adf597e0b6a3aed675a00713f9bec25659966782e639029a49a0cd909b19f7a07c6004383ee1efc8a912230dea80df30b4adc8ad170cf4abcada267c6ad696f0049471930b43ef6f6cf7629941fe54be004b81ad820c3c039ed0fe2285af7d05f6f3456d459f2e1bd5eb17e44cf3faaee14c9a4b11de5fe49bfaf6267296070306737d7640f82f7624edc1b1208a0852a9db2f56e980150edc0b72c2ef4be89d2570c2faa6ca6514d85870b08de96256f8312875c6d3d4170e6b45cc11850b055c638eda8706c911e0bc409af4fb7dc6eee0f31154817fab341a22715168f3f0591b68ab1e7369a465e1c4ccf369043b8214664f40c05e9ae63c41730b73a1481114e4b1c0c45679a31461d758bfc73027b01a7db3d7046c6b0f95e19aa077eab986d331386d03240f0de3c85854ff256a81857c9f12a0bb9f12d926f17ec2956aa915d15a07b4bff2678a635012b038ca982b6c912dc02809ab0aba9775b7c48ece9a11c94470b75a77ab5b22af80ff384647a10e00f91a92f0c8cf8e8306440688ddbc722981ac0f1f5cb3dcc6bdf42b6eb8a30112263790a23aff3241027e9a05423fc77bc574402ee2de2698c28afac48a3bea9e722fea2def7b3b8e462363bb46e05d113f94c4060ceb7ad3004147a144db937642a0373053477a903944b54bb58691e7b9e7c32ded63843e1412cec2eb88b6d1cadf4c4f229bd5452b6941bd2502ead270419340248e7f57d20cc1f539a298cea9a4f00a27e1219967326fe44c19da2606c4617e2cf5e519f474658deba1e7eeb7bdd2e4b2eb46e82ee5e19f2b256c39f299c13de02ca4951ec3b2a5dd6c6ff88cfc9eb9979d048c437fc9804a6ddf82ed40c618a279deb0ee11c0ddba86fe8d5d1f2a57fdc9eb23e546909a63a14d5b19168d0ee7583ccf2decf0385c59d44b8402c83f12d00c18b4bbf9817697e90e97d0f312a76a11884d9928326bb6a14606c9c4f096ce13817b6f2c5e97eace01c821ed1df18f41d1411422a1b681a7c19856dcc5f77178088ce093c74837330363b241a0f14216fe2ad07a233e7614efba0781d23885768a332041b0c123388b565303fd664adea2b3d302b6fdf046ba95350d8ff0a1ef52a74c1a8d13377184cf573d8b57988490c7764ea41e57f1e9442c25a58f0d211d0d2a25cae7b04de495a179e021fb200f287a0e3504a46482a6d717f29536be3055188bad162e56f02061698f928998af96ad789a380e88becb16337a25e9362ce6f86c6eb92bafdda1d7d2eaf88020a169fa0a90331f78f7c9c38494c2647741a322919c299be9c604fca52280090935d00a5641fabf065a88ead9864b8ac2678f67cf28a076967e736cf94d647e757f9834bd67257ef86eea586f9a4241be42c270859d3d558da59c53fc97f2d5a66421de601175a03f78a54e7878d16a9514b455e2ad81fcbea42c5b001a49874ea5c4d5f9dc3925e6511ffd3422ec8360543456d632beaf04730e602f2ac0841739059e0033d89291a9eff7a659f9b85909cf77e7956b08d07acaf4954465bb2fd762ebc03694689f96272a272e28b526c9ea50718fcf9731aa982cda8cd6b17ae821064132cb405a6e7cb5b59f3ad3215168bde83d06b3172c3c023bda690eeac7dc689dc9f12747aea35caa72a5128b51c290de7a446da684576396fa171be981b1ef7fff836ab8b3fa197144a1f8896cd6478185a3d52c4895522af17eb80d436f1a458070219e5b48cffc7f945e72c12d7c914f5dee3a98393f8e2c95f8ce9143bee38b09f1c3260038622b4a00789f803995951fad540675a6dfaaaae300189a45d9a74a98008ec21e5f349576a582fc2c6cfcaa983dc88b5b87f15b55095e8bb7abe2a32a71c498ec1553034249cff5997f743e81a7aab02a3355f5a1ffac74c54e8d5a784ab49f52b713cc91b782304cc0efdae2767553f7c7cb16ea9c42811491f512935f4e67b6382a8bf794cfc3e244d7884cb32ff1b21c441c4835c43b08c56b6901e2860e3eccf80c78587c756ca19a429ebf5748d8b00f2fabe2029660c3a015b4c8adb22263cdc35b0ce970a58253de36d55b5daaf90cfd7057a0e942dd14a897c83325bd2138fca8e513a5ee5bd595c11eebae8b9363bc035f4315320b2fe2e059f0987dda4c8d0b3ea20afacd9fd2ef4373992986d90bdda56dfd9a0f532e1bd887dd9172deb0c2f49cc85b68907d97e59f3d0ff3485ba23cb20e11d259698b9246de19efa666d95598a2a344e8d37fae14b38e04a8d865e58728d562097671f33ce7125e86728dbd6ec57650256fc41c83ab7d99078b6074dcecb201c015d4cf6f6b721419df6291dc3fc9ff3c2d09df93349afc6467302ea4975692b6f291921336240c8ff96098f470196afc3cbf962094d4a3dd890766b075fb7e6a2110f57bb39cab0d34354c043642b64fc31f8750c94278cb6925bce9bc1d5008a60d41b3b510104a8671a5c675847810b5a3032049577263d58dadae8dab5cbd7f35b0c7f3879f0329818fed3634aedd0541b5c82e488f0771c44f83d25bbf33d617d779569bef0b8296e07c7b4fad7904c589fc0bbd93da50b23a0be6672b3db34b9a47df940bd879fdd6cd6f5e60a315dbf8018d6b9d3fab69c9f706e88cbc4cb908aa8aa23f54135c38ec98344c2f70f8177c9c3efded3ae73cc5e067b735057564d3777d781f0244a5402670284aa9347e62313c883d891685554b530081199d458edbd46acc06349c67e18c4e9b4e4720a5fca84b6c8d6244aec920ac2ba22b92dc6ab737f0b00fa383eea711a3fa2429b072983884ad857d785b499c1ef33628b9d3c0b5a86ef0db5878bb15ba5a3063553128b79d349b7d025bad02ea3508e21d9c387b83680b87410e9ae4224b7ce5d04599afa6b06e95d6b1a77817530e22a353c16962c3779c26d8e1350b8d569f9d72d3fc4076ec8bce2a1f19801cea17dee3b7662730b37ea8d4cf68e27cf6070a897285beec2d6193ab12c08085eb4a0418b1d81d3476e9322a08e83b22994ff20ffffe9d30d70806a24c04cf256627c537d975c51a03122d124b3951808f397a95567652ee9b5e1e08c63b7a7bb93079f797a042b84a1572f4df53633f8f2e01c588df82ef209f58374d30ad1cbc3ca5b22d5f10847f4fc924eae1c2c24d57a47aeef86479354fa167906577236ee827f3ed5211093b51f06126d594513c8ab24f8d22a29caf0d3ec37b87ef3fe47e13b8718a79717cd6bfaa2fcfbc40c602f5fd67a550140173bf00861126cb2a0b7124429196686524cf58568b48ce3862ff002ffcd435fa6f39444bb1edcb5e31925c4313cacc34396fa99bca7602273d418d1026b06aecd0a5cc8b9b988e3917891edebdfc647dda6b5a017a882c53de56c9ac3dea936eac1a24f128a996b0dfae2c89e6fbb0fb85e8ca7b9e3084c227709f4095228e9cee5716149edad44036b8e0a1c04119cd2df181ee030598a102958d21147603892616c84428fc010c108882a2abf8a3de287c71398480321e4e1b0d991dea856862e149eb5a2483ffb9ee7318afce2c74ac7479f2698b64923dea05ca6aa57691facdd60469cd2e7a062be60009d345c7c40dfdbbb9e49518c745bf5c1ecf21bd9bf8a329808b7121401c725de7d5faeb305442fd4217986dc0571dd6008166e7b282a67ef3a5d1d30d6e77ef249064ee245929dd9313ac10ba9eb918792e23906fbeda7e80555394943d77aff1cf97da82b62e914232209545180d4c9fd8cbef2d3ea96c06bc2610941543ff9c170c09a0ef4c702d1adca1bd6c77c65f17a62c325e1b1196b636c4cde1c98ee36486b3058628d2d44920dec0c91e88b870dd5487d22d969002c558c4098ff595b35565ee194edec97248c1d906effb7123743dd7a715f9607d243a5979b91cbcd30a80701a8d8291aa53188ff2f052009967797a21478509eb15285ce35e04fd047d584419c97006054d22fed7878046c24527530de23b26f6ffa1c04e8c88c1ecc7bab4315a134c8f441adcc119ef3cc8871234369ac2e47e2b23e02794ea10883e7d813f20542349b86584e07f266b1db0bc44b1c500e4c1c05afa19ebfea531ccdf242d80c06f85161225120a4a5d14a19506dfa32387383dc303e31e6c1b84a51befb0584bc221eb2aa4d45982bcd172bc874b7836d95a63809d56192e7c48297bd1df78e6a0315b37fc51fc91b38e1aa5de3d754ab70685391441201c78abd15c06de0886525985e63cdf1055f4bc5816c591efeec915244a0dff30f75666464b237024ea877e72b62c29016b1ff60481d6353d65911e842806b634588872a8350d22a1c20710ee992b3022f0d6825309dd015f7ab07b3aa03f305bfde98b6611c1df9d67ff515cfb27080e8a03df492de04a69b17c201d10b6cc11d53304c58755290c5993b1eb149c687d5cea53c5ed591ab444ac53a3401decda2ac563aa9b8026529de38c5120f818feefb36727bafcd775675ae95169998146419b1e5a7a12e570f26c142dda41f9159d3197c42cc0c8f96a36cc6f9dd4a465b1cc7612135fb14207d5242f1bd85e2ce8d9e86dfec412aeab61d76ad7f443ba5c6acd6676d6f1929f8db7a874dab6c672ee5488a5dd45950e4e54cfbe4ec3fcd5d523470c2ba20477ee445942599e0119d190006e6f983e454593f1eb1642333ed0e0d94f7bc2339be2128beb3bd90282b8f3a00b5e015180ed1763e8a73256806291e2049e59a81d6c953d3e904e130011e6cff4a8e9683d29fa49d2dab3af1eb92ec3e36e6ce99f2c1a0b452201e7ac12e5a704d45d77b2fcf5ddd80c1dd7fa651404a3837c91e72ed012524535587d841050a2734ab37054c9b7989b49f49b19917f978dd10c022f4b80e948d54a138ce72bafa6465f11ac49435e3b88ba0a78e0ade86ce115e04140f9f2a700f68c7900cf10c33b0ebad80a32dc04d00e0ca4b88d2bb60c860dba1fe9c2d5424d652e5c5b4ecabaeb3ea9cbd2d0887d94322ff8845e0861f8bf5812662111631d2c273ba3b51ae2cbea7296a06ce7eb94117492d2d4bdbd50c112f3456698deeca880ea5514d7e33f121090683a3b0ce707dc22a7a44c76fcc9cb738a7941a5b8dac9ecd2e3becfdf51e7e223b8afd6e2847af6c10ea770523fdeeedca47eb39e28f04bb170f6bcd3f4335c2279ce51a92524abc944973f1de699e48c94238c4338695aa717fe3ace18e0f7690ddc8006e7998771309cc1712ea47fc3a445f3997dc9af03777496c6a2a74d77386e654c1a37fd8d8c97222a71673173c0b67e9c36cb3a973e8f1497203d2fa43e796fd2b9888fd2705039edbf858d528f149472e2187216b8138727a52c6c5e0f16f4aeed7636b36fae2f3df506b3851826a4df8a9d465fb9f6a542ffc03b2ecee7de10ac6355dd6fb728fc89a7148be1b94670e69a95293fcd181cb2fe781116dbbdbeb1636be614b0fd9491472caa8f20a3af4e07548047caa22b256a54af236f07fbe26e737dd1674f29f80f3b96ce6448871e1bab2744fe3e670af361083a12d0ff1c78d6e67a00403564e0c7c68e2182638e13c306bd5a1bf456e34352f32de9dd47d3b6bc19bb0ec655753dbf895d3a17680631ae7e2caf82a347006776940d2128429757630cd734be20255326c4522e770f83ea0daa6037e373b33e15cb3d4c11d98c4438f2a635f13cf2cec068b6c71a67ae4c9372f86eeb51fec5870263c07dfcb3b486a8c581a9f917dd576427947be01c0ef562585b6a15bae64f763eca9c92e57b63afe4e838f9d035bb83028301fda291c2a019fed10d710fcd5e966a10482dad2a302215af09878a281a1e5c6117c51709f3a3d4599e565b643357e89b28b02c5ca71ecf54c04b929c2665c8c6220531e86efd79b1f4c29dab406ab5608422428cc4d064a8bb4888ecb2b9ce7129d826a7ef122afefc1ab3480987809eb31af540f5dd837c8c78d1ebe32bde5b7e201f61c773db20193c91dff6003b1c038c917c227bea25c7fd1fe2065ca076fb274cc608cbe43f708310a7f9f003477c7b10a293f5faca905b21cfece40bbd8b9f955ed10ff4dc7227bfb765beb1506ee646bc454ab16f8f970c62c5144be8b7032870380ca0e548260087e73700f09408239600e0b42021cb0ae8d5c6d3dac783c10dd7e39134ebfeadf86220b517fa1bb1187db2787b86d81b581cc2e1e0cc5bd3360c57a5e0f61670900b0f66765f44530b41b4d72adf7ccccf1592006aea9a25a3de85d9bd7cce63a1f19cdba7944e0c01e0001d3c873469a4ca182e4885d8c117203c2875b41c8e8c9d3fed5c697628b13c6c6b02acd936498670914e587f2d78256c66c83fad7b4e0c20c6dab604aab460edd511da95d629b76f2dd932602ebfff621f445eee8d250b6aed882cb94996d0af4d574b054b82cbbce6651dd010a07020d92a4ba2f352b6825e96fcc607894d2c04a4e4f752246e341c1716653a0155d030405cfddb7b3fd17383e4e602a90e9823350cfaeb56146c27cb415f15729b39bfdca3f6b44eeb1ae71747314ea0d35e328fb8d080532dc126d4daa0dbd4a31fc1810363ca9d0afe2e1c8971f2ab247d964ef9e05fed3af793ff603b351502b03a2375153b1ac320e154623d7e78b921c6b179b9aa6e730bdd72752ddeb64a29db459fd7cc4bd04dcf7f938d503968d35f211506efb591a6b8794f80e744b2a3e299dc7401ea574cd9b67a07106636f6051038d244ee652f4d59485f6c8ffc8edd2cc5941a697b9ed8d5a2c82ba020daa136cc787dcc9169ee175a0bb1bf730bdae6f07d8580726ccec44b9539dc484af5ee97e8f9925d135c4491f06d5b6224c545e2d77b96838afd19a09ca2697384fe1e2d03b5e89b6dd2f1f6d4b8203b7339d5c10ef9445560f8a8825b5bb40cb750f6ca775eff46d967fc84906072f7a27fb4bec1ca9d84562672c7ba5e8a2d9a4662c359fe6e60200d22bb5e21c512b4c19489a282cd61669d39b00316183ed020f877074080a373dd3808c21115765dc14f4b8fd7b79de1dd60e7a74192f68081a6ee97d8c3a11bcee0862b412c812f02ffc07a3d88a9070af85d4038eb6a7196e02cdd7725c03f6411d3fe1c814e085f5bd99e863770d28a3288e479cb6e855ba6e186e8894fdb2d03cd09db1a8d2615b4b50141b82c817ccd48e43756fcb417094bd980d094323cf4e3ca8212f9da7120a0ce9f7320e4df6a32c3c4902c576c5286424917d591704031d2cc695830fba82bedea7119ede93ab4fae56b2f19928034c4233227510016fe0f19eb366c8d5727330dbc0712a931c530d120211876ab6af5977ed3105140ae4972ba41b9502bb4e4074854d3292a45042730f8c910f38b0a1efbbb0699001826eafd1fe5c926acf3375f3eda2f4207c2a7f8d142c51b424b1240c888d810830a379091d967672186d40380176290650490418543088693f72eeb3ee237f452807a1c7f8696901beb2d78d222fcc322fc539ddc5939f4d5af4b292e72c9110007b7e180577110e61a89d569ad4ec57b380771df5637113c2048b9a43b59c3ba59651dfb049a3628eece6d5517a4655745242863aea02ca846e69830e68030942f30a7c4e876c18466c81b1f8edafb381a9102af911087f2eb3f46a74d0474ac29f9a3c00c32301074515ad0c325dbeada73200eabe72326a9293412f5663db2e0e3d5e2cd115df864bc16d5f724b88a7ec8a056ea02675559660cea558b477724ba80bf4ca98f1ea6ec9133fe3065c8aeae8b5a71119656b3945c905adb076adc1a88e2fcf4fa1757a6f496b7424b9a2e152498489d3e455f740e87695b59c2a8211659c088d312a2cb9c82a48faacadf3d2041c8a12a7a5c36eacf1222884fab78f471f543fc8ea3759aa938053bd562427c4135d91b311b50aec292c8672df60638e14143328a722a261f43c97198b581ddc20b9b4a2e64854826a6beac19a771d794fa58db88ee2674ff131798b7b34980aa6dc87b1740381fb895fde0ed7cc2c48fa3c3f858b08e92e3bdac842ccfd3afd9d0588dcf6946ce8145eb92ffabaa6a51fd9bd05ac689ce88d022fe2eca4046d7c90e406c0564d99068bb084826cdc58020de602537a69d8ba196e5a8fc4102c25d84e108bcfb1c3b82ea5adb17d9781b99590980f65c57fdb16a4d31d7e8ad3e1ea49ea086117790cf5f848ecf043911f75157e3508e5081a5dbe49f472ac3fe4a5261c91ffbe219203c6dd4c0bb646944c79b0de7ce3fc07f00e588322a1b6d3e5fff8f813d82001b0f222ef1e81bd273d7ea7cecbc6e23c0b3cb482a651305219cb0c5183a4021188bf31d5c2dcf39c2856dae6e75a276f2ec8c09ac53482cf4ee721c9eea5cdf7ddc1c20218a2558f27569a087d6690580fb721afcff70d8a3d570cc386780e30375415f8bff8e9d4c0fb286e3a78c59184b5372f09f2620b7acba60f252a7c17ec9302b16b29491c2d14d33ca9bd42d3689417238fad2ec7c3d7d707e690585b19a4b26f190078360685262dea855a95b107df8fd5160423abb30545f824218c79fd63ca1a8ff801835f88771400e31c1f113e97da2de7c834832e6bb83738f93424fb7e81cb8705fc42f91c01fa8e12228daa6290ddd81f747d915eb897839604ebb38a6ad418b9ad32188c99c8d2ac82800b8b5153c44c63ebd5d7f199d362dd38292cf2f21c91f9a2b0246d9da120aa5fd5e4eb7c447a3db646e6b621da72998d022146ad34d11f20d74f069607ef884f7d4b92b64e5263f736947f219d61c4fbdd7eaf35b57dd120be787b977715f81071094f825861c1b1ef60754cfdde7685e2af67c086c82919381439f2d8017dd38fc3057fdda40e144b8ff33ee9dafc3f0b792e2038963e5a13ece6f104803b620b028f2f0e34852fc2a476f22d6c8d5421e4f3e237099e3f8c76ac7f1f33f98f4b3d99670c9e93dd473d4ff14b473f286ef95b269ee9512ca659f7a765ccb7be4dc60a8c59cfff7a63e6f92abca123d29bd4bfc87e63d86831ed77c88221ee35bdf7d9847c6640e98d81a4782fcef13a3e7899b134e765919803237ae815b471674b5d212d1d8cd8d0823dcf310c92cc89465134aab4b6674ec8652c419f170747cbab8cfc173104b60d7244136ae8590abd4a536bfd141de707714913b1b77a2c39578eee0ceccd406ad8d22be7333e41cffb794a545bc92c4fc384870f8e0d687a247a06518123bb937d028a42bcad10d4220e691b2c79b0450bb0aa200373a71b8a8dbdb450998696809c3579fec0bb9886f4ff7fe1db07ceeb2c520b6604cd222dceb3adb30d041f25c36efb554ba8f489628a4162cb54fdbb6c58f1abcdce16aeefbb737ccf028fcafe5218fbf1be3bf1068089f7cb0bf7892cb0f664310c556bf8c8be9a1a5dee45c78dad9611b65681912c510dccce6c30ce51f0878ed7d97f60833109cbc4a72c4c8c17d0519094a9bd1adf7e858a07cedce2a78562df074ca72bb2e7f9e8e0539864d6a2c944067d5e8ae26c0cd9ace22081cf654491e1612b1b85598ac48b5bd020285d93bdaf357435b16c91934eab443b7f9b599827e905e458928920aef569f50414655c240dc9d8099cb217372fb630a0b5b5de5292d55d9a540ce72741f2daa5b4edddc0588770640fd380b0ccbb2cf501b75689c32f6f0a75a383dbc72fa17fdeadddf18f2b54e360b6eabd8d781048f144629cfceccfb36670ef7308de844d507f2670766ab8566f1af25281859471b3c4d33a30281dcae2e47887961b09f2d02e6951d0584475c11fc35c2735a8d6024a452581e8c7dd7c024af412bf9d4299768948b5162840374d9ddc4010d636f4ff47c222dd3b678f70981babfe9913b34b66bc5fb3af72e27e83b72e890e9e9f418683db2a8870a6c4ff1aa36d12f643d7eb6f7990608dc0bfa2d6667d644c4097ad10fc3166aefb75689ba6436aeeced3dd13cd0fff1b4341465ea92cdf9b13894b3e3197e63ad8123ba2e5a0ac9455018274d0ca64ba828703e8d84cbc12165f4ee4dea717bf08f462298c31b2d09643aa9cf9c8591b531243ccbf885ecc39040002975e581ae2149cdab42fd34d77c91433794eeca67828b527bb8448d5475dd7134e60649d2a3dd39626b7182e6b1047d299a20a29c85bc4361c24353e24a9be85457a3d249ac3889b452687233b46b861faccdfb4986882492264d430da4fb4d5a490b7d41cb82228675542427d28c9ccd30b9d44fd22c9e8f3f6bd78db5dd26fba85c1d0439acacf8de3cb333ebabda2f83480854d58d12a765d94993c730bacc63ca97c32f316840dbd9e68c5818d1d6f7ac08bf3b850d9ed68a5de6f3128d7eaf9f5daf2c31cfcdf63249099cc5c250f93b903aa497a46e708250d5d9c4b237ef970977eb5af6b0cc900a06817d901030df90c86debf7704ef4897b63dbc8c1a13f97f41412250089f52ff58f0bd0176842c052d84bd293f4e9c89fd4840e30844596a76ec4444207f374bc6bc22a6f9140f33e09d728159b23801ca9b74c27f5a712adbca4a99108291c014613fef97fd33d999f80774413f3f2ce1363c4476773b4e7b518c098210e08eb259e98f8a62f8c412d6460c982ea66b5418afb4a8bbbd4c7babc91874d05af102dca575b86cf177d7b21590cef42676e3e6bc368df6e55310d838ebdd5e688608b4aa0fe65e485c1003609bca0341134f70396d7f6ca90260f74326048131cf6b73661314858fe6c14f5a01b2b11cda45a20a52c35075e54d08cdf7cd9f7b830e83ba1f72b0274d467a52fb48bb8d856f3693d225a4e47d8a6d3032abd74f3dc2fb9b1ae1eecc734d29fb37e2276e4baa3456751a97b83a7a5bdb620d327c98f0be7e50796fe37dd0552810d13adfb8a26842b7e128aa1e69191e85888142f4f4624b730385d70b4927081a8660b7bcc7be7d7b7987728ffb0e35dcea15325b450655ccbd9dd8bd923af41dc9a5248171b2c008a1032b3dbb19bb5e9f81e7e8b25600419c6329d5e493282fa2e7de7d6f55b439f46b00215985ba6fc236990dae2af903bba09f8fa6f06de86747c26a6df26c73bba06a94352dac8a8655ba450cbbcacf7fdf709a80bc9e19d52b5e7447933eb75b88caff605aa32b17950efca893248c39de60ec720720947d7ba3a682166ecfc01abef65e6bf24dd3be9ae6dd06851d444f531a1236a92b0b8ced436d07599a7364a6162ffaa27c845001d350a7a10a4b8b2322a373bceb48740fd2a7e7dbcf97cabf06560fc59c21bf43014e43f9b5fd4354bc6a10ee7da9833be15623b5c740058e0651f5a295b830a2f8987f7ba4d525146e6fe9ceab18a76bef407b6b822c091cf2072d191704cf07370b43264d605588a3586d05e8aa429d59cfdd9224186d183d342f812af118da8a340e45f618a466c050eece7fbd53fde8d6664f0db6b21f16bb21ceb24641aa605f1bd343c7ee9ba2151a16cb23c1490a16d53382296537d203dfeb929a078a9cc3fce6623545e31ff2f42c5a2a857b2703dc53c5f5f16a5b7deb0da8e1c74aedbad04c8bf288e87db1f4520fe5d3fb15c0630af08460965bfdb7b1052dfd9ac837d847aa1fc5ee3ce7026958203a9a4f3d85885a90beca73e06e256b8c3a44498f42de30e5c1754a70c542b5c4fc8d26cc1ecd9440efb80640182fb4f3ba0757e0678d4b577e71be32dacf31390f31c27acd774fe412ca659e3624db276236a7da93bd3a4d67cdf8661250f33f4b6b31e83456e0fce0a31f95e8307a9880671ad59524502a16f037f698617181c8ddcf7d5761237ef8d22bb2a27fc97ea50b99e836eb699536ca498aa8830c5965001253d183c6293eeb76aa1c7152475b5dc8266654842892eb9b75f805bd784437dc93a84e389bab78ca86335d6b4924121c0650a029644ca72f976c1f555f1e4fed5f127dcb47c5ee24bd633e332a7706aebcb1ff99040cd4d99cbbe5d8a40361b5493f021c27977f81d2f62a45191a21e18b0df92a0a2e80863551b8e821e03c2a6c76f95e5c564aa4b875116c59d84d3f03038112451165b1459f016c2117df83097524f9b3b7142890b298836d3189f752362eac68416db4bcfd8d7ae65bce804d189f0e32dbd4e154a236e1f5f76d7949b16cb22f51114665ae43857a45b283545a9a390e27f17cbd3658fcf15d62788b790445d05811c6d590549742acb8cf361acfdecc362f95d012f8a6040a2aead4ae0bca7ed26c9248fb22980d9ef75f7587856020a7abec3a3929261e73a9b481c9e5d83f13620eb4646fc2028f2a8652a3267e356eea2b759634c87f8c4e1ad5cb6fb87a21ec1e0a32043ca6eae4315d4355b8169657c04fdc5fba2e2241f709a8ea25d538e40843bd2c2f1652b83fc2c69fe29bcf7934d98351b1e4785b16650b3544553ca4e5365a8545021f8c2315af8c68d0c4aab040a618a645ecb65cd0a14f37a8f8cbecae4b296552f118a8ee0cf22469842b96ce85a4a4f5f8de1a866dc982c23498cfa560e9f08c659b7fd25959c8d527790694edfcbbbe57b3838c90145a4270982df8f79d5e7b17f4c4fd9fdec290808de1ee7ec0ca8d63bd3bf28a56a8b9398a525923efc0dd3cb7f1896eec877f953f6f46c264cfcb37a8ded9a3ad0e65a25efb70f55274193b2c53818d9222a77be022bcf5804bc4f490f38ea2677b4c2bc57bc578280b014dca1fa1596c0050efe209d2567d65027c87d7eec18a26000cae187a0e8f14498a29884d4acb033240df9e7b83e36c366f9fd10d1faf0e445e6a726142f7aa9ab3a248da69aff946ae22b7f83908eddbdee13dafa26d1b631748c87493bb1d5008adb159f6f288c8836e45029253c1d3d081002e7b0ae5ca8af23b73fe7605104f2d83b428e4ad39cb0dfadb97a1ccfd3e7acc722f844be88734397dd81b5df55763cbcbdc95a7d5f03b95095a723e3b72574e67dc3a6a5cb5b19dd0820772ffd1bef02ba6b23ce835a4a9fb721c53a749af7878857f6c3ab9c6fdda04c25468b0efe76f8c07d3d7f52e56cd33f20bb8e4e664b049b34144d157a04680d0fd0e30503c16c2ea73a4dd4ea8399aceabd100ebf870be844b820e9fd9e4531c485a3481e820742158df90b36a430430f246233880b49543e42a68707e4b4b01c7fa9a795eae4e45c0b77a6ef31f3a3a06fa411e44dcb795440b26e9cd868d8a7a507cbc5a8d1e8a4da38f4e36647eb5c8522f2f5f8e6624cfae001090ca4c9d70819de8a8a4f8aabccadd58067ae845f191472a7b2cd42f98d297c8e3851154d2d3949a3964948c4c457924816eecc81ed95a376c535fcd6771c5a16a360bbe47b2d91eea162ff0de4f35c8cec568fbaeaea6e6458e52e6edac30055b5128ec44db252473e737b7b28bb9569e27971e1308368c4814ec5e3c2c77a78dd01a1ca7bef068129f5020e447e1caa3010f4bad616a4be01bb11733b67bf980cd9019283b8422c384a345cd7b71e7d6f031b6cf65f2e363db11d999f690659f374feac9d48a6dbf90508b9485f7956d690d22e03084fd99c34bf6bf13bb697dbc603b88ab3c61d847acee7e9e7077cba75d6f92502771a610f8e75c59c08fc0a4a72ef2e069d3debb8f709610e1225f3fae1268e957616012c0b1538f6836bc9f9239103e39d6571a5855040c73b68e5818f550e915eb1a66bccb9f948819d3004a0cfe6abee9ddf4423b17dd979cdd56c835a537e8e021575eec41eb2510368bb1aed36145658db251bb1e258fba78a9ea32e0bef92ff452e5889720146af0deaa405a73bb47b01ff7b07285b752d3719389a0229721f3727deb0aecc1e567a2345fa15197a753f3bc443c1d5f1e2dc0417c6a072a81b2bd8a39404f838779c4d0549683686190f77c9b16e41f62118aed8d0e3ce8d744ed4cc3c9d155c73fd720ee6b4d9e0869ecb0a4b67f15e001c6e28a6e6a07cc07010ab570385c5310b717d1c076b220ea6814279ee768a60ecf1ea893668d8f39626786063326ff5f2c96645b0ac3127a0e48d795ff9ff211164d1694f1e791c591cdd9eeecc33060003067baf74d2646bb93173010954c3932ee3ceea80fb44a8f59d5a77893adb159d4b391e70278625194c0ed1c103c271278d1129d8f4b07e653942022628aa64d3b5111d81d4413243a78127154a2c4a6b791963fb04b653bf45307209dba1a73b25d98115e171666ad1e1b969dbb35a368a2d8327f8d9a1b1a6393c8ff1031b774c362a4a416a23b76b3142eb37bd5b3dd9697188e97a6823511c31b09c920798e9ec6086ca5e3d943b2ce541a96508e5be521e7ab679408507c6ca340fce160d9b8163cb7de59283ae9e0ffcbfd71543d7e9ca5d3601b9a6690e71753fcd5343fd256f93dc53a9ed809a9fd3fee238aaebf71c22670614f270fa35250ef3b3163320184eb14ae86020df34c21d9fd3fe4280b8a8d7b6c0da7d1d4bae0929df97c76d29b32e74ddb14d896f4e0b2b7f2c82d724d064b0a163a8bf87cb2ef977aea9862104b3f20eeda185ab9c830580891c5863bd91f0327e018bfde3d513117538a86b80bb3c322c80b27dcf186482d100de33e6c2106bc5a57d6417d140a9cae8d7bf907fd9a5fb9be844d0f4e5566594de7eb0406f97d42a9130a1d184fac32e8db243cec0363ba07538b3ef6a175725276b74ceec0795127173671e2edd9485022c70b8446ee58789211cd1d669e629866c709aadbaa9bcf99b64e8fc125934c0b47f124a4761e8b72cbe7827d156fa7025d6e38a35a6cadd25e8f17453daf2de49ba8102ec4c1e313e8e42f45c46e84eeb75a30bef81eae2e56aa8d1f998f2b1833332ac129ac631241754a7edac819805425d6558377922347f456ce30bff76193cc6d5685335e85183e05e71c05dd405736ecbf7541fe4bebe565609d70033be36f3eae668e241a9ac4075a04119227068450147da20daed8c3ea5d058eb855f6743e39321d50a0b2295ff7d668a674d248b9b52b46f1032329919ba8e8b16a66a00cb94736a644d64b26a3a03a9240e68925b4399cd003c2550d344825a4647d90659cbdf6b99f2ca5c32c835b0caccc0d3f2fbf57822bf5317e7eea28bf7c5cb3487ff94927ec625eb7f8e81dec11b00b7887951994bd5d5207382ff0757485b0b5004d3ca5a4751544f8c0789185f5b5b2593e83cf8888228194ea25c663528e336e9687223df7b614a6798f6bbc3801fbbe407874d15b9c9a44fa181584888c92fd4a3096964ac48b812ffb34104e80a1b6c6e0c02b513360432ae7c62eb52103ab60b1c59d0b04815da8c3c515c73555d9c6c1e35dce2045a7b23c5d891bb56627f27065340f0a5b3fb68d11b87451015770251bccc9682eb636923a8dff822a86914408505ae66df486d94e01eb49076d6c2235b04e1ba952602b1149006fee07a614adfad01959287a28cb0e5b8883a997882323559168843cbcbe532cd917d48e854aa9e9f522962e009f774b793131444a7b0517c3eafea792b83eefe25ba003c59b7cb26906917b86e5fd0d3320c52b3fab9952522d3933b58c5b89c6c373c20a6ade0615c810b3c511f6b005b6948adfe3670cf3b3e7e376c25c42bc3d55195bcc45546f5135234c5911474b3fee309f757b46f5ed0cd2f6069931ee2a2f0dbbaaba4cb6bfd6032f11caeadc771bcc6298813e8f000edc06ef6b55a25c7576bd9a2e20054186b6925847df91a40095f9f469d19c63936b6de65e0972242087883fd0feab56e1d69491e2a4f9dc86395828124ed453cf1ce03a98bc7b7d78baa61ea9d9e2d1b476b442876063dec3ff79c2e0c14d94976609c2bd9e7e8d5787d5121f56c5d4ff02fc03a0af1db99283f31452aa9ad280dc9340c2cae9bf5741bd949764227d2b9a8212e32cdf0f87027dc03b14d62a977edaa79736782d8ceb7ee03d39c67836e59036e680f13cb805b97aee34d0cf8261323ef154b9477fe99af270725b5f4f5f8a7c6de2aa2e376a3c8d19f37cf5cff805c8feb1bbceefaeff55512bbf1215cc840f3bb2d62974fd545c26b7807d07ac38e39bd1a6dcbcf79d81aacd2acf15bd380e0033a0926cf276cdb0571eb1c78f927269e152c503f0d06cf98fc3771fee41d0d74972f680487deb93af0364cd7d74c72b6130cf0ded473547cac1f783951929541d2950aaba3876dcccbf4afc3fe2bc95b762551a757d61f7b481bbe73a215edf18d2770170055b5eea8ab02eb46f1bd4c843f7cbda2102718a326ab1acff9645a28d889cb063ace18828c90572ed465222329ab604b282b5768b6e6bf4d39989adc9cad74fb5d058f5d6db1877e577a8eef64783f4a50d604842bda539db8cc6e4605a295ccfd66fd20c23952a1d08dcd43c48e57dfb7c9fa156fa3cf5235f30af93776517166500582d92c0f696ba9d98d45346f9a5d9604789e739029fea9596dd6cb71e47acc1ab14ac38e040874b618ece3ce065306214ea62069aaf034a709e881bc0197f991e7106a709608c71495dc5f98012ccbb44f5f75a20749b7783ad6760b955bb5ae78d45cc054198e6b33e47d15bbb5895b1b1fe0969faef0537c8323e6d252abb489dba138573136658ccd4b6a0cfe8f99beb16f0ac94811215cfba696bc1cde51ce0154f7d44aad5b757abe315f57edffcf7cb55153c7cb9f2c17bbd0f4bd900fdb491497fd0b0d1f2cbbca2a51e1873a55cdab594f1a4611f7d8b49a7255b1c72b3d02fc0ec30a2bafaded7ac73ff4b1f083cdd552347abd34781fe0494393b28e257ee99698c20452fcf675834488e1c54a4dd4d946a49b0c9e28bd03fc3d365ed125322062ab6a0371c0efc97fd75c4106ffaa2c4cb9f014a770bafb4a0565090db923281517e38a3b8f07a11f5d5ad5974f2a44675097708979359cd09a18b9c0142c2063117fa64a9e9546951ae7e381a90f249b18343b3df887a575c0744f0d1f6c4bebe7ab61275d5e80899660d36bace222821794067f63b6958df8c00ada70e1dbfcddc8fe606c54addc059729eccecb7855f122148df562e70549a5107ba737f63c23b618917bea326d437672b78751a2fd11b7a6552216f4f36ea96ef06402092b84f13af091eb8a4da1cabe8cc82f6f16a230bacad2e9ba29452843d06229856e27deadfd27ca646685eb0dfa86c815a10905b8e55a940caffa628285c197170a947021ec60168bb47ae52a129145dbb95e434c38288d820e4cbc574b341a842b7a7bb1f54457bb72081145dae1e83e50138c5b04700a31bfbf378992f494c511c84ff68b2038c4d5e6e21759d5b31415cd6e3b2832cf8ef80513bd93721aa95cc4262045ef7238eee6d111c83404e936fb0ba3231410a42de100e03ac27b81a1c837fd50ef0c3638724029fdc72d22e70ad6240d8cc87a295ce7ea19854877327c51f6b2a0ff892d020031551c70fe06726d2468e888c1bfb79d978d034eda280af0ee12112de219736e9ce86d0fe8482fec9f793f6453bdfbad127b59354a97b130fe2465e5d6839bb06c315986384059eb1f21a499cbf01cb42cd0550831092ce06d33b46af68b4c1d6171c4cceb8dceac25704c2d1219fa7989c77da83bee155e6c1174ce6f9a17930ed18560036d74212b23bb7bf7edf9bfae0f4de39fe63a01c41068c5fb9bc601b3a2eb90ffa74e8f37cd410a68c651d570da89a7b93292e9d24c91f7351c763ee065b31d4f314c3a0ea773b7ace6bc7f3667889396755cc45bd407931021ee56641516940af6108f91c5587ac0747381ea2724ee44ab27877446bbdb5bdc80ecc32c3adbd3312d69da38bab86a474b5d8c424531e41e365e655daac4ccc8631d4e8b2910883240187972e27ac25f675d105efad71477bc64d3be1e2226a16c6b24ca706bf221d9eb2ce2039c6ef40ab447b1c8c748c6b96a469ff8c0e6fe691a532950e6170827416ca6ae1585dcdd003841b58f32a953c0e670c4bac986df235350f6457c7edf85414ab92b5c50b533b600609bedfec6bcea443cf0105fd49b92bc0a260bed735382246c9311dfda710300e74aad51089f2c6cf3ee733643a516f6d0b787615674d3bafbcccaa6d22ac823f917460776ace16b4bf5ab52904937d52aec207313ce10db62608e9470e9a6484274a992f1ca34eabfb9fdebed78091d18313a9943d5ddea26274997e8bad7a67ea9ecbddf33901dfadeec695e7766900fa53b81bf352fe28a7cd957b17842a2c7bd654f1434aca2a4f92a4da3631f91db9eff718860e63af2ee4a3492691c02bbd5c6fe918a4f7083e82e4f0d98113b57bcf45d54dd956a3317b28e6b52f3d11d18ff6cf5c9e8939d46c65ea0e16b9aeee7fc0066100f3705c4800b52769f38e9e7a5cb6875349d223311ce28c04199467eda0d971feb0c6a986165a554560ea0571466ba6c8ccf47fbe8f24ab1514fa4dce06694aad6067ad62cd1c7e0dae49978f88164043dcf2995057375230909bcf76d2f74a629b2e7d18cc37bc1973b869655420411d46e6dd3b737f1fcd214d75e9adb7d1f54009ba3f7edf6bcfd42d6f0dff57bc67329fd732ba82ab8c90821584b44e939ce09c1546561cf70732852240746d90525bfbb8d299d633eb9864d0927bc522be48bb9f55a9707f4b5a6aecc7640172aad11d4caae0b0ebbb46759f7f16b6fac124540349cc770ad5360186d2b4f4de12766444e943016f95f0afdc997c319ba11404be1c7898de257dea031a61d0f5e423830a6f071323f29320839f7f94329c7892117f36a8a020c67c973cae8926ae02dbbf74368be760679ab113feb73695ea6cd8019ec0907745a05710955d71d32d989c72182ee421e8a758566f02db4417c8f8220a50a01f08724888f246cca0084654f71341d94e3b91c11728856b57c0dab6f08d23364748a014a3473130cbf5fa53e2e26509234baa39826d0f1dc80af64296679667cf08943354d0cd4baf90786f16db9ba779b2fa3c5fd610b3f85a1a42f88e476ed8326d237ea46589a4ed1714d378d84bd1a4fe099cfa0adc1349ebc421291bc835f2aac8192c7c79ebaf9c80990a4945418e3a30df2e81a8398a5508206168738beb62ba4b7d934b2b25a8468406c84749d895b612eef53182045c7804fb57d6284a1493eab9bc7cb53cc33566e1b31e785c30ee265ff280b1c34bdf952b7dc1a676abd286231293da1b1ca329e5f7347a9f0b3ec82f602a31735f27188fbf5be996197191ba7af83664790d63105810b97d0aec82f253826293addaffc42aac6f3617e4052b13d334a372109014100d9d5b6cbd8216f1f296273d439996ba19f84be1f333d56cb67baee0094fe8fa3b56c424629b9607861a9bed8b17f8712335f9ac2fd8568a86b3d79b4452ac53ba10eb62a13cce8010cdec4bbc6a794d1e6893ae9e8c542dd9a01f94e73097f5b3807d5f6814bf1ff8b7f993c65c5b781db73b854e3c1aadcb8f68baaa15884f82c0f7075ebab4dfbe4975340904ff531d312a5e6c6ca2ccd4028f29006b61008be989872e5ef769e264e15f3df521275bd42db0baa45f0afbd5a0d77caa220be1dd945c7c3000cd98a80f288e7a1d4fd2638264dd11189ecbba53e6cf1f0d8b5fd6419880687c490674d0a64d2d61265157817196b3e45c2f1c63d7e0e6ea36b94b01d34fb8c761175ff1381882e8b6af281b19df81af3677d17dcf9cc016bb53e9da65ec9cc8e03b808982ad078eb7fa8375b20fbc68f32f018d3c7787408c42030812f2e2da1beb75a0fc2436cf84282dba277048add7d63aa2979521f7a1877a9bca5b64b733a85297a6e02dccea64caba949bb9cf9f623d3367ac48e9ed647f6792472ef3e874367e3569623fb52726217261244368034e6fb94a7dc83556f478c32e26a1c37ab261ac8c8bd60eade8ee761ebd363dd3da5ad6c825e8d80887e2e843703dcb3281cb2ee2db13937e99bc6b1748bb0059fc8aa67ae93da2611efe2a999fd5852e5000bf594a50a88b6dea8e910aeda15c832350a7470af1e030829cc55f0713aa876d81535e31f820ea4d62b792af1a924a2b48a691221bb2b4df1b9f27249ffdb1e5b907d28861af7bed75b3bac59010096871449e4768b97cf42e1e738daef6b5cca26f3eda4aab48be9c40c5869dbfa7aaee8e6b10dec887dbde0986b23995a6f6b9f6c4408aa66a24ac80abcad6ee1dbf5fcefcb07b6fdd7e3607914b8a4c1cf50240bae3849411921b4250d9d74b09c4236e359129f53276550e91d9e81ca086becb14772f415bbdd79d7afbe5004896acf1a90fe6a8df1566ae60f0603bf30f4675e40b666ca63a413b97c3613609d7be925219fb1a7d159a9f4debb1bd5ad35e3d0bb3701dd03480c84df3f7715f1bde73148a9ce16a1222ce9d2f6f1e7c56b405b08edbef6b2041027657c6f7d2d7157dc3db3cbbf867c47fc55470f522e3e2eb5934249c999518ce48f1c96a2bda37c7f1a0ff647231172013551a5e1d880e0d5cb2210d0ea1f32c0507b120f24c117321a05251bdc9544c27c59fd86549de10b22623b37de1764f22ffa66892c48d8699803591111e9b2d312cb03b22290ffc4dfac6fa6cbe9eef2d83f4b841aed7247004806279a90d2a54d617978fbd05b4fc2df396edcca4c2299bbe9b93322e2e87c33a1f383bf3f3ad4757a5648ca16372471cdfbebe82d646e4304db7afa826c4c66f37999f88cd3cceb41a4916404ae48ca60050251876b8dd8319423108b1a3c37abc9ba0856b0f6f29f1d2bcb8bc14d1b7f0a86e0f589a5df87272dba47b78c2ffafea7e6cf1721db84ae4664fd4ad71f7d5e87729b1b871a428030876f400e1e64465317789fd571af79fad8f7f14d8c159096ceda43d7608b263afb08a12a575923073a1b15bf25dd1f2b07d8ad24573eae365695a9def191855f75c0358b5b41675ca1a4026208c6ab226c675965f096cebe39fd1e8ea07407b25a69f7b174035d5b2ebe5f95e9788c3be69a045dc8f2db5b431b3b62b770937f24e8f54bcde7e24e3d3cf5c3e27431cf8a5f35a22a7b96bbe1081ef25d26087b69ac1b7f807876e4d250dd93bd8498dd0e1cbb954ab82220b853dc23e26b3677775c1bdcb102f47357a05262a036db1c9c131a1eb1bbe660d97de7ef945853ee833f775712d5cb85ab31b84c11b140c08d603fb1a2d09f1f6018548409678a29457cc648776710e9b499491974a8b287141c74721d2ca6179fc795e3de78371872ead8497b311ed66fab3e25d040f60f570cc79a547a7cc25e8a9d9b8c971f33924ecb45a57a0e047eb621b6e2022c2919f93d3f58e65acfadadf6ac63266e04523dc946982705e97b00c665ab168b90d2bff5d4911bc74bc7f217043d53f3cb1f3f994825add4d0dac0ddfd269df0217aae8febce44b7e355c20a34d1d98cdd81212155de4775f580c49e79802c091e1e50298baa586d5c47cd089193a8a1536c209993a6459d12a2799e23afa6fe7f484a193d0d6bed9a59e17154e381d5246440e5497fba04afe968e30eeea0960e3b40ebed2ca149b7ff0e35ecdb46bcbdbf83a6b4419e43c1762208ebeafc1cd23663ab80c2b06d3c27c87d667357621d89f9337220130454d893dc8dadd658ab196a4a0dfab711d11b878ddbb87523385bf213ab2e8a0a8439bec3be9e2421f3d64c7948d71e05edf3fe30e92d8ba297f1bab7bd0c447981dba805803e64a6199e18fe939b5746b5602f1d1b091434c131412c70e42ccf039435bf1ff32d6915c52a79240ba4484dd5547598c342bcc5625d24313212f9223be14e100ba9d3d3f21eca1b37d8e871753cfb73bacb1eefec798946531fd7da81209966bf662d77add19cf47fe7b7038cb25840fed918d2eeb5d4778c6914b63827f0872e179ad3f0b70649e58cd0e4cf7b94d0f4454e25eec955409db27b3a15c21c01e9fed5754807121888bc099d47992a77a6b7821c686e70096c2972d48fde46172007a45a03ba569e785a30d2aa4a072c7a1ac3c6f35386b691417502fd3cb815cb8d6080078d7674a0691304cf7a1aeba5e06372b7b3e2fbb8a131cc21045123202962f75cb0abadcd8c92f6160acca15ff622aa0d99611a595ab2f7de5bee2d654a290552078c0795073132e07802c168955497545932a5cad4355ab244956168b554b471dba6695bf7e6ac06d7811a2c826a499dd0fae0f0b32e026c4311feee08ea9f075a4b0a5b49a9717ce5f94f831be3050db768f5a4a1d425a23a605eac99708bba4911d1d0ee0a29496989899bc22d82808fb7302d494b9a5108a1038b274cd5cab57e33fef333ecb7e76f26fef5dc332a5216aee7ae8f9f1116b0dfb0f78f85ecb5df32cf9d504ca8ee5f7c0111e22d57394104155a124da7aeebd3aab4aa75d338514b6a7037f4206f3d7fdcdcdcccfdd1a38c32ca1843542b35d84b0dee1228758d963ca9fbdea43d681d4add566a70db4a83db4a4d9c7c41c3d9a4b21a9c40a81dd070b2ea7e50ddf5d6da50a1a1b7941ad0aafd55f25e622d495baa0b764398cfe524f4e0bfed2ec83590ee80800d228144571234f424a2189a927cfba8915e36efaec76f3cf6436e3cf6c5e0aa16641efb2132ef538560ef53b9e5231ff543e4a35a880ff343e2c30c791982fde5321ef7fe3dc507da48f3eb23ee63ef081f61201cd747dd240594c12b9122820671d443f5eeba3e9e73b5b2b1e9d6fa506273588d55e9b0394ca5002a5596bdbc2471df479ee32bf7a33eba71ee732a6be3ef2bcf712e98c13032a91e65a820113e4bf530aabb83517de53852c06a24252525bdf62e8ff298888fd6553342786474672734b58552ff69d03dc95507086350f58ff1813a4bc709e869c302e438f1235cabcc31b82f9c971234f424cc7d86c0bcbc5c527a7314f223ff07f53f327fc3e5e7ff68dffd67efaa19ee0bc275891bef32efef4bcee439f27d95b1c6beba867c75fa921ce6fd25c2fc8d1f02f337647ec8cbcb5c8ffa21d7a338f943e2fbd41b9e8cd779404a68d1247725572d39933723e427fecff52fefc303f31b8c17f32f9efccb437df464785ea2b73c3232306c1cea230112dc5f2dc4477d24b8fe89745eb84af1392fe4be05f9713b0ac48ff99268a0881b90c0b8c2133f17dc939c3bda2343c8e77ebbb8186f79bc1b423e8cc77dd7720a784e8e2db424a1021f7878dc5b78615afa82071bd20de986ac144af0acab925cd57e5ad5fda0530d95548e56ee632735a0a1277952e3d07f61bef6a12bcd77df9676dc75dde974eabe0b69eae9b7cd0b95fc54ee63e855e5bef3c22ea84889d2ca27a8723b957beeb741ee77bcdb2d5bb634d56e8dba4500abdc1bc16af7855cb98f22911b9f925497e7a6e71d02d9b5e15c34cd88576d6bb7e23c5e622d0d3213f84242b0ba7779712853127d380680caa5a58bb84806c99d080d9db6b54364e7278ec7f17194066fc8c4c0bc50975351d1bf8cf308696e21535b0b2721c170d01e51ce8575199fa13ceae3270d4e57c5d04e696907c3ae0bbb7887e417dad44e9abf7387484b0baf5199b5cd2262e231ea3e2f2def9c335e1c648583907051c23e97c7a060db9a30aee4cb1a259a23a42a8f62fcb831fa9416d262a88a94b28fb4f81074ba7e7b4efb17ffec3bc855f2e7a43495fa0741232d64df7d2440c23f7bff8cb4a0fdcb470224b0d71efb8cb4b06d7f7d2d707ffa92f8f0701886611de439dddfdc80e07f2a45670f34f4a34e3ae266d3077d78e43bd1fa286a9cf520cf893cb2f5f272cc310cbbfcafebe3351a94db3f4cd1ad581bf97e8335415eabda5d8f0f10fadc0fa1cfb9fcf6435c7e7b9f19164eaffd90d36bd837c3c2cb673fe4e5f3a9d45b57f9d1497ee7f9d1dac897f2bd255bdeda3c9a7295fccc7b5749e656d502d90f619e0df352555e3f34fec6bbeca76b4685f9f1e737b3d5a7ce2aa87ccc9346d02e5aad6a03012989558d2b173576e3337f1ef09f51217e1ef06f6685ea5fd8b3f585226ba57a60add415b8f27310b6f5c008758d5a43d5e887565da313acbca86be44390910f6dd47eae715e6affe6e201f9467ccb1ab5c85aa943f00f119ff95bf9cfb0b0cf6f815ef1c46fe5df4c0b3cfe254162c8f29040c95ae1f1e7f76fb55678f8f99b698179f8b98c99435d9a6b55eb908286d3c8faa0c1fae0ff7e1e3b7e982ca046a46210a3450d274c172f5ed40e77898e3113a4abbb7cd77087507b91643edc29373edc231ce1ac3f4778123edca2199aad393e4441c78737158bb5d9baef7ff6617d68dfcf4e624851d68aa63618ce5e5559796fef71dd98e8bfd601795e793cc38ff721f1baeef07478393c1a6f86046f042fe5e1f06ec878fc311ecc1995ff258b7c564aa2f23bb16483ca5454eefa82ca52bea6cd395340a19bf20bb3cf3246c2d59faba6bdec54f0d7bed0df33afebf4ba62472051d4a4378995b86872d116ead5908bb0a8fccf9d93ad8bb4ca53853d6ad7e3953f2229261a2e9210cfd1d1d942dd3fd5ef6d01aaabaa2f1d6122327eabc5b7d8b65d1fddbbbd2c77f0b694bebddb60a47ee925afcb87ebba50d79762835e758d646852399c5f2f23195af55a3911531485438d9a31d5907e34f226ddfee9803c76747674c09d39e7d4496167875b879b7b3241fdd734571724a21140590b8a1a4e559200da8480a206255a494a9491820ec86347674707dc9973ce1d9d141a641d9d1476747698757478b209b030142b1e40610396861140ad246cc87460042fd1ff05333333333317c14a175396c030ec09143f829bb8677d6387cdaf557b3e91790643bc04862d106e94c0a447bab8687ffeccb889a126ae55e35ca17771dc949e0b5462f0d46481a99b779088c7980020e828dd2481487fc4449b43777ace1057f9320e5d428802c42c2c623162313610e6a552291a2c6878c3cb93433113ef2220ae2da27b5ca482c42cfe913df68bf1d08f39bf234828e7e0d57f7e190e6b87b21a1a1da94ab3360d5e5cf44e0e6823e750e34706da1ffc3146f752b40417c8a26300031b63c72cd5208742a5503107747a7b286e0857d2b5032b2e2e4324d79f70c24dec13a64769682e1df009cd5ddc5c60953e0c0359bc40c4800beca5287779131553f1e201e50fff2306e2922898b6bde11f59f6a137d929bb51eca26a6727b009fbb2eb998ff1f209fc63777a3a171215e239bb317244e1046f598328758756176d127bd9737e1cc631c13016ffe098604d225f59507e2ee2a1fef874368b63c23f7881ea76b18be40d2368fa86889c643d46241f50f3cab97eafdf6b99992f764f754dbe985746e798022d4147b8200921ae1a878535d9d0d44b736bc8b92031d3b6b57fb7eddfdf6fc89c71b7bebb7773b27f935b55ee31dc17bb64f41e22a303a303630ce69518b78f21cd39e776faa10ba39ba29b628a0e4b274547463746174687a59ba293028c0e09542aca135c0d68e783ce07491a5c8ed19b39468e7653d0a5205ca121aa03426725c6e8b4995dbe273a3076eb225c0a4915b4b9eabffe719c0cee6dec208c5a537ab6ae0ffe7cd7dde3550dbd9aaa6b94820e887b6ff44f04748d9c1c518d9cb46acabba081185976b7196c33bfeffae0055798aec04286fb15347e50860c5bcce17a9231dbb5301353171384f531e26aab18d3da98c1e4bcee9b121bfb52c6b8bbbb687c432c778c91638c31462b9899a5184295ed1edab686513407859bd93af1e6091a6fb6e337135b0c3a060cca72a5dc9884350216cafb524ab9f28b524a206a9819caf1438a53335404d118b18224da758d5a4f8c686812bdae51ab87cad5356ae1b07246e729b6ad095d7679fe648c4437462be3a88ca52a77b7c7556e0fa6327b337126b6a755662f7e1fa0ab9c79bb31b91c0d353545a94c8dd3bc3555e77ea2545f6d4c0d3a7bdb1ad59f003ba04eaab35ce548d039cda0e1c654fd3726bf4951914fd747015e36e7841b809e8feacfdd8d15946b70dedca0b03145292c55df98a6e8202559e966a6ada97142ae6ad9d6989c0b13b7d482b0cdbafb7199e8cefe35020e543e0246d81c1facf2f72c6eaa5828743c2b28aa418f33314a9820a31c8a52ddec281aafa91e7dd8b6463aa1fb347c1eb57fe5cb03b244f9fa3d36f77377cfaec1c6bc1bce19230667a1bb4b77a0ccdddc3161f00867d070d28f4e4f8abb34753491a294d9cfcdc13e8bfed787bdeb8033ba6f1163c4d4a0e1acf148ac4862e56f42ba94deae87aaf2e515f763942ca5dcd93cbbb5adaf275d3baaa0fced3e927b0a9b32f8b7e63a2928af94fb45effe4d728a894bf9ec8f055d1fe6c455fd3ba8a0fc9a92ff80a521c45c104fc470e2c5d1d21336ba305e40b70c161056aa88f2822984b046d6030e5d318931880f9eaae0c419ace8a1891842a603195aa87d6050b4830d49333c91a5862264dbe22682f2705203174ce8700322fc4004bec2c90e5472d8f2c50b8650630192af609904c71f9d2c505821850c2c906e683a8a0b1425c618c1264c6688464829a59452eb010e8ea2a491250a13320de922a594524a6d0b296f6294f2a76c20d0fe90d2380db46c4042f490fbdc50842062d014c50f3560412303ea41d6fe5e1fed4dd0ba5f5cd132e3e707294ba031842a6298428d373b376779dcf7479ca1760f358d3e6b6c8209267ebc00e28c1b8c785c4b0d535de04005473f4758e1620c1e17420dc135026a55a1fddb33d4da51b60f70e51504109d6c52344591355421c516483688625211a5f555c41b2316509d758d583fd80a7e87154e61bfe34a4aedf4a390020f46d538373ec74ba61c157bdd7d2e963ab8ca9be57cc6e2800d364e090b7295c572747454743494126a69d1dd2c7680a7525db4c1398c06ab3a87cea169681ada68a38c32ae5cf1c28b285186baa1256a77def223de9a259be55b1c394f09ab05ec336edc4a6d2cb53f4c802755d7a2e828d5ac25af81179cc33b60d5139cc34db0eacb28e3ca152fbcb8e28a29a678a272b3ba4502f64d6acb6672216f963351fb6723f550b7968e8ac0f7ae1bcf992c2772942a22124a0551129666531313d35277359c472dd4ac6635ab593a3a3737e0a75841978f2065c9189cb900872aa70022773041372c41b482b0410ab228230b094604313f316a7cac070e8684b812c595222b67b814d1836bc7941a5fb69228820851b2e0a0850d67e2e4eb4829a58c463f43354e79801f1c3c9181872770a0849b51438ad510850a250810946ba030a564553ece6bce26a099e473d6b054678b67ce89f5c8a0c9557ba56a50a2281a986a485f3e91a9c62e0cbb7ee8ac0b0511866af80f328086c95f034511c2a8b1ae110d4d6af837d265f8019d415ac8975196a8abe5b2616e516f90c27924344454b7e85a81d2aaf64359d44a474c75b7a9ae645a924a75b708158586372b176a7f43a15ff7b52a8dc3cccd5a15fee2ef6b498db38d83aafbfcf1bb29c2a3eac41899999939768cde69493512695775f23894920b9ad4a5205a25b236fe3ab2d0356a81520d3da875e4394b85098ff390e5f9c17e7e07ad0f298b73bde300c9a5e8a01c4672d5e54a6c0e1157b914974107359420ef3eec23aa3f91b8d42ef8397541b8b600a95aa95b0eefc8f5d76f5be44b46a70d1383da05c30cdca6cf69a8a8eefe60d89e17dd9d344e5f7d7deea4c156834d8228890113286cd4fe202158028413356a779323ba6852b9eb51b2aafd5d10113c31441b25e86fb9130faa0bf6bb92a3300517c5173ef68c0a71b59235d655e57715b628d538bc2308349c56660a5ca6a0e1fce9e621e2453c5d5493c0b4cbb5cb31f9332bc48d3bd6c0bc79699e65d30cbf2e8986f48b8b93d20f4e3e387d71fac2e5d4043d9d4ea7d309cbe9743a9d4ea7d3e9743a9d4e274f896d6b98c84d056213fa978b52ab87c137f7ebb753108d3fb382bf101bac5ce45c1444a66e9fbf152d9e37fc83a3b009fd516ac840585472b214c454a586aec5991a1cc397d6a69fa3f00fc722c6daf487fc04e77d1a62fefc9228e1c1be885406e50f21e02379b6eb89f25b79b53c07bb75c8c3c7d680ecccb59ce16a04a8528ca9b84a494eb408a3872eaa20d103202833c06afcd452ac000fac34686082d6cf19f10629b60a153c69230557f04006239ef8421a2732a9f12970458d15ca092a4c5d2328ab487443438c4c4871060f6cb0023656106d987db359a45c61011535f010042c91c5021a960535d47803d63512c20b21903057ba70082269e99ab9ae140d0b6bc482a2da2f574278710a0a77ca2563e374103ba8fd2827baaa60804ad3aafe9d4e6149295d717667cee10e725ce1abbf4cc9849ddc9eafce3ec528c8cac989519092519015a3a02a46415578b8a1f2921c634ce305434508312385d2ba46459c80260bc551841c27a05d193353d098ba4644f4a086df44b9ba464460519fc61889b0a2c6189d88200f2852e2d79cea1a11510322886af8371813a3a029464008c1a508dadc4a4748497c848446d0511638343b518f908c68c0be1274ffbf3f288c80585d41462b50fa160f355ca6596404441235dc35bc535080026a52e08102143b462ab0d20028faaab245d781f2cfb6ed73d37ffa3cf5cf777797d5aa1e395a55f94834a4559c73bebb3f5dd5393fdfc246e59ee90a9e46b845ab2abf6513a23bb1a51af12d5b8c2459ade43308a86fd952f991d03a43ff10045daf37c21503720dadaa11675ad539d9046613420d045c63b005712b5c7f79da7669df4e67de115e9beb91c4ba6bc32fb0967a8322acd4ad5b59be7c995d9a67841d4035ed5fd0bcf89ab7fc9d9e5141fb6ccbbcb0672b0cf1e57b20bed49c9bd72fb736fcde55be91a16806a56e9e341a7fad398072ddd7bccb0194bf17b017b8402d65336433c4704f2ef2a9ee5f1cf9471236c15f09abfc4f35dca69b93bcae0e087f8c119b99c6f1274680c99d501de583f34e883b97e428a5930b85e9505c86cab841191c2db010edd4025fdccc73c9085cf6d81cc2130546f55fcec1b8c87e4bd89cec4bd22affc919e047f5df661ce5bf813fd57384b366cbdbc54042cc8184ae87695e6e5851e3cf743d24cc743d2c450eda40576a7c9aae67b1a0e97af847878b8f3047d793a3ebd92e72743dbc24bbb0c9438dafa3eb01808eae876b70e1ba3ec92f046be3ecc97abaa18769a8f177743d2bc58eaec7c6e35ea0a8f1bfebd922f4301bdf1643458def753d0b86d7f5b0150068323d5fd7c36b7c5dcf1ed5705edd979a81abcac13ee59f099bb3a3fa8e6f01d571743198a0a7841a1f005dcf0580aee72600dc8c5fd4743dbc8400c29985606dfc4968f2f5f00c6afc00743dbb25005dcf8f012c4d921d6a3801743ddc831a5f005dcf4a1140d7a3037244a8f107d0f5309601743d8ba4c2d96cce2f04595db0690710d8f5f4a8f1c1ae678bc0ae070004704fd5f52c1935beaaeb6136545d4f4d09135895af906c0258f577d03707fb70ae6fabfe00e01caea8f109d0f5b01804e87a960d1e1c16fe17802e8606230e04e86248d2a03f7b39d012ba9ebd52e397d0f52ca084ae07db102ce80f7631ac8dbf33a1f2f9af7a0d51e30de4f3b0e1bc0bc258f4e8d12393a75009931e5c0f981edea3478f1eb207d6a3c74b8f1e2e3db41e74ebd1a3c7d5a37b9c7a700cfb70e20f0413043455b984277e5d210f7e7ed9ff71c6ade9aeb26d4d7c217218bf9bafeb17eb1a7f447e247c847f666b0a88ae3faad7d7dc5c4fd3383c34e1b9644a40c3afd7fceb55eb63fbeb6dd647f6d7e4614449ed3fd1d3a9f6efa81beb781d3a6aff02ead6e14e9dd17eeb0bd9cfdfbc19ed5b410175fe119f55cdbe19151450a7026abf8f0dea4c90aed8cf60dfd658f92f6c87c6fcfa0bbb2e2cbac4beab75ba83e225af0b73b9f1aff0af6859f7eeee7efcdaf78cdbbbbdbdcb9299377e4ba9654d2cb18b290b57e97381c8065889ad7015abea0e63659fbda9c606fb087fded4a053a121c6843169699a373426f747fbd5018561c5adc6d95e43d238dd6b9db6795bb1dddde8d1da5d5ff63bcd3266bccc197fcc342d6a518b5a8c316a5930130c3134e84a56969034c8a980bab001222bcd89f9abff8cb3ed8b4baeea80b86759444a8a4a751f3bdafcb39fd8c4d6378fb525a62617b44bc60cbb9913cbfefaa1bda5bee05f07c487888a8464b7da4950aa59f1999a7ab5b42a2ccbb2ac8a15aa45a3a244119af6edd664df0bdceac68e8228c2ebc638d7d940e5478e8dee8008f9996186e57e40c3afa1aebab8a64ec8cf8c047078e4b7709315d56be3ee0b89d4ee352a4eb6bfe6c66d41939b53fbce2b92da2d1b82763723011c1e1ccf020e0f8e8f8503581183a88b21ac5625e0c111c280c35b57cd2d34d4a9d708a72aaebf7ea340e3bc78f25d3c7f8d8a910ba0d4d4a71a07948b790ec75f36756e73a6e8f5f3653ec67301e5bec3817205ea96d07f1cdfadc611f2f31f8e8f8b5c75fd4eb35c75fda43495fa079965d305e9ca5a1bd4850d5cd7c3802486c689a7ee69f7edd5aea7eeb7d0b05937be598db3e5e0f8eb6f78dc1af4c6afab6e68cf7de1cb93f0292fb6cae5338ff3b6c1931724f52fdbe75e98aa2e325ed8492f61eb502ff9db51165cdee5af8700051ac78bcddad8e0f5db8a7634508e9b3dbbbf5af56a968eb7d3e0f53a8ae84c0e2fe49a23222165c14838b2b8f1a9b09b759db253b651980f694ccc0d2fccf1342fa34366c70eaf7b1d329c8742e5f0b6c26c19cdc90bbddaf405153b20ddd7422b74bfd3f3bb3b79db735ea8130685b9421d18eeb4fd8d1b37baaeebbacfba9813778ad1c9605268f0ea80c07c29990f535dd765dbf65db765dd75dbb66d28d4771eaa41d4ef38ca737919ef487c799714223043c2cf7c217d12be19eeb7cedfe9fe9a06af8f018276eb6b5683978e22e8f4b48f911abc7e048fb540126beae3a406af8903498b0639af8170344bc606ca2c9797bfb47a3dccf712670698851abc5c58a5f9dbfcacb76d4362a4d39f7e1bd43e0499f9c60d666616900c3fe1a04dc6eb1ee5753130304d5d5ef38e1ce19091bc2f92aaf49bdf767707c9be307531737b0784fb5aa8c18b79de34783dc603ddbeb90d63a8933b3db7e346b03adfa781b86b0a715c3750e3cc7ed27db4c1ecaf9f1ee7a11acc7ec7b76665dffc266b6dae66d52b2b9a4ad8e725020005a855d223a58ea890cea4342574036eaef26f2177a47a94724f127222a4b9da7185864e84060954497b52c3ab89c610557759eaa126eaa2902a754554499e8268d815fd80fa604da04a6b5385862e4b4ad5df65c9e917a63ee9b224d415557f9f81d1e670ab22a2c1e2d86071e4a3aca8ce5cf725b636118a1ad6a0815a65415c6d98b11463941f7f06992cba018848c64b5ed9cb2ccbe425b318b397da6fdccbf8edda64af430ba765d9fc98e5405e58a894afc2e6ac0d1ae0198f65a94829a55c351319afacb4d1cab22ccb926545dbe57157688c31c618a5d8b6265cc26b54041a044989613acca0d74bac29ea9144bad2a34b195f46df88d4f81a9514283d8ed2bc2c9272e6a2ec28521ea34665d9a764dab6663b3541fd19c3aef0460719fd3c1384ebfce549b2466d2c19e25192001de450c4b37d808c676bae8e0d94fdfcf5e6cc6636b33985f0f242e38bcc63188d2e2f9d0c2ac6e5659ee89f2258e3f702739bf60c4329f58aa42a7d9886f96d1de643b0c27ca7076b483f2c0256ed27ccefb4e67500ac2fd087f9420ad42260cd7e63691f82ddbb7860a5cfdd8c045ebe7b165e603ec9f6cbc37c2cb8b810a9a787f1c25485a1309ef627af48aac2c00cd19d60bc93d7792fcf792e7f82e10ad379db2a4a9727f36211b06635182b6139371eb6ad45bbf9062d4a42f366a6d6666aa1d355931383f67ce1fea673c0e62c92aa51d6f02b27b16de3c49ccd2f7945ee9a39d1c79981b00d599e1ff7b82b346523054c21a76668cbe2dc785d7585ae944ea151681e5d9386c6526a0082c513d27ae11c41f2353caa4a53f1da68cf6b82c63c7db1e7da474e0713dd3a092c4ff797b73cddf568daebc8e29ca769d9cfc734ee4edab66edcb2253472ddb801e15fb9651b168954fff5629154dd485363b684720d7f0b176804f16ce708711526646db0d741c6f36f39507682bd10cf71792ceb380cbbc1b04f798ecb779ab3a3944ba530cd5b9f1fe6d32d8bd896524ca9a635b82b340ba2ea3e1445ab8573b1989583f7502fd151aabf0e219a6ab063504391f26ba1af831ca4a9dac748ce1f121012b38e20d1dea380a245dd285a5025a76e142c40aa3c068bb136fe8c654d184107dafd1e837b92bb6f65b168e81553535c356b7d78142c2062d6d6a6205a7f3c46833a98a8f6a7c79c97b4d0f9d89f3c5ed251061118368bd28f98993ac78f2e5ebabab7097bf046a7af0e6aa1d8421d14630b755043096aa1eb8bd9e904211226feb1d5bffd4f3b30ab5f96a0212ffda0fc1b146ff2a4fa671a100d9beb82b04e9488e825047ab24468b25958311b040eac0ffef073e6c763b4ca5f5ba3ba7f5a4e50fd3794520bb46c3738cd043464a12ab43eb8b59a25326f4b715a0e1474158785861dd4418d436573bcd567d0c6327d9082d2394c03e825f856a37a6701f2f89a144d0d3be8438f41751e35f4564d0dbd354427b1394eac8feb1b62cacf05d56d7020f27d1d34428b320f3f91318a3012921f21219941b3d79a8888888918480bf729adf2979f1f35e84847444467b050e52516e2a1ebf42edf52d6a87614b5a754d7c28f1c8bcdd1dedf79b039d9fbfb17eb23be4fe11f0e6013fce80bb78a2b5c891a54772684da86cdf1162f750fad032f79ab25249ef7a8d4ed364531eb14d10800000000b314003030100a0684629140249626cbb63e14000c838e427a649d49a328c8611842c8184280210408000001991999d90601f80308353ad1313a16b5001db2c9383f2574e72d4652ac1cd444951252a46e1783fbfa697d89b01135c2637258458056d5ed0bc7ba3bd2cfb6f942862e3f483c3ca3f8f80e42f1fb714d1877f0a4615f5782517d01a14b4a00ef1d7c21dee1ae0c0312267b001ffbbd0fbc6208787568a5bd7fe922fcb46a278b82f52780e499c505d868d9287d824d0a7f5c61c2ac774255534234acdbb7eaf646b6b527cc9818b20186abd3090fd81bb19a57fe1f0716ce61b77c4158571bdc5ac8e16dd5d31c38d020613a8d21e19259c3afcb80c16a835a761c770a91cd8ae0b3d92d75e86c28ebe5aea9faf8b6b9bf11202951c041dd87d5b655aba162fb62aa0d19a2306792aa4379d9c27c8780fce71f041e05796d751ab84ac0c89b67e318ecffc5ac171a270797a674027d302f2de6620c905dd5fb5e97a148d4d0b6b8d820ad4fc7d8820af0f274ffc80cce7eb41100c22e7e28baefc6c4a6e71090376a2b3377e3edcd2fbdb07d6e1f3825220f397e09fde8d1b9ab277403a212a95921325d0d00bd3f95187a14d76817ad340824aa5cc7594e1614072943229dfbb20729928dd896100381043e564a2f11341f7ea037bdbbbb76de8738a31aa3ea6583252ba585db8e71662ac3e66359608de8683732f27348627a42157b3de7132100c2253ba0fb55355fc21882658ca58bb0763d8b394864855a8bc6601bb7d025aca18eb146c97e3520786e5b4a8475c4d681137afd4b123270a454ef8ba61109c104058a78c14d53be133513cb4112ba177319473c6677d4d5f6d2d57a77e0c78ec2ab24a6cc40fac170cecb618cd04dead372c764b0b465a024c655dae78354cc669586804b2a5b95b671902744b957fe52c24a50fa7ae63c13d8f419ea567d356e0c87d84aab2d32550963ac15f8790ed6aa7a5cad18cbe7490638e727acbfca640b5a75a2d0e2f530c2442fb7945b573924683d572cf170b67ab42c41538e4c0c2697c9a85c85193f0518a1662bda21d9f64103c43f18347f38701245f7d359cece22f80f200d0b8984a8a65599ec544bd0c881d2c1dd2d71934dcc516812df09a1170867a27c5501a51f12057537441621e480c274ca5533b7fd341c52507350ac49747d858bafa27ab253d9aecf26b6f1c6945f87a56714fddc57ea9ad330cd4ec25d82665100f5b0748260e3b3e09f6909a168c9c6d3c6910750a305d1e23be104db35416fa5e1f3b8c1bf5219264c21e313f6a0134eede816139af419bb16777b70809a13f08fe7923d6a80ad4610f10238ed4b7dded02d9b26d56c218e84b17f615bf3370d332aa4c4d09d5032ab7506ada9097fd30aeeaefeb8c22c0d525b1e1a7a8a0fa386c81582318f803f6a3f5bec7d16be894ea5a02da29938c73e13e4319f155bbdaeaa9ad942a26ced539a8ba5068137a3b44f15439ab9493a0c61f3e7a109db82d8db5c272b0c744d3ab6724262ffd27ef945378f60a56ccc0e479f60e980589271c2eec9bf755dab34aa3a626ded40daabff5996cd3898d36f5ebcb1bb16b0503b63fc4368a07ddbc16faeb0575857c9b4daa383f0ba821f0410f328b1672d06158dc319fa3b74901ac2448c7bdd17262aeefdcca7c952c3869277baa0254a535a731647488c653140abd93b0aa47b6bb7a1fe4f578323c172cd57dfe74b1fe96440217805ed30c62d3d46a97da441ef1287597fa4adb53bada4a86191dcb63c3185258a6d0b5b245e0c48f6535b4502a3f3937aad25d5b794f1fd855b7d2e67840138ef25fcc6df331b29f7ee77abff9042ded54299b7ad58cd360ea3642673b5677a5fbd73d9dd760ed7694b976173b9aab2e5f303a83a196ef4df12f67ae03f0e2f35e7ec23fad7aafa269ac8795a1dac48710a30e8bd6849704fd96652a5784db098985bb1a1919aba0d98476f57fdd53215e642454841ce1e2066af6f508c3a550dd4bc5a583fee2c0344cc650c9a8e14338b030624effc2c40251fbad5a5c0d7ba5a7bd0cea038f2dfbc0ce69fbde5f624da175e5fe471897779d1b8708b1ce9ab88975175386e6f4d1c51650a479d7d03a79330935e58ad44ec5fa59577d12730099c3848ef2c11c9a12ef6d1fd083ac0f621f6a315d17a71adec7f3c556e3e66d16031a797df9778c885c63470e03646316bb43945ca58414e87ec9e8095745f89d0e4cf057f1e621cb20f1cdfae0b0ca0845712b7a262b7e2607a18107e985e9de0f9d4ce178ae99d5dd32bc5172c99de7097d42643e2806ec6679ae80b5e7d7bf945c998e44bf399404f3f2d65b3ad32c3a03f678549feb401dfe1f549a2691b140d9eb8af2aa652dbeeebe511c0beef7cbed42076b078481a7cbfa9fe64f0055f38aa4069ce9ef4c6d34e49435fba8314c9b0a93c0861be64ce8674eba52b7b3af82b68300a104cbe803f3eccc656618043c6d906bf363a188b4c875d3df3e64749a050176084d1bc4fbf495d858847fd0d3c2e39c10f007c70fbe1ca46c61fcd7cb14c559936944ac61e9bc244db2da2c58adf262a27ed67882029d79f2810e3b951a88058336e980bdc0d5765d24482e46b55620d388a881ef9bbba85acfa3962e34011049eadd7781cd8fc3165c6af159c1b4ba991a67cc9a646ee94012806338aac2693a00ee32d2eb92cfef4b9a880d44094c4f0f415bb7493c9e36e2e43a4a4417843f83f0edd83ed9d3288c11945eeb7767afdb53b445350512d3a5c479f6526dbbd9d8375d5179976243bec84dc7505e8dbd0765c8e395deb96c9540db002bff31a80836adc254ef461cf6e97a09ce63cfd6dd4f42c17bff2d15a2d4a1faf340e80934c6d363ac3944594cba09fb472eb28e7f0b01453b15483ba4baedb3d4bea74a0ca697175c9c22d59fb64a637ff7b10f3ae9663b0d6231f7e2dbbd2941e6346b764fb451507e119b02ce6ad4ffa2922b493bce248d40f06e1fc3126665c6c60722b7d3df791ed361c4cc520d8f968262dc8b1e3a9b5ab0cf68914897bdd753036bbea7f62010ab130fe590ae5b0567ebefa2311937c0d1402d16c01eb3a2bb49793ba634c2c1be4f29cc73c0ec0c5504610275af494caef80ec7528f1750fb2ec5e9d2ea51e0b0306db39dcaae7c0d49fc0e4a709dca45afbc0b3a212c5f18033cd2b00eff0fe0d23a4baf9c012217a67581f8408e57e43fb3802ec8f95c3cd958c5c32c53e205e54b1de4d4f3aff423f0855ace1a8e89261c4484577132d9c555bd468354dfbebbbd3c0be90b20ab20e1d1a694e44f6cd7906ad1496a0648e2a4a7715c0d85ac2f5efd60a1cc7213285f6e901555de622da3ff9d5b9b119098bd7ff7b4a848a6cc95798726d5ad392584cd7847e37c943b24012dc8590b27798d7cc1228d1a5b73a8c1faf79a65989d1b4f9ee70550e923c6a86524be75b058fa7c9087d8263d50e648a4e53b7fc0a7acb5644b557196eca690eb430d996a320ad33669a9147980126fb49b35d2b32495915c5655e74519f7bc37e60087961f667104b156c3ae90ee8f75b17432c6960c0401a22d386cb6024b45142b7c9ecaae5f6474190098dc1e9c9deadd011e14d084c02eb12aa96a6281a6e2d150e7dff722a0e16ff477ddd47b37b8afda20355d6105133dfaa85e300baf96c2228030af8a0c7778e34f658bb7e9f7c65a1ee4dc9414d99b480d6bc81e92062ed47ab59d665d9a650c59cf93b3dc10e931a81472faec6213c01e0a864c5790d3e0ba84f8dae4820b9082300e36c6b962a4783a393ab6b676712f4fea1b2ab4e57017130e6598ba4de3a2ebad37f18b3f76f745aaaf921a9c79ec5c05d3efdd7410268af0f3cddae23a24db9de272c6edd596dc8943b0e0990010913352100fd78cdf8dd4ec1d6b4e96c14bbb2b937f5396bd5acf9caca51a0472b36c7f15fdf2c9c70d0767fbea8918eba57d3e3e4b043ae8fd0d8ac604f2fb8c79506f66f11de152e0941ddbba014e7d9ea7ec7e6131e69a9fbba567a43c1800d2b458ecdeb66fe904403109bbb718494d8df6561d0f8dacedb700ed255d61fdbc6986bd187411b67f04ffdbd04189af04c44a9c6b8f5def4f4236f0ea15593841ab3c270620e828792886ae39163d9c897faa1eb1ca7617d37d1842ac6c8c2097e939474541f9d5e9ac87ea63765b558ae126c2a3e0b385ac2a1a5804afaf4e03370afa63c1af6094b68d193e886f819f34571aac324d3b02f1c3dab76eea8e7ac3a583327abad75f30d69a070457b9950c76d65bdaf4679ac353f14118e86118b7c062a2c2298348a430f35e0e2246fa3c109a1ac7e5061b3f80d305ffc82157f3ff6406f827464d0eccec380bee6907194bac30e1f2c1d16a3bf107ae1cdc22b1ed091a08b2f4091949e2f1486553eb897d028a3e8150734fdbc9f2ac65e117a29af95cd268e33ee5d1f149be500160b196fee349dbd14b49768495ead9226203d3d8455bad24e2e5b6a0a734a60ed195181abbe0c570cb0012a59f66e4ae87cbd3055ce6a18efee896e9806def79957e3db6deceec49d1288b5c3364f2c35a6f3c3d456eead3e38ec53a8a8c6d331eb7af466926f03cc7dd986952c2ef4c443b5042856e19a999ce8f9d416856d2fe10528f6274be1e69d7d16450ed9b477d64990e2ee64fb2e0adcf05d7518f680112963530abeb377e5a8226a1cbcc96715c18b441f0c8cce52069953d6184e879ae5dc019ba064bbbaf678f29a06cc74ba6ba3607c21dd2062592b3995d543d5c4b45a56e2704ee5d24f8d7da15a87152cb8e5d43a80e32b0b2543212d8ad01683f630051926560a95f531708e8916d60b865c6c035fae5f4e3b143496b01411391f1a59071179261dd9622628b454edc510f59565aef784b589c7341b306729cc2a7027a6fb41a9dde8d862d2c0648c6a7c9829c229881b96582202981e7141487059ed3aac6f1cb551a09bc428df665e6d1bf6b447079a9abf97177f5192acdca45fbbe90f6f6ca630fb70f6c69a0426a607c216d4a2891328bb1ebb123c0c962e9f748540999ddb487795418fbe7fabffd885269e908e568bf504d59654ed4509dd594626426b20aea11d4a802d27acc308411c48dda91bea167f811514c5bffe3e4352542566b0c1c3977a6ab6c94c0286d01b1b09525fc330164946a7af21f56782a256ca0c9e3810b963a92b433ce32230e1f58586dfcbf870e939d18f08e5941155a031f649b456d9d7742c93dcff5bf075c8e6ecbba99cce10cd6577eac0d836fe3ab8857c5476b1b550d7b74b9de854917fb92237410268e66e5d2c8e11a3266d490968004de0126307eba18a4f7d40977699bdd4e08e0f825a1e9a5fe9329beaaab8c27cd7f14475746747e50b345da85eaef13cd772c80f8e05480874f7fb92c300c38d83c80aaa7786d6921442134c87d772f8c35217f2ecc88568e7c887e72ecc94394aa7535e8bb276e0a59fb7b5fff5a0105f80a0e857b4324124aaa2776819ee3568124edec9193b87db302ecd00d1f58d5a67515b839d057f12e9d27620f73a2938da8107f322e85e28b6dea7cb81a716bb4e748b3eaca3a22a3c3aea6053401c43e4283e2a169fc09d7d9a6a095ea73c9c166511e0e19a6399d4a28ce6ae6b170992e1516d93f0bc56e8f61ccf24de05a51e3482c9fd6a9166210ebc785a560e4d9085add7e7449e1d5d1a6df5228cde81cbbb7cf5060e7c4cf09a55a89ec2e176bb4858254f8d2865f0c09c0dc51fadf2d45c1a1b876d40cb7a305a6ef07685c66aff1c4a1bd67efcee687abe5ca486a743ef4bd1d97d2d656a9ceb5a6e37043b2f1cb6afc2e5c9e5643bb0fc1f4e1913efe2571bc842f448c2c510dceb4557c1d028a3c4f515a577e5f6b96fa895487bea8ac886fa085bd1a07bead407b02c58987709755a78ce82e89d8caa0171812106cd8a57a8fe592161de494ee0834d36e80abc936a2bfe39d213d9ee4fdae65f7b55b154d92e8f0c76116e98cb7b0bd2bc40f73bac32a5119d20f4295126e5694906cb9f944a5a98ac1f58f1b62d646ff06d0d5a2b1d3db1d0b5abfa5923d9984f5486e4790c50349c5de9fa0035a9dd094894b7129300c03aad79ae83d8c0bdd5cc608f3388e6d58d6c50d10ca256df4ec3e16a9f82f083d3e0d650a68a9b971b711f0e9fb0ce226ab20a0b359dbaee6ec52532a923ea88e2e1f5c217d60bff0d772e3dde8f054e11cc1e2d76eaf7c09e24fba30b4bad684099e87a753de769c6a2f6bd915c88f0cfbdb0a375e23e965deda386ce402a7d10dbb7d88cff83468403ddd21cca995b54fd3902fd5924ccaa2f681deadeea33292ae1c86684dda957aaa835e7b17dd8df0940d7a126d4369da5b877dd2223328cb676042ef2aafd2fffc3d1ac05d3e30989fa288c49652970fc1faf1006e2affb8cb1e66d9bd4ddb0c0bbe89a201b32b291343dbc217cc90ce1e227e99a96ecbb8657b864d5d0602fc956eab35747fc1ffb8d0203e0a420a2c4283b57e7f6ffb3e3b26e0dbd58ec1453298b559b43eb7c1619ad6e560cc9403a4d5bc700af66d07503e0e519cc7773d7444e38dd3d3ea00be40a699d268a3ea60e194fd7f3d63c64c9d16cfc427ef394942bd390d1352d8555fc7f887adb521c61351e196e1c02040b4e7fbc9173a0b135feaa9106358553a6e9d0981366406f8f3c64d252cb3872a265681db23ca8ab482d7d54465345048a7de2d9239ce2a0488b026a21628ab4ffc9dc1e9721752cd3f57a3b9be0d9af49973931fb8853b004b7690c2d16d3fe5074184fc830395e96646bdb554e155473c79b807e5374785352c280aeed4df7e1b2a5088c9402a4136228feddc261370e78762a2f349d367113428a68bd489b38f8dfc72a9c967a5f90deadb92f712aaac6f57bdc812fd93c2374e88520e3f446b5975ae15e9952447a5815960210cd1fce7dfb0ecf6930d5819a04092e089d0824f40a3e89b4806a518f23f7f3cd99ba866e5d584cd30f94acc52482e414c8be03ba3f8e36d03b58cec67bed5907d523749f09f391815d497c4d246211cbe5c0544fc38e8c8e95a1dbf03ad38c585dcd083c2863cd14354c355b9d1054ce52560ea5f172622682caa16b612d9a182e4be9a6b4b001c316a431a2fd5a83a9a0aa1b184f3ef10c560755b4f55c6a8e1388986feb4c92bd02fac6fd73fd436475d0036e6289b9e8d4733a504665518db641ca23adc9cd74c8271142fb24508957942a98b019dbd1dd4637120a33bbb6239495e18e616cd7aefaf22da9c83f611d7fc343232f5806520bf5db199db30c8954ccc5ea0bdc5739a4c8111699d282dbad80dc515ce3e842cc76b6c5d2a58440241cea3af9974caf224706fd8997a570f09ebaa0f1c2aacb11c1dc5cf70310db8308ec71f20afe71ca53c86a543fd036c025e2b7bda7d94a02b9a213cea751a5df841be84545e8b312ba52454a37d703b7f5cd9b7a8486f0b4202d1e89c8af7860519447a7cdc9bc624f2c5089b03a75683425e0a372035b03d8ac3582f483231c4a6ab48d2599c7def3b526f893883261a5dd4e9509b5828997aeb5aa238cd3572f2fc1752de809a241b558daf51d1c31585c8b7a4eef091a8b4b6ae9ee666689f52bf6c9a3571c5572d13c870d5110ae72e455fbcd985c609d689a95034279d7abbd9bf0604ea2c922384d3c7799f5a457d49a6db300005621217e85e826fdc8266da1b2ae1e16a9abb1e75fd27446592ee85f616553d6e5611d46487e5823754f1528154482f2fe7d1a48bb0073274c428104ba43e666538babe14f4c9a55bfdc811c8d64ff9a1698e2285dfe3c1ff56928bfe2e0fa155c8694851700b074767ab4878b334b7b30fb1b8c36bdb075b816bbe5fc5b58bab6d8c6073d9ced09cb9b1705e0742b1f71b2ed442d9d099cdd915683476c9749acd0163bcc2b67e1c9b3946f104d2ab4499ec806b9fd8e5baae530bbbf6a4f28e46408628da7dab611bb8b136c14aaec421d0243270848fdf0aeae0ec2c2d57d9ce6d2f8712ad32c1176fdcfbc1e04a34c9215a1d561f83ddf064deb50985959fc4acc9901ac4e277035592d3c8f8b337050a57a876edd382f6d4829134531486706b36f13ec04479c802a32348f6f515642076277d02ef8ffc0d565b5e0111945506ab43b804667b93502ff1b591a0f6861a9342249ab9fc1f8945d97060b7a5d773c762f803e11038e299946060c989d723dd679b8e95c09e31662afac91d9b75c7815dd08fba85e0cfc592dad2a24f4228f31a44492513cfcba294f65200c6efce99cbe52869c6d2a1eb300adc9b09a57ea7f3a3396774048aaa0330bac368d30d7276f01f8541a99f955d785c72f2d80ced3a6a64ba31d4265a99438928000fd70de203511998a7f642a16831e52d4544f44665396a864bfe7729a6aeabb919054665f68c5174cb5d42c0a0513d874c895532f48853ef3c061b2f512501ca6cb7915bf1f7b5e242ac77b961f79564007323a0e95ab19aadea38c507c82a93452887a0f49452e8e4fb99e9c2901a113134b150916ae88caf543a42cb1ab9d254605a8dc581c8139253f028b43fd0a5f6a0cdd943ee8024ebbde1c77e6f0655646666c38bdd1b04722ae0ce03714cac8741c8ffb15f74b06820655748fa3ab6fa020dd30754d46ce0523de61bb3346e48f16f13e4c6b60841ca76fc96d9cc604e0f315921ae0b1d61c2d7653a09b7aa67ca7572e55017c5547b44b1f0275abca61315cfb66a37561d4dbe7b4844ebd997a5697ae3160e7062708d025991a991188526866c15710f5328ea1876a5cd2edc89656de5959d747b1ec0b54161564fa954a559ec19e4dcc14e8e4f50291c72fa341506fde093d0a95cf84b57e9cef41718642c2806771e19a6267c460cf6dd1274b2e8acfb1a05c03cd42230f3df973f1d8a83af50c92a3e5cfeb287a22090412aa71a0b2c10516871f71c8c77d1c64a69219d739d5a306c2718b20e69cbd668239dd0d4d55f61fd41cc03a7e1bb61f80af01981c363d51e1513f9af0727ab228c61e16e0d2b64aae9f1253d622d01040ca062e871fb94591bc6d809d5cbb8286d2e09d384724cb292e93b069c4636fa458b6f61e57347418b53cb6a485408e93bc05ea1105ba38f6a058c65a2d0463b91e6e5bd68abf21531335d9ea4feca9c6608ecdb0418c93810b3875c68ea480b0d01059167dd4955121884f26ce27b4bb785773491590dae4142652afa9f53f41ec44af1b26d76d68e9f145f38ec26a111c5f3e422a86974fc49da3673075d9783cb8b83c398bfdc1304f3e30728a5b9a559b7d962aee9876b9c38f8de6eea0e578259bf4c161e722d09c0d8e74007c8926e07e2279492e1af730909ee7cb15328b0b6fad9fe566b0fe7e1a43d0822a9cd034e8c40f49516c50e9afbe4f4b0a6eddb25e02f2f68e5dab05f5e46c9a2550b6c9d9802b0add26e4bd8bcb0af9f80694c87c3a2bdf464b8778045b20439b7515828b620528e5c42bee18fc77e1b7b1bb6152e8a92cdad84a85a0252cb99324b50180f21e64957e47e783cebb4caff2f3b694700dc26fefb449ae001cbc0b6a550abcbf83b6c626646abe27251e0f05b1689dc0136ddf50b485ecc84dd840e741992b8c1ae95298e9ca8f586ccad8195b2bd55dd593d2b9786fe64a35237c13a412410d85da89388357ad2c0948b9868a06c9d3bce077dfd503d22986d0cb12a6d8d580d24acd69a2865e955b88d4663b2369770553ec97f4803675290112867e7d6fd1631764f161d9dd49970a6936472bb3f30653a386c78e96abd7bd614cdc46297c0fa94b1d9b8f219c9816ac05136097153097eeb35126e91d1ae115a21d3fab9434f464ba711408215f8a33eba15a4555ac159bc0fcf576abf2deeab67b9f4278185094eae4a12f09153565fd8009513a2bdb3b2d93350f6fd7801bcb4b5993054503616db3560f411ee3a2d877dd335027df2d13cb511fe05e3fff4133179c6d9ca987f0fe6da5387c45ab169624dc5da8c6359652865f686aa6b992a62d9a94aa8ae3ea3b01ffbe20278c6fd41659a9c7202e168fba30df5f43c94c5404317bb5ab45bb97324b534c35596d94707cb50cde189bac72041dcd30a4f54c301491843267a2947b9605cc781070dca38adbbb6441be6cdae86038100fecfa4622f0cbe3ab3891f40a86fe4d3063c1291bc23e563c8e5f5b5855711cdc121a296d786983d0027dc4601412aabc8800f6c1fd814b56ef335b81d72ceff80a07e3b0413326c4ba6763db15e5abd6eda666f9d395edf8ba6a26bca2b737cdbbd4168c65bf97fd100121d08f2f26d6ce36938e306fab71f4addd360ea30224d54928df0fde986afe61ca040f99b8c08d007e0345a19736e0d43af44ea2a7657717a0cfa0e5c95bd06cdf2d9b2029fc2706e367ab310f30a5940bf76defc8df2478d433745cd4bb2cd5f540654ddad1aa3ee058c1450c12f82063902254b440042056e0ac27784b3a21decc0fbd3d47a1c528a20d4531f818ddecae117e93e5804bf417074731012828ea39acee978a461f36db8d4449bb04da11e1a98a25586fe80118880056aa3f6953d66ffffe8bfeffcc2f6402b9dab6c6fa40f0a11809091865911fa7a03f7c5f6daad80ae7827810d2dd6aef831c4dcbcb7de67da4fbf5b59b231636135f60a3ee71fa623ec52ff788075d8f6e211b4b6bae7ec68ba76c44b4b9c7d96e2314ba368d65ba49a3fc50c1b36d774ed75b70044b173e5a42fb7da9c69fa94e7ac7b68d32a45b116426428cf49b16c9e50119c40bffbe5ba03f9847bc5cab445864bc96fa6af108292a6faf8535c598403fb19dcd0aa83b0433250440a12e6a840f96a517cabc87e6a3f70f5616e25b5f336e0fadfce8a48f8ec317e84b2857a8e57b8be28e8673d514813f79b715c5b31f5282d96621b98c20be1040f683dbc6056906cb509f5173af71d82e476c1ebe401d7c5a18238019a83c60c15456716910c3531f76e90eab77ff77d0d46b7db2dd063989c40847f4264a90239ba95e15aa5df0066561615cfce1876d41d4b00b518d5bc9e3c60d9c94637bc7c2b40473b9927f7c79a77cdffd85022dea7ff50ba7754003739c992961682b352e3bd013c5be83daa17e96987c00c543bf6846f7c2e289baf0ef608330e8137c9ccca047807b9375cc12e708cd345c6dfb7d3efdb7f36fdb7308ec2cd32b0a5e274868dbd6358ed938ab0418c94f055d804e2a0a2705e6e9a3f86b680129fd8d922806a9a7ddd38639b17fb95926bd073a5912734834f752fdcf78796e71a479e3cb0b4104d90e7ab7a9fdba0b5fca6c7217b06a08b7bbef2fb45d8a4dd44c2f46f860e0752006c8d7574ecd9b59278ed03ea00e581675410287441749125f4ad2409e96d1c1a060016b8a4286f06542876cf2ae7cff0a17db23f6779069b108cc503b3e6f88f3fd28b704118a4d10245fb5042e86c4bb81a75d5fd71c715af9d0d52578b4aba31ce3fdd1863e0441b6783afe706de90a610431ba5a703644da18ac234cce73b3116464f8c7ee0383107fa979e4ddc8db17c0dc0f11e16300bf0c5e1287de8c04762cf3def9c5db5e1c3d20eb01e20afd637e184f972c0e4bb074a53785a1412a2beb0d880247a428093db80f0eb1072290d47b26913852ac0d83ea98d41656d87bd2016e1442c9d5c2d56f1051203b5c02eb3bb0629483193d619538a2ca17686908a92624017aa1d805d83db7960190ae7bed72221b1f3845148f263720381a92d8c033b142e30bf9094737f41df8f76db560a27151fd422b51c007eebfecfa98d9009de98d2432a03c21d435fe3ee10a70851d1eda513a0adca005220597bf79889596e750470daf3ad4bb4acfad22978027f1b18186cc2b67251a74778199729ec2e24a950065c93117986293784c4552ae19589bacbd2540e534157051847b111b2fce662b3731c065595fdc399c76ecdc95d22e512d941da82f7ae97a9644e86a16901d2b0a9b7517f019856f411c0d07cb8014030cfc140bda511b1161445ea04efa6e3d409117b0c1ee46dbdaf1bc5ee0dad30442dc4884380176870a56b0a7278b027a2645e66fef4702c2400251399b5c6ef360d48dfc1ebaf7bd8a93194b093da4885e8d914de05bc0c863bcffe9f15c09a8a14e0768da03108ef51202aa7760d8d33ced4280e3ba83897c16e4cee352f1b3c04aec5106bb7162f52867769a4c06980f5380362c066b280508d6d1cf3e930b14268ec9343a6bbc31174db9eb36f474ee40f11ce2d64363b9b829bcc576f9b03fe71c73c9a27da4f0a4ffa4509e8c121bbd9eb166afaeeefd0332f0f85648efdf7997edf28beec0ee6775851e54995c8c355b3607103fe87140a48e04a0863ad329d930fa9fa9cf04a7726cf7b3985ab1ebccc98382707695a952c12c502a386b55d41cda9950f067f6289165f7a0c6de1b419ceb27bdf7982eb83b4378868a082d06452c781afc993bc8ea2e47e4335b2bfb24941b06f3bb2f81d3f44876b682ea17fdae00f2eee137152c7eea0c4789a82b436efe9a8cb0f4661d56bdaed9a0cd16ceefa7987d259cef75c21245ee08d092812e8702ef1111207165881bd25c2a54781afc4e01f4168c615c082842de2c99d15e4ff1402294fbfd2a192846e345c9c78372d3a1086181c3f73409b883801150317a1297dbef0cb226434a7db1fe36428fd679f29eb8f6a6f0d90731d85349b0d0aef0be4c9d8278935e98f278a70b84a1a4dc26fa69ebef1c8afd3bb57fc57f76b47501e09f9ca01253ecda49e25c83469306a894adf2bfe53ba829b5ddf55513e69ce9afc0d493d3f1f4136f65a478d254dfa0c6ead6deebb903f97cddbe4bbd9c8ba0d80db3495f895771a2d192340629b80b2cead7f1b3e40cb9df09536c20d543412df5dc32a7bf4adbbc72681c7061d1e91c5e6a3597b57f4d7f4ad13d9bb0cd8a2b56ea397c082af7343335d74e983bf2f50915fcca7a92863c27c892f263e1e0f9b5651c68d60fb6cbafa0f9478a496fc1afd289308d83e62a35b7e9b6b2c276b4904fad2f67d6fabe1461c8bde0ad14c33a0cd39057d05f1e28a99a07d0e7ee597160ec4b4bc465c3ee8e211b295cce0ea3c2ebbc7e9319bf9d1b1d1df6aa4e02a4f32febbb46f77309ebe460fa7ca8b79af8e424b66fc6195e7918d989ba2cdf650e9871807f32d0a50a0b0bc666ca23464cf4486ea8c35d0bbcaf92e541a8408de354f2d49341005e2697d5f641501c1f878f831c097088cd49584c6955f7577ae86baf48699bc123254d5a657bd2f5bceb70d004b60e93613613bcb0491aea6d8101fddd153237d8bceba2b25f1e42446ce77ba48df7a10bad8ee13efbc9ea1b9e03e348bd8be28f1bcade53b8fa996b63511c2894ec7ead328cbc9c7ee9775b9aa89d282a6331505209dbbe706d77d0db7954c925fee7845bc86cc109b5b0dfe2149ca8caa44e8cce1c70f4c4f742d69bdb1e8878fdf303fa77939809f2ee0a50ee704a4480c910ca54f0da9a2561f4511134aae0668a8c5d407d04d39846eb506f3cfc009c1952ab65f75dd8ae5378aa35e47ace27099b0bf0529abebcb83874e70ea27d3adab1a40cf064b14d164412beca1ae5d5e59df4c1bead85589b77c25a57da82dc6a8a7dc8eb335fa70f053e6baac02135921111ed2f056bc00cfedec9cb27b5e953a327f0102919c2630c4cb422c50cfa9988163abd61815df8ebd757f4f7cd02553e74b52d50bd453ff9bc2dd6d223d149dbd52477119ef8c82692d50baf5e723e99a4cd24f15e6257577f23e5fd2b277e1f96983a88d4584d63bcaf0059dace5f2ba8128665b35ffc4f4cc3520a865454b2ba9f6f4be1d73323c24f890632017614b00771b4b952489bd82533f26a78e6d42456a9c0197f1f26b097c2575564d53befb301890f7b3e04ca87e7a3d247e2bd379340ceff18002fb527235651d52563c2ac101b43da7def44aae250123d0f812792c4aedef7bf0c1f530ff43b01823567221390f4d69728fda94247f5f678b0ca306127f157c9c3a34ac2464669834227a92105ca57cbb4f3394a0d4e2efd2883c50ec795ae5c5d144042e932f2cc23b1e32e95d1ee323a88ec499441f6a2991d096f19cc4ff69b8ee416be3365252fac45eb542ca902f21957cd6746397352d7c0bd98b490f91b133d0b49f78811e2d4aa85d19e070e266e6b275aea76d2ae6b46d8ea69ff78af527b6ba1bb1cc821d1585780ea3e2cd08bbc7a04c9678b8629f50baf160d3d145f4fd5bafcc7cb7fa8c563a2a6143145ac122f7197a2a20b2a08d5c4bab8b69ce6f21881e6897984e65dbd864e4060384088fb9d352c52ea5927520add87832878cc801c47a2eb0d36a452b627872487252f0525e7fd0b076b8122417df7309d471ae2848b76675edeb2bf2448f6f11dfbb1c8ed6a179fcbaef21331e93cf79ee2aabb3fc0342ef1be673439819585729845970b92cc41c2626b036180a2a1d969e0f585c432e5f0662bb914d70aba9aaa34558f4c19636024c8059ef5c39d5c32412c8d5d80492defd4d5fa25bc7ee4a1ca83cf0fc24c927742093003d0a0dfbba0a5aebe331a235089abb484be1931459014245bb548bc9ff6c1c29c7c2477ea0af21c977e61fc37497f42c8890893628a0bec325f3395d58b9a08de232470ebc484f85756f15fb419a08abdbb143de18ea5c0625d8edccde1e2c2631f247d55d0ece116b5af343f5c2269eca913b7b5991232226895c8302a04ee0d43baab0c3154e1ceed7042b993c270ff1f449e050ecc9e87eb9634f041301a270146f94f248dbb7556340eedc4ca6d1045f2507e67e3c22278c58a4b635e183f03b3b530dc904b71cfc13ca17cedcba99e084597e60c1f046a39800f047f1c98d46aac855ee0396c408d4f889726900bb25e105142cb5c90009ace15ac75dc4844b0c76407237fa050f040b88d1d9ed1eb49d3a348a072098f55a4683552c615138fd922d657b95d50d9d32c26b366a70823b9622b96a709e15f86f060f2d53aa662be085c762a4ac1066dff2f7b614ed118cd92df3786d222c7742a194737c6b42c215d39e41858dad1b1e74a3f6f313e366efe0160e9556fd9a0e5a5940e78501e22bc30c23af43db425f8ca646e6d5fac3f54354b21a7e4d5e23834ea596a92b5abaa3f026ff64960587bdfd95ea4fee086b8eabbd7877cf7bef2c12d2ebf0f0b0f6938e98817e2979d131cc5785a1669ab3c61685f413a2c93da935e0f3fc620db00d704c3406ed2e0fe50a86470c9bdb4515cfd891130509d13cb3e1c33eec53e96aa516cb641cb0ebda2f4a8bbb8d1e1fb028e2f14e85ac1c56751add0a094c63c072ab8dc596dc68f3002c31b70e9683cf1776f3b8844a8157a25a54ef1c052c22557bb8643bebfb88a263c6a80cf98774ebab33f0b5a08118aedb9ecb684952f1544bcf7bce77bde116fab0ae2b532453301d3ca10d3145bbc87cb206ef7c070b3f64bf1143a28359ea8dc6b04682fb2ca7d94a917bd9088df81e9e79be27ae77d6db9d7c868427eb536321bc2a32423e949851ab0d67b9afc846579f68ffe3c5b5a871d5be8e2372ce49c13d8708836d9c99a31156a5eeb5d51ab6f08fcda79ba5aa1719b94db462b3f55c478dfb326a2d27945cfb0c1f342c37eec84760bca01ce680b26c524b857aaef9e1e4c08edbc99709a82fa10468eec528f6bdfca2823f35eba7bcf2bec717474b28ef7be15105f682e2b10da058b46622f038c4503a4d96004a2cef5890ec4e8744ba0fef873d2ae8e7c6d35a1e8304a84c83d454d6d8d25c13597774bee85e78d77713c26795687d8a3c73697d7715d8c8ff656a57d567c0df4277496140c6484000c303f04be024955837d48c9db6e0d5e2899117f39970b3f0115b801e1dacff699374e4927b9378650a9a4189af29a1638a609401b3bf809f8b25a6bca2a8f5c642f694a0408bedcabb3671ac2970f3cb5fe1972f83250a9fd3f1a490a855d325f361a2c03113e8798e353ddeb9370fa505771c407ff9dd3239c42ed0cfd26c5a73de49cbfd857e4a737da2072c28c2849aa9fbf96ab2920e142a694c756f8e410ec6f24447a322d65e263d35afebd5dcf2da2a083531e86bb35d2285ced035db09c05ac52a10b9065db405ad9785c43d049f4cc85ee8b5e87919a93c98fa2c651454d67d745ebd268265b2aa3db01172ca2a9a9ebc4ac0c265b538f126eb38ccf4a4097032323166bf9d98356e2c439f9f5b932798004ae489a4b6adef1ddc07bd115732e1b967fe32f0249fa3c600abf3910007add946e66c6a0fea9658222450e821c09d169f781c216fcd2e2da418688bd659176a12a0261bbbbdeb222d6704a5086caa619163e2752a07f4e20c7cff41b2b100b06fd8fdb21bb4983afccbf3c13c8eae07610ce21dc469418045df111dafd9d2d3628d762c04082bad6eeb62bbb4af686ce5d4b3a7d34091a0d1b062ffad3a588026ab916a2068b4baa43ec505112ffc06bf21b54629b792057871b1c59d79bb59335f086870ae621d330bc6b6fcf842b9fb44e91530b61830f9349ef867b144a09f0943200e75951129c380475d2a3c690102eee9a4977cb207905c32c70ae4290679009bb2808766b00e84d1f3557848ec3b49b4ec91de8824146a6ec1013a987880e43ab06bfd5db40687b618d0418e309dc659598ca159cbb088fcf5e7a9b8fd51f873015f8d17b868935bf8736af2bcfff953082d99cdc9a74c7fb33a9017eda8ce96edba8df224db5b68a99b6c7d015e503de95a7fe9ca64b49f7186031531e23bc16e77a2c586474ea65414133f640784d2031f65efa37bdc65cb9c3cf183837cd6a9b56c46c41b059d56324b690d30e58427291389566fc4914da22c20116f28bf964edee68848a9e153c24f1c8c3fa66ebc06abf085c2b554b7e8f9b18b19df3769965fc7d892e8561d79f3f757adb10caec43122c00ba2afd13c2f80410beb949d4daf16376e1f2507353c24d4e8d33168bac5d2cbc495ec0f0a2c6002bb5268ffa6d4b0cc7c1e7881464ee47106790d8723a6235540a96101d0720c796687e90a2f057ed9b643816b6ff2e2c703df95774fdfbd3dfe0961e8d6d5464eb9413fa7e0fd5f622382dd50db2021d20d45f023167f6cb9d3b9b227c2bf2b36a9278ebd7b2d1d1ae288097851d2da7db47f4270152006fe5bdcc9cdf8544946aa032173be011522f80f70fc1b8257b2fed9169a4dd0dcb001f99824d6b41f9f1c21a0ce8a0c733001f70c3c0f811c3178d56df79f6bdb82601fc4cc80f22030be061290070e49636e5b02681740de031aee5d1daa017c9ced16eeef713201c0de09dc3d34b06f0337ae1c7adcf0c05b035ae96112147c734c1cdf58a7b24ea0ee0376c6404f82c9237d8cbe116bb3a03a110612b98961c724d6b694ab907e83758d5331c34a643f0d54a4fb20bb37c51403633c7b496bd2021fa3046d59c16dcbafaa436173c3a9f77f3a653c094c3f67d782c68365330c833f58c82569b9e568ad249092442edba319c1096a41d33a3c4a909751f8c524216ea3f8674a93d53cf48d9a8711988aeeae7bfc1cf8454674d16c35930b6820a91d076688e12d1f67feb39e8c71be45c9dabdcb65c15348b01bdef51a04376605146aa19ecfab9fbd51891b6415247f3087a0969dcc921f0796b87e38ed5778a076f46aecb710fa05ce07007a150a77ccae3fef6ca84480463c55689e0f2920224f93a7f26728892fb05addcb979e50e1adf766ef27d92080a3a3e7b30a662eac1a39dd33732a91a3ada12e93b7edd3031903ae75d9ee2afd9d076a2f5c27b7eb7c3059a5c58fefd61f08b8b24f429bf4c6762522933953be724877494eb830f47696f2948b23223f47eaec9f68367135d82d6be0455a8c74594636e41ae169b8ba4bb80b26fe42d8d014d31e4d8e99adf5da8604b9ecade1f8e57c4847508aa66d9ab7c0a93f927f13afd0e1d16d57a7d488b2d3586fd5df19d11aaa2ec67c36c7090c6689a213a0829ce11a064f5eb305926ecad1ff6ef3550c014f9701e21608e044e38aaa0d480dc93186a7240c586bb53f8de7a756eb613ff0c7fd71f0136f1c86dc47b217d208d6a58083a0b83b2d6622f483b4d74d70f5cac3deab0f0a53393afe32dccb9395e91a743daa5f53629058e15b8cd839a18c16fd003babdfc58eb67d8a09b6bc7523513fd95958da7de7be7692f2ceca8d531fd796699bed5895d32e86c6dfbe35c96d1b90108e6aaa78349137311589ebdbca8ee5ec879c82884d62e47bb8837a735db6162954529b56543b6d8ca9f9e5056326df028aac1a6292fec7bfeab41353cba48c08d052f1868c061a00d804930ec26958b761e2db3746acc97e694f1d316d301d69b07780ab7a9d1533e83f4f5976a00ac3f43ef82820afa8532b4d8c41931c045e1a1989712e5489a6e4fce5b2eb1a4b7d1b82727b37def37429d43478e2c23185b47255b2abf560dbc71a97ba95a7c223c7283ee2f4d7afd216252f86828e87d3d0ca7c022b0d32a00d9dda0b8dd28b32e0f8dbd43c6369e408e5e44527b84660e3b416994232ab9808881949e08f2ef5cddebc414366045dd463b5ebcb4c04941ac93c57cd256ad1ae2bba6c782bb1765cac1e1022e12d501fe1712b3127cdc0505383d3ff7128e6cd2881c3d3b64da959b55211fd1dcb2eed5b1144904676189d220e016f6411707e8479c9248c9e6879d26a86134246e8599e6ecda616df879b567c9027b1c5adf3371ccf65912b9b6e6dc8332be758d0cf63d3e2169f4b3043212129bbd028488df502839e8fbca4b9aa7026afed54166f75f528205bcd436bed8a332b621014fe43a0c6c9680a75baf8e0df609525d0005516c0466c66b77d0cebbe1e23ee7bdb24e24c42e31ae9e7690e5ee54aa8be4cd2f81613694640e7ee616473b56d038cc446b5f8e9057d0c1948dc09fbcbc2adc55a6c4e10546cc60191d42d6dc46a50ab6db0336dc086456b066399ecb8f38496445532dfdb17b8ff0bf327dfba0915d8571d0d3776460cf0fc245a7d7855ea26f123a381d8451488caee9cc93e6df4dac18fe57e34724c4334fd59364729d653e9ca010665f9cf9eee43a75d9d86c7869ddbbb08e8e1b5cd0268b6fd7e1c6045491355d744592e9fe7096c390fc528553590e864363b4332ccedb294af951044b23292c32c0598472a99258c1c7dd111fbf70a3f3ef5626d04a792b5a9c91f14fad75d0f653d51e7301e6f92d27e852408740ac118ef92fec76d00bf968066dd2d1f0c1916a4b5be97f988dd658d83fa86d8df98a1ef8b0bf0037492ec2d66e4153ba3f54c6c754a9b41c89d7f0f466223e9d8ec10afada6323951b2ee10e66ccaddab0255da6f4d978acbaab5ef9c13eedc11972eb70e715836a602524575a52350dd8ed1cc2353c187af4e304069179d80b35bbbb411a2e680ad2735f0f3aa114a920dccb39f22b85e288f947d419faab945aa24db83512e8e8fbbc1c98ce72c9b1b9b5b701d09111e983c6ae695337f78e0f32fb71b566ddbfab16d1417ebc897bb7cce94ca1930dab958cce7d2b011c04f52ffce88aa1f900b6b11658bb639dcf7c745c152cf930bf08697c8f3bd4a2021df58fc977b72278c21150a98cd882a34c66c7162b3861f6dd42360e9c7eb48f47f3cb2a8c5d30ff93c3f6df3424a0c8163d05bf41abdb520b5df1f519084618fa06ffd153891aad411b13048d68533c50bb35b72a79be909e62784a457d27792bc4712934461d753eadd4b2c84a3401d24b6f913df0881299da057e7b674a103827481297768b4d545d1123101c04660ccff0f58faf892694a4b154307951f4b5c430ec53ba802481b244897bf99a4d397e3a5e0ec52dbd82d4289d4d33cfd134ee17e80d755a6bf7f0ef5563d97606456a2240634d687c1148a178e571cd369c67e73ec195cc23829c43a73efabb308eda9689be5b38a72213f688258a4442b4210cac47eff72499087f27b3f62d9a0d2b48c2087896121ed03f529221b92cbed064a7cd2481b0ff0e92ad5de19092c9568fc996f5d6957f42598a0116621ba8aafebaa79aa6aff79a3dad2639143a8137accf123cde3fd6116a43fca346f8a9c3190dd752893ee45c1c8d4aefe11e25d54a013bd737e5156660a3ba78b8a66968ed09cf5bcb5d247ef6420ff484e8c16b1e136193076b73efa69f90f5aaefa0c28099e2da5b50e8087219748859fcf23b32e3706109370418ce32a886047a82ae9cb6cf04c4c83cd781e89bcdb9ae5f56f807859ab230c14fc52fb2d10ea8e340c3248732cbb4bc24c4ef37297e69ca7284cb79b90fe59fbbf0a571b5c03dde17ca4b1b68c0529222ca89ce6d32c3ce4d1890d0eb1a95d772e2899b19ce8655503a1e0c8e9a3dfe5e85e6349dface3bc4912d4cc61c1f6a283eb647de4e2c3a9b502289b425505a67b83529f1a53cdaf3856b769c9c87f17c36e7b78a23ba810b9204072ccfa72a940a4f3041d283c4268986e1370fbce9bc7487d1938970a8dceb1a09e7d52d9b674c5c9960f0af83ed35b1acd7867ee1a1b9cce4e585c2f1c6483ff38b7b5d3273f08b220e25507001cf1e0e536492696e9dfdc2099e73fd2be5097ec62cf60ea5748d6cd8cefc1067f6df21d50a3020955abb27cb2109b5fa8cfb69d13580cbbc637fc4ab40d3d83739be7c8b5d951b44d18a656f2f4f7f46727c9587b3a20e2f190ef12b2c5c0e3c9646498986862e7ab8e51fde86da850f4c32578e3e47d65ece368ddf23efca5ebffdc817c84d30bfefbf824275617705aa65a8827942c3144b71444683b8ee9ec794210b5c356cbc17400763a6be5542f7e6172f0a96619a4ce2d84e06b210d021724bc625d33ffe4c558c1c517f3cbd053b86e3db741fb2712641a11c59f51cffdd1129a6f457cbc0ead46ce10439464856d6d2a2612770c774e6ad45abf65282374e2423d9baa39da9d0ebb191cb4326d85cd7840850c7e9b4edac643b0fe25f54b3a00b29cad13a3e6e1e3b4287acffcf50ab74905cef3bdb7db834ff784301d66601c1fdc46d125c3acad5a25e5e1c278817bb6d71f825608c5c75ab9e4b80d21da7cb0eb5ea399d089920e17a3e98828f1a4514b711cd94ad81689fcac6361c8e4482af055fd8d1f71e83b423bdc02ddd28568af64c4389dd6d8cfd0248dc3e97d0da0651aa2ccb8ddd8ad2fc2dac71dec3de535996e8c56dc8023e6151a502c01310bc8e8c52e566766eb429eaf0b92c1f5cad13bc8bd7403316eb07b61ec24d60ffd8d0d488db56ff844540c2ad7fbb3256e570d26fabaf924bfd94718e90f214812d268c7b0626f087b09f0d562f9871422a6d5c8f1d2e22d3af08cc689241e5601b4ad12c47c4cb257c01bb32425d4df5ad62700a789774ad286497378b2325c9eeeba7a2bf6db32ae01311fa25ec1ca0dc62d2a98ed43c891439d2e0f1d83dfd04771cb508e56588fd39fedc084255c33539259f3428ec4977b14a90d229090f52b66abba127f624546f39a49d719f746e185084de7a6f51801b3a07e2dd920edb6850372235ad6bf8b5711c1479a3b40cc7d1b18cebcc70ca1075feb3fc5badbdcb9df24ec5fae9a7b78213179698a92b69052bcc6ce69fbe0aae34fd3bb00fce959c7afa6cdfdb54fe5a7d6e89bcea22263d900d663bc57faccff60603e5509ded6e3c45df083d7fc81d51d8e5e845673213a20ac86a9759b53118aef449661801434e875f33643c26d29200d9e6e96f91296358b8dc6567a47615ed196825e667370ed605ceecfa198225b174bd3a15482297311da878d69aa397fbdc0bc77c3d47011e56cb9d164ef3e7c77dfc347846f4dc5ed70621045388b8883d152ba4837e77167ecd01cc8e99130d5cef961a15cdeff5257be4ef8c66ec7d8024a226cf8382cc8d0edc05898b99af7e380f1b4035488bcb01f6c91f449e84f83ad877f44a65cddea83ab2599464285f9969b50bf1a41ab50c62166196840af9b588d457990a344c0b2aecfb60137cb2e1f5a6a25174f8f2a8700421be2643893e23d2c93fc56b7dd7b2980893e9f93f9c3ebae3dd299cbe7b14f55593bdaa15cdbc92eeb372758292a3e2b155cf28a2d770c8d5f47ffb4868092b93d48f355e50ff9228327de07b437ff4518faa91c9b9d58c34b882ec9d33729973bf63b1e285a918fcda9d3460f55a0781e1347f9fb28a12c912e3ce3a05bbd730c71dacb92d2a32ec26ed509de19c43aab4575a5794fd0efd5af87a9300e8fb8db6ef5082ab80bdbe4296192c45ed4638ba0066a44aba1e4b34d391ca5a769393cd48f64de24977ff8f3e3eb0fd198e345a3e5982cf9faf3c8db6a2e0f8651b0a453fd1281d2f2e9a04df3e0cc032bc22c33f76798033011d63102a66cc6fa788b4dd2be1f798dfcc0c5b4600af76b183ccc3ae37bebddbab50571af1913271dfcd90027c0dbb321ef315780f9f06807bd4a5361385787b4225e31f3af6ec5c56d9ecacb81d84cb9b14715dfe860fc3919ffbfd09b0b10b372b101728cb094633c41f549f582d34d3f8155880ae27fccf8207cb6998db5dcb1d6c5d9058d58acd5da7f5ef51499c129b0bdcc17e11d8cf3568221dcb7fb2abaf69cd3bf91d1f3ccf4a1a5748319b2b6cfb4e2c66e3e251e9b407c8a7b93397fc924a05849e264c24113da11fa08229401767475c6221f5de61479e7ba2b39419f6721902f793982f7a22e0de8de3f9508a8be73b6ea93b93cd835247270ff3a1105ae8791618ea9481cbc5a4a70a58cb993f349ca3d5b3e46c514940bd86406a7c7d8bc2f7ff5737cf282a21c192b06e72326013b983addd3fd1dbdc29748af40ac1d2a46313890a018d1f597d35511d15d52b14a588cd8ad51cd05bc54bef4dfd0cad5865b186d912a7afb2eedcfb561fd50b1666e3f751cb7314abe9418755d2ede047b31ac49348486031f1f4d0a6941c57c042f27284870c6cf9617b7a3323e6564a5c0805e001cfa77941585da8cb150b0aa35803ba1ee6b29502d6483cde6555ca7ae9e4e936d3ba71de42dd7554695706698a05d9e2caa1ff34256ce56c507eb64120e81685cf959e1cb14938198faa98821f3dc88e7c7087c1b22342e4ea0605fd61718f1b6806ba6b1addb541d3b5f277e8c843e7ef0ff14f6c5ac0243ec92907a42587ab64c4210e5778d184d1adfa037553564536cf0c08fdb40dfe35ca48d4f6240e81cf7b39ed4b3de54bdd1a05c9d8de114ddc0073f2ae892c6ef0f303b8a084c79ff2535542a0a8bb1471892e87141ea0357f12547bd2136059508ab8ed6255381ad02202eee98f3024b2dd791b45f64976af1ba1695b91bc32c40d2217d865e5e7cac42a1e1c07ca220537893fcfecf33582748fc83bd8652e72a7103e2547241f970cd68a588c0bf67a81c3890b8e5bde6932a69c45122fce3d9354b648d9b32767a1f00d966b80685936850585a6e4d5709a542ae69bce8af4b0a82902f425274f33a3c0fb1e3686881f43bf76108ad31eb37ab8f721fd9d76569108632896380f6adc24ea7086c9f88912388b2fe57fd50172fabade27cbeaf5990b9c7b7a72f5a7c3db6ff871086464c827fb8d908df4e8576e2d6a581d865bbf25b31199295a1578108006063fe5adb86e27268349c318e648539df601437a25319ada54c6cb311f48b1bd75d801d1e4e9c70c60221448892505bb99f2a85234823078941a7bbfae4a13e1174617488246cde1590a394010998bb5375a67cdff9d6ccd4beefcaf28be9882bd40a085d503eb6f18411872f3cdf8e0d8351f06bdd8364f0f45aca8d3df805e47719fedacd926de93a62f5efce40d4705fd1b2a9d1a3a7c4f1dab1857426f5cb8c0e1a7aada5c4d248ff6ab8a0350b0ef64a43667808b7406aac274f5eb02a08e74c7d000a7701035d84a6642075ddca371e0eb6b38ebc75e2c8f7ac825f0a5ea41c6ff14edd459830764a16b30c20e56855a298af87d389fb3a2e91bdc2d4051822844923767b6ca4e92200b7ae20fd549a8f74f6d73c61edc68210ac7f235fc6ea2f891a3754f16371f5183dc4891e2e06afa2b8103bd8521ba4767ab0a475230440281897287abef1c659b8995ed6c9b55970c9f09bdab4ae489a25e84493ed1a3a0007cfa4d188eaea1b700ddf53844313d25369573f074a4fab008d65f00d7496f194696ec31a2a0dc248ce364a690b0c5048ee6c64231ebc40e5e6e4dcbca433c948ce79d5f02e719610cb27c79f5b317c16fa4ffe37b9ab73430d7cd83c09a3f253711a7c68746a343209a5f2e895703f3e85a2f768bc942f6222a0f06a96a6a84c3eebb891c54e74e9e3341ca33e805110481df746ff1ef3bdb932ed2c1baef3cebb540bb5c7afc65acc7cfe667eb5b28a0969294bbed4f58c20d4378f9b42e24c3b2e795b051eafee99d2a653c14e264cb8bf34ea8d47551045d7ef4ae4963a27218136726bae499c439c58d3d90233a7336775a46b30c9faf5331dcb6b85f2813d16fdaa45dfd482b49e7ff4153a9474abd4b29d6a7850863e94d772ba52cd0d24a65ea27291c6945a11252020ba11e8ac252409a9e8346667795afbdf41a46363ebaac4fdc84138df9217745cb6a484920afc516a7956f5630c15b91efe61b77d8f799057aca1d6dfd90584273375dbc2e9e73217768f51bf17bc877b8df349df31552c40f0b9f3162e243bea5b2dd1a607c28865c77c3db2a00d6ce6d3b365e90aaefe38cb871b11ec7398cea438bc719cd66dc94b69f5fc1897690a4a4ffa7846b775f1167b4780797dca92492c827166b14317f61bb2e1870525522da56de9444aa3fc5eeaa3340b78511db4bc9c536f211eb3d228e3d889dc447b40d3b973b23e21f29513b2279388658a34610adf323aa6b62fc3e203c8e48a5e4433223f5f6ab51921658ae4486cc2662f263f1d32182d2a34e0ac1d17c79483a272036b2c48382890cf11c79fa9badbeb9c89fbc3622be72ec55e1b3e40f9ee27a1f97b618b3aa94e6ba03f5cc783c1db2ce589af633ec1d8ef4f7574010545da4b7155f4cc508dbd83b71b1e5207da1e990b654882475f82e8fcb9b5743b8fd1144672584df477d810d156147488f0d9bc346bee132fcadf851d55e43f168f4c26599a67d89343c3374ed2428c6b6615910c7c1f7079fa7928ab16188ca8430b1096985650513d1c8f07d5dfae6d57292161f844127c649f45eba5be4b4fb25ec5394981429cad56dba6581d7116fe9a11768f65be2f132185a472460e0a9c814e208853797d16490c63d8f365af9f50944be9809c808376d2fe5ab53e09b59b8058401fdb93dc5fbd89e29c08225be19ecc55bd75f9bb995ef9ff8976b0f377619ecf739b0d60d96344866609f185eb005259271f92a5ef90edc966b501c6026280bc8bb27e1ac29d0a1652164adf792ed9b9030ac4089553f4728a7707357363fd25953ff00b260991059117b790ce5de964f1ddfe23546b7e33058890dac6e949e47ea8d844c8ea336f9f51db7177336f74c85e9b427bc2009cbed4a81d52aa24bc51dbc71fe92e397be2fa62bc34491a40c5823f5bba8e428ce16416b6fa6a05d0f88dba0f60069be96be6d11d99fe1c090a96b116757d5fa8cf7e21beb60e7e31a80455c0609d69829389c32e8ff7a9bd16e15d7fdb06f4f6f12271767afb91a8166b459b0ba424c6f9604d76e5f44df2a53a3fb07d58f90ef7cacd2541304cb07e99e428e688ca9ac93a2dd24c5b19882fae22f54ab0836e48432de31c3c231b5f08750b69b1aefc128c7f8dc062d8de2f00adaf7d3ada0e4b16d58c97ea2c58293339cacc3d542c242ad7e54d01a09cd57265aacb1a66598e3ecc744de3f3ba85503c365fe101e0a1eba6119961bea65a387a531423800f3dc5462c3bc2a6d03717c54441dbbcb14b71d42789c7b272be634cdecf94f7eebe54d09dfe2d9816d3e68be9d9d3791cbd8dbb1ac4029b5aef2d501ee2a24f783b403af234caf76d0bdd243501f57035ee8aba77c11e7521723c01f10408fd40c176eb7336bae33b803610bdf527b3b4df4e0b79e85c628776509c2827ecb6dd544a5f44314b319a3746d3529469d3ab80129123cb74f4cab73662ae0c58e98f8d2be7b7338918596062d125033974936feca669670f71b4072d4c8ea9df0dc2261f3540d5745aff282f935f12faf35af411dc8c1f5f684d69a4ae0b802f976b68a813325d2ad1b32610bb6f33c39620d7b5596468d01d5b734b678bf3af7000924ea3c5a07af7cf4abd869745a43c16d72b7e3eafed48d465b56837f6a3d5c764e9921f4aed968fa9068e26644f2ab5901bb518f399e334302629587ea3666a729c5a2aaf213e8432405e112e2d21106958012a0d0a1157bd1ec70a8ab275eeb86dc21dfd874e26dae4ef3af7c30b65c118c1fb5fb30ced8455c24a812dd666c6ff7fb75069580fc5a6a1b6057e319532670f729919e93c5dfa554160291d150469e42753f6be6368eb6688db7b9756cff68aba0bd9ab28426efa53929b2cf36ae8b12aff573a04e58e172cf544a0696c822413179a992ec9a78cc3d80fa23c5a12466b822ae8791745d1fb4c8aa0a92935fe76c05aea99afc67731cead829c31d2675bd701ad56cfe2e140ac4d351ef626c3e3334c5453aaab0a141c36a3419b5a38c68d6d1ea35321c72c7e8b7e1fd93115258d226db507b010ecc7541f3ba9aa649ca01652f0805b04331fd853d12ff1f769f425f04348dc6546c3448d04c95bd8dca06c0874d654cc137a70d8e075ffd5b4f9b4d4d09fc0db8959c64f14a24b9bcb2771173601f81180e261b123f9cac3f59019f2f4c0ca0635e42d0cba7952a17583af9fb4fe1f15692b8749c073d187775260cca0d79c2d77f790f7e3f1d5ed99013b228f9288fd660911582230823486acc098f4d0b8ef1c9d60df64d5afee9bec111862fdcc87217559f5a2c7c396a317c311df7c8053d695928a9b9dfb02cea3f669cde16f1f461596ecc6d43ce2bec4d4971b233faa265fb3f7f84f2d0bde04bf9460a20e703d95655d70a0bf7ec02ecc1274dabbc327e234b5d311855df5b814a78227691e19a35b5547478a7076b08685917263c0889389498b319936cd18cd13224e3cee31909dac83a2d38cfd536a7264165c7940503a9b916913fb02a8839923e3a48cd8d2aa38d0ce3f0b9985370009211eb4d7458a2242619eae22ccb8dcd04c46195c016215a201ba05df615efdf0b4e3ea8072f00f9d5f67034c9eaa232100d96714dc3db56b0aebf5010d00ee86fecbcd377b13f69d044528c2f6cee253ea6d9329f07a3cd84c870f207546438d396644efa525a917c581f50751583374fda4c8e00d8198856dae65ebbf7464c4e4c984407b2ca6d80aeba5be1b4c1f89d9df09af711e8d08d106a1c917e67c2391b32afc2fd342443cf061e023debe2b9dd47b64720862b1ac83be82b212e64eaa991a740175d3c807dc86cc59343ce6e6df02ea0ea4d08a5f7e5d20ffb7ab3aa17867cc44acd89b1e9eb00ed5be00ad5519d1cbb9936f7cdc162ac023ff60474cf2106a092ec90274a695a3f13b8c4c3c8da8fa5e2bb0363dbe64c674feebd24858513ba365bdbc4483995e81f495718e99b8392714acd642f08cebbf146e4eba606566006a08c46391ae9642f30377cdbc461abb7363220504ab516a284cc9e000d4ba3d97729a431197aff57a0c3aeb08cfdc9ee19d490bb915c00997e754f63da9e1c886c85765c36284144ca17e1976ba54ba83b3c505a896137727c3209429704e85447943ab04c141cb66ca2ae24ef0fc8b9c7543259a6a5047a06cc71022acf9d5958405cd9a603db4f208203b92f6c3c7f62c4da635c5970a3e9d7ba73f6ea6b521c7f34cb69a9dc476f9a230e3c31d9fee47609be7f35a55fe02c84d6fa6772f50156c8a35fc885072b9ed8acfd6e49b6dc7b4b29e596294919ad0576057a05907a959de207310604a6148b2f93238cfd603ff1448eed161397eb26a54ef928bef5110b98e44893b898ca4660f532e7c1d08fbd05986545b71fb09ba4bcd44e62fc1a6bebdc356da449d02472ee5bfad318bcb90172af57ff46b7c94dde6e6a225690cb03fe11b0890d55dc7e0ce7de3869127d99264da40d51b8f15fb641c935f23ec226c567e261282a902e55dc26226dea21ed84bbd52123c3252d8aff448bb236bd9718e57693f89476922671f0530f06090fa653fef2e16677f43bdcfc3b416efc0133fcee9834a9e37763b8a44d409a449f9b5161ce6549c39b190d6f404e60cecd1310d559773f587ddf77c361b948936654d22f040a11d906f43b96cfc12cb70f0a2ee5d1838797ca7eaa1c64850d555c0e661ed51f0133fc0ce7befa6e0315d77aec6d80c2c5b2a76f613ad9c39fb847675af81376e67c78e1c7d51f5c32c4b145133f0b3d086398692286599d7c845dc647d58cee11cacbbb8a1e638c31c677afb0e8f2034d32295431c61863c728abbf2e7787efbd083dbac7f7b22180e18a0763ec189fdcf7123d5c06b2d387d01f3a8e5c8030470a3478cc8214d19994e1c6e8914919a2332983c72c48119d4919fcbd183d4a119d49198c5c5727bbc96eb21bec41d85dc5bd2a39291665de7b42ee920f90011092a000e542325cd56aef089598968d911bac1c0a96599ac49397e4a3a2ff8757c24c3e8a0266f21295c14cb9c5206f58286cd8b8b0eba96ad0b099478b3344a27b5b40d365dacf6eeeb39189a77882124fcf26c698e24627623c5d0d83303e4ca91e95f118535c213299ca18e162327252eca431a1018284232924344e58233f484208661118e420028a0a192437b0a20639c8d09560056338218102e5831c6350000e6a5a90cc800548688c50bf50ab5a6badb55af5aab1d6cf8103d4600f0f667e7d4fadb5d65a2b9db5d6592956abf517569b70af69d53a53950a1edc81a65496893b9fbed7b7b201f5eddb1710c8bebe10d9d7fa49542f447d8b93885f310d1a97945b05a07c0a3c18eb650a46b0099634c87f504a38244b291f6251c0985cf9768895c1752b086b1b828816f5f5e2fa972d4c82acad85083c040dae1dc17b22aa2edcfe07000952fdf35190f8ef23390109643e9d2f44fd899388220921e6c4377c24e929d6b86100941df3684c038a010b55e07450c0a670fd1f0d6e1c02460e6e6c68001b4134ec09543cb4280486cbbd1b1b4b8872cad5aab5ee407182f04adb10f508b9d65aebc316bc127c5004b0f4be02b03e64417d0a3c98fe5aa1c8750629804de46ad557b9d7855cfdfe5ff605977b3844d811dccf37b686eb79edb98783ad8105977b380fb0965b95fe1ca2031228c068c4c2e2f13ccbbaef5687952d8c75a147e72dfbc3fd0fe694c817635d00727db6c1ecd95e74def3f2b5ed45073f40fb941e2f2060dff341d8f76024a2e83c12f2ed7770109e4fc14854eff9083c1c1a0662311d620244c8698ddea87e677bd9ba98dbb6dcddd6753d480b77880954d17ba9a25cab556badf52dec03dea8bf80ba4449ae7f414b026f54ad5ab3fc6cdb1e1a5a163d653395adbf4a1c86b5c8020f0b43b6ce90adcbb23ec7b31e0758da34687d0f0f86bef59e0753ff0a53c8d6bf47c54bc2088645000fbac856f5bedefe1569b630eb5f0b2e6d12c8b2fe73bd7db710783832fa5e2c9bcc62cb52c2adff5c2ccc63a6aa184c08850f900779c220e4391f92e095a00f180158826f3402083c18eb279c419eb005799e008a609406962ebc2c542ae4f9d2041537b2bcd1fcd782cb3d9b205a7e25bf7e10f22b0ea27a4c0b773e1013f45e26c8a90f0f06e687633e34e4f9c490270d1af36b74e9e19849f2e4c1c64607a436a87f45a10198bbe53fd8024b12d7e851fd8a5f8f6ad3c8f5afc84577ffb4a8babf8080fdea85b05fe124a208a2faeb93906fb110d7633889ea2f8ce55ceed90451df8726816a4c01de4baddf820597feacd0546badb5d65adfc772d55758c71bd5afffdc46aef51b7309c8d5aad5b260a954ec52b14bc5cee4250b8532a14c28539e5fa17c3ea5f7a2525eaa5d97ea525de7a59af2d17c4aef3579a9a250269409654279a99a502854ca4bb4eb525daa4be5f9b2f3124da56497925d4a76262f5114ca8432a14c79fe447989527a2f456539292fcdce47dd834000f06ef30ef32ecf07756458930b0030c61d8cad6429dbbc2af6bb0ed6a574a10f26532956c89256cae5b1b0142b6449549eaf596e9926c832d1f99eaad2a5843ad93985a9904c790aa6f2fcceb42a2a242bca2b0aa3f2fc4cf696e598aaa99aaa29cfb7d58b2dcbe93a2650d675b4cbf3b1355c9a4aa552302a06737a347fe6c0d85e46498a728a6a94fd5cb5e2501328c7cac25a3467072ab19da5f745e1c7fbf35734e9c5cff955e5e329f657b6f92ddbfc18f32f17d8e767e7a5cb44efc5b3cb53498be6d7ad07084cd97196d3a2f997a963ba4ca0cb742f539eef36eb5a343fc3e25a9d95637579be35cddab9657bd96f709ac45167b2b275f625bd7df29cd9cf87380e9334e9fe7ca8a4499f9f98f5a4fc15c25636982f94cff71a2f659d8fe68340d36b28bd1704fa7ab56cfe44fe30b6f9ae27f20f6d3e60ee1bfcb3ce4b9dec8a2ec11a1f4d2ec322cfeb5dfe0c63ebd736986ad16c69e96ee94faa49dacfb761c9e5ee679f7d7d98c4fe15038b4deaedc138cbf3c017c35bc21855b6f22fb6f92e84e4f92cf341dbfc16db909c5ad96092cd553007fa6c1f6dbbb783398c7ecac2f36d98c2f5ef8a7dc4ec23666bca733edd3ab76f1916de4bd6bd97f950b8accbf32fbda914cfc011ae1afd443d2c800616073d70e88277a3af771be3798b88ec1f376bcbf1f2e71be68c5e43f8a8faa6d7058f647df52f85a6fc7b0848790eb8ca571ccd2a0f8aca431c345ceea5da07209a74611bb6d1165d7fe3fa2ac702f08d16550f840f2dca700f98c51095df7b55afbd35e3a3ca1c9c819ead06105b152e077128bdf0654f0d6ef44ee52b8ae25fd353831bffba48d61b6bb92e1ba0232a5135733d478d1655387e3b598ecf96dd208a66834462ccd8431c1fd91888737d75bd85af77dc8de185611591165515aa45558b7c55ffac8e16d9317ca245f07906673c3eb8f16fb86decf9420e6e72e4c19a81712d39729fce8c4738733b98a3a0173d8dabb2f08c8d76e1821c1cc9d543204daa07d0c1aae42723bf5b418b997071aa9761a97e8500f9dc8cd9e2a54a2f9da08b7172f5d5d7355c12cab628c2d57f7562fab9b8ccc8e2bdbc1c9d3b3103385d7fb70ebb218482e531d68a52297fd2b830c195d5f5d565d58aa6a6a2a9aa39a3a49486a63dbefc390013dc3893b99b9d01ba6f1686a27acb8220cee0882282324d0d8dbc6e507b56ffe2090a1233b9be25e3e274e75b9bacd59b60d506df8b6765c0e403f97675e5f146ec23840f132e77ff5e9913f611429479f30954c2a990ec8aec8aec0af727b9ddc64737afdd6d96c0ca6d58583aba8d4fe13653b88d8ddb7438368ecde0373813d278ef520a58795858bae123c127ea074327f65e55f915a7cccc20ab6b46ffabda9888417a6158e64fae25954e779755f4e8317a74f7183d7a47a7115d60be687dd5421131929110a9c122bf8f0e78e24f3cba5fd8b169c43c3a852dffa00fe8d312a3cf9b1044938b48f42ddfe262c585558cb1728fd114a34777f7cc8a79336f529a705dd7fb2b3e1a3110ec768f597c762303050b28ee317a931c3d6655dcf75e36fc3e3ea5220c192a4381e175e624b322b322b322bbc96e322f6461c8c09039c9bc905991dda09ca031c3e53f97c60c75b9449720ae07676033ded59191db716ce4f71e57233fea3cbcf72223c79879112ae08c800af3abeb8fc8a8706105a1c532fbf3abac7a6c7e35abf9f9aa2e38219c1083eea71cff7aa245513e940f91ecc0489e586685cbd5c8b1568fe78d22124de2a0c7a545f3fb21862893371319721594f8d10f9d714a6492edc1b363a7792ff22fcf06b3b6f53022bff7b26277d0ef57b13f504abd3fe5de7bef9d766b24ef457edc1a09ef06f9d9066b604d1158036bb2b7cff55b8f8ece677f55ebdf57cf568eeebdc8eaa5781035f90e84c33d9b548fe47318fdb4ecd38c930d535c0ea24e9ea445b20817dfde7be9548be47798b8d53b4d8c2878f1f460e8cba745b8e48a2b6d528b9e6e2db44f79ecfb5f274b79ecb114cca3f3040ad234a9838d6891e41e1a8e80ddc5296a736f40389d114f9ebc2792c8155900f921216293dde6b0dfe22fb79d4ef6b6972fed5be023202cd2a4ccb3c51afbde7ba19fb2713ae4febb713c74b2da4f7ea0df2fb94be9bd2010f79ce8c52d43c3a53647caf7539be37e7f3e9352eb6da5dfa3932956796b77646fe11f304fccf5771eb33b3c4f31d7affd0d5779f1c3fd944fc13c344c3d17f3e860d8b54866767b2dca36cc8a2c614e9f300f34c95502825dbf94dd1d09bb36a77122ef457ef3e0bdc8f728de0df2e9d60396a2133d922fffbec7d7e4f444404f6429e3902c25e7341204bafd16f61173744266cbea70fc036699c940ca8fa7215d8aa793478e569fe6804cfc26415075ab7fefc1bc278667c5c342e783649dcca2d807b9b0ebbaf6836016c3bec3c4fd20f676de66dfc14c807004c9a298dff9ec3b6f95c07edd0e6c323723bff7a88f6c589ee9c126ad15533c9f0163c0a2fa99e406477255d9982a6632600cb2f258e1974d79705dd653eb69555555575dd1afacead7e5d75f7ef9755deed5a21b8f6a5d18ddec63f42dc62eeb29a56f558b562a91e0dfb57ec7d2e3e0686764b86de17b8150cbd04586f0e18381a3378a1fe37bfceaebbf16d1ebe5cfb7de078471e73cb45a1dfd5e79857d3ff68e555585e1e78e6700d1b86e3cac3f02e64b247a30d8c71f3d18fb5dff7a8e46f6b6befddeb80ce3b7e3fa8a71f59fd551ff8a3f60b6f07b157e37f286a62303cfac703998b9179e01901fe68a780d70dc4af4f0e0143a2620597444d0114127041d538e0e96e4db10621f966658dcd722ac45341ee037397a77727f16aee722802c9f9bf9bd942278837cae7211cda0f245f425a5b4b3c4e5600d2c026b1ecccb929b91654e8698834660911649f9991a3878aa91f29b6e0330c19d4fe39c3dfc8b5ba7aa28482bffde6b127ace06a8abb9a19fdb3283abe1492e14066d0ce8a18d6179f1371ab6679be7d085a2f45e10e8d3c46dd28b2fb97896e7b00f7cf137fa466b9aa659af699aa6fd6b9aa669305ed3344dc35ed3344d0bbda6699a96f29aa6695af59aa669da7d4dd3344dd3344d8bf19aa6699aa6699af650d3344dd334ad082dbea6699aa6692e2bdff29af69fd9184d53e95857d66551fea21d8f8aa5615160a85830b42b0aa662c1d0ac28210b8656a3a45830341aa582a15533ca85a155328a5655516268558ca2551e25d3aa8e926995fd74a65551421595aea2f495771bd3f26e6356587e65eb2c0281280dbd1639c9f7762a5fb1929356ebc26cd6b99e0785dc8724064b72ffb360f359ac0e19f963632ed30704c25a565494cc17d8ca16738c6d3e8c962debbcc6c985f20e101016d915ddddad6dd6d4a2f99f262e77992e5393587efe05a449a06ff11cc55a623cf771d13d18cff359de9ada0279b64bde759126d419c9a18f439a8461d1a568324520a628c4149d80d22419385d8a2854876a124af9d07b912e457a24274929c9a1f79a26fd87de4f5d8a7426243f54d12b429e0f7ddb74a9a237a1ef50954a114915491dc9a16f5493543ef46dea52d5b5cca99ac921f8a1874cba244d3e9a4f73420f719a647de8a1912e499aba21997a82480e3d0cbd78904ce88de89204e5841e882e4d53114df201e33ff43e34c987fd3cc8068a46e85fcf50e8455d9a289726f9881f0afd6b928feb43dfc2c68452399abc644dd884f2d26542a150292f595d97ea525de7252b2f589d758912d059670d591d75e250e9e679ce25accada90d55145ab0094524a71a0356801e80efa56c8fe40299d7452529df4ab9039e79c73d259e90b3a67cd21871c6a65a94b4c5a592ad561d6ba44ad3f9fa33f277d16bba3ce3a6b5da2ce5a5bd49559552ad581926ce8405fc5eea8dfffb13fd45a69d5e69c426aad73d65aeb4a9dd4d6596b466d9db3ce5a1b50bfbf9a35cf496b9df57b7472c52a8fd1abce5a75a8b5d20d74d773f90b624ad46438235f9af53da6863d07374dd3344dc33de84ffc988a9bedbb2eebaafed603708fb971147ea5192ff1d6735d85b5cac654dbcb72e5ef672b7fddbbd2633ee749f994bfaeefa107cc223b21c3ef01b35092e1004eb7f32b3954bef3d7caf65aa402374e46862af85b043157c4bbc93c7acce7b4ffe1190a0f7cfee5ebffb3f912fe4828e1d83f8812381c07b19f82df1b71da5b5fdfc3c9e8601a2d6a8b6119161c5e932ddc8362281c33e11f446edb12300b1c51486c85dc7f011f35c4e198081f01e172affbe8fe91fae8bd8ffa837890fb419e1be1a588af7717d65420682526085a09383b4862fcf9dd180c5cf0767830fe90466666a639955cd5749ab89ccfe4173c981fd767e00ef33b7e3d92adf8f5adf835fe40a3c3e0951eb5c1d541ee7f4fa5a19c91335d435be43170c687589f69515735b9dfbda6ab1a9afa73f361c9cceb7bbbe0bb617ec5e6accfc1492f8e870c2dccbdd4a45b3bd1a23e81945ff36060ee019f70b10799a6491357bb637ed3106952cd83e986729e2e1e54281f25a14a9664cfc6d300896e747e3bf4e7eb5d9aa77cafa6a6a6a6a686d27b45b9ea8fd65a6badc5efbd54a9236eb67ff50d17fd8340f7767777bbbbbbbb7bdd5e9612e66beb5492f7228512de0d9d2302819ca4b0c7fed4244aef0581fe5d2a975c755f557ecd6991ec3aa9f5d57cebad9f56f6ee9f247b9e52fa9d7d676f799e9e320002707a29ab793a4e637228fea4db97284972048ba70c4f8c2d7c71578c6d4c9f3abfb9d8005a79babd16294e132d676223fbe7a5176f3daffdf3120c181877cab2e67cca82b9f804845f8bd30abe1e7c3156c11facbde7ed667578f00f98b5cffeed8eec2be63adfff5c7c28e254040762814ad24d84d42c71287108fd1836863ebbe3be0c23de133aeb1b7144004432660c189700b20dca6592e3c4b758c5bb417e4721de64f9f346eaa98da74e39c55db1e720cba75d8a27faf0ede034f006f9d4f64ab469e29de3f84d6c0217a7e8b4d3649613e9e0b73aa69193c3eb294ef35cbabbbbbbbbbb873c988ee990dd91fd35002c3ad1a21bea06b3db21b4bf13a315c3764a05f2230a56b09717e4d71300a39bd3fca0d9fa1b5e7222a20755daa486e67892b94e638463e157b813e95d96ef56783bbc7743cacb77225dea935f2177676722ea60ce97bc2b017992235952cc79912c69e739fa9de72c0cc3eab0df9f7d7f0e182d52a44f396073f35cfb48967fa36656652d0caba38a160eb0eb4c59b4de1fe6cc39e7cc61ea3071983186dd31dfb23fcc4969bcf4449becd3b4e6a984bdf7deed3a9f7ab56aad155af5ad3aadadc5eeb07ee21fb0876a9de8ad81c9af6175c8c84734902cdfeb2435306b83dd7b815a8058e860ce7f2eec60d77510e50236864f543f6f9ed8d0f873d63b7e9f612e0e71617558985a9be723996541d1936f02eafc46d2f448de0b027d8c4fbf3e3733118b692a7e61754cfc63da1d34c35c7f8da74ebd1799a447f231fab92da017a5b84e719dea14136e3f8f8ae303722b1c65749265ccc9322ec9322ac9f29f85394aef0581fe7d28e254e4c174ee07d39da49b087930350f66c98381f260863c9707d3314e37fb2dec8eecbde3dd2b5ce727e6e045c23a4ddc289fde944d96353738593e179968cf452b64f91709d78907f328f5d1251be338782f12e6cb00f00597d2a8442df8743909158d0800005000c315002030140c07c482a13008d2504f750714800d79824074623a1447e32088411c670c41c400000000000c00191919220e0098dbcf3d01e1591226f6f33918e5759e59ceb561d206916381e21b747b6d4861d292673394439f2eb52d9b9902dda76e074d41beb2d0160ca55eea6db7c47ff053f53e2684741d980193a8e7f66e9a905b42a606ee07ebba4b811d0f39abd99a86c2b915dd8c6228fdb46d80ff13918e3a66a007c42d2547330a0d6bfecd9323e3c68963692ec1add85fd7b0ec49848f8aa85ee83d649ee048590619e1d92d09cf072f59e987105c729841e97e0ec3c46fed4318aa47f3d69b5d55076cb9b4514beeec66a9c6a7e53b3cd910a4927c1d49e7af2ff150b333bb5b069fa5f785d19b7d087729fa9bd63a4cd1c6ede223262f7a1ec0ef9ab464b0fb62f45dec1e5323497b4e4791dc74cd6086f3990b70370ec1c4f6022153ed2515edb5d1f73706b5f271f509da70372556f125672f3740a87b0eb32c09149bc86ce0c024e04bf0be431f7a7ec962c32f80c99e2a2e852d65f62030d9f880653089cb84a4f9b54ff490d316cbfc3d04fa7c4d070af35433abe60b466c03d3e8e812a6b1370a56b4d01b48a00c3453488a33d14c6271d340dbc20a8e0605cba4b1f17916ad627352228647931ba8106316f7e718d4fe1748f98711df5011ac28c3452c75750154bcdd04a52f363dbc5e5541e111a5147b87c43469e2e6cf981afc621c9810e90d64ce86ff2861ccd1b1b1368aab8dd9c54c7f46c861adaf5d46701ba804fa8f0053881f819b8a892dc7355014d3510ea1c406aeeb708a665b567d8e1425a96caddc75030b2bd548fe34633928e99719670fe9a7c68285ed4fc4dc1abd6b0d971637bc2551acd634f815270f640432e8c1ca18e9c3d194614037bc284e5a10d4ca9fd9d30794d6b2b27ac0b9d98effd30fb0e814ed015cc814c9555e96493f969d83bb149b456d75098a86751b31bb3116435cf95756d04f7247be5cfb95f30d289cb89f2e3bf8f2450ed16ea2b771cd4c15d2119166e2c25b17d52ebe053d2e8f35636089e3a5cb0f2b22b672ec0f61b7f4a6dc593238bff1c146a2652cc0acdd4f56e1cef49256bab1139fd3922c6c0ce6897b7205c83915f89a2d033f34dbccd2cc4e6999f4c76993788fb22759c9a9858fcd36ec7cf907d5bf3381893a728d21ede8411692476754fef7c02cec803404b5dd7ed5d8f594061dc7aa99968c523f15991393b37f71f4b989d32cddd82765400d9e01dc849428c9c2cd19b85fb2d3b60a1e84c926593a8f552e83d43dff259e7bb3de77809f709df8049617a02c71f8cab6c8027bbb0b3c50c9627a8545ae42518c5ac57233b3e465206cfd73159eb2ba4c99a38f21d4ec9d5496a9d6c636515dc46f437437f46a132f05a0e54384cd221551467645192acbd71b896455e94784216376ef6ff8c0a784bddb191a88bd7f2566782c0983298a1769176589169908a790cde25870815f1f9d851c3eaf0c5f6dc9441963146ba6f2134dad21b79470d4938a227443123088b5348b730cdb5177a2c00228d330e9a6383134cc24a705f9c2e648c39ca48b3b8729802806d23090208d492d5280ab203d067d708448c390658279aac09a5102461245a2ca2d6457bf34133fbb767317e9cf4c574e0c4792af658551bc2116ba134fe1989910c45668094d1aa4234053a0be29224077733cc92da2618c60d2c0a49518ba9b224771480b869d84f1190b3c7d84957ee51622f24e7bb5d7cd1b3b4debd974f1b35654424cf36eeecc9ce5ae57dd430e48bef3204691f07b230d97d242c75ba811077caae03459e0e1757914a185d28a37d0f2d9995c1fe1909b33485bd4429a85948c348fc138c6b8abcfc09af6ffd7d58df1f26ccd9a71a70a0c349e9981455bd1634d926d336783380b00ec4234e5aaf76e991a12162fdfe76ab095b9ba1f530dd7126417af1dd3b6fac05e0843a1a0254065f5ac8466e88e61023894de414ca6501e22ad6840d7d05d8e98df64f3539d6285d7f98371fc13625e2eb8447e56bf5623ff6e534805b437d3c5d2951b31fd967e0ff1f61dc6e91dfd41bd7390e9525a099ced2893f90c81cfb1f78bd679df5ca32f7cb9570382a17a4af667812d550ef3ab4707fbebce55d3a6b9b24d967ce3c4f4a417c6efc4354312b92197fbb2e97c37b82258142519f5f4bb296d88a5f88cd3dbf406bcf149969cfd0233cfca5b1eac5dfb33d586f389a4368d03804862b42327c151c4bf63639b7b11b79239534ca4ac2379fe20acc0cb1c70037cf7075ab081d0a05dda296f9e48ea9f29a4521f1af92362dc899b17240100f66a9ebc8da8e6e47cbeec6027dc12f7e59690252070803c5285a5af077688c55350f9744e12a8fd574b92e0f95034f2a81bf6a0055a5236e460d969197fda57a0f4761f151be99afa8da4c12ad7a5ff55e91c7a585c5ae891e8d356514452d2cba996f3dfa3ce7d4b0aa4e35fae88c5339fa739a666e1d1a91bbb2a317b1486413b54799526eb90fab04a33bdd4850907449eebbbeec768a409baa4a1ccea2da267189f11dd4c9b6a3271d92ba6445adcf9becb3b77508a6a728bc201be7390bde50c594cae5470027d38b42b9a73bebe5b4d373718f8dcfbe8f422cb1c4452b250278ad679a8f26f2a1c85db07a4e7fa4843b28c7ad5d48c288390e103a97ed1b712af199c19e76ccdc796648125580099731801b21291b1207a372651da4143ba831194cd211639600fba1ec6b585c2e41b370f1ac6362a3e86e51ac5196b4d8979a0d7cdb8b8f452e4d82ad57153453960162f9dab147b356aa556b4ceb363172152e8586ce21ae858ba7c7297266aa16fdbd8989dc7d6d1ebb88a154669c343a18fab88c99d8678d83085b5e6ab504afeb246f3d5eb44996664a21e30ea21aa5c340f4d6650f9fd988e15d030acd6b194f5c5987a07c62e1fc3872e04da6bcd76e63b8643d96dbe84accdc8b008fa9ba91e22edc084cba4383e3128a0da530985dfab4f8ea33a4f3c25f3923b2fca68dc3c170ddf31e4f3d09b8865d037e8700938f5e421604af07fddf5dbda79ab22172636fd37103310c8aaa5772d334ba5b1466b998ff7aa53314cb8cb822a093df3e41b24a01de09b524c6f9e77fab7cfbe2d68c9b7ace480ced45123917b65456c74cf894f846ab8c27e314a788efdef123a901386a99761815e0ce5240df5afb573b4a94b2b6883e5e2508be32c57030df822c18f20024f103da2ac6e8f6d08e831c096f1f68c12531545241d91e1d69345c7bd153636d27d6716a6dfd26655e17354a374710406743e1597644575b8b72c927fc09268f1126af19bb48b5cb37a91812b245dfd803298fd27c2701fbd6c59017ebde3a0d3e117957f543e7e84dc69e6d57acfa4010f775117c12db43803f71234abfbb0487c2a0eb1616149adf553f6ee3191fc4ef1ff463bcc54317ba84b0d8dae434f3b0aa4892e6849ee0ce3c92b759c3e4a069c92bbba5da111fbb97b318a40f78c7d750dfaf6802f8411ff9afac5ace8d2ae1893f49562d68ef44b8ab52d101cfe3f7d4c2fdba5a1efdaf75adc0ca2625614a2dbc61afc1aa02f9a47bc5425096fa472303140a8aa875c5e33b31d60f294c583c8500c58bdab61164fc002d76b74193ce58ce707828f8002af0ca6abd1995b8079562753a339f5115c24da0cd10cf1428296884a1015184d6e9f2f59ba12f1dbfff5fb1c0afa341a19c60a5f8b45127779da98b8787c855fe54e2069d0c85cb5467122fe9c23f9ea178055294a47439a5a03528fc9c6da75f9780a0103b3095297bcaa13687f0fc7c3e93d2dffa122b7e855063c1f8c26e7cbda186434e27adcc5253d8de64a178384b09470f0ed75c734f2dfc98abb5558bc8247dd069247cb8206cc6606da27b29d99843131e33ea882bebf739df96d2873ebadf747db62086dd96cf88f9578d00c3fd9dfb38a4e0aa3c473d640a74f34526ddd2c27cf76bfe47742ad2d1246f8062d68f6f77a1bdbd751798de6abd5d67334038b94fd90f8cc7b5af463f3e2584ac49a2ed651ce0f84268d7d613de7354e0b0e02db1179803ed393f35f3299db4da58e22a6afb778b7e46c495d977e6cce1531854f4e76227ffbf5b55440cd309eef64b9c17eafa89f229e28adac3fdd8332a7c645d31799f373d3287ab91ec06ad2a6dcc1e241700db10ec477c1d30c5a0580d7a5bdb1629d9ed0d74700af39e5a42177e6ef9e74110bdd13834838d214a8bb8d8ca2add8ca81b002e5505e2a768f810b5be5296716ce3ad41d2567375ad0228939eaafb4a5fba09baa9579db11a597ff0ee2e9f724a813fe4f165bdd65a55f3b55ffb3f5840c4ccc5518a70fb0cb299527cdc2f324bd447ef3f4442b399bb59ec72af0c2d7e01d11a458a5f44247714467ca5bdc830657de9838480c8672746cbe01574db0a0d8138958cd6c7fb7f6cdd2230c879405dce992af719680d40518e588cb22f9206871f58c476f69352b12466b5166c50e964a66af144d9c57423528c858339e9b41f42f26b5d52ca78c8e7800e7bcf9294de9eab76dc32dd2c79ad763bc62494eb4b7e7f0861f49b3944df5b112692658195d66aa43859e952b6217d1eff808dd9dd37c624836fa4948090da3c89463ab30aee9746183eb330849e867b9154853a0d18115c969ee0426ae2ccd00be7ad1aa96e5ec12e21740a48b6666b70bc8021f5d38b78a5308d2ca5cac060667c719c9156b63c5ba71b0429e4e5736f1eba6b291855224af2443cc9474df68cb1cd759baa0f451ab132fe788300f6c9317e5f3212add96e037802d54b621417ed3314e316d457fa253a7fb8c66ca2049c44c7b297d512715e7c0c6c909505c168c129e8b25f5f3727e0b1f46eaeedbc79dee2d951f1da3b122ca1c3216a2fca762810d2b8bde3d5355aca93861269fa589d7ec276448b5603c8a36c1ab64797b670d08129d899dc2c9693aabd18b673fc5340bbb4502dceaaaa776935da907345b14517ca0bb8c49084089929d145cd44cac3a3ab05773b061a14c001b6ae4b16484d28d66529d638b225680b04b4cf72f66f95fd293438bfd708f7ae3a0e1d321c94431a355afaa7898100b525e89d0d3d0ef68418bf0f98054a7cb09a04c13bd058a80f8d87b0b53c528bfa4581bcbeb3abad682401aab819da6aa6567566a9224e12117c2518bf5e261b9c6a71067cd40dda45376bdc18f11a483a0f0f686e8dcb6fb1262a23b571bca515a7272b23c269a03147929b1307fb90a7334e5c8f6891e89c9cc5051107c61911a94c2772b0d31080899247fc9292c52118e88f2230a42db289547886e6d944b4b28511a40b8000d6af0704338652207727338e6b0a01a5d92aebf7c36447a6d02372c719b5dc790f23207967b13eddd0ad8bc1893046b3f46d609380f1c7b649bb65bb0df2b723d0cc39720103b4cd1971e67cdb8f7be6f858166f19f8329172b12255ae875179dc3637b459bdbdcf16d19013d845d48fbb3189ca10a58d979609ea9a9d08399115623b2ab42d5a3c140a9f1e0219167aa590ec1938770794da27749aecb16c8c09f7d9d4e7682952021a0f6a1caad302424b87ad6505fcc4e173a835e44ef586ae8a3e8689822ea2beb929760511d4e65712f2148ac24016fb00325fcb651b1bd058024bbafb754c315831a45a20ebf251fb4a2d84e0a178d9e4574c3d9054826922df65c87533242953a332876f263dc60aa16994b452bc341a954793038e2ab147a7b1332773929addfc0fb909e67d4236f688f871ac8507f91937516f589c46c369d1a82e3d888ab34abf17129c30d150b24118f31633d28cf29dd56fb6f0d4d0d0afc15f2ee3a54e07efb1dcfeb86cd6e5f1df05eda50b0ce1854d2452ca0e8237a8e45bd7746b86f3b27d4fbccf1a42dc8a5c1662779d298c8c771a8ecadfe47cf834c00ce16f322937791a8bd427162d47122fb516ba9e321ef799ef06bd3094804086f61b694cfc96a18e15328e70f36ca764f2c90bb8d6fbb2732e4399e4c91e2f40c91148ac6104bc782206fc170c8dc1ac325265c57c1c5a62b524567a0f92be65933d0940efbeeb563de53a342fa34424b0fa268a4cf7c8e51229212be9a7107049292efe69aae953fb094a57c4404c988dbc59ce6450be33cef801740e97c232af054aae738f3cf4bdd5b3d10a857d768fb1795be1b29049d1f26c09663de233e2582c75d4249d7abcf5da5380ece9a3b614dbf8c63cfc090462bedd02b1e748ac8a41b0ce742f99d34e11200d3a9c07cfa53f61c2771352846838bce4508c8c0decc8281556d8c47b8474466bd9bf344aa1d39609c9b366ea513786996e0f1c1905af6141f7d940c79ad0e006137ceafa9c462011c444e3c281bea84dff79c1f7865a0094e8c778391895843afc5cfcac6a579d6b2ac5e0056d324e37567f6fc4551fb8bf32592ce5c5ccf252cfe10aa0cb1176d30c54ca2895280a62c5a9756700d75f70cb21babee18e1e66c4c9557fe19a3186b90b3a15535841d342468b792ebe4123d25ad18a739473a8eb6d3a41704e2a5fd4d53567e901a80c09093d3af17ebf60f2169ddf2765267053376343a5cde1b696d74d3b0524170b5158bece940aec1ff55511414099687b198bf1bc4ce933609e6c5b13f304751611c14c504681b96546593035f3ab4dc581d0fbfe844e85ee1b891174649ad67c8cb5947d8e49e7bc04c616d65370a11a2c7fad63b5abce4a4299a32ad8661ddc911f28a11cae0f8559f5646ceb399ae9552263309e720bbcba3c1466d8a9c3b6d21b18f88b5243dc5254fc00a763bf217178230ea9dbdb826fbdf5a0d0172be65779d6192bf0929e95215930f312bfde02d412d95981b0a459ddb53118b0fd2ee35387c2f63baa0aedca9ea7c1b64e54d2810d1a77a00d3f71558f9ff16241b6f97aa288e3bfd605dae005d8b409a89812ae1cbd4bb29c2fc15faed55a4941c20eb9e78eb9e6b5afd8a6f2207f3b036b5c623d783daf3c216cec0f4ffcd04c4465b8545690ac3eb812e45db5a378c9b569031034610f5a1505c07c653b2f8cc0c42405627a05ca9373d0720c4268001f5482a42a40a2a04b35fe335963e5dd9172641304644de38bc0811e40dafc2e373bfecee853a2b7fcc1621a273f89c571aa82777f5fe9626127e0509418ebaf1a4eaf067e437623a3782f9be87dd74d2f0993e17fb536d716e9160c33e57548a2fbe4e58eea732a233a99518b7e06d7a1347f71f4ef3f61b7be5e8a26e0f348a4100cc8a2a72e8e5982550965dcf7eada04326e0e81005c12f344678ec73f0d887425e10044adf8f8f0bd3cded472e67e576a468f09567808886d73571af86fee1a98699f00147dab04896705f5c27ebe12256ebf091e000d68385ecca52a881631579c601b7ea8b4be890d44a16afdbf87e49b34072cbaab77b0ebbc9daaa7de2ec1bffd2eb90f5349999dee769c9c4744cbe834cd4c5629c93c54123ea2e31d0c97d5010754d4c87c93fc8445d2cc661b21c34c676a5acbdd8eba9a8091040f44bc159438aaa27195a28f7996042d758c439aa18304eeb2d021db50f08a2b58b748c7a0698698d441ca3ca03c6b45e22d051fb8060766e6482d9a6ef52fad157715cc91d7a8c14035eddfff7eaa19d8e9613b3ce78fbcfe64bd22337651fb1743e47587bb3c4e8e5636d10705ab152b4c91fcc170e8c49fa999cd824bf9755e64373c214b970fc62e634a8fa3cc8a2bc1b6943c9c280071097f3123ab549705227b78cde70b9e8cc2a25343581b6c52328728c6e395a29433f688e68df1856a0a36a4cc928d8e8c27cd2b5ff17505d43835266441cf75e706cbfdcd060c37cb54e670b601c1b81fc9e38e162619d796a96aaf33bbf66006bf4256b342f9bf6adad792936109686fc745eae29b75e36eddb5e64c710bd2e5a54f198d4146d3795f44d4a652f6d06ebbee5ad753f66ffc450b57c90ef31234a67bfaadb074bf9b8594772d3c5b6224c63bc90608e0f00ed9657b2cba56a711a15fa9418c943f269e9e69f42bfffa8b34a341b83c25fd2d99caa48a6ee1abc1b682df69dab26d3a057afb9215619b70833c981417f1e498738057213967e7b022e9e2f0e79727f5c1f886160e8f90285ad764c26d7c9f2619956dc9756249b4aa71a93d5b57f669bc009774e013ca47d30f460bd74e12a9f091cc67e54eb98906ae672c9907ec2f8797d33b6c3a9c700558da223ef86b112c00371208fb56803d4d082a823453ad76f27425058a2668def937d5ae0e4727365b692ff3812bdef17ecf4246275f15659b14087ee2f96ce7ec5c47a65420db1e4e063fba14ff62cf26a0f7179bf080ff5c928877d9f0e752d12c3d1e94900d1383c9be7d2d4e1d9444ecd9db7cd726ae6f874268746e78f93f23477b6389ba701e7f5d3bc34394f9be7a9c191f53abc668eceb3723574b6125a73672f2347cd2f50a4cfd729456453186d468e5fe64592c7f20caee823a58880df5c85643adbe27321479cd06c16cd18b2c4f5acc2a425d23fb88f1c3b656f8aeab6d57b7c2a6fdd369d904b9156b64a91548e6b8eb862a774e79ec848580ea3413158bdbb7739988d09ebcf90a2a9829707eae8f8b2856e0cb54115ddde2c610b55d426765d0972db57e1c79a4191ef38bf798861aa1fdf5114b40c68cacf5f15b70e6e2bad38aeef99f1b9d4782d39f671d6d5b13e31ba3f7c4dff4976fc16f58ff0a0c4fe0662a250226ec5101b30bab206e6a81709609944c238dd236fec565c39136c82239c8021dcddb95da9185e7875ff06d6a722b60b02219031a6a3d5f06b5678b4a29b8f5a10125847a5d5afaddbc898c53b587c2f4bef60fdfe2cdf6b58f8becb1301f69028d4efd2f0f1ce374cd8ea85c2516202624cd41e965aeaf2c4c7c6347e3b9f7bea75df2da37ab57e18f693c84c7d3f355631fc754886381ad65af07c9a53d62e0a109c38261f65a2857014684611e9adc63a4bc93eed2e67513958f2b0514c7fdbb54fcf15fd3bf0b815bb86d082f0d7516db98c9b6dadb5ee03a39af583244968a917e886d8c8c79d67c6639e8c05ff16ed2e87bdf0a9c3e81e3408d107bbf611a521f6f851d26c5ed6e44e15a139cfb2c2d9fcc8dc54418450c320e7496dbad66ab9fa9023cdd2438891c1fb6c51401052b5cf524483d9d9587f64413474f8892da68d0bd593841f0401f1f398e2429925fd27f2229b38c57debe7498a1d8c80f4f370da4224f5042026eb5e6ccd854aced6e49b4527a6b55917fbf91bead728de32ddb772cffb1db683da2555d406903080b62c1b6220a987e52a04d1f0a53117d588cfbb4b9811b4e1784d38611fff697163e8a09db4c30c410bffe9496ec840d847e95a7f04cf6c96f148f9a19577433f63803852cf30310d34e55422bc9a91f1eebe297f7e76c2886ee6e6df28d218e2918f4afa1789db53a1063818c0a7b9b846fa69cdd4fd64a9484ff34c3e0a56ad1e317ebcc8b464ed0654bd8c87a1f0666ed6fe15b48c3ed4389292a0f706dd71ba06174f143e9de9c8dce48b5381724abcec9921186255ae5ddb6ec4a714f76064d50076070a3bc423007d5559ae3471f574faa78dfb2d696df5b0525061fa76b96af47a0c1947dacf5838bd9777f9fc4bcb361254142a5d944b2ab22e6c0f35dea05e22f9b31ac50989b17e5b5a518668230c89c8a3f8913748a97dbb764d5735266661163db79aea5113dbd7e98dde8b9d90ced47ed9a63a0d685bfa366e6099ac1a9cd3b7c6382acb5359411e61d061ff5b68b18b8c20fb9b1568482db0b47079e8d7c8ce4fbb84b7b9120df0b7c4b032789012e54b35968a8693763f0511a3deb7338adb98a9b0d388fde814f57110ae99f0cd2b0400fa6c69a82366d3cd83c74e376303c5ba72ddfcc725440ec18fa63f25da68803afeb84c3a64d81d5d9cde2059f25fb6f3684f137a0638dadc77d58714eb62026a95b9a4c3c22346112967f33300b686a6312eca5a1f1a16d4320816df91d4a2e6be35db27a7af35b92e189a4aeeb9c4ec8532dd024a7e2290c0672acd83025fb552ec022c6879c4894bb584222dac66d61e4f42d513a3cbc86229cf81f65dea6dfd11203c12959a9d03b5e970bafbe73474191fd26dd7cb69ef81aab652ead21bcc070779e9186fc2762119ff14d9925f0c064df543a93bb2233554eb7f708bd661d6fd0923f787b99f039131808a49469781431402ca6cfed4c398f649bf2440e70a2035409413accc0507af73072d2d1f3502b71fc495319198d811992b21d0fe4c0f6b3ff4a9714ab4952d785f1c773695aa520e2e2775fb8bf07f0a781f298a16cb73d058d41ed8e5037c049479aaf4a605c591d1e0d0a84306a85d8ff527210444091dd54680663ccb2f99762f725cb50ce338f853531cbb0b250524daa664ec3e08bd025bcc1a49e90c728306159c0cfedf9c4a6c9ac7bd7377151d0814894bf8e69d8cacff40956c286ec1d1dd4f8f01ba8f89497eb136db5ef0c8d51b3a278dd1c996d42e32c76a26dc50b7b4dae18f84d88300b48381d983f1b469e875e716a728bbe04f3598005d40ee0550d38ee0f02ea5626a03706265acdfd61833b00917c49351466cdc15fcf904c07f3e710f105d0a1f7d47e2f74af2d2d9efa022ae3a3745895da084e96706b922e1a8d625fbd0d35d0fff97126ad5639e2c2f0b4a6ac4ce432f35bbd635ec554c57fbaa39738bfc0c692fa005b25c4807e907b1e7a1a7143fc510e58bf5698ce426ec00afd318f7004685559f1a720f413ae07d03154307f498db80df33b5dde0b848df053476aeb3d5caa0374b9f2221652de5a94027aa45d0388a3ef037dac9de9595626b54de365e94304549d2c0016c35e13b68646e4d9240d8b44dd2740ff6e2378d2fe19a4062a952280df40229171d6e008623fa1bc97d9368906584de7252ccd200155940af5cc88be46a0eafa843c18cd9cc78ca78f43e2cd37a83ed93e1638eab7500b71f902599152b6984689010e389b0973a4055f0462c488c9e555b43089ac3c5153b4010f364ecb4de44a7a7041aebd11257c9123bebb53061506ca60c4cf0e8f75d683d4c32fc13d2fd47f1477535cf9c338f3bf6fa08913dd286e3be6b6007e5516443004b85269eeb2b5fcfece3c585294e1f60d8500511112a67271b2e28fb0e6f7a4d95e1348907d7ea289f60f7602719655b42b2d9302a1f15de636a4d7f3582f1408d48b1c5fd93d84a917bba50745cc17edac134673b089d5408a53fb8f1a7ebe1cf945ca9c4c4701d1a122f153f836a7be81ca04d91a4c779aae0eaf88c2bc8b491818d8b99adc6c226fe034c96289e9e8389d9a9850ca682f1061ffb150cc7b386716a52309ae53a43eb5ebc692379f956bcb6f4fedb4b7c9babb7e6754bd68355e52a0c8e6a7a655e0b0dd7447cd1ae9e6f45086fce9f41894d67cc2f0ed73c120f2b43f9e573c4429df34ca3153f1ea870ad948b82391c0c529fa34f22dbe3ea8f10039c6cc8813c2d4acc47faa00c84277da87cfc4b334456dbe3a90249648b44c5d990ec02517723fa73ab6e0ea757247ef563047da920897a1ebd4d80f96d79228edb865e0e0631a5ed1ac304e42cd991bbf7c8e8b1178a513d83fdd0853adcec300a4c018dede9da100c0be65887c3d4acc5c0c6bff1b01e8b0a9a354e0ea05815682918e234606c070e1841390d64f19008b1dfd0c21d940974434525b38dcbfc93d470452e99b4dd226192638467effe7089a8779597f1dd35ea7af8367ca7a8cbcb921b2e0f5f09f68057bf91b1a964228857bb51591394abd708e16e74dc500786190ca46956663ac5e8c654c23f56af1bf9e838081b9faaa230c28efc8e0c2b87296b2bcd960bebb526e1cdeb4aae94595cffe32518f6f2cec71a30f92d4a06ac69b17fa76ebd4f9459996791d2b220605ab6233b4840c059136ff5e83b8691932e329da6f711bbe38e26d4dc40b72850f481c3fc1ca243ab3fec06c697007645f966984816ac520fd8667d731e47860557590475a31e8c87854ca027e257e5fa981d54d1b32ebe1d17753fab346fc084b62cdd65c40d9a7950583cf92548a8dcda3a9c99710d094a111c2ded1e6821a91ab4e7de5fbe06aaa660a9231a7a4c1127009d341d8642a4e177c797c67a963c5d3a149fd53e8268e6c34ff87341174e34ca6b5ce82ef1354c3a3381db48859715404c4f73d5770275359da77a426084bd63751521e5aca36498ce42ec460de2249f99aa1fbe210f39d310f8c06f3f16b7c8c712290580bb674f0763f8b52ce77f0ecc33997f75075025109ca2e590b1e25ee3783c9a3b33fa29f98440e095c3273bf8f985ba7401704545cc3d53d2634cf89d5122401fc5251e992a31e45ea50504c174810fc3a410b77dca26f670d0528041258fefb159e0336bc00fc95c16b84a0d73ead87d675c646e3b9e1fd894e2052d856bb23de13e4c85da64712a7ef639e1850b0d368a7e95e3a7d97e33f0e6ff0cd89e70d2d61b31be1b902c3f501ac421d349c5589097b713c4ab81f9a8d96450b4c26ab00c4099090b762523991e84a5d872db10e9504485a96ddc30301a7b38a24ca322b15f0f073becd2a98a7e2bb55a6e2161a330d9dc729d882e2fc221908da1db5b225dda254d81029a69e0dcd4af05c534d88c8093750c30d5762085ddde27811f26f76efa325797d8e0b6723ce7142a36417a2a28b0ade41f760d87d238689419d73eb38a5e6acc67a401407ce929f91596a5884172855c29bdc2f150386816b1dcd2a8b8679039dc6923624f549c1a6dee3beb1fec24158a63395e6fa9e1c5f659386e15f77ea0be11d8cbbd88ddc4a0bc8648455b255d21ed74118b00ca888467fbdefad0af415a7247616b56000f711be89b6d9c9b564158a4ae81963c454770ef703316561d62933a8ca6093455a7c2dc1a57b076b938e50679c7bfa1da354e4dc227e83cfa2374bc130bd3473580e4c338520ee38b39a67875709f084dbaf1bed7ae52bec936042dc713e145679751c6331f7defe37c27389124705bec888f81b887583fc1e874bc65194baf366326afe77ad2472f046b6d707268a2f80a2f226ba1ccfec616473964d0136b2ad8238374a91f8f6960075303ad375a2283982666688538ded7ff4543bcda29f21b072d7d9036e87f6725ce8516580eba3f8dc42588bb65c345ff15ea175b4fcdadb6be8413bdb89e555cb466d1effd7162da249103eca312433718dfb471ec4447399e4dd6f1b084d26dc2bca88f91900bd850910c5231aac3e285a10de7baa166f8e645e8439ee1db9f730d70f5d97a65b8eba4a28152d0fd741a4cc1352aac9abe9ecd04dd93630e370c7fc1638134868f6b206a5e76703a1cbeca24a7dc4bf006a79e63ae42dc7913bc4b6f1a66111711e810edcdc8b39505f840347839c186e125b5bedf55941fc69038ee56a1812cd5410d3f4c2ba8efbfbdfd337d1c1ae7bf2955c3391345f096bd49beb2ef66751038b2fd1c00360850f46f8f400048c46260d83b20daa45512141472af00de3fe590b05143361a9482e611b783647ae7f0941664ce8748d444e3dde9ad33b0705e4d9cdf6c94adb50c1496809b1f44db01150059249a529f206a18388a93fb88a98f3e172dd5bded6717d4467e5a0200f3afa5d5f44bd427b6b23fe89fcc7ae02e77474c64a858034d2cff431d1f9a43337407e6f55cb90b72240f1e41e95c455224567121e6069da63f5a9e140062baa01a35c72cf3714deac8280822d59f583e6c5afe3a664270ef56bfa90f5b3103ca3d6347ce1b1b4713b6bb4f0c9d18dee9fabbd719d4a1ed3c9ebe9e9f027162c49f43c7f40158552ff2384f20e193e1b5db2fc707cdf02927ff0065dadbeec6813a6f73c1101dcfe537deb6216f13a87c180757050b54ca95332bd6a655c2bc07aefc66cdff56c403e62402aaf11dadccd3c64b48b52bd1ec8dcc9511cdee00db086e213ebf806c27380e1fe4aebdb7b9b50c3113aa38a0c35fdd9aa05fd9ed75b2d9495124b3d0f8cef4713c156b5269d156d41fffcb008eb005bc088a4a44fcd7f315b787fb12138ff76da6f3037387e871faaf05ffd3f3df147a376a24ded6d87e9ade7c5c48562759514e456f08affdefced690e1e8fc57962316d2d344f4b93fc9153f1437fd4ee49106b78978d6e12499cc16e2225780ac18d5bc45517add300ba6ab30de20b09b4a40f8ce90baab72d8d78a5cc4296543c98084507b6332d8960e1b98257ae126d6a08bdeb42afa00adc78d91a8ef1877b3189f88eaba81902999b662566ee072e9c7fd306c4aa037ecb348f855373a423f89ead76e30e9cb3f5a101e504c5f3015720ffe4ef874a049d104f3c66af4e120951ebd64f4aa853b1e8317d2566460905372ef16d94677200569f1dd68c355cfe45d56935e371b5286c130d8bf6f985397564d84a41f8bb4b9b92036cfa90df38959da86df20e21e6ee2825f24b6627c7faa85a07c3b9f8020cceed5ae4e2e848a6eb1563f6e80abd55526cf9c21ea3114b9377f0ddb359ad4dfb37796c6eace74d88644b1322485fa8a95e84b69c145ed6208b31be77a847b89ae44d1bdebe5f6f9913ed1d667ce35fd70d8ea855f818a4a95d0c0d32f3e32f1a8fb9ea844ac44bfe110e44661451089622a40c5b8d44b2538d901f475889df722f9fc9b1377821b330d90e2b52f91bf4ad65a9ab874d42d82336a1c86fb4ed89098e54e2585a382f5dc38970938e80f607dbc242e257e9e06c7d6f12dbea7d3f20e73c250dc9f9ab519532d0e9c849433a7d51afc590a3216aff813482ebfa97d720824a37a1bf8590a7dd3c46befd3fec09a30c14834c60300eb161f3c1d5cd6ce39416b80f1f62407f5266d6829543b80a7485bb7772d2d23e4df44f4ef0825d54da83085a2b50e1a27299ac9f89c879d6db004483e5d63e926e99a39275a44eb741f59c5840c4733671ee1768f7f197152c58e1bcb98b4575e1707daf06d48c0683da5ec8b58487c1e30966d32ba13bde2755179505a843694208f6189f30406f6f4532314d030fcbac54acd373220bd7ac8ee62486e8a40a7443320569ffcc1f87d45e17c3d2cbe8ab9cc473e433656104f44f0e4136fbd6d3b4e3605991d5d61d394ed35737b743e16d1b4676d2a257190e586d48858fe19946323a1f0ba48a09aecdc3004a828708b8e1f446e099707146878548dc6543a80523c8f16ff8ce0f7899569123986812c872bd07db38f9d90414cc9f5676d6e8c87be468afe5ecf1d45716d320f9213be4232971c7f2935c3c0f3734c4a24e82a80cc13666338130fabeac4c746ded10aa6dc187efe36eb8fa5fd057d9a37444000c8b15af4a9cbd8b63444bf6081fe7efec5316440487df3d88d0e8d06ef751bc0200c8368133b065072a843775b2bafe411d19468f188dca769d2a79dad81eefc893b8b437968e4e499808c692d0b6e3097675241fc4d548a0a250e06f6f5d7e436c240e71917023ab9f77a2d2c440a241aff590e7fc642afca65f4a80e6a575ec118b398b4b3fed79932decaa99637c2494768ccde6bbf2b43ab0bdc84c1c4862a4c614c769fe164e52dcbef91662d448b3023e59a5caed2c407339285d3fdc559ad56bb2f3086735035c30bcb1819c88d028369b51ec437e8f79a1ab8761483e3ed7a1caa4ea7d3d3c89efeac4254a2f096328a502e270a5f4d6102c1a03edd5af60f695678b83eff461eedde1125f4f9c319abe67c613f05819b7065c50ddf7c4ea0979811a06b15040ea08d80899204732881a090570446018f96130106855e9e69d483315d2c17ba82878dfb13443aa4f0ec90cd85e50e917c76f7034bb24cbb053aa2f6190bb54d7a627463b207f6b451d8396420e0f438730db961eece89f90f6282fc132cd68d92fb9f0d26d5defeed99eb8b446df7635394806270616192b13f802308649a9cc496a142f759cec41dcf6c7b460d4bdeeab43bc920990c19e32494c28737f775a07e343b448fda45528ce8fb17ab1f21a0efaa70a16d259d696da26ed68c75a4844dc452372c86bf6565dff4c0de3145335e42643e9799fdbe97d94e1287ea317ecd44d31717a033fe4a2219f1874a0fbc48047c1800ba4de0c4588ec899282538aa568e8445784a2826f8e940b0c873acd40eeb1308fa8d4ee82195530789af38ef1d826883343eef1c62e4699382a448559899026e672c48523ca9f5bde44bef59a528038ccc0ec0407cc62252fc8b75f1ab75e17a0b420a3fbff77b5ac44cd57766d8bc22273b25bdb00904b3a3defa0167ecd4cedf9be30f140293f198ecb1af2156afbf8d7f0ebaa8283a0f94e350bdfa11fe09450a2e73efb53a4d2678f63ba4704e4584bc9121567180e65aa0a21273c52429be6e2a2417f832bcc4e020db527ce6458dc70610fb98480754ef02844f60ce0ca1c66e1412636a0b03fd7e1beb25be48bcb52a4f7fa0196470a4d7bea15a1266ccad2461d77d2b0cdd0f085352047abdd2b923fdc26cdf3b529318cb8140ad4120adf91f48384a076a771fbb1f87421dd952022e09b7978ebe6835caefeefc07837dcb5a11def65723c4fdce0e0799d3f6586ca643a6dcf625940134a4bc6a4ad76d6cb587d3368b88d6d43a870bf43dd3a24f38afd736ebc8bdf94701c842dd73385285f6726819f6857efc3b430f195a901aaf5edbde14e9196bbd22675668622285268f7e174a186de0913ed5b0c87c969edb2dc48d3dac4a9592792ec0e1ff5ebbdee1ba0c3a22030ca0540c8f82e4764b306298009518dd8689c759fbd5b570feae33b77d21b06df95f33d9bc39677cce9145c8702499aec8d3f8edaad4e24c6c6ebfd4cc6a5f086cfbfd75680c4663ca997f613a977425495a8af8ce7088ad73dc18d8416359c5be32d886c1fcffbf09d198b956329431eebc8940e61a3741c6e9462b6ec2128b695b2de01411b8d8cc7519cde5c8f7063ba6c0fdea56cbcb7e4d32c21b93d204be5ca77c6f7046abf0714e7dd8e7c4b4a5bb007420e633d60c5b80ded7a47d7df9c64e383c876126ff4bb8e486d630b1d51a2f5ccddd5ea646e4fc27139a682471608c04d7ad641af7c1f90bacfb55e30c1e162f51c822efe45a89ea5ebffac9b3b70e0ddfb7293e05a0a00f02693806fbac35df1ad1544c192d0b298da5943ee14177cb57de3e26863807bfc422c7dac7a84b2a31ee1a8067061c11db723242645e22599b3a1d42a0074108a50d9e37e865687a3334d0a5eb2ae695f5bd3444836273fc4d9cc96bd22670114539b3866eddb1f4dafb297156f85084ecc8030524423489600293258fb989cac1f8fadb9a3421e774268c66d66c2034ce1ca52add0497058d36e308e217ce21dcee5a1f7df43142f3880128a2f036e125ad8d1e6598929a4a6c2978fa54226083b3bcf6f35c28520c13caa1a739353ba829790fb3d9599f3382420b0a2567240477895c14527d3b54f88ebd6eb9e39a437814f05e140042f149c8429811c32e51b164394d23797d6992c04809f0b320964080a872c92405a7dcea41e552d6ff1ad62ae0f6623cccd44244732a3b1b9f18cd1fedcec556af83571e24444ae990160950eb059693724cc258dd1ae8ba3e6226b5e3dd3e3961c3e162c48ce2febb0ea12f8b190909971fc4f5cd98f5ff4b0e99fd33669b87bd4df985af2d4b470af4f417b3de4aaafa55df594999e8447e4fadcab77bb8478cc1f0f9bf786e04fb968a5bb57dab611385caae12876cb4b690e8fc610e139911bacb7a79c1d4083cf3e257412fa93d4744ece465b5ee19021efc420d294cb8cb1c9e3ac4edbf75b3c90def310906cafbd890180211294967fb534428f5ea106cb6075430bb151398512a7d5c9f038194eb511658a88bb034dd5214813867bb9f2b9bbb4af600f239bb09a423054171b33e1198028a8af0368fa7209d36eb3bf85c78f0ca5cda799e7db25e0204eda7aa9d74d0f98e1f2085a3a2f82cd3adc3a4b72b6072018ecbd206ba1c816ab10f75fa265b4ffcc584d05459b322d5533b054ebb5706f4b08e536241d99bd85ec8c189dccfd191a4009956ca9bd66b140a76e19a849d69e2284dd35d7df4aee5f0fa316ab966cd640ce63e196980ca9895d9710195c50897db4a711496f902066ea9c080cabe427179ecc802bb4ecc692185ddbce9386236f9de4464380b48787139f20d0d4aa207e1b490ef72d34a1932e41facfc0a6b791e075a038cd7c7491c97bbfdd73f8b334c03ac6bdade66c0082b72932f997bd5430fcffd6994aeb7d7a0efce27e37f309d2d46cbf0124f6e2b06073a9fc6ca56ccd1c13692c19e3f00273dcc204cf890cc4e3bb0b895a8996a2ebe6c2d9536df9c1e1512061d45fbe72d82405464159af8d054739583f68a4822417e36c10c608d5d50cf4256b3b71a852c3e0b727cc01b20fc8c7a1e53c835dda64544a9441c3ff43ebf012b41094e300aafaa9aa65b12a92d9f7b80d6267ca63fdc4a6085cf7cda131c055fbe57394402a7fdf87b661f00e70f359d9dcb1ed0e6999471b540b0e94206a324f59d0a86e224e243f52db51a7816b45df5e419c38a1dc37257cf3a45064d71ed05dabe34801259f4aa8594dd8fcddc482d99990914c21fa254000694d4766b1ab292c2bf56850daafaef17f5cd5b8dfbd5d58287bf83dbc6b350a391d80e14df535a04842191812c0c36596cb1f4cc0f2b20be9ccfdb6332f9c85cf8bd95a5675e3f1d5a318b6210327573b1e6889aed2b4a34a6ab5a893b40e5fa4ee52b57f4c2b2ba6f7a70a67f7647ff6c4164eb0bcf5a5025eb6b4241400bd578019ed62959423d23fbd95637b27a1448593f2170f2fb213b8737859b3c085ef3f43ec4326462005a469329bf40687d11712f04d404a3978986a144068f9c44383488ad5f5be34f042c16c9969f6179f2aeb3ad9944ec5fca7818bc1f652e51b32d6c9c37b5354d1ed02ee14d07d710732e43607a49b95133d336148540f09e4b94f4aefb67f89773540b6f9440a4cb7ce15adc5f109b4b704ec71a1265b0d25a93630007528b75888092d19a8ce3cb42fd739f29a24343b897dd2ef7c6ccba83e53f7f6d5f6404a5d7abfd3f238e95ba8dd65ea9bd2226fc5a050457c8f3cf23daa8e8654cf78c9273482c3193c920ea1c349b9fb2388226ebd800667e4b25ac4595192236395ae23f8271cfa6eedb46a94bc3468ba490c3c775a9138d37ea8eb27b54fed8018da1e978cd29e0deb1e7d181d4b17c801a74896920d2d868403c2322949341b1c2e9309706618d086443798758bfe996b31e4ad2013c4d6462d93aeebf877d76cecae046a4ce28f69393e7f896956ae1998504222fce6a3ada56ff0111ca61d2627c1c9fb329d413ccc42ab5fc9c164720fe1eb95264067b32a3d870b6435298127ebb99c3ef5faf176d1d3207e3dd273d2f304b9ea98c0669338df55a320dd5cfea0067045c0afc10ec7019e67707a9e4982a4b87e6655498316a3c4bc7b69add9a4aed10dab829be95256321e9202be9248532a3215b8bc15476b35ab3be54b338a89ca8a879b64c7273cdb8232d935901f2ee780a6d03e739b8b4a33d6ecfced514ef232fad76538402d07489e2dad9ae660680950cb1ecb1b26a96ef0b48e9c2b537e60733d17711adb30ecd5a37178b97af3c6fc1701d2a6a2af31403059c51d9a7af7488d2aa91e71cecf4a978db58783f4ef656e3aedd1389724f738a0f8e4230c143d5869c72173aa711bf667acea7d1b4e91233c4d2f637b2d565e0d5828ef418464c633406499473b57c28a651719f487a0333d414915f4a30136210b216441dd314caa0a937562fde25c9de8deceb8b1db4bf50921907e24395a52e948a850374c7f80500d3c9493acea4a05adbb034a4d2f989d85204c05231317edad4359447d134d22da7fa6c425189269c9a85d0117eeffdf5bde3ce694c240168ad648b78cd44bbc1a4e1a5d5ef49f64399d9f71ea26128e798d84a6050032b3cb93e6c070fdaa517111fb98bce59d017d4beaea12638e82483a06bc01a96419b1b67e64b1385a6098755dcd362060c1f668e749942cc307c7d14586c40b295b245017c45024a8f6d4f5e40d4594d0755008bc56b32213dd1e88627b432087960c53b892171243a8ac2152b1f2814837ea52f3c98ea9f8a578ee93eb2bf0ac1ee1c64e3dd818a828ee1728b823be041e2dc4462cfb461df4847c821289295d6f6f6df72ef24654a32c604cf04ab04d74f977ef6c380ec6946bf1ff952f0db362a816885f9befef72c20ccc77dad9f8ff5c99beffd5905d286f698e80ba6b4a4b0a0d0252eb8fea5ff4aff7d6fe256bee21717f1139dc346e02a7a70ddf4f2c67e6f7af718e09957e3fb52f83d7b373e93afb4b0075f93ffb4e83f6a5f7a7f661dc89b1dda7f3f728f52e935d0827ca777e37bd3f726d34baf86e93f794d60b34ae007f693b07d381747581749d8d50be63f5d236fb02934f9cae7054e5a256091e0fa8f7489e9a5bcf1a17d8f17aefdb1f4de735ec9647a2efdd1fd2b858410ddcfc895178893a32b736590939c6b7a8dfe6712123274bf2b8584f85caec2d830fde73d0bb7752ccfb174a5f727c18421b6f4deb33cc775eca960aaa17936c44fe64aaf46e94d214c8dbea687610240aebcd2abf1bd291cf97e255ff97099fb3dc7d2791c3a922ff4951dc27e5f2d2825cd178eb4f340be3f7cbea7dfd3cf3c1bdfd3efe9f7b447e9520b00b9cd32fd0f1efd69d840346c9fad66a913ba6834c0ed940d0fae7fb3dc49af4f22c1720831f5a2f5558f3238a8079debdf3e6df3fa421777e4d2caca3b368be50e85a7af17b168e2ba2b71dda5b81f79138e791217bafe4949c32fbef26673abfdd7d19ed9437bb60d241d791bd86d20b7812c1bb86d60dd406d03b30df46ddb36e9e2f54ca090b0455c3984a669da01a48d94d1e2a5c0b9742e2e9c6c72bde8a9a0a6d82827c8b8f255ad45a11cd6469cc9346e77a43d34a4495af4a73d2e98b063c3dae8256f6063ed9d96612becde3b10a6c0a13186e13f6ed3a65973c6bf5653385a274b644bc994d4aa69437be68c7f156d0a250388f6b893ebdfd3a73fd29e2436c819ff237587ebef4caebf0fcc48cc78b29d2cc74a9597f8325228af8600aef752d5a23fe7b44f8b26d07986a234ab56118dbe0845e5fafb94ebee40a2f88f5af9ca5792c69f2bd960dba745ff2e0db123ed79d11e9aa46bbef7a74be4cdf64e995c7f76020a69938377206b18c7550cc3df8faec486f003d39b4ca1f6a37b0cd0dea4994acf994a2da793a9647a5358fa190d433f10c6877b3704704d5b7b40daac7837bdd37799162f3fba8cde1d59e53c92c6df04ae08bd889cf17f7189b984be82b5e023997be5fe68faedb96f0adbc1c0f21d7d65f261ff64c49198365f9d425fb5e8b705ecf1c235bd1dc2d2d5f5f755d7f098c0ef33fa835efb9c236ffa3afdeffbead9a0ffd1ff40ba83f43ff8c2d890b9de7bcff239a6ab1c65fda5fdfa2b3c15e64575a9e9d5a25cdcec4717579a9e82df9bc0917e2dba5f38ca5cca43e6da6bc1d2658a44d2d42f5d0b928e48d782de14ef5ab06375d782dcdce1ae0559602cd7829bd0762d58bb07d4ac68d7821951762de83e7e2d487965c1c9430192a65ab06f29949134d5826c41794b21c9eb03dc46d118e3781246bfa344eb207b2974485bace3c6593681d8598122e45cd16c903652aee48d0f1fb9949954a7af310fa9089695e83c0ded5fe86a6da881dc6496d917d3a27fc6abd50adc3dd404aa4b999999995988a5cfc29ca13895614c17a5ce020e79232f9db4258dbb94a1138a2034d030a46e5aadb56e55ab1ac877db346ddbea566baddbf675dbb66ddb36ad6e34d44dab9bb6d5add2b0d5205bd5b46ddbb66ddbb66ddbb66ddbb68d44d2b66dc6846da361db366ddbb66ddbb62d880600af466db1c510c08402685b093b32f53b1257ea4a7db952e702cafbc2f704450a901231ae6ef52b46cda9450b366a71fe40dec060bb0712c77b1779737a9d0ab31c0c0a1a697ed68244e57a6b1ab5744fe48cff6b09265c48bc74ab45d4ea56ffac60f1d26202c0bc1dc82e80f3722fa4da55ae4f240df39fd7496fe4458bb2536b76712f5ae64da25237e7c72f2f0b47fec1f5676dd6f93d4a7786ff7937eacfb05bb6a2ecebd4953067c31ad630586dd8249a44fe221d7a2294cb0eb5fc3d15face70853761218842dab4cabfadbeb7e414b66a76e18bb7111daebf576b168652d2b874de8dea85a3f6f3b915dd7c4dc87a14566d81b3041286ff5492a4619754859cf1b161b3c804016a7aa08d006b23d86dd534ea09eb1a7afdc7183091e7775034a7adb84a20b0e384c1de85143b4e2258cb7bcb6be158ad45a1fe5bec3b095d4988e52a4e233dee625d9f3e5305f3b329f2463a8c87c28c42d2788b099334ee65b5d65ab509abd55a140a263a8f51ab7b0169099492860272c67fb5c40c2e8e618808545c9f976341aff6fed2c06e81a4f19f603f9130fc4f60b7244dfff48cb312ee42d7b9097e82addcd87e5a15b6ef637992e7dd387ddb6fec3abd2d31c1535af4b0a72eb12c940b8fcbe5df0bd8b75d80aa164a95629548dd6ee2fa172d9182fdf9d56b79d37313dc9ee3cef35e38cff3fefbfad269de0d96f738181bdedbb7a1f4de044a0983f42d20f7b194fef35eb818123c15bacf1ea607df978781de1e3d4a9786f633ef46fd2e8481aff61ec2c0f7251ce7937ec664a1c216eed07efb1da4b05b2d3ac897fb530bc8adf9a4e7ec577a0b8e3d44fff090f8080ed7bf5bd3c6859ef1f72ab6ddfdb9127ab22cc149395af4efcb43f286254c610b7fb0ffacae2b0300c4c42dc8c0f99c198bf3705dd53215af7cfca877b6dfbe549bda9c73d2393355add3dab19684d8ac03f206069ba918a7dfb328d7a55ccfb22c09c9bb913d7dcfb3916574ab9e854092305b59cf6ac4797cc56327fd4c951975cdf441ef1523de48bc36b2c42793db437bba46ce247389bcc9549ee95cf7ecb71a8ed459c2e8d7ba356d6361d9b4556987484e0d446a6096fdd47d6a5a48bda709dbcfb15ca2e89b402961a5a4a09c80801af372ed04463b2262b8a7ea50a073615c19e4a475b9addb36ce5f7a142a32561c63238e828b7ce52bdac345bdc346fc622bcca595e53bb26afacb3525cae82b958faf687d90b25af4264c9af512629d05841af2b4d772b8ae44e2206de8aaabe156ab1e6892b6992c1c75fa1efaf33268ea29580a627fcc78ae67465825add49ccbd94e95eb7e44a516b575a3eb3ee53a916bceb8affc357f84dce7fae82bd5cd906b83c4f11d86a1bdbf3c9bb144fb9a7202cd191348fa92e9b78f03e97719e89aaf982b36d226fed4356de62b46553b8c4391300cff574cb5d3aa69435f34868471a84b45632bea4272fd734c1b5fad5eaf69e32e9fb109c4221cabf79cc218887a1348fa0fa42fea629cf9c330fc5fdeb098b62f984cab562d964ff71bd802969e82dcfb6abafff4d554b96aa5ea61bd7af095d37394fe47bffa7d35dbb6cf54bfffb2242dd21e7e8d94c57bebef44bae8de206d521e025993314e170db90f404aaeeb7073a4481f05b28e14a90e29d22f812e4891be09548014e96f6002a44879c819ba820c3943df8aad2255d7c55338521929d2ff40515629d2b99a362f509d9c993f3156df139bca07a3174a5155501057ee285d5c2ca8053adc515299cd2854900f4031f695d8d1ca1825a23ead4fb32ea394b2b0cc68a61405af4858d6d11910993d95dc3368c2104bb94adfab41bf863f5a6c5a9f63f0851f2d76eb901e324f8bd97319d85460951bd655fa2809abe9a8e48df7fd3306795335d0e3bed65a9fbb5df39216272175ded3d9c812d6b638fb7588ff2894b5608e16bb597dd08b42c2f2af5894e0e6c954c706dddddd93c7d4657925e5440b773e83a37899f2104521e809a91732dfe2c79c6c6d5106e5dd7c9e3ca4d09d548aff788b97ccf9dddddd737ef394c2f26b43da904ebb77f73cc560bbe79c73ce39677777777777cf9ed3e79c73ced9ddddddddddb367b63ae5d86e9f2d4660666629044538dd51926bfbbd8003c9b889282a22f5d8f9ddecb6e10ec7d1e7ec646edad5e7ac915d1638eea759fb7cb96734abb4d37a767777f7ecaeed2d238a1fc31f33659a1485ed6ecb1ddb5959b88e1485ed3acf5d733da92345614ba712ea54b2f6fb4ca6cedc3df3d0d4f2d99612c9eb5a5a5a5a58903ae49135174805a703c53c67873b98a788cd788aa12fba277d1e2d56d49ca1cf218e16258a0a1b45874cbf05e9e968918e32ee06342093018923c330e8d3c7001bb1a82319f2665ebe5e65281dc0a59e35d979e183deb17659f6594c9d2dc81b794b33d8b1f6acd87b9add7beee0d135da674f0189838361649fbd0e191695653270300e13973f73dde072d6429537f366ccfa214787a807103fd7428c63f2866b931c6ce5f2899fa90802b3ac62857364d128a9482217c79aa76d30f042c60847d9836eb1c9313539658d8653fabe1de28021c39159a8eb6ec9c4ed7f01a5ecc0ef8f71fc5c88a3451e0a19a8c5187727379ecb1c17728ce503e36421d968cf54d11d4fca9b92a4452438f2d56429169bf355c44d3155a56d663810c78038d65199ac537352a76bfac6a64d17e69833fcb55a8b42bde80209ab8d5367fab0581ed8b9a081ed977735524d632228e9aab44d17720cc98eed1c2bd3a7c56d7b8ed907e598a4619eb1980e23f19e9f9f1e91374dbde74009f2dd348d93c18e53158b714f5794eecc2797a74f8b1c4b8531e6b728cbfcd387f5e2655848632106e2cac9238ef9f7a245fbe3d4594d9db933578cd3489ef3403eb2d2a2c702b8428bd2c51da78bbba12ceb39d635a5e7e72af286f49c83d9251ceb0a94178ecf382d3f8a475cef59be454ab9deb300a15cef51a0f72b0ce0cd8c02b8def38aff42efbd7f013def4be003613949fba99a395dc3cf2b294bbf8132e40952ecb71d0139336d66e4a0f814b66b482c75c73b6d67ab645092a5c7cd31806bae3d4f964aedc916244dbfd8353035eaa5cf43bb30cc7f017626d460c7edd2e72b774a8f85cb35e849cf010d82b3d6f7be241cd70bbb0a06e9de41ae033d40c3b18e1a503d20ecf66e6892c6b4c1e5df187c90b2362d13c00c88102152844811224588e48840043550d775fe316a7f194a49c351c94d1a397073b4e8d23503b27039fdcb8fd6fb38efe5732f205fb0af4f8fea3097e9f2337ace398de4cdc9a463fa91eeb4b8a9a5a5a565ab557391ba55bbcc3f73798e84033b760b945c95ad6eb5ee9cd55a140a2673655aac1df802cecbb1745ac78128ccf7b4aad55a3b0ee4394f2f2cef05f4e5b4a134e811977eed2e0fecd998ae95132cd8b900b832680546972b6519bf5ce899f93206fbf5c75137282f873966b0230954c6363047778ed9934e2896b03cba29677343b05d0c76863d096105546e095706ade02776658e1f3d33792c61f939061577cdecff161013e29cb0a3e40e5f983af6a50a3bd63cba465e1e1ca34c5e44545e4444150a3bd67741e49a3285c8e51a02121a0202026afd00b55a2d964f8bc5a221695010aca02096948e080aa2495010aca020960405b104e8f243b1d39dfdc1ca971d3598eb967e4a3f4a90a0526a442d32951fec88ba1d8e7c6558a3d819adb9ba062685a94dd15e975b43ec5f261fb8a376a4c12edb6f59b12520239dd12c359f8ba9ad63ce50e66a6d71729f14a78e69c30214252a3503de5700ac43d1679007ea3647ea3a6d98c60d779c994247cecc1a1d529c3fb2d8a1a3c5f93b60509c94595692d2350a98a8229edc2924612c8467e613a9ccc310b38e73c6996ff54e4a3fab1a65ceb2ef8c69cd1accbe823d76c8e3334fd3b45af9ab5ff58e85bb811d25ec7638a6c6cec01e8cba1cbea08385854507ff641df3dd4b4107858a798fdf5a8b92372c773e67bbcab2d364f2506079938742f7b6b26cff88f26cc800628aeb7d9bb0b2d995434756aee9c2f867ffdd9daf047ae064d16911073b4aa01909e89a09049fed3f13277dab2e5d75c2ea042161e44a69a3a1d0f5e4e2e29265eeeeee4e29a55473ce387354c76037387e457935fa3233333333a59452de28a5946e9c310d123c9e41d2cce7603aee6e188fbf14c5aac0e0ea4e1d49d34d29ed669036f2c80e3af28669ecd22a42dc3104e2ceffe1cec93bdcc9936d286a71be5aec4ae26874a0d6a22a344dd3e68c4bb39fd1a939533335535a16721573cef9dea2ce30176ac8ce39532999813f7aa65ff081958d42b52b954aa5dab3ddb4fb73bc4791b44aff59bf528aa243d8d3d8752f180b3dbb6b8a4d2adb734ec99a0ab563811cd4c0830e42b0a0062ad8014a0d7c2810244814e53cb1640a1f3c4183f65c6a7447fb1a119ce42478b2a716ca5336f89799c3d1dddd3d9bc2ccf3e43d278cb27b269d1ac1ddb8c37bce59fb246d524229caee99f4e93592181aece0c76e5706b56c20456b893bbebdd24a02068aed2b835aae560bb6d66909b57ab8dd9541ad1b6892162de02318251bcf1330902188088a60511d5a2d68c0811aa418a2a20807287cc8a1e5022032f4000751a204114288092809627ce8199eb4f8e92731235881872737908275658725485a2d867894e0a0e8c80f78d03102c561071f72c508d6151aa438a12368c51c21938061428f3cc9c188560cd0006240f004a68702b020e606102082ca0546d4008911a230d222c88d254060220922142149911b5aa9540084c4b8b26ab56a3e4459326459ae0c8a92430eac5f1914e5c875ea4960053d5164b8e1e8b5032a8228aadba55ec6e5ca2019241165e78e9f9a566088825a21a8a1f9c6288291213de8408a9d278e40a38bdcfe21412d9d2775ab0e450997456ddbb64d4a29a54c827029ddc24aa5bdcc465071292ac8881c5cefca2023925071f31b0552863c5a94957f7e8e1665e7c0f5e03b9dbc725461c73a65b361f9ae2ce0e62005276d1db8f92974a989e56f717a531e5914827072dac0a4d0dc812955e8d0601a8408f1a221bf324e00527094021d5c4e60e79cfd72346341bc2a0b082ab363e06862c7dadc0e445945a4a00454440d38060b387e5229c6e18e41b5d842e5c20f45a92a2fa2760191734756a980387247de7149398306c4588171fa859e051ce28b13d851ac47e01e0acb435d4250767a9cac8462408490500e6ac7b2537c51e5ca6fc185b6099566a8b46d574539ca10d140000000d3140000301008874463b1601cce0355193f14800a7c8c428054224b445192a3300819620801000000000000001019a1192c0000704ec92518c2eb4f1869d18a9312787f026e3f21173011c3c86c671746d98483068dff895a6fcfd579046b2e3184d0a285794ebfbdff50a17a46867e2155a76427ed635712b8a878d4cb1e90f4a2c478019133aa1b9c0d813fbea21969b6a4c603eb67a94fefe7d863aec9057dcaed2d645bcb5ef9774e6f1fc9e84a42f167dbeca07f098f58df3db6ace13d1773294458a8bd9d06de868e03a0048059f8b366a89a9410f2bd76197c2bd31a8ad13d4f20d4543d6fbe2d484e49a8b83244381a57a28cf93135fbaa05a297b6c91d61f9542ea7bbc048b7201a7697a278a8d33542db8b01986c454506896c350f72b23613bf50ef40cedf9db6e783f7d065e4197b078c63182d81de815fe441d28cf8a5e132ae45a8ae063d6e87107912cc95d5561eecaf3bf892f804028b4d508fd898a1b58dcd2730fd227a210e48d4d0717d19f82b2eeacdfae9edb0b82c4fea05c22c15f1cf5608c05689fddec66b69ccd9741c34e680593e3be9aad8ecd9bf66e19439c0af4fbc56e2f95c8eb7662da378fce10e00e2de1a74cb121bcd68c0264847016c314921151a034dfe6d20398151fecaa0720c82847b83d79cc0cd952cea70e6b524b2983507083ac207596eac145a0bbdf22938bf59625a8fe33cb3b5a43eb1648f178ba037c5a9982bf785d2938a170174853d5fe79d401decfb2cabd5c125349a8eaa750bae72e369c802b71050ee8d385a708313abc197893181ab8f3020415d804adc45ba0f8dda501dc6d1fd70989d5ed75ba14c2d1bbdaecac39c1b7e539045238733799e7314d6efad4d1957ca1ad1e9e370f984c45fac74f8e0ea3d6629362717d749e4d2a7f010a2dfbb4fabbdb255fe02a1e493fadbfc5267d80b27eaf416bb570f04bf3316db89d4703319f3099d60a9a3d6066a8273037420607fa840a92f302ec81069e86e5647e533dfd81d6831fbfb4a6de2ca1029e18c771abf0dd185e270877cd6924b3cab311917ae7d72d29222a49cec0e77390eae76e8c6120438814210063683b1fba2ba9ec2a6a94409b0f520139d76bc2eb7082a9cf66b60506ac4f32042a591c2a3f6f97188866ca2a1ad40da6240ef0adbfe222aafe0e78ff321f2a5abdf7fcd1b41b6651bef4d036f46dc8e8c0e2bb113db91e4cf50c4cbc314acae4b195b5b32d8278bfc1cbc514ad48c6d577cf9d8c969401734868d38707aa8a2ad05cee80d5f2421dc540d680568a2f369fade3f0b4c0aef880c246958f722da86bf6715212e117b21ba148baa3ae9a7a6ea7606f542d91ed4a0e0c7d103fba990481a675b41106d44d143c8c946a5bb3dbfb2ffb0e705fb8e4a9645bd707c4087381e888b72d3d40a6826aaf0c02225f9540b30a87f4c4fd5d2aac6c64809edef6feeee3bc040363feed51237ba3b3ca1627025da3973981d4be4e887206c5b306b2f43867d9490eb815c64c796a4c4c100f3d5d79db9624e88bc6979c310ae54906ee03546c2e805891335d219c08149b45618f4a8ba04552904cb028d2cf14599901d468df7ad2dcbff840a6fd5f524c3cea284117d6ebc22c0c5e35436802ed8430c2b6ab94d0555ecb0e23f459a8f4af405a8a5b779b9e4ea4ae9c16772c68737a274dbd8e3c2f8f61fba83cb35b26841f0290b5e24df8a8a45acb13dccef86de925de55e6e19f9ad44e0b7267f8b11b58a60d4a77b9d848fe7266e6c7973ce53fc9f82a693877f45e515560f4fde10c2fe045c69393b48bcae3d14fb84d4a0850fdefa5619cb83ee2ffc2b71a1ad07b41165d4a20274bfff4f7dba999b113954c7ea751e91c20f75ae1b30c9e97c1c52a594fd99c3e1be15f52812970bb8312b9b7fd396cbca32bb389af53c2b26b40239b789b96dc4a12904167870716983b91f8dd31132b1ea287c54b27e5bb941a32897d44f20566d7225c2db6a51ec1a081a10383565804ffdebd96acba60753e2bdaf4c218150d6ac4e0469c337343306d439dd14f1b48f112b855c0022e30d5c4f3dc0c30d2e731a1fe7a7b58fdc305d96fa5c35003422600077580bf25754d8ec6a0ce88346ce8c8c3e71e287db71411410a6ee7251cc61d48d29eab25316b40f62f208a29b9de8f67f5c11841c25fbd921f4b51198ab8633f07e8caf074960155ee5e8fe63d3120b5b00705d2fc7198def2bfb264ab22619bae953138f012d5fad221b27a56cc216ee9017a48f444801b2f6f2bc524555b6f9cd6c42633df42ab82d659f1a5085805ceadb786c308f74fd265667f6c161f3a81ca54e4f9a30b127f119d596ea93ee91dad70415baf011697f8b12c527c405025fc3a3a31d67d80cc71194fa7b4fb83fd9e996b0302cdb5191d25ed1ae660f2be758f5bbf4cdd592a4596be1bdb984656d8cc2c552dbf8ac437e31da2a03d2d49e9a4350f23732db1684026013c516418f6ca7fef4335fbc0f9990dacbafb125de604942a131a4f303ae09f2ec6198337f18b92a2e52de570a088ee56873ad44f49fe7c4d1e0816b1a3bd86c3a4ff8d6b866bac0bcdbb6eac55a766f0b7c94d1d71ff674d9ec1a235d2f5b3054c9c2f59eb7c615c5025dc99e431f59e926e7c34c077979cd648d987b2ed1c42c3ad4477abb986403d49e94571d42c1bec76c11fae552d7ba6a21133f754e6a9b297e4603cda40ebac460334ba2655a9169e532a1fdace2bfb9fc00eafde24ded1215a9430c6c7cebd9475c3cf17f4213a9b83676d246d037d30fea20d76b9a2d544f0350db3ec3e7b4310ab96eb417523a1105a7d308e1a8e96a6c6d63857af2c821b4d0160cb17e0ca21c2a230458318326b8d11db50432c0848ce19afd9cf5d464434be299cfa5d72d0e495d6796b7cf2e26662c697c37a2e6ba926c5c122bcc409bd4047a891534e20762e9914e7f14ba3bfac4920b2f7e45cde21f9630ff5b63827376e23a02eb03162a0cc0c25f7264eaec31f73daa4062934d3b6b796bf289828dc9ebe6bb8bc686ba0e5fafba91c3983b1fa817412e1341de572e790570232ba349062aa5eafce57383a4174137cb77ecbae1738f0df870065094a78fd9f10c709057f3ebf8ab7bd694096156d741b0115571db8bc10aedc06001900456f2a4fb10fe1fdd943f437f8b3625796ee0e212206df9d25b6676c42b5c6316bf90507b68648b46f451d879acb40ed2ac2b2809ed2c1f62a73fd49dd06e6d02e6e17550b588de92099bdccf2aef5d33b9430cde8d5e0d5e1b5dbcf32c881cfa493e477de906c45ca80bf8d5ec817952c943adabf509ddbd2d618953c122a5820cb5f6aad91bafa397b32324430ef1386e1b5fa296ffb495a796c98ace0734509b648baebf10064e726de70d590b4ae7001d84df0154d9d19af91dc0bf784ae0970a2bd3d10bfad9b19c67d355deebbb7e8603f381b2c5034c59c448db9814987d4c95e4b1b0ac7f91028f3e9be4b117f0dfef6f0743f8ac2d43d7448704d6861e54b63a43bab2551ce5106ebe021e8f2b08d4512f2ac3ca6a1901d429090453593564e8480586291f448f7264ab944c69fbe6ba6e5517c34d6e17d36c0e722ba31d4689716fac9de0a7a81af86a1d526777e468aaf667e88b351db6dd27f7272ba352a39529adf9f6a03fa1263fcc966324a65a9647d7404ee2ce1c317360fcf6911b31c6891967c00b80ed010ad88af35830282264ae1a721ed412db3e4d46c3c305cdab6298af9cafe5893e036eb531b2e00e5a5f3f28b3bd391b5a94df4ff638c6d8c6b30ed07620d8e8d18c5da0f6e5cb4bdbdd272d3d803368c265c875cb7eac7f464b931e267752c6c01c43ce0e8cc0169255f4a2be52900e71af834027eb6d7bcb8e52b8afdbac88acb583952f41af88106eeaa118448499162fcda3e4f6e9a037855a7d42a6a5d73cdbf03a38bae666ca647a009dc6ff1118243d91744c94487c056253297afb04682fe759578a4b846902d45d0a7457a38fd095a1438f6834eb99be8e561fb627ad55b112311db35da39597270faefcb808de6b68afe6f82a5e514a917a5a941176e9ddb340c3e019eb0a71894063b6e8466732f3182dfb99be94554131a5435cb932c26899bd24722228d8e14a4c22eb331f71513d5cb85977fd29917163a6336eec30d9d44a7489ac73026d57741f2f7e2b562332bd83124e97d52b7a2258af85ee3222ae2b5efee0e891f6ad7adc462592f73d87c2202071e36d172f9e96fe93ad2b969f540565529d7a10a51cbdb4bd0da6573c8940513dbaade4d9729f224d05bdfe370b3bf16999d10c1ff5ee7c5a5d8ee9dff269f75426446214f1ae732ddde90d2091d7a7a2e38b06edad0163193d0e3bce34c26c9a7305bf5a992eb2549e6da318497f34d2afcf360f5b56277eaf7e238695f1b9933104911ec90e3354dfdbf20f8a95e93e298c98117b734edf16f49c9b4e00a5e754802719b7ae477f271c8337d8147a1853f6709fcc54918e1e58d52f014e45dfbeaa9e87d44d292077d60edff1a4f731e098e61550b5e65cdd82d25a18bbdd472bb1f6a3de5c00fe6554a851e799a73affbfddc2cad7b44a1ff27d9da7c2ef3424035e8a835540c58152020e5d250d48cb8c687731b022b58f5c174d942e4fe643144937fa2e3535e668d1ea128f3a49a984d765365c9fbfdc66237abe4f1c59b7ce3299daf94cdd38f31d7b9c4f006d5a3ce0cc79cc9ccde46ca68b73557c67a663f2f3232e8a69bc4684d6279c70139f3c895c902fb6aa6437538dcb9921e253a7c4be0a22ea279360225e0405f7adf9d768ce3ca04a75dcce6e5ccb1f1e1a615541950adbc61ae953f424a8b6d4cc73c408a5a82cf23df7fa9d207cff1d09e12bc4f436bc4e20165f4cdf92c4311c3e77c98dcfb91637da39a87e72af68f6e0cb438ff00cc900ac3c1b23c5cfb22733325ec52a94f29e295bc03dfe1ba47c6d0941aa84ac0a5ce4393fd5f126ff547a8f75aec1ab2edfa85f91e3f172951733481bda22d45fc350ddf1f15e300fa0559e96e1a2645cfd356e1ea94aefa12eb73d44127850f4fcc01bf77e8d3b138fee87020e1bb3c281f90141282022f8236b6740021ff8603647c50bce6d8ec79ebebe2899020d75f62f58560de38c0ae1d52e31a6724dd4eb5d06821908df405e93096412921631a8b9f4c8be7c39a24284679c093d93ad08c5533457d57b0ee13dab1da4e5356124abe364ccf2623761a91122fe8abc1cb23c09692e76899c2325547a53bf380a51a68f302b21abb4e3182c368bc9ab597904cf9a0e42e7f94e57dca59e609265323983566fbd00e72ed340cda0c8828a47d703168277fc6ef8630ec51ab261414a1929504bc5c1be301b64bb03bc06e6572ed98bf51cfe21a2695252b63e406265ff681deaa833f2ea29bf19b95fd4ecb34c0449b19aed3022f71fdc7d44f40e286e06b76034c0753a5fb28c4a9bf705fc86920225c770dd083c1006c2874417b52da6a3555142a97051ef0a4969ec531e5012a18159c88c29037130e451cd2ac43fc6269323ce6de50f2e08ab5ee7ba5f881a18cdadffe9d6e7e5166f88ddebf1335610906c3b87001fdbb9e5cb4607a1ff667a17ee090560ac35051e8ef79b09ecd99c09418a0920cc08fbc976a9ce208bc86c5c30878e05c2c6e1b64bafd53677fc3b63aad10d928c17192290a3ce5b343a8a76cb907530387e9486f8d736b09e99b016ca451ea9e19f0904b98010dfc2636139a408a7837398daf0b1fa346cc270f43e1e900e676741b51e25ae3ce0195adb5ce6537c141fd508b0d86f9467f3b6805b3561d8bd986c6ceb72a47edd75fcbbaed8711b939935cb2904e119abdb21171e76853680b47aa20b580ca992d6047daf44291aca6f34f4aba9486f2612e3953c855466566f577d55bc3806c8060acc42b141f80f825d7e35b4025201fc6cffeca806bb7fb4f8281034f6b044e4b7f424c9946af8b5a920891621f8e869498314ed833fa671389c11d1dd3b54468b2a05f51a421b1e10035479177b82061a42714b7ebbdc20aeaa52ba0d48d631cc714d9ca2f152854f7eaf4a469df8c59000918b5bab8d56a175c2b9dc8403dbfe0006801b092303edf8967cf7e18459004e778dfbc3f63fbeead9b02aada22a1c2b841afbba538ec1e242911ed88037800bf2f72380d8d842657fa88c1cb13f02a0040ec4c2cdba9c720045b1b60e143102817cc580efb21a0b22f5b18cae0cfbbf3d1175cc82fb4be4266f5e79545456ea6bb139d74ffb8d7b506a661febab682ddfa8fa981e7ae6c9408d0b2e89f6015757f97f74c76aa7f066c154e47d9bbbc083cdd081226bc4152298bb0cd20dcb91c5650629a5cdbf0f366473c2de519203d1b41d22eaf2acf2f2a5f293833317d1d0d13fd21205729311ce3e5ab1caefb3d72919917338b52d925b2e0390b482655c5be5ed72f970bd866958370494ca8280f9683bb17842662d3671d3327630e1b831a323fad9944893dbc196bdab5af997252204c7272a4d24e4d00610df279e3d789c0e2c2c958a0ea30180d162be26159e7ef1f229c4d1e1ad53ebdd44cd8f5282c5d11628414d49bb1cf9d296672ea022843f302e413f251d112265a0fa9323588903bea1e771fe701404e0ec70d872cae71fab698aab24e434a94e39ff7b2830ff3542a3014227178b123b4223b7e48b89b507ef164af9c668ad314bd9444160124338100afa3d3201adab8baf832507300a27e74b7e1d716dbc55c3ba491fa5f88ed5f02e9ed73f4a0520bbb7984eb397709f3966cd45f63a2bd5abba5466f51dbf63238e1933f071b13d4b267d90c992829deb64bc6333269daf224589b56f80c694992a35ba82f08b9b8c5883910a7ab31a14b450f01a03275d942279a9b86464935faf7c8000fc62be907d85b165958c5535c3b49043b62a13f1df090d6d1b14b3498a85530d377753a7bd30cfd889cca36ef91a8340b0ab78dd261f1f1c04ab75d46ae48254fe5fad6b0ed724d429cd5995f4f1d794ad1f6f18c332f8e6ee675a9f6b13236fae3a6f8432ccd0a068a6b094aba7252e8d3f0f14d3fe0c78d1924904cb0caf74ce754ad5a8483ef58cdeaf3729a66aba7621424bf15da5c31531df2ffe920e9d66b9864801e5c4b508ec58b22d3e9b65d5e1c81b874177db98d6062ca7f03ea5b8700ce0d1dc7263b3d06c81ccd916c7eae1b76cb90315dac4d15dd49bd810ae81e0b5a4b9b04e267ce0a3c981a4fb5da3b90b988963b72081239fab46555da56e58531d3113560b4c03cf94875e0a9ca8ce67ed2316245abd33bd4dcf70f105b915cf64a050c39b0a4bbe378c0574c2b638c6dfa2e7a6ad80d56bcbe1387947a9364305f70b79692cc0200acff7e8f474e987ee169364ac89f8b9c55a49265584a1ee551194cbf6ab9d1404f4c0e2232068af8465017375e58b559cf5a3c7bfce84d51bb52574b82ef4c7bc6b6a7fc6f0e1395806651408cdc1818a71d31e903158494b72657e6435238f9a24d0024992ccb808c1b34efa21c9183c8ea95a7f313d7c1622c203a8c9f38c9bd1be49084fcf042202bc81e3f5b72683401c025a7904776aae1edf311752dadc4dab8fd821fa667aaa31c6e556523fb600e2e1d25823c0586aa9bedbcd244696c08297a8249a43af443f54bc46063cf4ed421566c2995a7b27cf58e969574d756a1d8767adc29cfdcbaa1867876e3a7e58ce5c71d8d1a24932836f13eafbf3aa02210c4b7e449010d67b4b71257b80ba026cd032d973c6f2c36da6e78e2be961fc9ebb8f42a3a5970f6d91cf64d3720067329bb634d0509276aa74cb03ec528b12e8a6e16c380178bd72ee43addc9b9cff2b16b52091edfa167ebf9599503b21a91166da913c91dab50e453dcca1f1a40fa4b9c9ef796646daf0d84bac460052618afc9d7e603328fbeb840841bd72c003c1dd8832a3f333014ee764dd050efc733f5a5b54eb5ec6bfabf8d4ca9cbbda92813ec942ea9672bafb464f770fa181766b4b492157d38b49e816cf382505736f4af534f4e2c338ef4bb751e259d15e0e8303c762d92170aaaf7bf3937e5e37b28414b8265a459e637964e880826979016eb0275bde7d689f4f4f4280b76424564da4013e84aa9b4be0f89f1649ca0f60c41e06bb15e33c2a8793f6f110a294427eb6622aecb9aa74e3c9831430bb2824bdace9c0351d099bb8d57ba1d7948052601ea68bad1bba5ab48bd9b56d33232609f5bda0296169f034a41058804acc4e639d3b98a39cd84ba226ddca15d53b3249f6dd42619dfaaf742d165055a53cf21f891111893c5764052511e309aaa45dc19366e1a8f136a15496eca313fd8565d3fca86c7bdaf8a262e9f83d3a0ba5339768dc2d277fa8cb4888e346b93007df39b4d04c6dd8be3762baad23be75c3d1230c273a0f0b745b73019a71ba12aa310663259a5989677c92a0d9919fed60b08b88e6b2ad6461ef72928eceab4db904c5db9fffef5d0d6b1c9a332aa946489ac09a2367cff38d9b7fda221fdc562a66ad1b0d391876d5b60e354449523f8e7a1405929c90fbe2b301f140e007be2a2037c50c4d15c2ff3b7a6c19b57fafdc2164f02394c8b64009d219e28888038d8e6ad01e59751ae1c047e12d109c43c510d8960fde8e1210435cb655b3ae01569fb73f00ed923a094ea8e36cc89f3b213a0f9fc04725c9c9b1b199ef7cba73b488520cc21e2d030608b1fa9a5ef9c7b6ada4b5d7d98f2426a3f0c55c77e0edd0bc7bb94a847169243071a8aabe624dfa217038a0519b07283145f8f7f998bf1bb13fd1ff903d09858b9eb0afc9acdc4bfadd8f24b8d97550d412acb5dcf520a204616dd69a0d924383e28131ace006d66eabf71e1854449b753ceb02e438eb130d8d86240d3c9a5b965a282a65e5b3338cd603ec5945b1d5a193416c14aa8f8b4a0010b5e4c9db6b68a9bf73f84689b00af82846326ee40293722257386ebae192a7d0ea0eabe2bfcd2f4c2814b715ff5154f28d00d08ab9d5401341402d0df3e6ffcf12a7bbb445220966dafe4e42f48d6fb03703a866928b02ba301e3d97053191296dad1988fa7fc415a54346f0534743a539b60fd927d40ffc563ec98ef1af4a46f491dd2749f20622bf20aeeec2b07bac372c57ddcaf16851f215b771009d836a698fc88ebc59464f8a65a1d56bd9ab2427adf6345592e2f034e7de19c610013df941d10a37af31254c4ef6c11eddb89ad14a8cd76afdf3be9b0fb21478ee8597d9e4ea4bcec136f13c667a9e4a84f2c83dd8bbcd465a9514a4a9b22a5cc7e8c2d03a63d5a18276dfacf13c8ab73db47a04d485320f9f51cd0ed18e38c0767a1ca464027d761e89333157f25511f53cd07b53c121aa809aa0501ee4c33d2d8a4c0696c0dbc341ce28373d9ef82bc7f5edc1e1470cd02ac1ed12607f31282f29090b4fd03bfd0f07e16d1b25095d20f450ca83f8294fdd50c33db35ca25918c5b4192f71202e85de558173600f6f4a2b5333951c009c4b92b417b0dc686fb8ab00c24a90e79529d4bbb370aedc6517df1af0747b12411efd392185f59031a1d452f5a5de1ae82fe8bf46f8b2799ee1531811b49e90096086905dc3cf309b99c1d0d29f45a3a05f10b94720d9b5cf612c3bed59fdf18616ce3224260634e77141a4527e427a5621e6c187472f8a80655f4b05ab093820c030b74998f85ca60e2f5edf63d8f532bdb6a277602ba4ad01e67aba8d9a0e52b53ee59fcbca6c79b22701596dc1d457b99be316d7195448eacdcaf43a11e589e20440a39877d7b04c312fb7792eab0f64426779bc12bff02a90b62b8bb4145d45bd7d23d6e9335769febdd52e819b1dada4c96e2bdde19310c97f2a8007817bfcb2968f3fe302a1776fc47ffbd0f6f2e3d29b8ef2e313fc422e3f9fc186ebe777e64c7af3b93712fbaebb8ca0a4eda323c580afe6d8d2a0e31178df0d7f0bb6e28eed29f2ff37f75d57388aa3eab2fa13f3e4adf85e4e07c6fd78e9f6051f22f74cb8e348dcc0b738cb0affc4efe1dbf0c988397cc3abef6cf8c3ee88d6c80e7fecbf7070d815b6b6dafb02edbcc8b8ae4a855d5511f3aa2fd9a4df0335d820a687c5d9229a17d31efb3dc876952d0ac5ef708d31339f989d91f416a02c2d3f724d3f7c14ffb0d4e394c6662732063f076b4fb770526095b7465e248fb9d3d08e90bc68b44628ed9070b0144d34cb58d4d31fd770911127b0001a3923f4475eb1f6230335a7b1c07f62d9d5cb34f1b8a9f118ac168a31b87da8eec102000a94556746407f0b9e72276699842f70de6885ba68682f562df62e107fdf830b497c60493ce1ef8441058b94b0008fe4e4c70779356c273ea15012ec1f6a48ac13c46e5f2a2f262296303130276b5e2b556ea3f8f21cee0082d3fda081401ab58cfed9d3084e85c65260c07c878ad6b60b2283b18efd1073b0ac0d656824a4ed36c9e2745170af535b04f19b4a17d4c09b04de5e641779680bcc0fbdb51460c6c9121802f9775452a2f839660d5e7168a842e476fff94d23ac16ff3224bdb8c262d45a2d34b568fc08e4ce5853bc4e68df5399e8ea12847e6d2493a9af62c14d3f53e7374bda41eb18581307b2cb26f885d52bf5b5e340ad4ccf61e061b50bbf01455950f6159037ba61be78497ff0f6f5a066ab3671a800ebbbf7ee6beb5d0b665a93df80437184f909f5594bcb65d622a969c56526ce8cd6dad17d988a25736dd05ca4326992f7fb08cabce657c9dc416a20e2718661fc2d6cc2a263a7309eddfb6934fe1e3678b0dd783da1b1a8ef058728e829401b8c75786be0dd0eac4308fb814703b094ee040422749a361f85dbca55beebc981830b024721a815dd72ed7ccdf8b652bb2a1d907d33e33680dae679c07b965584e708b0e71cb9df1dbb053df42e9ea447b619ef0758efdd5e66b793ffa14b6cc9eee2f714ce44c26edeb65d61f19d0f183068329075fb9c292b4f58381125ab91d3a76798268c097ea5a453ac3fff5331cf24810fa47a6bf5ececb3fd5facd7fa73ae84e86a5598603a13e0611268d0c6b8b302c1db13c99a1013896c40cb37cc4bed0b7913d3aed420fb0a4514467daf6589d944e7be523ef5b3f3a180883824c1a863a8d6548207be8693ea841a1962e12d4d7cac41a2be26ebab01ae9796a761bff7207e42c76d287f6315dc22258024092cbbc7c5ed8a5a79ec93468ed53cd23261733df9f3ef257002309195584d3e0ed0cbd4d2ac9fe6aa412e258e14b6769f5188fd2a949375567d8ea961fb579001636ac41923bdb971a16268202689415f4ee52e3f2d2d7b0457a321407775154149add90e35f265c82794925e76b2a87ac52b455a36abea9706b3c13ede91d96429dea7d9c8097fd86c96429c28c88295c67b589a3266e1689d290e27205c4afe525e8050eae0af1580125d334cb3bf128784d20fd12abf4c556cd0f155ff277263fc6918ea77e6ad4808eeb4543bf88f1fa4045ae485ea46b3c245e2865eeb91d890191170358cd569b057f435287e524b8b9f2376ecb57ad01aa28f5711883137aec0d794b6ec01d58c2c54f30cef5ce3d8fdfc45e0a7d63b8c9bba5560f4e320990bc0fd6a2edb0bf152111659a1e2196d46c1585278bc0f1f7f7bb6126253687ff7a8696d34ce731ab9d6383a447b0fa4a0f382b690f2be1050e4e2bbef231ee124950cad81e5b4c3afd5eac29f04ce5e9b2ed8fefd16e4fe938fa3ed0c8ee287f0eaa5e65ff2ad1806d0ddc59c0000d19e55431a00a05bec2dfb1954f9e07909c9928b1a4f2d60e93fa2a59354c20aa9d443fea393197c1f126441c43c06b98910cc18d18b7d516e107c1d6ddb65a49d26960c30cfdf2e8473d21140d52bbadca2848035373d3df61f66f68a821e062277fdbc611bc6465971fb8d1ca4a66f558134703608b74bb05b1ca35e52afc669e35cb71e739e2671e3f046bf893eca3f5ce5224c895e444513e9759447263de1bb8ab96d727bf50dd8e0847f125a4fd11e4ebf1924ec904aa7c6d13eba87a5c1160f6b516a8e101005856885643820d2f2c118298524114a0cf35055586ad639a635eb349135c703699e45a735913cd44eeaa57a45dc046a668a40d9bce5f4aa60f5bef461bf38268bc060857063c736724d7ebfd5fec342b0f35bb18155ffb8e5db2a9792e0bd02fa014a796abb65b896e138534b248fcc18617fce0e8d95c850b83eb70d46b500ff88f340e99fba7a4aac36b381361ee269ad4e03658c4071a0ad763bddb30637718e21d06053f1cd99f079595b243bd7c154a8210760dc22c7b778eb962a9ab5f362d7a197f5abb0eb4685376c2a60712221071dc8cd7387053f244f33a23e9be0e12a301e2ffd467a404ae5b147209b40e4e455fd8215f81c68ebabbbf4fc76c17b6945ed775273fd7276efeb95471821fe0328e9341526c0cc29742e8ee7fd477c4a9161effee81644ca7f0c2135a42315e06410ade80fb27ef5e1a9ac75ceefab42b51f552d7d1e16067910dc3e207978d915fb746dc652948402bcbcbab7f5088c327a868d2db6507afc65ade09e3abb55f1159970cbc367e49cbd0e091e83d4210692948332b9e326e703de80adccb38a87068df456736d3c7bab6eb1a602e6a9329ed3fdcca35c3f6d4582e4525a82527a8e6e75e0adb7b47fbf9157de8f79af95eb487e8603c5e8def771986adb6f8789425c77eadb9e287fd8df15478752917657c4232842bc21493426545149efdf11041c3e0fa01662cbaf2394489d89fbce2a6175f9a98621eb63548bfb227879a6e98bdd9647aa7944a6d1405998fd2f028421938b64572da07922c5504e19572fbdb83fb917d0d08f5879887d2db0ef3cb77334afcf67b398b5050e77e21eaf271ce1546dd5188af265561131c5120cd56c540c70ee32cd65adae057cecff2b7b233ae5a8503c7ab8dd2f2e6b0468f1fd1319d597374da3906446746dcbdf863041c50ad736db8c1432bc6753bb198e50e1bf39318dde5d2cc39a90cef73a8ce32841d046ddadb0bd961bc3ec28bf255c71104abf0a1b4a2328a3f74c93b015706ec3305ab549d0ad35e4cb6634a3d8ae2258e362b17a3d0404708c5688985b34cf396d31d2df5198bbaa660b8ba172fa915d5e5d6d72f291cc2f9915b96015cecdecd710fc6a7e40ed308e0a16fd8d5c1c90bea8f89ec42220b788519a402ca0ad05eaa533439b445f187d87b9876cfc5a223ad75239c95841b4451b56034a9e8c3c284112f7023ab6776d8b28156b8852de65bdfc2cf60dacdf0276702c86cbff1ce62526a00503271c423f740db264bf749c4495cc6cea819e479ea571f81f532da5befa4facaf43bf464d5474033f622d4bf2ca24cbe5c2051e34c8fd157826d13c7028a5cecd2004daf42695e67ec0de17ab5941f6e08bacaa1b26b84898661f4edd4e460417ef1fab2c65b2ad4a4394b4b725a3fae568fd20120f973b6e1aecc1c582d10fe9ac1bc00941108c49efff2e36543c7b9db4f8c3c030245220ee4c2957b8d32263706ef8ece57629103f68c5f45a7d22f331eb1bb2421688ae9ef115c0f806147ced08be56eff05561060347f5c1e469aacaf023c15b51647654c1289c28a830e42910bd8ad60c6c63368be6233f0666fedc6a9335ba103b88621820c50d6e9bd1740a221b313813503e993d069bc1b21bbdbf1b1cd91d90c6e2c883e8b8ee77b20f89875076724508f7a49205d517d9518b900fa34694d8eb9d04496c51c3968c753c2d2e5d83c2ec00798b22ab11b984cb55164bebe15270f2c4d12d4d6358a899e9ecc3a59c53f2a78a7e43b0c44c1d20fe5e5f8e8a804f4121b4562df326e3e509ecfc9d6dfbed496682631d52f9ebbef519106560d5db08b4e4579b8fb31c7fcfc35faef42bd21f22707f2cb8b85cc39ca38a490f4698f5eab9a35e59d794c7029e8ef38b993ff4c2d4afb24bbdeb24efd9e2cc22d2cd750b322249d0ca53d386aaa79247d53c8c6be111c3fc25e6615ecdc1785209548784167458c7dfd864bf86451325ab7f1210a1b433ab8520d08de3135de3443c2054167f473856f45e51d4071e12f450ad24d29e40f28483b353d8b4637ee4fbe52311ae47a61292f449e2e04d0b4f2e4c56c435155095229f5624902a3699e32e9afa8b27b821ea58f3f1448aa4ccade29aa503d6542d82353606453e395c0c9d3bcc8486a0a41358c1ebc0e2d7a985d4e1827db5fca34b7a49fc85a63cfea9e5fd1c6b68493fe182665ff1f4280d8c903f2815dab22e82359907ec316780d03c66410c5484a41440fc045b378c690c55e8d68d38a3eb30e4023e9ae1e67efec5dca0bb9abe257cd4469c18f0c718580863370ddbf3384757c388086654586ff281bfae7fda734cf02673dc30b7ea09bdcb9a7249944f4a42ff17ebc1f24853e1191f81ee29c0a86aa636672d12c02bc610c83b13bfbb92cf070cfb1a0ecd842c6ba825610590351f4113348a43c571c6025407faa53668819349212cfea9408674690909739c3d7f01d40d72a936493062d28dd30fdd9f32f904a36a455517fdb9b1290edd5abda8ca6de51c91e0269ed4c8efd5e4e6d33e297ad1a1e6ffe4131ae710d86fafca2a0a26d90e8ec7a9496362f0c2ea22063286a96769c8b6e5598c7f5231f8bafc500c2d618b17e788ead4e2951ca27e47f1c17e881855ad7a85e5b3e3d71fc20c62c8e720bb06c0e5756cc05a2e8cbc442c94af28a02ed5af00e71276ebe9112e8999e1885217c80447ea78b015a886a2ea48681dcaa7a810530a99826b2ba0e137323504f63b71d1adfb729b6e68f76efa14da3b83aa3c90100689c6d746e21290e6c5b550a70f3ccaabb7dc42142ed5aed0f721a6602c58693d30a31a5cdf404be22b50d44a6c49e559de9b43ad45ec9720262cb4a83e3faf0d5b0d4066766e40e3124d5d30cb6076a0e57782019f68d1c1ab1bc8228aa0d685fd355c3374a9fe9386c4e12a31e1913587b5f8490018a1c06af214089f6480224826e0f0b58c0671be49da116d32281127d725392dcedd514dd64a34bae38cca8212144a3a34c2e30aa382a5c0427a25aafcf77519833a26c17e9d06863178baf1fe10abc0309ae27b8ed85202d9470b2a17e7ea6ef68d1c0e9a58010ea6500d8f09e9890fa33eeb47531f0f924c21195d9168f84cebfd0e6eff500fd750c4e56bbe4ed16f5a0b7587c240d3221746559a80507d4ca72239d1cb2a805470fbca0dcbc8da9a61f07f2a279ef5709ca44e14bbbdd106df0dcc97cb628e3faa1be6c70037062f40cf958adf75b430d5790ebf865e4940ec35d67ad634f2d0651b5030d01e3751a92cbe983f2c40d5a39a3b9c9398c1cdd9ee5640e7140f14951d8159ffa05f01402d53ea35b6a1333985d018c07dd54edb19c397ec458e0bf2f34f7860cac4eba73bfd319023c549a8067a0b56cc7efb63531d70c2d66ce80ce67a9e193e5d283073c2be88d26760cb232594c1f3c82b1bb553d8bcb1c88405dca8afe350431305aa134d1e078ccf368bd6d3fd336dd7febd04f07bd9995d4fe263ccd3589fa4c374d671afbebfb972aaa69aca1b5e225fe57d23c31dc897df7938a7ec71cc059d0ccd5d31e1e83ed3f95f05d12169877d17f98d3b2c88b2cb2224ef0096943f0f24b324cde073a4c98a0112270369683d81a8e3e668e220e32f1e6f3324071989db6b933c92ebce606faf40e01be259fa5ca9e774ef80d7123a2d574f9ad5de30c96665ca86292897334cef818f054dc775403a876a7b3b895b7841d260798565f7382b262b8adf0d8710a5887e2970e7c297ed5252875748e6742b7720e12ec202370de6bd42bfdba88c93cdd3b5cc50a6856fc783202e0c957d76073f4e90d0197d04de9138f483d9359787c0d4a4f58c93b5d5949f40f7d642aaae4c5929931febbc302f025a363abe5ea799713e9c28ce461d01d3d32e3d504925d936842239aa57099f905cb0c35d87f9b12147806057273ccf6425fe4a139e320920879029023407677d90b87b939d694747b44c261ee08496e527fed9636248f749f3de3e929e3db51c5c2b093a8d902dbdd92351ed5ff19014dde9ce9dace4f588819e29387c6c7e1124af91aefbc3b13b25b9de64187f7d18f5a66b3b0cf456b9ae978851669df61dc0d69129a7d374d5b55528f3c936620f4c6e5c2bccae0b929d1b735a4d71716c5a6f5aa9cbb6374f2588ea0cb9074ae23a2ff183ed9e64ebb8a0794560d14996577e9fe68c2f57581c0a3c8509c37018e1d3482d26282043fda52be169ab7591b475aa2e40bd133cec911b126c2004707a667ad3509d8f115b1d76c9592fa2b14cf29ee85c0d82f5da92a3c93f21cb17fa42b0216fb5532b33c531a6de04d553538588dd095a399ddb28d9b471f31b4b94c7379ee066ca844104724b9fa0ff3d10ba4a9ed7846a47f31ba446da724c8f992740d3f4f48b894d33209a42a60662a01c48daef7a05a0367a3d9b760324f0b27ae61f10ba206cd3c92b080425732b8a5172158b1332227442d710982ddc898992e245bc6bb32df0ca4bf4a6103e5e2b163025889f837a5ae4853f94b9070294cbbc72d04b2666aefade580e443f652e045a8fa167e0b20b037c3127f8c70be240a01f09480bb2a1e0f6ee713af8ec42b7b1a32e350fa69fa894df7acfd7e1352cd179af41d0217ac30f328714b7460f51cb59608d055cc8d568a3b546a817028081e90c141bea776b36de00afdac83e5cb7716559b991d7b076e3c7c2ea8de8abf51b3b97e621c1b156743882a6384475c7a16c72549228ab1e27c904cd1d453d77c9213914789219a0ca8fccbc9054694d4556a3f8b2a6b6de98d5fd6bda3998044a80beb5a54c1d53e0639180f78388cf37373fa60d1035f0f43d9755372adb3a04942c2f769ff9107b4dce109b160f376761faf50597de50ed3769db056b513d80a84adec86dd3b689a0879f468fdbd5498858df2dcc832db6952256b6fec8c9c86001c6672417ca09d999732ac585f040fbb4e88ad57e7c58e904f3573d97cecdff2458921c10c0d08c506ad4cb9f2bc8ab500518a7413a5920bc72de7f352018e1bde0aba52480687ff993e4630ae71bbe8aa2cabf37abbe84926900e636106b0c2842a23e43cb46cfd1c485b78562a24a45b1608075a8b19fc4e39303786b33b3219b6f6c856200d466668e8e52a5708d9c1e5bdf0e7a7846ae00fb649f142caffbcba20f2b447f4f92bf8977afe6255115076fcf2dc7b7efc61bab336f187b42140e01056585e8ad60fdeeb8e59644504eba7c33a61367fc6c141ca56bda4f85798740124a1cc0b665626cbcc8faa9a438d7e86634f8ed79e55608bf9590ad4324836f1dac019b2fd79e8e14bb833004f2ca1ace7d26eb39f0a959f3433112a9c90044523c146555c488d1cac160e47c9c883273949c609110c5035e37140bbc8b6af74007211c073986783f65c5644fbc7ca6ed0f82609d08a9d11654d32c84f42612c0662f89098560b19c881c787cb038816edefcd269b81dff65ed8cd32404f315fb831a24b9296d1d1da5e5a8fb87756696615ea662297b0afc4709ff105a0275492cfcabe265b3e68b7a8d61c572b050f54cf7f872a233ef69bfa3a4eb294ae08149e9b94b73d6cad72c67aa53ca00f25da1099e8b4076fbf9022871ae4d2f2ea721e5271927946f6548856b6eeeb4da1136ed30000ba168003ed1d89904d2f03a68155d066c9bb2363a14c415a18c0c55f7ee7c92f9ac8a7f025fdc8ab5444298ae9f66e6e9ae28bbd626e6fd468444f308f8a38b2e68c3b7b54b051135a61da19b6ea661cf8ebf3f2b64a42f165fe59bea1a260f72e2148068dc8620a1bd0e2b040bbff174db5b0caccff4c3f06688cd5fe5d819c846b1893e8ccbef503b2f2463fb1957f8bae0f2a60445b6a730d07a844a94003bd4c49481f4df4c12fc9466f8339a5d90393f0ace725daec08177831bd8044ffafaee61d14c3d30b337d60ad55841a7fc9ef7ec8c35d73720d7337662643dfc88c05952e84d5f62052d1c8b6d2e0fe702813ded52c308cfe3639545d9fb2d64ea2b12888eb345958c54303a1f1f59c2213350874526e89bec8d312bd124f3417d6855ab04098bf63da2e32c34a852f4b10c5b7050b256faba85fb1de64911ea1669109f1a56bd333441793608c4dff51aea375ae2b0ffcc76cc2297ca8c3141b6e67a56bed4976d09698a6d05319500de0e0a78a0b79a327af9b125a6ebc94c4ccdca145337fd0e6028e36f943c54f9074f7e161feb95b173b29ce05c05521f7189470991f464d26654e50a6ca763e27a5e88d05d0f9e2f672f846e40a04513eeb1d19c48cd58020e93b3d8c0e9d80c26ae8366aa1ee323ecd3680092c443b3406891d2c03230e5eab971db6b8a85a61fa670f386bbac94ea3e60c06324ed8c3c3243d42eb4e9a380d52f0136da3ea715e5cc17df52c7702c7f78a7dbba8a690ebbdc0aeaad03bb75b2311a4007bfcbdd868608595a42ad5681e28fe0148fd4379aaa8978ceac34c6309bc399b3e518f26dc27420ed9b7e762c7589ac2260b3f1bc1667cf441883d33d0a1d7a60193366981964121782eeb73a292323472d7130486465fe70c39fb31df0b326dae840193dd2bf5824939e875a054483f09a376889a622e3e827595041eeb2e0087df9286bfd9eb0671ce6ac095beb9a2827106ed421a2d25f01cc3c11d73fbaf3d7ab1898f6612eaa3919cd25302d7ca84d46c81333e6befa23430f49d5af40a4a24986138d4b39a0fcd0cf37dc500211c5a5c2dc09dbc9d5d5b568796350000f757a5cee0d558f573ec78b7d623b09872b24f8673075b22d77fae04edc3357c6c7d27f46b50feaf7056e9c13be72112c86a2477fd90ca333a30995991b99e36af15c785487fa08448c1b1921383651b3f26fdbac26169bb547d32e8621a4ad4fce7cf456a2dc13d64f524f83aac4b83731b7ce31e39272887c4845b86fbd20c2377220e31a8c2158bfdc8e9cae3f84d5d521fc67ec07a55d07c02604bc8c04fa656fac5b3054aa9a0e015fb76dc396fb49c447eeffb4477e8ab0ab5d041b3219dd34e3cf4e2ef6e25d893b343efe52c47906f6fc397c4fa3eb8701d460d860b8a1581f1c5532303fa2e369542ec7dd9af9ad9b9090b6f7de5bee2d934c5206d80a9a0a7d0add59566badb5bafb10279875babb3bf8b485665156b6d1e04ecd739147317c2e52dca33bca21ed0381f5ec9cf66ba258ad38eeeeee374c10dc216e208292047802933c8a815237a226a34eae466fc288a475221f827cd9da93ddc7702664ff1cb27bdd99525212cff41fcaf295ec3f2dfac4ee4359a8a02b61f3476fc7dba12f17da110a3d2294e59f415992fd6bac16e9578a904769976c9284fb10559c69e4248f55a7c36992840ff25887dc9cd5769f768d323fed1a7df4886425ed722696702379f426d91d47c623425ff3fd5dc8856eb4e82f7649eee8f8873b51761eaebff57c68db2674b549102799fbae3bea514dd33e4e43cde0ba80695afc66c89e7b81fbcc9fc77e9af68563f75bb66ddb675c37de2c1c67ce2e65b515e37ebfbdca877cef3d0ca4be7c1b3c7356a5bd676d012a0dc3bc66f5a39a5c17304d8bf4611ea55aa6a3bdd46460e052143b1ced1aa7035a6cab85a30d9a53a7a1bfd636535c8a6f98e26e32385a6c4d4a979703373b1e6bc81a9ea17394a085fdae9b1d8de9518f42bdca77a890269429e2a27e94e1d1028fe9e5a782655a4475473613567ff6a0c2ebb99b3856098a8a3bca1f6c5d7e6eb569979bbe6f68178e9ca1a7ef956fd246da4832ed6201bf5552502f3f1d348d7a144a45e553be4385f2d341d3a830e56b84295846070b0a05fef6f100c197df03ee734fd32ca1673054bdc0dde75e661fdfafe01a28abb3d026fb1e94d562dc94f7202cd328b8a33cbaa15da9d7b436e2a69870e953a16c9186a88f86e355f9986f7a130692fd7c09a3a1b7d4af853ffcaafc55d88122080756e9d350a65b6817f74d3f1d9a0dce837b0ec834d248238dbcc9b44bbe80a3039e373c03c5167bcec292106a7851459610238f53a785e776227df5105d50721454051323c80f84436738f40ddd503e4881d26484893bde25ae49099312968b540a08b7e231a5c335f5745ec9c975e223998e989ab863cad463e231f198786a95ad45158be87c94f65f7ed77403d2bdb685f5eb6f61c37a74d950d31fdf627bc41da5931b0c09c92c59de800ba3dc51efe264f9ed0449f6ef239ad32f14805a8b76491ac48c683a50b2e7b1859c688a3cb65176120d625f64da53d369d798f96421ed7225329f76d97b41f05fcc828c705bc32a18a6ca8706647b0dcbeeb5efa67c04482a72b961dad7b0619de6cdcc03360ba22ca12077eca0efe18e9a4ed67a909a8e864476ed04d9b521ec8fcf516a3d4ff62b73d23473d22f1c168f37323caef2980581506ed6859d78ccb4d87e55c57f699a4ed6a12c7f9afe1ceea8e964f7f191419de73d07b434d2f8bc25ee283bc87d06a1b20b3839f3719fe91e132e65f596b35066faf1e80c2ea1fb60903db4a7e91af68cab8559f539dda74d05e9e46aa440b96344767a7c7e8086707466cffc0112b2177cb1250a05b5c4072f0d324d71e75b1a1bca5346eba1de696994f54e11eda945d3c727914f1f795489d0a3b185326c86a629ee686b38521dd8b6d109f44549511bf4a7a4b863cb94af99fdb8e5ce7e34cd47ed7c519ce69f414d593e36e28eeeb768a5db7a545229df4484e64d1f1515f8ccf23b6e87eb5a47c3cde67ab55cc32c67210dab679abb8d7272238d3799622f0b0ab1f8eccdf2ef1424db44c96371e2b22071dbb509ddde999e105df67235c2eca030c6951cad35e4ba73472041b98e408072cd7e32add94fae7806ffed3b0fb7074150b69f4238dee414be7a2a1b252737dc8840b92b2fbfac6805b6ac563f82a3fcd5771f0ecccff78e8e5e9819067f382dcef7ce38eae44c1be105a75df255f8f92f3a726655cadfe7f352be5678d24bf962fd68336905ec52c4c292b208f036c21ad667dfc18433bb1451f0470b63b3c2b358cfc236accffe06d6ad10b2be5b85aa1f1f969fa5ccf26389e55dbecb3c0fc7ecc77a9e08238a36dea56815ce7ccaf35f7462456484d0d8c9f35d8ee82ba75df3451b30eead4a50eef82db99d4f1eb3a2ec06d6b9d8e0aa6e4e81efa273bb677286912c9bf460240320cb263a45b9abb5ca8faebedbbc55c8e51542958af52aed5311f954311933bf14842b73e95f622f3ded8af9f992859752003d31e14b4f14774405a182e80bd543003c5a981fc1159d3cbff405aa47a57a1b78b4aa87c1e355fd0ad593a7cb1056d8a568b55aad56abd5af6cc404a0f504583dd6224f54509ebfd233c44e0f2f39e4b9e2c28495ba4205ade87c6b45e703b0a2f3312b3a6f634567851556abd5eaf3d1afaa59e101f000c036ac5f61855f01db00e0b3bf81ddc0e4a72385971f032450fe4ad0b15c862063e6b3de26c7931500c158df4dcf060c0c0cccdb16617e7e366c60a116670d98a7e90e26743192311306c6860d1b366cbcfc609ea65d8a268c8db7210a8005025c2cd42e1b3f1f6bd12e1c7f7a1723390333801fbff52318801814ea7184d8498b36421cd4e234fd58aac2a548c610000f008fcf026ee11114000e001eaf88479befc7e0d1e6f7e18e2b3eac50b57ad6aff0dd8a8f9ca179bebcbc2869170f99b7222dfac899cef3577edab5edb4387fc547cecc219757c5e8ebc6cf2f8171c347e16f84db0e65adf8ac442167607eb68cb7e5a57ca95abe83810967feffdf4e20636042993722326602207429a2acf98f73c78f485e2154c17cab0744826012094a60a208c60a553078c7ccde518bf30740440c1c984442128210c1563e22797eabb0267b16b651adbe4504a507360018ece00896a5e4159f2fee8a8422e555a02852c5260a521583f98622d38709b3221933615e7e3a5ca2b4e802835d8a4c70c11f5d8af09723638edab57a112696f1b78ae4fa22925cdf069e99925c1f060fc92a847285658bdaa7e0841b2c2104c3e10fcf4372188e5b4f9effe1b81991e7bf843fe68a8f2af6a3552e4523c8128eaa17e4f960387e23c8545c8a462d8f2b3e797e2a1cb7138c2e63bc9020cf3785e38b0f2e45e38bcf8f2c8f2e45e34b0f79be17aa1820472ecbbfc95dd59e0b572d5a4c43f693eb6baf42c47daf2a7797229728b13cff8588917e01604732394327cf3cba18e5179d3c5f6279be14c9d3e528bfe4e4f94eeb0306906baae78e2e452e64b4ab4669046445462e47599416a74b9466d5d0ba1419b98e33a316e7539c15b5387f7429caf35d7ab8f2c7ace879b8303b59a6706371f01b8cc3d454185a91e2d277800bd4e9025a94ee2b3a4494db8b4bdf35daa9632ff840403872e248a06ef5b74ecbc8b45aa2f80fb668e84bc21a0888a8083671287621c1ed9613a785103da17b332e7d4abfa5a65f72073eab764926414a32c591a94ca64e32ad9e728d5e361aa302d265ebafbe3e06da85bf3e0ded52e1ebafaad8aefffa37dae5f2f5ebe36857f8f5655a6897f71f0a2d5f83e5ebd7b40b54f9fa149033a5afb5be9546597ed52873ffa222bda75a790ac8991f3c644ee16948a1fea442b80a658b29605c0129caa7f4c317ec82820ad708594230942dae6095f0e214c619b66f0a6f2d85149031f249a14ce885f2b9b075b1a7527098371fcda8f02f3db973889bfdc5f8f928c0265c016397470974b3007d7083905da60879fe28816828c50d3042b2734749864ed7aaeea93385cc9f26fd3a00916422c550769db924fbcd7492e10bf09ae4dad262ea2d90a682225e0e3534aa51ea3acc693285aa9f2aaee234c815655c68d7e9fbbb53d8f2190a289cda147620cbcbfe4ca14ea64f09696408535825145285354c29d55be5e7b3847605cbe4492b469d4cb8437bbd2ee4c21ed405491bec0f87ed26a3da93e9328d5b630b04dd7dbe7632e38e32c8054a5b2e5d9319cdb28a4550d3ac524da569996767e2829cec7fc3cce997ccc2c76d70e4524816b9800767a2e4880ec6ddb4d314007d53986a915ed2479f6b655a29c9246368b6f3ca18fa5949e8d40420a2ebee0f3d64966e10777ed326c27e96643faf23759d0f5dabd591ba8ed47d218f27ad87a345d3b6fb7b408b6a9c12ccd0acc832cf32972d481c2d71d54229f5ecaffb941b0f03648ca4ee2edc1ffa0e9957cafed19f8c4cd3640baf4bade71f6996300e3c3f1da4972d9ed25f9dcb53fa89a359ad964bef23755df736e4f9beeb7034ab714b4acded7bb6b3f6378b43c3ad54ebde4ddb4490b59f1b65c9385a54dc9616085a2d065d8904b6fc968d32a8936906fccb80ae51df9f0e144d731b473d4a3f1ddad3ae5475a4bc8ba78c595951f90e04b194312b2b2a29299466d9de4d812dbf126fb470c8f0307389f451afe336aba14212781e92b84dbc2181b83d25f595b979d14ad24515520412229010693941c2cda0553a12a587077b440641091d34d1e90102099e3471c4094ee8d03ef47c71048cacb63c32caa0d42975b97a30e5554addbabb572cb5289556eb9666d6b74ef3beda69dd4792b2a3ed4dd2421eef3bceeb3c6baddd3a8dd3b4776db3a9fb6556ab34e4c9b2da028274bacd72e0d547b0e5b917c9e34824cee5f734cd71ef1cc7d3695da779d6664de3346b6deaafa6691a4ffd6eceda02823d6f6cf644d65aabc4216f8835fb2c9bf56b566b56c17ab32e73f72ccbb22aa5abba35c33da334cb6891193e879cf38ed455e7b68ef479ed4347fabce943f7b67bdb616f9167fb6efaf6737377ebf48b5ed24addc651405397cefc59b4b8ef34af4535f963cbafc41b25bc725277f875ee7c6bdfb37d0f79b8ef2cb7b9ecef36aecba8b75b7f61ae9ad54d644ccd62b5f12c1322c92786f604ac5924d18e38a9e2480d5efcd55b5a82af4119413841136034c185f7f4707124c9f51dfcc8d0912ea2b020f82b2c6a90c76f7145b4841c41c2872326e89b2042d8c94110611c91a20856f8704582046162054e9124c2b0020637758415423451411923df439c3bdfbf7a96d52cabadc40cca6852460bba4dca900630db2ab797f6e5e4a6f3b8964dedb39006f001355bac5d61062867bac80c874127dd674a0b3d4dcb342d73da4ee8b2e93c3a0fbb4deefc1e307172e65f439e6e728968b5fe57e28dd56b390910d213c48bbffa771e338ee0780d8e1091d5088031032315d420488b1ff058a1438b090e9ef064a704e439cbb21ae6e4e8306badafb22dd2cc71b42218aac8fddc02d21f6850a6944a1c2d6e52823286bab8e08ed69fc240fab455351f01eb983201b2f6ded2192dfa92c1f2d224f3ca17f79a96651cc7711cc7715cc7711cc7711ca759ab6d56db400ca0015a5a2aa2d55deb7a844eae667289077794403c600af01f5f5c02f9db90f47fe6908fe9a7205ddad39771652cd10b4a31f35adde9106d676633a39dcf1e0dc7bdd2ccebe9d971738f367b2610d0e65254ef7127e614733a0b2690843950f622467a323c6332c6bff31e22fe825876268c91a7500b3c0a0d87be244c27a611c9aecd2219e39f8553a8e5559adc99efe3881a0e7df96b318d0814f72247cd1480ffe83f18f22dfcc990d3207b0c1e03f922bdbff7c899ecdd5f707ff428fcbbbf058f37dfa0c23526d151690977f49ea121efc9bef32325d29886a95332e336dec0d4d1c99986836343b1d5a25329662f93653fcaa0ec775a9c3d73f648ef7124fee3fedd34e361f91a2b600aca59becb3cfbb19448d77b7aac46351cefa981470904bed5bcc77f0ad1178b4f22fa7aff59445f2006b14d612b59272cbdf05a096a5a96b5b6437130dd54fab2059327457257eab7f682b487ce9e16977047ead343799443744c3dc533a4300d5327a79e7ec98c9bc21b983a63264448bb462986d4a79f2a690a449be4a69d69d61da7fc485f6cb11db776d04f8dae7a21f5299f8267f04fb552a3caa71ea522734a4de196585fe651f490e7f4f6d351318fe94df7a5e9697a02b7b3d9f749a369eae3d3b2fba94fc5a3fda8b5d65a6bada6699aa6699a897e5fc9a256b23a8c2595d766b7a8eb4a1ef55a2949fa746a44d795689540d7c9e92d36a53e3a2b6f96521279afc5499568e1e96f2c416929eb81f877645c8fe25ab09570a7c4c1994759906cb1e75190ffedf1a07f7f7977794761ce4c871d3777508bfed92d25e18e1d4489346f4acd351ca344a5312ec57448b3fc69112315d3988ca13d54d541a60757debffdbb0bd0d8ee8056a58abb836696aff1f48c7ed560347582489bf7bdcb4095b47f3769625b477dfaecef53a20622bb8f80e8e211749a4d5837777e7e6aa0afed378c7776761e77f6e7cf6dd9a4ccf45b787a2f44fd17a6be144a580d986868a22159fe2ae0b181d059e1b147903d058c7187475b0a258c14ceb08619650ee94cd9d34919ae1126e99153fa1cd27f2c613779d88ea613e46b0ae9e035d3a484e2968cae249201033c64ac6474c7cf3e8ffc1be7cea323fa92b08bc7d6c9ae812d2d2d2d2d2d2dbf830cace57d85858585858585854587be546ad4a851a3468d1abf830cacc6fb778cbe52b04aa552a954aadf4106a67afc82df5d300a38139a47f388be6828cbffdef76f094155286b849625bc56a6d8af409cc6851e31e090b5bfff2929292929292929ef2faaa8a8a8a8a8a8fc0e323095959595959595951510044110047f071918885742ab12de94fbf69e2ecaa64c614a4a4a4a4a4acaef20034bc1a06465d9cf542861f3634067532861f2de7b334db2a0bd17525900ed3bee374dcbb2d943ea749c7b3371f0aa11408c1a9c9c394b3ee8812303918eabfcf892eb4aae254dbe64a0d2b5f2ad89c311b999e7b4e832d097d6aaef2af5535e52adf34a48a55853c25116657f9cac7d65c21019da259930e128fb5fa06b68979391bdda6ebf1dda675f430d8f33d7fa2a3fd6efd1627d0dc7b0a37ecad3509570d45ef542caabbc0a9e41fb94185254c6954f11e2aee0f126672fb3ca8f293806dca3457f07420b7952cf83fa8a3abd443d4d9368ba077d4d987bfdc15083fdfe6a52dcd63d4d4b19fc89349ce18a895234f4753a9d4ea7d3e964c256e6602959a09665b5e2f0dd383531e9bc1edd0353d6b6d8d9a3b8f43bd6e2949c8954fa9414ea4f4928962d82d7abe9deebb22fbdfc724adfd590defb1aef3f6c9384be5743fa0fdb684fca597995bfe1f735f73ff94d807b10db6ccfe11c8ee3b8a7691ad698fe621bfb26ec852b6117aa845df7a5b0eb9e1476dd1377c3166b590a4ea1700cf475c24d2968439d3d403eafe3be71b892e56f432b599eb97f75a71475e35d5262de8a471bea862d65d10aa67167ae3e831c4f2059541f06d9923393d21f33d3401f03149c4273a8cea759571dbad033576bad2e7401bcdfded2978755902cfb05c8f43b4c65322ca4390d4211721744f656b608b60859d280871db23ffd7478117287b608b96befaf75f1e1f6bb60014419471082469128359afcc420880e884001116870618218787d95b8dd05d1059125932545b27741e40ebb20b245c011a214c8000a942b72601e10c293146ce1050a8ef0014671a083119c40773ab9a2dfb5459f16699187e76f318a3b77668908779c40db6b1b9e34902c20bcc5c54f32f53ccff33ccf2b954aa552a95422914824128944b21db7f1b8d99fb8f729a61485e9c7405f167798c31ba68f0ae5c914de6b53227d1e0592fde7164a8b33ad4a96f654a31a9e44b54b69747265351939d359a3f4a77496cd76d67bad85966991f2e0b2ccca904b690c34b89d1dd5c38d8152196b333cde0b8ae2119591d93cb421cb2e52dcf16707f8fb74a4bab8137f1f8f994b2527d72bdd13182527f237ab65f53abdf7de9eb2146a3a26b65ef641609393e328699b9ba5b6adb5765a933644e68198be3e90faa6ec4fef23498de9b3373d90ac6b864a7da4d29d5db3a00e3d05cb54681f156a7f0ab31b7a5f0abb2785dc7fe1f6f2bb374db321d4ccb5fcc34915488b2e4090440482205010081281439a9050081a8005d65f1db7846bea93b0cde74f8182848640073522eea63d03a3932b12b8a23f85b45a321695d522237bed15ff6726edccd13afdf67d985ef3550fd950d5b8478ba8255bfc7ae49cfefefc5430587b7afb8e6bb2507b9477adcdb42120496aec9f1e08e94d5f334b02626ba6957a02b1a82fa1c2243516f5da974220245c7aeb038555f74f4f7a4dd5a537bd0fd29fb0094b5aa33d09dbd4d7de26ebbecda9674d3ab9fa4ca54c33dd0f2ad14b4974a31ceda84729fdf99d9d302d94b01bf6c8f1bee37eb3afe5640ec3e1bbe9ae4ee8e46a9c75e67c1148f459cd069a7d0bdc7c64bad694b9a186167b9464b8610f9a960c276e606dc93c0e0e913b4aa36c430d37d0ef64ea6b2f83868a264c0628a8a884bd451c31fa33278ecc76d3be194123f2948cb6a445da054d512d88b2e85ff033154d27a020fad282a806a4fdfc64ba7dd5bef4e4d2df24a5d4764acacadb589cf22bb826f51bb651c1f2693a25cc3e15d64785de9fc2ee4d21f737dcbe14da27851aec6a4eec055b32405213d2825aa48f83e9a669e6c4e856a0162d4aa6af4569b58e5aadad6b49202b6deb41f0c93540ab5d13bce2de20d313b52d5a3d942f16244bcef4d32f53033cfdc932e4d6bf2f658cf7a53f61dbe216a4d692e96220a5cd6580828486888a5ade729bc42babf6825e8fd8056dd091f744c417279e2b23aef834f534ed85b6f4a3457d0d4d3f3fc8ed3c7ee7f9e950c180fafa3e4c9f9554fe8e250c65c4a529611949591dda54e8b568678efad9d7d4d4db9cbe963e856b6ac5ae82217bd4fbc81e858124a9b95f1fc809fba86fc2402e9634d750c2563db422a3a38933755ca02c2abe0cfa1db742208d17cc3212687aff74f7d3bbbbfb75eb9b73ee3279fc5102b9bb7b63eb0ea4f4f6b71088f6db2731fd160249fdf6dd2954f59fb4cfbe46fbecbb6f609dcaaba8a0fe573a14e8414976201f21f2288384841cc9a3d44205d544084e7629b4bf5fa3fdc53649509f826d5258d5bffdadc9fe846d4aa6b0a684558d5530dcdfdec7ddde47a984256591668f9c9c4ffbea2265b995e1c22ef4c22f943077c7a1bb69cda620c9e76dfe6dd3aed17a97b26efdbf9452c756aabe1aaa3e2f547d5f5fc2b650f57df612d6d570c9e2ce9fa5e7b6e7de87f7a5dfb6f6bc277d17aa2e56c1b07df73e3c4ceabcc312c9869a73b8cfb19f7d4e8ef6d5e967db507dcaa22009ec4dd74c8c6c87de01c9119227d41c9c405284c40875042a2ca00061c80d5c70c4089223280186063e4062872168a0208a3bf1840741cc1c6438f01f8ed8c08a0e8a1d6c3a48bc4002833a821d10014915595d89377eb0a807388327c9123a1ce1850e479e30e95a4fa47882641ba2eb39bbb9ed94bb46ee9eac7e39a9d3a62dbdb39e3fae90bb9bce39cfe87ef0903f78f4ca09ed693713cba4459946c9735c21b3f2fc30cf6bc74d52220a05153c42b2a4628925445952c18413b977e48c059eaa7aa8a4cc11b881797f03f3b04ae21f35de77d826021276031b6daf6ec897b0d20360882b611e56f9e870543e264cfb09d3defb0e27d980ea8599ebcf5c5fc2ee67ef8532c898ec2b12b736e16807472893c9be77e80ba58431ae208265df3ded93ed881c19682cc1090e6c6787a88b72d63ba41a608183180e6ca43a39a3b1911211c9a0e20736d21d19faea9def2c122e06b8cf5e86af81be64bc173398178a94957d177e8bd9f6f64d798e323d7272bcff3ea77b92cabff437b01bdefbfeb7846d48dfbdcdf7dedfc064e80bbc58d53bff63e6973048610f5156f65fd8855e18a4f2fffe0626a472ac82c1fbee6bbcefde1dd774ff619beea1acec6d80bcdea1ac8c737fccddcce692743fde069be787fd9347bb44b9de7f9fa9a88ada704f714d270365f577eeba50259f24a4924f92ddcbefb04d12896bba27619b1665550ed74ea4acba846b65ccfc1f3be68e99371933b9a73f8a329425b7efb850e583e3b0a4ac2929ababad32c32dca92b54ef721ba2973b4cca3ccf6799df6da4bfafa9eb2a806e3c219a32ceda74e8bda833cb832ab7ae4f4cf37e59955d5a67bee2baed96cbcdffe06367ed672b6f7a8e311c42a1a19a33dfd1ff3258ceb37502e2c52d5effe0666a4aa580503f7dbd770bf7dadb866fb0e0fb94059dadb60ed6f605c28611b0d6569bfb2842b650c0fb9e5fafdf3b3df995d8d18491a03b5f47529092e1de2ba64c9648a27b842a083183be8e491c6b3a4a132ec0c1e2106faf26812b73b3bb62c5e640fc4c65296e35155df6667d9161ddfa11864a08f01e92e49dcd312704856ad15d3fbbd80a3eb02cd13f7352aba3f771723ee95dd2b2a299fc5d60abe94e592a6586c671ec5d4f74c612c292bc392d637bdcd13a6aae99f3fdbcefe8a514850d85d7e4cbfd9e0761e45efa12c57d28ea4455f00eae7ba80695a74f9b9f3df4d945293c9eab4e83fd97b648c7fb763e69013365d728a3bed32bd67b983531e25d09439985cf82ce0356df4479c470944a14c09845923d3c818ef712ab2bfacee36c8fe9ea40928e4cc3d7de6599bf1dca5c8ee3fee3e2693c964921fa526149653c6943e0f64c93f36379e6a64da11ddfe84f8e877939a1a60e464ba1871af1465e374fd73ca4fe59fd3850556ae6612a3cc7d27bd252d72f7d6e0d2fcc3bd92932e41795922cae2baccbdb744cec8cc794d32f72e56dcf9164abb3cacf25ee6f12613b52bf450ea5cfadcbb2cb9f44f61c819edb93f059d9c9c7e9039cae27e3c6d91b99350e64e5ab49091b92715c919d2734f1a829cf1e79e448499a37bee4951dad5cf3dc988e3ded257b6d391429a3d9c32c64a69896c678f87e529793ff4557aee4b60dc5228297d793f94c53dc78da43c5aa2cc7de76177a19c9ecdf6bd1fae46b63f7a35c89cfdc9dc9431f633c947ce78cf7de7853367516c9bc9c452fae272db0e7d49ce66e117728087ccf55f98de56833bf3e8df7c8047bbefb0f737f926cb4f47db33aefcbc259e07d422f71df67e5ae4dec50477fee8fda08c361fac6ee4d0b13727f6e82be5e5774af88e14e9a7c8aebd9470c29aceedde6ddbaebcdbb6dd99b75be919299e93e97b3307658214007dea041943bfcbdc273d92312e29b8ee5a14c927d4e7984fdf0ef153488f9474cf8927e5877747f465633152674f620ac0480a32fd747cdc494b7525923751ee28e74ea79396ea4a240ff5f2a2683e75e6366da63a52c93ba1385438f3494b752592b7c56e8aca8f3772cc143c60330a854a0955c2237a866771dcc777640c3dba44eed81da13e7b67637286e69723b18dbe631ad22e1e32bb9116e9b78df51c3aa2af94ef8e724cce9060beba23caa233a78f1dd14922d397d3c3c9b43b853d7377445f9ec464d13f82b3021d18c43275247c07d51ec3f4af9d73ce393ba316ed4ea631193363df952cc90ee44d3247757ed8d08413997ee738c8b4873bda988dc999ede9db21640e4b84943387076cbed41a91e95b13c899fba51fed11a41fad0a94c894c709ee470bc58e996dec880133a330356a91360f9953563a0c62de133a9276cf770245d97f6c9d1a84b48b50117d75cfdfceeb3e1d5ceae56d7997dcb54fa9d9ce4840b828644a46118dd22ea376516cf38da45f1226da90d221c5ffe790ec3e8b649f3b2c3f4e23357e9c4ba87e9c4ce01f270fcc8f73890a3fce18e4b0f1e39441f704213b7625f4382177ef5f130305dae59dde7f822167b4779f4472e67b6f1dd68343f725fe3895cc2f58b88728cb3f053c4e24d9f1ea7bc8dfadbf8dd0834c01f8ab107a0e32c63f05134a19d31926ecac42d8ab14fcef13d9459426235d2264e6f020295c237414c8187f55e8299031fe387415c818ff50a56565f52282375c5a2c45528f0a699416fd51b0299e2aec5c23eccc127606439957644e91b9c3b4a845ff7b833b529fa34c95f8b40bf54237825612a8452637f5c18911d96957cfcce141b23f3d22673a3b0aaf4e21e885d65b0c376b6bf7f40f31e23fc898feb1654cdd71f6905b276fd6745fc880d8c933a85a38fc87dc824cf631a07e86c7b9802277179cb8b9db59f50b17ab1f9ea71572860333a35efe3c225f760517065564397190e56c4227267fe78c9963e5916a7ef7326740cea826ded139e3407d1e9dab06e40c07e6f3e83cbb896cab87861c47a604b516fdba544ba5609ad6be73a7fdccc97d438b53888c0142c6f4ec41c6f4a78c60ce39b39759c3411b1ebb0b4bdbc90c55d9133488141e2efda645dcf7b7937665b56b27616ba1b2b883328a883b815c6277fe0df4358b8e3aa8e340fb3de86bda2b856cebd86f241dd61f644cff29f4218445d48930251ebfab0fb9ffe2f16b90dc4dc8fd249c040f8f22f5d928fecff40c5a13438f166bec4e61d3b85d9785dc99bbbfa55fa80ce8ccd5fe4ad0926b4bbba4753172c1f6efd045890bb638df2be3cefa368d4b2912d6bb29b06595710c40ce0c40c60c40c6b0c0020b2d39533f0ed40cb76ad889fd129b45bf5fef4745ab07fb05deacbac9340dde7edddba2f7cb76252f8f9e332076dc8a4ebe5c919e348b5cce1c72f674c9492abd4a9ea73c9f9427173e0bc86d3d5df2a43d7b6af3a91186f0140972e69333258a062d234f9a469e9332214fba843ce91879be1189442291de4a49ba785222afdbb4acc71a9a90a6827e592a95b4a1169b1ec9988699638dd354c9fd32fb91a364b0909b64ef0f20f7d389a52cfd68ea67c9a35541fcb6929c21a190f2f2b98447531eed0ab8e5d17e0fd787c825c84d24f7bb09723f45830969c819d2f7d3233973bf4707c247905b88dc3ce4ce21f74b9a2e954aa552a9649a243bb9700b3b4f2ecf538d3bb71c74a5e79ec49572d8922767be6e9133da6bdefcf2f6fdb7376f93d6fbf67e6c2e2c85244fc66ccf85a37be1f85dfb9bd685bf85b5c54321cf9fa4e933e8bae985d25f1bf666d1d77c6d3f3f6c6931d5e2e4c9b0376bba0e1db7456f19749df4e4d4b46f87c6bda6693b343c8307ea9791be243b7bdd46fa11ac254dd342b7a117de30d562a7596bb3b05fcb3c1c6da678046f48b396a0eba477bb92b57d6f83607bf69b6e1bbefeedb078060fd46cdfbef6d25a6bb566d9b73fffbe26cc6ede673603bf0d77dbcf6f8747ff6a3f1cb4ed49e8ac97a7775a7daabdfdec77d51be54c573dfbd3d4802490b1a33efdce677fed6e9a86c0c780fe19ead3a7a14f5fe59b6c52229d7b9df45b85db30fb1a6eaf853594efab9ce12d1cbd1dfdd376feed700f6df65a38d62c332c573b6ea8e2ce40a7e8e44a7bef9333f36b9070eeed6ceeb71d6639f7de16ebdb5f81f4a5e1e6b2b8a028d3d2aeee6bf538af7316caea799ee7d99bcc8536d02c7b50b2e8cbef9331f3816a19d5ce8cd276514a29d5b4cf7cdbc2d1471abc3c56f78a12025f56f7ea9ed55aabd797b59a0d2d65c96f29a5a459d56af52a3facb53a9d1f174dcaa0d49d362943491948ca6852469332ea8f76fb803729634e3ca558bd7ed5ba10eaad0599ce2a6d1cfdb5bc6a61dc1ba258b32c0677f599565bacdb1bece6c9201a1a20af8b220cc111a7dbb8dd3c88fd5f8937b697281409230a278461a488308c601286103fc460a8c58730706a28018a51168b56e28d5f01e5f15bf506736e596d7176469bba06243f45835b37d73e1d94a34da9572029a59494d23057ff4c291e29a5b4bb65c9a2618bb8f39d528b461562c7e40c0cbd238b8cfae751bb1a478adc5cee6f9d6e214da550ff1cead8f6fdf3a726075e34e1043b7832c44850bb5c899096bb26061930d02e98dc5f03172e52eebfc1a6756e7228c2678a309a04c1c412b0fe49a45dce82dc3f777872db0cda9b121421832dc6e041c8d013b05ec1125c5d6e09ec28c1071e6c81831e21c03a8adc7fa9c85eee2fb8c894bef5c0c821d31c640a860e32759269108ec82d54ca1c338ddcbdfd74741dfb028a3073af7d3a38a0264b7686b4d831161ec8a02620c963c7c2c8db6f02e0a20a1cd848bf634da46322917651225d194640b0b189c462ed92992848ceb2af9f8e4c4ad789285b90be7a48d08b272bd4fac41dc53ce98b383838418070702c7d815e0081c3694c09f82d2dce7efb629e3fb947c76850367b44bad3447a27d63f0d946790d0eca33c71f28ccd17a90caaa2f74e9e19bd41dd1d7a96d235ad4b291dd6574c2924e357809435dfb123698287fb038422e45a5fc5260034f283093ed8f2293cc8f5bd769d8010e4262065092c262a8b1f4091eb96440e5df4608bec6ffa74f80b0be60e0e0e8e0f433d37181a43051e1421b5e00111aee8c1140690d999f4808cec59f8c006d97f012eb44b32e9c288ecef8076dd4f870b713c574c57c9b96842ae4fda90d8e28998fdadb74519d96d90fdc11d2cc9fe2dedc291fd7f0746d90a265c4c91fd71b42b012e93ffa708c613c628228a18124e30c17da0b43c4c119916cc105766df6288dc42aeefa9408b327018894d17e75568c1825c7f7b61220b285207d95fa6c8420630d95fbb3d4b322974845cbf6e4760e124fbfbc3909868010de0f7dc96a701c8158b14e4faa2e48ea0e85740c933d9fd411aa6567ac07bad112175070c34211f218c84664004111628488153f44ce1b3638a9f0b3211428211eeee4b624b885c2657f420849066c91d2f18d22c99479b37f0c7da14d8028548c705a8bd6cd29bdd368bc20dae294b264f08d548c2172d3bd7cb92c9135150d0b95d964c9e3852b1e0aee8a08272ad11318022893cbe0e143e5540e1822c4289519696c51ba92c99f8f810042af2f82d21742df1414a2965d9696d9694e230bb86c1446848964d7482f2387d98e8a0280b0149129488216482e27dd00e5d221fed95af8ef5902f2ad47ac0cb8cd262d11177d4800a720646ce9ea6653575d1142a6a40128a1c61bdb8a3cd51c259b47329518cbee81592357fceff22cfef21f4746c12119231f373e3b1771acc57dc9e25abff3c851adfa04272a687782138d93cea7932c9c1903cbf81dae5a45f5305b12ed22ec944073a42b6838d3f8a403e29c8230e6f7e46674e9e3f670f79fa408d7ea047ed7227f21c27122bf21ca7933c7f8eb37f3a1479fe48bb802244c9a067e0c823151232e4893c7a913c93e4d18dd8d993472a448584401c5a6b3a6997d09090d090500b998c8c15f5bde2e8c8222a54145b80d3206997cf8f8fcf8f8f03a80bd30939f32d71553d5a3730550ffffab2633266569d5971fc681651d69c4f85e6d3214a348ff2f4589ebe93a7ffe4e940797a509e2e94e7509e3f8be63f98c75944e7346a2261d7f49042da15a3af263267ac63289efb3753a0c5f973e807192e40e4838abeac41430cd0d0e2ec41ce7c4c5c550d364cd50d2dcec7c11de5913de3d25c63948648c8ce3f1d3cb6ec977aaa5e1f4330bf2b9990dc097238e877251d2dd99240f2bd0f862da899a8b4cd5555490c15a211010000006314002028140e08c442a1582c18298ab47c14000c85984684661b895992e320a48c2180004000000080000008cd9404004520f8e9dc5fe102d9fa50abf5fe4215b87ec68c73a4958543d4ba6011312090821eb8dc58f40da9ca2813608db0fc6c2179142bb91e5b45f66366b21568b1da4e5bb730b75e80bd42d7d37c36fa9c5e0807aae4be59536f0e93bbdde14a50a1d9de35b79af63db9803b4c253982ca6c58d5d0565115e76b70d52132c54ceef7441087e85b350ba05c2634ef77c286e1384e9184309964f782c032a3e6e6be8030540394bb706f709931ccbf966b7a6ac8e30222bd760c4600d93f8f1504642021a84881b0e86e00f946c89019d81dca598c337af278e541e49f30c90eb4478fda3933dd74b0829c06810e54dc8195ed25074ea4d6fae8e917403dd95aeca55b2bed0033358709b64dc8198fa51afa46e44df30427305371b25be78160aacd217c0d620d83eff3fb6fa9477a8ff25344ba629066f87f20d7faf0b9c12eea275fcebe055db9c269fd62e570e03c270f4b1ae81ccec6da957b194070d2ae242bcdd124a735aed9bc19a8470ab34f7097d107582d556b7d15572b5a05b2908e8242a4c3088dac6652597ccc9ddfee4bd136a0fae24feea43d0da2a2246a02b588c0bfcac1fd2122c1f72fc031ee5b9edceb8f9e9bfccc615741d8a01e73880fdd0ab328cfa9231b0f9d691e200d037fc0042706681ffbf6c13423997df7bb54c918725482e0c557f895cb332563f042a802f77b3c3684e19d44c8298412a06ba426e586e27a78f86b6db5cace342b311e3e7c026b25250661b933c04aec251696f45f8192b95fb70c3a256dda92da58877ee2e9d66cc3b8b9cc4017474baf43c0dcefcde8509282b0c2fc0eeb5f6a24f1de348f664babed50a0ce243916bdc45fdb9487923a43a795d4b90d77aefd50b1a809b0cccea51e4f122e7850419b02992ee96a9920484df573f256ddc11462d47b535098cfdb0f18dca885b58b7d22e50917434868adeb1bd58086bec60b956d5a6d0cdf3010d47d5979d9861dc64c24cd38d2beed5d0eff7215058766a8be60aeaabcb984aba923fe02e861f60adad723464e188c074bc0916eb756c1856e389896fa5d39fbedbacc07c4bc55403ac7ea29c1b662044cb9bdc7eb7f2c6b8428b397f3098282efad0cc3bd5182f673fa3f590b9e02c2be84b2a2e92f67c0b5b401d312dbee203c3c0e93a6cad9e46a27b30955c7fda2bb994b4f9012fbaba687aea2fd1198a07af88c1fe14d82a4e4f9f0a0ea572df5d0b22c858e9df0a090db9075d8ee8f13e3544bb313b01c26dcee7d8ef289826c6f396ac16109e445199ca3046f0071fff772585e1fd079da1edfb4e7d2f78747b4d4de37ac0b1ec3e694e316603d5376cbb3706105245c1dbeb774dcbf74304562c5a68eb2f9cac296cf86407983d2b46eb02d313e7d3b4092ae2fc76d5bc610c4e84f472aaa96c4ba7ec51d880ae608f6658b9d979458200805cf46321df1b28efeae0dd50ea845d43d5c91bd1d9fc705a2901ba7e0b035a0263be0cd795935917c6d4c89a04bdea54e7505dda5d2e77b9bd3d471779c52688215cda080501366c332a248514b102966a843cdddfb3cc4d76752d898b9c7804d2af9739619523ae8831bd078a8c159e6937b63af2f0915daab7e2f657d88459d7d6b8ec5c485219bfd44628cb1d2ae680747785b98876d8210712a79e65f251d3a35d172bcc481a6ea10f8eec03670afe4efc9aa283359ccd055fa2fbba506bf5769a49c5bc94ef9a57798c7558260f15f3b69a770317e96af6d67cbd100ac4f43dae219ff8d55226bdcd34c9a481d27c35e08a7a54b39499354e99a2a8796497f8eef740755025d44f2e3bac51d636214d833b9cbf2e0bfc553180ab743182bf13e8219d106dd1576c3fb803623f12b406f65e84863577aea5790c5e502c9e0cc22cee9e70117e72560e5d5afa1a3dc6b6be92e92fc75894aab8dcc4ed1fd9cea10a5e355b73355a03b2dd644071a1abbbe10a1e5a149c09b7f8fa37dbf322483715cb93d5bbb7aba681f67a4810f1d45e0e94e4c963794edb342fde3a514c49b1cb9ecdb9d46a08788336880958a9fe00a388f0be6ced3803b578f4f3ef351a0b7018b6bf8dbd34706345bdcd75cbb236d11a7c666e65ea37c60da87e200053ae5c7c032c2c470fdb56962fd5c7e834589a721873965b0640204ff23b01aaec2f0b520c57f24556b8527aa20471225418f22bdd82be90502da2929af4d2b82af838738028b9a099e412cca4212d1df6832017761a9b29d048621304958acb99676187a90a411833e1119d5796b5f9ef863183a1ad2b6223b71cc121791096fa0685bb4416bdfac133eed4d7c4df7c06e1e8cd4fb52379f23a3ea862e6ac45a55b9d5bb87872e89ea7d9cfbf6be0574b12e6ed6c137c7231fbc3411bd8f7dbf2b6e08d04163fab531a1991b8dfb1d07196b9a8dbcd9b2717143601a6c2c2674e4626acf6a3446e9b72b5cb4da4275ac4b5dd3d48500b0e816b847a7605193f37e37c1204c768afe3b3606d0ca2fe59240eef4a51139cc2398b33e108af64ded09e0c9a23458aca69e614ed6376a99f935a8c02a8223fe030d23bb010a46a60d564b25530458d3b05b10039b861d54bb924ec17d8e7cf27ef39301e3677352b0360a92ad7ba23702886207dc22c09cdc133bcdc91a1b0b83ee67e35420f6e42e5d9b46474594f2f67b0764275a2aed4601c1ca14f7eb95078047830e18acbaa1a5a1bb4af6ba13d9e73df2b9ff4ae2db65fe2afce803cfc18ac4cfaa819aae5258f28ab95ce2fb9724ba1865c0526b14b0922c81d50112b1322df6aaa12bb2753ad606ab81967567a9c32a889a46735f30c9c035917a145708fc80bc6e603682ea8c68438e9bc34df919c192ad2048ef9d09e11bce1df2625ec90bed05de75afb7c0976761ca455a18a110ffc0f51760ffd2feb6fbb39aa1cc75b52ec6e664924754ce22f2348c06bfd4bdf8417ebce343af14bdd564b89ee48de263033a16917dae83f81987bef280156a4127546084d70fc5af53d05227e74dd97e518637dee478e6563964a51f714f1daa1a41fe58a9dee9ef8acc3dea528eeb00e2fec3fd976dbb38603c29c5d2b4386e24d045438245b38680bbff6166711c0de8880acc25572c494a20487b637850adf8c919b91f3c4017899c5e72de11ff7b0fe8452437c76b4ba5460c6ed0eadc0bf923005888d30c8f98c937c5d10a75e13cc04810253dcd1dfd2253825df63c88c00835dc83a1c544afc5aebc3da1073a3874b7af8273ca34b4c772416582e544804e4da2c4c7934c378e7d724f8b4f25e94e533201d3074c459d6c01c213c54948863a1694485c1af5b719118e507b1588318558cfc40ce208cf5dddc6cd48ed63ade7cceb2daa52de6bbae9cbc13a4eae032a1001490419947abac57008eec1bb731e074310a6c661f5be474cf659bb2cca6f02367bd6d2e21a1a66cb3cb88e714b61bba518a25e06eab8eb04ac4ad758faff7fbc73855b6851ec93b954735d30f5480ba232e6c37aa79178c278995b58aeb2b58edbce24faa0d01dff833142db6b385898bfeb3dd49656335e4eeb8496eef4eff3d4b7aae833d4831d488fdb0d58680e43636595d6f24fd61bd0a81585f88cde0e6fad3c4fe20bb46f4b136ece15ff1a40888414914d97cdd453425322592cade54085d78a6e25ebc03e110da0615ab3d51f669830c7530cabd2bc290bc713bd94e8d544f77dd859c93c107291322f4332b788bc821183ce24c1da7b1d611ba4ad1cd1070059e34b2d14b664c58c81ef141312bb7f816b54586bafac2bead8a4f1d500995c6b52a8366aa27804e88cb11ebc71357b6848f93635c3cdf3ac9ee371acaf0338e4958235c58f04c6158e14f6a2a89327582a16a8644ec08914eac6383aa00af3221a2675ce41733b36f5fdcd698807a0e56ee0f0187e1b37b85579f534d6bfc96a495a136eb5fed2b5a88ae25c30a801d28247907ac3b3dfc685d759731a5f0ddbdfda52803909a6795de23df54dd62f7cf52bcb67b580acdac41aa5600e9d0d67411600450440ee866c714db242271952a41371c9cefdb3df58078667cd39cf3d460c90610966b803a1b170bdce7471d5c1bba540a1e4a7759aebe4fa3719ea910c95a0aa625f484f30d65c8c25aa0f88cc0f8cb656f0692592f6a9637e930373ceec66ae4e89b045fe5a845e4e80484ff84a5cc6d9418f3c3845bbaf669e13d20b3a04c3aa05fbb31ce05c2f2203876231f250d05085ef1b329f5339c3e4441c1bb6929aefc0a229ce1f329535a03ce0295668f21d9949df6cb5eebc259c27494b78592aa58fdc392648f774343caa04a6b1589a19567e78b470da9ff734def918a8de1c7e0e1cd94c69ec03cba9991101830fc8faa0b33c91a86a5b30c607daad3cbc99610999fca0db6a6c1cbcab913898d85f85942d88a7e1589903f99e38026a9044f53c16ed5df99b2bb5c92c778b8669bde1197ca7521ab0ce43965030205106a0a5ad7688c4318ea11167e1a12cddc7bef72f3c11f71ea7b4c171f19926c1185a5072224b346a5b67d951665c6721ff491bfd6bb7e98571c99b2e62bd283cecb85b60aed20de81dc0c77a7832fc94c2ced62163b4142a86defde7f448259f396b1ee41e99e7685b8063e3c13334abb6bea00310fae33adf21bb80f1a242c82737417f92139dcb630f5c0cd6077eb163602e026dfb2244300fe37a95ead9c6fd3527c34c9499bd311dccf18de3ca78a0f5a2e16a8f77b6c943415ef983bb0f08fb7842f834797d666eab4104cbdc8677dcfa4dc4b1100257104d729e2864d143b343e7b567d4d474144197a4bf416bc1e16ef0410ff938ad2d7dafb365d9d949d5bc46031d08df6f0d087c7b183ec4fe2acc2f6ece01ecfbbad4f86ba75ecaf743f843c17fdaef9a88594e935e4e204727f3262e5b8b7ba2823d9cc43e7f909d68167772d0649394d0f4aa49d11389b695dca247c7f5ce08a23741846b0cdaf52be0473056b3abc9bf08014c93e565c73c782aa77faa51b0ae69acb7c659d033c65e82f3e4e316fb17df601a06c0a1a2afbc7bff1489c480af55be004c44002714fa3d8f099f2873f5432c90d9d68d112c74671075b53929a6f101cc6ffa72fa573053310589a43cd7dc377f8c4f445b1eff0bddc1ed21b7269e42483a96e69e82a7711aea9d558c1e30a425fb0c1c16c450d315427e0f13a633c35434b43ac15196a25f8dd0fdc6036b2eddf730dc1d18cf3ddc95860424cb5de3a59461559f707579c8104013cf58f9465a7ef84a60851c85243024e0a5f109410c59277c28de660d6e54af9222961bb752d048298546ba14da08f3f6946d55b8e6b0872a627fd9298a65a34fced67f1d9d8e75b0011aa9085090a1b76ff59035a047ca6647cbb34b0907cc8f62b9d1f629796760072fc7ed6a9278a7765a84eeff21f8e5f8051ebed07900f28533a50b79b7415829f69aca130678a472b45ce675dddb7b37a565afa6542defa4b8b4f4b49b276d35d61e7426418f17a5c09927149d995be5ce6e5007000993e000c5a1e52f67064ccd1f547531086eb849794452d03cf86496f017044f4643c744f0acc317dc74d16f6a4c43147a65b7be2e5a01a77902aa755b70a801b00d14e532bc83147c733530436a066237cbd87416264d83064cd6e3178c4fdca52f5505eec95c4bee8cf75c0b3fddabdfd2d0e9cbdacdc6f7a6ce3c5827d9091b7c19694527ae61b1fa5e613cbe4f72db890402c76110c53152acc3e8df0f55a672391eea9aa33b6be5ac386d13e4d762163debac1b76dd3fb8cd8bb35292f0c712d7c8999e38ae28e41db25a44b480b17a7c29c76d1b91654118c1fe10cda8bba1074f8ae0f89a63cca0b248ad31387195e07943096b77464f05d4b1c34c6813a20442f478d744e6f179f89ad22b1ffa28438479e6417914b4906e67613959292b81ba9b5d7003ca7e5042c0d962d172c8714ae7dd386ac53a0426b174ac8775c22e8fc3b04c89640119492eea624d7b6439a7e1ffdd712ab42b4ab48d0a3cb7ec4a56760dc900239b6b89a6afe62368a123185da87549a274ae3869b98debdd6464c8300b3776b48a00a55a975bc3321cf9c9bb48deac2e65cdcc6fdc984e6f3ddc43e2b9f4390abf05be62be40688ca0ee12e7182806e10b4f0f58a6f2d910fb848b41856fa18c120efea82ff569e7e49fab6120306e17cec43b532874530970eb4fad3ae226acc37f25cfdc4827d34e23f5ba9565b43857c074cb49ddf34302bb64e7b2f62d8b99223c3a4fc4aded62862141722bfeb4765c08a500094be7a0c4a9b80cd3d670ea8c9e32553d5c9bf80256968f7afecaca7b2454be17dfa4808630fc800c0e854c1670fd8a31e12bf818189834788e8e9526fbe2b3270717dec94f5e88be6217cf532b3442472a075f7396a7915cb47e235d208e92830278d24bc144b83b9ecf2d0cbadd2f3cc3a2ac9214876fb03d41f270166ded69601108707fcc7e01126c5e6b1bceeb64c4d3cdeac3b0cdd1e7276458a24d0da39eeca12acad073c74d2a5d91de20daad791b2d328ad8941e859870457387311556510b04499712146b4bc8ac80b877dfb8707989cc1431ba3e0891565898197dce9325ee1e2fcf724a3a61fd60a9d63b90420ba1aab830b0b08b66ab39db86fe4568e51b3ac0351492cae0cbf1b9323b44549ad7f56a363f215dda3c964a83d5fc2be4ae53ca4403780bcdc2ccb4dd7bbdee6db0037103a056c2206b8d13c80b7c60f6a64c59e5c6b3ba36a53fb3bae2fdad9d91f685950f3bfeeef14e9a11bc82aab0f594e1dcd1257f1855c86eab96e64e86886b553868b578ff6f59d5f8094948bcc78e3771682908ca51e1f8e652ca2972b8a9a2b49413ee52b4a2237bdea611543ce846bb851700754864ddc83f4f9172826576ce2c1a0b8a3861d1e31c05d51aa879060874c61479063f04ba054b5184fe573d7ea60d7789b2649f8ac017fa6506282150715c029c2f34619188d64fd7f82848f3799ccf12605952099fc843b184c8aabcdaa288c9a0929e249ab121b93cd483ba3e5b28e8896d206ff9a7b1ab7035740512c4dbbec38152f5435e56cfd36f08c96a5da012b5a70ca8fd9a55642aa7a0e9695b0ca47daecfcd11be6ddc43b2e5019dc254f2fb0d2bfbad40d5f31dbe882bce627580cd179ae395cb0682b6499572b6c488900f0a0e21fddac834e3d7be3a842fb87c71adc73af6ab45782b2b8a7ceb78e6809edd691390a9d4bcabba24a08a6f72962e547fbc0bbba563cf65680add9b7640fe98c6ba451ebb75a8197a5d66a663a4e1a9ef32fa86c06599de75fc7e16152b42f5893d43f9a9506413d5fd6ac98285ae887a158eb4aa096400efd6c1600d0956ee8593586f301f774ee76637ed1799bf7f3b3fe6fbd61a827c5907410859c197e186ee394eb4d15a10c72e4642e315b96d69a0eb1b2fc5b19f9e4461347e2df13b67b01861bdc43ba24ac56209432f3d718f49ca4d732b104b17164ffca327f64b33bcd0fefc2b575e34f8947b0d1cffdaa8524c8faeca0eb8c5349f67ec3ef97a837bb56db6e2699d1268d20d60cda2934ab592e274273c7d386e5409c715bbb061d2d99506d080a68ce1763ba03785ca7314ddbfb6104635bd00be147a75512c13fc86680e6d0816c50cad0f25267fcd337a26477ef7201b3ba3c94786442ac42cc6a5de1753175d00511cb611bbcee18a83765dea7e03e7b7368a30f6195594a91926be30dd390877364516db6c75f36a48161d9263591a191b67e7557aa4e7ca4019cc8e5c821b9a22d26a243cd73eaf468d383e09b0c832346ce427c2934c42c233359532b69585ea27027804bf738cc428f774d11f197b03c9eda33f23248f5fe363dd96de9f40024c7ca6d02cb564ff4c0afbb713eb678d64af8ed073977a0a7b7dd22aa3569cc0a734e9a05464820b0d354b6d8f0f42ecc4787e73d4c17f468f303f4f9e64703964e229aaf58d65f5fed4b314114884c8c4a01f3625a67a5ff5b42032903fe7945e7e388b3072ef2cbcd29b33618d32c8082abc29f1dd980cea8aca828367e48f650b96890ef05a39bf4d8b81f791877462131d1750a56057c9e738dff94134bb4b9ff4d6d8be39f11026a537fdc58bfaf9ec950bf6d8af11ee3c9ae668fb1b94881614e0053d670fc59fe658925b3b6d4f015a87b03e2f51f1754c95fb8691856349613391c96692aaf6e6c03a68af42dc9222778f99d00017064a4ba188d17845afe42c762a845b881667333907118c4454b514d766fe502f662507d85e6fc544ea8b75032033dee4abb70e01f380b86ca44603d20c4589963cff55d9b8d0fa22c8a4bbe06e89ee5a25ce6118a8dd9d244d837cd73507e6e9c822ef519f55b9a980f8e02cfe635bd109cdb8851a743bd53db6701a425484cad224a459ed897efcceba54c4a3b8c3998fc43e49482cba9e3eca5afd2946e4186d892bfa97ec0f9e135c1b3faeec129df55cab41c2eba62d86d66605c58f95e05111aa3da2168e0a2ae417fccb846e22d014520064843d19b570074bf2673fa591022e3a068c7188b9be53c73a8d6be8611251e8489807758eb3e31facd510e5d6a66b3b278c624763b9065ca30eafcc1c205634d6e43068b1be24a6d0e0d4e94522092b0a7ab85d82ed42c0e6d0cafd95a33042bbd86198bdd9d9d5585595c4a2149b9d3ce673c86c5e6ec06b31e02548281ab94dc54d057f60aa1b605c7554adcc51c283e38a3467a2f8b5df2dfae948ee8d2312658ecf9b9345a10416eed1554a002a7475773c16aeacb6d87a533beccbeb1f9a2acc83eda644a0355b5c22e4314e1ed37507cdfc52e2f3e3b5c18f37f48a70237c2a178966008b4471a62c0984a0912d68f69baefdbbbbc404cdfb6985fb129646658033033da955798b0c07f1d8c040269055c50d5189d051e64af5a33a1d3654ec85281f1246fd5ac80959d04d207adb0473234fb1e34947ac630d71413b83f45aa4e2395190db3931f2fb0893da3dbdfefd4375a076dd922e05c45aa5a02bf6366828f59a609e8de81bcf82136fc2425f067607f37618da9607bd037ba712c561ea855ff304453eccc0a12ff2c4062bedc15264298d7e2848ff3da632ffc977745e46087d5e84eaed821ba0e54a2acfb5cf676c37b880a87a6141cedbd8bcf085534a07afa667b9437ea31446d17384b8e79b5e658c55e88b3cb0c1cae76011994aa373c863e8b094dbf1af3deb5ac550c72fb24391fce5c57cc097088bc656bb8db01f904c87018a1da280109190ccbb7f0b547fff048f7b40bcecc64e6a20bf1809176e07b47e1e371356f0a4828c10d160c8961209ea7a363fc0c35700e98f63393fa6ceacc390066e34bc24cafa89f73fcfb88063ac19bdd829349cc3d9e2b04ee59dbbb4354b70f2a886cbbdc60d1e01ccb41854eb99c847f4691a0296d578c4877a7f1dcaa3ff7acacb1b3e75f015225075160efd12b46bce0821fe2516e8b35dacf22ada1b2c7a5129c89beb5ae25b8abe961424bf70baa26a61fc755e5b67e9139b9a2f1a6d2e9990d886226cfd2b3a9af0af3dbf6aca764c36543adf4ef4689bfa59db59ed0339031480b4bccd7fb2a3c605714727a3d44c51e63f11e20cc1d4ad46338d59cd546777d4460d7fad3337011294fdffd5d03be78beeb1ea28cd052a7328ad4c81a1c7b94cee23e51c23318cb633dee6cc598bd20087abdfacbd9639c8b060f5cd483b6d84e428eedb8a18cf244611175b46c46c661914aa694f6eb0183030887bb24296ebe5d13d15e0d7a8aeb207b0c948a10a98421a083304765ce715850b0356ad52ed0154b0f57ed0bea6a974241b715555c41eccd49047edd6f926672d345efd03be2d830f847d508eb14b6877f32de270c807f8fa523bbecb257f700053d21966efef0ecca83c9ee254e0c23ef99a38f800e8ae09fb614e96316ec3c061d5069abb772bfe8722fb7831c3dd0fa074c0602f6e7539b114c297ee1e38fe51e157e4df03382bf3f004d03745f3acb467551194bc16032872c7e603b924d7f5f379e20b3080aa3727b4635c9c897203bd167ae61b0695e31f1a5cb2ca26c73281df9ca87fd6e91c1fde0b4ce08bbca6ae86dce4ee4f3d9f452e1296398141a41646e41bff89bc929272c380409aed933e86f5caeb3b5a8985e1c3eb07cc0c5e698ac921c66bd0b8cf811992721ca55141e9c4615690563792b0db4d4553e417a94441d6fc25299f3f4f019374822754ae769bb49aa6a743ce8050f9861ddc2aab4ff465f54eb9879b0864b75ee75b90ecf70226e983d30882f04ca501d420ca889bec8bb95a01fdfa414b490388aadbd031a18034fc111aa241f96f52b9f072812d3f04005dc7a5e9ac06a2558174327d8384d295924735c61fc998d4911118f8282da5109b5c65dd27b79779fc4bb321bd6381736beacdddbdc0ad0f71625a3a28baf034846f01501b71ab59dcb74e2cca17375fe27d7353b9d0795e3eafc3bd7a5a917c0c874cd78d0056a1fb35cee407d059ce2ee11585f9d4c38db89b743b3f23b7d5374376a019075b02e872e5955b9bcb91671feba8b5760daef7d49349a1ecdaebc042ff788aea66166d304586b6514ab0ed968724e88eba550a0cfe55ea85ac0ad74d48dd8bbfa4337e6b5f0706ec375fa26a45c063f6072468aaa4df0043a877f7c16f85f9e781b264b1351febd0c64754fc981d89e0dfa35f51b2cfe7bd91908a0909f6f65100a144bba6a0e02cedd5678947b6ce762ec823092d2537bac158b6eaad89f923a611f9f4bc92e8fedba50c16342202e9d70a630cdb94c77fa8ea2cac71d4c7efe63d0d23238e667d5399bcf7f784a6d095c28947a74363196fcc758e227124d3c8e6252943e374272ba9c36197a2fbc540dfd216e100c6dcfd56b85d0a74f60470c73b06f45514ec846ebe8191c5672f4554847d708a83ff2ade1aa5aba910ad5aaaf744629000e2616daf16053f8d8d2b614e710007011c6298768d05ebe82bafd06cbd06a72f449a23e4cfb05a8216a6a018da176fab8df330f19630defa175d7d401ab85865f6931bf8736990dc82aaf310815da85cdd8dfae5e21d622a4c95365b1967dd2b08e6ce997e4b0894ddf84fad003560e898a5666de1917c40ec2fff9305edfbc066ea9cd7944409e914db6107ac06b21cdbaafa74b01d01c85b15a0e0d8b7ba47f0bea9aee311c48115e67ec520cdef02c299647ad53842b0ec4cc75d46ea2bce1c7a8b5e0d58eca074b6be986b3060ec2bdf952d6e5268f271ea0eb98a89cdf0833d71340b5593d4dc0d274cbd089afda4ca159188372070d15ecda009a3fff13ef5a23e680842730f4b163f1c45f48a62ef98dade72de8f073eaaaf808edbbf48dbfb365127c36c370346583b91603b04f06e10201f9b1923e4ff12cf41d762063214967f31fe77f874294a8f69a3073a6033573d088c213d0f7df5c2db6add10decdfce20214be7bceb196e2198daf9bd0deaf73470c3e0a80f97fe0089f536ef54982a013d4728bd509d3b14001959f6b4c4b4a4f11288c3feea03c51e8327a03fd4d1b6a546167c9c93f9f1f613a2a8adaa59917f86b8680ffcc0d5650be91dd9030b31278e35c4db093ff748912da2b40fc461a9a20f8c6a08739c6c3d4f77476a7d1de1cf9ff010681d0f3b8510e5b9240df2bb910e94e9d6556674084dd12b2da5c8696d2f90536b53e58f70fcb03e44ac72123caac0f0d0ab0f17522aa02d363369ad9126e4add495e80c83154a1a1e081ebdeeaa8c4d5de385c87d77d481cd42010ef04612a94f5ea192cdf24e4078b197a3dffffbc6934c8a4518a56c71f4dedcb45de10843b0ad705971321682f8b0c965de0fc351058871668b3a21af9dc80cda9fced594704bfb9be20cb61284791dd0613317a113597e3e227a23d7093d4092ac71e88e16d1a5d64fc42630c9e52cb6b95c4674b66b37b8cd146f6355dfcd4f9af3ad831ce94f2b48dc73d312844a7f7827e849ce51b79c276c482e495420576d9812268ce30fa3f8bede2d786b9c0e14101110401bc50aa956372617afd85a71a676f9a4f0a274c55845b75968e7e585618443a059df0100a6a5f0e2b8a52639883692016d67151200f854505e7b87ba2b85dea6eef31e7ca9d7ce2166854d29c29e3cca518309a28cf1ee2a51395f173594805fd0e10797466ceca32b67ffe04c0aef17fb152437c2419f87f86845233b9ffe309415132172fe7519a8224445bf160ba61140927c418ecbf174edfbfc4d72a6eb89eaec5b3781b90d0e3706791407ba94fa518fd31a7b182a668aa1c31577efa836adfc7a044cb5ee8cf95d90f4d6386a2d821d744ad299ed83b0516fba87393dd99a02d7745dfcb2fad8f33f59c78724e22dfde16a60ccf81f6af8439f2b685d1578fc02399d59721ef4539ea23b4948b60129a28c7d2223a50f8c726351ab693aa4c112b172a4dd994b8cd32049e808e0ae960b0024d0f3463e0afc8baa37bf74371294ad29061c1f997b35505920f5923be710538eb84a8a420b44d6cecec68a49b25ec90120244bf0a8a1b23aab935b6fc8880ef44336c3bb16cfcfb7cbcf215143558c0016ddb3f0c2dbaeaf9a54ef027348bfa90cdc30c43536b01ccb06f0b15f0ce73f2b1a1f0f3b5801bf0ba926e06d110fca27e06689505edaf6178a3b1b866964f71af1852682cc2569a56f7342e930bb34a78a35687d6c80f67275ff9a5f5b45a3c27dc4217c193d38b8958d0fd4f26da901a683ca9f1bd961a869ea9d19653c3974bfc066c05e579f0232f9163a7625b7376584de066731fac04b67b1ee76e6533a5872e9f86186b40bc848aa181b26130ade127677263139a7a5cd2efe0fc4eef0c86d3297532a424199ae33bf9db8d2aadeb245a3b5083e636e3e35909e43faba0213c3dc3bf5ee092d148babd4f47ab02d855e12b9e51bf5af08497a8252145a9414510e549638c01df5f9acc5ce29b5881fa4d8c4ab7551301a08593fa7770b80ff7d9a6d6f004afeab301630d2aa4064fa12937977abc3936300aa5e647f3a7009b8791a17f9c514e57e355f82e62a9b5c9d5e789b7394c8ae43fe2452323751aa8be0437b89093b834bd569e73f7dc77e9ee8dd4b6a2b19c7e38745dd44019971b04df20fb2c594075935f5a01cda24016ed3f37f01a06516533c6a46fe9ee51e79cb5b420d5dc8ecaf66a5cf8d7e455a89ed624d8fbefb6abdd1006304415c709e48432b411a554b763f90356d1b48f198390a57e1f2ee8d733f9b304e7a27db330d564e81d2a162c54b2046e9e1a51e568f405c39b0b267aa8381c0805986f3fd3bbda18758bdba868e5fefb4c25b7e0e7441489913f5ab1ace159293da2b586bb45065e74874bc9fa6c66043e2d61746bd1c5d40c81f468804c1749b91b012d34bac335d668f95cd6e49e50f079314f6716bb2ff669268d1045bda9534b60c5e8d07688f785a98cee149496636fabfde72a65556cef6964ece55050d00656b9d70c8597b17b36f02e957dcd341fc6115d80779554de43235b3b5eae88be2b6e2500876b4ebea5d8c57722179de3f5a57bd6a463da25526b52463b2498dee831035a53a4fb009fc967b2eb0089b3d23cc738fb4e24931ff0dbac1ed607f9bd547e306897c170ae48bd248246402c61ede403bd02029698a451efd69511bcc52f8eba4661af89f2ba2595e4821695b5791f39ca63fee420afc61c7f6337806dbfd709a753090cf9f5552f4570c20ede5fd00f374854ead6449f8a8e43c27561202714612fa5a0873c9511b028a738177c9a79fcf764c4efb98c18a406b9892f4a0954b8d84a9386a1a6991fc504fd776a863c09caadaf67fd92505a3bdec3b137541299e0de3be8aa7f15cb521fb23e019e2a00a0a0d81a5152829590a9404d0d812241b254a512fa7d93a47d4d8e281a0c766a7a078b28fe3bb35442389041bf735923b88d5ec06e98d7f0c1ac3e22280e376efb383e92c7ce20484609269b84464bb33d12c1be09aace9d117bc45647789a36a32416e347be962486d284290e8f6859886266947b61ab4207b52dfa565d759d5bcfc94249832b34961652e5525e50ef346cc8db05fa2982b3113f2a15cff08e3daf579a8b9ad5ef05aaa9bccef56eb70c901d4db3c3f911146e4ec37711eea39df1cc3b11af5ae69d418c13259f497f6118481ddbb6c10250af1686443a31e102e105566dcbb839fa43ed85e4bba5c8d56843b2644f4b6090c0f678114121cbaa4d778222fce7bf8b9f76fb25e4f9c2220550d34444acfb8cde900988e8ae7aa168127f4743b40d4c906053887e51fc524dc4bce1d587b364445f3b78f0917bfbe5c7f9ae9264edbb72f10b98edd8efa5a9c511bdb8062a2e7356f2ac4b5138dd5713dac14c7f14cf009c9d6fee2c43442eb73d60b935c14733f40f95b6600395572cb0864a00193d36f1bd78fcc71334eab9140ac4b5f5553d96dbcb9a3dbddf1e9d9979c06f8b6a65f900a1b82cc7ca6521a85499e88c54ffb686843b5515efa0c53ddcee975bbe410080c65feaee6148ba63390444a95205e9c6cf372df083499cea978b7448c713b47724959c4ca7adbacfd82858794429b63a984f84386928286052e598017db55c456297095b9b3bd870499101d906b743c9c058c9155373ae125a0d2ea8d25d7689b71de55b8cf7ad44d064abdb92d19831721cfdb343d478f23bb844627abd0228c91dafca461cc84e7dc8c483ad0c23c2158cafa93581d75350c70c7191010c05195b15cdd9bad33c62a84d2d7d4360a5417716a3e313deef170c7e15773e487c848a32f4875f1e59480e06a373ce9f4bfe91d992bb6990de80f03c848705adbea63e8d737e9e024458d2e3c5c71dd84704181751339b6a48b45f01f96a037b0c3bbfefc88191eb4ed9c93374035cb0e43f1d8848949c05130b7c62d722e1cb7eb197e53d0c4fa741efa5be5f5705353f7934dcf4e291243c17cd8dca23124e86c6d0cc1b74772ee94a7e1624fcffb1197d6e141675aebc1a2b3bb079851ec9a0f02212a17d4c563e177a3b4d8af006c5837c36e4c5d71c88f01191c528be6a1a5d9365d7a6b3dbb249243a663e06ee1535c7241b2d4d22e4ba74702bf149dcbe3e9c49b8ad9a519ccc9a0828c91db885bcf912a84acd0c839872ff1901dad0d53769e7d36567903c73d57fda122be1c01f9231b03cbc9c2c1807efa18191a3c806a600d4025b0c661c1664232917343b9c0d60f864cdc2232131ac06fa7e6cdf6eec6f6480bd6e5f6d45557b81dd8abd1155b0a545edc98129f316698737e10d364b77f4f0187112642d5935929b825d6e82f4318d36ec2d9d28fb50aff0a13f75b4a42742a1cab1842a3773896b2edbac589e6658f93060846590cecb2c37dba9c07bf836d6c12280b750bf52406e0e338634f8a9d1a42ea3a2b306e060c405cb2f9abc745c3583b5bd6b0f93dec45891c159dc2ceb6194a849cd7530395cb2baee9092c9db0e2682e404f2175c50b80130b68efafaf629e49ff20781ecd02bf96f879ece558dcefedb15604f130a8bedd68dfa6f0c0c5ffce7a9b996abe7cf2d140f09370e887269f3a1bf16a5130cfa7580e1e6a40b245d620dbf400fbac978ce109a5fa79de899d175849a3674c45c181e6b6f48fc6408a976eb27994db6b5c13a020c0f5b84818defd6e0fea083587987e3430e58fb9e1d63ada62d5a01017a2fb7538722ab61572528098de9bc68217fabff093b882d8e131c4325ced3477decb07b7dd989cd0a91925a2832cc38c1b69213b119e67fe413fb42b92f54df44088364561982e718a4bb461dd8b9d1034e704dc42fce173385c1d7e8bd476db481a1baa7356abde0cdf52f63cbfbecea5902cf5791eb7c331332ca7d33333fcd5d5f86aa5c2c0ed5654cc7024029a42f118a8beb5e6318874981cbed202e014dbc0875046c9647064f7dc59f5a04f1be7b2ca0bcb89b6322c71dde223bbfcf5ba65cd86aa17d3e4fa51f3b5278f48d71645f29b5e77bd18d5710df898ac8a0d22f4708ec435c0a49472de4e59d67e119360eb6c1a17691c313ea45dc8234982290a238389d15fe39d47a7083a398fdee3d73a0890add8e3c799931b5d141620789074e960924d9ceccadda92f4b15c1a80a8c53d20c72b65d78bfa1798801dd59b7f099af3059d4a85def2ec08ac5b407a2009fe339f621e78b358e8dc1b1638750937dbf31892d0aa5b360b9c915004524c0d6e735639221b813220bb71983eefb152683518252c36757a08993721e96966b9b860d84fbdcfffd5d46fc29345ad93c4b0e9e69b2e5623543629d67ed6a602d88b19fafb7d199d43be46016a1a1f42c15bf87d898438b03786784b90a86d5063d888865f8f463cd4d5ef3afef4fe53b3e1c9fdb2024cc8a41e7bfc17a22989b53ab974008390bf5a077104bdbcf516371cb453ccd37c5a6abe36292c45ea13304b1bdaa9795d0b50bbaae52827b73d93c6c6bbe38c9b98797df1fa75127c58c58cf4910ea162b4964afbc177a78ad55d948546a9bfe4091c108d1ba32b59e154891b758945d8a09eec5039c0b7d6aa0abcc2b0e32730a35d785b6a664bfeb8e422f6e2637881f894cb611715304b6760a7ccbf53a78005186e3f298488eab634b3691558ba408b466bd8a4c71a47ea7f65c6e4eea420ee7f41b9c6a058fe52d3f78a8dd5a650650a375707dc1b7df592273d122b23baa4fdb95562a2f983330c0530658c4a91c4fe2d59cf9a0bbe92c73738862e58dd3acb85e1bec38f529ba02baeab3cb47b3053b3e4b5fe1b0677536aaf0692f25064d3a607925be7f36c12a98477a2c194907704ba32b2a11d46a029cc3965636d17510fd20c07c6f57c001fe411728a9eddacc80c0ca6799d3cd37ee08b358ad3a9dce614669e70c214e7d215253bb4962b151b7a7ef61aa3575a874f639dd0e737ca72b795853ef407ffb6e246ef22632eed2f71e1b15907243a3d2b880bc330128f0f422226ddd420abfbbd5ef8549513103853302fecb04078ebe244d4dbef8618803769f96ebc4caa7ff466860307ac5b575fec7b3e91d23a59c0c229c446aa4ff888405c4a841056870dc52b10ae7ee1ff70fdf3221cc76fbfff54cb4b8d88a32b882a6a5415ca597593babc393aaca6459509380da31885b9b5ca62967360fa256060c90adb365d712636f65cb634998705cd4a44b47e46e9863ee3724c1c27d115970b3c13569b51848c38d98bdb827335f369ae73beae2c3faaea830a7b3decd4924bc1df999c6a9d6c0527b6b15f41d8979384663c8705cd8731f8687bfd59119c11c6a710f3982488fd2c6871db8f3fc235ef514d41f2611d0e05827dbe8423381d2d3cd5385f1e7cdc43c26b831bebf3942d7cce4cf276ad56441052dacbb7ad63ccac15f4400ec984f4414d8d3d0a59fecb541bbbf394081f12584e0f0b68924410628a065c776c5da44b2ddd1799f021d84359825bd48a12375a03e5af680ec2f6341c8c10c9c1c444ce5c891a701b52237cc1b811b84ae34e79a8d18b29f59ed29c4f873c42558b8a01bb77cb905505ce34627a125a7993aa472b12676d997c4a9f0255d9ac5c5e147e20526d189c1f4e9c0a41d6946866b944f1d10701eaee54ce49b6a8e0535e448a65cba2e39d6abcd7614a6c5731db6eccac2a8d4cc0d144033f4a82866f94a14a865c7176d5cefe2b289b373a9aa254545a3bb26a0109d9796f8bdf6030eaf1f6f28cc6a9920b50b4231d4c01d8f3804bbb0fb9d668991083c6cae08942adcd03b3ed14988f0591cb02e88fd541902df99105f1e801350a02223f08d147c22661a781202a7ed3bcb76a3108733a6f73ffc1ff8be1fedd658113c124db603f2d275b2e1d7b6abf51850fd700bd0d68d640c8c6b05de6e9227fdad43a10fdc8f6b412b019e5f9e2223c8bd47ef97c5c9659f0e6d30e6e48c8bad7938818fa9da84fd4aded2a554bb9e89e84084bbc8f3aa34a47697db2503cce2b9b48ec7e5e041b3aae0264e527ab76e0360002b0b549afc080d43fc185ac47c6fa62df61fcbb864e637a056c73e039dfb3d04fd10addb912d9c0b776eb502d24f52df38ae0fb0148843d71e38c301d88b4eda9bf2434b8a4106c7318af8f12759f9dcaf8e52374de3caa896342881d8fe3fdb4cc5f0380351b5048d1c25b8754b40538a0237a61e86181a82fab9443daec6e96dd1d3cee26dca9002a78198d48a1811a4644f71f35606f2235574a98a286174dec955d233ef7d6a9761bc2edd5ca99bdc18a42c0fe282ed3acc409ae0c2d46e1fde60b1c27759a66a2eda013e00e07443c40940e07295c97c679874b621013a198a312244e97241f4ba1fc0c09129532fb4b8a2147c1883f885a82358aed7b93e1f626f718e49cc7543ed3a10c79a1c9f8903c8cd3e62142f8ecca1208828a3cf61f8b6f52ec53e084a1dae0d30c065adedd73e7f90a859697205fc10a14c814872868c1e852f310e05fe8c46ed61f0fbd464a1d8474db4577c2c22bfa30c7c888bfd5c48ab69e0b0e8c780771a550c405ae5a7c9846b4c343408c191d7630e07ab21ef3ff07c9889b6265aef789de79bdccacd71d7fae30ae82a786e9e17b37f461093e3bcca80fd300144fe5aa441ad0909585e1237410e26b8ebd8ee2a6a502383b545f0d1bfead52f0371c77744dc597c279cc5f49e561b3dcbcd7e1a81846fae29e147c3718076528004c7afcf508febd6963e602c70fe77c2bf9c183c1a92cc11124b0c3567fa3fe1570ce29fd5913387bf9d5d7276baed9303c6d60c25106dfc5fbb04fd49606fde2031c59a09c4f5f6ad032b2ddeb74e12fbf341ba9d38e94853b0a61088c0d8947b38a07f77ae7da5e6050e28be28dd3e9af174c2da4681aca7a39f8506c60df922ea0ce5ece27d5f8688c396817e0fc40f43c720bb08f373548fb89e41c69e9a0eb15622145afa2843e7a126e92f4bf0e5cc75d7afe0419eb04d8543c76b91c65d3942b83f454f31e30074de200dc180d42f13ef4b122034939f1ea6a765de7f9b2421ed480c0c5626c6528058631056545ad6a2754ff9ba8e017e3374f1967114554b395d6d57737048b234407b0965ff2a29ab685ec3b2719c234ce9be4a80ba8fc7732e0e4dc939adc6697f51ee6ce20f3ef8f132d4bebc5209127b5b8e8ba5864bda17d163ca6ab3a59f0bee5608b26cee102108124baf20fd0911f9a98540dcf5a4078c36fbbca558a276d06bbb50ce14ad8ff754068570c1127bfcaa8df20af35255778270b6dd33e7f1d4dd117f2ae437159f453482a93f35ddfa302e71d5619ec47df0668c4c0ef797579eaa74f0b18dbe5ab44a2113e14799c595af69cdf245c862ef516e494374fb202a630d36d55b13fc5a4b0557c2c7ba09e7a1e941707182c8b6d874f86a964aecd9d3f1180eff2ddae17c9f5b507da52c55b95e8e8fa75d9cb0ae50c4ba4bfe77057606cfc0dc43e61a4e1c59b49c1dc6da5168231c57c5bac5131303c72c0fcaa2956fa9f2144572f450f9dc5bc1b131f22364eef4a47963d018023662111090093de00208213443a0860673d8adf1558fd562ae5e1030810c0b78f6959f70508f449edea1620895b0a906af7d2e1e94b033a1e443a345c144933fff4db7b5a0183a5f5b9d9a857faa4d56d091bb0c0fad19eb0dc743d8b85b8c6e8726b5b08f75f45b1030f7e775a60ffee71703d728d948b253ae0607a33e1bbd9da569f7f48fdf8adb7c6d9963c90dc7221d912b89fbf20500333732be6f536e995d7eb3c721720000890fd9fc9b2887d6e0420a006d8c7b306025e2a1a590091a27778d58700380db34e159eaa98eddab2b30f5ed298d2f7812be2b400fa6ad898300133eda7f49948e20f94a9fe079e3490ebb90a160e110832fdf540b6e77dced5ee611dcd0bd0818c56be6fe5983076aaf0a08c76756210415d5e1247182ebbcf4cc4cb34d00f983e09523ee565fec729063c066fc36d72ed39f2f85fff04866ae6ae32fa3bbb5eaf9cabf105f7bbd14c41aa3ff1640e15ca28b35da7b0a6c5e351ae97eaf99893e20a84317c124a3b664b20e87ddd9fd4a1679efc951eb2f65b831ae7c4d580a775d3477374aa888955a1115f6aaa61bf842ad191f7cc7b7f501f8784660d69676b04a3e23168e2e68d65e7c4da1533169d5cd223b9543b7348d707c7cfb4d564aed77db0ac86d2a437af00346e22510a77072578a3d13ee4429ae0e8b3fb5850cd226cae67b33135d890c0a3f1f0375364dcf3a13a8f325212b6618f3f9cf330ec71244336468f5999d11b863e7a727fd506aa10a892938a71c987610e1ed8bc5d3a33b3ea484aad53fbb4e7a238905d0e009fc61490635deb01881f7877f7fe746f13a4edbf028869859c8822f774a55ba4fa4fcd474075bd809824a7c5949d99c1402df9eb7b54da20d55fd4072473d435cc2b7fc7a9051a72b72f071786c1038511c0c940b35e5ce7bd25cc86780426ee918e23414090215ad85911caa464701335c86f858a88d20729f8db5069a2980dbcdb5114c6637f5da5e0931ead0360196846343082a6ac33d72440273a9eeebf1fdf7c85f7626424ce9d7ac013a146433ee8420a025b8b9e764f49eee0eeaff6154b6cc0e7803c96a65797c26475cc11fe8a60fa01169671ca91ae7dc240950962110dfbc204659d19c3b4844d4317a37cdcba60b83ce52d6af01fb7f8e905572e5fe63c6e3c9c733585c2739a983700e3350e494dd1e9431d572932100c583caf6607937e5c523829e903366cede658af7ef5144a5aa5327b84cc3d392b7d5bba12927fd83c0c0644d67f090b5bcada1d4e6183422f1a17c53949818435152620cc012f0ec29deef94f6854d36b810d0c4003b1b1d878e8905036e548ebe52ce18f8311d68f988481c53eaabd2143409f0082c5956d455fc04a26600cddc945e92b98b2e28d7350e4c1356419c789dd17b43a1ba8a38209f893f8ba572c836ba17e2d4a05eed040f603bc07527e2cf4f7d75ba8b3689028496460e3d998ee08c23d620afb5c3608e30c8aa7acbbf6bad95b554921981b2eb38987c9a646c7f0ae06cc3d8b5e248f60eaec87128514e2ce2f305a937b761e4c52292747f58734b7e3719b0956014429f726ccd4f9460eba8d9fbbee76c507e7b6a2032f9a5281f09e6d316fe3f930d2c7992c9ab952faf10963071f8a0e38e2e86537fc441ee0de74a48570da884625a52770bf7b6161e9e77b952ef5a1e70d502c9b34fa0e4f61478f2238a87ed47e767d4d6e34abab72ce0580ec0823a3aff90f60f80451d07a33622b0e8799ba895830f4584986ccbf725ce973823a8f76eaec105a1e95a2b5298d63e4654bd4df11f7932be289d2267b1bf019a25effc8faafd8910c407fb9996de556066f12117592ca5b3ebc892b8c83da04606b0b3d395108f3bb15a6a55464d6dc66509662759927bf67c61a9e6a2542d3510221e64fd6f97bc654280e5735e50bfb4cb2006939a2fb058ccee83f05b3b8f252cfa5b2dba380ae7c1df4a243af421fa2d7d0e907dbbad8ecbafb3315a0c57be4ed6e1d280078ce376b70d87c56dce94092fa02144ad16d8512f659b57d5ee24ce422603d1f8f761ba484cd30bbdc96b990940ae7946a305ab44e533473b0e07f8a6c31d09d549af862facba4039838a1b6140c81e3057cb374baaf07b67f60900a95a72504733a27163dc345fac8215c8a0ea315baa009c6ba88cd602e2c7733b01a69067b5c641dc3fd4fa2e7a5cbd3cd86d697d822ccdab83ff1c9cf7332ec6c81a57871e2a8c05923d0e8bc9d127e85374a22e6a756a24bf273ca2a5a2c155b9b65d150b488f1022a07297e8fc90bae613b426a55d527a5ad0bfa99eab03e7b18172144b2188448a7be23d90dd027c14e35efea92318c8c8ccee012ead1495d2e328e2b52e9510792a32a3253f0c22c32cd1a5cae8cabdaf68847f6b34841e5b8101bd63a1b5ccabda223860a57adb5d6664208d9c11c1217422056841509a57bc1b4c5fbfe67fe20715883bf590e348e10e28e8f820985c7ec8637f5ff29ab499ad38db534a8161098844ff5c5d95671901ee8f1e90f02c7b6ff3af922900673b34035dce51c5db9b84f0ef16d12600fee48f5116e09faec5a0e7b50cf701f008ef7402ef2c85da3352adb952fa071f7637a9592060597254b963c4db5d7e29befd91a1c7a063b726b706c87ef63ff4d201d459599170e611474ddcdce703747761b1877b807e420ed0792602959e18872716f96aba100c1e100f5d24430775411f5c8bae243666264d0e8e3eea4c4e5f28edfc49c4ec26df1dd9c033528fbda41d12604ac030a866fe59d401c366e788a6aced1455a8a24eb1a3925a829258b1d19eda7b5282a97b23fcd47ecad2cd2a084702851bb5e0ef653e92552d6d8fc365369e2f67b39d4402d11fad578599d2c6211c4d8e9c29d179014cb478883a6a0dc193490bbf8d8f2400c7f994fad6bb3986a475433d61c9530da27d37bb560c5c11a34390ff0847862171f5a067a12861e45937b9969927c34e2a2b71a71b1788bcfd4d45e5d3e18e64d420c1b3c1f75b2f6ea8df133a4d060f6c3424b09f3092bc281d1a1232da15076f6fe5b4bf42b64ca50764981e4535143ba921bb27a262ad6f618c2aff5722cacc61257dfd06c1edd46c21885e9553525fee5f3e7f86566369db33aa6fafe6086e128cd3af406f122643bc7a86973855f08430d0959ae27432c38bf6bb9855e2bd4ddcb00b877cb41dc2caeb6ac25d49214dfae6bd35e563afe7e307df37ccf437ced18161444d9d6abeb3e1c4fb0bf4f21f10e4c4c926d88e88f4b2d2a9ff89320072ef4c8a5bce93ed53ae43993cb328d70584274a8dee63c464f258ddee453550b87f5194f6a4405575a31b0a9f24ccf2ea3db029e9431c5e21601fdc5acd0aaeaa5826209ebe96e01d5320e3b50939602573ba7e7680ae8be0502086bd724662502f06c811b66338c9f1cce36739ab52875b005e86b3f82c6708686b74eff45aab38853a7646aa9830d1aab51d19a0d4ee18c2f2faf33cc9cca648bb015c2971a7c813760e8e269014747ad8a57caf8ec161226f35fcfcf725903e826a799d112933f00f99496402a3601a3f1a7c46f7388d903976cf16b7387c6efda4cc34d95f86f87b9755c303e74c5af9c5736e08451a16b3ce8ddd05f4762b4484b2cecc85651701177683fcff1dad547bd02d34dbbdbb3d683daad785a2873e0869e45e405d8292f3a7ed0e5c1ef72f5ce26367c1980791b645411638bd84773aa854ddf9d8ae024e00adbf170be272f725611e6e75c1f3745e88b295b4863b2eba09997fde1f92a6e8a16bfde2561803d8cb7232557fd66df0cc82ba810440ddb5011668b5fe890ba5baeca3912f8a6cd75fd94399ad9963e44ba6a457e36711691cb6353e17d5b311db40da544b2bb6c416cf29e1fe422bd00d4ba1988212ee39096fd7611e4af41a7ba8ddf4ae11211427dbc4d64097c5f166ff435bc9d91164ac64b8f389d00b5ba71ccaac3e90da0f6fbd1e32baab5063ca76e33ec23ad23bccfdd52d57838542d708847fa5c2151467f546c1b50168cb63182c9de886b17380625f30e4455e4b60861a39e89349b4fd9867d72b9131eed98a8859f1ce22fa4c5382f4a107be41ff9e699b0f7c428a44509685eb1c3b16e87e12d7d9c7e4c41e5712026403685bba300b07f66cbce75b8d65a3312a3f2d045fd66a6a56103505bd8db8b4a5a8a8489eea5df7ea95871ebb58587de4cf5045dca46a58ed988bc89873742b61b56bc020932534d446a9a4add73bf0a85df39894656a1518259199368bb13c203231e05808105ff4073b842c77c3b6a54f1410c47223e0c91701b080b4e09490301bd2ca41052ee608bffa397165f40f82635cbfd1cb847e49f261a3a3d1f85bc3318cd3d644233f72847553f816ec27ba7d57bcae4f9baf8abce611681dd56d5b19b1b5db8bca032d83e3bb1b41be8798df1bce30061e5cb5f11447cc1879969b4ad5f5cd81f54508ef14207279cbd4dc32875b933db81ced310fa67c3281f14e25aa5048cdf440ab2bbb8f16633c4733d36f201f1b86c4a84a3283228925416608793a2fb381b159c3418ae1956d0fd814d06ca469d6db5d1646d7264f048e46353c37eec6ba860576f7c8f0da9433a222017d6dfe883c0c8a808c5b99442cbd26b43c54bd9aec26b55b2eb74ca213c2a647f1c67a958a2bf59eefd28219c1b4eb938d19cea8baba13c858110ac13315476612cdebedc74bfa194241ba426df63f6e8ea278900a04853caafa6266117bb3a8296d2de5d3d93f5f95b610b5ea1d5e47003e9ae6b6f70283677a4a861e1076ef6358ae2fb94c64d5d39ac444710a5440009b580eb2dd1c2385f1ee6a51fb17e18a60d11b80f13569560a9e35492eb58203673552ef80418b548389000e91b01689611e29b0b9680cbd212aac8cec36874c95f0169a46c69d2d054d5790d44d28cde00c86cf317521c1fd5ee55840b16764303aeae2b8c153a2718e1d29eb70375b59a1d2972c617e45d972a927227c4fa0d54182df830ec566be14493b3d2aa4ea3fbb3b24b2e4e92423d00392e6f226e42883a6b217acfa7ef5b484cdd4d86ec62ace8cdceddf77e1cfe04b46b6b5e3e03dd0aa813e91ae84d42f3b8c6c97f45b79db1e4b039c85c27394734d9f0cb400b797834d870a66e2e46af38d3888c69c3e26d12e79c14600583debc724d02a97b4f14dd4e64e8c3a2231e202511879047ed3443c30348dd1cd4b60f099d44a0b05fdd13111dc71fb8b2a7c82d7eab1d50189c58000691068627bde11805a47617e22fc2080a8ff4978793cb74312860b5eddf002a240bf5c488c072962c16c5741f4cea8cfd54c0e67500658a11c6617fa4da449d4d9ce9d40b7d61ef820022ec1497800ca1a38251e33e0fe13ba6a572d681b283ff69a6f5f369e96b13ebd07845284deef43d9880be0280720ad4d4068cff409f8b6f118240119b942b0ded3323098d080c64bad2b499882e84570529135d1789b355cf9f2c5426feead7b5d412b5b20faa1578685a1e8618d235792a430d611b165da4c144f852ed7ab11e20981ff3387e0f568e07a3283e73dc1318b1775324afba5f2f992cf543e729854f3401672f751e1f589c9aee7c662b81a340fa5a238d9fdc8c20da494b92166493abc1a477a35ffedf0fcadcf67ed849b61127e1507301acdb9d51a08e4fc7aaf6daf099710d85a0b3a1b60380081304b457f29d4038f5512e64d3899509740ff3dc3033c59324cd8968a5cb745884af8b88fcf40f2dc5b18a6131d7c32e5b94e8faaf805b9240089a143bc1d58ff2e80fa28b938d013cc1640fa89aabd629ffe5f0e02db271dd553a54b670cc9525e303453c91fd851b5b135c29dec9f14f56e24c99cbcfe1fcec9cc54898775b09a7cb50b31c4e476dc1583211134928eeade204412c815c4ac222c0d610b08d602c24cc5e5ca1507205c581826a936a0f2921a25ae26a2be2ce6c72fc0a4d85992732047017797789033a06aa4c2490fdbca2bc4b62bdbdad815aa2cf9ee08848072da2765142d6ab2b094bc5a60002a8aa84caa67231178a4320bc24ca067c63cbc4761693e3bbf48ce11766c6deb490c5e84797a6538e9f7edd8fac786d2801d42ba2581c609717c0e55dbfaffe1b0d2191e63242988592f2ad53d27cbb43b84f8ffa82033d2dea28a60d261b1a00634b28c269a9408ba4abe0d4fe2ea345da368cb5de87996d043d67b6790b83338555720e8c1195a5e8799b88df0b0369f161c34aee2e96fe731afbd30dc731e2f0f584ec7ed1e401b0c3e1be613f0aba0a49a8384249b838a96ce7040f80a5eb06c8249290b89a8ec26dff86863c8690a85dd3dd7a6d21604b709c83bbda5f6af3de34207415ae8b865aa74b4085ccea26baf40e1c4b3be71e37e1b2a422242c4e71c031e2e236a1144325c55a2f42b34485632b8078d415b5a035e04d8f050d0e05caeae703bb4864c73cb106d92d90afa34ca49e84676f0f705f5faa95fef8077cc9883a204f2a01522754d903451769323e1b745c35f5ddd4ea3ec0a4663c6022d074fa76ebf4f9a434ee29319eda841dbf694d7861023eaa591343d0e8411312a89a517855b759d2ea25fa80a9548a9690ffd01ec3de1d243bc400b86b147d0723527e2edf06f45aa8cba9f4860ec12ae075eb63b1c50b31d4bd83d0fc322e08912b08bc86f194f4b0cc5b21b71deb45161d72bf4383518460f6ba702d1737cbe4dfe78668721c56ec382180dbb5c2098ffce1423f03be5befd6d90d7cf8a5965e59c32201fc0cd531d22eb8f541620252304ac7e731f627d037896b61cf3b459043c09fe424e431628a83f82583127e2c3e322ea21ef4641c21729dd84605b4dc93714fa3af85bcb4494e2ab3a89c1bf09b04b149f149383fa20919554b6136a59c65dfb79de854a8e9500d28aa0dd48b4aa59212b410a2f08f144ad95cc4ceedef58be66f0397973036a3ed454f984df9c476e8111329521a232e48a1b40d65051e7f98c1ecad4a67cd472b90301c037895b7ed58ab1443d9677c5a1037679e131c44fe5a397ca41f209ebef9880eca7331f8bf96632a5d290028ee64e94f95f22e7d28cbb21802bbde902a5d0b7e17e4b7710c2e6c1ed2a8e7e9e213afe839e2067f93289dbdfea38d8e8b95f2a33c1547d8610330eef3cc46191c71237e2c47041d0bcac3c9716201e9edc76f51adfcdabb54879acea8a54cf01f7f8198d2704669c523ca15f1c77e092e0e8cec412d95b6952c76003f49778f751aaaa75694a632798aeceedf7b16c8199e12903e0763012bd6413a0a8ff4c7dfc8452a689599d7487c3cee272c17baa449e5e3a444cd25ddfe170e6d8c28c2e31923fed565c3c5cc2cf5a8fb43efcc55144c31ad2bf68447cf47b6b459f30303351aadb6abb7c8885b77a3bb9953310687e39c3ab46ec09ba3416996d45b8208359c19697ac3d343896aefa163250165159da543d99d682c26e8da9e1ac41550c33d37e64394e25c5017c52a6e465f7645ede39f39684e7c92c29a1d77a3c800b77d6342974992980391225ed80f6c4b2a4b4994be5c173cf9da638c24a0383abaceba440c244099016031d57b54d0283e98166dbe6a0010daf5485d98d45dfd652fcca044c64898b2526ae0a02debdd404248ca0cad4d18055689c46290234166a117cbf8aa75e6b123b30dfcc1f57ce3676146b655af2104099a291e360b7f4fe3ad687757381d297b49be49de341e552326b7b0996abd64a12086034d31c66e2e6adc4c725688d3a84d3a7f11028c4e9b2943555494c9a94636e2275e5994f2c4324dec3bce121a080927b3f8ad28a113b4b218ce8492930082c68a628a05dc1fbb4b3896da8715c90b142515d0b658cda93d4a50f62409544203d0491f33fd82a59a4ad2f0eb6fccae4baac3b88dd5a646d3f93e647c22a166af4b7a6c91040538a50099471dd728c3d00547c1051ee7c028495d9aa89c440fa48d17d088545f4391a6f23cf55a84185e4be95b75d80ac446a9f3a9eaf3c3bc2948798e9c3619a323afa4e849e29dfc8c2f3521a6c51e92dbe4a8e03ac5e41ff5b59658a2866b201bfadedf76a24698f6c22dd6d3e34510f9aa70b3c713467889178f686ffe40d422f390d0566881939f5cad4e74fa20d8b9302f9308699479466a95cbf46eb33dd7a4d060fe9c47ad7ec463d14c45198756d356ec87c8847982dc9fbdb76ea83b2fdca3c9b24e646af77babece6f2908804d91591b9545ab590f298201606631c8ca70cb891c6727acfb75dcd989766229f24d75a1b86dd917328e29a04543ed4dee1fb14a333efc719e95f2315855a6120d8f61913d5c951cfb440b34eb8677ec1e6af63412f10ceb0e444386920784da2a5c46f9870e80d149a442b70943c1633ec3ba2d2a752737857cc63a7b276427f3eb8945fb106ab2cf67ba02d8355f072e2f0b3a0f20d84f88020d39cee7cc0b9e824d51dd186c1c5e8e5d93d860e73e212f6a1915cbe836e10e1df5f2e23612e6651f7d03b125f2f2285b6ebc349c1a5430a84b2cc1aef2264de45ee2b6d852618d7606a71386102113bb6105504dceaf8e0ff3cb881d2673b95ccdba8294ef1ab79d6a8fc54b2867ffe9182fe803854bd14fd1c3e49e36439b395443eba9e08ae9a1c6f24b5cd8ee0e6bf351dba579aceefab7427680a3f7ca8c220155414e35775c23743ba6ab31e140e8200b9e3b767bc80bd0edf46c279df550f9012ba56c92b80d64a4d11492ac9094c650822cbfdc37cfe3bc187725233d7ee3c3472d233660660058060a431c38fc955b7f192273d9e31eb34c573c8e105d86ea090c70aa7d81cc93b44d9ac34c95e2ab0089eafd214e0bbb260a6da19ff909acc74b6edd756c9405cbd2a38ffed40ad1e67450740f578c49a73143444194ed07634db325719860dab6d369c01df4f101be39acb36492f7ec2049b69b3237303ad81b56019b1a67a55c8e893d885c6e10df0c1b078aac39e4b7e4640463d123cdbe0365b119797e175a67364ad0502021795b02d36e1636fe330a529e6738aeef9e94f40a6622f5cb14a8ff3511f9e82ee28694bf26e89a6273a2bce6d744dc2af1bac43086b9285de218fa245cdba234ed6374cc6a7d11d95abe311f7cd8538a224b84da69f260650fbc5ad3046d2657ad695dc999c8dbb8469de6469b554341e549d94361c963902ea1319d525a61c944f71080eecdbc6eb241e30929dfac838de164b7e9c0703f3ffefd3cdcd96272e60e73ab92b3130030a6841d627b748071623c1b63e40f19d445a8677713510228588a37ba983f92df9d74c56c1a4fbc7e7db149d9661f4e3816478d3afa342ea316d097b14331851fbabe3b226af5e8da1aabe55f6725f3bb222e5e0554e7a763937cd7c8311af856a2a0b4a5410bfe01ced117915911d4b599427ef914d29eb45803bf62933ffec07cfc8161fc64557f74fb0d17e91a3a362c102cbb8da4f2072e80d667ef15cad100ce516d529a43582d89d991d97a84a49ba8b822aeaaa33fa47b6b60c34586e86490dcb25b249f241169d18f972586cfa896fc14e19fb31fc6634eeedecf3312c28452aec8c584e495a6a69e74179420103c88457893c11c407809f0597cfdbf1627032c667c8cfe4bb385fdf30fff07737b4e840b232ce3e1f6871364f51a324c4df8cdcf1ca28ba9eda2223a0ed6840a7a36745554774de2c108f07378a1b055c029b94d4a1264fc52eba17ae40d21790846c5a7e43d874955d97405f07c1d24222e0f80db3e1db7a994be45eb5f629929a00d0a86fbb4822963de6cc331f3bba5c42c1132f9b05f949e724034e190834be569c5f0f223621c73158a185b9cc526447c75b8568e4a449fdb43f4bf99bff96b1d1f838dfd263e7f538d11261e1e0ae9790bbee95dc6645ca699c4b1865d986fcaaed6240f6f5c888d71a6de8acec7bf5b940082be6e0b4ea371749cb5ff318d96b1bf6a54e782d46639e6dedb75cc85b55c37b9db61d966c5ca5c2008b795b7820f3b50cfda836d2226f0df2b6fb6ab4e6db54bedf04bd0e57edd7ce437f0a59f78a99e0b0c88ceda47cc22a76a2c5874b76e496fd1769be4693b9d0a47b93d7cbf5482f7ba35ce3d9ec1ac1acb42c3e9b3fc3881c4c8c1b47134b1478d4930ef1292ea4412a6b62701df9c5e67e03de8b1670ba10e33db439d38613c21de46f0418540f0322fb7ed7e633a93c50a0b2c71fe907134c1b33f985f4da8777bfae070701faa45291709e4c8c35666719617ad86f859cbd008631b9200ca4aa630ea12bf9f85aa82374f72278f3070a0aabf41ec6cf47dc9459abe8683997676df6afeb0c546e4688944a38bfeacd498e0cd786b976af5c25e34a11ebcf01eb01cf88a79a28d0bdb304fa94f114fd6c2907924bc641a01f6580dbfae491e9ad979de36f3e60d03244d855ec40065583eb739dcac349ceb5eb15015b14d5109c4f960aa7328c382275de163687f53448bd18cdbe91bc9da26eda3fcd5018ae18230fb8c1909610c0ec986cdfd5e791b825767f3bdcac03ea630908efd376eaeb91930a7ca03a6db90157f0f8f808d02fd33c44683a6331710b2d351d1391d325e65259f03e039c925f576749d29d1840a537c80421c21078bf504a65c0de7cabeb14c985a2cc87d8777f30ce14643e300c4d5b717f8484207b4639894787e02793b1c632b41ba5644d3123a8c8a75354b321a1fb6cc4d58e9c913546449de5d75af21438fda87b5bad2170df1251653d09759476988482c4395b008f9dbfe848d43ab18d9136b3fadbca8f7692c46f6c4440ee3aeeb5aefb3d1f4171362b14394061e6f07485c6dd2a8392369b6b9b138abc2de6a35a62f847aa0ce926950032d90215bf0d7b4fe510dab2514dee5a93a27e17502fd698b07098d473f8eb58307e5545b94372c2aaed2918210fae3c5cbea0ba2d662a6af4834ff970a6bfce522fdcd6619e93a368ff34f85aaceb9c2cab6fc7e469f85c68b0f18c24b7400176969635021072f1a32f9296962668259e3bad402d14093032f7c78cec72864756d60e084ac1809dafcc4216a1f16445ee0e231213eed5af827360d35fcc658a489506a37baac08fdda23f2214c7824b74674badbab43bcc6177e9398e000a5bfe4f1c494afedc5dd494f957d2baf96c48db358dfb79c55cdc09aa78c2520c3dbda1532331521def62fcde23be26af452696bf307eee8d2852fc631dc9d0fdc8e480f29bb99ca83d8bf39c8af559d6323d01a4245a8c50ce0cbc3ac44a0a41f3251ffe633f5657d1b22b910820e4070dca9852aa05889a0a4a437da495d57135b4e2b9e6030928b1c3dd75d65595132b4be20c4d3ca6ba64a4d87f49bbcf61c94e64a64a9d7ccc538499225e8b64570ea6e021c3b23c0a0a4eedda39553f2447d2accc56e82114b4e18eafbf48f2c1394be3e31a1473b053777df27c90bb01cab8a92219527dbc8af2c5a93f3e4d50d264cc836883c7fb4e40e727acbaa3139b7a0e88879d2fb6b7de79f73833398328871f8571e69a88e0e689df9f4561271e5432dca41db20ba5b28cc05ab415f0e9228585ac3a39f08ac2b99f6a839bc86784526ce0fdf214f61046d6ee78ae8de882a87d022c1c0c2afd5920943757eaa394bf3ed06381efa9c673b73de0610dbc3eecab61adc05bbe5034c30c0862c098b3209d6c2454fc9eb684d29e0382a4bb1aec4fd00cffa45633a2552912d46d9822a3255ce4e65198fa0770edec6841f11ddb4ac77983c239e5e146620df43951c20bac9b832d6236000a8745403bf02e28e9852ba289a27798ee89674e4541d139c7c478976fed4ff240365344919d3e44febb596becd450464d4e15bc65e5d86d748c4a2bb903629e4a4a06824af6d3928d0fb969651c7d6765b08e406e088b1cc4f461dc56f47e802805d8e8df7593b2ee5441de3621bd19a8c3a1a2fe5a44244af6f6499c218ede489e3f6e3b1be7884019755cd14b48cb639d653f7a231773f0f54ef758f5d5e9a28c2abacb3655c2d6ee05ddd9b86b9824b6c030ff55b9e3a1b9f673de64c5901718549d1f91ac9f21062d00814867d770cf28294b7532f480899f22244e4982fb3e47496e31e933f43f9f08457aa5b6e51ad03041bacaa141b2702134d32a82def8c9b0fdee0d25d960f97e0b2e0d1756c92324ebf025b5fb8d65102e018be904e2f772a8474753ac0dacc5d8ad035a21e9fc380b297c94ae2b5aa9c71406fc5a494b0bd5e4ba57df0458decad2c26e204feb14c069cfcdb6c9654b68dcd30731f7b2ea286a89a27740d137c8468ad5c83237817c5461f59c6b08de3d11bdd0a998f23551abc5be418985b25c24baa49961ab2ebc237eaa84b7638d2ab5a676880f103dd94fad5150ae91613b62dea28b2c63ba15c59d1031491c9c0855566c86103da7bd0649cfc7e33813166a20659c9d656b92170b9b2fe401990c60709a123221137eef26b862692437a48618e3705dfeb6a76cb813e39f893e40add45f006bd99e00611bec261c4461366622ca44a3eb3f7566f43aa234fdefce261521b9043342fbcbbfd7a06ae1ec0d990e5a5ee0d7b35130f74357edc684573e3d51d672f5ff9a48e0b5b1e831f853740a8f018be5eac6cf2179410678ad1d0160520e36dcf8be001c14d240fe1287ac687f0eae8ac71adfb7e3174feb50134aead901346962a5dfed17ac5487930c5d113524b82c2b2ee694b4063fd394e3c1b5ac2822b233a85061307d29db7a82371c9f47a6210d2653ca4cee13dd698e1d0b417ac606844e4c48b94ab1d4442721bdb11574e460d87bb8440ee4448470993ed1a08ceb7e26f9b78614d60812b2888eec462a68a45307f90c74380e6ad3aaa7564940728015d2ac2500dd08a3fc68d86b3c509bfc99b1404a1a31e28184278b8a484883910204e2ad1e804462743015da33c7860c3ffb39a37e99f1b4eec20ab5cae444cf38d8ffbcc01810201ba13af06c442929f2104d049ef965327c82e23594a4a40dbf66a13868b10d1e5d45ef435a14406936c3472451afa89363b215c8a6101574c81d120c302a6a8c892ab1f67936c0783b6c6825ad30154aac90a9183e8e4a8d45099e99e8661a966f98b7a674381945dd03965bad90ca4e9444373fa122435a9b1881063526f4ff5e55ceb8929f08d3f7348e646267734a53e28e96070a40a5a027d8902ea6164b8a0fd2bb9929329ec34678dc26f31774f9d7ff6bd57dc8f7272d6d654e14a360196b9db7be7cafaa1a1e7c27b00f7f0deebc76e97d6b986ead325bbc133e1f7a769f063074f4180e5068e67cddce1daf703a6fc07587a02c594977a4b76ab10c1e03bca8cdbeed6b400bb892e1c0e501f61878019da7b67b311d6b5b384801994f4cac47eaa996c9ae2e9f850bace18e235187038d5d7e40eb19cf6e080a4153b9908c38497cc79d098c502d3313898ee58c6e7e448245790254653c01c2a2410a07d9caf7a0c513155767f5ee699901468498e16ba6524491959ae50b4b7c7da015ac46345cb4c78afde899698f216b6cc499f434e365e2c729748d686e4d968931437dbda90d9412e3d27912be68ef07f64c39453561a943b37e35d8bd3899147b787eaa5f1aed93fc7ec54f1913afc0abe7c90aeb560538702344a695ad01385ae7af6d16b0b370095c30ed8e08bca8678ec6c362b66bb9bd6b6d44ce637fd05a34c6a9addfa59659201fb4f7cd34e4adb319b4fbe3a1dfbe32ad4f2e2c3415e0592b8ed0fe7b4ba9d9a0fc21487c9fe4229479fe178c6dacca12f5b12e91e55f1440869488e0036cd96282f3ca4cd0292e1d64e0086c2612d101ff783b9a540371b520412bffae091d3cc2b781b67d032968e20cf8eb5cb53d0fcb6f20395bbe7e4abe08bed6b82b54375e22bceb5adfcc7ed22207465b00ac30c883df4b2b58fef69d39d4e34fcb5b052073475c9b0ae471c97921b1233287a62e3f4b9674a7c88173062a12114f4c91b1263fb5e97135fa5c745e288d188c1a3ce4f1e8b34c2ff17ef1ad22a4a52b8de85d34c44cf6058956bef642a5e3fddb244b0d2cf5a90eb6867abd6562a3e14c4d0a25208e83dea6e1cd46d7d72d22602be6771bbc213ad5cc441bab8b14b5f60a5503992382ffb450ee487229d2a57eb1f6e1170439d69eab8d1bd1e22f8ccc41055fcb7365ca15a669e18b3b72cf7da8965b85b36a048b977af28c45b62b784ab631325a68ddf803ead74726f12afdfa2eae7f0812c82d00d4f5feaf12776e2665d4fb9271e360ad0c5af47998eb8c8d67ff27ef1dac9bb0a19361250f3f1074b6068dc2032b52a712d2ff105482d828830148650130adb6082c55c9c581095ba65f9ee3f124126f5515da9f3ecc8fe035bf115bec8fe10c4dfaffb970070dc9afe11562ae0cce6d013b0141f162d93a987bf80d64da26ce6e2aa20a83cf9479e062026bb9d92c8aa8917635b7460a6788bbcac1a6c164af84790e36163605295c8f19f656b00a1348c87e80331f89443eb8a5aa52d9c85e1124d4dae3d2dc52d7dc05fd8401df26100dfe8e73d7475c2e99e976424d98fe0bebb95e998e003977148ceb25b31ee21cbe47dbcfb536472285d518831f1b872448e19ac9ef6eef989f78e71cda1887e1527c10814a88b405073632ea30ba81b950487794b8d859106b31089929953138fcb20c61fae12e0757dc13ed68bb0687fd8ef0fec9dfa999b29889ebd068316ea914d81deeccf04f7c4b7960106017cf4a774ff6014b4d9c2b3502bf8fee5ced08772673286013a58b0c4552add5e5b7115e43bf2d85de075850179a6ec7ce12ab95ba43193cd3003bf3c5516721176427d00fbfe204c83573fa354cb357b2fefd4aaaf5bd6970ade5974444423c18044e29b6c9afe6771e5d525c079871062a358e9e7789ae5ab7baf6d166fca96f9a367d5b14deff8c9b1f0e0f95318557883feec521e74efd1b0fd11b8f1dd68d2e43a6a3a97ec605ba04cc02fb64031c427eee8b29d6edc9b733517218a6b43a1772a7add183f522145c6d9068424e3f6974a9387ea6bdc1b84f8e220cc5f4027251ff7407a7e6da2519543a807571f9f63f46b142e980f9e1a838352600879d1db2c593b61bae3cae73d64ef8e24a12be41446e409674cb89b76dbb54348baa3117f4170ba8c1b9946aac1343c239a872da671462b4d79f54c10a5fa5834b2225f1f26c195f02a940be78da4bd1dbb018fae90738df00529ae6f2d8bd678a891414580e1428927a2a006c49cf5cff390ab4f7fef409447ce5e9cf41da6fa1706805b7657f7e1ab849101fa1ee296e6f1681144af2bec5d566660d6f9a4fda9f75b0037b888daf9d226f6470614bcedef8bd41ce4b965947f3083e4ed7e49f9c032cbc45a61fed95e9f12f04e4bdf8cdf85084211e0624e3cec6f54d8ebbc4672016e3407774bff44ec6bd4e1823dfb446c01e7e4151d72072d63e51d8a81f415ecbcebb2e81cb0fbbebb43e3d8e1c4dc1a49c8b6527ae330574bdbe2b7b2db729289d29112190521506e0daf932c33fcf0a55488cfcb3f342596e91db703ca159b23562f9b6ae7f665a06af4c57e47122edc3a2ef4ff950124b41cde0eb88664657b46925d0b593fd3840524e09f9d752b54bfec790072dc02b04743cce04dc9751f7dfee3a0f57c365ca117d321bf8b1b34a62bf433eb2c5d4a1068cb25ae9a58521f82294376213278e1e1a1e04c24ab3ef52bd4c0851097469ffa29849ff8244cf65ab4c57d19be464bcabef90bd45cd7cbdd6c5a9e0920f141a28830120f1e3ea0f6a37a6f71028c1b61dcb40f737da41fda22503bd488f1040552892b75ad90da7ec42be2608726cdefdf5fed048e3afe0b8fafd7a1b479b14bdad430a1813f1ff810882a9d5d20198258a05085678c6c0772bed0702020ec0761aeb050a6dc8dc88243bb449cdd6c2ddfb6cbc9a9a96b224df4d00737a5e76d8ef8a8c6ee8973bd5444936c5487ae65f4ce28365a0c44ad20d4f91c305c74cf848b2b64109b55efc4443c344f81a9587503471a60a691d46b675da898c486a58523150bca6ddd3ca0bb4f2f0c7806448e681fe86c387311b21ddc15d63d3edc299816289ca761127ddc6b48f1838f66940d957b198163f18f0895e358ad9a18669d53bac4b4c801bc83b14a94bd4549c03da400dfab8ae49cd36365423e9c22e3d780f1b49c00e1ca898e8400dcb04b61f0dc24850b33213f904c07b546b6695183ab12dbbc8e6200b7d4749c21372f8182e791cd8bc8bb925d36db34cc66ba95144b39ca4e71421230455e40f1206177bb4d10819f1d3a40b582d247c270cef89b4485694b80ebe5014727e7f990ac4b1d2ab0a554437e5d103fb6251de5acaf6699f01fa2c56f3f367da2fc48e42b7e873881e3cb9f8de9ad0972cd513c60b8e97ef10d18319751f6acc241677765f42cc1b4e4c3a28532f18066f65d9c982ca475cd90567cc5c839a6b95c7aad1a23cc8a2ae9a2425d83be753ce5fd211079f3100d1a5994c1fff07bdc6f453c20e5278b93a16db4e658c1362c2a914c63a5cb7de9fbc2fdf5d5f464d6a3ca1ce39bd54d669386a1e313d0910aca7aab6d6fb53a17b636d95bbc7e89c287663080c6063f136e2b4236d8184caab9d7ddfdab53fada22e9b3a1256284e5ef7c96b952876985026729add4c04afd78a4af110311f8f72ff5fdea8752437957f4986dcf09b669dbd04c9ffef3898368a94f9dd0d586650498d233416337eadb77d47b6039c03817fedef6fb64195f79e1027451ef799da3bb9d38d8d838f18e338a40709740ebc28e2a9b9b3d1342ba38627b0fa8f60308110fd9c08882de1b2498075010f2c7c333a1ecc964666c34df28a27ce4a85fafa5e9efb68d8049105a1b7616a317cef88bc31b8be27524a35e95d31c59c89b2c0f09d3381965e9d75cce7bcc50ab503b26fa8137c834c0337fedd8e9ce2389c6d4b18d5affd880fcbb1475c27b2feb383a799b354d8abf3a7fb4d0ee4a4f23f41e61bbddbc32506af59c9cc62e6d070b65b077142874e03ebdeb67a3d6194aa86020c34e19a6de709afb9360ed55d328e5a5959700f0aa6e5121549cf60c6e933d891ee2ff1e72e01d193afcf206fcdae43222b9d7bbe0c468bdc631163b082c648ca94a60b75674f96b6746a0b9076a70bf0ad1fe90191d34e4bd1864f4c5ffe519f613fd9a371a855e280f87e374639a8e2ce5162db5de170f39f0505644f147772c63a4c9e54bf5d51e59624a94aad1a067e203d2510578d45a4bd0c13bf8e9a37c1935710ee3d9f9ab9c81c738ad8ed03fe175de01eff07297bf1dc9edf1a017f40a177fcb6a1433bf139085b1ee04490621b2c1eac23b2ed91a0814c003fa832e7f5b301856a503f18f28d37ab83b4c4cae52c5776eea1d1124857b8685bb358b6b2e14b4d4985006d43261210edd6b401f5ddf83f8399cf76dacbc7570e17b2d285d23af39960d30d2f05ec45f36b0a82caa6c64cb4db6dc52ca94640a4908b807a507ac92ab55fd1f4ea9c8848add674b4ab2a092920c29432a29212a323a424ae253cfa907e9f49374f239f56845ae6a8d8748233af504c1a71ec60159b2a1a18b84478bf3047cd30fb99904d7e8d77c265522f04d7fad826b14f14d7fcc10acfc2f032a1d79444546b77ffe6848d3bbd9fc993fa8d913e4f3fa19ba2ca01251b34a46b75fc610412302bafd4146d75574bbb7e7ed85ca53398dc7555ba7f5683fcee33ad8af16bd0f968871349c544aae6669455ad5dff5f4d1d8d028296161dd97c2f6b3fb68c8eeb3213a5da8f1ac1cd198906c362d8946d7efe380d6d1885cd5ff43ec77ead17a9c553aa2a79edbf3a706ac4a952a3776ec2a13f6c35ab5a8e74f2dda71b93389a3ad5b3a72d64c62a6804e17dc2e1d410e887f2ac2ef504fb0f23317dff46740aeea9f3f1faaf5a1806ed7289818b61ad5a2f65a461356db76502dfb94a695be16f50ac25ba36c3cdb912ac5a74ea94635696b6d45b452e6d3ab4f7b47d2944e6e6f2e317f264faffab522bdb2b7bfd5bab0fb26d0e73ef3876f4460bf53d14f8d4a9c5ea57e261914244988f2c514244469b5180774826fe0f31471777777ef5297bad4eddd419eac524ac1b05a978241db5e08e3e8974cc27ede8a41d105a38f4f4f8ba7a7e540eef2a10b8f90925ad1c7599e75df37ac27b0dc1eb74ede99dbdb9cb738e769cffd51efb9d3489727accd3f0dcff39611bc6ba5808373b91a2b2c147f49d1128252ea91e2c81752b44a90932305f6cbf1963711a2484d8c74acf04c74aadb5bbdf20bdf89c077973b6916ca8bc07f41e7f9e9cf819c493b7cf5eaa1500fe8d3ab94fbc394773cda83ff72876016afcf7b3ce7055be8c89e377bff7ea09c176c017fe012eeb24f0069715d6a9787be50e287058edc064983779ff75c085bddb0a7e7ca67c82ad06abb1e21ac844580d0af2187d62d6591036283d578f0cd328c73d8fa71ba90487b2f1b7520c757a96b58a0adb00293f6606cd9ddb25b7e7477fae303461430a880522ef185122978e07365d765c0c8094592c7093ff78b4953927ac54fa6045df8914ab3a08ee4b1526c8eabbcb0406cb03742816fe0c727700df85fced02b8c30e089d22ca31ba53bde577ddbb1ed6c3b7ee96b913eed04f0848dddd79f4dbed9632dc8ef6fefb79d29bd92dd89ba2252afbaa311c0cbc6cebec0b28985015e1cb147b0d95b23d824f8b28929f99e87d35c0a50e8600837c637fdc84efaabfd75bb9b41befbcb3f26f10d7c8b852d3d7480eb943a7fc9b9e8679c8e2f763fe8eb86c939698f6fd2911b9360129366c1984483bc384c72506bd8eca6ece1edac833e50be9008915c6e2aede980df64c809297440c845d0255bed25b527c308fb09496223cb8f24e5832f8cd410b1273166aa58ab051256a6073546ec8b939a22963249f958aa241502bb21c184174798f062481424240c9b32da78348c700962347a26b193539f988c53ae7ec8a9dd40351ae8ea47c4dc9959d9c3ee6366a63a5cc553d21ced6139edb044a18528c810ebcb926fa20dd7524631cc65bab010beb5e2c23fa168e008e0c2d731e5c25fa15731173e0d7c9b7e01be0cfc3ce4756675f7b603fa74e1c2c180135b6051851360d002224419b0aca0a743d1d7128ed86cb084568d7c9284992b5f323103fbd99fb184e8ca2b9bd82e5e57ee902820115854a39c8851c4164f7c010429620cbe1c5726214264451d547bb6d219504a6db250c2edc005802c5e0f65a8cb828a9e193918e2b29072840ca2a01f72a4a6073e338838423305928ca3140891c241abe6880646cc443144731404256474d0933a4a1a014a0747334662847c64923802b30324540c5e865e314a78c2e784032018250c610897295a2f4ae8a2a785a8e8a484317e6091c2c725044258a2a4162d902059e9c18b458ba01298789064b5e881109b50d18a16473041e5c1cb34e4080dcab685099094a268d52d9a3822d3c14bdb42084ad029824a5b3c4109ac951961c40ca25cc88088211e2e724002285a5c18e1082988b8a852e48482c2c8554cbb10410fc48191ab987661841039f071155326249d50342f20f236747044c8cbf129d0b039d2d84623a29e5670600b8000028ed4088e9486b3724089b5595e8b05464ea0b14dc90afbe5e4e895e72f3dd82fe7f2f097e15fa722ec97c3e3fb513f472b40beabda7367e5e89ae33284c5f164f474e4d1d8e66b24fefac8edee698f4828f62ad563fef0c3cf855dea6114dbbaf26debca2e45c3b62e0caa904aebf6c7a4a3d695367e300010f92c18b9fdfc6d8bdc4e4d6948a1c79f7508e1ab8341328a40924e9a6b7b1126e1e1c17576c074966820de0c081c9cc00923a4a01f1d193f5ca1c58f3496acb0d0abbda2184faceb3bb1a7b932aee615930d393a10355de47e3ffc5230268709c5c752b37319c26243d8abc7a6e075a3bb436ec6d5bce3d32a96e6f257b132a68c21acd7dc181b7b7d01039d6316ebd8b8adba9d0304defe9c1cdd4430e2e054b1ce53738cd42aae58c2e6e01461e3df1e31f5d706c77f05d66387c337de33c3772917246043ba82930b12f6bbfb707e05f643b50834968135204f5f65611cf2e38d13c75934ad929f83618eb997be6f57ed08db282d497d960ee52a59ea34993d90786364e19bf851bebcbcf0cd8971a458e83bbb13dff8f7896fe2b70c81c6369ff6b303fb31910550a88e86290d2f7732b4d75a494a1398d0ea9063c9d1d2d03570d2d58eb000804016f80101091cf147f8ed6a2f3a17bd8af1bfd86aa0f6226c2518465f685c9e56b1d9fd62cbfa7ff1ceb8da5651f743f23c5a6540c1e47e4cf453ac7cd9af93ee517c6fc5779ec8b1ca855ae5fa6ccc39df061415ed50be805e308e0fde8e2180510717e3c62337f2f04d3f15829dcf5b122a53c4f2edcbae7a991f2ceba48c88a0640a183fad96cee735573ca10992252449a2065f2041698f0e39ca28f6f397fa60230dc0856fadb8d06dbca3d3850f830cf079b8c05adcf9710e71c19d5f7bc5bad30057c61e5ca11693abbaf1082cee7bb04444e1859aa1449513dcf8335a10a34074e353256d648e414508a4281821010f10004581099e571496f4f0e0c1c7554ca9131434214283263e343068b2441346d16d981715bb6de757dc0427c8ee32b67bebc85660c3fc1823f413fbc985a1738c5818ed6e2d94d2bd0930628c314e7882138976b716b60cab9a8659d8f743ce563a9c85752fd8dc177e6c25a29ef39cd08da4173d461111aca813e3185dc419c4ac3ba168be079a1b30e189011323a929acbcfc84c908682e3f692284b3848f31462cce697362157f8c7386817d664b30fa9dfd72d21804e32eb6274fed51306c8083d37224a7845eac31c6e8c48d59961d59d21a828786b06068489338461004308610e01837b831979f8c018424b983fcb2c65157ca085f9ef886df42a6edc5185b22413b318ea6d59e1847fd9a7ee178e3ca872d5c7fa87ded4e7c235f662871963d79fa9171355a1aae53af36601d6fb80e6778e861409ba7419d6c777b7777c7963f70771447775e027a943246868f41772a9d3a8c81cb00c1f2c328afe65f761bea80999999999999999999997912c574d13fbb7fd0879023f7810b39da5e9471ca97371249e0ca47c5ecb9bdbf34cb3038a10d1262af282c3f7c8f4e2e16648df8cfe7aebd8f52c9cf936b8845ca5adc784437c257d09ba9776ba1c5ccc0f2bbc0c3b915a88e90860d048d8b7d8c16dd729f0430d2ba8f9a73621886611846836ffc195e6cd21bb798d241544ce6bee9eac27e14c60fc26da77b2e439a4879f09d1d907865f763ba8ef86950275b6964e9d303aca46d75625b8542090ccd08b384fda490ce52a9542a954aa589fda459690a6128b2c686a04108bbdb025e69e867660e00ac1d439863c338320981a8e59a450c9b7e05b54ea98333b0d032aeaf1337fb276c70670f76e262dd12f09c1c1c1c667a03c772e4f0cd8a9085ffe56040e8b9d1e646a83de434086149fb92967d4983db8eac6b61d15abaa0567b44da8b7f1a826d79864d40564b07a3b42ab2744f4c6177603f9acb342c1b05fbf9118cc7168c71c27e7e04afa4ce1e638c91069aec6b716567c576fe72557cea4eda8b45512a2c2ab29da92bc53461b797eb9a1f691f4d2b5fb2b7a469b00abe897c139d60b71a64435f188b3c28c618a78c3db5ab148d6dbef8d1c6260db5b13452702abda29f141f46a7d2491d53b0f19e3dc89db4aa1f3a691694db357244e2f3f03ab15b02bfb716602b7beea3b7b11a39d6819d3bf120222adaeb1eec4cf2240e8afd9cc8899c15bfdf8d9c15991a399078636c60e1b3dc7e58d4eddd5de42a8a3f1d4b4f5ca8bd97238ca4c016957e719f5000917ad552e0d190bfdaeb971e0b8dea14f6dbebf6ce087a10540114352072198a5791bd0cc50da270b5959e27eb797fbdb4521b08b8fe2a56f9f38d03812e472cec9191c47ed0e58250ceb9c341dd3d6770339c689ff1c4d2ffa02b66550667d58e46abfc5b45a359404fac7c3ac3099b95625cc1879d4308bb0f93349c8c16d80fbae64bab1e7fa76ffc3961d3881d0b361da6ecd2f0e32a7f4772d9c1eef0ada1a4034661296ebf0c5d82e2a5ad40c6c1826ecf0583a00b32692f48ca0e0675d0055dae20cbd337ba8f0bd201239dece15318e68f4ed651968e91c3e13c97fda0cb65a05c54a49d8c6cbd2cd4830fa5ad876ff0c71ffe00c950c27e8c4483d4f1824576db0179b0dbe5a1261c5d3814f47241229afb41d78a075d2eb0aadf9b4786d979f7a9e8b58101cb4fc448badee52762b4aec653d258f2dad0e5a499a00b070ee7792d94a0070a373e0ed68d43a33df7703ceef6f34d7f1760fb9162a500866c16e43116fe74396be399af096516394b7bd714bab1345d311d4cf7792fddf72ef17e591015338ad64e297d6f4c47b33ff6188661cf595012f68344b2a0ece8c620a8420fb9f1b3265aca8d5f32baf169941bdf8b6efc8c8a9b11ddf81b8ff3dcf8504a75c260ba806bc45c51e7330df826fee75913ae113fdb7664413156c88d9aea8a143b99b42a3edb67d22c07caba2f05da7d34b0eeb3e9eea3b940424da713138a667b9bead1b85d16b425b113487493c737dfb2b2fb602be9c66f06dd18fff3a6ab1341fc6952c2f67f99ab3d26ed45efce9f3ee7f439a5bfc42895545249a594dd74d5e033a8bd980d458e991339b3a01297bd8cb0f2e79c95ba3c6167f7654337ce18e743a1c162cc82e28c31ba7e06f58aa9d8ede73200308791f2cc33c88e0a00c80aeff69631c6d81e4e0d14ac8c1ad85f19b2b157886d2d8feeeea6449dd32fd791f3b2c939d9c07e31e301bf3d82a554ac35828ddd30fe4d79b4277b5f5d82253e140d84365509cbaf5130ec87938241c697388ca36f6549c510577860f9491350201244621c36f8063e14ae2c9ca24f3bcd3716f849134443943617b9540c1a0e316e32449982a10b92ead9a5ba7b61768c03911ca8046152b72052fbf44f03b5ab83fa0591baa88dfa08a944afcd7115fcc9492e462417f438a1d0864ec4e975bb66518d6a91ab9acbaa60557f6747595c2c8c6ef6bab508ce9f5e2d518b2e26316c426c42f67c02dd8ebea2038b05abe03e5ca31ff563b79edb451ce136b5dfff38af70b555f0358da7bdae5160d0cf931d10993f2bbd15a90ee7cf04f2e9d5123d830b1b102f4fafb63771f5835c95b9b89403a00e7f2a86fadb6f5ded32a0200fbfc24124ae3f3c820fd0027bfe3cba055e3107c158071807b634b8f15fb61d88e465db912f15e3e43571494abf712048a2711d0e31db8e8d1b7580d976e00f2a0712388b783519980d5ae1579b19a3080eaf96aa5807d8f35fc9b20ea35d4d6d3b30c98d52544955bab100ad8029b8f4b59a8a71291660d18446946e8a0576e2c62fddbe35db0e24e2d2971b0b8c04816e4dacc16abc86d6d4744d4d4d0db461e28d01cc844bbbd2650162d4fb9134ae804e27e6934b6458a4bd3f73cd37fc324228683045b0f0bfdb872e17ddddd176d755b020d1dd3b3397b627e5db11440ac7d0d8869939f668dc2bf8177a1be997b1dddd6da3b8ddc57067eeee8e0edd1b42efd7d1614c6cca18ad606ec11222e878078d6dac7514ca270c5e7056e99b3e8eb34a5d8642d12e02526b1d468a453122414aa9828ee1102dc5dc41be89ef175ee85763d837fa151261108df62a6569e564ee8d8930f7e562dc649509c8dc7ad03bffe4d2c26257ae56eb665a61a918c73ace655763d15ab493bcda4b752e5e0d26a6a26a6ac624f9263e5f8e1eb8fd7c23763397531d2312a91e0920e2c49d5d5f78210fee429c7c2e4db0507e84b09b72050d054debfc6f5fc7a9c1373cb01fd7b8fd35d81b0793274f159c8ed02ed024642fc67e7865e7a0f106a14b13acbf0ef71fde492fba5bfc5c1616be479b66423bc1289c7081886a2fc61718fec0b9fcb029b516857a8eddcd1461fdfb5da83127074e0a1e8db7f968864e3c62171adbcc396797a20f04dee71807f6930b3a858af48a44c95a882b67e65ef08d44ca926c129ecf98d528aec793b2d69591c71fabb3b64a3e92f4c62aca427fcf358c69ddbca393e573241c7724a8c2178c63be7c6f027b18ccaa2f57621ce39c3decfd336e6aa53a8964cfc3eb64dd92f933533ac611c088f5397d4aa2183323305402fdec067c4aa975c2f6c921343a7aa16147bd1c1c48a1631d85d6db76cfa325fcf24618ddd18b381fc3a67b4c163a5c46c9de300aed7a8cd179093dfe337e90901cf11863277bda834ffb6d2ded6019c62fd59de4b940267f4a1eb9fc7249cf0f1212111e5e47fefc1b7d033ef314cbcf341f69b5b183fe88c636b2d34eed71750c7347f9a0691dff60e756da885f60a21c3934706cfe3f4a3f796117710079c60396857c7032c445017151edfd40e810aec423aa8d589239a3fc40169a3c4df85aacdcdd903956c85c12ec21e718126c6dcf59c0b0946f24072e8c3be05b1c1889d0d859beb540037fa4ef53d28e19041f0df763e61b5a82c0ffc68d2fc801d8c6272476cc36b8bfe90d125fc225ae8a3209cc6c3d7633a3524a697b256bb576ce09d4b1570d9f7be5821036a2699fe94d3f57562cdb15ae069f81bfd927763f329e81cf9f753f2a3ffb7cc87d58c67d318b5f327dc67dd9977536cc209fafc6db4e566f566fccea73afe2cd62ccb08ff0650f8f33d470e70cfd2ca406ff6143aa07fcece16726ad9b813f6659d6f5533a3bdaa32fecb659332e721f7ff6d2b17ef8c3bb1924bf0db77f78f7d06eaa8546dd8f9f7b4aae0de13fb7618c50387174b5ffbb6d1f6b92ece9b6a3f474db3161e330d10a57f1e56b99457149b2979ca6556debd157ba6480e247ed4d6fdf89943aafdee3e3d1a73e4b67bb8fae74a6fadace97b4d7be7ea9a469f0ca1dd86f1c018c6cdb66a21bddb66d7b8d6e74c38ca4a8b6a7cd4523b9aae788c967eb611c2b419856b6cdb441251a075dae6af9c17ca5c7052b5256a4b85858b00265050a8b1216252c4b5894b0b880c5c5c20296252b505894ac4841d918636c0dc26e8f54ce6d87c4a2635843363d0b2e47d0aabb0bed419804939285d9742eb4e75e84f304748150d89fa7eb3f79f068ef05eb5ce8d86c24815eadc078a77417da731eed39ce6df984c4ae07dfb87f737ba51d3419887277eff8313373f4bedccf5d9ea60bd64259325b5ad14c75dbaa495b29d98c85b6602ef3245f228c33c734b3bbcb5466ee19931428b6f684a269e7f9e101e27145d40945233d09ef339a6534cb7a68dd2ccbb22ccbb28f6659c643d2cd3e66998544ade2226a648f5a1579406a55f4bacb4f86843029c4362eab3a273e7c1d6258f8bdf5f86428b1ddf2040bbb7e2a56831b017a6c4ece732a1b94729be206645c1b64dcd8e5dc1ca75fce143f10f1410bdb1206925db92cb4c3d1fd2c8d113b14a586b02d978576882285c46e97857668f25554a0798cd15990981473ffb131c62823759c48b1f65cf5ce5284852fdfbb0ca30cea67f034695e6894625452cc0a28a4431419fcc82c613fbb031097650230704d61831d869800a389abe0a300042e3eb01f0e0eac72638c425a4a9c200a214801500a78743e7a67d0fdec9d73ce2ceefc9c157a157f4ea0d82b172ee8241269e0439123211d847af8e184a2792aad28429317dcaf1205d619cd329a32b2f6b2900e2b78c2962e0be99084cbd2cb423a94a006089b5d16d2a167051d785cae6874fb3be30ca3f9165cfa908397d27614eca0db0f04bb2b58d80e8259bb648c46d0b8c5698c31c6f646f9082033334b8e924f0d63a4eecd9589a675f418bd6b0b2c7c1b1c2c7ca331376c4903dddddbdd51ed71c7537b367676c54b57782963ce4a1036f39c9810209c614f060560e24c05ae3f8c2f301fcbcb6c960c60d64b19735682b099636ced19c27778a22941cd0a0bdfb91227d9931cc838c89e941fb8f162af492f4803dcd270e3dba8fbc1a4ab7d8af35ca5fd0ca73daacae75d8d6aafa36550afab694fa5f69ae9c4bd680fa349e949aed2a484819131efe3d4c5bc909be42cca2e3d29a64369af61d9c7d42fd25e4743694270c859f1b58742601cd96b8f514abf85a3f147833fdadf20c3a38a729c526b5d7bb6d1ba19680f6d7a45b0525f5b11829d5cb4575fd3c2b0df24ba157bf50ac3e8f38572e9578a1509516c0edd3a5f751eb91593f10cc440b702599bf3e15caef579e8c3b0f453110ba2f4b11726e446d8517d0c099b521fa3d22cce0883c2e4429dfad1d2202327bd721edc2a3be6ada315087cf10d086cafb0af8ff1f40aab3fa9603e7ced17b9f5a5dc4ab969d45e7dcb1ddd8a1a8275557deaaafaa828b6e5631ed550bee4cbc8c84e6be9cf56afe2ad3f89d49faee9a459343d959fc400caadd88b6632b915d3f966cfad6f29f6ea55ed9551af3ef93aead507afc0847a156d5083fb6150a87082bd68703f4ccaad4ddc0fe3e2d69fe273652e0b15e1e7b6a0c9977cd9b5667e7b99dfb42d088c247296e9ebcb22adab7c394b884e11d1ad72e8d69797a4ed4f0fc3e94d275317e4f4db8993481b87f1486e830fd81ea60b228d66d2f6b20b228f5c557febb019d86fb6a8c52115c3e9b7dfbad6f6f24f5d0a7bd3b38eec52d807917f7a1813177f30ee2439df668bc73a3693521ff67a791f5b375b30ef63eb60b697ef63eb24365bf569d7f10b8cf6c2c93c0c677ac99d7ee3665ee436b36d3fb325c500f3f263907f9231c0fca9c3413eccf3862199381983c9f4bcc9707a990e87530c2f6fea708047260e87540c322fe36574ad99972fd3a5b0670f922e07b0ce4ce7b92a26f196c2baf8d9973ece9a3e3fb74a9f5b67ab7ecc18f693af5b5ffe27813e69d492af5ef9d79742bd72f9fa72a857f4eb4ba05ead7c7da9c47e7dec856133a9d2fad2e8a3b07eee13a9f4eaa33cb7bee471f54a0b7a71f131e9f386a2945b81c040b8952812b99456557aaa5f5ce246c137da3b157ed444b5be07552357d5ac524a99714099e7520db00ad489e15a62ab0ad4c73cc6c196c738be31256e7228ae875c55916cd05decd3c7389a420ec530cc72aebde56a58c08a0667b74b7e3b657c459e6d47c8c55e2b55192e660b2c5a3a5ad6aad5e7d6672656474f1f58013c5407f532befeec71d68caf3f7d9cf55fbd1f6ecdd141fd3781b8f5270fe7407d7dba61323ff330ccfccfc8fc77415a5e46869381eb22577d30b4bcccc320f333ba204bb097e982c8fc8c2e88ccb73c6f2f34118a6b791850dfd205813aa8e7ed012d2fa30b12f32d30b43caa0bd2433c5c555fd3aa0c37f331ef63e663629079d4fb907954874275f5e18675a9175a5ec8d5e1aafa2d5db75c45a9b5a86f791fa88e5dd5d2b1ab84dcf720c4ba0c08dc5103aca2cd8d003df63fb6bc3ea5737ef52052ffb90f3455a6c768f2dcfa5f561f7b1fc22cec8505b362cb8871605f6d109ffb70abcf13ac17b7b6126efdf92f2e0ec9b29a8ea3e9bef993eabe09746ba9fba6eb560c7bc13bbbd8e29bfa323eb01f9cad8a753d5463bafa2d05b36210acaa1f7f501f4bfdb8bd305f60676bf2388b75666bb66e3d7d7dac3e46e42c98afdbd7d7e2e97dc474a797f711f302f33e623a9898dfde474cb7f1e603f68fb3522fa03ee659a7ce7cfde67196ccd7ef5a6bebd69fe1705c555f86ab8faa62619d441a153374ebbb1461274f7bf54bdd6cb52743083bbb6f7227eea53e4cbd739e4e5d6cb9ea85be7430ef03a61372799b5d0a86d36fefe3d4bd905b5fcbaadd38d681e158e785639d2cc9665459076574eb9f38d681507a05bfcaaf0faf601ca5af4f3917ce39969647d1fa7048fdeac3ad3ebd62f90a91dcca622d0725e0ac47a12c7bfd8dd351bd3edbd46e06dae339604220558051f7b72b07ec28079c96504b6749aa4727e4462d7e82620e35909614e970df9094b9d06249924ee460f6f483e4e08f7d46bb1cfc71c8a16be9609f7577cf960d3b76777777777777777737bc01dd5563a0a5b8191fdb0f5912c26c0a856089cb423e1cb91fbd4e7b95a4f4f16abec92a21a53b92e480d259429f7fa0e69570dbe997b79f939f5d79fb2736e7fcf85372f2da780396adf1ff6f7bbc4675cb55dfad19c896512781c315fd7a14ca76ed0f753f69e4acda692894e52200e50fd6b20a219e2066d1b62d4897e04759926015fb0dacf2ff0c020961d66bdd3780ee0740820b81b80e7b70d9b6f77721eb36148b76a5ce4d490d4b0ded0bb3564aafe29b1bac80ed11a0c205ca41edd795ae1ae43ac06c23eb6ed0aed473390b28b70658a521d701c662dc81fc848b311530ff7194171e800b7bfe5f0e8f460f4afc3b98b5f2fc97572fcf8f005ed91b5eb13cbf0d6659140bd7306b7bfe06b0024acf402ebc02007bfedf1e548106d680a16996e989f080d2a9cfc3eb2cd1fedb2e670ad812209383074767fb2f75392626e635e931eb0dc8599b0bfbc6585a34ba51ee86f61ce392645c922de6ed6f7f03e380efdf0166ad7431dc013e1844a9a46531b5c204690db98e9936983771494aafc1dce0aa2a5e9ee101b287adbee17f43af4c18e338b1b6cf5eba0ff210e4d461261e5085dac120b46e8829b820db0e887db6692c35db76f0a5f9645c7f13cb0d42f8c6dfc4e1c035f8e6a5d3b2ecd26cdb51c08ddfb2edc02e5a92e885a50a83242edb0e17013b712f2b431ce0c6077fb8fe3450051eb086d7ff5c06690f0ea11d0fa84207f8037cd331a6976de7b4edf017a76d0706711396803d77e15a2ce701a2eba8848eb53539c9d490000000005314000030140c88c46291502c1acba25e3e14000b7a964484581c4bd328c76114848831c41040080180000340666c6a1b100077a4357030f21c04e10ecc298030830091d9a02e84fb25651bde97bcd9a1ccf69b56937f1bb454e818ee3a4fa2119b7c3b9327f59100d79987370b6569d6726b2bdc10569cea54a538e920b19e1a5edb81a52a85090eee2294a5e3c3762aabda2fab0bf383f7a1bbd1a8614ff44e3b504e193ce663e0b49be206423926012153021ca9f8ea5fcd56a666b7bcbcee776e42b2bca6085de67e7222f8336d025e7f38bd66f4027ad279d739de3434dd8e87a89ce7be23bffea79a8a5a22d75a3f67952866aaee3ff76976462748470ca7a1d51c9efa5e6e5def98e1e3142e9c16f07bf278a13b1f579e53486f30e73b254bdc793c821b0ee081b8cd83feb6160fd99f888421eb04fe6f5de05c4dbecf968f7d360f3bd9fa3b115fa5d359c642e13d6a4214e7f61a50ecdc29a8bfbeb44aa73bc7be6bdfb88f4abd27133305f2832d0c2f6aa910751f3b5806ba136a8dd813a815cbdcf21f9cec0719f0d645edae9032ecad4721756d7084d8a02df27321034e074240f6f56b8603fa0e796a86b69cce9d8c2917d9944fe27e503210e12aae1760cc25027b04140edad0877f1a3261411d56467e94638253eed94698e0c05689204c547c9f5e1f957d7cb6704151bf04c5d2eeac18e0af0fb6d03c2c4a31ffe06ad02875bc27f24c1359da8d7e5e57873cb50b92bc6c8825cd757c0869661cda4256d03d871eaa8b221c8284927bec8a30b9bce0e4a64b0cf9d2b484ce35144a8d9f47a1ed4778abc5621aeff126c52b462eee13b238e7e81c7138540db97c02f4f9f5258256bebf6590b4f99f2e26613fff168b816cf49cdcab45fa549985c0fef9ff18dbb6a2276f9ccbaa77648d8b81b13a41f191854826247d833700dffd93cf2db09671bca2f2c50bad102cf7a09b81e06b9815989126164bd88e3871ee3cac7ccd6f03e8ddebb5517dde325739f428d5d8fca39097070663c3664c56dccdce5f61486d777bf7b2bd13d59e65f754ada0e3acc14228f4a0deb424edc4f74302b5d0498d159f3804d70a42a4bfe0137c0efef6e065e47783113e36666107be072b12e8e50a1a6ad9de3c873b136d9fd56500b08b6408b8560841306831cc1096974867de420c93154e77e375afeaf5b0d410fad6b487689b2f0c0bdc252d66076ac03d015aa6755d512604445c980db93f59d18cbb45024c269dddb6c121fab87cb9b4c2f1eabbdf254f8a0ccde88f67f92de4fa45248d95aa016d3537c41e808124707b8186ff5f4cda180398d25ebea6f86eb3d2d22330a08721cf0529f9a3bb0821157848ed0ef66f7fe56d8c38be4125f29b39f1cba5b4aac1c4b16abc47bc3a694d6118c74a074c16ac10c09496eb598ce60a5e114c529ec6de50a2060e95bcca1192a70c983f8ee3ec44523cf71e6aa553d89e1c56e89afdc39c4874847655b197dc7e6277bfa744bd8baf2e62d96b0652d08ac92a4acf5676a68dc798574159599dbde9a69288c0080e7e6f0c111ef428d806387ad12d78c12516e8e118c792339904d8a1e57a8e7f4c6271a4a024cd662bf9f357e4830255c2644ef7ff1c261d2a4ffd3e5e0b76d38b37a2e7633f99c966ffc03ab1596a0105bc3d42f5124190b1447d04cf169a3f942ec7b8d4c7637dd26afbeda187ae6afc80e6f789bd6a7d7fc403274dbca75ab4e447bba7d18043755f8e6d0ae7644a898c7bfbf8851def1428ee6b3e4a11fdcfc8ec87298d475528fc2f322c10cec8cc14807227e98e1a7afd622fc2b2bfaab9b609b26a4741c2440654dd52d5c9aeca26d19fab32b507cdcfeae524009521c51022ccbc87a6aa05169579528e1ecca141ceb0db273b431a78084a0cb998be25e9970df0b1e4efc0d327419311cb5d79f4226ef8b905f010728da3f8f0be55549b113a6d4096857e28b529596e77240ec080004887e63c1f5019e189a50d66e53da99b019a730f4c6dc388bd11869cc736ced9884e09232f7d09899fb900e34a79ba8474af7411ff74a27cea9cc45fb04caada5299eeb7aa443685dd819ac582897c80d4b859d9b3dff24ff05d031211bf73e1abeb88660fd1c9fda0794a90fdcf8b5db19e2ea3baa96573500823934c3816c07dc728b4f203779f95835364d026236b6e9c8fc66bc45cef47cb04a154f0260b63e470ba59d83f61c8111086d82d84f394478d20cd165b4ef32409a4fde0894cf258cbf02b448cae65d0df1957b15173788a4e46edea8936fbfd5f225638d125a7d95b666f6bea8e9837ba98f3dc7c2f8c60cf87af13b76d5d7c2d7a225488b1b025c03dc275c1efd15b7ae2e0c65534763f79eb17a703fa9562e40c132781d0febdd9499c5fc2b6f70043e3cd830b63cdc7e58e9a14fe8b13949d5b4e3ea07483cffba7d7a68a91a9022ec3bd4f3f53e97ced2d5df84ca3c6ec7ad90a9935e21b53387c1841b7d16dc58349c3323e0d41b0ab895d5275a61b85084fb19e6f163b678d20462b9e8e409088a7d61752135bc11e8732bb3cee54bc993ff6f267554729fdd24032551ae70a83e5c333e3beea7ca00a267e672801b1feb63338206b60e7d6eb57ed472793d28692c304e484bbd7071e520524d5510ad7e304dacdeaa093e4b51c2f73bc8f7968d282a01a473c91fba4871968b535bc8d06d97a6eead26864e51de20d65ffb82aa05b7c0d0acba10bda87fb98fdc1d5a8bc646b3db1c9f854e39e42c3d88a7b95b2f58b192307172599de3b2bfd598a92e99826e31d3b9d1ade6c8075335242ac3d2e8b8ffe47e1a114420a1471c71de267a03ecd9d86b38cf23c5a09ad49f670ed388aa99c217a21ee70b2e94d6fa1f7a4334ec493a5ca5c66f37f00301af5f0190439b7f8b2a1ca7a185de1fbebeb216444c7b6469011be9288e511c1f7ca02f266c51583dab65ec5be020900f792de61f06086ac0e0efc68d18f426167912e6ae0a2fcedb76662003b822f10e5885f5251fba34f12b9a7f801df81b9e4d4c1d208428af874f79e6415c0f919790c93abc4298043b823e2f364a7beddbdb60b5c55e3f4c2a089ebc9beed72f81341f27b1d1a6e5fcc4bbc8a2ffe0e94997a662ccc4bab18eb26640bbdeca245e31c44d6f6db3c9e9aec7de938a692115cecd3384115ebf6d541d93fc47e571202e27ba40108c57b6b274e3b17192138360131dc6d557d81e58243ab2ef1734024cbb77a44eec1b89cb968a7649a0913c21ac785d913e2d2d29c474047fd0f4cd1583813d60737a4d10c5bf5061b29735fe7aa72143e6001b3eef971234b2b7395a412396b587c4e6e230f9f7f622fd2cfeb124a306bce7983477fe3adb12459a96f449d0a3ad2d502bf28336c626ef7e9da6c060ceed39fb067f6e0533da3f69a25793ee2c88539865ba9c01e7156693677ffb52d821c8c7ef0ccd89fc5e3ebcad42871ed6e95c8119d5047ec97d23b38a7be50e20800afecdd8ba1c26e6f0d08dba1b7c51e354b4e93b51b913ed4f93f77bbc8917af0151a535f7bb6aab1036f82f90df5442fac54420c073fbdb0bf900f88ea5bbf7189ebf5458a46524d6340c4225997492b6c14b32080d6e0823c89fd2f24f841dbfdda586c671da561e4303407b7e261fe539e86162a9928db405ef4125d49ee1226e98f45a189408e90b2d3b6d910e9379fcacec4c0ae3f7db575254a9ca196e259153f17944b0b1ef8fa79fd75be4de2a1dad6bae81c85f50b0ccbd666d7a5c58f40f4de560f8e5429ff757ec548b301b71a5c847027b8e7d75bb56011f100d9ead0d6bfc37e1476f634f598abbc220bfa3088fde586d2d087217fbfe87a28a7dfceb2a56cd5978b38cdc23f50fa057243fe65900fbd45131beb355a56606f69052b25cd18f9e16df2416b8b72e050dfc398b410b5ceb37aaebdbd52ec80b6513acf516b1138e6a32fba857ee7f12f562963353d6d0ce53fd84708a6e060e3d7eb9b52d2d5a5840fd071a97f1236d8756a491b188dba85e7b1aab3b174925396a70ddac171682f4f993554cbc36dd55b6974e98e466a0585e18bd328d472a13a484aad731898ee1f6e2d1f7f6b46b58549ff2a113ee8854d05aaeee8749435f911ad64ec3976f7f2a650f9f9c71ea7f05b6976036c1814e710384558a7af553ab810d6a1955c1e960a8b7272f3f90e6093e09f32bd3a41c966b8612370e690d18193486237b1858a6478344a1053de36ad02b7a27e10dfd52a9869fb87eeb2ab604dd38664a011c2fffad51ea8318504435cc48f1cda44014710f362f7b2818af3a083ab192da9f0d2603fe13799c85b786de5aab520db808f6eed617058b0d0f09366c4b9c398edf88ac7772fe86de333ff60f964df24f92d6051ebbb51b09a060d61fb5b0e20051b33767726b7b968dc676835c830172c5ba9727e4f49f495e245888e3df50edda9cf62a1a6c4255203dcc3c0edcbef1a9fe3a5866b4e142b54b17f6035489ce3043f30e85a13a0f4834bca8739ae5b426ee28405d18509fe9359717041450e33363f10f366c7e82c29e845e247ae8a36b855f8832b2e4315c7a4291f888a2503842dde1c41312329a404910746ebf3aab6e3876a25bd8678b783954479e0508009fa5d9d43cf40fb7b799e2ec9d3710fbbdb1f9ac498241112c2ef49d5550d7ce495a03bc6b17d38a06d14cdadefe1b762a7fc38967f0962d8e573a03b8c9187c288e66d28792e1b07e00d3446f9711e2d6cee9c7af6c26808751ab6e4e164d4da7175f00c5c861f2a1c95f73f647fb10b239eeb4a2fef53f3a3275dac86c989964bf498d09c2609aa4c987b2b5907634b2446e7fdaf82762af58b4bd3938a19e4fa0ff5f1a5e8a8f1c7ae27be1ace7db1678ac806dadff8045f1fcce66f9fcbae405480e21646b36a050d8b9e0589d611ce35b4838aba300536d0cb8fe8e8140e86159aa045a750e8943eb943a750f4925497c223fc0e4afaf887628620c6b3669c5b8031aff47f2e87562aa695f4f920f31220c058415a88a500a9c3557a9f3d0df23b1d0aa9a65fd4a59e80155e4f5e6b2354fb2ba2f7f3f498584182d23b9e616c4b82436cbba3c1474d2b0a8b8b6513688a3c3bba2a3c0147d9e8e2953638618ce8322db1efceb0cb8cea60ca4634b3799857ea5526b562b8c73c851c16d425f3d4fe12d1cc3f557d15f89bf93be943e35b2cfdb45c2ddc1ebeb2aa9f901118f0474ba6810483b374f898f6ba5e0e20c20a6aca7aae71b716f791abf8ba82c16f5026a8d3a01aee960259d352352a7b59f502d336896662ff47bb14e216bbce594092fa29ec18d9350f9d42d9803e5611b7d302251fcbd0ea168b79b9575a29af43ea82947d648387d410209e45b0053322ddf066e810e62474fc80eb5af16a9778a00d336d3f6ba54e44e24e0d83fec423e511a026721b645dff544cf2d4a99bf03f3a5cadcf43854d493f927566663a9323dc40dbc626f5ff64152ac6de6f910541a82da40dc6546487d63266196311a93a164a3e518ac15e66186b4afe00d3a578c846774af5d242bd8d1fa4970704352e5ac92fdfd4e944c941879a85f2779bcc04626fa2bc7b66f19981d418cee30257e922ad6475b67a6ec1231ddadb0a0bd3f8aa85653b82d8eee3ec740aa2738dacb88c0cf3c5fc49beae5c016541b9162059909bbd4f420714fae91f8487baa044a5fc816433c40e75219743d6012a0da0f86e99420ad82a0015c2a2efc347417784d12ea2f698a00d0279a5076051fcfefae826b9ee43189b1d565adfec42800aa0e464c8d189be8141d43aafd61e0f33ef1b0538811c41ce70e723bfa0a73dec5580e5ea28eac6aa9dcc07bf6398ae71dd3b31a45e70bd0f35914caf2467db50e5db4aa618a6b988fcd364a7322be54026f5340531bbb1c7f3212930a3421238b89d7441a0821000b4fc43100008543e193e83d229217a20c7129d8561ff1a48001b1325edcbd4a24c54095d389a2e875c502f94894765eb3ead1e24e09f25abaff4ec13ca0a98459fc42427bf6675d66aaf8b94288cdc5a9a6cbdd1b548ac966987147c22ed546b933ab0a0941fb6b0f60fb4c90ac38af3d61a2b81979c9e19f7613ee6339d07aa9657b8abeb166d660bef5c42a4c20294ba6c13a04f04a0758be6125056524c81861fe56739e431199ea1840b28f5766052c7dd4101bdb036668642271f9ee1c16414d5b9ac9c04acb531c54e50c50532214b5628c5ab23366c3372d734c0c49df06825fb5a946740052b2dab5fc4804e5422d70c4f256041430a21d7a89f13b4f3de28f109e21d5ca72bdacee9c82741447d55df4fd64870fd7ee21fb9e596ec620865bc9bf1cd8afbf4c95ed3533ff605d300640d085e7c139ad927fcdb440d35eafcdb1d615dc2b63ecafb411abc4be9e80ba3a9c1c7986e8f7ce061a12b1ce12b42e08415fc460bfcc0cf1bc1499b76c7926f80266237d7f0d4aeeac15b14512901cefee63619d4b34c9ff91413b4e6c25180fb0bf941c75183f2154502442d82865ed2ea95d37609f9f672064b9d489943b3bd0610cb848c0a3267f8442f01321ba92184867bee2b0a828490e1776c9ac7d9c74720b74ceeec2d656b5c8e199eab6150f69788149d1d833e424f562c5b3eacc611b48a76fb110f50402f5c0b9685ac467c8c62a543f6c6a09502430e90dd504052763289fea2d31a9b75eb2d37df42daaa035b7b411b3f9f0abc8034162f20a107a295b94e15167de4bd610ea22b6fb0c47cade71e2d07ee97c5e5cdbc681ad77c4197179c2dbc2a3a863cc3bf39f0f1860a6596b1a054d70301585f1e10888f1c853a2421fb7a16f5f618c91976f633253ff00ecfc6c11154cbefb232c135a7c65542d01bbb74b0cad4eec0e958a914b1f3e2fb8ac45ff83cb3bbf89e3599a18f758132cb936f6ec7ebb19e9beea50076ef43776fbeca870869fdc630f0ce90064656cd0755874d535f778084bd356256c9de8a501331bd9b10d9199e1a2ac0cc3dfe084d15873b983edea60c01575ed0322f164edbdedd3202a33e10aa9bdf0203d7b170883451c8e3265b9c60f51fa5229d44127b3187ce2b434f4826057eccf6ed3a1b89ba029f8ee2779a367674016df68a263fd31f6afb8cbfbf6e1e48d1b8bc7dc75830c955129589cd1c96de3616a87087d755c28f31c896a54cb298d5f6f6312f0350f200b35f863ee3e752a96766a658f604cfc7b264b30ebe262438de678c64866ba7f74d888e8ab2078bd0d4c9220dcb7dfb191fc449cdb6c1c29dd0775a1da51c5e302604c511b9014cfb5bcf0a4370a05780b5567057061719314562564adc8e291aa64b4bd7a83a5f04c3011744b44b2a983731ec27f119f9d981fbd3c3c16d9ebab96178353704b3336cfbf29aa4ee425a2d001bb1691d40a11e68472379af6ec459e70fbcfddd76b307798b2e6e27b50d4687f9e7a5f202968088f974b0591e3ca37cec00bc7645f58fbc4a4ef8ee9ebf2497311c22a137920567166e84090b6afe01a954b60d8dce4932cf64db0951a29bb869e95a0f0c5f546d6dcc2bbf810dacdc2b73d18b3e18819d2d09b2835d2c78e2ccf034a5208e87ca488166c572f2a62a0a5b57b8e11dd4575918054530893279bbcca709e04119b2964c07522243ea9866bbbdd2f69c9a9896175dc645ebdc8a180c8d7ea5ba69bdc483c4f97a96d0125ee0c41916129592247721dcad9bbde72e2cfac1e0d34666e89eabcc90774a6dbaa2bdca059812275104edf37baca55294e449fc03e69dd451dbb71657e2ac107608e67ff7d858d5497ba62828eaf95bea9a6da0bbe1642a2f77331641f80b5d15351523331d5918d08f6c02e423c5443d72913a1ec1886f916344be68262878e29d52c34c7ff082de37f7d6656e7ff703b6992e4ae3ab2825935cdd5ca6a8298d6623bea351ba521a62c8cec4b1285d6582b5b14d9245e9678de3b8a836c64d36eb9793ba7e807868e4a61b97cf146f432799423c84aad09b790e82709700ac1d3aadbaa4517a211de1e85f84db059c27e15485ec374a6df4d0b01dcd2f85a8b89d271f55806445c19b690f9f8dc9c4054008425efab4837ac5be5d6fb1469228c04146fadd135290f3991849056d546b079fc68e1434ed183784e7ecd65ee0c6b20f565afe73a6849bb5022a1d00a4e3947ae01b02d09276883136abebe7111f1570c08ea90cd181697a37ba9054140ecf69033804c223b6f09e210bd422d7757441d7ffc37ab0c1ccd65b9e7ee0f7dd119e8ea314695f18651e9f54a04f30e142644e9126ba208debc32d2c58311e7d4e2fd7d17951ba0ba2a229e60c4f3c73d4e5162e7e4bfddc50599681938104a5d1d77a935b5be671ffca1a194e28201e8efe847e16f4a871fa38825c855124a79d5a9a07f9ff8509a7ff5c0c1f8efda79d87ba7d68d17154ace12b130362abede4083f6c68871ba2f91a54f2a279a73967caaab59db44099d874657325a4f7ac2fdff29e730a847e4fa1cd2e35557ed8a24e38e6404936b76db6ec1c076b0e322bcece577c3b72bcfbb24ad94e33cd6cc38bded2f5a96fb92d0f541f01d6c6f3856ad5fc6c8aecf7d0d2ad922135020ca8466547b99a83b2c29c69a7238c0fc6b56484816515e20bc09a5dafe4be8cf9e03bfe0d5e56eae02d663056267f0a33f1210528e996b90593da3e24872744622e1684dfa0aca3959ebfbaf5be3316cfa8258b3c83da0d6ecc14e4852bb8a8f1a3c680dc45696601794e18e454db4b9d0782d0a49f728dd03b2c69ecbdbdc15c4e1905a78aa1e2088545963c17a5fcb41d8fb6d4d280fd021d307ecf4f39fc4f375d2c249e3386b5871338d5aae3eca5daf7848dfc0f02e55fc2a21613f77d75aa570e07768eb3c571865a56523d9981deb1309900ca5ba2ed2c8a3567232f582b001e9beb9f172634627c25d9ad1e5c8fbdf2df51369c16725d3ee45dc1ab36ae655fe4e919ed11541d1b45edb88100c7e652159694387f08e4d217605f5f932688743a9990d18794d8f53fea1028d4c794538973be0d6055e672198d6c3e8195391a84ced2826d39e07492a5968855d6914003246c79b8f8a4a511bab17892e3b6dbc7a71abfc3f35c9c7a975c06916ce6a8b90107b63ff4f8cfb65f45ac5e3354a196f031988b8f31ae6fe0bf19d2ad24f23ab898aed460772cdb109de807d4cd52017797894971440ca816d747710f5279f18e57f18fc02ffd3a5aa5219281a4800a3f78388c439ef385dccdd2bd33819d975bff7a54f2ed02b5ae44b29bf9b5727988d4a21f4a32a0ec7563d94ce2de2e7a37b26aa4e9294a9f86619ecc46f4e408a8261bca497cad086dc8423d4791526bad424673012a08e9241ade7a6311a28d86ab4de43b8ab79aeb31e435a534521b491e7c5fabeadf824ed2b15a4945dd8173e73896d4938064f847ff8374902df51f2ecfdd90e54da2c90f6a1c7ae8a753b388e0a0e2163e577a1426c92b555dd3d25c82eb3e7718422c966e7f427ab4252881a4b92abe838276af37d23d26675bc354a870f9ab0a56fcdeb76512a78177e6dbbd4ed841fea5c5e53e55af21de73523ff8ff5f8f6184046029e93fa86e788768936b96046a2e28f722a0a593a2a5f4a0ef2e27331f6e1db9a61ba4e5f873997bc40e99b18cf487df6a505d8532318332422a27dcb4f323e48b58d5e982165840756a1f7fd09f76b97ee02bc3c34f9bc9952781cb69634c79474ddfbb2f1769ae973835cee05ba7c04453eee04452a6c6cffca36add0a98977bd4b27bd76ea5210a3ac42d987735da017fb0137018ef441f3eb3640f22e32c0f98c1f6450d3f447c016e0eb782d2932a40eef2ffe86c6e3ac948677ebaf12df3fdb1e5f32f6d29ad29cf0a566b1e1b4fd0ff32c1102745d8f82b01defc805a3c1080535e3ee855552fb6a839b98b17d04b89aeb0d0277f933f0e283505801affbf91f0463d50b4c8791dcea32c32c0858f3271b1b9e709281b5f40bb580596613df8faf5f4ed8abe652d7998728668f376814676649777e7c14b8a13a6505814bffdbfc3a069c2cbc7f9524f3735a7e5c2b2664f8efe235543c34449fc7b7491c661e005fdd1e103dd6c34815bdb50065400a140c302fdfc1576d5cafdffc50ef2d4035df68bc6549c8032f6345aeeeb239a03ca617677d17f94fd5bb65430292fe4654d45cbd4a2caf4769f8043ed4c4a5c24ebe1c8f03a8a4a2b8126ea86a962c11863aa0a590e0a90c8291a5dc6b2c27667239c7c9a78d507db1c0251b5d2b6248b4eb878b99bae6ca38d15a2bd1eba086d8b43764b45deb81970d35b3addf7442f9eb62ce9f4cb88b268cf2370152896d67572fd50e192fb66021caac6a6f7a36667f879bf2a0ee207e94c0b11c2a2b0522986831c9f533123983e7895b71f7c1033b707f8311c6b3c2aba04ce4546a69fc44e34cb489d0a7976b26a272a1413f24b56abe5f6a6807d4eaa65d42b426374ee7e681165a399c39075ecc2a999e21248218845707c060da4ba54dc373072d15c9752fda699c250779edc68e4aeded3d28da9a34f1da113002c06734301238e68ead4194da6d0021df0cbd74361d1ba2c7e17042560a04d0cca5893991a5de9bdaa20fe55e014c97d03d9872fc917c0e772302ebcb8f7f8111cfa3ea4e4f8eea2fc4908d1ae77bdde22a8126dfe6dda2ab12ce195b5f570f50ed7c6942370b13149f7f40241f10b1826ba78f5c5965a2fb50f612e465e89742aa927e369cf225d5ef638c06cb20538d92bfa0de2a879d329c1ead844fbc59c11398db01d670efb2da8002b24c0a22ce92d19b73a80d85a14b5817c607e86e640f4e3703aea6e2b77054e11083b76d6301770e8bfeb7fd2119060dc475fb8d8d5357b3c95f2edaac3e83cef70092c92af69bdf8d12df5720a3eb5b870a657e3b84999fba5a977e439dd00724771d2af576073ec46ff8944fab5a203a47bc86b591d7993c372d5a7739de0e589bbcae0c100cf580866df59a38ebe929de2ac3614d7f88fb4c74d4f80914852bbc02c668926f2057ff2225dcb3e9ccbf496fa1779846d24a376af42e69bf6614f1e4015a9654e47fbb642ab9669ecc6c66ddca85ca03741f743a9d29c1cec45d3e8066947f8ed31194d728e7940543f8e492542c38f1cd60c3bf104c9b5ddc1492135119bc14801dab3854ead2f17d49a8f3e630f5e43059710813130c52bff3b8faca1c92d860e69609a612f259af93de085109c532500308f951a8edd56ecd2d2332a33f444c79b39512cbfa6f230a45aa7123e13634bc763507aff5dc015f3ec3e8f4a6be3c4d23f5677d420327f0f117ac34ef434a59752eef7aad38f0a881d438b2efc492a2afd2ae3d831a0e5efce194e0afd5b349fd04de19716dcb52ad6c66d87d4bcd3e588b1223a2f539970078fb6c33c40d6f5310136e910a13316635634c333d447f97c71333295b3d2393281fad38a8f62b07f9f74124fb2a5a4a9d621d7321c865cf653a343d3e26e7c3df88a3b2b120f683d536e97c6c2176a91db35169a63ae0f00fde0410690026620d47d9a8bcd11d980e5c46f61a3a5e35c95aaeba2d1d404f50ecbb839b62fa62ed064c0085252eb89768f01f2b0e8687769ba93f07b0c183f10b4acbcb9c679174bceccf0d3e8d805ef08004728b55a0c98a1380ecac6064979b77518702bfdb35061c02ad9de3dc1f98181d50e38510dbacc2fabdc45137beb8d64fc0eadd72c38894ab2a0e66c5eb3722bbd6839efc58d5d6ce2fc7f9992aa07445cba29b27f2540e4a07b800c2e6c6d3506403771a8a6a6773e9b6ffc54c7d63652953b6cda88455c8d0bad46a58374f8b392196e47f2c4cfbaf66c64423091bf97fb4e97c585daa12b90b81a7a6799d17da5694a3bb2e3da860453aee948577212bb2e2b642d5ff605396b1348acfe1290e9f96e7acfb9e3e6e91ebd567aad58978dfba92e96392ab5b91d15bb7ea6d26f6c677a60cada5ef5917a8485b9e873c5e9e2a4b17bc265a379ffac8fb17c7580eb6585c4359315c26c5ec36c3ee15f7d2db0e618ca6880a214ba3a070de760d914da9f33c7ad75529c8074712c4118c934af734718bce62886b272bacfb546abefc4dba2d9112dfc1f7caae5dd36d2f09c40d287aabb842ebcb8f684beedbf7dea1cdd8519fc423b360698289d993198b66e8a25e5a0e7bf221b92e81da97d0107b6c6226f4fefbddb02ca353d455ee9d41c9ccbd82c2b64966bc62339dc2b7f8573444f326ca4c03718ddbd045f105666c045fe05931b699e7a6b6a54ac4b916b7b42027b0618b735468c93680f2ba410790818220938f32705f7752412b0a7bc9c4f0dd2f468445aa8d7e8b7923c58a5f0e5c48d856096e64c12f6ccd275185c4e7fb52bcc147a75672773fd02472107ae2ac407371b194d99e59d489705754d275a68ebe44cedd052621b8fed8ce58656f5021e033fb5802232211ed93d1144ed2f60470b329e713cbd68bb59a0b7204c9cfa34165c1502178ee59204cf19543566384fdb93c8d48343aac64c736833299f7920e855cc6a9e3526d1e90f04569ddbe6b35e123af1c961b806546b4de565ea402a0a4e9580a0bd7fadad19a2c61402eab60339596215b5fe4f6f0194663d66c1232359bf3899b71a5b1533f55d9d777045b582818e12d31804cce04fc32cea968cc7ec754183f0497cf3a7258b022ba440b46a138731d327e12a1b9a5048cbd20a81d17023b976f19529c6d51198a8bdf71f3e85298021db6e346701e6ef9eed25203cbbd3599e1310fd0c394c4af08b855fde9e9885b10354ce2f79755b395f137e2d5499f318afee6f66b1a995f3c0e34f03405024980431eb602850d3df35901ed64845737203d9b5e4071be1b036087d822727bd6607a4bd8b545cbcb0619aa268d7f703b818860e98120e9251037249ddf066bc1be1705768b041bf7b356ed8f096d4223cd5815bcf5a2974c65adecc83a4a2ae9087d9f5c54f42d236ab2ab1fd4d063397ea39a1575ffecec66c2c9ca5a44d98e360641620205770d2460a6e940659848ffc85ae17cc8c63fb2ad0fd01b2b277bdcc4307415500c34d414fd4b012c60b048a354d324a0f113dc515b0b9600eb3dfde6209548d81e4b14482a7a113dd465e179c6d629321c5a27dc1cde5f12cdbe142d49c84ce853d65f7bf52930c05455eb9f2067fb6e9c0f54729bbe749b9d5e94d6fdc086960ecea940fa4d6a374cb2926dfeb36b40db193bbe62934a779ca6f01e0efd7da5582154eb49cc32cfb7f8b7d84718dba61cbbd613d4aa6be92fd49af396b7a752fda1b908f736cad1efd1e6b1510c608312f30f49bc28fdefdb1f157e5dbe10a9ba3afe36de4e4593b19dd28b4447a18c7647f53226307d13e22aaafb9fc826ef0d57a4ef7b43d08455993032a14b9e58fefec21a1d9f67c54447e4ab08a178cfaa71a5d1c80d6383772dc6dc2089ddc902a092c569b1efb226575bb7248344696f69c97ba1c080315b0ad65cc4380f6140ed44684d2ba306b02a8d0c81069e844916e9ee1f783fbd3bfe587e0fee3ad6eb47ceeb2c4b9269dae948f0591c2d09ff2aaab047f2638a78773e90fb39928dd709090d36ee2cc91a12c29323a94009ec104f6e617a4882970bbf705beead7f9b4e9fe1c5b480b8c6530db33fafe48feb9e5f7e4d6085b737a9f1ea7221198bc12c61eb63168c0e989dd3a25e4bdb5ce1c56f3b2bd152c55621adade2af8dd0721ddffd93f5f2fbad4cfa41934eeee4318ef9894158b135581be875a52709692bc8c7612912ddd60842bb569a87c70649775266f5fbb14a3397919f4396a3341940a7aebc92e31c6aeb190be5875f8aea0e7548ed91578990575a57e4004eb7a70cfd548b2275cd07720bd0e86bfdb27d713f28979ef1bcbc26dfb02bcdab8af2cf494aed5e3c0a3ea702239c288aa9ddc450b977d1646a39c71d17e9d39c692fb9ac89fb01e80a14fd7504d56d1583f318dee27bdddffdbd0e866d00ecabf689cbea418dff42617b503ea69f99729e47eaa7ee73e3de2f30e53d8ee6e8f5cb3331a738e0680bba979554add378961c1273b1333ec25587e0bfeee2900c288ca94b07700b93b0d589b42eb98e19c170cdf36a1af49a8f37202641cb7da6f05270663b6ab0c4295f3e63c6457132a801331ef03f56e976d23c7d2f3ee9525bfabf5d11273924ea731e9294571e8ebd07c95cffef03ee0abd3862dcd4b23646a4567a9d53e845654cca1ae5290f2906b2f9d05a473cc43613902119c4198fda1d5b5ea025c15a7751f35ddc0a337c092f0d1cb64d94d74ed9d8fc65892ecb4485c52f1315661a50b036362af96e8a65e54cd612c4ac58fe11d2bb2d5e858819eed7dc4a29f326354575305bcd1e9841ee236b3d8246aa206490d107edd3427a6dda12f51e134ca0b051a7aa5613617669a991e8725e4a252d40cfe8bfc5171813c08091dc4c9ae45e82a7ec0622ac27489691c388fdd1ffaeda4a254116043761203b3c50fb9363cd61d152b2e67167a48d72c1b80fb4e4985ad4f90ee977841e7015fda84ef3671218eec9497b977cf9a80a5759816199fbea2dbf90f2cde28f0b50911a5de85c5a7498dda9e5a9b07ee630e3388e9e61f20ca9d46bf53e0f45f5c6a0fd5756d5f121400d2413f663a164beafa67ec409252ad46e4f11ed164e2c01db631b6813eb933d7623f2c0d7d2eb0e179c280c2564afa19a0c71ad60a4f83984f4f9a7135410f2a954c49b0f858ee64130f7bb66cd3e3372fa08892a8389c5c7c9af7b1aa43ed33107218dd0caa73dda20e9ab4704c3334a2d9b999655b780b8a62c257451a8a24b32410098f706d5dc7fa1249bd3ae552b045039fe2625fdc519b75529d82de59fde9c1281dc8bb0a9039b4d3a147879c50f3daea0919e0887fc8011cbeffb089c4f5041b19ce3f9311043e9825f45a697790b6e354ba043753f4699c79debbcaec732dbb9ffa465512d97bfceacd07243919177def39ba0268a343719af71750b179a84f988e5cb68716c523ee194fb062f85d878cbc3f6af9f69ee4a5d460b204b0f8bbc2f33cf56650cab2d666b6fc24189603069fde1c6a75ac4d53cdd07a3a35ab730ed0ac1df6e88423a66140a90fc20b008b49316d9cea84186bb53794218af21e1f66be5c41c55aab883e7b06699596c309746e8242560bcf38906a6fae7700b41cd2170f5011aaa7be3137def37fc656450a410c327d1f0bdebc92d052c1bb303087f453b3264719455f106200bd04d07cef484ed5ef93314f29524f6535e255608d22d699e85122fd4caf9ff7d34c48011ad396fea5173557af7c75cccf4c95ae6be0eed297ba5b25c4b7946521844e1ec0bb3ea089772951fbcc439452e8719e606a8d0ab25d12da32f334eb14742202bd670d85d9d6a728d48f10e3f8619d7be3c47928edf4cc20b69b9ce49f69e350dbb5d2aa094a078380ca40c7183d64ab767aa97f89e4b7448a9c62f2e0721c708c4ef4f11049bbd0c837473f890f72f6eb73839c90f4a93cc50f6d7a439ec27274275283dc2d3fe3758cf49ca0a95ff4da93d6d795040dd3e4ac57060993b8500c23ae05ecbda116bbcc7558ec6010d37ecc90fedcfc800f2e75284a24b6e0c6a85881894a9f46c10b71c0a16e7eaf8aaa4bdf895c3324698ade681de4cf16c941b954d9564e60927f605e7800f10ff0df6935aef8583a11942ecb696d6a303f833fb0e79cffa5bdfa40e6de3ee39ecd3cb48b9f2450a8e29fe5a09814bf26b257f4d8290c91aae5a899cd6b4eac0eaa5bbd91abc414fa8bb1dcfa09af6782dcd12199324b74c341cbd88dc1ccf0080fa0a916cda7201a53eebf2713c6df3a4292a34e18adee7754b14c56880738a4684e4b8c6f7bc6ba4efec2c8af68139f20024db9cb6fe8cdc5e5fc10241bdda5eb8109e9007e6230725ee325dffdc2169b6442a58532dd38c2867f0c1f6885e4e5e366d78322d14372325efbe123dec397f642678ff90a6c85a038698009cfc7e742063d03f5345d2bc7f570ce040110fbada2d3917dba6ffdaac34ae83331d63fa67e65539fb79a28622411d0b0d0c67217f4fb4123e42e04085f46d0423d0d34f52055591f971bf04810bed4ddd5cfb7f37d0cfc0c1287056bbfbcfd293badd736f778aa2ed4197043e192e1c38d263491f294630348c2ee1cd079b6427dd9390683ee3103d0166654038a48a5b44beabd3d6241cc20a6629198502486d616e74ff45bf0c73e36088101cfe382d7ec8caf5ae3eef7d720b2dfd39eb76642ef25084a82fa474bd1d1468857c4314802d1ec462552ffe0104829a3b4afe18577d355089bfbec59dfb424eb934a8d5ef7902a679f84531ec299c1216e7e260eb5d77334eb24dc6e7cd521027b670b52241659481016f80cff76b4557488e654ccc1b3b6b1ecae79c662772dff964621d01da1caf77f9b52bfdf4094ba834a07c866a5441ab4081c2446ecff01a24043283c2737b5f1045419b495b0eb3728b4d1d83b65d7f207fd594f561457b80d0f4c97bfdac2d97d1ebcc085ffd9ea9e967e1e37880ee3e1fb5c8174f77bfba0987d8d8238ed12161704d812f41237cd65f350de306ed139c3552e6bab03d6ed739bcf2271e8545d1b3c1dc1181bf3aaa0d7cd50301cb2cdad84ef9c711e9105a2e02d3fe292b3148445109cc196d3811fc7b83fc1c24f37d319606cba2c839a160071093aa1d818705041b475182a2df23f735cbe8de699a21a2d8efab1e57cdc238a64d48b13f9a7857435b71336ae132708f558bd00de5e01643998f903d88a1b036e45ee0af8597a65168607b83059f6cc0c9dc7441c0f3d51acad4105414242bd400ade981d15b4cd85c57126462555d5228bf28930a0d1ea7a4e67fd10d368c0432a78c270e908bc61e88ad0fa270a31c86b880e7542827ff43ebb7e01e8c46d51e3605b4b08b28628b84a2562a52c268991466cd2d89d4017f3ae1f317153f0ab233c4181b105286863fda68fa9d51df53cda6fee66d5df90a8a0890a5c4de260bc762c19dbac09f829a45d3b70d98afcc9160fe7ef0bbf89490c74f12d96285e28644d911beed38cdc66d042d78b7261f245f42c81870ab90eb3ab3246f8bdb3e0a9a18096439e9c7da11b11de870416e864575600c50af244e07409ef1e722ea3fd9e0c62d293fc3961a1e37af97cdc1a939869772395374129eadb3c23bf132430cc65fa7f135b4ea7a65c9028608e4c4970e763e03c7261600f08ee8df114ebcc605846d4b5d89a3daf22485548a423b74fe00c175128577bb02666ec7d55c62c8032b72b056d8372e597e6f5fc1c2c7a07a6799413552c259df1fe18851130234b13f295ffb00a2e84a7261ff24852e44e7446a7ca97299583694ce1e204e67e60f322c860709dfec5c5a77498f0b47720298681f4df448e0b14ae619b70c37f6d8c006102dd744dc0aa415aa8cb8ad07507dc3bd297157571ae98424a68d4c6b8393549751ca48abd35296e3362fa21f3a4850cad78597730f621833de660786fd66fddac50b5e7a9cdaeec7d8d36702fb4cd45921ad2414dd253b9b2f433de3ddbde9b18005aae8b39eb275a020b8822fc1add09b67c08d5bb832ec8b5609f02be11c0a7bf6d9ca849caa03f12acd9814d99f8374861801e3542b5590bfb9ca873d53c4b667d37ff9aba29eae81851325a6e2df90ce1754cf89b987bc30f5e1034ed5240104b1271f1f01a06891b43d5d2985f3612818f07516be8cf0f0e41b365da5b36d621710d42b159fe2265cbc81c940c7124f7fdce22eab30e669a2d54b8983e9bd477de47171b4208b37f571d0660559141c3b694ff934660b091155565b5afc8cad6c9f0cbc2046887c1f3e6ff137ba6429b1c46631762e73ebaa6b2f0d9a569920218bbee854e56e27038cf56f2b358bf4eef6c638256a07c6f66344c084e0582d9d37bd9cc4cd5b6403e7f5c199ea0d92c9ad69c5233a250ca6eeb929b8e0aa718eab1761bd5f9c4207eab6ec985403ef17236bf840ad5c72aa3baffe0feed7782183e215098c40cf65c83b0007da933bc9a3a030dc14f0ba2b2ea7ae45cefde25db0f9eb313cf70337ade69b149645a0f5765a03d35ad602ae86b56190efa57aa1d318a13dc180de5b42649dc3d954a684b5f8e157e7cc4243960a8792c1e0a4d7d97786b1e9ab133f3d8b08bc3810096375c3b0a55c65c6681e38a5a6182ef19c2eade889fa9c579ab1de3e0c2090ae177ea850b2e6be66c37f1104270d51f800c39bcb7508dedc0187e47689bc6e1d207b064a31dcead86c33c25ed4b38ecf54f175a6e2f36ff70988f6453011259a3652da547587b4ea8f469389cfc60b0fc215c64d372a70ec58c7995099dc7206f19aaecd33932fc16c0c082cfb54908bba04e1672536deb1426e4bbe0b6719e3e6dc774286ef3605e63fc03e196fdfaab6669a006b5ef89732ee898de5fc0e046c3536dd98055ba0406d6063d959393cf8dd72df55fe028784b1a6cdfb9cd8081720811ed87c0e05c557f265bc9af644232598f9346d63f2ebc2806a35c6afd6a0bfca27a73876dc99d03eed181bf634ad9343e7f9c868a2ee8502f6f56637097f9e1fe3e5e10ab1564a26932b5733a8999529992e6e5ee3adf49c49adefe1b44ca8342e1a2b852f099fe976394efe63d29d9b5a77c35626075ec2f96c01527b0c50abfb59cb2ea6dc5dfb10af339d5e3b270573f0448076952a905348698a13d71b30ebccbe1faa340270c4cbe7daf7d7cc06ae9211d9f6c77254e053e458bb250c79b91d9e82097d176dd1f538d154040672660df6e0f17d74448fa48fb79e1e52ba533542c689a52bca00140438b33d307f40457ab8793875bc8860ab4ca9a11095a098542ee514e2387a3f19cfd69483c7514123efec96b0f11e011a24dd6f43d1f0f3d22d873adf163563ff277cea38088894361f9782d7e369d17f2947621cb3bc907bb5551edf37e5881be8039210f467200d79f6a780ca02239e85ab0e7dd8c88595222de9b65333dbcbc177acb1468e3ae3ac019e094310fbfa484d0a8f508e937cae0da9df903baed9d2fe27f3588109a88eee692afa58106d73cacc4fe17293660a44fbaab9ad3bc6fdf5f8b43a5ba5e185721243b2583a07be689c7c0965d5974cfb925d336f20115ba4dfb95e9d4f9ef694337da948327d33fd559486e0e3e4656fe2fc3fd6ce4ae9bb7e3af4727e60b4b8d0a0b641dd8cc412386244d7240e1f8d3185d9d6359dba2c38b8e9dfef8ce935536453c267ed27ef35c3e91003ccacfb9b09fd43eda6f17c18ab84060a8c51eb3c985671e4147066f1826eb09284d462b345fb6d80cdcaab4673beab5f11bdcc2eaa266bbf9418ee2bdb167f263a02e336649f31c34f2c6020462525bf430eb4cae31ab53aab56ff6f37f12c9b177d2230f6859c7d1ff06177d2dfb0933e0523765c7c764983f3aae5952d08e0e04b03e06996f365d99d14d9bb4b87f2921050d531d4b0afb4b7bae514317aef729b47e27750744c077f0e68eb298d637dc6396bdfc7429f5475a278395feba10baaaeef03a81a2d2067fa90889d3da9d0e3c2944c1f65209bb60c631baf93b518598ee3fee5f6bc09095a2457e85bcc7114bb534fda8744e735c720a0083a2d069be1d870e779060e74d5da3a736f83570e6d5a80a51198d464330b856ce5fd8d4a104b35c0a0d2163ec8134c5b9855742182eb31c6ba4e322a16f0b45adf797ae273ebba6ccb6a55fbb03da440616e817cca8f34897e894229e58a668be79c1d4139e6bbefc8988d73c353ac1b79842d55c902e5106822c018ed4aac808232fda9b88a545f43f89c3039e13a0108a52295d9fe82e2222bdfc0c67f9c668f7f0ff0916a2902ef14b873f8f536d86dd812d508ca332e61f02c0c50faeaba3fe652bdbbe5d54d35c6e4e897da3376bac63948459c508954c96b1397a13d36fd3f24b858830097e2dd641ca9132c93bee845525d7a7832e3b5992f8d1e7137c7c788daec12043f846e81149e1c164d2941171d93d3d9fb925ca07a0db5580a13f2f795cf0bb0af7d8470f908ac359d646bc80c18d26b8f0789bea9b68ce408478ab8d99e178ff90c3c36c13fa649680d2c1acbcb5e89a36b6a751de231f567e073b0b73c80b1174c64ef65bd14f95905229bc9f6634721c257d82f788423480baa93a5e361db695a04d07bc1d7b5609fc010c3777f3787ea6b8b56bedae2f044a94647e1baaf95837b11515a2f98313c655e22f3ede1fb706f2d76a2080423da9f46c45f484ca55ede4aa98bc7d4cfc0df83e2d6ccdf3025317dcdb7b665e49af132165e1f71298c0ad7a952423547d3c8d0eef5ea3029f4c95584d0f5d17cf201434092de0851fe7338fb8469e8ee53770062f8833391f42748ccc5f75690c826076233dca2cfc4d93505e063bac1847c00d95ccec1219e6f2fa0e59bfd68b430b4ae0d5ecd645e411dfa8732a6476a13cf3b8b174527c63109dd85c915a5677c0d155b84c629c01da6854b5ac223ec9f95547ee4608fc153bf44d97e3cffb36fcda5a2741d6532d5562ac11150022b67c0741ce077a24b2d62ddf6f106ae3010067de9e086b2d7576da4b50ec4118357e42ed477bf7eebc7d341d1aa2cdb8acb975305c150630b89420d5326cb1132ef35becdad40c69f13d96ba8f0f6e9accbaf4d11ee18e7987a84a9494c67bfaaa66a446e282a1e7bc685b7e95d43235198b6583b3a851f1604b42203a1b0e8bf5ea4cbc853dbeb1314b0bb82eeb26944cbd82ba327637882c4fde3226f1dd259adb2c20499d9dac176efc1374b41ee8a5f5c07fe917744a93e00ce951662fdd205b7b956149709b42c6687b8331f7874c45220ea9251dee35abb48cc4c80b5e8231c0f9192bbea42d2dd4f9f152b7cb590095ac9bfa969fbb958d753e6d57faae6223474d985acc02573055b3b7e7a241e3139b6ca5919b08e9de5b689f50fd70d4fbf3ff90264563de3d31609d02c0563c3fd71423e970ef06cb00adc0a88433ca793c2776f2b6f857a54469be040a459a07f6f45e4fc9ed2c1920d95edaae87c2f5efeaf753f3791ba3f2999834fea602abb32184fc1cd80ff90d1fdef75c04182ad5c23e51f2080520e38f9a046921ee1bf93e0d26d00846349d26a10c4b58b36038619c87e41b5e55a020c702d46f7965317c7be7eded6115db6497476b812540cd59cab3cc36f06e6bc953de73071fbf9a113dc8b59404fa83448e7dff2de002a530199be64ba3bdbdcab05b841bf09ec398f502ec24d5fc541d693b60257833d5192ef337dc35a8b24153423b7391e1f3f2e665a59b8dab0606315609aa51fc66469fae6838e114021503cf3610a08290538578e1531f744608f3f926c20191543a32bb0481a2b1db34dd908ac29b6e9eed53699dbef7cf0a4589792113bbe1647a3a3ef9b763b099857b160898dfc8c6ae015b874dbf2616a0be7613134f6967b9f1653cc4bbf798bd1065c044b5eb926174b165208ab2cc2d7fbdcccd1ee55de04ae8826675a98a63262efc120629d4af97324fa8434d3f238e8018204fdc5ff3757445f3d1c511f12bea49205b977903e610f3f32713d2847cc33f0a00a5454675e023da181c4d8109e085ebe9d6bf3d6feafe78cc260303cabfa731c3289965fa1384255f8f058c6750e4c8033be355ef90612ec138315ab2f3af6eeecfb7dc301a311b5893bafab4de835ac0c5dec628c64a9aa84eac7d9aa4b5c40285a8e36acffd44f2ee60567e15e684e499e2e576908418666e477fbd2741acfa9c6b0a99c4154b7b8363e44fe829ddfe17c33ad4d8a5bd52a68e7eea35f8eb960a99b8463bb023ba92e29c088103ab89d35a7f10bff730e1f23e3df59d3ca205b408d32e41aeb7c726c88f933d9fca0f66644c2b10c87c13e41366c2f985a951369f144cdea786f0f6e361e882c0ac5c0b1a7fdc7740309ef4c8c89a6976bf4cba700008bba1b3642d82edc8edab1136bc1eba8fcdd43eef6335a7bb63abf47205bed1d6c34c8cae75dbc55cebfeaf5051934860f6237acdb5a30976757697ce78bb5f6c23bf8774bb73c5d3604cc96349cc838ecf33aa03c95c1a882addaf5c0c347121084f00454295d3d9bd839d28f14008bb079f94298714ea026b4c52371a9a03511d8fc8d7c346e1a894d1502e2985ce90a55bddf3d6ce05059e55d4423335672db5324c14c6683ed9b1c517a3174718e4f05eb7a1063890158e30e2cb69b09e05c44694aca1471669a1b5fbf9cf57e85955161c3807ea4a932dc2b60d26bea2a343f7bdf005a84b37c7e06238844d20dfaf785c3ccada4506347a8d9eb8970c7193ac9cb037b64d6da37528e106882b1b05451fea2849851907ff84a106bc3ea7adaaf8b278b153e05c8d622652af76908bab864187801073f7c9910f81de1ef1dbf644bf9336b107080d47e6d187577126d18076f30606f8ec9150fdcb5e4fd55d63bdaf4653f57908a45a78f7876514df23495af800bad4cca7f849149ef3904192509239e4580d6cd8274a9b710eb541e7a1fa5b5dd53e89d63ff0444ca237904aa26f472a2e960737b84c0d9038cdce15e7c0ce000e4b63e74198b7c64140e83b39c92f4e73bc9086781cd9ab67ea977218a64a8905df0666760d7e9e5d83fa2de98f035afe3b6eb14ea14674659f346ba78294ddc2b47a100bed622f156c034073ee96e1a8785965689f66bd844875913855026005729b085679be11e710efa41b4d385eb7a00fc38a35f0313684919eda8186e634b61df4613b60601d276b550d972e4f3d30fdedbdaada1e444d01d39b01a8003a4a8b0721495ac8072093ec1210b21580a0c8736dcef39ed41d1e41272c6402a40cc105c71f07007c9aa19d20c01288707cc5c9c0fc1d5d87ba6ca5e8dfe2390ea35a97d2d6ce081d373bbd365ecc3a5370af252e58018473b42a5601c952316cfd5c7e327dfc1753edb428c56dcb59f8d7eb085b11cee52eb93e8e148e395b0621f0b8bc298c192a82940b9de9fa4b5ed5149c69b0543b16cbef96724c65c941a79070b89103721ccee2822397e6798166e20abab3c0d97db0b0bfc019008a79c85a3b7cad4dba3a271a290d444c169b07082a21fc689a266b7ee83ecb7914281259499987397f41585a4e69b6dbddb12d92476ce1cb9c05804aafe6618775cffff21c97c2d8937e6d74acf52ca84235cd3771a5cca6b1f9e1fb46d19da9db348530896e00e6272cc2b35b94d9c2ca3ebbf19b2bbaee106de83d5ffca4f110655a591e0362649062a5e4c292171348a40036c0e3a7305e1e5c3d07890ed41077a0234dc5247153270590c26c638c29e148d3164ba75eff79f214152ab4c1ebd8539552c95422c8ed4c104c9f81b0b11302bb0dc23c22799aa71d7d828d9de7f3fa199833caf3e509dfff33914b6303534b4b204dcbb15fbd758ca8dc46fff19ddd02194f6dbf49d8e771a076eb53b24f277963138642674ee76202b2f3add7645bc4c2450b27c9633edd4ad57983b88e0b51ba1c603549653f707b366a058fa7e936dc318d0e48d2cb3b83b4ea17a765fbae3b396613939c6022d96bde45a84e71f415499faed8efb85caf6c51cddd8c61dff5e1e3335d730827529d08b2c5c1756c9d0f8b4ebe1b5745e1a41fb20cc3bcfc7efed4852321366c7f91c705af1f2bb451478ecd92d8c12e6f16e27fc7dcbe614aaad0df7311d29d544bdd68425d43aa8bd0ad40d0c8742a52d744c9a9270a22418dbde8803803b29867434170e75219f04a1fa4c2a20369f54cc74b7a9c86fe73f4b48d8d9d66c22006c5abc2c77242a5a36210639593b93b19202b67f8d4381659aad0ad3c5e341b2c6312487121834a666bff89764100bdc80aaab4e1258e39f85a290ab9bd475ec4b9ae8b6bc02bcffe2278d24d3dcbee7e256c5e0823d90937d1faa4f8abfeef71d06fc9126404a89d50d1adbf930a087c5d3d6f1138b40079d104c2491112c74961e945a45b6b209945debaf50717ed068a8e8e428f458428f01ee51abd92305ac98fc38af0e9d882384c14e992d05b2f0c660e13295a54063e90bce1c3a8c4b53a170e9b8cff1df09b7a8fd7febd030e83bbec18ff3cc29a6730e2b13d6a0021b357d728d0d23b09f20ec49cd4c757c2680e5c3b7467e80db8e09dedf394fd2090e3ac68f8b6b7c213b0070363fe26e467c9aa12aca70c82de4b558dcc2c653947096b4b1b554944d93ea8305f1d0c96d89ead5bf0ce7a749a53157ee946163fd0cb9f619a79a55a347675a93ef13dd2767947a05912631d8a8157ea7e67615b965862a1ea227581bae68934395bd0fb189ea5fa3e3861ad37b8683c370e51ee7465379a2e2e6bf23495563f23eb0acbec6ed905bdf75f23b606f7f94d0b01e2578532c41001c84b9927163f0a78c4cf5db14cf393888d1a83abf2dcdcd8b9bc8edeb80cfba5b6581a3deb782d78ee302e319229e57329f7eba3f83d6f5fd894aa111dd4d0f932636fcd4d4a702c90716f7acbba498c78b090a5ca3254324d95361c559c098c9012d7aba12deb155ea8caeb7923874cc23fb0cff3bd6a36d7e8c91f321213c308992033680d7463758e5514b114ca7f26b9232fce5662a69f1528180508c6fb72770b532c1571b02d497ecc136dec81e2985c3465ee30339871156474654a8ca36c6b5d5ebba35fc0745a33e2d04d402eecf9a4e0f6465111abedb7e30535122757ab6db0e9947f5f09ba13e09fec18a819f7be84a92752c447e3328af94fe736ebf968bfa3aee7cb0ddd42db72a0bda41bcb7b3429a9083beff624379f7c42664d72a4d984dd87fef534d18d0edf92065d7f7d4e96b8948e65c92be287a3b2598ef228382b3ce5b3a0d6877d8fba3049b0cca7b0f82f7b2f357b6784b1a7512a65bef7013b06f6053b0be2a9f7d1b468fc4c6487f864d0959e0b8e93487bde19c1aa8418ed7076e13ed4ba14487661cd3cce7b02e1ec296017bf84f5e53e081a4c148da9ed882215b296b7eb17a70db9b6f87852012b9f674d634e70f959ef513b607dd2097e710c1f118642b00a63d114f07817da17fc23061a83379bca2e52a0f7cc265272cd3030934909a6463bd50025272eaed7c6ffc740c6dcad60aebc5dc343eaf8f0a28b82e6d80b7902629efa8bc8e8ef5f91c1ad9e02ac9e91f9ff59a640c61442dd867fd25b46701e54c0bfa8e490b31b863b39a6ae43f8801d3b2a2437701d45d12f9f04c04e8ea8303de7ab26e57a3a05e7fa190c458c6cf0cc9f12c0a0aa3cb1b017b7fccb2711476c674186abe97a65b4da4eaebf21c42396451926717b562f6f62c65ef8f1b1cc30c8108b85a3ac9941e86390919ede3d22276ae6f07189714b50d648fac880274e20ab122d83e659a9cdc568e20ac62d4388cba9f53d57136bb92618b9a2090b2a12e73d78c67a06dc31d7b58ba1250cfe5dd9fd7c54e8c33f120e682a37c8357f89060ffa75f1ea984ebb05542d8ea768b78889ed703b60b34e468bb9173666ae4fc056ff801f458d8b23b581435ebea269dd131245120e9c6d9625df13a59f1b3ac6dc7d0d07f14a10121f4083721c391cbfe837dacb4cdf1046959e92c2d54374ffc4025982bf579c7ef77510b79ce1afe65ad284eb5f97a1a9ef24d4c4a0847ae55c3c23c9ff583b7ba59dd950bf89011a03804019aa6cf116c2cf0e843559bd4ea04c5e24d73565952e58854a4ef0dae3ad1b2791b6eb0b24bee07cd6dc5089257f3eb9c6dfb8f0b487648096f3b4f80dc0815fd53600c653ae7615ff962249984ce5b7d1df5c4c6232f8d84027336f60a0bcb9133340a21868adb44f170eb341283ebe139876fed212a1c8008dc197b737bfbf1aae8a755b8bc393fda89f06492f805cf2fcd4cf24c39f054f5ce9d20d3a910b3f150bf7a2b6eb554df8aeaccaad4524654ac1578d5300602215ab830a6a5cf4557397c1df20a27a900dba230ce023aeda25a3abd92596825651c24961e73375062f5d4d55b3c2a1b11f39ee195acdfef46f0ae0cc5923a3648f41a016d6069cfd03ac3e6ff5613a7b9afcb33b419dcf4f8f8452a7e86f4b267d9e1460ddc8819b60baa4f561c278c1e247fb164bf478a41a25f1288982a2eae4318cda09e33326001760248ef214d23ed26166c20f129bda616e5252e1b9d4dc239a9a6b75300943c3c3e3bc2950ab4dae7fece950947f77669ecb1cc1260d8226a4e6b662adb50d4a4acec662afc9741692a800110d53d9ab438d523a5fcca384d8941588ffdf061590cf4d1c9a3c2ee9d6f8577c2ce7483e25a621afe6cb76bf7627cdeb2c112159c19b0e4256439cff967587aa7220c266119b65b921a59ec5075e29e52e9b41636c3e920cecbe6d845fc59104419d4cae6e2f24507b788b6e63915ea5b41bab647a3dd3f60a32f004eaa86901d6f520c1ffefe066de0425f69a07458d0264fa6b09883c528a090b11ad9a0d921072950a8e7f2c633df74bd18922b19851a43a65c0e100b8e07a1803d61864357e77f668efd213b0b3001e6097719f9b37ead5ec85d059470bfeb56de8dba4d9b9f9301eb4dbe4c38e490dfbe24613c802ab89c18bd2e2ec30088e90e2408acad1a6fb6d364d0c0c1ad9225b67b410e841c5a1184fe3fbf6350b4858a095cbaff19939a0945514d713be94f0a181c029e6957a2d154161fe369271a8ddbfd5e13675602a1a58904f241ae7527b35054f845353fdbab46fa148f35c48389290157b15e2263643cd9afa30419f242b372e1f3dfd83f009289f70a578c297cf9bcaacdd7a78830e4bcb57eb0fe988f46ad20880b8363cb476989cd6609327e240b8963f355d7cfa74df8ce041f08acbebf020705460d17c59a4349de48f217537d7ddb51a41db190f967b47be36870f917fec8bfe7bdf0e3f8c1ae6cea706438975c22923392ab183f1601a2c5413ce25d628f0e701034f1e0e76024ef8ae6d63e8154c433ffe3f4e9f52a859605cdf1c0c605e76673e7a329891c0d87be2ecf75c9374eaa2c18be664f496721c2af8a2b372cfa31a25a78648d92a5f88ddcd44316f8d6a820fbb764328c42c576a198f0e34561f975c6f8adf86d738acd349e11bcdc17858f51b074640eb73e911efa650ee9099a8c436ca34517535c8d86c570f1a413b3254d5474c9d8e07dad5b5e3488a3f22f969ce97d7310e4c830b9a5e04b3359023f6ea4560ad6e5fbd9f94480eac78feb49086b7ee2b6f8edca16586ae1b27410d3cdb25611c96e1d6c60496de2a5e82fc997ecf0f077fbd091544a0c5b5604147f47e3881eb53950faf9a8e3e409825ef84b0742cf03f920a87e0fe0478d30cf0366e902b79c40446e395561d85ca834867113e294f60c8149080acb5e7da840773ce724476d868b82988be0e6e68d95201418120c40c3761a89534a4e72a23feebecd5787dc0466f0adf2c3b7fb3a2169cea6e295a2b7dd82e07610e24eacf0bca56382f91ae6d2dba00cba8c28eae1c4f700a578e8fe7b3c0bd8a0742bcbb0d34add2e82c6166b55af250f103952f3f5694e725216de2f0291b70e0fe729c94433c2fc897c84ccd123ed01f33967cd110d87271a5f804fcfd1567e450ddb35d284737f1eecd201f3c82416ce44b71095c0a6629e7710d414f869f229075d272801c3c9c8a64dfcbe0e4cfb5ed4e9f45722147e89d73e6b762a77c8b4e8a02c11082894f1aea810602cf57aed37e608b3da4c4b9bebb257c376cbcf85d66010189bbb22427c3d310d739e9219492811216c1d7fcdf31c6cff259307637f792bcf6d97adc5256749746b7f1dbdb61e4c41eabf63601da8c34f863a30b416198abf32c21cf23a59f5dcc0b6cf0a4ebc924cb50dc47c03d18588fb3e78738410e7f158600db0195f7b9144909a9df80ca3d807a7ea5ab5f2bf5dfe906916d749086ad4d7729bb1653a9d9f8caf3b1d4d62795b351ffffb05bb754b0e44f2819661532b442a96a8a85aaa9d08115f05ab7c9f11c1fe222d0376a4d77f387f649c760a34e2e07deeb4053b8243e3aa1054c5798aa649fa86a704427a88ade9e69b5d41139c976ea38cbea4091f596b6840c40d0620d278c80a377f15f3330e89dc3821aa0a432bbee10af77e397a8030304113f8fd131950cb2a7a24bb4febfefe73fe389cd2bb40c35fdffef2750be6c48d59b9d9a5353db67fcb6f49ea4d3df7ff613ff49aa39268f2658fc15f37a0e221cc2a51e2730f2ce7024ede512ff19e1aa2e3056d3c858841b75d633f6549d1000d1ebfa6df869bf55f0b24f0ec831ddcf2fedcaebc19b1534a171eb4c0d35326a6be1c6524e55ed2623bf7f24907bca25ef9026b6914511c76f66001c5addc4948cfca1d91462116d9dc939d58412583dc26a325b3ee56e57be0e8c8968d118b1e1645a91a8a7f8284b55b1ad492e7a35a7891699517f39668359ac58826976429f2137da3601e140a5681db0eff2376ebf66383b192608bf0b215c50dd87ca3ff741e8daa8317abd2ac9ee6df6b345e56194d96d042742483de823a49e3ec5de05d13dae05cdd8f9d5f1ef9714d65588fd06b759943853aaf36ca8356ea116c87591aab133eacc367fd6217f84ddbf016f41e32012043a44598163d7c8c9172d834934f01f806a9856bee72cacbce0a5b4f4864cf6923224ef57d97211b30731c0fb93b211c2c4c5fcf358a38cd286f728607849082f4c501ba7f798f9284bd8b18d39a8e2491a5edf76318c7b383b0c6f2aee475dafdc80f848fe55dd16399554378851927f7fbcf80c34afadd995dcc0af887acbf4d044e390d5eca7fcec3c2efcab574452e1cfd5a316e0405da130af778160846977d42b2e3c5622aeb7788edc5e7f8cd38cfc6a621d9bb40ba6142c2beeadfc6aa2588fa20bdbab789da2efcb5f85623e4a14b6e9c5d614f9d6fc54c118c795dab65ad93245d9997f5d04e7385db3dd4ac90477e6df05f08ed63ddbadd44c6867fe7511aca375cf36add442c5ec9c8f22807f5cd5d9402bb8aa087ff22e617c475695edd5d2d58a9b95bf2e0ad3b1aa698b5a7e4151b6f3a089c23baa2c6dec256b8afe375e0de96f13727f82b29219a2a7a2465b9b09115dd840955e53883c816be162c5c344e09920d67afd6ffd58e8cd03805e213632da47db0148001de92af3e2a189957ed280e4c4c7e7dffa7d7ef33a729e923925fea3f2bf49aa006b917fd29cc9223579417d7d33fb699907eb2fb1f685ed6bd02f317ec84b3c5ab1050be7c807ec5fed4fdf8a6b0b6e7a4b1878e5c8640e5505c83c635b57d81ed1706bbfc4dd9243c547f32d8d92cb2b166d0b465d36c0e3d2038e4434e7dcbf0d3a5c4c1aeac2d7cf140cb151cd43b4b0558e4264d07f670e1e0ab54c1201844ddc7fa36eac5c0114de8db21fb9153bb59d289c8b1f081fba3ac2d02e9d818a91e268a824b3a52bfd2e0d0c2928985910c992fa06174308ed24d48ae237e4b33a491f9ca083aaa3c9533b7088c60640a4b42490c549c8555f44a78d6090e93283ba18e25852214b026d3d3f6e935b90fdda15c42bc1cb4784e84656743465e1ccf826e663f92989aacaa72812aa002b04dbf4861082c7030685597b10ea5f1551dec324ca3ea8d00842390b37a1cf4bde543fec009ba6c0eabb4775a46145eef5af41ae036c264bcc96168003213d067a42345c09bad4a5af3f8914003f05491a3a8110ae3202c53346d51be43d2701befd70b04464bd488d5e8a12e8ef44f0895b3b48880970044c56bf8a94296e6b3c19fe041d16e942c475452bc99767a486250708a70663fb795733f223c370ad943b536feaa5167d5a116a29f8b37b446e4824c6ff911eb2736c86515e9e966f4a51a585c3f5187c0922a677aac4a3634f4818a28176d446b05e44154b83596a73814f2009a26762c578e714543d840f200ac545c82e2695f0968d1bca7fec002b2923605a8ea6a11072dfcaa64c2bbfbd2b63b4b049d22a95a3aa0a3d700e3189f8b820cb13afe1c0a89ab6d2d002638f77b2e81a3a2f85c109c95542ecbff763f7f6d181770687ec40b279301b45b0c69932cf26406af36598950d8a0440cfd60a68c7878bbd346664a549489a8dc91efdf2e919ba02552076cd265aaf207f024db80abfa75fd05f8428a3a0b985ef3913d48a35627fb013472ad7eb6bd9994653d2a0567c964e270a8c13832439ea2d4979fd3ae20b0ec0ae939ad895d2fc35e31720168afc5187c53d8a1c3ee140d478eb441505834e9f0be676c8ba9ab13094e9bf2c9b2b14f2b8996f85714793e4f6e9a57c87e9ee4046d9c0267c74ff186e6bdb0bc9e4fc839c8ba10169b8270e5d0718784906757b82b0d8000146a5757ee3ddb85bff947480bec149ae3abd494aa84f4217a68b8794346fe8bb4d14e6a52a38a0cc0e859ac82fefe590f8671e05d241bfc0fc5ea1e1f09efa74bf705e57068528dad302d9d7d0b2c27a386cb335a21d0aa249c81391a53256f32686d8c626a83f6ef4b3dd294228235542b0808eaf5de99e785d3c4dfe6311fb8b6cff1f32f7880d5090a671785765685190c69c52626326008009ef84e8f5f334bd5644363a186d3ab3e74f92a07ebc1223a5cc42f977324a96e43a2b9d2abb5e886871c3352a6426322f57c8371012ac7482f0f18beba9266ff01cde56ba9a486d9ca7ca1044c9dd97df239811d94bf2034280da38980fc45b0d52164a014900be837f002bbb40cb03cc66ae67e26dcf24dfd139dca7192d4c40f53f74e9b086de9c42c9cd2b965c8ce7065e9cfc2ce157f4e5c386b729f7d5cd39cf06fb1d1a185f8ee088cddf5ab875164b85c4e8f405fa990cc9d995bdbb01c892e2a308c94748b6813c2403c37caa53c62c313c790b23622a693195c2c69cbbaeec9ad849474ebe9813d45606aec139870bedb960b10a9f8eadcaff654f1df6cdc5df4b7db0096451032d4e8c3c92468a280925615e7b0c301b6e48703b9e20489e26b4b24d74707652f6d86c82e0125fa0dded5c464b7dc31ba436f16942b61bf736a0f3aa595002501b83c6b7d312b708ce8508b9f43955e09f47ee1615b21bc5508de54e42da276cf73b0d75dc96bf2d499ea51905cbe9a349cf3db8fefde4d94ae97b9430fefbefc72c3ff8de6f9f5cea3377880c8131a2ca61ce2c9b4d452d2df81865e5b96994a0b12ccb03e2c6d5ca889c9b269bac793aa4ccf2982aa49a8e7702ea7b3d77dfe9384be22ed02c2d459db894a46e8c54d4af0825e55fe44ce2e458d4372f56d53ddae7821faece724c6f67a3d7ce01dfc7e6f67d08f7e3ca10a15fa0d75e8f7dfa57582a1c887c9dc1677303983b9adf2ce98c350e6d54a53f273519db29bd592d6f3dde7006f806cc9cfafe735afdb40d2e3e13a42f51886cecd6df3b56efefd3266da916f7d96922d2dfee6254d620f5d950a4bc9da14012f536fea561182a018896198accd6b284f9f1a9e69b707ae3e9f8efbdd6e8e6f3f3d7778cdf176126455d1e2655dc9ada605f99b3bf45696d40ddae776bf93e521e4c862211aebaf78a94c6261868c318e9c4c45be674fde3dd553cb66ab36e5139d94063e150d40074a8b6c8d05eb087d6cdc61605bb21df0fabadb5deba20ca7505058a2ae2c9487f664d1548abb19cd3c08249404a732f7e304cf03ed8baa804ff2e37245c7dfd166e5db8dfec03d1a5518a9a8865a7814c2976905b67e90f42bb35bff59287cad9114d5fec82f69a85315c65b645eb15336f6d1c29f305dad07064d935a521394bcc1ee159458bffa2b23b960eccca09916a7e14ab2ad3746549028a29cf9e0ab483dbfbc3e30b5b10f992c777b1afcbb6aab3e58b52c419036a753e7e5930da15a70331088b5986bd125810c549dfdd77580ee8d92dbe1c68324718b5d2ddd06db2aad44b2a6395df1a94d9b2e1e3dccec3a91307af94ce41572acaf33406df5aeb9e0d29c173938c1df22d0a697ba535b9e596294919ab073608a107dad4a64b2676ba85b0000a24b7113c19eed4ec18e1937dc44e3a90f99ecc6e3fffe3c1c37fbb167361e37f4366b93f0ed98912fa48731e5cf6e47ee82c95acb5bc1101103be2747c48db8346a0b3fa7df443c1c6af80cff40ff9f1a65f2ecb8e454c5898a11336d22948d8a35d6a739b5b2c1271f84711c4088333ea02011012556ea3b61b7d925a941408e10d107a090b9516e564e891fd6b89ab409c09e158a459fe949bc1cd587746e7f26a861f6149d8d0e1aa5a3267886212a4305e0b1aa1087330ae00b36062dd95488bf0f01789f09421a017a76d0342966fea6a8863984473463733fc50176145e68c1a68967f3a7535441ea0346e45feca4a570327472538d5007d9cf8517579c5e310d0e56f93180209542ad5d500ab70a446a7402e629318586664d8658de2384424a227c2220ea0125a383804f4fc4d5d8445d864616161e96a6891dea34f88221365f4097184eda9ff7fe8fbb9af3f46df0172e4418ef88651819a49c72a4edeb69a5393d4581f699dce692f28731cc712e2711617fa711637833ca258c5a9b08a13e55725fdfa444131569cda44cda9b23aab3c95496d528f549d284541fdfa2a4cf4a4c24c3e26914fc5a93838a2994889a8478a96f492ccf54c368f4ce54fbf4275625124baa930197fa48c3f118cbee926e216e24f04ea9ab6692524dd70faf5857894d0e9d7077d62fdfa361c59bf3ed1cdac5fdf768326b87a24733549e6ea4ee6ea92ccddd893f69ae94a99a9477423c211e5f84cca732fd211dd88744439229c19336e4c29a61453b511cd4c5a85c54cafe121b5068b7a1069c549a938d24736e391a6f8130392345671be8ab36d26d316236c068d94d75226d336db642929afa56c3a2938882d96824abdf628118c13d9644e5493394d36fbd08fcfc49f104fc62298b3b8c7b8c6dae3aa928a437dc32798fd423c998bf9c06e423c2126a11e51cc29b5168a7cfa357aee454e443ffd825558bda121d14de6444adae3b6ba6da2d815b1181189609cc5a6275604833d62e63e4a01f60e32c7b51399fb7a89cc71b10ba714582332270b41e61e72ff453232f7d19faffec8664041568bc9b41aad8990135a0a42389a4d28092d35c99c0d35118a85704249424932f7a11afae3339bce0cdd506a757e3287f2948e489bc8ce6daaf0c8dae33695df288eb3b888734597fb88d32852b6ecee7e3922cdaa4d9a8392511bd94cb685e8bc314b19c76181fbf813831a16c3c81cf71188fbaddb7e6e9fc243541ea5b209b954a5a546ae050f41bdcac36efb0c509c95aba2a2f22c78c8e9553004547e050fa137151071287ab3b242715454680e04f0c6e32c4aaddd54547e4e1c7f64db0c693f9bc966b2994c25fed8ff28174ea05604a100511d6a059ca93814077046caa80ee502873aa1871e4146a3905128643832998c422693c9ba267322eea6e2c82a4ec591c964329cf8f3c385e88dcdcc592c8033d20a9fccd90091b2afe2c49f08f453716a8e4e8d715f7dce6d6e739bdb06c4a59e43d11a0adb82b84fa12c273b693511c8e2f823db7464b2198f6cd391e998643e63a9cc24a326bbe96cb14d67d3d994d870b61ba034a95f65369b711f71608fcedca7c0380e0601e843e282fd89c11ef6b9af1f4ab4780714fbdd93c4b0165f20d6e4ee475cf7dd8f9ed4fde73a5fc5a9dcd3f62a500b21223265016a50e79cb5d6597fdb9975dbea366bad75ce5a53abe521839c55351b67d559adb5d6ed53d163dc6aadb5d65a6bfde85bada6ba55594db36eb3be0f9fb5d63abfcef9f5e793ed66d6adcebad5f75a69134bfad3af744facb5d65ae7a7dcb75a6badb5d65aab6f53eee4fa9547aef5eb15b97eadb5d65a5f93a160a9373dea4dd564d266ddd75a6bad336604d904317578089269eaee56e32c937c9334cd20d34b3c4433e10dd683d8133737bd09c34c2fbf8453f3bbf943e4979e46dd64f2c683ae844953add5eb36e79c75ceff36190df93898b09c26930e3d3db2190fea69dceee52dbde9a61e76539a5226d3a74c40f2739073caf9d35d9943f7b243e1204a39ccf8ae0691ca01f535be0686a55e3e0aa7e643afb57e4c01c93b84b56d3735b184d9d76caa4dae2f837c66c2645045614d866b6db2f9c4a632eca7e57c3268faf45795afdbd79741fdb25f51bebe567f0679f5fa9a8fd3f8e4e39c737437587bf5598c4c4d564d4feacf21e0ac93885c2712b9befce9577db985fa1296d32f914eac5fa1af2f9d88be7ab549ae54402a72fd5a9b348ba3a52472ad1f12bd2f719f3acbb5beebd41e97e55a6b4fed6db3a88735ce951b7f9c6e5df9d3937eaeac5cee86ae4dae490881aedadbcfbbcdf6f9be6d56931af4d1f35194436d1ee433f047adb5d6f8caf2b5e5eb4a5da92b5f7f7a467dea83a4be2585fa163c84f42820a4db3c93050f41321f8587a058f010d4936ce8d9ca373fc8ca93f090f863e561d700d2d7c0434e4f0a42fa153ca4653e9c556fea4f8f43ea4f4f24c76eae3c0ea85fc1f589e4959589534048a43a7938ab3e09c72067516aedca931e87150c9d45c2a97baa274df32156dad14073eb533a61dad721467505a5fe17aaf3bb0bd00970a6ceaf440c516b6d2e729df8bbde05aaaaa3cad5509d1e546bd52a0ccab5d23aeb48067bc47ce68425cc3b0a38238980acfaf5e6f4a1d4ef0ec8cc81fd36d984d55a6bada6af5f4b8fc3099766cca0f1389c300dcdf4389cb0a9f3991490953f3dfc51535feb774dad353119c8675870acb101e177ca2a29209517550ee543d82dd6b4be86987d7011723e62bd8fb63985e34f7bfed207f66ba0aef19e7ad37fd12ffe4e2df0e76de08fda686124e4933febca8eadf8caaff0775af9eb2dd806fe2cea55b8499ef1a95b6308db2fa4bd7ed5873ef5ce632d545d0740978debfdbd317ccb85e15397cbb05f3cd679661a48967ad8d1a430d79e8d7befdbf896afb2a369b9f761477331d772634ed9b837bee5daf8d485f95ed8c1f03edac695eda9be6a5cea92729d5cea8e72ddb8d4ed72a55cea72b986b8d4adb98ab8d415e55ab9d40de5ca71a94b73edb8d4dd721d71a93b732571a9abe56ab9d495b9a270a9ebb9aaa8ac7e9457f81322c380617baab7716ffcbdf85bee7fea76865d902135541fbb20436ae021359e3a4bf5307553a91af727abc4f0c92afc83cc290ca1eb4b3d6d4ff5eda9f00f7888904f469125136418d9df74bf4885ec4fe3fa2067dcaff495f2d7403e4c141a791af675911c83e0932221c8f3c11d4e6a32219a08cab112245c9e254be2103930d45deb46ea57ad0b55187d30dada061b6620c17edf1fe3331dfe36e5fe095480db8cd4879d016e0ee11c72ec1f7d9039a4694662648a68bf3d08824032626434ad9318887372882c9f01f087462536b2e120cd6a205bb8c0a7634ed4de109161e34f6905a7b994d247ec6a98321eedc51ba28fff2213390ebfd05c78e9131bbf65a8006e78dba669da9cbf516da3f877d87e522cdbd3fec56a2f319b6f3f245205b2900052938e291482f5ebb9044fed25a872dc5fc030bb66aea660400b6a961879820ac68801158474200452b0220b168441c413a69005250801094cc41881114d9082142a80e2094c5461840c9d1f20da06889417a831504fb248d5800719576451051643908211e41750260128d8d8a8e0076330818b28086924448e40428a2a986872041154c10b223848420b6635529051851838b1b10410f0408a29545086135dfc68220b2dac00e3094dac00851a0b30f1012ca0e0e9811232e0620662c8608c2ca4480205183f3e40e4289ee0c5cd07aa68d2832d84602ba478c20e84c0051aec400b21449e50220b24c408c387c748162e5d6881021784e00a2fa4904d5890450e0a90dcd8a0200657482c80805a08698109a230012c891429d07902105ac8729cfc008b225154e104208c90808c2d989084236e207b880c514512989001c51780aee8238470410d9680021c2c01c6119a20a4881143f8811db9410a9460021031d47841055af881ec085e6042812fba2006162fc0828a279670faa84d4dc356d376628044d6b42f699aa669a9263118a2c60c6c15638709273b4c58114b6161a94e4a664b4aa0b070440d1630f181249646863b386030b13332dcc1b982099c297670a4d8c11142f60c777094e4cfbe0c32c0156370212604293c910225088159718088133be8810bbcf862091c94610510a71f9e10f818411683233c11e8e20a64b4000c1c18814426c167ad2ebc987db1c50eb8e0a902f544105c50a48a2ff0600949851078052260018a1ccc9e98028e5cd23ea0b6ffd4ff19761d7f00467b403f40dc7b98b84fcf5427cdea07e3670b40f54911f8c924a8cd93ec83944950f7f16fef1f11539b5a63bf1b3637daf3a963d8486d3e6063bf4f4907251d9474e05ba78d22ec117af8eea45f3ef410cb80487c106dce4517193a2b48c2465f6947a36d5acca34e1b759dfba9def9a13bb3743101c7d1a8fd3890fbcbbc5dff8139fceb759ff63ccfeb3ed0e52f390cdb135d983b73de048bcf9d903d66fadb1519a1d87db66d245f62ef812e4c59603f8fde7879d90af0c3f18d7ef943eff179afceeba1ce0628639ef9f3f216da038aa51c613fea3cd005a55c81fd646eeade82ddaf87cdb5d6bc3381ec992222f81ff2e9c3bfa5de31f3e2d521ecf7df9e0af6e81cfb6b4c419bde2d73635eda3305c16aafed681f648d29d8281d0924a593b51fa3e43d5bb248ac941921e614a24a628e28c1063cb6745289fe631c2e51127392b979cfffa43a1db11fa51c8f15ddddddddd8b6e7dda27667425dd59e9fda7377ef9fa55b03ea7233c20e124d322bc31d9b998c31c618a7bb43ff792dc0e5887768cf47c75028140abd9744a268ff0b8012cad1a72ffa8f7efd4a2f15edd8f830c398291585a4f737fdfaac4ccfff382658f6d4689098bb34b0f1a34c931b14b1228ab0c989b1b9c9df292be1c19422f63b9d3a9fe1e4d7d01fdd6b5224ea30e7c3339037fadffc5aa7684ed1f692d21bcf397ff654e883853b3635f9a33b4f1cc9fd3053a7b10b540cd88fe6239438f507ec47776c603b473451e7bc06d0de3b043f64a46209ef27244fed45550b695ae825a5b7975106005a8350f31ca0f6156a106a1ea57c52217ceda506658e2f291d02005ed83bc01e40b64118b16bfda57b001a62da28b0f33f2a24d25804f441e6d63a000170297c8e89300af6e34a27d57cee01345a60e7c7f971bee8e93db594b8868260639e5046f74c2fcda23843219ad0bc127af4e36f3778dea256e40a3b61ec845144cb5649617e7f8c0ae64882080048e30436f47e3f0e7616bd8dc2c62ce1fc7e1fee3bf8cb9737665bea19fbf4bba3a1379ad5307671fef713534d4299e612095320d91e56ae462e042b46d1585abdf0c77683c8108e7087e601b95d1d381de0bb18617b8041f4e14f26f283c88ffe8a8b885c54607b8041f907cff3e10f0873683478bdf047e83b7d42647f79bb1b74e4f97572a1a9699abf67f993d33af9db8d4836e0d3dddd5d76238a37d0d27d935a1194a8d06790cca70f776841288e9015e200a517898c9a9452871a243df0c83bfce0797b2f13f941bfc2ce00a1ff6211fa2240d2038ffc8367ed21cce1447213c9b2ab8148ee097f685f0ba17537a8644d019efda7775e358e5e241be8cddda936daf0063a072f612e4e9203631d980bb37cc14ab00ce71cb11f8bcce5ba328fe3ca8079903559c7c38e46c70e1ed72ad19effccb538edd17899d7b53649a0b89016ec0cd32a2577ffa162295d58978e8619b9356bef05a83ddf421097540ead673d0b079142b51e65f3f0874bfc0f5814ec270715cb81f52dfc30fb997ada493e3d09e7b03cb1fd2c3253cfe82bca4f16596d9982fd56b1d64eac9bc8f64912b73cb11f0a8682a18af44c6cc9faf502d4dae9d74b507bfe33b26ccda4cbcad7977ecdec5f5d385290cc295bd8d52ae6ac8bca1e0d6c9ce5185cf6bf158ccac91896456683834bd9c2ba1e763431efa3a58482edf7e17d5d2f71e008ea9691b9327cc34c98317262fdd2f1fe78d6af1def5f77dc1cafe3c2fca2a45f2fef8f653b2ecc3a6ee7be9d652ecc412a28aff2b542ced52d00951bb76655d80f552f075745ac6cdaf3550d74ad60cec247dac33aeda56c61bb87fda9d972d2afcfe4a526a6a1b3965f9008468820fbb778fa3523fbb77ebc05e433459cc705d9bf15d47a6244919e41b16931e1c9fe2dd9a69e7e7d2d990fccd4a45f2627fd722cb2b764fdfa503114ac5f1fce3980168a7cb7001c2e170e97eb619621e6e525e6e54506c7b864c001a32307eb0bf6c3a4bc8a9d8cd88f4596e333ad1925bdc07e3827e324f35dfff2f25ddf5f5db7c5d39ab5e72f02829ddff96bcd5cb733cee9173e827570927e7d2f98878dc7f10d700edc78600f519b7a581ec219130b0927a76861eb7fa8d82ae6deab98259257ffad62b688f6e6fd0f15c3c1b909fa45b67c91391a66f6849953060c2373bcbceb5a9bf6fc63ae4da23d7f1cd7deb4d79283d33a1cfa472bc5c6b2c8fa2577fa3567fd6a9e7e49262c3d2c3e2fefcfe2a45f303f60f46b0bfd8291efcf12d42fd7fbb33ce9977c4f498c956099ebe2d8c52f17cf8b8fb4b460fb63fe56b10fe7c450e33f54ac081d3568b931ce3162bfd62c7b6bd65ad254c5d2d32e9d5b2cb266f9f7c6b3fa542af52ed7daa8fcc8a0b2ff885f53b6b03b82fac5832305f9ccfce16f613ed37aff3aea7008fd7041bdcbc539cef26f5dace32c7f1880600ff9fe2947d8f81f5efdd79a5922ac4d29070e196074b85e645c7684e83635d979c71848b228292a25d5c8d29c9a8cf29ee6c01e3209f98bfe4054b9df867e4dfc6d3cb93d9af3d1d5fd2c0cd70779e37eee630315cbfef8deaf04cbfe7f3f8b93fd5bee57ba1fae41f6af713f95a08fc54946ddcfaeb0c87092ec6f5ac53e9be33ef95bc5a80a2928fba7b0c8b23f4a6be68324ad62d97f64eac9fe1dcec9ee3c1b104d82d66c3808e8b70148bfa4ade99796fd6d113ad9dfc6ec4ecf98fc6d12fd823b2bb0c9399fadc9d626277b0ef26775b2a72008f9b34ab2ff989aa43a3cb11e59bfbecd27e7d023fd9260d01caa247b133447c2d87442389195fc21099d2c9fc504abbdecda374890fd6211e8c3c3c6f97e83b457a3837cd4a75d2044b02903ccd75e2392fdebbc2903cc26666c0202ed495993bb5b408a8dfda00f0a48101db46e739cba21471c230d9ea2c1733f7d694fd620fbbdbc8c613f4a3598b3648a8dfd62ce676394715e6e0bdbc282f51f122889fd62124dc748ad4bc8f7d1d6bba58a96dcdfd95b6ea014053326360a22e454f2b474b2f6953ce5a81436fe108c0065e964ed2b79ca519133b1332228a7fad3c98bf16cc9aafe74f2987856f5a793c7c4b3257b043ba347f728aace514a356b3fc65d896c56741add667a0329ef4063aae8bf18110d854237bc7f7b626289e032d4831bdebf3d31b13b22119721de41f41de54223ad7eb456a94d4d8642a3d07f962624a2a1ab58ced23c59fb314abe08367e779ca222248556896502054ae49be1ce09823839b7a959dadf8b63232d5b46f8eaf931cae8ee3e3f4619e54945dfff343ba9a49c32d3b96d739bdbc499a1a52f3a6f5f923299461236da5c23b7c5f77bdaae4ade4fc6789a9d547e21f4b60d4328157052d1b87d8cb3250da8bfbc9edd5dbb71caeb79eb280a14763e69a4699aa6699aa65d2dd78ed3aecc75c469528e24a61c14d6bf9f34ea5e75e3b67e49cf3d8a3fca117f42e4a9a5ba2cc499f8d340b007ccfb3716600f1cef62647fee678cec334db9ce8e46a48f4f62e4381e178944b7a67084754793aa4252a8b0b4d2276c7fccc7ff60aaab73a90b338e1ba2d085f2282896e35e48bf52a9af7248cca91087e33a13a0cb1fe63a13e8f28fb91ba039859da73d8fce037bc0514ef99f142aacea69b4bbe45c46d931d7ad802effd4fd624e697352bac54dbba1ab4f3b1a15e542aa4f5dd1873a1a95880ba56a154511ed6852a8b01fa5f14e8386a8bba1b35139cec6abaee8b98ec646c771aad1a88b5ded6884dc2ff55d34c93f74567dea55f1391c17e6080098e3c3a45e487bf1b9142a6c07a1ab0b823d9ef42bf5f11bd6af968ff7a30d95ea6bec12d0913e76342b1c9fb41757ddd1ac306c8f447ad51d49e9a3f864a47a158e414286c01e51f5f163917ebd7cfc58d32f97777d5c3d5cd9e8ea7b47c3c22cd9d1b0bad5157d85714e1f45587b5ad47c04a18beb6884b85c1befba366c7ccbbfbcd8b0f13efae5c6ac7ab92def72efab52af5239a7929c4ae35493536d9c8a72aa10a71271aacaa9384ed571aad1e876ae7f5b1edffb37ae8d87e1b67c0cf7be776d7cbd5f9d6bb9118c08d472bda73dff7bbd497bfe366c4e6167d29e3b8cb27c0d7b3afd7b5e4c4c9804e997ca125c7aeeeeeeeeeebecdbee16d3bb6bd8c32ca805efc936b1d3f421cb20de0fdded88779f2bb818e5a6379b91c2b628c31c618a38c1e63943d4da04c6013728800e8f70af4c872298c1d80c00985319e942d6d69494c27854bffe99e7d825c434f7af27ba7ed4a2afcaf307bfd8a16f2c0265393371a62085d11deb6107e77970165b9c4c54e0ffd35746ef83725c8421984d0c6c0191fdfef4bbcdddd4bfeee3b4b00217396caec473d0b30201919a594524a29a58c91d65a2be5949a9432f290124a1f08f04ca0021f96524a2981b623aa74e8908777f49d9b1d97c56c5a8c0c6cafa118f6e3d1d03a129c80452929d6e129a54f3f520a25feb6d721f2cc9f1248bf628e30f28891af4313251a29c39d25a29035da1ef471e29435c9031d2c1c11b5086cf7fd4d7b2dc6130950a02b7eca7781dc2fd3bec50876cbb1d0155fc340bfb53e10d0331648553ac5ecfc4b14b58442a602729fdddd7d44946d2f1d638c0db54cb7eb6ddbb63d8d1ba5946e34c618231532990f7777195b43a52683be42861f55b0c79c1ea30d1de79cdea4934e3ae9f4d131b78c4c6e993ed934a1c729e5a894944af95aa81391389494146b4729a34f49714ff111f70580e33027718f5e56c8bde5b8aff2ba98404af9f59e4e9e48c48484a5888ea84639914824a2bf83c8bfd6eaa11013da852ca51faaff859efb1ae2e8c30c6147df47ab5c4c60e9875e247a4a453444a97785d542dd07dce38d1cdd5d6a21145a51feab3fbab05612ca253d0a8aa3383e59fb312187cd0afde4da8b34c817c10ffd2814aafe71d93b4dc690c899586a9dd042b4b671b093688ad3a9475039db2b5802a8c649e16f3e70b70842fa1b772d64f9d7eb5b7f961dcdd6ad617cd3af1f7400d29e4686854019f011f243bf9e7c9007c80ece8dcdbec475607df6c4a9fed52f4dcb64524767e2e0904a56c4a72959611ba7717e7ea24e50502c5961298ced529b5b3f9ecd26154e9ca47461e3734748ae3286ed185ffe46f7acc22e9d1e43793afd4b19639452ca28e5cbc4dcf8d30c008f98971bbfc9bc78af2aa96441250b34460e0436ba431ee08e3cd99094169e4aa2534955aaa792e54ad69edc638cd1a3bb7bd971bf0fd7eec783b70401edc1252478c33bd5940853a38f484ed9a20b412a5cb025153168201489385195928b24ae722a619074f4a056928db11b42203e56bacf169a9cb483b6942fec6729e5a8849d52bea05c4763bb92fd942d6c89742a45555743cc1625a5618425242a7c7823c2dadb59de53e18d0fc626fb9360603f2843407ba7be36b4470a6acf9dd8cfd640d84305025019f987fe98bbbbe1941bd7f6979fae9717578ccbf52273c46478e752beb01fce59c550261f552bba987a1cfa689e5618261e67e16f3984216805f3558dcfb47e65938bb87c4b3eebe18ffe2dc7676678d6e730c3b370104882b49ef541b8fc0c9b4e8e9f03eb67f8197010ad67e12d270631c3b33e7ecba5c50b3e034e057179d6bb3c0b6f38bef5b45c702a0797d6bb3cfcd1829d0e2dbcf548d48c6c6de80cd19428d8f89d3f9c13e3bd816dbdcb7b61bbed8db3fc61baa5c43bc815cc675a1f74e3c68d873e73a3bb5d0f73514ada932f1825c3a8587bb1f6504adaf329a59c181543c9daf3d87d17f6da3c330f0a25fa11896e9250e2c7ebba7f1f9f6985684d7b3638c76756b1cdc759f15bf7e4ac5847b352d29e942b8957329f59f9e15c0decb78ac10083acc9b5e35a5760fddb6c31ecd437ee3ed552867dfa1fce99e15dfea3b954fa192e3ed22c7f538fcfb0306cd6c905c3b62a9045c662824de9be35f996703a16256858703a961be8f2ef3a202c28948d871d0a157f946e62f80f151b9172bc849132c7f7c3e88099391e06fae8142d2ccc3864f898172524530f8acca374342f999ff793d9c163c7cb0b3b9a99f7d175a2a074343bbea274fc8c8e66c79452cefbbd8f4ed96286ebab6b85a37979d79cd3759a2d99524a1ea405644d6ebc83fc161395ca35e774dd8f070923e16418d6c93e85156c329c028c9eac23c329aa3045ee78728d81eb3b3fc589add6675cbe85adb3e01309d27a97d6d7d6a53aced2be755d5ebb0d68bd0b1ec243888e91181ad8cfd6e4189aa6472efcd1ad0122b9314dd29e43d8dd1165f47520cbd6853f2a0ca21c395e5e1cd50503030303f302f3e2ea9260e3bfb866732faed938441d4d7f8b498ea6bde248465a4ab4705a372d9b959295acf4b05bc5a40782727c0bc87e3867091b6d60fefb97ff4e9fcd3366b0c89ce53f031593f7939845e633f2e5c3e0ef5ff077726116d9878ae5c0dfa8a399df62d22f17fe1af3206b648b879313061f3d650a06eff4eb5bc560300d9d61309ce2a788ec8f75f00cf3f84c114de789ec8f7b70939e2942824df16345f6c74e7a46c229be7892fd710c66ae62fd8aad94f44b5a21fbaf76fa25abc02243c5dcf522bde9fae9c5c0bd34863e5ff87868d74b132bd96a66e26057830c52ca9face3bb73cc1cabd86ab6ea59cd564a56b2d59215cf4ac96a67255b2d59f1ac62386715d3f132dc0f87ccebf8524723f3293a76c878d1674c3dae9fdf78c79cd7e463ea717d67e9ba16d8c163879cf91ddf12be64be9fc2d7ebfb39f8d2c155148e551964f072c0e2cd80277a48ec8773be55acf538c7675adffdd79ab5b0870394cca36228196aa75f309ac456d8e1c09f0782328e9fb95c5f5f6e4c8e1c52ce725c1c933287ccf11e9cb9a8c4cc5765410c95a9110000005000d315002028100c078442c15898c4892cd60e14800e78944c72529fc9e35110c430658c31c41000080100000060608488280977f4208ed087defff3f45233ec8a0d938d204e5c09a38106cf831f78a844db45ca09d9f8ca3ad9889e55d0147dc5f328f286a2656aa3a711febb37f8bee9ba77407510725449bbca421b51d5c8ccfe09a1d2b8d8973cca9b9660210817b65f05219cd73a728a0ff284f35ab2e164063cb33bf8ad35b06a55a4a18ceeda0ebc52baa25d2b460ee0c3f596689641e7de45d6ed51ea1ec8840ad5e088a6fc5ba35254b8b271b129e00ce21d345361f97679333f592a1c6d50e53f95a93ff744907f65ff60f6bf670c715774d41e13c79fd4e9d36d294a85911a11e8e027411ab5148154646b4db79627738c435222cb90235b9a290f5cf6f5587814cae9a15a2ea8f4148e62df4645987ddaefbc4f2cfe5b36aa4b570f035a95253756a136fb368e3c4b298649dfac788e14c79667cf17c0eb58a7f885a228103962edfa266533c5e49b38e8f9b38af18ad317bd964ae9f4940357a473232156c326962d8f7db356f33690854142fa09716812468a0b6b9e86e182228099547c18149b268ec17e86aca3673917dac21b31a1bb61f17c12b99775a7a459b6f4d1082d99a61d011f4fe7a6642ba57d08e6b7e232c7339707838c2978749a51064b399df61b086bfc6c9cf0f122f3315e2bfb94567ffb0d3e74cd1f72d867e3a209697feb80572eca75413c55d0f8807dbed3e419eb8abe53919e728c478cc364e7f8960ffcaea250ea38cbea01e330707846e8d4c2383dcba53b05e2572d1f300fb96c74618f904da0e86fad42dae152c6035789e23980c0e4a301b82777ed91f6999fa91b511f6ffe22897bf54d65afa72407a0d429f175e73dc272f7cb6b943d000a27be993039ca415acd5c03c2ef5729fff4a28a9573377961550adc81ec689df5325e6b3daa13d824cc1e3e4222eada3a89871e95f44045350421c860dc1b676a007e5d98c2d33366c8e36f5450fba9589e55fc36b41c10303ff8000438d1801a156cd0bb45edf113e2588d14671abd3aa3c07e57e5cf935d64b32d29e2b93c4a1b9741535fa953822ff73e9c49ff6af1cb6510b2642eecb071345c74614d3277fb1acea71a851e74faf0e6f3ef41dbd5ecddc629fa81fed19ac1e96d9d6ab23ee40637803b88804624359991f48d3f89a00370e9744ef72dcb758b85c1e0051098a7834542cc4663531290fbc1c6cb5287f3d4da3d356dbc2d0c29657306ebfd3818f951585c0bf82d53a80c5b0a26c0f1fbd9dd251be64dee5843bb42ecb8dc6f28814937ce7b5b173d242e01d659179b1dad803e3fd12a9412fd62225b40007083d5d5f6fb109b33a3d02ea58b38c1da6e826e55abc761ec8f7f4d512a0530517ffd8474fdc7f402821a30b35352222b1cb0ca47b500c668411b0e037dc74eec771b1ef99006488fee8f95932a1a177fe820938f1880061bf546bbc2cae61a060939c91d58e8f1c32db79ae0b2c7e03b7f0fdc2bafcd216d9e118ad31ccb39aa0a03d298062528ef095d078659e38da8893b7325ead131f0858777ac3e5cedb767ec593eb0fe372c090356d5be6bf9bb422fa91e4bf5aeaf024765c0471cbfdb081a148c5d68bc89ecdc6feb417b468bf24c84dd8cf7ab6c4414ce6e94759484d9cd36278979d19bf986e5f193bf2a582e63e0d414f00ff8c31c0d33c7a8f4b08391964da3a9bbf1b42c49dc6a519b040054ac1ea4426f8dc288283bc2571a2eeb76d4159b668194856083cab2dd0ed3b6d1d8ed9d67460acc90cdf84660f9deaa4dafffa856782fbdf24cfbe93792960423de1001c755e39f6bd0f65b3ac36933165905ed4dfa4d38b67b17eb26ec962c727115986757583e4eb57deae395fbcc43844cfa5ac0502bf65ad0bd0806d85c09b1c318f711e6fb657eaf41de16e8e1ae7293c08ab4db456386933a5ed1dd98d9731369119858bccda8c90ca13b55424fb8a5d3c9359b638c753e2352680d304a645172a4ae3af5829f3840b20017a891a541dd4d8c9538c607a4a52bb2cd7fcf7f4ea28a9830f6b366b24c751f9d0c7574709a2d39704efb2d2e5e74a0aedbb69ee8fe89e65f17510999a693d5e240078bd479157cffe0258fdc8378f3a79b09e681f97b908ff6bf1986538bd8ab251784339b127e9ae158f270dacc719cf20539a2e6158130e2eb7ec8a751dafc1f24b78002261a086f59cfcadf8ebb1b6a0dabcc5f064bf339b2b7cd060d0a5e812bb6c34d86c6e44a9304f215a4bb16ea264f4cee1a8769f4a06076d257f9c1e702ed15bfa2370600211e0b6427a76b762d61652a49da1d4682e0e333f48c3f123df575f98c308a33895326c9b219053d93648ff45220cd77a4905cd7e74d8d121960ade148a3f7d758c30830e14e8325d91aac11890fa156c0bc3026391f49da43e9b8f183a10406c3e082db835061a8c06da2f135a5e047cf8067e6b84192c810a6d59af3ad2e5bacdd337a1fa0cb87297ed40edbf784c7e03baa4822f2fbc2e2a61969a1dde7e35eca1cb83bdc2f533524e4ce5736e053601c2dd0757a2e10a5a023fa2732543e53a927696d5c98860c55039d0c18d353a1e1183d73e3722adcf394f7b712a092b179484c5ba15b41f3e3bdeac3819ec444eed56ce4b1a08faeccab8d06894792fc9160d40014fb0fe501c342c8f43b9540e55ec83ca6c4152af1c6b1f1c87132c891ed3707a63a52f14645647203a3c4dfe7068e2c55a2e593355329cd82d07b95145bf6d97e31e9e24c3a57afbaff6b31c42170b60c88b4fadcc4b1ece9022b121b0efd410a1b7828bb41aa6af992bca2da43a7ab4f2bc33865b00341ba982e3bba268572bb1cd20997a137e28c3ce1e34956e637b13098be2d30c90d666130cd7a1ae53d0852d7887ae2b681045992a0d78e60af5010e20944e70d9cd91ac86c5f11607c91f853e1c4554b9431c12491888830089ffd7e30c26d7be232f25db4e799dca9ca233e1df4cac2d4eb4d76ea2c455bc482d102e42044516a19fb4713999059d8c52f48cb3af3ab2e52354578e2cb0c48b6ab2408a4d8c5d4477d67dfd41fc3324bcf8987761c48d64ef8f17a5bc870f1161588367598aa53f97c3982a9bba2121e00dd88351b2eb32c0fde541ff3a844ed1e98e7692d3e5ee95a67ecd740488ce0aa0ed6cb85d344e86762647cac26c8aa7df4f574ad42d325560782cf422bd6d42fc8bf84de3d41e6b183347789ee4005f4d8206fcbfa4a327c862e69fa4c9d962fe69532c20e16800170ef02602e69eb142c712629053044eb6e26e1606cf2692c593acf84fe4a883cf05c70a7c4e2ca2926df6ccf3dbe1d3bc8f548a19b8b762c88f903f14d1fd68675d2253432a98a64c8f5fd5c629501ea11283d3b2cd60481d5f98f9bde543642df4501ac28109d9a4fbf53d9e35affef452d1d3299b70dd694e62c3d4033e0ecf27ab6f1651a96b08ea6c0224cfb8ba221fc5f2b6b235ae1659c5ed6e9dfe1d7129af2061dd16e0cca7b76accc5e96561bd15087e54eb365075a8ea3e1e9b783307f03e7cf4edb90f93aa165816de945913b4e414bf48bf6a9cb32b23a7dd778d49696d9835da6201c4a36acdc2c0bda67b80a7edd7167bf864ceba4240750b1d4c82bbc821d5116663558bdb98d837029341c60b131c77c0637ce8a331a24179acf6784850d3a602a3fe44477c65fed4c153abc703ee08264636e7e51321af8cb5167861cfe36166135604555d9f91f7cb2aa377ad0ccefe41b6eb62a5d3afc637b9f16971682b75836b700c198a94d0894b2945a67f3df8d4a8327bb23520965466e4d197b008c167142b4609d67d160809d48350036026660af675c302d8c10e5534cd18bd097dc0fb87d97e822d3df9c340ecd8ddfed11c18a53bb8e1a3b1f10483043689be00a880af5a0f04137f5b1456194a223b0fed39ec7d3cf1b4264bbf4839ded3eed51abd6c69a6227acfeac4ec569ac728e84dd3c94aa64c624697e55007269d7e88f07f7ba587815f241adcf8903b096ae62aa0ef459d879884a42b2a09a0c68997bb51606587b526528cc5a6215bb8cd47216786a1f4ee5e390b4175a806da9e0039ceeb8ebab53cb2d184eb73f2e93c725f82584bfc446d2f23a6059594909568515091cd73f185bc9338ca1b46a21d6b79ddd9b19605020815e624c093120c224c808982ca965dc91caf10165184341548701b6772768107aa4a039ee859d77cdae38825a1c9d7b92d18d6e393fb321b7aa5a53bbc27d0c90e556b1290f023f0a9a3a4b6651c648742a8b1ebb522d7598662025fd2cd9dd096a74fd201a1ce2d3527379e50763b876068dbddfc65aa5df11dc18b550db46fae66f83b20571d0338ae718a2003550e7332304ceaefe7d88b7814bd49400b1181b7fc03cbafa58bb7f8815c8018af6628931ccb336e490a10f65cfc7ac40a6e02062d71e2d7b375b9ccdbe5aef1b3c7c66aaff8481f6f4f8385c9ae294660b8e57464a3a1b1075bc2908e10de18a8c832f4adb0758cd76ab38783c1f726392ae8cabd0d954eb5f488a149c97369baa41215bdc7cdb4e3bc415d051b9f4bb0b7699a9d0ad83a2321e71d43872a83e90af22bfc0dc2bc20619326839635459899a579ed88750fd63252779e3872f252362a64c66f3b422ef31e17b60a5baf957ef68b2ad8eea644b259e457f868da714d0d29c078ca7253165fffcb2ac4c77a12fc59e4a423ad4c559a4559cb94942ecb413ccfaf116408c15e22a10401297040a90a8848fcb99567feb7480324808fb68f5750f26aa69348a6bf2969163c915c6dc91c478aa476bd235bb381eb915c1ac87dca73819b3dc700d57b53e4b378c518e16689f37fa4cc544f933156e66fdea539043c82419e6f1d7b8c9b15dd1ff6c2cd3ef285db5e604cbcf1df214654e10cb0671a0cf3b0dd8dcc05d5f0fae954055ef64a66a7f1fac4f6c632f3ecf855a323773f521acafbea4c3d81f5b97065f142d08d91a62028802c0400a4c2cacd3709d3f6bdc35fd35df89f0b5e40da1ccc7717ef58180ed0b784b442d20ca5ca0b7b6ebf5fc72b6552ff6c1289d22f0dec723281d40a8b499acdc007c3278069ac16c714ae2672120f4ce0aca106361a151a08438430205a25cc0d9a53496facae733e6f1127bbf9616d3250fb7956e0a0bafb2a75e3551f89fc68dbfffcc7386bd41937ecec64d610bad010c6f5c214fc50fd222df40d4b4171657f5e80d2ab42a141f5271624308e2dd1c789988668ce05c08020d0b32452cd1013a0c1a46b544f086290cc6ba99d9555b654bdae5b050c9895ebb36ae961f911fa7ea249bed8285ecc54ce804fb0249bebc67b72c42eb57fae78a16996189157fb0ea4005366ebc945e74eab9e1a5b04d65b1edd3a5829a5c7fde5399a558f15f63844e4dc6d7c0401edca9e791a3759d03af000204f157f8b2858f4661fdda52512f7f0a737dcea97eb35c23e5cbf8a56f4a08a9ca09b67ff61fea0dd1fc1d646b4bc657776b94d997e6160851fbdae91affecd8fe569f611f1e64b85602fb3191a38d86ba8f31cf72966fc81f3a0454142efadc49b6270863c9ef401aae6af915a800ec8cc2ee4d9215fac884361f1401db44f203740c5b78cdc22c0c49dd247b175637c3e6476a96d20e5b142103c371beea63bfbb11974b3328430292079018f510f48e7754172d773c5159ed6e8397571f76a7002dc2d049024ee4fac58c7e3c98806e718237f73390ed47fc9387cea3c9e442c5681e81fd8fa1377f40bd65c608d61834004112798b0366b405d7d24ab6b2cc686e7e821325b430659fd383974bb48c661bcfff30f85779145c7aa58ee857e24ee03d73fe22f3c0b0f631dd16bbcd187f81318d970ca4fed59b7fe6042127cb517109024ad8c560f887068d2b331641b0a58f51e573cebdd3248372b30f155c9a205d80b73587010473170fbab2c5cd1513ab62f1842e7adf6759743b605a7d7652bb51c42b528cc969d6b88d3d7967c29a7f2ffbe1d3c283ea96400b0bbcc04b241950f41fa2b3c644662fa070f50212ff4af7657d56a24170aa6da430950a2f257d57f4ab6228db31ca41e403944a57b7426cefa05a8cc29f2f2a8c9f2e0f25428643b65a5f5625bf8e29e31f9093b72887b51acfa9aab22be47d0451594469d19671d0808b17b5408348f5cdf463b2fc489ca84c2070c109581a06ef32cd5c4e6389447045a6175e0ec918f83de2c72fb4d135f9e0ea8c8982a86ff848eb252671f00553aca07c4aa93ced47cdb1f22f1f6307d4ebcbfe49155d426bc97c5f48f184cc4a63d16c42d7cff96d21fb86ebcebe7b99c0fab3baa9748c908709714506109468d6cb9687b3ae5d61357e8854cd51038930f90353de5083f86a5bc633237fad83506040431a343372a889a24564209c1009fd74097c0e3ce6e95ede71921177081a0d5c5298271e9d8a0bb2424113b3909b143b69b286771d8cbe6847cca62497e1be551326c6a4ab41d2c82eaa7fef253bb06a5c54e26fbc62cf011ad0da84b7e3a7c1264c0883ee0ccbef81ddc70845b6c3ffd6e52360016da0ef7839eedb8b656704be66f57a61be5be53539bf9a22e1cdbf6334ffdea73ba444e5de7c4fc75d7918786e360a810250d14a8f8ec22cd8e2c2e366b3bf68139cc0abd036e901bc27f904f683122b0db56b181e656b919c115996f0fc4279b1823100f0a6bf3fefa32f7c387d4ce85611b93facaf8b1db5751dd90cf37361ee99f81bc8eac94df71181ff429fe669a61d821c854be10c676920869242900965c0c034c740218b2d5c4a1629011fdef1160f37cdd19757834345b2abce1f101cd2e3b400b7d9a27cca53e37df2d249fdc12eeb14679d5bc7bdc509181e5a5973168cebd176dc99f2d98adc30400ffa7169c36db3861e1030eb221757cfe79381397b9ac5dcc4c4439a92c39110e886c8cdcf124b2783ffbbc57880d8ff4124e7137454b873ff3608d021a5e1fe871c6499d7866f86f1c5d2acb8cc005ac7de668fe909e366c074aff4af7a4f716834ab21976ed319a0ecfbb7920f9d6d2d55acb151980187757d92be51741b3350207736d09a132f3b9b5c4ef7497284c3674961676e3dd7d4ab0d34b6a3e52c2fc173041a5d67b4a84ca9f56cd60dd2481cd0ba5f70560cea5251e4b58b002b452792b6471ed8730c6876d7ca0f2324e7bdd6f4de4032fd1a2c08221c5c728558d4b3d65bd1068747eb61621424a683920050021ac6af7123f7f732c5bd57fc7573330e86b8d7e8ac0bd4af39da813b3173b8451e01acaa4cc8f11cfe34d0fb9ded8f765d8a53f427912b78a2cce481f29136f46a4b24d3818787441bb6bb44170e4f89451bf495a9a9394c8d4a452dd10e3a65dbdc719307940d1038e569728cb20ca059f54a482326e6ee618da96b35ab9081dbf85002a26c78bf23ab5c8307174fc28f534427117aadf6da94f19f999c1871917c961530b8ca0b6be98ac0ef98a97f18601f8c214b06d7e09504b9c9830499dd817b5e15a4cc9f8cdf1b6dad1ef1f8fc3a78115972c9d6c14063d24c61753d8f7914c8e040b2e49da8d9f30c0738cfffab0f5c1bff8a28f3aa06f69f6aad77e9d92d99f722198db27956b556dc6d1179d6873676c8b6ee3cdb18a50bd32b3cf72cf8487f03dea63430a7dd83f3674408111363253601612a44c03359598568e816833c6be852d60ce889ba5608cad0bb2ac3ad605b76db6c3859ee68f4307f4f2abe136e7e901a0835c54a7a7fa719d67b0ad8518bd39890b3f8e7d496f582ced83266c4981833ed18ab61020d1805b4faf1f24aa502cbaadbd64962e6589b354982bbad779b534dd6c30d1e35f2169c752ca8f746cda126bef8b295e95981007af95d500b07df7ae582bdb433b515da9fa40685b3cf578e44e1a2e42c76dc2ee6d97a10926bd4e0f9c67315a3f4ca55fd66789b77c6515f123f22c6ba1578ede6181a9343d5aa444114cc99dd6fed792685a02d30acc58251f4986ba89c48a56313109d6b2fc51b0a05e335d01254f64d0f3efcb6584fdc47436054c1fc9b6c936883778c17138347a49aa9662233d83a3975de123d5f6f100e55acc9092e73f718db004e8f3cb595cbbea1154a60f025261f43b655398fcb45de536ba0dbbd0fae690045c8dd09f612f37b573c8a5d40971a8e3522143ca3ef398ab182b76987a1ba68bcab217e465319ba537b4a366455d2d3d758acebccc32e2e88a13b16bd9b6b98c4df7f974088db8e26a42158638e3899b7ce0ea32a6bd61c485bec14d95432722e3e7d51fb366b831569bc1ef74e4a478b1848cddcd766e890353cac6f5a51a75ea2ec8e6e8782e0951f3004ca61a10e92a3af2e6c60fd48ca94bfe920a0ae418b246242c43d0d30c021113154d22941ac26cde428aca70806049622e266b29e1a5775ac3bb5f5bf1881ca22b8573a2adb5505c0ae77a8d6aad8dd06ef89370f195c309dd15b0efc25e954a36e1c08114cf815606af2b7df1a0b7ffc6cc4b3e5984c621c98e30db75caaa68e2afce49c592e85b6e99f275ca285f429c61f26dfc8ef4b511a6320983de069365a12122639f921cb6fc16ddfc2d29dfb088774522dee9a30772bac40fad703487febc44cc9cf0bf6e9c8150ed7efa20d59a3e3d7d768ac1f9b4e81c33e09c346e867edff951ec5523bb04581e2eb53b28899d2c85780928c35416bbc006e61daed26b09739e6a0971d367d8c6d685095f887a2e49c9391a6cc897982686d2d0f747a6b6083f1e99a4605d141dd15ba60471417e2622cf1194f7f8a048841baeb9bbb8b0812924b83be1c01c75f5798041b289b720a3e637c741f0253374c4f8cf55d5d4fe9a5f9b00c792f1d8ff1f731d3981beb4c5d3c8d9bee6299e6e21e84ecc4093a542295e420077c3e20b335a5d69ad3e65c1872ba7589736da675d1c022ab970ac52090bb11ac23c228ddcf6065c79df10038a6c110050dfd5075cb711a76b2b8a3367a228b03205c2ccc04a6379919964d72b21d99f2bf490164a57c15774646cee6f2b3d380fb976d3d484a0f1bca92ad70eb41f45fc2ccb0c3dafbd7e7a1ff7acc7ffdd05aaa83d179f4c16100c8f039d38ed57bb54a391d23ed87719afd3d10f1c272356c76299e9c03b81c261ac356975908ab2aae09fa52906fcaed1b2ae1958de95315d8e926d7f54d71ee3a66eb2301ed5d67e36e59e773e5ca0287395c279c267d9e677afb8b513bfa12af97f4510f049d03022316a73f854389b4fa081b704a1c25099a29b8dc51ef1314f908a9a2aa2f3da0e78981fcfa75e5b69baf55754d21e3e8c617b0684438321d40b30f7a60db891306f8272ad53996ca862c08aeb038f484549d7ed701bc31c8fb6a16b1d84eeccb9e860c3d8b7f3e418d0a45de371900a977dc29569e36fc833667f36cb255834601e0c32f682657331c0d850dd111f23380017a9067d62009ea0aa86159d01adc43e587963e1e632392a162f03093c41e9ad25ce8ad91d6df0e3a984b1ea4fbdabafde72283a8c07db082725f92bf9b035f02d354e591fde755860cc3cab8af2f1a2461655a4952039c4a0d8ed1a315b1dbf92c81e1265b8f2a3d689f7c6993017e9e7ca236e000c8313be1dc02f84878ab4d70674b2bee010b46d86026ff8894fb98b81a591ad0c1ae8e3ad4d048390952ac497a3d9084d33d66853635ee2b983e738f6b945f80e60c4ddf17c37c0fa62e618220295750a0d761a8cb741f311eb6a4845d4ffbf5bac02ab4131f18ff3073e92bd4e04849accac8ce53d21c56e6a8fd3c0ca337edece80379bc69ecbf7f211fc5baee7f34b8955b95c23f533ed31c291fe68593a007ad63f3fa0e4afa9c0d4f60ab0568ff5cfc9c4ae5fd394a0cb9ac820de6d5403de964b7fac4ddc6dc98635e0078fbc95b92b1b29446f22586e45958128a923823be08439934d7d671df7acf8303c277014013aa249e6d323d39f494623a3e7a8d383257ad07a11427e3538f133bdef5d565e2132bb1acea469b3eb97a70907e51bd100a7cd4e820f4cd45d07f7cde778ed2ace82d2021278678901e9112918c974787b2bafc4edf7ffa418cccaad64ba5de53ba957a0844e8c82fb5d038909710af309f52e3367bd688cd810a484c408c644bb55bd5f8c8ebe54177452941207dbec979a269d8c6be9392cc1b946a0e298768430b64f1593718738d27c053866e98ae1c52e611683616baf54d209ced09f34d37aa162ddf9806bf023df7f99d90722d523cf3125db254e0e0f420302bdfe05839f52e1c7ce02804e138c29e8ff43401e37cfbf1e61e4d8b98acab279188c51ad7104ccc97ceba57b9b67e3e014f69caee0b44248667b8ba87681e05de8f86869b984bd907683e681b0a79260e980c2006d217d0f029bd74fb006503bd8840e9dd08227f3f10582f4df05a61a3d3a7e6482e6938f6816066ab7378475d01682e3ee3940efdd57c22230d9c0b7b24b140952b3b0d85bd001907b1321f88b8cd3f6dac159f20666d50f7b2d6241048ba5eb796ff7e8c20464d1ebc8910aec2ab6ff180a3f47f323763c10838091b4726fdb47c9e17913ea19dd38050cf2d53a3171bf2e4567a3d47b2ef40cb6e784ce47f03d9734b095b063c94dc90c5b282651634b5de0b8320f74b508ad47fbb4fd4f30ccc3189b1f97e49ef0e4b25e17fd640684418f42d4b307127ef6673469fa5f17c588786bd6a2b484cb56568e401f2487530fa013ec9b5c2dee5e6e91d03d0c96641d07bcb83a52951f728346ad92059ea0f2f22441b01958f1963e964564ac34cff60ccc10639ec5f09a75f8426d46e92f1da35ada608927b970e89e8804dfa7ca71a01f56a75972d4d8e12a7c078ae06ba2d884080abb1ba1f8c3060b11cb396436b40ded7938d58e206ff703861441229b5ee0f63f91e2566499fbd4945b42db9257ae15a1f26e7840f723452a7c282db8218ffb4d5dc4a886698b09cd036470e549b0f9b0d2740b25d4865933859d55b809e61e38dc50b879315b4c20e284e6ed6fe85696a3d8d36490bcea300d18d2fc512102b6c4633d475162bcc0ca3f08088814a02ccd709b80504c55b234d86843535c6eb9e2ee3bd09a203b22c531ac705e2d97890815cf736fe5a3dd85cd83264652aac2e409a03626d08765332a1a5bf0484e8e2faf1b8c7d1077359ff176783d96ca1552447770e9fe90a24911bf11a588099dc12de1a5bb20a505a97f1da180329cd9c5a94c09c6718c142747015a28d5ed8e8c9f81100fd7e35d18f36951fc082503c22a7135d3082b9ef78bb116cee1333b46acff0c4282955e0fcca4df3383086d0f6ac8fbd4395737ab098c81b64772824010c85c48793179808e8273a1767c3564c1ee3c7b4c56798dc18f2a0855fc0ce14310c01613f7685025697ea3af965c9816687e7c4a47c6602c64f94f1e94d2ac1601ed1c9b2f2728bb0bee7d7524f0c7bb3d109fe5693f8eb4bf87a0344dfd2c1974de750842aa1e3302d81979c9dfa2c368803bfc3edb6bab1c03ab2c8aaf99a49833acd66e7aa1bf41047766642c33d1f9a275b3621f71ce54684c31553cf2d85a49e7a5be4e21e4c57c865ea06171f7af5569e49a443d3732b373dd059453a2e4ac4f89e2ce70e0a8fce6ea364631dce49e36081c12d9e7ec734128cb998290eb3f99a3e45bf2f50c24761165efd6ef626b711fb5b0ce9970a30702699a0dd958b580c04d6b160f18283e3da55440a16a96e8e5773c548dcf1a23f532ad047908f4ec0e402a64bffc7399b7f8bef837cc2e5fc8144b4dbdfc1e2b99ae71dd685044d3669632f8cb9631a135a5a6e0dde8d23c5e7b04f354649c75fe13871c3ca68772b7d82545a7e41bf871b90b58d09ba447e1e91289d12a091b78da51254aaaa8b6490eb07112481e298014e55f608f53af5a7261965a7411652f43c4a60d83219da3a96c83ecfc57467e90516b9f4cb5b975a2b873462cf0beac9db049b27ea5f97ff1c310807b41a2e4812541eeb22b3888c3e0efe6c8322ff20b1dc873e8568776316af64709ff2932d674267101900a6dd18e6745f9a28a8c78894d6ae773974325eb5460bdcf14ceef9a895bc4c63f229e7f6d08a19203089bbabbcbae064620c901968f18381cab61de8b3b58352aada71496b1607ae8bd6d20ade681c500e8dd3b44c302fbd8b80bfdf3cf53aa3e366a373c106ffeff11fbda40e292d7e83dc1e556292747078dcb5abb1df9a5eff073a46c0750f158232265c5810e291b36db583a1ea19fa571614c98fd440c51ad71297e1445e2df4d92cab81a76955baff4fe52ec48132a35ae015a3c8e3018cff3a2c415a6e279110811783cb1f78cbbdc47e57612bb2dabe08e576eaa881b6df53e26d33c10423c71064b28b9cb40066b1c01b3219c80cc52d4cb0bf935d49506c958acdb4340ed16dbf32f72b44a91610c892c92c3f3e5aeb0d9c73fcb41cb5e1a6362b32dd5f60bad114b4aec175073b409f6d3af95df298875292163935e217f74873986f5209988a93390847c473f119382232d7c5f55a18253381bd81f7268e58285359524eb060d53eb8675fff4ad166f65ebb8c11f17f1417f625787edd2a0ecbbe19c340b14b489c19921772c9100d5f84415e7ccfa4332fb063b4c289dc4a003307a777aac99553fa4aadfe922ef12afb0db40cce384dac0eafc7f15d44ad53af059bf8151be9ca0525340f6bffe6719937eb431769ee50f03a04deb252344e62b4a6e455954933a26d90660c1daf0fff7a3ac1dc54456b267c93d9b8ca0f7787ca48c7290d22fd551a08d9ccc15305e5d574f5fdf79f97a88295fb33ea801b9c2d84e803a1382f931aca726558786fbb6e5d6508738fccace67ae975e5a87f5f9590fc705e86f4b7cf118bed5e4c6d8e66b071477d622fd59e1d0361ecbe0d455603e7150e6c9d5b84be34664d14a467b25881639eb589de308d15a1fd04f07649df9eeb0fe0ed0e2819843875ab35f20da7d32207b30ee98fe86e193075f0e8c7bc3c60bd45fdd90f913a7aeddc4c05fd15ad74ec00ab67fd3230d2ba06e97db582b5fc9b62c81d76500c3f876bbb3089ec1a199292d4f8f6293c8f82f2cc38e1fda456f98c3dafbe2c9962d6f4d583aa755184d700aaf630de1711c25fe20cfa2950ccf608f0cb45ababee4b40c80dc10a96748d7790346a70d033802258b8c99f8902c0f350b4c7259017ad1cbec8ef24cc8289dd115529626b1cd8dad83cf6c30dbfa7b1026edd780a8e6717d81a3c29d45109eeed782034bd613a851d225b0cc172dbeca27b8a8767b76cd17be0c8be841af787df2da9ef5eb6258b6d5a599cb95d9a9a06afff7063f96708e52c36e582116202c7f1d9f6c4f6b1c2b15ac11c3ed7edbcb66034e5d4b242b60d5cebebebc3157657785f0fb8c2f8874fad89408732e8351388f1cecc54240bbd50ec40337c4f90ba2401b9cd0c8272504c9dacaa23cad09b024013d470829234d06bd68bc9155fba83eb7b58f774dfe81c7ecd4f471147c0819d04a4636fca507ee0d47d710c12335a0f424672198ffd4ea892839b4d71c817e4f6b8a497e2a5cf5f18f64d9a1899802ae8f1ba94bef1600f63a8194908a7c8c3501d92fc3c1c259e95fd6e638c92b689122d856e58e9fb762c0fd18839b91fd617be3e2ebbeecddc617931a9e1aa9ffc12430e2d1ec5d3080806218fb6feb49fe3e5fece9042b326050b6ede777e6a2f3df561c259bfb94905d3c1d48707339a37efc897973953ae62c843e9577ea78227ba527fd1445cf5f6d1984e98e32483166779d329e8d38797924d06fea19a460359f72c89cee9956d5842a98070ef19228ea8e18fed4814000457c68da5e4f493c306b1f3c3744357df9b31ca49e34395e7eb5c6ae0583a702442176bc968e40f5008e837dcf39ea25a16da1a99f4d5a1d3222c857419f2dea37bf9bd96d1cf46619a3eee271b681db37b2c1f7dac888e7fc057e22cc088f886c67650fd438047d37f11a394a655afb528935ebf64aa46a85273721fff922266953aeb82bb73f65524355e8bff2eb4948d37f1a40e44563e03e3cc795f655c99a2f47f4d44828520003a33909a5111806e7108963a9226450f5e200b5a1c120505e35f38e822e63b244dee87f8f8a21ea1e4e7c63a6702e30a44c4818a3e076fb2c10e14663f40f9d4e39625f5d64f8437713a53d18d7f35b7543360776161c9b497157cc7c397897a5dc2ab7e2420975c893b22bbe07008884809be4a762eb13be045f4129e323b71d77a180e6e91129ee5d6f89c0cbfb9b5f49c0c1fb7a69fb18b97da7b5042e5272881c107dce81bbc60e12bfc4163d9c5f1823b89a3eee1cd5a4bd4e48d3753e3168185b812e1ebb71807eec822b013274a2106f4a7dc98542b7a7e562c32ae06de5748e892608f8f888c9afcd3eeebe6110f327f444fdb37e74effdc5dc637756df8c830b66b950ae4808a383bee8928632bd0fc4912fff30bb614c64b79831e265c49e8d0ecdf9912b525bb7dc28ed74b48942191b62e096c4d8628d3e8f094737e3046f05269d599b21dc55165d56032584db6d59a295999ca8eee8b191eb70d913641c706b3ff7a0940d0258a93c0984790770b330cd8aaaf158058258a5eb0f97d6dcd7e46f62f38ea21f0555c40b8a292d6fcb3591e501bb32d8778048ef50dcb3ad6c457ca9ecead8450d175432b111d3dca88d996094d878702ee6104281a0a84c8bd7df06fd1c69fec467001a0a752fccffb0ed82d1f8b57a281f67818df6bbf4178ef4c6875cd6513a1246a91f7afbcdf0550b21928d356c9600ab86c124791cb2921025ed53a6764563934cf9418a45c7b0e08c3f88fa605536c333256f07c48f49b4da45c175809cad650a2658746f930d715b6ff1f46e4970157fe8fcba5e45aba70520ed341fafa12d00f196589bc9fe1222e2620df0343a0c8be77485bd4067a47bc168ac4f5fe3ee0d06f3c88184494344e8424f1765cc416c29ada7f8851622c1992c48e515138081566fb21c4c9b14504829e5289508dbb073266c47230f2b10843a59f0590a44cd7793e47d25ace16768366b6e3c3ebfa030893d3992f2183344e3bf1a0f4ef8eb9edccfa6f148304430f693b8a313f78b89ad807d98e4d48b653af0c29f8224b991748061ea3c7c6442e41f1af82305f2e37f061cd973b8dda4b22a6517fae1f71c50f21869f11bb82bbdb913a9dc135d310202ef51d93758a9a3c1028fa3f1073969c47e3ea095e2e061437dc393e2a4ef228db1fa1baf29c70884d2e739d9f5247e234e1ed5a013bf6e48f2fc7bb58c95c0d6e52f3798bf16f3943d4d3f0d8799cf95bcd79dc94f01bcb6ec8b6d97d70f4503b7b41ac2124b1b4531f280fe43ab6b06061add8395d91f700d3597d0593bbd8b37f3aae5ed721f5dc9daa21de5b1be4dde0b60db23121ffc7ecb6579ac93a49d9fe8f8cc1743dcf2e29f6869a097ec8927adb518bdf9ec39d9b56704db8f61c90ce410737449198b6ee721c8b18521f32bd233520e984f4b017d83a311ab48640109254c4381e118774bed83986baeadec0c9b9310777adc6f9bd2db6dc5c165dfe261b4d004f226dafc81683690e3f5d64b6c891f09424e352d94e72012a6eeafda417bbec47b52bd4a3f19a69a34e98e9be97ab010220130349b093f9d70544c2a9fac0537ee5fc463329d3ca34920520118aa60c179572ee1b1afcfad97410d55fa3c39becb33c4ab0cd6763ac4cecf4ccfd14216a813b88c778ea5280bd123220f3338c324a07dc727e3ea509a66fceebd7e5830132267c4eb9c54cb6ec54bc4e0b030658ed653b845e41c688b61506797dc3a0398996ce8885c09bbfdf33d5faa0d30ccc97773b8f2c77d678739c3884f1ebe6beaee0e4e2c8a25ce984fa19f90c21345823c67bd5572fedfba52af8b0ef40afb2e50fe734ba5e092046ec6abd29bfe2b673823f28ea41751db148dfe2ade5e4f605d1b9f6fb6e81a1d2278b4bac4fa015ba38f1e47b66f420a83463110ce854582f8d798371a2aa7d4906c84954b84d9924c1f4f61c483869cbeb7293e8d2b1a35af85db98e9bdfd9601dd52eb3c5728798be2d1229fc397fb91b87910d488cf2d59f53aecd9f9993bdaf648ee2f6d2223140a4ad62bafac63007ad6d3645a03bde274a0148d668fecc157c8afe7e8392e2fc99138eac745a91982431f2793005cacaaf3e1713f95a8a6adc70832e1989c8a7d492100832c42d005959bcf1b1e673ac34f9196d04c7b9bcc09dfa9c58a37b9f5985548fd8473eda08901fec102cef956ef44cb4348617dd32ef75049f1760e942e2ff0875a1ee8b7fa8948dd280c32047f4d625a76874a460da5cf25629c4170fe1baa49d7e246c985ae05dfe8ce48f8921d894ccd204176a2fbce9e291645c80d75de3d41c7cd359c36792fbb5ae5a98bac85372180aaf40786950007866d55fc025c04d27840cd94e99bc3dcf8b044c094089d7459a2be07940c33bdc8a4066095d80146bdf01cf74232c2dab8a978277d5510c6ec77c205f235a8c3c346c2ed2c271230b30826ec0636d59108e1b09fd228748c329b889eb54c3e5fa4c5cab39c9f987e9c95e83123e5acf212ff370f1cc689ac660e251f77bd6d7801394942eb2043cc81ce1e8fdc45de9cea36341e1b6303c57feae6051c7213bf10283a9e0aea392ee25156bdd21f9e75c48099f14598638a122bf5b867249d5f680461639beb0f01fbc65ac62fa7b3a89f9250b1c27547c95dc568500e4ea60f0da826f0e72fa7ed2c31a7a8a26d5a09d532772420d2adfecd658feb38f4762241149b9e5f11dd29d58423961c2b546e224e1a90551a1e015d309d5a54b1444b2779533f6952235d22e5c1d14fea752f9ea5f188dba85e60b592875d6913279f8c43515347198913c8939533bf0d8fa9d3183c225948ebb84ba9facc7d382cb9c96d52988bbd760c40cfca04a3973be82c51fbe3ce1da4b5e8c269114eb1ba4b55f84f3ba0f3c74838bea117785adccdce512aa2d9b7e11e9e53391947627101226d287abb7c306e53b566fdf6f8790b7b8ed3e5bc041de4ba888aa28160518376759a75b937ddb0944970834c483756171804ca3ed18b9889fd708bd5ca9bd8d531b266995699456a82b3a300bb39060080c45835b555d82654cab3bc80fb6b0843a21c76c7bb5a1ba651f06dced0c5aaa1e594321f8ec7efb246374421c06bf7cf48cbf4f1a33afa928aee7c4dfa2a9d86730b79f5e123f41f048525f5ee8d7b1f143c4b1dccb13e11618c09f15a98392dcd30c72986d79886d6c35efc954aa182161c7d91e23a9ccdae25039a98bb07e786ed291e2f452ae845f27ec003584429ed59b7f0ab71552738ab43fe5f01932ef7dbf3b2f87d02a7eab84908bceec5fe2942701c208e11b5f1b49f71426503a85ec6191d9679c2b762fad5f98ed256a560972e36b3651585d00f41553df2fb8c75df52ecda2b9e81c36f496c22fcb12f99939155c6d0321d9ed49814c9a3addb6ff92156f2897db9bbda9448a4398acc1e129be13a146cdf5dc6be6e03bc6387339b459fc1c671879cd579d09354756df3c04abc135510b402da60f6227cc23abdfe02a986cc3d0040af5e320e7678534b73ac49c454e4ebc6df20adeefeded2090dc0954d3ea15cd3226ba9ce446a64a2df93feb2c95d38e09f082d6410f9c78c5a55a9ec3940bd2289fbedc2367356bac55fd3eae91838f780009f212caa593cad4d14ca07d61bef68c84f8c647e2a79fb7a78d89189fedb4c4a86c12bf205bd5a1c7fec358f9bd43a14329897135251b4ab3ec13c4653a04d79b62d6ec0a140435b529f0fbe9e92429e04f902d5fa9d6a33f4a22de261f34165510786fb5d4d0704e96ca2a11be38b27763ded7340d09f985f892a71a2a2a7c69dd6059f0b35d6168b1d4bb0f986fc473633fb4c2052289a20af601e82d2291e060710df5f851733cc7adcd897b4f588bd1875c6da5bc01470c4c408ac9177a4a19050793c2cd0cafe939741c598957fd08607fbddcec6e0e856ed5939a197e3de2b16c6ca2f28429ac1a2720e4941e10147f9682f89e6cc47986d6db5f78bea822ce98cb8f323dce5f354217429d2ed069685ff6feb2f564e24b8fc9e2b32697129706544ac0466d9153f4e0d9ee68bde58196c1263534016201ece56dce71af9196d536c94aa26eba19fddf378f2589ba2abd8b485e9ccbf53c310e0afe29c2c076c00fadecf1a1dc541f559c176ab93847169545f7121b2113c7282e179f925f512b5f928aabfb06779d6d4ed5962d133a6e9cbcae0a4025fb495f6c6c33f9a5f3f507bdc3196fed463cbaa9673eda1ffb6e3eae9e10d63824bd3c9d6f36fed2e66f1d0c387e136e8ffdd2010dd7d54c19353783cf59815882a21584283db6896be9707623c1c4bcaa97a1073875409dd18270a2190cb776b33fe68f83b5b24602d0a7c539c9cdeeecd077ec7c351e5b58ee440dbf2325904d190b5553d64d073b32e4b67a2e3af7178f45046d3908910730eb08ea4f3be97f2c885ad679e58913d065090edf8fc016dc9a48bd97e518d8e29609d6df9651c6470e44ef41adc715ddf4cb7d399ec897883b2d286af6833b3904d43c90fe600edc796093eee63a9a18759b5a6f93a45908d587f7eb94e3885a398d2cd8666d967e0afc2d07f4d551cbc8752598f4e523e505b18082345adaa206b43e784fb700ae0d675a15bc823960e28c6b2c81460b0f79aacf5101791f06f47f98a45850765ef7414535fc8da02055eb55932ae2e4723b9b0175f1743d60fdb40564bb1b14d6d06cd5f6a37b55aa78dd6d192838261a8e5bc04e2d10177404c437b1b031eeb6b3657614fae298f078945f927d8733860d3800ee742558f575fcc6607b239cf4b2576094c57b661053bb304f440ffafce6f170880bfc19e0091aeb8078ce954e494b4b6cd8c652205673b1de4197a27b542a566f58c5ad63f5e5b88d105360be06e038b803b4dcb889d2ce00696d28cba3827ddf71571cae16c0e7034394a960ab3c596953911b22b09546e5c9c9f93147ef823d5997c34b6c1e97ea194fa5cd42248f8c771738df9956c7cafefabea804faff1b102b2d982afe8129d562fbba3826719378639576b635977863e97a540df1ce3c957cd0236024dbf8f3b2cfad5634a873d56c3258fb8b16d75ca858e3310c3ee24851b3a17ee0da0489d4fd30a4202fab6a05d0c9428c9a9dfdee5544131f68afa16e5ee8212ccda9e1350a20c3db525bd9ab87559123be5dfd2a146564b0e2591dc56b210da6894d290663de31334917096d151562ab420c60a1c23d651a241fc65dc824d134e6fafd6d6c3e789bd57d3e2b43859d295cc4600d0512eb7dc1207545ea210ce9f5107a5a1d9c778542e5392119549dc15b3b03f8a5141baeb224ee915b5103716d04fcfcbe0ffd0c1bf8677e1900a2e18bdaa872a2f91ca9ab393c351d958286e6fca678594a3c7f63cf14a109aa394fe48efe57df9d9872e13338e5baf69ba0080a7bf0bc2405851a229ced52390c9c70c25e438515191f7eb72089a5915a3c787e9137943ea48348822e65ec3e73dfe0d79290b0fc97d59d7e66a7e7381837eaf7166c47b2bfede08329dbf6514b9ba1347e148f087493bd7181d8b69c1273480e3011405e1f2975709af172f25d167d06d5d644803f727d4d90d42c23faaef6ad900503aacb082169860ac519cb838ffec046c5057f2da233cce13d66b93880c1bff1d0d32bfc4b13feced75846266b30ffc2fe06a8cccde93357d6d82369d4a9fefb45e8453795a7d1114ebe3869085658c1b9516411dc7739378e96d9217b829f6c047f53361d494e618d826c4837f7b1f4b733eb4baed755a634e530f20d834d3b072325201ead2614418d026f939cdc64f8e3e1f176102832c102dfa536808c3ef96097bc6fe8964d0cff48e915eea306d9f10383606a7b0592997fb0d26b6a7c17d2eb91f1ec15b60005dcdfe88df9bc841f8c90d4353e9f408a269eed2d8ad0a7af2611fbf274daa541ccd19d7a1b8a7c47158c180c33a3567586f934140712be5be86aaaf55f1ca93517b4febe46776065d68e072c702ebe655105acd9e63f6738a723be778c4d087dfd52a10a9ec67c5d158591713694a7941e8109aa705653c57a18d0a8028144532112552014bab68e500550f99c8b4e385f54e68ae6455026b6cb56cf1eedcbd91a8e776960415e944dc9fb8c7fc03cdf8c22af10cc354768b8374746b962bc99a10a6dabcf60e018071674a385bfac9275cd7a8953bcb7b8d209b663fc7875f268a7081a253e958bd812303d1acb9b16d1089cc69f224023459f4190c2c7e946de0f5b1339c3830a5a5e0e92a781f56f51d8afc760ea4ac1604230032c0e2fa04285be14c1823dcf91fa94bf55973c1d7294653fd3782235e1c7d00762c71676f3678ad07e0b5438fa1f32ba6ff856a7671135d78109644105223218bb7a156a820ab49ced0553e50c8211590cd4b75ce229c6ce35a203d58b4efe60fcf6800a010dadde06f2ff46aad955707e5204a87b570db2012a04ac4d49b8558247ee1f906c0bf35f7d98a3739386343e856d59e23409d18fb748ad7228aedcacd40ac4117cfb37aec64fe186ca280249fc5f9dc8fa14fc69e10357b3c8ae5a570d8a60da1d1ce15468a1df7c6aa80ac4b4e0246a91d7d378142dba8dc245a11957607b2267fa87a19221606ad400e8dd3122024db8b9cf2c281d4cdd9a14c7b2996b056950c4c02058c1119f53289768b900598e93b81cf76f46c444cfa9ed4ebaf273046523fb393f36573c19a14993f04f1fd5876784f917a711d2a10615cebb1c044f3ddc4bb584b386a5d4e980dc19d84a6770b7dbe91e9bf3dc0ab703efc9754e3786b27cb8181a0cfe34cb1b82cf79663b68ec789a7d096ecb9d478a897536a7a7753725ca05272974efffb437258bbac0b3b01df4188be6429ce46f6a85d6988bbc3ee979f144722da59e0f4750687fb2e3af991e7c466b73b2e54f5d2dd709eb2da1cad000ef139631a1d4b19dcc7e849738fbf12d50d6b35582924c007ca375f46b5e7e40c02b37875f70c8303f13e07434db439d961a196f3785a42ef5653f55369ec0837a996882896131015cda870a3a7601ab5a7bc5b71a2d3dc3961a28e06f700f5b5b93ff571d19b929f42b675dd99a00c4680ae69ee2871a3d3026ba4de1ac3844fe6a227bde39723218d2699bd8d8e0aa589e928799f0946d8e7b331f51ce2165b608e8c1611ac051b7cedeb1c263d0c7fe6dff95b2b08bdf62995e008ad0d502074047cf13864663fc51f6f4e2d99a2b32b24effc113cc75e4dea1faabc98189e6092622362e003445a1ffd4ef22e244f084b100879a2c323902804b8f2724f9415699c05760ec9fc0891699a67669a078237e7eae3ff588529e60a1ff9f325d280b5c2c763c21492b27779062952f80adc48f028afc2467e8eb7c86666b0c52076cc4515b5138a19cb0727769276f56f1392ac0462f8096bf51c15779016cd03650e27fd77671414ee83bf2453f5d5f7a126e0abf0b6f86b7691f4268ec1bb7ab0da05d00c5a5c82294b6357edc19541e61b609dee1bec62ba9b193c322500d40b12b030b05bea0889330a218b5abd7599e9eea66a809b6d2303dec921780fa9c50e5fabb37765cba5647685b1a3bf71859e3f544f4ba2bae665d00a65000b4d0dc83edccba0b80c8ead27121444e18f2b9a871ff9c9066eaa7accf6fa590452f0573c21d54da93c767233d832f003fbd0ddc097968ff09c14f1d0e46fa027060a4a535d00614666386d21606f7c3f7ee9e375039c1365429602851669a1d482b927fe850667a0104920546d41377f9f1631a5cdf57b649a4c87f1bfa377b7ff72b08b6bbef9e0ba02512460c7b1effafae0ba0d5e97750643ce0afe7f943188b1f620b20775cb80036673b9b885494788c4b0d449dd35dd70ec26dae2b00ad5d7cf139c720c3f93a01685ab7b31f68ee1e1bae8fed9cb9e7032fbf08783df58c25c4aa398f4b89636fc45cf7edba534bf157d5efc53290639dc7042a7b8fc65fe86bf75665d82fedd6384904cf2459080c3c512e64a5d3b7401880d55be080427352ff800b88c091544267f6d86c90c01e5c5014224182ff87861247c0971512c84775a53f192081c97bcb820802092ce637ec992bcb69c5d58620415c52d61d21d989554210133b0209f4e9c34fd5cf5de603e9cf366a621d01c096ab410d09de1060f6b04bf0875482d1e6700d5bbe138fef815147e21d606227b9b7cf48a3d1db33f1f4b8ab11278b149bb19be7381ed6ba3dc0eeff809fe0c7941bc88ef1a2a13d708f89017e4e259af2e6974a22fe12d68bd8f7804e268dd975c13e6a927ba07ba22d646e2fcf3257c2a3e9b2e89c2535a639e7facc737517aa3a3148a7103b6c6c20f8307e5b49c26b2d83d031d32a3a8678744c4b32972fee6d4420d0454159ce1e08d8a4587dcff674376de3e80b87e0ca75ff05c1886227ab22e723fd09391e99b1510facd96dba72dbbfe3cadbc64b115c9bfcf19dbe4741e74612cd243e8edb96cf940eff5d3d3037edb8546d408f34b06c52497e5f90290d18bbb79e1ee8c242a274f7cadb89ad470f68ecedcf6edb9907b3214af3112f78c087b6e1f94df9e8048166ea013bff0a27186a33bf2fbf7207c7340140508c5be4094bdd25e9daba446e3241ffe9db8691aaf30c92bdcbc51f1ed34fe5a22835e6b75a0f0cb32cf121bf026a7911d351b99819d1f6a221e2e6b02ff63c3565e901014e2f5e146700aaf77293774e2cf4b491e6a9fac22b1adb268c824920b66d11ad07c02530398edb298c8de31e74a74b3a7aa0ac35d3cf8c7a009a44d10c90e1a71449e881d1f824d69f1aa281817ac02cd485f2a157fcfe4b26858f6daa520ff046b68fa24daccbbbad7b62c2535e5e2f7a1d82d46b61ec37608d360b852f9c998016f7fd4f82cfa497686fd28a4ed0f926d57c4d23f19881bfea963d9686556923e59c75679de75d279a55039f23d6c0e972db1aafb63100298e16daf3f46b913e02a444db4cebd61f2a37d8f3aa73037702e8bb2fb05f3df1b03d89a3807e70c954da24ae8b60794d7134775340ca79910baa51b87fbf5410aca7e83badcf67b36d56fc1a469a5f65db5d546c0c4aee3eff520be2c55f5cbc344fc72d6ad6fd8aeaf7ac208f929693b4af028adc95a9c3134f161812a9afb6e61d9c1f12f538a5d1b544c05c5c7c1cafe6b7c5f53b60449edd643b713b0512ce426cdba80ce44c470ca47472369dd98ff7ab4d33fb90db1daac04eb7323e5c5aa672bbbbc8e0480c5c7026b6a5112fe7f6eff6f41f7bbe713b8f3a4e45c742063cb7e3551f8fd6a0fcc2d0ed0194320e51262b061b9871ce6065bd536833434f68270ab546eb5d6ebf17b7f346752b638b061ee9146f2f602f59f3dc9ecdd4497d7ba61af4b01957dcce97cec6e275d1df94d63c36dc5cf71db99daf9dd803237c9adc9efb6fdc68f7aaf65c1fa32622cc4561b9c668468649c9424af19374d480354dddaa1cb86c51dfde49bb0775f4a45873d8b573765b8fec54e4e8a974913893731854a53d43eedc329cc5758f4cc5e39a67e216ce419e970b0ca5ddc5e079ef4d1fde1e37b053eb64edf470c8c34e507226a8dd44fa3adcde3cf083196fa7fd17c58ee519d3572199d4d1a76f8f4fbb1fbd3def9e68e726b853aee02d7a87ddefd27bbb383bfc0b519d023ee27ae4253930665201ec8bfff4a88986b3de06425351541fb166559b07a80968244bd49bc8af42ca290ba52f71a9029a4f1602facd8e992f7b697a6fdefe1762dfc30b44309bb197f276d493bd3ace3bb26672e0ef7499286f90d7f711eec809c8bdce75d6f326fda8c99a44f923bc55bafab931b712491563cbe1eeae7d60c2bde87e0ff13d40f45d5c3329d5d44b8a9a6ffb1552413cf68d97c8e341fb79c46daffccc56293cb3879b98fd127b96782e7148d19778a8977d7e68d1fa86132678edfdfd92a73df0c8a4e3fd08f7e7e907e004790af48dc5e325a4bbe949e100e91cee0964ecb1deb705861fc371da43ccf733452898537b8f60ac3033192193020b77999d093ccc99c11e3502d259502474b87fb5f4399df390119c70470c18b57405464813b91bbd5427abcb4effa86826a4811a5752ae2fd0b3876b496677d1c90977dc7b6de09c0781100101002e1b3f857bb1211ff080571620a03fdde1ae5e69bb0bf7d2aa8c1f8d4e636cf38396304f681b9dcfbdd566a170f7c28f87478d9b4be6abd6df0c00839ef50c84e82827ba2cebe2aa70cf58222591bd392ce79aedc2099a471bd6322b6228ebeea00894e4027ad0495a59409c15a503b761f5272edc39bffca02923b2ea83c3c16d7f60222bb466b0535d74ebe43b156002969d6435d732da4082ed037676fac744994da3c0a261f62ce6a3ce525f2dddc7d7c10af2a4d92609d97bef2da54c32a524034a05b305b3055c7a3732a0a9cee21d96a43a9653ddb126d5b154f59771653aae864b8e44f58733473894a9becfb5a9e1fbafc8f86645ef6cabd1c7f54f1e7aa8300b1594473827d4a4f4e8581bf1b88d1b2347de1dd018238430ca187b4c08a38c104639e3842c0da33f18053384cccc0c216466662d0b340592264645156ae1f369d8d6c13aaf198137253fea1bd604426666c8cccc0c9919320b945c6f1bc8ae0f51ee3f8e24d29c5b94104af6e12c0588c5dfdfa26fb28bcfb2a5dc81d5f7563436a50f85cdbd4860dede9b9263dc2665146001e79c73fafc213d92407a2502099f8c85717d89d53d1dcbb2aa4903c21cedd24f294cc32dcee9db923008816c432866a013618c1e1d4efa836f40a343067688069cfc9c8438ac2a149495154dabefdf089ee9873041eae938a046ea3130820786b785478509861061341b95308473524a223df70203f3b2b233e18cbb732e630ccec202edb84a8027830adac170240210e0cd785e4589dd9ba7bbc718bd72ef2163f4ca63748ffd2c40dca58492e77c12e70949605f2b0ada713039bcd04839bf9c3594e1c127b0e2aaaa9892746e3c977f291d989c4761dedc9ceadd8dafbef1c0a3326f106b6805eeeeeeeeeeee6ec6fcaafb15e6637a65856056d90766352b114812977ec4e94ea257b2aa66359f46b11c4418a37b4d74e8357e84c60282764ee3345c2ac2a545b90d0d5e9323602d95c57a8f250355f65bd6b3f44082d59b85b9dee55d76de658fd1894b29a38c2f66e956a0ee47e5e10716041b8e30468f0e9b03d18076246c42249c389caf5910842762343102b29432e2e448c1c116089924e28dd221963039bb4b97bcb0b61cc16c282309e0fc0bba7c1fb3f693e1d27de3a1abdcb8673f67d03e19bb5c795f84a00a7b70305fcc8c73ca29a3fbc2ed56014e77777777777777cb8dd9f71ececbc11e934a9fcbfebf703560e67bdc763c2a74284097cbbc72e5b3b663ada0ab2d8470bf9979b765d96f0ac01070f36b90fc1acc1b8cbb701d465418904418a347875ad76b330874ed2fb0e3e448c1b94713e93d8ebf6ba94fc31ec7efabc1c771b7836275777719a20045948319e7943f65a4b175067382c1ba09d01d46ec899ecbb23c977f2efb5d4be5d6c726c2a6b04322b1e068599ddaa927482da4761cc7fc70a3a16141e21293b93f1ef72d1078022c3d48b8366e4bd7c63a20a2ae13eb23ae3793dc0c212d13b565e999b2af5056345302b26d87782efd58f5170a67adbc545adc7cd3c133dd68977e5f940f3655dfcf63db219e297effeae099e2668a1b840c99a511f379ce2d06bb24e1ead77fede5ed3db792e19aff5a60955b50f9ef5734b52efeee468a6f59cf3aac37523de6ac8f38bc2723be656d46502f6253d5c22e5c699b36e6e5365fca18e8fe4bcffca9b9b9d935c05c73096efd36146f90d572eceefacbbeec4b4754f43d71692bf70e9b0e3b3f27f39ee0d6bc4298f9e585e76c2bececd080799d73e3e6e1dc382007c7a6762423ec3cb1815c3a92c26486bc2274520cd230d7efbd19bb7be2cb292746610d9ce948fd90864bddace152771412e1d2eb1e92cd18d606fa80b4b7db871b8fd57ed460eebdf7fbdea3ef87c6c3078f1f0d9b878f1f0eb7dfbe77846e54e2e6fdbe54d5e6a4bbfbdeab9a1843cb0d302f2f2f3770dd37374f71bd57f2975146134b3825c759638c71f31f96370c42d01703eecb18ddabafc110ce5855f39a33c32e6b563256d594d161777727615fc504d4248ae913dd86a7b52207e65a02dac6f875edb063864b457c74cfa2566689583034aa0a3ee632c05cebc0c568e8cf3970df80bb904937e6dc1d9e4bffdee028630e5cda1bdb0bebe88093019c1c35607044a41c198081e9c7c3df3d1e7e1bae86c0e4039d072a370d2ebd23d034a9dd57c00d9ddc490070a4f8914215496862870b910f8b8d0f988841104d086108633840480b707a152b59cd19e18340d4ee66820f4b1839020f92c88208a92dbe424e0536104506903d2518795914318518a420620949b678d2806a9b8827e09a9def555144142d984289228088813f158b2dae70648a208041081062a018de4d0d6cfa75bfb671bd67eaf99e7cdffdde5bde9cd09ceff9d7e0dddd6d833334b66963b81b62ccd1b81c0bfc184cc07fd99bc58dcf8d8f88e113358f16ab438431205edef6462e45b3cf74a890480ce6f86196836786559f09618eb3cb49f5d24e1d4c85e16deee9189b60e69c523a0604e518c8a7ca3030be75be7fb916f9c4273e31c7afe7c4c307bbf0e909655ee6655e3ef5f4c115f26f79a2f79c27c8144287d4b7445e4fcee3bc97c73d269c8305a11defe838d6a8ef8d7352943e8dcee4431b44a140efa0e76db719a2335ce2d03badc11ce5427cc689ac8a4ae3a8388ad636980683b5c6994ef687c6da6850b44e544110b5c59c9cc34c58c75128513b6a99149304c78fbb314edd57b12014e5a8364121ce2a50d06e65e01006bdd307c546392144aaa2b8f49c1022c9c6381125499e92257eaa6963de0d19985427d865fd6a3bb05d6d07a6b50dd560c4ad9174129c3a6476eb4db6a01dd7d4f0112ea9bc3f27b1de9f71b804c3fa57537eaa3c434157a69a6f65f61a6922cd515a50cd651aab5d037bbb32cdad2514060472e077ae640921f571519f122564aa0b01511a02bdf8d010e65cf4206d14b11a0d5bea6a3de0487ba17558a55a27aa1dd7b40def388a5d089764609665d943ce7e331bd90c5f65336c3fb4c4241121d01f3f6eddd6defa742d361269b05e5ad08e77f65198a01d44d5be61873b4855060e4141146987b08bbf978176bcc33b5ceaf7e726dc03a307d0058ddfda0e5976f2b3323b24be8ab633d69632803210d9213bb332dedb1291e9dea01036bd181f52fd39ffd4c4a15ddbe4d0a6ae79a15ce8412448493ab58328aeb9b66ed29f5b47ea14443dc90103ce16e87fc7bdd41ad05406d47743a48a9a62cef7a6fad6045ad930e7f3775e74b81cd0d63d0ee9a5b61c1649f539af6de7bfe678335e7d325abe0a13e87a741c9c6ff7f62791286dff16a7416997295caf65ee93ba9fe3cdd859afb72c1def04d9675996fd6ad6e603052aec9fd4f831de66d6dfc25cefb8ff7cedafd79f8bef7bc58fc378114f0d1c192edce40008afa55b91a97ecd296807537d7269a53e68f5ec384d0d12334714a1f545c566701325e4686c9214a929c2c4bbc1b961ee0926aa280973a9ea3fbb526a2224bb71c88ce84875914d7599110d972e510d733e0ac2a5f8a86e34643423a261ce8bd44b14214b0f0c9034143111e9fc70a9a35a549fda89b868918e4b914ef51731e1920a4fff7b959eea36e25fadfd14f45447a7368d4ed5e8340a32b21931c126183923214446a8ea239aeaa39aea2324d547b2874b1d3d551e2ead932a720257eb44343d9054ff9aea302e307db8b018a146330cb41b9d46a7112a08fc1e9d46a836c16da7550ad023a221e9b4e9c59072aaf777a49dea249e1b4150be5f25a74d3e841ef41ee15f803edc7c4802473f7c1f50b6d77453d9a9fe17804f9f6e3ef4365574aa3f00c64047a73685361838e0831e3e6853c96917549b20e8419b0f31fdbd89502d3ab58bffa4a91d9421d507413634b0f1b8829aa9b1c98206892390f4cab8f500b76be781c4f88b69edea69178c488c3b2446935d3f51c38a6858cd112ebd7a8439c73e6a1946c3250d9bc18830e7bf1a46c39cc7774a6ddac5bffac7a6d16934b3d32399ed021243431d9d98f3885d8f3dc1a54ec413b10d07ae180d393a4da80d0d82547f2cd5a68df1c7ae28e2e152373a89aee0120c43ca0ec56c2666733d51fd576ed7cfd5d3a65784e7ce7504a3e1b972ae2457aa83a19f3763df47a7eaab91709e0c0f52fd5fcb547f98530d5cd0f97c01ae5d1ca29cbdfa6348b8f46e8a98a9fed80e76059baa14c644dd970fb7341dfe70f2cbf7bf606fbdb5e9e880f5302270e9788c6d32c3c1b307bdf5a10712333518d606a302f3abc731bf7a6bc3517d68eb01b4dde81eb29f0f24a6331cb6f6c001fa6cebc1022f268776e97f312fdb928011014b4707fc61444007654efeb53d6b7bf5c5889893b0dda7123a20122e596f461212291412ed68f77b186dfb80c4a054bf72a229dfd1dd9d73aa54954ab738281ad426113e78abaddb5a39149489601423e1930e7e6e5079655039e3073d9098ec418f237bd06b978923cb362031ed22375e39d14db250066e6c03a37c48c2df07d0672fb1bf5efe66302a00faec7180b66c7bedb2e1c0b6bdb6c93584a82441596663147336cc506babd195ac523f4020555b2ce897f1dd61ea847342386733845bb76347f5a7005d3804497dc113951f23f1256a28bf5b40dd97ba524a59e57b3254b0840b548ca0c6d8cd08c4f568d0504e65995375ec663531793855114191d6f9eff55d4b85d68bb55e5c1a9019f799443f63666ddd0fd57aa83d9c77840524c0a5e3fec5a3fcf502aaec1391b6175b078019e668eb66156d2adb7b2e299bdca2c436c9c30fcbc3ee8f1a533cb33d3f2f07f2f0a3c697356e1d90f9dc63d97d0874df9d2d6919e9007d3746a4a806a8efc6480fea1582fd7cf0a6237e3f6f336e3afc27001fe0632b0efdb57f2e7fdf5caf3eb83d81eb55081bc286c066c16a69cfab0ac6091fdd2e1e7ceff57b43a8e8861bde6bf82609a32cfbb6d7497012e9bdd6d171176e3ebc3691a59b43f8ba21c67177607506dd2bbb2d3fbfe6132041840b2eaeb8e2f5b83922c89cecbf439020536c104104c105111029558880b842bbbccd53e6988017c6d9838ce8b4cf6fdf7b4f4422451d884e21882d2f25a17eb8f88165d8e7dd9de1e96255b8a0455484501142a58bc7bb4dc475855484501142450851101110a2934a17455cbdbbacc205e5fed18a54b1bb4b12fd2eb72dbb4d85942a0aa084224d42f52d5102914a62b9de5bf86464dd25a0efe68822357a87cc81b0be940a8a5071aed7f2369b009f2ac62ef26602d90718623e981bbe8f69752180709b4fc6fe9bdddddddddd527b7398904362b92e8755057359cd4c603e467c61986f7182e628f1484f9e3cb9c10c0cbe072ff81e9c70c2ca277c0f3a7c0fc299e47dca6db6cb93e11142af9eccd8efdeef0ea1fb83efc127c3310821f438dd3d62179dee6e02cadc1767d8aefcd07dc89cbbbb5777508681e008892aa4c07ddcc767d7c77ddcc727ca26461861c4680746f8c4399fc4277b592105eee33e3ebb3eeee33e3e3252c1cfc50a0128db27c3d979a25728253e31a6a057894fdc894f94f051e2a3848f121f257c94f840084559a0028f4a26dad4dafc604d5eb3368e840a2aa88882a4e241275cafa5c3729ad0ce6732ce3a8399673193d9ccaacccaae0cc3b20c74cd843219991a1a1a8a73e9d0ad401583bd1f3f1be4745a21a845a5ccfa381e578aa474072d78543211f4b5599b952a5c620465d9a582a54c4145580b509ee32a78269ff19917d40ad52e28e6f855b2e035b3e7cde867b875b356a80a3533b9983ff307c78d97339ac17de035ce030742e5e7dbda08a18b4402395c33602f30d21aa1da54ed35355450cf605e903806c7ddf0f2425a591612a945a509a5015bc2e601e199e6cf12a1b2d7b40b0b81625acc9fc9059b5c08aa42a12a7f85aa84b0c98f7096d9e8cd6b4435953fa3210365584e7d0118b1e09a107a6f6f4620aabedf4ea578bbbb9968f1bcfb2979e965d0147f3114dc04cabf0465883d6586cd3c7d03672f1c05caaf637fd66eb71074edbe6ee0e525b118c752b9a532ec9cce41123b1554df92249c50f974ba61fa37c39eba59a0f07707eca9cc1cf36fc6c93db3014fd50a2852f551a1be9b27aca85788ffb5680c80e207a998aff495a0efaf1a0e7052dff3e8814d56ce8d1157eca48ce8a2eed80007b57b4e8abc874ddb658ba7a202fa3566caf45c5635a52fe0b9f4cf0a864e1892847987e91e153c79010f03cfe45bf73b82f3db025394d86bd36b97b5baa776bd23da018d0d3d4a8f31cb6c4c6c4a8f12065896b5ce8b780077243f4d690135edb44bed26221ed0f8bd6331a5d7a2a0347c3247f6d3306407949292fd207348221e5c369d39616567e5e4bbbbbb0eaa4215adba48a45671a656d5d6ed889713e856cba22150b6dcadd5913aeec178a45eb148bd3e1261138d335cdabfae959d4a89d05864a6c4e860ed016b97c233829cba361da7aacf68136da24db48929269557a6ce985a09ed2c430f1151f41011c5d2c8f46a40eeeee0aaac9225625bf72f5c7a5b234faf06b8345958aaaaaae00e6e793b3c4fa7f2bc6ddb81863ee6f665383427339f5c934b20f0faf667fcea3f7fe59526734c7a33ae77da2eb36bc54f7a33baca982b9505a4bde7623db65d5bb434ba52e726a3a683f215369bcd66c99225f082315a4192e8ff6e5617c4bcaa2ccbaaaacc86112bceae2c2b0822965559561044ac104541c1bab16f0c5e303e1401419b7675e1a0adcab27a8455dae85ad102bd64aa246dca92b40b67a954e5179605af38835559d68bd68c58ef5bebb44e4bc1a66561a9a1061b6cb0aa292397e10b38f8020e905cafa54be91182c668e3fab6bc5a34a12021947b8c52cecc86914a723aa0dd25b3dae35ee85c5b166105f04f4dd6b00224268bb8cb9ad0c9a17fe8f4663c1016c25484a05de8746538f877bbbb6f77dfae946f6536fca5b6154b9982ee160ac21c4398855058888cd0142c2a7fc4229ce14fc142d270ac1053e982c26f1dabdad4ae7b7a87258d945866435e32a1d3d53a5606d2793264da34bf02924656b3ae26abd41ab3401533b74b46333267e8d43a32ba47ec7a1d23d54573cd7405aa186bbb64da8539256877c9540e9da4a8321b726b9dd6a94227d9d53523d55b5a284866a32f771830402c2cb406ac86cc067c6f079ca99dc92d748a22745a932c2269988b01ed2e994b66c8357311f9a91b8b48d594d14a89ad1591aa57c8fd415da0db3c3c3376744fbddee2b19640b762cc310da0c783d16059562855e1103474813a0f0fa86ef51d1ca29b87c68adaedc5f366ec5f174fe5efc1d3f811e36e9ffa961cda94c3bd871c7049156a0e7879f96f91a2cd91a34d2f73874e2c46087f777717c2df08e3c6183b6edd1cec61655886b2ec4c754575ba52d3ddddb775df74c4a75cca7e377b4c9b50d0add977b3668ff1f6dbfa137b0cab4e956d4831eeeeee6efe35b8531ce8549c9d59a063ae1984397ea72783af992abf639b8aa65d78ab663aa6b29e061ce7a9d53c55ae66aed4ec0a003636a4aaf5cf7a4d3c842bdf565855365c4f2a83c240390067aa8e89b9807672e7cd80330fa8eafefcee7a0267e46e2a38a428d00ec64c65183338cc2a77fc971f00369e0589c4c57077e9d2fdfd853966b7aa97379048d5b33037fd5b872e68f77a98f0f0d1550fdf6e681cdce45844589b6a4869e2f8dafbf5ebeecbb50738cc7ad361a50bda718d19815f837970a97f99c60ac7a57f25abaaf2eaa57bb59e39ac17d51e73204c7b44a05baf075c0fb51eee9fb9fb8bbb91091d87f81bffc1ec31a0c7be0feccda81e7b8cb6e9af5d010beab67487f141eca3c6434b0e601fb1ea5b87d50770ad3e07960073373057430bdabdbc9491099993a6b93d767119378cb98e6dc1c009279ce0382d0673a45d1d1dda85b77607845457e397d9d06149ef8cd130d7621042870e2115f112da4d69840cc7f8ab80ba32ea0aa06e0d754775db25e58711e8564fa13c66557222a0f6a36c1d02b68e0bf9bba9ad7559ed3607d2e02625b1208086b5759c02b6ee65d48b24807ad550af51bd9ea906f666ec5f29995aa34d8bda543302dada54dd850d1742e89b7f8d8efdbebbe9f05f549bf60acf8537470802b87b9217380b2bc593c1d80ba88839cea159101560c480544b0647ea00ea5b2283204b669c5496fa96cc48a1ba6f3a7c786d0c86f306c3dde9a393a66c285b47aa019c8ea8e40db9243164340200000053150000200c08068422b1502c0c045d567b14800e759440805c19c9834910a3280a829431c600420000041802c60cc9905821008f47847002800f9c9b80c3166f5fe127ce872e1be4cc7f02f7290bc48159b9465840db0e2d7172295b95c9944adcb80e1e5b51c8dda91761688e8138c7216b09c15db17e3fdc38e450cfa267e5de9bdd40fae40e6bc1c653768fd451466ce29819efdfa133362e542a88f4425a192692970570eccbbe0a217429a3edae38524bc4d4c8b4dd7592e4ab658d660443c4e1bee39a1f5e39ae81a569db3582dc66a7eabff53654875541380191aa2f0b831ae3ef70e8cd3e992b152393c2c704b60f79be32e809f19b2486404710c91b652210b48294e19d86c97bafced578f743717ac1c5e781b684b71555a85fca958113368f3569d22a6b95fe878e01ea82b109bc2d3c50bfa4ea7f20309d9de5abe773764cd559a0c2b7f2b14a29b15ba0fe3c0dd8615673bcc8e56739cddb72b41e06a17879a4e732bcd2c71c9127591b38a1786169b28603b63297999f06056247e4a7b91244f2853e583eb92016947ec8fdb3c089bcc3a90fc87a44f9a831c94bbe3094cef72b08e4b14929b1ba4142690eabb3ede129dea25b982d2b8b184fb8d9a3611233546d8347f69b88470d62638a9d5b14a141cff8abfaeaf7ff0a4e7a20b07a160df53f7e039fdb218516f503719ff27076b6363bddcf8315e71cf20bee057adb2c7dc3c4ca6d30a3bdaf5d3d0057f4a121db31d2bdf92c74c0c1af00efc0f2e498e7e7ab1e75eff619b6cbf306603f75d9650d4fecbf24607372c4890590c1e99d18c0b62b38b7dbeb289f873e946c5fe0bd4c0e06f94e768fda0ae65574c89061c7f682db878c989a0efe230d747b5c9302ee2e60f419c740ac07b5e17235a850e4d64b58615e0d652d1655615be1ab31df35d66ebaae2e0714a24611094e64b042c44771ef8e9fa6076b5c4d3dd12d8c890bd025383b20de874515f1f2703a5379a5adb95812523bb2ad19c17131c2be2d247eef9eafc8b388f3faa3be7e34c964db3f1bd6a26e164a2090e089fa94d2a4e5b956b55de2d51aa37d508a120f7dcecca58d7049d63547167f84ab91eb85a96629d908fdb02d74f0c859095245b93646ac136f8a5e7500790c41a83bcf84e80ba602209f363f3bed5b4e5355df15a43f55365b7fe82acf5b419b2aca878671f8c2c259d51768e4b5bbe83987b35dfe95c87b6f237fda6a5e392b54aea74e81a123e4a6062c9cccff9e1633e46fd6076d7c9a9f5406ae15cede7e2d11f31db9eb9c2115ba1f70ebd471545c94e83535f9e3feb9b4cceee2b66600f86fb4536524b3746f362b48c5784d4f9894203f338d2fccc8c219698c9b0aeaf73b54d669b0aea7e867ab7c5435d6a42a049ad42047d8374afebbcca9adeb853358fe279a5b59023d203749baa5e981dce11404d700cf3a24223c8e4eda9443d241a2c550b368c1bcb5ad331beaf74e5122ec1bc3d3d15293c99aceb5a419e2292472b680e7cd93a52aeeb2fd6633241b0be96dfbf7394e86893619aea384ba87bd8f132bdc15fc9a4752fff07d18e2851b49eb96622f5ed3ad7ab3055b20f8d13f658624227d1bc9d918b4d786048dec0b41d328e9a2bb80bf0fd7b4114f346ac5d79ee0491ea5f6df23a9d4cc808fa02acd476d3cfc3dfae731322c15f7782a92f31f20722a645bf7c0683cd667b74cb02cb8f4375ad7916f30b27a8c75f0132a021370052bbc6b37ba6194b2a19ee8f8a0db8e7dd04c3bb2ccece780225eb9ff55633dc414319af448d3d8130ff7fab8b5d013b8e2ce91fc04b052a0a5a14079aaf49afbeda51c2806de3891a92a42bf5b3e5dbdf253a54b38a619466e1da42436fceeca98833ec25db91f05016015f8628757745d394336633104da6e1f6393e405862805041c0fd59f3b87583a32b5eb967c6de7ffe10afa0c019905eac90623669b1aaed779671a52400294467c043a1b29af538893ae5ea8b208c5a12b4095769dffc7507fcd64d24d01dd3d4f81894976ab5fcc6bd8747135ef0bef6938164041b7d2a28c69f392fe6170bcc85829404529ac5179ca7e192ac99a9c6dc8b43042721ced93795c55c9a6bcfb3d25604675a5854d01910c698867cc31befc16fdff840d17d74559efe0df253a7021284896bb704f31eebf2b1e479a05b5003a1851910e2912375b488ff0824d31bbd4ef9a482676c7ea9a3732ab1d7f21828da59d5a43f1a628cfc1fc525698a65231d40bcecf67875347b6df284a9e067a1c662d6a57bbe8600c33b4c8f3528fa13136ddbcd3835ea21a3b1c1655cc48310c78ac0419ba5f869af304080540bc27aed2fa1dc5be42ac086719ef5ae0c5f8e30a1f879f5464f30f02b1fd967215dc425ef87dc071b9287d2330963c1b9da2ae9ad4229fdc3aa4426008fdb6baaaf190d0bbe6329a41243a5e838b38de19742b8770b5ac750f29f6e08519113a803b573302b77db0c0c3bb58b280ed41e1fd25de6bf59ef3df5526ac145a19be45514b880e8f8572e7d9f4269f436e1c75c46699454b183f2a154e90770fabc1115e1ce6a8c29ae2ec7db19729877c17532df38b81c76b16c099a7e6759691d7b08e8eb05ed1ecffadfaa51da656f82847ff60546ccabb4a8ce65dac0c24eed24f2e7d09248214786bf420570b48e9cddb61aa134fa8077a3ed096ca46f20c1d99f76c4ae5ec39e7238b213936b422fea6d6a3c2f7a0a00853dd026d209c4bdd722414260cb70590ed9f5d31af01ea9ef5d40c4a18dfa8cba0107032192375dc3f2e985829010371fa0ba6b809cf64191f4146c940d9d277ae7c41e3ca38ec3b79064ff2021bdc7ee1d29aeb79e1c89a9ef067b0ab6f784c026df5f276495cc48c8d14bae8c868f8d41ec9ab1c3300c7ce03861c9019a6a029523dab9dc17d0f69d0144b8708fb53c875febe106bd3bc03ca286ab14692c8d887f2fedd1bfe8169ee700a119afa1fa2c7a553682849b292ed548fcc630ca2248893914cbe5441f7fd2a4c26cda1184d6481092d817f6eff97f1b5d363a8199b0f7f1dcbeefc8a828d4a31724c1b8ca97a6fb7848b95c92ddd16c2f4193fdef91b5dc11acb4e52c0ddbc40d37be7f97827eb5d859bb93eac2522fa734bc0a04b7fdea521d4d36a0ecc53638b626b7ac64e4880d28f69637911ede326bda30ce5a7d74a5a561c8f4dc99f4d617cc19cec19632b5e4c4fd7794285d6cfc9af5f8f49396db73ae7672718bc53a10b3836fc4ea2af38a290be804a37251eac1a882a0f82c90628717033e9379253b8fb3cf1ce7926d4e4024c57b2c33cbcc9b36c06698f40fbc00f5ba368f4f801a8e13360710068d6ab722a8b84c4f5edd08a883737119be10f0839ace9b5cfdebcc4ce3ceeb6c9111efd8aebfd23237ae710fc070b01182c9984da734866d529bddc206ed6b1c8c9922be34710fb24bb73d5f490caeb1bdc385e2e3bb8e00b30c3bce6ab831d604235e76aa60581be6d62ca90ea6ffad446ea807ace1a5ec9dc5a93e526c7f33de905d5d76c0f17ae70b85b00136fa4172981fb9c15edd09da0c4bbff15f825afa006e33067fd0953658fec216af54e425cc9158bb5064e9394e0b3b8a36dc1d922ef898ad8310ac2f2830dc7269d7ab3042f494df37e60b65994d2b9f6a48de1ce4de55ec8150ba39e8a96baabf37cb815f91e4d9a354b07f66f9b774ef2ad59d0c37dd6a8d34c49a7cd29bc0daaf4cd0f5ebbca7adc524cf69c7941b03544cc84ae020161db7ae087da71ebc55d9c40a0281c7bc3100823e0c75fec00579706cd3ca48f6c95ab72bb0cca4501c47cbe225617a78b102b8b4b6c2fd7cc1cd52754711e329637de751af1d645961fa396d6b9980ed0723c406a7c22807ca730860fe7253aa48e88e60d20038104e7b02070cbb81043bfa27f2eb26d134d436a56d1b83c31d00a33f89a15dc3757ab309fd5a8e0f3455e96b97f9a721eef5d58b5e6ac7250c94926b6b14cf6388a2f8f965dd1de4a78ee3b57445269f55abbc754955c7118aa4e80a0c8964f296cdf84b91c3b21bd2d8f58b79443716f98b5aabd1a38d9cdc79518b1dd8565e8b2af17ab6cf6165cb631cd5ed2ad11c3028449cb586a473986ca1bb11d835467c4aace63e3768253926f05ed79a77feb3fd2ef897f81cc92645cf0a8d730f870ab2830b094be7f300342d8de7114f1898d8381517943db5a21b99e22994803bc955e0e33f2e3a26da8b578cf4194bf53168317119dfa78006d0242850c26a5614334859661a053d6501d98326e3e9f72ff03f5d77d543dc28b4f3e0dae07f0d7d1ca789375297bc969295807427992385748230c07c8ee078017e49a9107f912c24daecf4126685d4503401511441b2a3e156dd29f07768e73622ed70749ee132451cd4dce9f1470c83abd02394a85839cdac0edf717d965a5635af04355d87617f36a3e82531ecca1f8969528caf65d7869238910d0dee412e79e5ac4a05f754aa92686bd4bff15db23656e3dfaa3667f4e555a5acd1798b5c7d7637a8d3e0c50449f4e74e679fb38b03ce4c9e89e88fea40f8946354f0d3c72260ba6f3266498625dff54b759b8f9ab68b0de9526b1360ae977880e452552d404a9e20aeb5bed23f41d518f07cfa760c9dfb11d4577cc61645e1de0389099f086b9e870ec5c58812daaec716ada40d1357a35f816d5104233acd856578a126cfafe5ba6fff600db02970b3885c29ec84bb0f1d0b1948dee3533c03746aef687753c584a6a5b67097891521ee861fd75e99b3468d16fea17ad645ea3479b1b7baf6b2fbd47972c933a5214c99d6d0d4301ecffcfd6c43e768d3be893d196b53f7a7597d103bed7e9986771f478827e10410cdcc64013946e8289cbe1a87a388f8e26ab6195a214f414dc9110b78c3d835007b6bfc0b3fc9bc21a4fac09ba21a125f5027293a41b1d4d781a1c2956645fcf6f8ec6fd11d365ec136cc9b94604aa35ab6c298bfdf93d94229469f9872e8b601555c7d1c32570a96e46b470fed9f2bba23732406b176d878c43ed11d798db68f5b7ce19afabce07dbd7590c134c2b11f1d8e8209db7328d12dad4c4fd93ab39c768e5fbeb245705f2de11181784168e25a3226f2dfadde66974b3250b50eeda7c66d9ebf74d216beaf4d2e4946c68fe8c82539dd78b73e97205c23a43027b59291d80aa16e15ca536134191b291c7821931835d09292fa01001b757f10628c79074f198b9e4c661aaae6ce8651a858063af888dcb7f791e1b44a505e0f76d5fa1890b7fb429b1100f26be0273421dbd7a35285037a0924ed3bcdee7a630637e268cb8b96d48a424f0140bfda67eae888d47f6a0d693272dc8d1f60de8342a245eac7518b061d5ca9f0dfd339604feca1dc79572fe493509f9834be7a82dc2ba124bf9ee54739c09b64dbf8149185ff33b25d59c21f14906d2048dce3fb405d85aa17928d60ca8ce9142f11c67b31fc6a76e2ba89a88c11a447ad0d074f73361cc76957bb2423c33b014e196b16d66cd96eccbf8312808ac6e37989ade780ed4eb45edfc08c291f464f2dbd95af0a25e6956dd1edd573942ecb765bb232ddda244b841e1883ba6122a0e13378a6d67afabb3af50506612b3941c7923e24c9ff90537228bf7f9d84ecd7d3b1bca2b4729858cd059adaa8d44c64a89ef709197023d8284736af02c9453d2dd8d977386a10274d5344cbe2909c5ffee2e5f4b32b48e24c7a970f6eb3b3918191a2553d4b3f279b686d813d8398cf23de69f4342aa7ef5ad984bc9f6fade80a8541237aeb44fb5ea5c6ba22ef979df111680c539be9b5271beea17c8fcdef2beae6d656a572aa719663ffa614ac90dbea8b38b91b7448356b2a7da3bd785e8cf4a35a8ef8271d6d9af986000fd2f95d4f88def1b9ce7c512d7d2fc0a40d6de609faad7a573d62f2ff89c77e474c7d6dbc47e0eea00d4c5b8fac3f2e65a8053ca5a868eaf5a49a779f6baec1c4e094f654cbbb09821118e5bb15ea8eca1fb5d4cf1f95ea9cc96b44a81685713bfe0bbe4879402c6943def36e8c80fae7b4e5e429e88864c3381d8e6920e88e53d07016a9f0f8acd3f32eacab8ea05df95ad987e06d0b87038cdcfd4d4bef1180987ffa6bc19ce376d3705b8015da2181662e222bdb80b6e277be6ef13be6720aaa295dc868671552f8e96cf389abbcf71ee4f1909769d624f4f5db10741ab184b8ccdef35892ad60183b3c63ecc9344ffba8d8e7a88a26d42217dac8fd42a84e3c01dd9f411f1f893058389bd94c96827fe4404e5b6956649b138a5d8c6fd600df155fd4d13be0c4ac0adc1160d697eeab34e681184ec6b1d774307b172cd8f51b9bfa3dd5b191892702f25e7c63c6ac39285615a35ea6ec85afb8d9742aee779411ad3cde53a707f0a69ba1dab04500c3bb79179112b4e0429b060263fd4e3a16a73d6c51dc4180a294890fb4c373d266b7826139610631c173db793625af8af62fb4a53f2e4dd2469d1635fa61b2acf41c290af12711e18dd22ad44c01d9aa581961d43215436e867a977dc062210cad8091cc85af0a32bf5de928ec03c5ee94229fc69f165713b87025a1bd602d669706a0191b494adf142ed36d60f0ff1f80a5a4e53e1cd69f128558078f45da6ab28f38d67eb1476ef61bcacdddd6c252f3899aaae149c7324da9a1274c42ed42e083ec16c7b4c63118032aae00ec67e049e6a06eb266a7e4b1019b8d62713f86ba27b70eb953b6211c06f77431947f8f1fe7fe019269fb40db7a87fd9f866a1265586a02a7cbf94394e6255cf629ba6aeaa213e5145a718a5c8e8418cd38bd0a359b5b4b36a712ee7dd3419749df092296ab414e2b80cd52c9add6198c2e71e4870fdc16c9152c5949676c67fb7e68bd569b8a18dfc661358dd889697683403f9645436f2194f1969b0bc551eb93ac5982b392ee07b617abf57a93c03d186e42b2c81d0b5517647b1d992d09bed9e65916a1d052c71a72d6838a1d6c2a431c79aeb029023430958f3bd765421dfe08f62dd0b83682b5f78b373e31386c48a91589d1b81d3a88d8f809bda19057e2b07f361b0f9710790fb0fed2eea1c7515653f702fa060d4631a03193cb14de2a3b3dcd331d33d4a212ca7d4605a485b332c470194b33adf39f0336d1b88669239c66e07f4db1719d258617da659e8abbcbe94612180e147f011c47c5ac3e8701960c6e429a2e440a0805ac9e63273d3427049ce03cc2759b0220d69358697e669834303bca0eae3d998493675faf3892f604547ffa97069a060f31a46909935febadf7605f6beaa420f1ced4d49a7a2f77ecf30cad387a0d943ef2417fb3d5dc9dad1c32fee8fe98fa460a2fa16405da4c6b39564cc8fcb11b6b8679fab107aacffdbf85d6f0eb9cd7adc193165e2c61e5808e2993806ad663d1fc9f4bdcc5f25287084fa3c9685f508d6a2af618d6fda1e76728523fdba275730db37d46aea00271c7d97ac0d5d410f13b68301bca489561f6b00d43d4d8edddd18acd3a8d64efc502b8459497cc11518260c905318e874c622bd0b557aa1b58129227755c22f0981408df99f177c3700472163c7c9af69312ce9b44a1840af250c5a897888eab4186c8df19cf662d046d80614c1b741e358ac9e5f309ba5020711a1ac1c9869aeb329b6e57cbf2e35bca4b2a64c71e76685f7210858a11104ed06e29e0237954a13f6cd4c496423aba26a455e44af7b1793bd8d314a65fdef476cecc92283354ccdba3fef01c2f411e4f433ac01fe4d9eaeaaed45c735364e0adccb5535dab87f5e24e571c317199139599a4b42009b985e866282b2ecc4182032e20f24a274d0fd5a7405d7de518bfdbf6b011e19b27b230ea893bfafd7b4392e398c6edd968cba0e70203e2baf1bcd70a2efafa3d3e6b5a44b82a01d31de12d5826d07c41dda8e757a214c1d4f3f07ca446242d7f98248fc560fac0af7dd5711885131ee9aaee7ef108bac4f21d7be11eeb365ffd67892f24703a0de85d1358e49f4e17e7d9469f54b6e8e374fa6c62a01ac67aa6d28b01f4d92471f83691600ffa3558d919179854bd32554c5c9ceb0fe0b6ef166ebc22c6e2293758fb3c9ab1fb7b9d89d550f000ff043b1d8ff00255ebe6fb1914a8f82f412a32cf057489559d94174a4af0192755764d807a9a5a482786580c8b85752588b8830bc9cc14a07652c328380914341f8a563e16d30af609408d9e73b8311bad260dcef148a44543a1627d860ac504855fc743ac24305f4bda2c1c85763ca909adec3356cc4f242eaa6b99f74b9e22d0b9b1e8847996e43a469ffd117d384a3f62bcdc2dd68ce0549a8760f58e5a17424672a277f9fdca8d787c186db0a69107d2641c686e11640909c6a0f12c29078bea482b09164794f408e7d9ae2597ec41855a1057af4a2e5956e151217a4e48d679154661c5946c764275b182a66ec36cdff4f548941a5bef4c12c7c95656d8c4fe0802dc07351f65164c88a65d4cd2ec5b99382f7b8458dd273c5be7939da8264602819722f09c1df110f902ff193a9c7db4dd689fa30dc98615af70767a1a7ac898f75fa4012a059d7a901223b39e1c5f151a3bea36da3d5679f537433b2f2e3c3b7d6629a99f80ba8bfbf3604bbce7c3b531dd159b7de8b6dd5a9cb57c1128724fc3c0bc825119a9082b407adb7cc966c1d616b330b8336b46f96465ed3cd28099a94ab9fe99e7709fce2f925e82f41ef51af77fef2456cc4276ae8710389796efcd586ec8e19edaa48b0511dccf2d0c25d5612511d38ea9a0de7964e665da291b4ce38301cf2b6c63ed2b858eb96e9f98d05492675028063cbde53a85cb3b5e15e8073fb6cb9d28c3e094995e88f65373904e0eb700a1a5cc2d822aaf51c35c44151ec2ef535227db114352c29539c3510341f0056b1e90d56a550bfe167a1a0bb80c1bccf9140f0403b122ecfc44789759bfb75b8c4f99aa61d69bd0b5ece11250a7f945e5afb0e51a124715ed62f3d4a30bc631631992a10e7f9512d7d2db2c47630b37fc432eaf55f353a26eaae395dd391d4b8b99e0bc3a623f35ec19b8ab0993059a769b9f6ae0cc2a6397f0e4072c2ba58aa27d22269313a1f1cdb149a96ef2912995002d33f3530918feaa1e6c2feda1ff0d8317b49e1dbe4106790b02212258ed184bde866ffed5653003d1abfb21e9d934bc56210b1030b15a9327968a76a0d334c62c1691130c0c81260f509acc09511706cc686a4ece65985fe7075d440d0f250102fe7451db847628589a48993ba3281669a35beb236946bf8a3796b449f39f1274575f5cdf39b3239313ebd82fec3cf8edb675ebfb94f6bab01c1a458724efd4a74d23daaa535b4a802e974a7626c5bd158d19f25e10524f1bd78ec4238faeeaa4e292db513a6d5c2ba087610ffc4002c6653f1ad2daa13d0d98ad1b42644efb64eef1b96ec81883d50f35380ebd7c434294f53a1db19399c899fc6d587ec77a2827b1d4c8000aa2473a706e2aa4b7fff1248b394230d4f9baf9e0062fe3e30bc843d9eb3c392a9a943f87194cf2e771e824b0041d8aa809f25e51d987e923a33d882aa14b4149310dabc2b1fc433ac8a21196307d4ded3254c54911d27217073e99a712756434820da89f40c812579c8ff2c25295f0af0a87f903a39a4e851012197f3a56ea4dfce8064135089b480fdfe14690ed2841c0ba5182c97872228308a0a4f918655cc11b29e5db1f61fa676a333760e466bffd5b5af7a1eec32444fe1b76d7dd6c6fe387d3eabe9d24ed496f8d6709411bd065174ceee7613f40e0d89ca3c1946a4909bfff16bb89421442e51832e49927918065bfd0204d462f47e0f9434c2543680bc6e43d553b490bf5a65c5c3cccbb5499abda7341a8e005d7f010e6a4e6760d4774357a39d10ca3298c7cd994aee865ef13a2ce88b215efa6a9a962c5915e8b7b33ca6740b9a70a20a840e2e9f6d317a73924808649919b215812d096067090eb005e8bceb7eece57f9617ce38cbc736f62a67a41ae9ba1b0311b17f2675a03530b8a69a1cf7565c1424b6e9a3268925217e55944a7136b5af8ce00e204cec515daf60a47ff1879e321636a7f133f45db979f08d5cfc0e22e01bf50f1d98a57e65a61914cbeac6afa86b8d5df0de21db9e17fc45d1f5ababc80650b54f510751eaf8381057daab89c1bf0be9c59b242ad3892ae04e8b72674e36e225be781f63e5e13a57e3ef2c97b91dd80ac259bd4bf7aa68d20fcc03e07e4ee4e32e51f10ac89d3819f7a048e94dcfce18ab04590a1af8e567db9e1051ad928d438023af6eddca11fd13eed792cb1160f26cc3d6c842464f4064162367010fc6d5f0f797d7ed913e3d74f0629939a368a7804ac664b025b40fd5450bf7bd0e7ca1c95af49d602506ed6f846065c1831623123fe2acf2cb01ddb95f7aeea711abad71561d004e06669a9acabc315b0dc7a5368181008a08d1d8c832164bcbac3d8f13d0dc685b04f9c72a54f86dda055dfac4480d7cf9daece09fdec0cb5eb14623150d34163417041994c617194f252535c209647e550de6037c12e84918bd3956450f70141160c5c7802b4c40cb00f850b785ae4ad079d7f509191b17e8578339a846951a9902a550cb7b9425f14dd223fae949130346866d064ace64179dee9d6cac53c9d5458ec8e9aadb3836fe06b971ef546b3326009ef503f7021dc5e25440398308d3de52d226fd0c3f2992c629f1359145b7521a33ff2e5c6994e193e205f4453d3f429177860747330f1e5f4a5d394056553d6bc20dd3ffa8cf0e76775695deaa8386055b1adc22ee7ddcf6722936dbe1001591e87b32e04bac2fa1f4404a678fe8f7b0389973a2162f51522af2e75bb1d2c2f996af2a5d434a325b5587957517453e2c05962408372cb272418c45c19384a10d4be2a585420821c5d8cf158d94b8861792937f81fde0c162d010a4d9692e2659ec5b49d423b94055545d77ea42c39d60162c0a00dc0c131191c3df31560249979d0976dc9364331a1e7415072e5063dd19835eda2ffd5d4e27c85681e6202e1e0e36bc9f3b20f900fd6f9841b7ef50a6205f81e36eec216220783346af2d1ed506d0b1b6220b85101c5e927c430ff560476306c9eeb15b3906d785db17d76c4be6c4a8ff58264c5acecacf6eefb54745c89404534de99a8900fe0995dbfefd1ef739b24172076ce6840097f058d8b91b0e07c20629fa2801048d1872dbaf04e506ffe0518f16c1ea0a4d2e14aaeff1e86c200ba019388e74670b0bdc55326bcd5c40f427580ad39cb5b263396dab62de3b5d1f428ba0cb9168049c1cf512e1c9c0dc0b28c012100ad04f278679926337b0c106e2915ef310bdef9184a32d45bda967f11795abb3a9eb489271159d9207c88d494591b7a067547a17bf7f22a499f0237bc20856f1ff26e19981f56754bcd5b76c3870032e5c160742346491287bb602a82957fa5f13785b5a36db8074a0a9250d8904bb299b1fdd1af2798ef43d7715cef9241bf590272b3e56068342c0221c6ad44aa93f379dcb032b275ec12cb520a1101b0ea69e94a2b195132c789b3af379df3f27f7f81e56c87384a97cd29715837c708439ed17989d4f5d9ed463ec2d3220a14838cb6aee2426a90a442f4605eddcc354002fa3a71b643f1107f3da8cbaa7fe5b8fef94217f6d86d547158dc561a9017630bb4cad80a07c035a3f2bb50aaa426b1c8408253404601634a5c71dfaaeaa6a4c9e20e93b4e10f690ebf24d3bae539b184043b0038b4387ffb4d6d0db19c59b9e932f15725e5a4658ec42b32ef6fa5f439497943c2a0965503a2015a7d961887f35ec8663245faf249cd469556b8a087de9021c5c93a5390a4f01959fb001b9b34e10b4f319324d0e7e9d6b4245236a1b24a11ea44223b4bc2810b586cb44ad6638b52e13c4d0c6ac6099f4ad2537d6aa083e7cb3397c06dbc2c1985627ac536b841479763b450dba39ee514bc7d44728be0ef82e42557636fcccf058a00a6482ce9199ac966cde9e92b82577d1745f31e501c4066075df7d1687c35883c01bcb92712d28d7440435a8210b4d707ff7c0f9e77229f08ba3d87fff5c2c36d64e5b724f6009c93a03406043eb341b895f47ad43d177fe01d8906e863f0dd9a3b6814139205d172d8a29fe7d0283838eb4246d1573c2ac0c1009db7322d661baf60be7e84e1bc841d13ed4b83ada78efa01c8521ce06990f51ded676ccf22fee283fc9f0f6338d0fe494cacde1681e0389a716d074b8e620bd032344caa59051c500098d249f01c683f7b7d482cb59f7a82e7b955b61662a0ec2d54f1caeefb765422553de583fe1450369821421e3082539cbd807d996a2555d3d635d173743356a08a535e11c1d0e3aa1684002b050abf8ec5c2093a902c0a087e1c4e6805350d229d4ffc15c8cf34f22f02570d527dc6ba5de594667fd665d173afa2e08affba3af336522971c4b7cd655f407a1758b06285a57698b49eb48c09845ef85352a3db86921355445d72ac3dedf3140aaf0bd5474edb5aefc4278d3de4c5166ea69816c5d7eadb0f060b443afe7aa86d240edc5c1a5b0f31b0bb15dfc738c1c7ef774ef693c8086f0d362ec2818af3b93cd61e1064833a630ecf22121289c045e903690b5f843d243c7db38098839286b610943d0bb2fc14c9e49fdba5e11f76a714d7cfcc3b53119373f9fd66c70f601cee6394ae61862c51bfe3237fb067ba729bfcf92978f1e59f42f1a2016c016c1259f93b379a1a263743b4396c710a24b9bef00f219e4d1aca1ad4cc904ab6f3e11c11520186d20b523947ff43f889513c40bb75b7a61671e0b06d984371696760b35896aa7b4db61c29f783de3452c000137768466afdc9da9df55fcb8ba30730b00001ad526d9237bef62a4c641aa21b6e1842c92e5a783046cad83a4fd8058d46e018e3c34f849662c007238d8a669b4f0a1a8f678a9f1c02a5c5bf796fecf96187a49b033856c317214753f5e1e7cfe3d6dfe3b5e7a36edd67e13b145f1217a16eb50a4cc050d27f42453b1be5b10dfc078b428f6c617cd1f4330c2a38592fea615154db8a431ba33473b4b663347f7c877d3483b5631d3175207fc89c41ab07d0218022aeabf0aa5ed3f854b4607e0d82fecdb1b800b4c6e088fb09bedd8e945ad6c299ab441fff1065c8e864383cfc421b01f71c24827d65780c5cb8986248c24d4516890b0149829021b8108fc65da4f99347edeab344189382878f5742e3716abf3f8ac15ee5cb33b339aa647cdfa034dd43ca8d30c0a4caf76ad1d46db51f31c7497254b4b6057f556d08020fb3971a88f8c3bc82e48ee94a215559c149cc0500b1421748507a33d087f463f1d00a903906ea1cb9287b2efbf56802aa83e245fd23422071430682b660bd809c08a6559695557dd7e513b2bb6294deec642712a45b4cc5e3cd39c5f9aa3e56e24bc2b5b634200b65984f5605fc436f7ef00985f9d8d4db10209c740a40527cdb1357c1eadfa1dfc08e98c8b368a3f0063f448bbc755e86f74cc66dc33a63a7e36a931fce3fe948708871a019e1c6ce751584bd20e5fdfe95e7c293ce903f2da2284994d8a11cf0b10c9956b4a5e1fa687945a44978433f3ec19255b6defb5cf20c63ba74e9c79669dd1bcb7d45dad0f78657f329b605251f700f62c6cb8171e485aee88c0717aade6fa0fe66d0b565b406d6159d54672443e4276ed8d0f003e7873f57beabce75bf3ad9a034d3dd410422582d843e670d10eba8758d63899c884dc28f06c8810a827351530655c1b8299c1f9600e4352ca88d6146e2744806d9157a4552009b484300decb4f96ba36033fe0ed6cd2223d641a23092a31e1e4669098fbd192d8556ce9fec514de5145c909697dc4c21a6e9fa02d0ceb9807911ab534ac80d2b82350289b951500b8e69e5ee7f55c699a7d3822d59f5a358b305a023381e3f4ddefd0e1022737e65ab67bab66220a1593a87c3ab2ef3d4658f28ca7a2484c892f301a9dac819eaf26bf2168a5bce196a77b7840824aab7aa45b4aecd04cc5925dfbc6332dbc36b934da16c197cc63280f0ed80dc07073f40737045220972d71ac2ac4e3495948da1614e90329c73146a556795f7ded3a602f544257db3b048c0a4dbf6a096cc18dc58767783b3e2c76db645784fb26e912f0a9484e39b0bbaa21fcff3c62559f80501c28ca40a276df0e5d1e761010fc889cbc052aa112a53bf6ddc10eb8962987fccb9230be505d75572a75080530b5f34a944aa561c9ca59c1b89526e5d869800cbee9587a3151b09bbdc961935fba1c0ff2b1e5612c41599c5b357739be0f1408867f6a4ae00fc91ad9a7f7c473d2d01914131656a84c8effd1008f4b076da0f70804fb2b87c1f8ee0149862437a8ffe6280b50d55e3f8049bfe5f6c90b54df3511b9493354d52f8fead4fe6f37bafc959b99f6d8c426b7637a0ead3be0cb50144e151f857a40cedf6b0c20b117d1723ec1b91e02029c432e6eea80055e410af1af33c24f0da435499de1bc0cdf358f6386060165c2d9a4a59b86783a166e7b4b788e8c108b83855b80df1f5cb7c313da80d0071a3ad295c3fc222b65ab8a3eac64317b43a4c6b1a3d44edd43a1faa4482c24591cacd2e1a84c98871e721ea50b985c8a446558490a3b6e8c01b04a26fc4502ef9815a828a40f08288aa684b40578f4cdb2f54565cc84d2a34e47ca9ab2cb6c9b1249a360681286120464f1559d07d1bf27122121411726f56ce88f65fb7af9f131916b5914265ac6c0be688a6609c9a6e311ec1c06be372c69641f115d4021222f5a8a7e87b716493f9e58954d296ee4084fd7f4678eecbf3f8ecd9bb6c5c8e4d81d86d0b4d3a0d61958be847b438c978a03197824d93e02a9d63aad956081f7d24ba930181b8d7a443904af34a467a9559663722b6bfc9d77acaf64758c0014662615bfdb9399705c9dec2806973a45619ba92a763349c8f104e8cb892442bca22d6c093e22eab6df70fa13a69b3dbe063f6f5b38116596b87e39b3d002b85520467ae0d8e58ce657f623e4fde62581b5d845cb1ac0fd3a3d041a1aaed44c21247bb370140e84f3a1bc4ded5a243198f19429e468d59592e636951516ad5681f1b9a66b6a0e5082f8f9bdb2c75005b27c423d9d91743498d390b09643c32f60b308ab5ece475e95cf3f4bd6022b09c85a48f72826cc28254a2d4cb96d094fcb3b07fa48e73cfa9015223264176d0ef39e03f3bb41a0fc4adf574ed90b1980e8e58fec50e200a9d3d0b9505628141acfe97555c5a0748915fc17de3f905f0d83c410140ee41acd52bd4da7ca03659a415124755b965ee94dac844c1c68ad11ad2aa149c4af6739ef511b6e0ddfdd805114e619044438a2d851a755fba98dfd738f50065c14b240c05340806932586f9de40d2724368ff6de0a71487c5c11efe1f876c7d113dcc816e35331994c3a3452054639ff7daec078892a6033b1361f4cd0b0834f6e1e1fbc0c7c0ea637c08365b7a824e19cf2d9b6265522ee6ac0b9e15a58f8fd5ce44a2cfc645d14b91954b10e6f7a503cb55303ee86b4bf80609b855722a7578dc27d763e6702673912ce70155fa5bb9a9e512dca1f0f831864d2bb0bc4482054f96094ddb58568307acb15a30f09894b08a102f2db895fe1a121e299e537005a221f4cfde0452d2c6835de60a027fb072b516cf120c129fc75419501aafc4e884a3a730496e78deff208e9d4002eb4d04e6438734bf276c06e0d621ce2d85b4e690c91158e36494651d0da1a909869805b516fce9d1e0c0197a5e4f2011f34a3b3f45c66914271455fe1f15381130da07c95565de51d38c396b15a9347f33ca3131f0d27384704aab6673ca079fc6fd01ea7ed4ab22966222b60de7b475d1e7e4060dd5648eef404fd0209414e5eb1031bc100582995b3343d6510e806cceb87f239363676f6799a638a9386196cfccc0b85a1cc899cd0d1a4931e61ccf12d10e9a9e011e4825666bf4a881007c1d9b41ac1d7008bc42d29a9f3844062b2ffcd498cf87034e8180535a68f546e4c85537fab89659df65955dbcb72c074fa5c0091101564f603b4df202969d60300634e37d093c8d6e367ed1b418e0c372d8cc025e4d75a58e11437a31e18e4cf30156752c8c9e81834764ff22be35ad699a2ec246dc5cf658e483031e318feac2476eaff80028ff5cd58c22a6c6dfc59952b7e58f4a8b9d9c5f56799fb2cf7226809ef0e20ae8ef5e01fc3520cab23a791b68c1a4ccf320ba11b8bdcbbe74022b65748d57073d710b9b393f1b0b83191e9ac7dfd1d80571a19bab9f415d7148f26eb9807f39a9f4efd8283739e9b01c8627b2993ed72deab8fc899c584bd584aba3677b6bb43095d6eaafd2b429dc1bc4e96f7dc1e70772175218d2da049be80782606244d339595e0e53191772d2eed89b36194cb4a9dc27911c249482509862c00a64a4d258d9e53080414bc5720e4b337fface33fb33eeb476464eeda581ee252400d387857232c3e30224a00dfa9d78cf1e19ad91c81c3cba74864f069fed743a2db78ecf4d4d34ebf2c6167d628883926243ea03c08e9bda0cde158a6850339e0c8879df0ef41a48440a825c739cb1983bb35b88a8e4611f5b09ad76e47fcb1c0c6f76d060d11664975838747b56e0fa7a0320bc52bf21055b6083c69f45271147eb5a23e5b777c34473327b03597b7284ce64a39bdfd837f5c9fa3e8869a9fedb796721d3b9123757c23e145700e7972de1d854be234ec867ec4fe161895e527df582ae0e85eb838edadd5c696ae7eb402b9a59aec6733adaed6a86725812d0c5545b3a312d1f5cd7ec131ca14eab1441d95bd14cd29320569f83ea5a2c0333e03a4085e20315b5002715600d7e2422417ab3ef76288bf3aed8b4f00185de28acf4f0d55b259a3f5da88d3812610970e9bd4c9a9cd5ed7f8b69d25099f5d6bde3da46663931533932495d04ab0c2755c4f25615d17a031a82c4d3e7428a323ba90f845de98460794b2b618dcfa795e218de809dfc1ca4d476fbd6eba668d199a58f14750054807cda5629f9162e561ffcd7f31564c412780d8f91524e9beda445df9ca486e915333f339fe972b10e4f9087a6b020f0be0190aa68f1752088f74b744210b8a032c413f782708dada5701d3cab2992831bdbedde3598d0723f43ae63bed2a2470972771113aab5349e6c1b1a6b0eecde90916085e7a691c95785c317e01b1b5e8a74a136f4184cae8d02970446cdd36f7c6e07347df0ae1ff17dd981969a15b399cf1a0d4ea49e6a6799106cb06fcdbb27fa0406e91bf8270124c4d6cd686d8c11571643adc2fdac12a794adeecdb41bf5c35486018b5afa75c0219771cbc6d7b112bec64635ee5c16511b601e4effab9600a028e584a585041f4e41a1b688a4d44dc1e41648014083108438dfdbea51c96a63b9f2a06e921dc723ca81d781dcd489103872ea81b33eda70744f612e431287b28b3572a8f1bc3a44d26e23d30844062dced4dd95494697ceb9c267961c83ff69545f1450f7599ae40b0bd574723e9082ab862e9cdf2ecc202d049d6d13e9c17609a9f0451ca80094f2c59ad87414aafbb09fb54435c5c3af45aa3b82bb0d6ad38c5a42e757e5cd99e887633fda72ed45f361ce81f0ed973d42106cfee4d1c3b6bc5b578c17fd20229d123bd2cb6a4151cc2fe3044f001518815df200155adb2a6013e71c56355483f732347502e7cf873b8325beff06f1b288427240e186b9eecc0ee8a557dffcaf8bd4aff81557996165aeebe6b1c7815d19adcdffbe8890807c4b59174ca466936ce852c222ce040c9c51db7e2efec7723d3b795643062e7efbb43d82b0851339a6f77f564fe21fd320abb7250dad12531b4482d662063710509fbd56f9096851a65d66b494b48accd261826d17eca16696c6be1c0c8da90e586d112c0000ecbf0561458700ccfdcd7e8dcea0d13b016864d448c6c91e11726fb2bc442060b222b3afd6a1a94425f54582dbcdd58b5ca3be5c1b22271528ec23c8ac39bfc7e394f9d5a6e14826199aadcd34b6b55af4aba546a67089231bf0c25562a774be10131ac3ae28f6607d1f303a65a2270f64c209edc751a6734ed3a870a161d7e227fb818c92d6970d462544d6e0af23a68b052ef3bfc7c1f4a80cfa1f226057a75cb94ebe0f1eba37203d0e9358fcce8022360ea5ee4f0c24b4d166cd75e71f2291b0b14482c3e09dbdaeba00a6a7469ae1b577e274f1c6b09251b84f0659af7b05c1db1b3223aa01924bc2fabfdb51647dcf08c4fd3fb9bfe359a0de7e7d7bcc01d0d5e0e4297a204e7f12439f631ed1ef2003f10249108f19b8afc440528c50e9f5bd22aeb71acdbe34e4e1266f1523c923da56c4c9bb83983a15d2bff0287c99a3a824c383dc382f7b993dc726050f462e030cd68a5cd4918c3a22c463ac801a54b9caa22d8cd39974bc765bcc5479ee4e04036fadb2ae00a312e0bad6d52a3160d4ad752a8e4fa9056677b4c8b523f375ee9bf7106290c0322b2fddcccfaa46c40ba37e14b89d17e8c733bbf0c57581aa97abd410cc93dfca2c55efc4cb5bbb2b4b041a5912db32bc5349da8c9a104f4faff630740b952a74f4d93eab8cfd8c79e85f26831f0327f76d1d3ef092ee4d646a91285ac7bb9a3588dbe8f91c1fd42c27ad8b9bc9cc56144eb5e4af99e56f69d623a4f33e9f5ea065abe7c196e8d87ba8012ee4d85976c70af31e1a706b6d1a53c4e4d6db41ad451532bf54e0f393358a779a35678103c4606f661f9631d80b31a1f2fe0eb193831789f14adc5f87b38847717bf679bdfd47c5e52e9bf9cea658458f962324ada419d78974b89abdd7d2f4b7cdd63876c63b59534acb757acc61cc696934e2984c4ae60a6d5ad668eb66a724d5585692b2ad1500a43318c65e4ad2ad89fada22790f18a337f796f4602cdb346f644af9756f02b9c057eabe0e2e052ed6a75ee24fd2df6c13a3b081018904d0d83d631b141895319d3bba6f3476beeddd2770c7afeeed3a99bbff5e8fd0ef49e5262fe152d5264daac06c39113898a7940e73090e635bf8cfb3b99f934548d5686562392c8ee58cc6d5a0117d6957381beedbaaa76a8d3fa891e9e5c90047b8386fcdfc3e942e966d1ff964b9cf404f8d0af9d7a51c1f7f0a05a33923f564a69d0e47327fd60913e6f1aa2740689b202a0dbfb1e9a9c5c100fd1c8a81bdb653c63b71e97f60d351d19ba587196e33add1d581694b3498abfec5ac0c6a0bc4ecc0c0a22b4dc63a5e48918c2d8656139305c2599efc3260d4afc84d0c9326e6d17fc9010f54db97d18c5c1c98e93212b577082588f2b73954b42068332789c66da713eab53a56463f3e9879f94e65ee9c79489c07aaa80b7a12fbb756b62f95cc22b614601da7743a0b47ef49add4d95df02144f3abb3c5d61901d1098d3363c74ab6175a0b5a83744c44adebccf768202acc963a0d882ca77971c57b6b3c003517eb5e4dbcc6eb79fa987b8bfe16a62c3fe91496f5e16606a0078725e06d83d342a40ebc6da853a109a9fea10bf1218f34953b6c1d7ac1e1137a2ec8492df01a030f4c5e7ceaa4c726bbc203a4a23e942c1a6860a8241e2143dc5302756eb0c0e2c251d97db20db5dcdb902b32d29c3f3d82acbd28218a99f2da4c64ac66914956e4c2928bd4ca938b68f4408ac3b09556583a55fc6fba6083543a227c1e9e8c736c057718d0cad435da201207c57b746def6f5991f4a98300bb452808618f6d9a48c8e2f78340739e5482dbf42004386edad5a2ed202612d4ddb4764c72ecff688b036d9f52b469b79eb417be611b0aa82ff4b8a53becea5efbd191c6adc8833a1e9ba3f61e13f8faa470555f885eb95456a24c222e62727ad510f2f33aa314b583bda915d3b9a68bb403de49ff38fa89b863ed863711d4dac63eba328985b0a7243d55d6dd2d3aafe3ec4380b0a67f926bdc847562309cd14d98e59ab655a17b0540430e472ab5a4b3e39b469fe216c428947058c67e64f6a4342f65f2e980881c6b8812583d64df6d1e09a087d74795aae9b93b83037219f2004218c5061e938609d46a8d4d42f1dcf3f91c395723f51ae3000232b8dec543174f86ede9e7b474793add38f06f78ecebf9e3297cb43e38cfeef413faa90011171802a5421819f1b7d77aca0ac056cfaeb7de7743f141240acf7c169690332cc5e0830b5532d760c98a54c05a6d90864417a42968bb09b2c1d4d86fde24e7161668526aca28b7f82b13ca4e85b9134fff5d99a14007229bf6976c15231122f1604c6f1e496223448ede8a4e4e3a9bdc1dd0a9fb5e459941a03cae89c155c2061c77f297bd9d2fdabfc9184c4fef024f6bca4db31286ee610f2f43f4b6e96ddb40632278c6f76be43f8ec1b3a280a46ffba638b9a937970a1957ee32f73ccf1fc0f9430abd0cc58d0f24a2898b1b91c35dced0effe88e1404367f2a5f81e561948a14d8e09a49ca7ec38beecd77265fbbca0b606ef1621ff6c5cb16300095d41bfaa816b4ad9ea4f67e8c75367cad1955a75e0507dfa72c37cf596c8676c365493a5a3deabf9a74faf57324c7bd50d7a9947ee1c960dbf643ccc7ae90c05ea85cfe4c9a37f3f62baf2c1f49281725e324e7c88c65f9673d94dd5da8b2f5f4bccafb0abda7273bcf8047b3814f5549808e661271779d231beb830297e5378a26da9c1c24e9dde50c396322ecd17b1d9e6e155ef13e9065e38ccb93d57859b6bce5d71eea9a2b1813eb06a3754393e699922e94af6d287f55bb6bf681a98a34199ecc5c3c521ef1ff93aa1e118ea982561fccd5c0f72e32e3dfa974cef7a8ae23721972cb5be498d4d1d54e0cea234a18c69e8fd75f9897c79a074140e9b2290fafb2a38e94c0c0cf36ee75a7503636ee666bc37346b705ccc56a67b9d3ac601b1ad0d9fe6c33631bbdce4e897fe15fde6fb308cbf8b1906cd04e29a1b23ecefc2ac4978e51b9be32b276d6cf312c252f45cbe65a821ec740c06f4e4792d7a5d8e52b421ff494542ec44617c7e9f21cc747145551de513c248d0edc8a7de0aab410680bf6c671a3d6e0d1c749bef0ed6d846c77539307e948b4a890d128546401060dc84273289161a1b25021b9dc200bc481ee2d39bd8bdff821d638f8cc23f922d575d018478e2508ce8581689001524f268031d97903b125541bf658c32ad16a52e8038ed43375f33ce7d3486eee8a0ff6f11b7ee56d86101bfdef3c7a0d512320a9d7c741167c565ebc95c785efe0a941dc67a31116347cc28448c7995738344e8e817620ff3e9e916b0c0af5b8920f88c9a1c53daddfd2bfbc298459489447d0ad5460eab29ddd81c3a2a01005501c108f8980b4a4295bed249571b89fe3c4761f86b3e4844f700b389606bef026b2db2216c7fe7c14f248ddb97047dc5d04fa8d45c56748914422e2dc93d733f93c08dd174293cdc4d9e29f3eabb4e264798b6fb9a746e5c1b54923fe907e1fd0214da6b44b34e8c4c8043a3a6d6ca2b6c2b6d8f9fac3776b2fc7798aa930865921dfdf378547b6b60c4efb24e54f57212c0ecd3e3b87bf7ee324ed2af0e8e56292b641af6db33f562688a17406d23b57e40fcbe1c3b23b605db0a950dedad83e2c06857e47ba171e5ed609a4bd5861d36fd48421946d2cfb5d20306f6cca94fd5eba596579063724971c1e0e6b5136f53c6916caa29428688f17f9750b50e819db017db23805a4bb0a21fde370486b818728f17cdfa4278aa3f9ebcfc364dc89ce1b4151d6d691e2da850512367879e50054ec819e5f18989c82917646905fda0f20b39718b2340cc266290a62bb0546e8abc702859fa933e0fe4ac8cebd6e8bb934bd534d54537902e2ecc6c422939f089979e2b4a9b8d517b0409c685aaf047a874f1e58161ffec1eb87787a0fd6c80860412c25110b8e59bb55bfb4321764fb8fef6d10490a978b4204f406a730577a22daf7e0774283bad2a590300a7d909b8a46d718ccb16ad5534828499fc7e6aa66a12625b7620e7b50fe695368621ed4b041a16cbce41e153735221d0582ea127891d3b1db20346b6a698597fe5a7875446d0575846de7e7bd74c70b33d81fc3a1b4ba146103bb92099208860417f3cf316d068f9404bf53f06542aef9059d19bf3a2ea585a0d8da9aee62608713c9957730f36f337fa298ae73f4565e01f558a9d6c513302d81cba08746f04af42601d461b425c952334f95465d469a985f621a4c0ec2fa273a02801915ec8e93cf7e25c4f65e508cf15d52be5c05a72e9c75df1cd241c88d9d415b6da6cbb5194d201605f9c4b1473a36a2be6ec282fbe23760fd88d808bfb4c9a393781d4a23fff01fe924e02ddac109c8013e75d056713d0a4a717040906928c3f94ec448073914ab603e9153210159f68cf40b8026be86b862598e2856438855cc2b0d4eb63e5b5a80dc4af2408f352882a7f930249a9f6d5c2905bc65265fc12a615bb5ce65c671e9f743a90f828678c578ab5b93774bf99a08bea5cb47e671b550ecc4fe16b781bde47fcfaaeb3c98ae1af0cec667b8e595a1320114e4f45c4deee7fe646b73f97c054898b006472c245a7f872453412863de859c047b8d310f41b97fab3c5fa15020d5743e16db9869c74e76c16270202b87e709640eba934b3580bc0fd227fab9fdd49edfb5e11440e65bc6af5d96000b8e7fcdede784238e22872c2670299042ca159825ab9d8477bc141f17cce5a373a9c88e56c3a7cc08dc979ca63e782d07d7db23ebae8c4864cfd50d2d8f194aea5e3758cde00c4d414434944e4b9b95e59e2606acadb27dd12ae827b1eb9de1f8defbffce61cfed82a2cb66b577e4cd23107cec9f923963b052a877adb94ef7862eaa6a861d04cb822725dcafcc169bf126686e46278089b01d10bd54469fc6252426738d6a35bc0a0d22e32b273d2a5c16924d1300ba4aae1bab81a16c47b674c0d12a0e593546134f1b2ada71c5b909e43c0cf4ed489da554405d00b11163ee34449c82a63287fa19222bdb8e3835f4296b560678d1faeaf09cc612d327b8168ded8ab5fe5ac08a5be4663911276c8398dc13abbf1c02d35ef8b0bef4e7f2d3b1ffa9e80a6cee843c505dca6aec46a6ed47c2d5c13e08943350c6fd5d26d49589992102c1577626d2f066c4242578f22f8f930ae73fc7146b9dc616d18cf71ef1a8c988c220a59b5d462e3700cbb2f268b0c3d5d9cff02d4d09562e01f1fda8dd552ccaf4a69f1bb49884ed93d5f3c886089ec55274839527070e1860ee81142e42892af95e0c0d5ab958e73f82baf95bab52df9733009b868f0d95c36bfa0f7f57ef43f2632da4ace091f9aa697aefc50b27029ee3728ddbfdd6efc98674f6856bd17b3a097f91e3d81c75e701652695d16d8b1d0770deea20d8af990c09b81d5725d1ddcc10d068f31896396478058cae33188cedc229a5a66c5f9630babef98efae6246de309b8eda845506f0aeac6cf105debf6fe82e419c7861bbc4cd295adfbab4e70e872a2748861ba3a1a7c42ebfcd255aeb5d730f2d6b3fde87f8ebe1a9890cf77e8b8523827481d5f8330fbcea6e118f0755bbf0a743ab170de3f0904f4d1d00ac182229bf2f00ba45512d01733a063eb52764266cdbcc25f4eb4c8e59e1c7c3380874904a4dafb9b69aadb2f304230384fd24c75a6c2cc7ea71f30490053426fd9f63c7c0503de978c40df6d29182e81b1c57fc345d3b14769385f6f218e5e5030ae50711c761ed7b0f6259cff2389d041810e17b0ec848087648e45a67f10a3882268f5c52d586b0a2222ee3229d7c1e4f3568dbf36e3cf9609b8e1044ee137d0d530150744e1b76b7a9b785c4e2d030f78452e2c3a318f65cd0b04085ba8e6cf3c5a8a6379e26e02d2362580be5cb54c19b9085d2314c7095db35d85ea0ce406eb755942c88c4e96d8d34c44a6d948bbeb615d6fc97a1cb37600723ef110df189cc047298d58225190bf452cdded4b7cbb2c3d459dd85086bd47ffdb14154eddcadf19d8d35a12d27e84184d48cae3a41a43ea803ba52dd153a21358a3ae65f88cfa74987c3ae5cd5d1420db5b8507ec07f0d6dd9a7f81c811506a25e731c2e462ac4a8b7ec4566e88d2a75845bfd8b70485cce50ac965bbc34be92dcc27ae4b1869c8443dabd780fbbec02eee72ad3d5c30e0be58b050bb74383f2801f604bf89a47da88d0c1a4015984cc45b0ce560cea31f1580add5436a0a968b354e654147beda206c49cd2cfdb9ff3387413b7895c8ffcf3943c3d3fcdc15fe9c5304a0a10c50b134884ce773bd39391a8421f2974a9813d28a9c2d974d501154a2d139a542df10398044e5a885d0de72653a4ffb2132c358df818a9495de1312bb450704dc5c52eb941ae55c0050a6dff96224f2385768b52904c64aae1896567273ee8b442939ecbf80027391a81b0275523ca171acdc71fff5f9947009efdf53604c1ec9251f401e1890ae436cc51361d1b3c9fec20f43ed26dec95c38b648110e51251f4d46eec749965a21b59a89250bd4fa6818bb9b23f8d5d6934fc24ca73940d7bcf110914a3e94839cbd5388bff793e2c2ce08394d478a904c8ce84b96fb3c30c0e39ada0d41f2af1c6c6805383af45230325e33c9ba542c2d5b0062ff5644ee3df84abafd62b4ae3fae48bf9b0579dab057f85400b8f57b5d559f74bcac60d5e149114a54d2783cb9372852415231c69da794f2658790db91ec5ff1f9e3e7171cc24eaca04fdf4319aa97222ae0e24c459266d422f904e93ab091800349be6e5546ce61c6eb3647b93428585e656127783b502f2d6d789ebedab2c46d40c979ee7445b9804828d5df28215f2cc46e1af482903b0b5e471053e68af8e953d059523d19185956138dc563bfd14a8742de7c1fa7a3f26ec77b3479378f91b01c4aa9f25ec3fa69046224cf4f0c90825c7a19af3b69be42ec2275b8fab46317b7b1681bf09809d997e4868b585863bc2216ae8ee2e0b0123ff6041d6efe49387d0c7096ae943657ca61824cafbfd84ca41eade3fd73f679dfb4d60f11e4491807baf5e6941a111a437ca62767e5c71552adf175438603004d86aad774020ad111552c775a0b9670f687306d4bdc876b2536b2cc167e766bfb5a0017bb5977468607420f640b7130fa4e2c017bc0c899fcb8484903ba752466a64c54090a03e1941f352ddbb765a20350364a474d1bb2a579226ecbaf179566709916c4c13feba5b46ab53c5c2cc0c546d030a2e1a715c30145a4d079e0cf72320485758cd1015019b0c7f69a74c0026d1f8df92135b16eb3546ecd1db878856201a7fadfaa247cde7c7e738587d30f0b5b1d49dd5b8d3ee9b3ef65fb5d92ddccbe37d7c3b588c4476dbbbdb965b4a29539201b306bb06e00633a1a9439728d274b9eb59a8b0f3c291750a698446d9f533c2f1ba1e271cb12bbc9101ca508263bceb65c888f134868c183fd3d5ef021b48a95f5402805286218b5d199665ff4b1412bdf087232bdfa04b1306cd84ee4a53c7875a4a324a310e042393ad643d7ba944fdaa4a94aa4253a7ab3c51858a90aefe29302abd44bafa7d40f242242848d9e71215a246d9db5de906c94001e1d48959dbb846fdc8b2e90efcde03f1b7748f429d3a9f1e3fe7f5e0b088e7efafb7e37b22f3fb382edca8775bfbaa3df52a7e748ba31b79fb145a6072f7d7ed75d7ad794b7823dbe75060e79f3af2b2248efd4ee0ed5c04532e5a986c6f508fd21f4dabf5ed2909980a51263848e28c34274a4dc177850cf6b358f83ed89e0e9343e1dd4649352886879e737a07b1b6592dce94ba21ce742231d557054720b9f6edb7a0bf0d67b23775041ea9ed76f7e87d691dfddb26d3f61ced4c4fbd1d26535fb06a76763b9defde8e4937f0ff34e1e893697e66e647177a1d581e701b641ba1ade46e2b72b33a96fb888835d4dd48fdda7321e839643e460600e24bd7093628c08811802792e60dd2860a29fc4d28231c71a6d1d1a197192f382fa7d3e9041403060a608d4dec46060e4a56cec34a05303503ccfa008001781554d05e850fc02b85170d29e58c211c3a945d69a98162c040c12616bb89c9888560e7d05a2ff331bc87f91a703ee85db8e80f82bee422d10cac39c1a67b1460fc8c29fffe3e046983c6fbcbd3cd27397546563ec1fce8e5cff5e3157fc4198fac8c51f81167d47833ea25eaa59c2d4f842b3b89dccfc4d541eaa5a41183dcaa9f01ce781a34eed3f8192f9c9b504638b2f28cc508db88dc0fe30ac72b0220047218e17851086dc239f313c29a100c6bc0ff1094395eb3d89cb5d16c88f55ff320f8bf3df83533c65a6a986fa2deda64229a79fb3334e0fc1950e616386a59261cdb8a1810061c3db7923d4b1e9b68ec2315383a2cfb13a19bc8631311c9583391b36e6ca21eca63131125654b29934b5147da6766460699bebd5bb53c5e3bfb01adfb74bb4cdfdabf57bbb41d4ae331952fe775df8f33f7f7e51ae4728ce9f17326af0773bf71986b53bbc967409d3cae33eae475ee3a70bc32637086d31339f293f177ff99bee33a8903d6e92d6b38deb79febfcab69b6d694779405f7fd068e3779133d9a3dcff33ad0fbee1b1c6f72771d2843092e523daf16a9f9f4d5db717a222d7cf1c517f9e4819d3bb0334b5ed1dabea1dcd462269d5c490341b9bea6bd95a104bb521e6f56e11b2b80b4f1d2f2520abd943a28fc8d528bdcdf7d6a0a1e29a78a695a2cc60089d3a749f4f2fee22fe128246befc2149a3aaf542897c6fbf80be77b5ae4f18e78dc9139904e482772bbd24c6a595254545454545454545454545454545454545454545454545454545454545454545454f4a23a693eb99bcd89344771e7c84fd803b9eca27a7f946441f5fe52da48fd0cabf767b5bcf7f22de0cba7409b572f7f7ad47bcf752fcfbdbc84605da1aa684453472302697e99495e0b520a9c2d2b54285d5ca1aa64f92a1f64c98314d87905cafc525b9056a017a640994d194f9deaf2fe2e6095bee589e4cd2a2fdff2fed3073c902ce0f79f475eb914a86a513dfe97f7542faaf7542faa16ae73e6af2c5318df4bb166f6e44b285df4248e4b96a88cf2ac76f2de0ba5c401a5a99b374f1992c9f340cd0acdd9bc723447cca56080c739abf8f49da487e9e9bdff9eebbc9e0f75fa4e57b3f776272fecd7be3b707ecf3e8faf7cafbc9a3697724499475e8a8bab699a912bb87f6ab22beb25ba676b806693c994326ddda5d504b67d5aa964e588b2b912f599922b8edcbdcd5cd5fdd41178fe068eac7cc3d1cb3879bcd676b7844dff01f519d2d6feb6d1ad73514eff2234fb77a9fbdc7612689e35cd526abd1ecd6a954eab996c5a2cb79ac6617b2da556d362ea5babbde89452bb5ad6ace8cfc69629e84d4d3b6099a56b271b4acf99736a744e593345a158adb7e16c5a2ce93975ce0e5faa49096323debc32a573ce5a6d26d879332141da972091f9458fa573d39a560a3ab9afd570d78bbea494389acdcff0e36eba8329e5b754e1eeee3e8f9c007d8efa3c5e5d9a119e362f1e9074132e90886149919a6700a52fe581071e6e90aa7fb7edbbb5bf73ead0d4bd2fe18b9a72d0a0d4b7a8de9f2659fdf7fe1404d2060d38bfbc3ff58064e1e59dc97401491ba87f2015987a1468f397faef57ab542a158228b052268d026956814ab3969953df2a942eb680327b5e59c9fd2f538032a3c0ce2a97a733153a7109bf07bf3089020539d27499c0aefbef31eebaaef3e9747f7cd1269489b4d175a6edeb7c13685fd36ae884fea44aa723ede3d5e4c43e4714f85ff6b2ef065937fe335be0f1ffff8b38e226f7e397efe8dd1b22c135bda1c9dbde932c74df75cd42ab69f8fbed9a66ed5bfdee375e9060fb38b2d729b8cbc9b7df79c74413a9dfb573f7f6b5bbdd7d535f3c58dbd1acd6e57122729ac0fb5c4f0d79707f41d3bbf7637bae061bfeb86f0a6b48b9c803ae7f42824731bb94e30d56bd76da2d5ac623365b484888eb401e4bd8b746ec531b3692fef117f27e6ca1d3bb06eb18956d6b23b061be857dc346d245b838a58f3a953d70ec25d925d2bc176316eb5f145f3c0ae044445dc7bd73e1919478031e6f2672d1ffa50318080c313c60c8cdcd0ded74185c9456381c90b66912e24714bb5fdb8fde159100226a40d2f08f61ea0cb949388735481c26bc426963be7d4fb2507fc874798fa4e13fc4a1c03e4317240e13b0ffb8f3734495239b15e44bf4dae74d537ef4f1b14dedc3f135c11cd3f87abd5e2fb72198adcbda6fa9e3a38a07a4cb7fbb280c246b20b994fd07b7b4027bd75a123a489a6aec04d15ef64d6f8aa18235b8cb3fc8d4b9e0d86523f2e81edda37b54a3731d23d3e56fadfd76813a2b4714d1c8a4c2e3eeee5398462335646bc391e2c961a1b1b209a7b6a7db76411b776958482cd6ce99041c7ac9458e0707aead3c81c4e35e9e17e810991eda532dacc148fd1d1d84fab183fcb6a4868a706111173dc7b521ee4f2eff3d47bb9e3abb6b70eca76f3d1dddb20ebbca4b68c4457f555843a7c2f1b684acf993952718eb243deb00f6712fc62cd6bf28be5e5ea8d3439e9323ac1e63872fd363be9019de883e79a8e8c6d5e9dedf478ef6b4befd8e4d9dcec64577d6ec59ac1d8778ce50080db9955cf4b0b970d10d70434da7eb52b995c796731d904ddff131b98f563d23a59b436f119ae90e12f76f1023f774705636ad52da02f8703188e76c3ce6bd3816eedcb8f7e5ed2722e9d31767c15b6b28bb6509f00cb43569d7ddbdb59c27eca2bfbcdddbbdb71f709ce45e3e373b0f94e9e1fdf75f387edcf7bdf61ff75d500e4d59c151e668d73b6426d21dc859cde36e473fd7bc1dde7f7fe96f5e4fff07ee905d7b7dba2191fe82bb5e68ea384f87773db7a7a3f340eb8513b0af715e8fb763eee0c091fbfb0dcedc8133b4c4b95f846a2052ee21966596997bfb3cde73df897476df66b76d5de97824f79b5834348df1d270b3875a162c899b524ae79c6579d12d386983b64f2a658bc5f24e619c33fffebd52ac19a0d3c65d5eeb9574ba5319701c273bafef2383cc71d2be9c3edddd41229d27bd32f3479e5cdfc7ebfc01c8f4985f7cf1c5a4791a9a16e8e974aac91c27bb39479f5c2dd85fe40a8e476cc8f5a77a3d55661de3152233c3170690ddc32f32473b77597d6c6f4f525db490b590480bd9eb66539ff45401cf3458bb5d916948e4cbfd3ea6762540c8c2022c4e86b23481250857c890c8528425892c576610c51429764005161b64816181a20a27b23c21a506586659e48ee471d173fe7593e70ab89e3ea75442ba94524a29dda70c384ede7457e2c8efda91b204b25343e248185c94e38d2c7ffe8ec4915f03857c5d949112477e8732c82983514a295b4af961511016eb87537a4096409c281f6992e5d84f0cc9f20159d2a6f47464495fc945ae17dc7c984fafbbbbc7d48865b794f53462c0725ae782039edadd5c9280c79bc62d52e0f99d97802d87d779d463752d5274cf9eb3e7eceebe2098b3c32d49a5a4c2753b131b1c0724fb4b504a19c426817f109694b2a55fe1babbbde5f523b8ee1b0ae87817c5d7ab1330efc53b9cb65aaea3258e0f2437eca8d97d47d7596f874dc9704bbc9e8c20ecefede990150b8e888efafe3aa88ef629e9e97dba1b504333d38af9d64c17ebb4fc98e2ba9bdc35543feee8c8fc78e3538135bf026b7e035bcf8133ff819e5d402451b6d6b7ccfc04914451d1d07ccfd5fceabfe75cbc9eafe65b6abe9a9dd58be657af7a0ee5f5a868be854645739367be7bee39ecf57033df32c3cdb4ba54ebbbaff52dad56b8c96c8af909b29e035ffe4312e54b8148a2ac62de857b4e06e655cf7d5e8fca4505b313f330bf7aeee4f5ac62de2566155303265c712cd5c7acbeeb5c542a71f5aaff3e9797efa5a54a7d9ba985fb166f074733e75d0a44bd0b7e992788240aee9e43f5c77cdf3dc7793d5d77d72f11fff71c8731876dbe7cdab68d85648651b83799529da9e3ea74f7239c478320b9b2344d9b3a32871f01f7dfdfa4ed3a6bafa659d69c3dc4d8824c261795651745ca2e9a945daecfae97ee72b95caed18552ae972e974b29bb92663f555a5cffb99a0a6c8a501150b2ab9bb85c3f327e6ca024d9f5d27362b842d35ba5e97239b5136caeecb74be44836a82ac984e38d09471cf3ab2a23aaac7064b11ec653ee12ba7c4b38de96174803ae2460450243bba057f20e4c1131241869ee512ec97432c7667ee7e05945c1a35c5abae21349b3407f4eca459e3d69f4e8932d113dc010ec092c08a220aad24f8c073bc8a354dac12c8fb28b2ce9fc231b9e98ac052e48aa022c612e5842769b254c0824e451c6662dd89458cb604436fcc09e78c0e6c64d8d0e4789948ac190a022a5e84a8a44e3b8feda45e85682a012fc34ddb6ed836042279d27f9332432b3fd0d1c4dbf5dee65e63237bd1ea6e7c29133cd374d603eb55e0f356ddba6896026821fef7a6caf6943e6d39f80066e2fbdbaa325ed244eff5b279387e7d47a67fd8d871b32015616b2b50f175ddc3a3b6911232e16f1a1752f032b73d5ebe9be7a3ddc73dde4a8e93b87d4b41f405cb4437cc830c618cbc4ad6f773739e5045859c8ec59a376b5cb353ca76b60cf99ee7587f36d4f9dd64edbd55a5b4d4ee8bfd83101ffd0426cfac3452de8ceab868b5a5022cff62d78fb47fb920a1e3b7fffedf6e64ccdbdc9649ac1c471a6e979e3f1229d655e98d9fecc36a4c1b310fa5a38ce3c67f021fac9349866f031fac944b42f720dc71a7e7ebc7357fb7316a15fc4d62f625f7040ee275243a485dc12a7bd02f8dcd0e7f1db342a9606d264080a17a4699d048649633002d259a6990c4171b193f4122117690553d9bd9e3eaa011ee56cd2ceb32073da97de91548e28b465786e2c40b3109fec03e3e9eeee5a65cb701c92eb8d8b9ee44e87b4d4008f37a69fc36289a0dcaf297d55f89c56b42b2ef6cfaf8adc2f1fc7d1a6048f3060c8a48d5b6b6cf864337ef864db0a4a388e5650c27104430643f655093f99d7f3c5b4251c47da92f621b9d82b28699a56634351eed76456c0fe193f70da124de63a25785c61052569e3d60ec68c1f723fa74393cd64fa30649d86e439230d711c499c1c701ce5bc8292c451cafd3c13c7516ea799a1975a33d2c64c6e9ae462874b045121653895e9b3ec5d62c6711c97d2fe76323bbb46ae9dd4063c2fbd49500a5229d2a6b4fddab98427a5fe74faeb39defa91c6ccd7fcc87a0ad2ed2f083e5803d28033600b94d225d3236f3cf2168ea7cbe332e148230686b57ad9c2517c1a8e34681bbdb4a030f76ddfdbb7918c514c68c462b5d1aa8d5e1ed8d987b4d88b4aa57a1f9a3a5de82f439bb7bd3cd79e176af3a5b76d2f1ef55eb6edfe28510173ca251c69bc5c200e61b830ec1fcbbdfd1da9d3bdb59d7dd37cfd586b3f6dbb11903aad947b4a1bb9ffa6a474ad26730f1901a9630aa507c1c311e7cd144a2380361c1df0594340d277a42dfec1d5367aefbd37b5bda66d37298bd526b5e175eddbf02a71f3f65ddfaebe32ad61cbc5151356951d46e2f863c155c7914f2d924c37956737c35193471453296d84a28b37609669bb1b9e3a37eebae20dd8867762e1e40ede9c8e6d5f9321bee1953430c0fdf46ed9d239bb1c51fa5de6057ff7290fe48a9a84f6e302b9c286d209be6aec5c81fdc757d294b015f28823b7679ae9dc2fc61f78026f178e2c5308e68de606effd79ab10296d9d55ac88b49936fba87c553ed917d396b42b5f9236d3665f521378d49692727fcc6b33ed8ab6a455d19034998bad2d35a12d69b315110e708003497385860b1a252aa84042fa9ae4fe9311b004345916321fcaf80d5141059216ce04ff065e93a8faf1f364adfef4d473163c4943032b50aac01468ea91298f4c71803b6bd405a370ee246e3a4dfd931b9ca1b1f7630af9baf27d29c17c2fea8e2d7f67ea7c9f6beaf43872ed80220adfeffbe5fb5ac843e2f0809d1e719f8e6a5e70d2668421cbfd19e5fe8ca60a30cd6c2594fbbf58fe62df1417dbbfa39a9ffc19c5e033d264353f55f0f8d5fce4fe98cfc873fc75b0835f2cf753faa9008f1f938f898b33d46456702b13a1c934d975d4640fe5179338ac2a5fec338211c4757b8147b964e4014180c050a4005d278f24ee5f191d33d36ee237bbb7a3734b0e38c687b530785864f67039bbbd7809a42507dc1ff61339b1dfb5565a6528c11b7d222df4dc79b33662f95da9907ef72c3f14ac516b90189e0579d11f5fb45279446f8d70ced9123b320aaaa00d7d891ffb6a33fd91c5dbf8e8b0a43f66b25872eb28830c3e32c8d8cfe711ca5082a9eddb329623ca1542431eed440775bf8177ce59439e9c0db0cf39b5364dcd148ab993f4a6f2bdf706653cb9706499426b932f0cd9de9aacbd2a1044a20bb19d1b9a0c924a9e33b86122b729f0e8403e38d0d469264c5cc46247c2660c0d8d8c5253a6c040400ee4e20c16180aae03b2ef6ddbf7a803789432d9ada3376ac31e42726ff79c331cef7fcf7d200f957981fea4b31b7f0f79afd1da6d933341e9292ed24aadc68546e8918b301759198363274132f4ddeffbbed3e9de3b84f7db7dce56938d8d07fe00a595f6fb777a3aee9d264d2693572812ef868f0786241f3f2ca5dd167894b2fa3cd6d2d41601593e27004e00364c6d8385ed060e8dce3963a00368a1de989985562449d46a035a8ba07fc3085c9db45aed6e26aef34e1f46b5b8a4542f2b164c8c4c6b86a6e6c1f0041b1460b4c2300480e89261cd22b862c4bc28be5e3ba0523d21868c4e5e513a552146f14db07420991873b26ca3196d646464d446da09a1cf40a370bc17b3fec39771c3fa1a9a1b9c954667b32b5df53d96142bcdccc499f12263730433825c40e0fc81593a8154bae87b604a865c699dcd663399199d9436549ab749578581409edf036f9a0ccf0053060d9a4295381603f495820b75cc7ab009ad1402d092baa2150015504768c9a850a393d206bea9ae4a51a6c60adf1156c8e9a4b4719a378b981c9dbb59094b2d81bbd8c6c0e8ec7456fe092349c5c85ddee950a1aea964973a3e438154880a51a110079fcdce673e63f90c27c3783a583b02e00460c36483858d851bb7dec0a1e118c08f1b2a4b0f8506e459731d400bb58519597e4b9ddb8d2086e3e972742da14c9f49c025eccff1f0783ddc6702703d9d5fab7136400f6fc0606704eeeeaa60b8a582814ceb68fa7073e709c76d5282f46ab6d2efeea6d3c6bdd84e67497f7439a79b4e5ee01716451f907102b72c6d815555e800afa8c8e8805f8e58820a5a3d0ca144860ba225191c88acc868414485680a11cc5d3253cd562225f4df73260e60443d9c5e374b98104ac8e3bf989817fbbc7e9532f749cf9159be1cbb9c34ab5826f6092bb3546ccc73faed9135b24476c8fae03931df6f852c50359236ba8811d5264a1689e72c790e0c179ea352aac12c09a9ca58df5f8f3c078ae7acbebf32f19c97efaf3e54212915a8fe2c5df11cd5775f1472ff4b2877b97fe7860b3c7c0081218620438cfc003909f29c2596c990b4213da7dba88f3ae63953d6488dcafd3dfbbec2452ffd0025f11c530d0aac6802032c7e4890c4732a0fb9df879ca8dfa770302a2e73242b3e6b9f1f62331e9834e1840d86c8d175043f40419ed33f97788e90e79c7c68e239df10d1349a53e6d18c4dd9449a49fdf38ae7bc64d4f74f2e5a7e80a48d2017caa49f0e79cee422f753226ad44f619ee392fb69cc7352df4fa9d02a321fe3f5c8c4c43c8cd71333619ee5f5c0b07ee5f5b07c25041079f52f5ecfeabebccaeb79517dcaeb5179ea5dbc9e94cbb7783d2e2d7f5bbe6b710114b9e5515e4f0b463df67a50f83faf077fdf9fbc9eafe7e479df793dde4c21775ee4ee39afa733793d9c29278a94bcddab51cf51010a10b29565db240505499e4ad947a65d80d8e1c90e4731c861c7929f1bf4b04304422d9802881d3bfcb8204509266506affe6aabf6d50929526c90728223a40029017b4c984101d6b86825e17b055645128e7042468663b2841d7134c3046665093b62a8358469b2841df1019925bc4242cb0b9c92c205b89525cc081a3c61c493268c18411e5f09233ed07202c31861c608bb443103c32f31192b86b052c409bac0ab2c6145e0209305bf28b56c805152c41401b7e440660944bc4008a3b284113194a70ecdd1440411214404130d64a5f0bf8d786343b38415fd90c77f5d0ecc23f0e5e28e942f979556b9f3aaf1aab1f3da91a128e56b06a1074ecc2aa369d6dddddddddd2bf65ae78d3873da71eae2bbb3b3b3e3eeeede033c8ae24e4e02e68225aaac6aa9aa85986a54a3da741e3c58650913e2893cbe7e46a164add5b4aa85a3d5aaa6d9ba139a208a936c913087a4ecb62fa4ff878bdeef3e40203f81b894524ad087fb0ff701c46db8435f3fdc0790e9fef2ca44154956a69042450596626fd7f4be8f0b02b9d7faf801e4baf501c4524a29fd1b1453232182522044942c7c106f766e747777bb4ff7ebdebdf9d6cd23d2ee6e4ca7c084a8419e77ce1f5df66fdbb6d1cd37a9853be2ebc68d1b37fee845c3d7132f21a4a4a00785058fac1e35d3af99863897a0e5bd3cf0c0bdd042761309b0bf7b48031400e1851245482cd101054b862085093be420040d828811b143104c862044a48593243124115891e4230326b440c2a20b263b684207792456b96207265892c40baed4a0991450704cf8a1499251961e4c100259141750a288104cd144131ee042891352f000a9490f29386a220539e4602549a9054c2cc9e2074aa86003499ec081073e1c217142c5145c040104f48a1b41000141c413511431a57e20c56a5128945880ecf6028f228fd778431eb1dc5712c70b995793bae841340c088e7e9656a88b2e7d4affae8fe083247896650559a660e9419287c1288125085966597278d95064f1b662960504b32cfd3205e13bdcb25d0a30bdf265440ffc27090c124020842c0dcae79a4e2c4122b252d1451886451ef92049bf6d2b8384e9c472877446c1e231f81e27f3e5cf196e10c09ea886803d813d813d813df9ed629c62b536308571f028610b74a02d1041a67ff3823dd1229bb2843db19247fc52cc1ab802a63862034980c0028b2faa072c519ef59f4011ba5044409dc98e38a90ff5879c2a7410850d9a5042074c0c21071044964a576835a25a1daca6e40a09962441b2d91ded062d99d9699980965e136ca6a1c9327138705d12af0450a05821ef7482d347c4a41f0ec195134ca1193481f2cf760336ebed8aaf8dd5ffa2686df3ac86a84049497cce171401a536a93ed4251975046d71810b514a05aaee5e20ae159a3a3da7cc22cfa73b4036ab1c583b245971394387a0dba884edb844b9643304000000e314000020100a078402a160349c6892b0f614000e7590447a663a16476110c328648c31041900080080802122234323550100a0a01354234944ea6426047f5029795026c486f402bf64237c443e6a31d17dc34517fed529d44daaf72e27144bc86303cd74299171501cf86028524880360263484c4045eaa47e4b80e2ee17d552b498d4ced50560adab6c25972c8843e127eb1378317a76c6189ab055a399e122f671fbf70db7d4fc798d7d9b996cc830c301fbdd4b83d38dea76d8a5e1a2bb118bc42f2ce3d013309405ddf81e77530892c4c6fab1a9893f45f82e813707f235073fb776f9af853f0df067c10dafafbffc9e042466abfe95b528177cd1b70df270f93bf05a3b7e86dcb19cab958b0dac9c88229852af613666fc93f6947882ed8cde526869161b037a16833d74713656e346e82d6cd876d1c1f79b83d69eded4be5c40bee8dad11711d2dbe496d8ac2475a56a4994e1569368b37c02b4e61be10f36e5c70cf8140709c4ef31b2efc260222f521ef4f5261ee31467b0a24c53f6589c7b6c262757b40f4fa19ac1047f2ffc9e9dba17d890816816b19d51400ac2f844e83169cd7a2d57dd076277b7e59ce16ee904b60727b1472d0449e360b5b27b23cd5ee0f4c5ab0cd768c0c3571425d1b69ddecbeca017fcdf859b5c2107f22b10f48f37dc1897f8855b1b9d82b13d56928d00613ebdd7de62a8bc6b7a177000685ce662f55102512cce8ad3457a54227e726bc01a484ef263b4bf78c8a6526f0fa6674af38694a6f86721de22845c5cd40c37f38700c34585680100251dfa365770c107abe28eee20afb21847fc3c319b862c92f534232c71746c86333b7717be36a5ae1e6c0715cfac5785aacbc2320feda023261acdedf4d59302d7d42eb0ce133d61ae3a8abbe732d92fd24228961a1d685f90d10b72f0720f6573ac8b157ebb009c03c834dda7123e0e627f965c93d6ea132a0c42baf9ecc757ede8fc73528a81833825606f14e12171e5e9d10369a79151bdf70cf98204aeede143c60a70ee9152463e0af3ad9c03955a0a08d60c9b2dcfaa6f9df2fba15fab347a4091c54aa9ad324259a685d0458666b72d3b74200e6eb5c62435191b25e155440a77390797ad05e175212624df48275fc97e40822e0eb70ad86d54c24972c9da599c65d2cf5aff4bd14dac28376405d5e6fa9f528fd0b466a3a34a232e45ea266f649bbf310554cb8db40196427411e003a20eda933c25bfb03050c766d4d02af442931e11a6f386299d678418018f3465a0d39be3cd77920126e9d8cb983f927e85aa79f21d1d28440a53f54df1666182ee38e43157ed1485ff8a7944fd555ca8df4aae9d79b6fef31523ccce4b5bbf8cd83aeb69946171b67f3827b0dfa39f1fb655a35f4ce7f08b986bf40b42b55ab840eb121b1c1cb40fcff09595268285ac6512b7c9103b56901188ad1299d492434a45e9c682c09f56447cf02bba802591132a72a1c5f7c7f884da11d735f4b5adce9e21b4c8d7d7b0b5a91a60a4509089322d8ce99b553847d02b1a07d384d29aa3ff7259b986ca57cb96c046791bad8680cc18bd8aa8bfb1f0ca19fb339c25c86d68b9bb805a437703ccce85c07fd03babb50826a58404457140301b88a2eaf1ce8593a2bc943b971cf7123147aa54176ea5c72a78bbe2cba9f57df8b9d6a7fc36b951a9f58951086ff23471ea98deb3741ff83d5a3e2b850a29fb21abbb20c303e4f1c65ed322dfa4b57c1c01705c15e17d231040306534f507b26316f423b3dff1751f34be890f775d5b5c2c414c2ccf490b8bd98ff9580e022840fbbf322aeb89d3144a923111869c1f080c5bd194fb9db2adb1fe54e8891e681fb3f42870e997696a26356bab79d48f77e6b57bc14cab996df8d64008beed0174dbbdd9c5f09b6bf8a9adef6690044a21daa5aac83108c7c85222c7caf9ed52b19b01b3e1282dc8135eccd6ab3ae0197d841de93b253d099023e973676c9f62db0a26c6c7b35f9d4cc42c5fbd62c375b0688f5057024220f16246ee1764593cf005ea75eedda405b3091d04b9904a65849ff156b106cd8fced250ae5dafcaae5b46128b32c2487a52de17ca5d4f36bd0287348dd574836821a27bb827c51e4f3821f69fa8757f6294e2a3e8582dfa2c35cea602696050ee72f03e70058aa598824558dcce5dc1569442b7cae0fbd4e0b2d9056670d63eb43ca3738cf4875aaee30ab2d742a293a08d579d750a3e28d87074e724f839308ec7149d457937fa3c17ce850418534eb5f580b3d9aeba8d3438cdf526683efafa1e5fdb07f6b5e63caf34e85d5ab77c52201be91c154188e7aac9031481fafbfdb73751c86a4db9eeb1a6c59b48cc9b186f525fce1c24e4acbcc2a36439d9fa2d3fc9b54e8857ffd48e5c62ba353af558b9558b526512fe7d708822c22ee85f3d2ed3230981ce7a72be922e3574392ebfa363d718229b1760b107ed7544c7c65737597ccafb02d3cb8ce43b0003c306875cde7daa25ed8f58246285e1d582466592f3c5eb9f94d7baf4a56234c05d4445ac7c40fa0269d8e1e34ef739f65745801c392b2949c1aa2e046e2c9ba872988a18f19ea21b0784e3d866e3fb782d70e911f854caf031b21182276514f8c4be50f915102fbcd2c1493c69de092892e5dcab5c6897fd98acab5ba061247f2000f8a5d7878142592f89feeb8dbc6d9d2cb1f0eb1965cb35ec31b5011a4fa136c2032e26bfb51d2cb28422ec208603eb8ee8a5fc20451484cf0210b5461c69a1aec36c80b2dd4a29769accc95239574a790afd35c77b1f99c81afbbd817214e46ac85c63b203182adf1e38f78081a7766f609ecab4e996135474fb7c0979ae25e425686b8938c871ff3825c7296264a287b674eda6d5fd0b624c79d327f26245d752f8505c8a587608ea3b115c121bf9fd48217e94faa585129fa5c0c08debd0f129dd1f86570a7fce649cab2594e0e376bb11967814b6424938021b8bd703446506b1cc3622cad822b9c628c3da5a76ed7210d4ff9a3c2ca10d03fa5d63ad647ec13ab324cb3eac105f34e442d6ea0c07b91b45bf54e7e3ed9323e7e0a6a88406589bf3ab75855d2e21982a0e56e1477c2ec297f5c9de762505d85e9cdafb3fd4a9da5a7ea3544be7d74fcc04bd9092bc2713e7f44f578d0dfbb911cf479e0f10ac01110a81fc0040b968e932da472d537ee573885e030404eb52f1b62dae0c1507a85700e99926ab161eab3e09c3c17235fe9436c81a19b8267ac75e43f4e70e1008b9293da0fefae852714896a60ffd53c224ab170acde3d512b231d1221370a4f2abc70b56b49ec6d3094f08e2054e98447de9852cf0ee118a239b082bb5bafbb56331c8679319162ea54abc3d418d23f6bb0e21171d0dcbad626535e74cfbb9f9cf9ad36957a2896f29fe7d5d58799dbe57a3fc7bef1d59bcc6a2bf08fa71544c81256567df846d4d7fe537f7d9efa0bcf98e6f7afcd4abf3f909f9d16d70e4e35ebeaf48bbafe47a340c5b3c8f252031567090c0480823229caf19c4969b01d0001b61bbf4a93dad49a95e8fcafe0de79f1d19a18f578a609b1fe327d2212138f3c3d028aa2d6966bfabfc35cfcb2c1a66bf07e06e7de8e021cfb06dfc9221fc2cf7608f2b6fe0e0375c46b7ca281b3531d2e88b14507d0962b5c5d1d4057d71f4fba64c6caa5c636573a53f63ca39c61ee6e4c0156f3ea3436e2bcd605bed34c6d226870b5427efc58d98764719650c739af82cb5bb822e9d3b9c48ebe4d19f9bbb604516b9eac8048646be45a64cda972bd1517d5e86b9a1f8b6db3dbe1abc26c137205db59c9945f4f98d6c8c1477f29a3c6526f63ad671fe9d7e80a4f95c8f64e1fe2b30feb747e1c0f32188f36b52b33e8c4910aa3f284bc6a99a207b63d1b2f4fc801439d807bbb486dfbd954b8166b8dcb94dbb8fc93a7245b136d4f4ae54c06f0b2ad147d32a15b07c88a86c81901d5da8d25273ef018214b79ca9a8b37d26e268fc28703c399df5314ffd4c79c157899f17218f85c09054fe3a23c8f86106635f5f824fc29839d32f1a36f444f9163aa57085be4d35ad88f0dda3740e3a270a0141620379ddcaeedeed9adb87055aa39cf171eafdb9e415d8b005056fb187a9beb398ad8de91ec73e0808e43a77aae4e95d0dda69c9b41e6c622b7d57cb04b3bd82cd5ed79f3cef4378d118c36d129789d70c8601183c2ce3402d1870887373a18568122385b85e965eff11c7c4832d2bd8cbf0d4e8164db0946f0100c8b007d9b9ee0865f1f3b8e079829cc64717caffdfae81b7b1a99eb418b973a48b1182e6bd470ec258682bcc07b8b60cce65e512afb2d362b98643fd74bb6968bdd2a557ddbdead26b5ddd131c68079d5eb474411f6076244c5c7e97a40e132c3ffca6fe1e755af8b722f5fafee5287f5849acf898bcb34767bd81dd8286d46b0e6e868af9e9b57fd3774edb6134d117630c13e57de9cab01107094b25aafe8f8e13aef55a019aefe10e31e953af8f3e4af0c3f7284654c9a22c2e13a1730b541bf87772f682060008ebf59f210c26aa9eebf531a740f385fe3b215ee3ebf03dbd82b133d6e0cd3caae87fdabd7c88b51b6510c747c15c7e7d89b42c24af86dae85d04e7c33e69f7b8c8db6a5be93a0d7c8515103c9668df3cb606ddecac6cfbdc27fb23218ce9bff95803ec38416f62320befd2dd39728715184bb2509047bad66a289406d547e15acf388475829981fd5d72a2577e28e4d77b420703bd81f99eb4a114b076b5ed5927535582f789dbebe326b92826d90f44fbc2db74f50f8b3ca8183a63446f7ae179ab56801e5f17081f2e13fc6bd6ac71750a44909475bcd90eb1a4f8873161701fc1aa01e16ce330652595a0148d0c4d35dd8843390aebe6f337b70e82bdf64c61d1034763560aadb14e5fc92a20a36ab01827d1957fc0589228ab65ef1aac7106011fb8a1db704be00a410f7053044b143eb5efd9d1f97158b7fc9119487b24ef8cebb010bc74ef314d659794b08ad44f538dc5e8ba2ad495d8b901857f99cedc7c38c5cc37e191e5ddafb283f7f62edca8447aae5a4d5fe16a501ca7bfaa5667cd6cc39875cb50f03b1adef459e77375c8c0c34613e46a446892eb7a64d5b87b8ddb7dad59dd60b644fbaccf216c5d4a24963ba6874517eaa84bf1b6601400cc38044ad4b5a95647706e54d412929abb29386d81aa2b0c1d9929a6cc888de58b9b42df454a90a5b03162a3b5f07e18d8f28b9384e079ba70ff66c0aee83b9b468e2726b579668d8ca559f18d1999a10e94ca0627ed80628511fb8280a8a379651552ca35dbf28997cbac5f7ef641ac4ba35e2c65edf8b925a0b61ce5af2c14b04c83067524bc3834da71a07c6ac10847141f3dba6bc9d5bd7b45dfa3b1325f55a9dedb38801259f19462cb294553f7f4e83cab765cddcbc04870cd090d3a920f6bb44723d96222cebc044222cfb52dd732b8150b2c73340859a8d13eda13961d6d45c96155d5a76bc009ad8ec3d5c9d8f171ff8c32321b699f828e1c4903d37022580936e48d54e15093ae142a75e171a627e6d62b02db7f1c8820f31d2bbd10fd730471ba2c7049f20a7d2d715e09f1fee1e11abdebb09fbe1b8d80c12096325299c4734a21186455ae7c2b0365ed0e2449b6e0368de0976ce2a86df4032ab7185b0678e1ae39cf8a5e9a043a03bc408802d64907a8b4526e82f6835a2457c7342cbaa45ef482af32fa4f06145ae19ce013f3bd14d5a8913ed1929543642964c10d59efd4b8c4387a47d78fd094ac1299ef0cc496109df66e6e1f80897a86dc3d0d36d5e40f17af3c6798acce8406a103bba44522221a5f28445c441e9d2328f9da2eeee4f19f6ffd3852ba5b95b8cd381a7b0ea824f8ba36f66b822cb4fbdf9eb889a5b45b41e3184249b37aec82eed36e7eb7d0b83c08962b98d9b435497d925d22fb3771b2ac636c71311647b2ecc89d14fc30f9e3fbbdb5fff7bf4d6cdaf85ee3c961757ca09717a35660c25022e43ebd4288142c56ecb9e713824218aa9c74ba7ca3512d84ad77194600a88c26aee9ea8a4310b3c50104ad03c27226ca4ab18bc961bcd1900276726b60683a4146815711ef685d0b9faa313b02685e2474d8dc856c2699284a1fec794047ae6991e2d72719d7462f05247fd518b4e5805400293a2a70613146afe49a6e4cdc7cee97d78aa9e67a51e493c6d5dcbcad1e9f41eff2ba53682774137c06ca856e1360100d158235a29854731ecc30e2e58664afdfe48e7ba4b97d720e04150ef57a22c209d39d793b73d0f7b20d3e066b8fff7079c7c76502e39f41b688e4703c7e21bf1f04f77c9e8604f8735e66262671730cac22ede0391df20c2332095383a7a34857423209891bc283774647d4954b01dd6c67cd312cf2f2804e3cf247bd09b8ef8f0f346e2ff21e82ec71d5e5d9492f6288ff569e5f3c5907f2487b7824349bc47f29b14ba745623c1fb4a8b5b23fd7432aa0b79c719234b9dd46478d60c3234e8898e39055681ac3ff83e43091104a38993da18fd3cd0fc4476c9379def811e56b3b5a4f70582c84901853c6655a73d955d5bc1a1fc838575f8108bece2006068be4c84a3e88a6894aa0665cda82f713ef95198a0a25ac29cd592f082bd06f1155125d3f5efeea7a73ff611592446f1f2c5fc8c6a689641640fcd52d89fce2d60882ae8a43d0edfcba99aa71938f9b73e153ac1a9f40595313420dd5f17ba9a354078c7c6c9d3b843b5405c71df2bbb2245525be3f9201f5a6fd7ae3c51a3119fa3a31b563f2a249cb90f1e06ab7e676ae4e0a24ef3e7069c8742d65d509e13b46a8f931399139f1992443e50482cdc53f1260932576c61c997a10365c5b2ffb15f1600ea762eac6fef4e9a61d769e07a0f6c1db08769a34b85097e5fd73686c44f72a31b6a44bddcbc5dfb8b7bca44bfa5a51c1c7aa43a7365d1ef56bc23641a5b7c8439360bb5542b721ed4533f8018ad38dc297f59cda7a99afbc39b395c392c8c7710d7df9ac2257b359f06b86356333f48747668af192fcab5d3ddfb1a22e593b2204a293ef1d6115b681a79a1afdecca47f15abd3cad80ccab013661d661baec7463d8ad81a9e9982ce0a1af115c1eaa02d610e914a17a99ce7c4c1985b2608698653b7f2aea197c79848fe6c48ed13064ac825ee608a9312b706940ef09022ade52623319ca3af90a34fb95d17f0704a4cad6f56f27b0effbeaa632a853f4b364e25b0962c52c63d891dd1024a3c1ab5decab3732c2c0672a5cf6763559e1be46d024c4245ab0e7b3289054e2aad790b05a3088b497b150790387f3ab250dfd40facf1c1783fd5136018d0efc4d2a61889248acf323f3791222daedd552521d4a8e1be57a03124b61484bc62c6d23b9f4881554f4d4c1c26fc83988b501421b10ab5d6e2127980322c4ae3d258a6449ed0c65a9ee38d5bc003ef068d154536e2ca216fedd787638be95e10a2aed9b5e966a1e526d3b44ace40e477d51114a78204b8fa027ba486467cd4dc78c22c730ce313d8f4c6d6aca1e5f91b81fa98434193d5b11424a17c2033e189ce712a69a436023709403f4d9be77f75922aeb0b4dbe65acd15213704d6e537a181c8306ad48b836104a54a6ab750a2764e7dcbcc350b204b5ec4d59fe16b3c26c77a2c01221411550a8762ee77592a795a013dde09432583c7efe5453890fae092d56034c17f8e6c95f74fe49016ac98cc0c8c01a67d60a08eeb775d94dd30787241dd7d1908afafbc338329fc5869196fce3be170535a68376b03f15d37b65da9d08ea3bf51c1384e18bc40c0fb68cceba671cfa94e0b5e1881aa4b2b56c264695e2922487ed3732b2af049185ef2248ffcbb070c30b443c4ffe53b3d4992056ce3dedd0146d52b030c1fb9073a8305b6370d341dc811e6eb1e93b6a38a6068874d917a1ec6f42a96aa31a3a8e0d751beb92ba130625a124bf8f42a650466522048cb4dd0083576288b3eba645e74b4c705d40603d6bc37842e58e87ee025b0ea14fe9e0882dad805170afd3fd094f1282bfc08644fd5d0127aff131bf30e21b10a485d0d0cc7c28a4636d8fad6c20fdde14351469aa5538b7a44a7be964356cd31cf143182455dd402989c51f07515c54fe37a3c13a96cf18df4c72d384ceaad41ea713caeb720e0f61b93584230dcb10d6636f1591afad16c553d18cddfff83cf1639b9509a5dabc9fa6d8ccbb4fea565bc1536d47a55a0eb9599fff4727ec298ec5f56a0ad945c2f2510cc30f48e5c5cfd328f60f175719f0b90a8185cf3ea00d34fcb2c65797fb156373c51ae11c5b3f87627855c56627cd6f36e2d2a16db58c8fb5a9d32d1cec48029862dd77f9fffe34d6e37d891e654f0c367a0c0593f87c580195c05cbd7d1d8bdfa2f210415e0bae600a6bfa8e33e47c20df883e247e468e900829005876cefd0c74172d89634f98828ecfcd4c76022b857c1f74557364a52b5461568f095873683b70814ed2e6b6a1ba0d5e97080d65738ff2ac2b012f543df2a1ecfeb82980f3d4f0cc718ea5bd22023699c2cc411862c82238b39cf86c1f995edb95d6c9ee2b592ed3169592cfdf9419ef80b25e65e21e0b5071f169c2bce00042e553db51a9967a68908a790613037c6690ab554b314981d475b7598b9ef934d25ffc19296c14197cec90d7331ad852a01782ee0f0ef6a19c5cb5a2c1ecabd221940b0a6a0a57f7fe8e6cdd8b8aaf667f44121c4dd09207f35456c9e66a01af9db66285c62afe69a4676e8c595347e5a8e4202c8daebe305613f85207bb71a8026cf2b02b3d3a08a8b2a2bc9959acba40cc30a0224449547fe7e0f617603302e14b62df6eeafebc2790de0bc86512219c4f6af3125d7cb8a19f024a926660d5ab0018d29050635f5e70397c821bdb85e292493a930b8ed21c5c2b023a44db11cbba572b55c65a3cddc78c2d05614f392b3bc489d361a244789f191e6c2118c96be16e8a00d14f2506e92c5b2b4606845e7ea2b4b0c851751d390c85f03b750e56d5fe1490e8d426f87c8dad37a0bd6a7bc2da93af65fb86ac02c7b087dc36d32d338c74c2d0b32af7964052a412bcfaaf402711274c565282a9e53d91bf9e24ac906ac89643df9d8bda028d71cc4465df23cf50846581c0d75a102c8434bb22254f3e6e96034d417fdc35c00c1740685f9ab352d8118a91e1542fd799434e825e4e6b1b45ef98b1185a095ae5b5c5202379962e71a4b2d108a48e46225b0260c741e8e7509a36176d4ec537696922631b59513058453c84745ca52379fe18802ef1edf78ec1d337c49e4a16b86564a7bec04718be5aad51d2f54dd6b04fa5980366c5939c557a2655bd5d5131c02b9bf8178bab015eba161882b47f7c9cdbae4d712c33bd14e3cd1e086466217a020495b124fd06fef4874101d6ed59489fd4d560e265ddedc42e01e4e438063103b8ba1a7722f55a3635c6beee59a07d5296f75b63101e6b12a46ab4a8dc465b20394c67d75096b185b71232ea9c5350192eea647e23191bb3cf2290f08097b8c7c55fcb215aadaaf6a66d93915bcdfb0318da6ccd0cda07e9ef32e59030410325bc2c009ccc52c629254f0f0c57320cdf92cb6c7aa1f56549feae2495f672b1bf1990ee12451479c79626dfca97b0d399ab7beb87ff075837fecae539683d1bbdc540a38afaf31e02136233879b59ee96e15aedf186e87ca9b1790f3e7a6e2da6465fb7e22ef109665a0700434b9f280b0ec8a666853d6813fe347765e90b3f8b9729acccf0d26178cc708701be99aadae7ccd927253f9db38d654a0a87ebb6381f797245df4e518163ca37494090d824633c352829c1df92115038e76fc1f31c35c4a413e720751cc32281041c15611b1e98b8af6cd3aaa62f63d5e58522a4cd0b677e02006f1bb529d476904693793cd235c35945d1075b1f2f820a19623962766829075ee9a933179ddca9a72e7183b11a39b73e274921ef0c0283d088e578086e966377b376b990c5985c36d3977b39511e85307f997a4fc14ccd294d14a018bd748c032f9d5cfe04ad5d3be4557769d38d4dbe1d5bcdacecaf86678271afc23a3e497b49926518312821245fcb4632f991594543e6213967f06e2a1ad58bde3eaa76803a97ba535286625b1a5ecebf0325d5a4bdc5cb9d929bf26067d1342a5200e1fd1bd2c508aa682811bb879f39362f86de1b7ec3c2722c6396298618ead0783b014058f704ba246eee9b0d88c8a941f3bacd82e14eee5139e38d456486bcbf79e063e2718b5fdc2e478bb18d109f9180b5d37c8a397b60e27ead5c4c8a027fca91b469009b8bebefeb4a2caee254cd59a1d2b1a8705c376bdf4c8285f911b5ca14ffd23923075799d3abd8154b7c548984ecd741d6dba0795b9bb1129c503e3eee881dba01ad63e574ee824a7a2d0a98ad32a3e67398322745b99a9527d4b6a8674b8ae84f9a7d21ebad84f549384c25a2aede7dc7db4b0c60420f27275169f7edd344a2411c77474acc3e25a875daec3ba41c4403ac4e531a5723d8d850fbdfd106ac280868327fb99d984d0807b569d5fd688e93e172752380826b369b5a004e71148c371619e5fbde452392a7bc1996d0221734a5a1752bda086e17d73dab88604f2998dd182e093a7c2b67161caed448d4869304d753c3a6d4e8803266c45c1fc432f53e24e5c916c04af8a8e1f46fa0bb36eaa481c45ff1a1a87ff639e42d4cd1b0957a0551775f71cc87ec3b3de216b639a9f8f9d85e0dd263b79f1c4b0d976969bf91fbe02ea2944d75c17eee68c98f382734649302330a60c351e7a16632521a0786011f803f22356f553fb1161e2c7aacb30fd5c19ce555ea7732047f6f995068b49f78c9ac10debf08198657f386c83d491891dcb7853879fa43a64d6bdefa13490dcdc570d9894cf31fecd911cff5f92438a56da82baab946a4d0af586529b7798eee1f7ab7a832cb694ed5449425b3d383328650dc45b776e29bddd5774ea4291c1e64bce00c53dc0672960f96faeacd6ea982d640a9e6ab258ff5fe8117438ff669deb34f94cfe11a389cc342f6fcc5c2625c78f64fbe9f4d47d740a252e43d074425245843508c7bc9f856d83ed6402599c2b2ebacf42b0b41284558168df2581107b004930731b0f89c51ab03092b83f74d006e6ef5933d34084355d175e11bf643172868a0fecc2e0e5862c47b0ff50f1a1aa1fb34c97bd81e20c6f9e6e86f583fa147a316db3f9a00b07d6d586aa6c871f1ad4887deb539008aca01fdf198038891e0d17b248f041248bfafc1df497a593f03de29550a1d8f645e20c569fd8c71a8e5c58ce999086a13d52a6052a074b9ed8d5bd0937869d2c11d7641d169acd8e13601c3f31fca6f15409234c8264fb5fcb683684b7b5b248e2d0fab9c3095bb7cceb116aad496e88bf641b982abd6fed51204186e06554acad3865009a1923920b02ac51e26dd761666e58a37e617ea903a84d0f149f2407b6a5a92d2781f4823dfd4f30856b7ef9131ca9027b79070790cf5de74b043b38650cbbda4645c4b53528c671f5a4028abd51a8d0cf464ba8bd41b85be6e27e88ea8eb913bf6bc3c652304ed7e72833236ad007bbe1b888c8d8f255e81803e82f590281dc83645cddf224f9adc43b8c2f7118d1f25c6abed89170b220b43da40597243e729d066433c7bc6fdd4c77d7e47824ce16636df9e0dd07dcfdd3250626d87269fcc96502be8217d61eec83d238f01d276e98d71f88ca34d5311eaa17fb8429587a70e1fbe2dc10744b2370396593428309841ee53c3b21e3fa0d9cef45e782e74aee2ca7e0d5d9250f5dd010863d0a46a50833af403c9d6605a9fb5a39abea440bd030748c4a799cd01280d74a69b2794ef8e3dd53feff1afda0688505b1ca473ea994f46bf37997bb36fd7213c0e02fc7ba8e0a408366a61212bf2bb2f15a7c987f26f483591eabc2547349bc88e803ce35bbbda184be15b07e29042df56c92a538c102911dd95bae348c2483cfdc5702506bf774ceb357426a654d63c89c829d542487c2ba52a74f423a047645cf6d5dc8065ada498e2d15be358e09affdd19a44cb41b394dc91894a29a3c1a357a891086db093cd260b16329bec151dad5feb4f2f0ca992bd1a5718d66848dd3d1f0eba10ee11f8be7585759ece52e446a03aae3b5a0fa0ffb250e12d3c56dca58cd215a7c9d80aef653f7639ac48b1ca29f4526fcd0f506e76fcf661c9077e4aec6a79734c176cf0412b0f8bba7161f709a2b6723328a571e3eba2a0317f15aeac2585b3d8807a63afe7c02d567a4e82d60a93637e8d54da540134993ef7704b2d2255646c143afca0b7da2de557b62f400f480d97796f4585476ce86836121109fb7e79cdbf56cbc932cb5e9ccb6e41ef4aab04c81adc89f9bae2db040cdc059bb33df62267271dc05fc91a74d40573661a044a7fd564974b8c8a172f16d06931e20cec75758d3c341c142cafff1c61c68b8dedfff1b19b2f7fa512526d94633991e21762781146a47a321418b24151aee0017d839e2147be6eb10c398da6df11b9f93a94008ece3ef4941c50ad79f6b67d3778ba487f4f6310e20bc9f75665280353af512d81341d39440447888995a212d52c2a21952c0ea41487238c541451e41d1dc48b11a1390cdcb7aa3057f93ce6899248ee277647ae5afa91859829c0606240588fd2c0512ef7fe51d07f90ad609737bfe3e44ddbe16a6c65950cc1075203927c5904e2040e2dffcccfb1d3f4d44ee6191849cb7cec251a610410421af3e5748660b18321eb396cefbae7112edc67f3be3ffa58efbe0cb5157c2dbba9afaabde6149b640ca9b52acc3d3a04917d93512a5005b000a3b9281fafd89ba495d91d02b2ddc085894a8a3d2c3622baf7e130e5bb24b7f2063c6d24a20ebd055e2aed289d84f61a15229a9a1e3631b4c9d966fd7ea0dfd0554cdc7691c88c1b2d12bdb873e33a1493920a5cb2d2fa5d6a6f0bb0e066eeac6e6df5ed059c5bad330de2e8a76d090ed0c12eb036b1b94c4cc2f10af6df310f1047a8d68308dc2a8749cd56a8c0bc419908cf4ea4c7ad4143fdc175e58d2a144184fdb96d05f9d3e41aafc783890f0c24cf0f60c108cff89b7b437469ea5829e224d389d459bc527ff60ecdd400bac0a8798ebcdc8780143d267cccdbe6c075872a33fa5db285900e42f7c433384d37137c5e798a53dd9a411bb734f3444f9460ce19e075069e35630be408ba49d6265dc5aa8efa56530eefcde5d492a5f99e07f9aceb04ab920de029b09395bc7b3e9c6ab335fae2fa3738cea6d93b103518b5c1e8e546494734af538240f35a0408259ad6f9b4c84dc8972d1c2b97cd9b0073814c1b231918c9e5ce0a1cc8a24377bc9de8e54a5e9f83ace904e2e2e1c4749482bc1923b668f740b616a21c3a0e8480329b83b901c02c78ca80e12649d00fb930d9aae731c5df07f55b55fba93a14f984cbaa44386acb131c99627421ff3837d9ef186ad3e29aafd245678880e4c021c2fb3fca1b48c112c7563b03f4a17e87eec896c56abc93ec505b03fd0edff466aa5560dab14c6275845b7e740a30d419b0c84942bebde3656920c7051e95811d8a607c6cb0e03886af58f57a41e06f954bf1f3b4f97f4c9f130bf8c746d7e85f3142f18e39c60f05909fc971c301b9c919d00be2eb12780fbf42e225a91043826d62058f9ef84641f2d5fdc91940657545c3ad2039f1da27a4b99f58795948d9164aa4f95a36b704406b956bc9eca0176794e775f5f6f3ad4b54fec4de63b2a9208c0217c3ebe8679fa3ff0abc04d7a42dea4f3a9b27e34bd17ab9bb19a2c2e4a96d14d75b8f53a4e788a86b05b6266c0994d0e263f722d2dbf4a9dabb471c8f5a9c424f427407b7745bd5a94493749635ae866bddd1126feff6e5248c8d9c1126873f141ecdb01efb79af713118bf60b5d139e1cab12ff834a50859910bc98f39f4e6a7c9283b80d07f7b5ccc6f6fc3da32401c79fa51631e79ab5dd6ba66e02488c1ed6cd1b09a9e65b90468505f6687dba516b34ba2e0a866585d8ed379fda92eab9fc080ef274d7fe399efdaa5578583d97f2ac8a87024756f19153978ca7b1bc8b7e14feccda752d56101313d6841447c413a8b2725cb36051a5bd36f3bc1f3faa07203631634fa642614021c94592dfe4b1d1d7d17041e81f347d7b2e72b27b663d4ec5c2643f682e1f27f06ade27cd250a7108daac52c3479255fe837809971d86f99694c180bbf0b9c995ee51ef46f8c9ef88c25ede98e617fc70d4a80f3e831999ba6a121a8e26513dada6b5e4d280ca6f5f4181e88e6ca97582669f4da296b723f117c6db119fee1c4057127006441834ec03798d049ad457271e77263872592be8dd16059290cc23dbc5e277d02bd25851c3b8df49f5df5767c4c330e79bd9318c4ccda80aed439fd46f93165c49b46c8ae17e24d0143c40bad15697f1a413e86083f407969392f8ef6f761bc5dc322c1018537d337e5b098f917bb5855deab0d073b85b29e4b352b5396e98d36c5e2a381b0b2fef2e3c7ec38a7d075c2b266a0f9c132a1e79f643bb3fbcf9035459cee68b79aec4b6d000a049384a3a327ac1fc27c155a3160408d7805bf80c658510d4a4434d272b72038f5785067b29233057699c0bb26868c62412c30897ec8b813535f5b98cd70f505b87290266a98ab3e7e5a785190059c383782d3fa0633698992a1d35e7704fcc71024301a942508c075a6b6025f30597b5d5fdb0b7e33dd16a58149aa9533b0d9ef7387480906967bb8c2bd82d70a16d45d06610e23c6a8f8836337a75200a801dcd4d69cd3775b3235258c890391e7a4599250113a00585146f024ee8cd27ead7e6493d933b9528a9e32c322f86c77ecb61d14bbe87520f9db9f75706d0fd63487dd4b3978a8419fce986fa1e367290aad5c9ff87c9dda9f5179cc26bff045c568bce95e51b0831400a179b4d8de44e3d275f998305aa45ac39c978206e7510596bf47a1de565d8e1cbe7f88b829f3bd105fb16ce378c45e0eb0b237319c50ddccaccd7e1c370bb27e168e2e851e4668d0a8111285a80d3a974097ef2e807c783d34c62aaa5a02abb2068da811b6a2df676d9d6df10fe38d4b9df516b36f3f3c9d09ba818c6753bb354aae71458949a8dd63c97bab7364d79ac4fd5dab959ab9035034fcd6509218551dc308794154e7d3a7648bdb4a6237d3afd6c3d06caa5d806b1c63205ab312e9b18c2b880d0c9b3fd2e3cbb5b0245911d8cf7dc0351e34e7d8cba46b26697b0c6f2c034a172e74b60977d26820607f95c3e4639db324560f815fa1dc3ca03f05c80feeda4b27ce280932631d3ac3a8a5993af1ac1b9f0303234c3d6a62bafd8b607b9e2c4fef6568cd8f7f7d1d91488760ac1a24627533e91936989478ee24a13fa59867b2b0f78896f335b6a99514e2e24a645dc29a793a8a2e885a5ce66ab49a1afc0eaba4f325541e47a4dea312219c888b9ae7084048ac51b1caee9a76b691828c162d862601024bc66e2f3e34f025e3a584cdf1d6f37b048bb5ad3bb89605076d505b461df5ce4934de3d3942db432c9f55228b3c6e7240d3d270b317c2afb819648f71334c7a7f61b79108ea7344a437586e7d7a69180fbbb65689f0c5ad81b4e7799471cad2607ef0e927a6d81368fefbd5165918fc223a9f626d73a9b843f1d3a65611ab45b196bf792b3d5dbfb14b8a88091da8a6ac2f785287074bdaba06f06af9c86fe407e1e387c310b05258cdc6b5f5b6db80011a32bb9833b071f1b9691ff988aa14cb358a4ca4a69f477a441f3e0ce476cdd4ebf9b4e8aec70622751ab17c2d552c8ac8c8ea29d8b31039f53070b2f925bc3c115e2d3569c60f8623873043a108e7419cdd1a66c1047ba3d487323cad24f64783d3d4a6dcb5f9a0da0743ff1b5f51fff6606096d1f45914a6484353b4c6d92bf89c9483d588394c5d1ffb85b88138c7a77e1ff33799522f4bfdcddb47c767bd67552b47b85ca0171c6a0a84b1925813ca910b9c4d3a02bb01c7d25ac475512d8de218e76fe1761cec384498bfcea75b73e5fbedf96d343ee0ea8e2801485bbde72e19031b13da580cbc9de0819d0b29ea3de50d952d5a65b43c9385caf7ab80fc6acbbcd8693c9080cc3d2421f02555a7601444e23c253ec4fccfa3fe0ef5080c0c196ecf391d390b8b446f884fcbb9e6f38255e914c99308a22215a022a908dc2d2a927e92a47226b0cd321a74879033998c0335b42ab44aa5180439fece61601fe9d6958722add989b35806442fb89b3d8f6abb45028ca2a5ebabb268ec18d6dc7350882f1731584e5c11b35a56cd692e06176c348dd86951f6dc200a36c1bf01bcf8ebaa09b9745b717c22941fc598d2f28f400ff76595526c0068c936b735a5df8ba1b25908324470f81813bd146320cfb12cdc6e068e2f8c389b53a0614663da1636ca8a22d20116d100e37f792e84f8523558a943d2a1efc70c9d8c58828e93f1f77f88a78c03403ad72314cf1093485d368673140e3c81ee8d8781b872c41009d70b2bdc0203a2bf126d752b003850f993ad0b9939b3c2a463243cf2c6e891d77da278b95d84f35cb7270f7eb688f6b9ef088435974bc9d4fc7ce72538846c49d7273789289a7bbccb0fb7cc6cc7bc872b9ea808b9f8b34362ab86191e5af80f314c6e85025461a90207408b1f79b647b1277825e542149070606e7dc3130b51a3d1a338fb4807cbd785c93855a9351b2138fc76a11c25bc24657300d9c9f9b7405ff9bbfffe2fe82fabcd71935604d9dd02495535db867ca080ab65d5690df95427e7ef78875866fde8f4e814f7ba2154efdef5cab92d01eeaf5ba3b11923020ed6f4c4c5e60ca33fad02e1c0822a78888c9720e84ed2621b7b9ec281cf462d8eceddc4ba1c0dba226786ae8b1b1dfcdd7d79c9150a0678ca555b6683ba7234bcd7863cdd9b00a830f8e114455c11aa1c7ed4c428280c31fb62f022a8c16b01d4e496190777e0fce14a38c18ef5543962fc575aae4a2ae082fb3f38943f7e1048638cdee25399d6cd97bb42ddc63045fc889aa0994958593851443ebe366f5ef88f7b182d2a2482932c4574d5b9f61648602af9277b19f5966f5d4dd63e9c0ab771f71c9389e74b4fb4720e0f4463dc5342ea1daf33c2f8b69379b68413fd56646ee32743ade189c73c84cc80cb1a6494cbd9f543e234f42d2ec6e5a2108c6908945248370024efe2bfa428001d3ebe8fff4e57269a5d69d8104e26a4c520cd3b8cfe87d6ed6accee819bd508b170e9ddc96e012e6d224d4a86ac5e8c7dd601a9a53a6e9fd2bc7e4d747bdee94c48d12bc85e9be38710f8526ab3c9a161882b533a07934d20f92eac39fd31e7e4ec6b794ef5ee8953924fbac2b063acd3304dd265673bdd8bb0f659e25b3b728d9b1676b989f267f97f1b5ed6af4b413ef229cf28ea755c4fae456f11841d5e92fce54da91dcc0802e7877e295b463769b25605986a9e1f767369aa3cb10a42a48c277a7e5f8e4c7ec8f79f96fac1d730cf3da7bd3ceabaac4e6de7bc07abb42562c39fe614a31d2e2432f5843eeef072da4f1d0c3076c87d4a31217b248538737963b6d2bd57cab8b05df786c474c39ab084c6c44aec3146e98e4ed855c938147cbc66bd4ffd384098472c9c90cff9fe5419b2128a829b894bd9c887e6c1bc1ca515e925016400a93a9a43465e161489b969ea4e0bfce4a6eef8b1597b270cf2a7d0ee3d8df8030ac6f76b38a81de4b471ae7c1872ac91fc3b11fce1ab5e6385c925c0c89622be78a1eb2ea593751f8df8a2b503b4aed90b71de47336d5348a1487f9f67ef08af80425a4695f5096211182ac52729d68f0f803909ba2c8a19ea1c532d9e9ea125ddf4eb53d2dc30a8e6e6feb614a94ec86243842822dc847f6209ee77900dfbdcfca77caa96e144e1ffc1221a7fdefcc6abe85a2e09f0d78ef7a70d1db78b8a4a4130fd60d190b3dbfe1b64f8be01a242033423922c7efaf48a33f813c48bc46eb6713a9d786b9db8d895b91990ce0bcf5f93b15b5f3824237547855ba78474dd084b9dc28faea0e2252fe762d6892a3653be62085c93724e3f818538f71e116e12eb92a036974c5f32c2a246243a89ad04e81a14fdbf101abc5d533baba27ddcd7624c808a56da37104490034cf17f9575405a8a0b8c61f096ad05efa0da8ea89cab11f2e347397aa64d381944d03b4800c6f02d424a7b89f788b54c640343a72466e22e74806e12369447f9d7c2e51a981808747118063250630809655089874e526793593d97f0d57dc78f13c5e5c60dc11bc5fb5b2f51bfb7a104086a5ca4879adb8a2fb99b7d01c78760fd5361c7f8f4e525148e03b549542723f1f227c8f17c5d9ad3e42e971f4ae4a3084c3a5a39543efb2516cd92a65ee181ff4618b4ee83bbcf349100f3f8c4055f110057209c61a866f6a06254a22d89623a53b98a2d026018fe64e888d242d41075fa0145d40d3daba1e69dbe83084d45b077dda18a455f084e86bfa51fea28239700526f5bea658f75514f4d9745087ceb83678a12ed029cdd819046a696a9117b79ef19a91c30d07b9ab093ac966e2d17ceffbcfe485bf273aae0f6a89f95aa67420e061e1f57cde5f6ab18e6031bce191f1b1a2be7e907a7db21ee97969465a19248d77c6b1d9098b90c87ada7a14d7e6bff0a1a7569dd4e13ff20a632ed500bd6355acea15601af4868a602c5f1b817f43161549954f481eaa57c9a3b01af965e3a5ca3f7a7fb6d223df57853958c7fc0534ac3dca9eb176f811a5e7492c9116f3546720840b6e02ca19725cd181cce3fbe510eca26167c7beef95affad02b4fb3cefac229c150ef9974d87522bc44013772660ecfdf747ea496bf578b942b71d7dc2e28b039daec794c97f3a3598e9a36db617131036a837ce10734c66fa49119958e07464e000ebcab0d445c67c8ade80cd256c143ee83cde77b9df3f838aad9d6be2ef7d7ec75d9170a4d60ed202c8d4f2d8bd2bade33eeacc79d9ebcf33e836ce5599258de392d91207fab6dd1b7e6bb778a4c5ede058cbf1a2c1a4531554a58648971eea51868d7b78cd906e3f25b3c2c22faa968f69758b5fdfeca4f0a2ea52778ea405920e3e12fe39c10ce73a0a08843209cfa4ff8f5bd3e2e954bff62667cb034cb0a5588264394d3fcdf34fe7a0fe5b413c9412f95a0640c83eef831cd0fe6285d81142863546604e3d91d39fcd61ea94bb78e0761caa0a82bc5e89d4d084031e08212567391c0254aacc22b98ee88201db6e856ec47317631c524c6c4841ad2115d2d69a01a1ff4e446cc2597fa71ac6fc68212dd0cdf5ffc3773840a9500906a0eac7f00bb5058f6a097aee5075dc0300e111da82d128870bb6b17e9464c70d29764d6123b509d2f02de8fe2463a02a1e796f3aa8c8846f854d1b4bbde4978de54a9199315123cc8a1b11d71e8fc9e569e2789d72e6a824c0c6d5fa6c969226c59823442c2e32ed5a10bd521035a92c42b9e5ab764156bc6379f9b469deda3f264f025bcc2a8a5371f98a21a29e5f681f326a7eda197af08ff3315519cfbdf01d89926b66a3bc941ebb5e64423e128d959f9cddcde9f4f226076b4fa82dc4d941324b39749d968ab8222511fd323e361c95c07ddb75780d37ac1ad59b5a792c11a04f285d973b2c3377ce586bf5e327416a1e39ee1018ca225062e044cdc0cbca942250a23670b75227b6d529a9c0a2eec0448d40dbba4fac567a62b76e138ada811335028faa0357eb9ee0a815b8acf6895054c2e52a1a9412d3d02fedeb99501e1fe58a5c7407d248c4ac0edbfe31a454fc9d85efce933f454faf52072ff54bb780667f3b7686c7c54b050999f4187ed709a7cf7698596d16e807e749ef01e119afc475a2d39e71547df0dd4486b180f82a44e6339df8e9827660f124271057b80ecc7375690f8c8d18eb0f755037c0a30c71fcb5bc9f03c9a294331c37354045d77cdcc6811558338466a60cbc4b677f79d7501755fbe35608ae77bd963ae6bccef0f6acbff5ef33c02a637a4b96516c0b6577da1f69da02fde8307ce496b1d434a2c44871cc2ee18a10b19e067dcfbb4b0fffd76883502f3e495cc913ca884d5b1c852a9c7265b9cd7b2b22911f2b65315a135d59f0189d4296c185825f86af350064f457ae81474fa749ba379ec7800ee6b554a7dcee77dba3b260568b74d531523447ebaecec675b2736abe90ed7e87ea90f5447b2c4ab79c26bdcaf3d661d8bba3074f15792d5901f7b9d08e05ac4fe1d4f7718699e502dd1f74dbde46c63f38af175dc3ca8b89acac6b79d620f585bd0210d2f4bbaf96ab9909f16a6dc0dfbff75233e04abf2d5f288e0541c842406c23adb036bc8833c103cd55f9b505879b31eb253b91c7590da36c111ea03b9d176c2a19313fe70480ec3a058aa210cdb0f7dca24f3e2a05226481d4772c55120a829c4ed00024dbcadc4bdb770a8e17852cf3f2274cb79fe45ce2587bfddee14cf579dae9fbb6e6388cbbc2047cfadbc645fab5b02bd0e64468f4639d2505a8648f6acd6979ae8d55089dae11324a44ff169d3e72a88cb1c2d7db19009bed55433cbb1e4d47c63aa7f3127b561a4de857c3f5931cd87df5e126ba7e27302083faaa246008102acf1ce4dc079b4e8ea919b24c33f6535d312d418419261a03f8504f5ba74e0cc31e1e528929547e731de80a37bf2087af26e4e3d15f3f9e01f22c246d52663fcee152e9bcc2e9abfeb5ee8bddbc25f3e5b0f7c7b9b4d23aca79f4375796e4ce53cf48fd15b345f8fbe80b1f0d7e9901387dd01a0c50076a0144e6d3a743ed8dff1450a96683e825efaab33b7462cc1163c0ea7d701fde884329be9958c358a4986cfd628dffae0dfe624fbd4e3ee9da71785933e3da5aeb432c5925df4ea3f10a51b8f61591cfc7777b707fb84e98d76b22b8c2c16f4635f7a8c98a693fdc9e4ec0b19f7fb017339f2fbea8e9cc6c6eb84577979604ca3f1cbfcb8b8a900452e01b8e2611606b00b815dc06e0d69b45cc410d6971af515b248e37c7db9e5b99c6f87e8ee4cf5719ef798d9ba0f66019b2b142ac04c1a3d4c6e0f3d4ee35a93cc18fdc1e0e437b604e4ef09bba17fc8c85f3c41e3596ea71c7e1da872363617546d4196e4193cb982468a1049c0a4de56fbf785269992bfdce3f5b24fd7d4960b6d69e43fdc5f6da40ee51e15996292349c0089e0061e6777210382498e149756049f4c252ba01e0f53d3e3f83db2eb27e30ffeb0be408fbd1f7b683e21370d411e4815583cef5fee7506a4d0fa497366ebe88cb0b212b42cbb3d5e62faabef6b3617ae813b26e623e4457075ed00858d1501e065bc3a24b7998939228f3e1a5ffb04a7c0bf4a9fb091162bb91c75ca883bfbdd1febcba9f5342dc697e9dee18ca64ef0e92ad1b8a6c66aa11bc77066d0439b18d39acda5393df86da2f43fd385578e30bbe9ca0ffe74d917931ab06449d5104da227e7092732a5f9228e5dd3ef143952ded103dfc875cb054e3b84fcb38a09cfed18e23112e38be075d477e3f252a56a9a3ef0d0c735abb3871421f49c836603f6a73f994e9975b287e33aef356a50158cf85d6d43218dfe4becb431352f716f967a92f48863e3f83560aa619d86c235674db7451a29a96789189998c1f5880b023eb1e1ab3e1b6d028e83b90b01a8cf62accdc8ee2aa5902e099bd5f9053b4b8ce87493036bad2197f72bb044d78c7f5d734c0397d8f652b80608a6c923899aa287d2a4240fe3a53a19fa1fe72a13b7b56c295aa34c576c7967925538bdaec0720586d6a0a2908dd0bd0b7eb415643ca2679fa654e947d395476e39c735e3b20ab78541b6b81a7b430d87898564ab92b5414cb744f4d0212f4d55207e10172f03e58b15dd9973bb921ac12f002029fcdbf3b0de7b3e596ef8d60dbff0cd9379982b16d823f5e0ebe6609fd47c37e5be5adc862cfd5755a6ff90e609aab6b8c074fa81b896165096e1c17bac5d77a9e95a1babddac0d35d11fb8cf131cd0f2cf26ef95ab76848c0f1c6e42463007d4a0817fc7cb27f0447dec88b4fc5a2c0b289aa8ddbb19d47e3f6b98e0110f9b6a483b61f3b64ebf028d235ab8a80f2db84abffd91ed6c6583003d523de33e9756a3c6e1916977c1517f721e9a9b1532121b91328b9984ac0c68121a651f9673d1516c054495f703e4e433bce7cc33beb2f25f8ab7a46c071ff5ed2bd3f7f6a47982f9fe34c120072635ccf9071fe64dece48e2ef7f9887dcdcb5de0d329b55f8835f50de046ee7ff56c576f6fad0ff56450829708e9e29a45143bfed6c1eeb05fc54479a59e4680ac76e4fe31642554c4859d27c62e89cdd4bf3d33724eb623c28e37d1125ab8f463fe31108623ca3bc6e5898ba59087602c4e8d18c71d8588bce846bc0fa505d65eeea89af68d652c49d95f1d1de6ad358c957b98b0156790e0518a195be29ec19cfa5eb440744341e630e264461923de6f45340292b440b207794abd948463963b5c11180f472257dc33cbeac0ae0d25ccf7b3e1ba75c630f04961ac054de5d01b167973e6ce0203c46d743dc50387be9e518dfe29360e1932d3186e7fc43734ef381580fb723f981c4ac3474ccff9cd3adb05296ffc3fa46ef8ab9966aa8c798c3d41a34b5be358399f15aae8e98e3184bc7ba541fa3a8d68dcdaabe0a210a06a4e832e1486c4663a2f82bc275216d6b57c1f07a5957a9505561ecb92aef6c6c694623bf67d4ea4deb16334da5d62ed41faf1cd3939456648a94703c65b9dc7adbfb0c16772a68ec7dfca877a4c5a301dfdc9661d68e55767cfb80183a1909a385110e23f23536e3d29de71c190b881dd0020131bd7ebe2e1c56b690a37049af5023d7980774b52c0d043abc1b924b7469a3de86cbd8922b9c169df279148d51483f5d52bf9ba64df8bdf5618b041e63a7f77b8bc7e3a3ecd7aa01199baf5779cc95e36552327ed814b9e9de0ab00a406c1725a9d0e4770f61682eab51e01be143a3be71dc61be86bc95a00bb42c78660a047ce514e48c745976ab0e3ed1ee46423893d75c66d012f3d22a8e643461448a0c650c7b2df0e6d71a1e7faec5c08f3111900f7f852bc7e8ffc1898806082803eab4750c297ef18f7f5339e0b717107bfa009a8c7155738cbc255d907335e21a915dd453cc6d1a7b44ae558af6ab5ffc4b0d5b557582a14e1fea4f13d6064d3448add2676d232cd18e757a97a6d66408a5c7055e9c653e960e6cb2374f25e0191c5e0716863a74babd6b94996686507a8336f4133026b100b5931b971a0408912cecdcd88dac9a73c086845fbeac656a0fb57981ed58d2f75136a6708e0b1a6ecf50176282702980936e41237ab012e04887ce3512f94a500f3a4c6e5d9a258822de3f35eff2f46263dad6f96d8425b608e9e5f8b7759dcce810b43a7ec125ecce0990b9088e538cd8e98d1ac215ed6a82eb4c0f166e8061298393ed4e0f07b2f62e4eda6c2f9e53cd6700b7f3c7b8ef784de6f9d91c491b28d398b588f0431afabb65f6fb64679626aeb0a5af6bd966287c90931fd6cb4135673c1c7e6f16971184bdc62a76eabb52df7003da5ddb6e666bea7f7ef5833d521a7601bf1029fa68b196778db837fcf3f1e093308198ec6a79283b64d2a3ce54ffe49a79713348ce788a555598565fff2a76d813fd556f60eee06c335125ddcc3418090b8423c945ef9a70727a602d0b14668499c50fcf93739c13477824a719578bfc56e4daedc7d4322bbe915fba0387dc616aa0095461d941020a10a729cc9c823e33d6be7d84fea1d25ede2648d81de87ec5f48ef632e9ba8b0dbc69579fceefb0db19f31873eb25a2e30f216a0295001fd21046d827cc6b0283ecd69ce8ec7d8e99e02b5af85d68b2a6c0b2694e7b57677cf0f0ad7f43fa218b6f90db36cb93e991b9351fecdaf18261c82218251854fee98b00fb340c7c5b99509189de5d173d95d0e581b469bc93453df197734d61b96b3c5eb460a22d900dbbbb9ec5565a0d0c67eccbe1a8768473631e08c6781622b0202d429338b709b970f99791003507c4709d3e1540ca11585d3a4ce8596a6d47c72f484e2c8216ff2cabe6253a3110d59695c9cf7da56e19a1ca896812417d1117c13346e2d26381656d00597db4017199f89f8337d5bc71461702e7e1a0b2abc418387accf15f2d075d3337286771425fa54c075c83b922468673759c508e8effa19adc4503f19182d4b193f4c55ee05b2f82ee0340d4ce272a66bbcbe1243e9e042337223e16ef456ee57b5ee0da0364579041167b07f1939b01f240386a7745ec164d020e0979f9ec49ee2e80b7c26cf9c91805924738eb2e6e85906fc0e8b075307c849ef884a9653b5091905a4b4e4a2704a9a6c466a73422368017222b94f0e07e92a0f096a4bcdafa8cef3d9710f60f586f9e1d205d061620d6405bfa94ae7a36008ef2d672f39ec0ed4d821a2bc37186cbb0d2538d6c6ea258d4605cbbb86c65952a2b8ef324104db1d9e3b11c084c2ca99cbd4802cc7df5d06b1021a86e75b41ce6e9b9085ac4fd5b810bf6b378e19dcfee77b7c3b39a0f77eaaf8a51d67040d95fc0e6000ca053c2fd45be2513760c1b2eab2e1687de5287b9c23e6e53c026187a64a6202bbb98ea49e9dc21bb9ce6b70d651daba96f3b41124f5811a476f2c0b982d01fabbf62f1d599dc9c4777ad526612da7ab009b01ceaaec5592b3c132c52d07e5802b63754e25d926f5c2974041e49b7b09a390e4de7b4bf9b10362bee126204d115eedae808c3392891a8739d9bc2597ec24b6e59085e38af190138c808803b508a6206878f1a26e36f125f05412c9aab1c53407a471a5dabe528096528d5c144d8851f6a85a95e8ab6ab450fe75183c0de441b2f626809a3d9d066682f8e8def2a2b94178797903daae8e1544a4a72b6e1ee7445f2110781a5e0ba9be37edd6d9a0f37cbac05429b716098bb6527ab6089d9e984767503b487fbd75b32a7855140b109b0e8c00ba2903fddf737afc589bcf10859885357a0f8bb8339eb514475dadde66f6d9df78dbf40b4a7090ec12f30683ee6a3df0fa8b71f95c25a808fcb2282af08c6a0f380fdd676d63d32d62467cc7c304d3ebb990bc4d3d32a43b9f54e309f584ef91d9b124bf7b919438f9a9998d17276bd6f37c34ac5e123ca4c41214a0b4538e4b62e5d10f73cb985b5598bf16a0a257f0047a8d7aad1f8e8d3a44e8162dfc1ca8d8c6756836faa070e9cb0cfc7486337c9b2b7d1d0ec0d780d862c5795c9e7ffab1d56ff6b8edff19ba347ebf528b7c803fba596031938203396384d01186cd174652d180aa7694d7d67c0840813afd61a12f1093bbf01de12efbab4e78fb6d11f1e16fd2a098aaa01982ef3d2eff525fae855bc8715435c60a4a70bfe00435f53ea12437de7d571984f3e3e5f105f93f8f3f004c164c47f137da1d0ce9974d1ab8590e95f7a6918beb5158780cdf0d93e27241e8a1a4bf73f6a04b1b71a2d07ce0cf0b30d5d7482ec52345243046c1a48000811df7de9fc1df4cb42278b495c17e89d10da59447dc463924301ce63a058f01150f4c0d99ffa86e10971e13cb723bc4bb0a1fc391a28f5999601c184dda5a80d8a46a339c4e1e2c7d605ee000cae7fcfd9b6e8ed0a0464837042a285f7552c58d385d88d823207186e7321480d3d885f776df3256f5a42c431d0cd8ec50f4d641aff1436e441107e051b799796a07650a9e777b6598b48569ff89228ad72a2a63bdf9235d85bb650b5cec8b4337d2edb288e9b1a8480595eab66da978f8eee6c7073038d781e4a530533112e5345d6887c8d92b43c61adad17a41a50966b239adb380a997dc08be5e81c200354864bcf0647a0ca790ee511ca750c731dc19e4f1ee18ca08346b8c480636afa06777517722a120e9524325c0ab092c3bb325f316e96c8da2a443522eb7797c388dcd1939f53f6a6ea3a230a151edececf8ed9dd53172401e02ed2f3498e08242f7d9930b7c851249f507508c80a0c6746ea3bfdae26a4fbbed4747b0f01a622d3787a125d4d4280e55cb7e536aa008865187365f4086c8a1351e585d5cb5b563e6dd66c3561c0c63fb63d468d1961f6167333328ec07dc8d09f62d315f57f9f4a8b0167574d211879f94d4dd201d1bdd821b10e659f577c9683c0a93c932150f4761dc3b2ce95fe4253c3b4e7ddaa363ee862d5e15f5814e419ea1303cdbab27def41629cefd016927820b9243f842c4c84273b475caef83c96c94ebeb7bc5fbe6f7197d573c8c21f9f339ecbe6cfc4179f431fe492cd3dde58fbe5674352a7dce563634e64180fd04a0cc479e0b922f448fb6d186ad9db7639025f6132b69c8246887903a0c6164af5903b95841c57849ca9f701cb0ca6a3a10fdb8d3b34db030c003144d169ce85ce7be04fd81cf3dcfe05b23f55d898f8571b334c310277fdc66c6997fbe2592e7526822fab8c6ff1ebacde803777b243784cb68479c0746f7d07084e204b9d89506bd42463eb958cbb71e9e586907ba522b99190f7131ae14b1342d62755c522a5c40893a923a27d7e69c0e669e07802be17e3f8c150ac6bb4406e7747163b89e7dc28c24fd105d18f918d219c459ea605b0c451ed35019afd30d8d540cd1c33c5114a8a288dbdf44f912ed04a629f780fa3ab3ed4781ae00ebc1c8ae096c04e1d2668bbdfdad5144decfa8bab109bf4066739b832d000dfbcc1a0962827c1b10c443914e5fab8cf82bb4408cd0ca834c312227557dad65dcaa250bf1331b5e8174d56e5364176fda0fe65539b3b898c842c086f800e22a0fa0ec670038743c5d855db626f8d1e2043c554f864ed486e80aa4142ea8039fbc05d71280ee2b5ae1fccc6c32980104706bd04dc870f4c5260d51311f73e30f7c54bd1030fbd320102f04c75afeca858f78e8e6d11102ecbb5927f27497247b666535cfab21437792370406b8753ee047df347d94d61783eb1ce73999069507ee855647644ef10ebd6cf8551fc636aeb00d09ecfcbe03579673fafbeef9064c65c1b63917cc35a11a2d2fd5c9484645229a2d5ff28ef82c911cd924fb5a49cb9db70b0c1c2a1cee94f667b266e0c8578f5ef490ef0ed2845e7e0ac31a48e77dbe11fcf05fd5471fa4b8da321c50e9b8813dc4e302824d83e4a95eea378f4ca65d522605f10f3d57533c4a0d2f63f203ece919975a13b97109a2388fb04057dccdf8e03e11fccb9522923ef3cd7b236718f0cf441ea37d7258c958643c52283dba1f1baf42ef4b5c9a02890b7305e485e2baa6026ed700622c4960eeba17a4bf6e3213084aa2d867ab02856d9d2fd1bfc4c5f62c7ce0db2211987b2aebd4e74213f80bcec3cb5be2645410a247e01d5bee2237f9542fa4c577457f81034389d0febdd2d2c32e0118408db89f11c11d9559e6d48a84b260425efa8e621fb5cf651f3a08ab7eaa99eab8ea61291c46fd32d27bc1ce301001d86328dbfd64566d76c3715ec4639b08f96b8b97ecf1504a9ad6e028482080d3756221f20ff1e73c6c661b605a31c37d0dad80e3d9b346d2391aff3d54a48aea72c903d50d8f1883029ae5832b5612d3379e91f5d6b54b67dea5ecc8d8c522fd2251fad6d5d7c8f670840edce19170b2957d1e53da166895f247d83ff4aa5d38b29f3afa68de72f725ce5b1ae88f6d18ce639a07f72bf0c47aa34ccb6d999460455d55dc8b0e44c8a5f8d54701cc1ed8cdf40fe36404b63f5f4895a5e5dd2778fedcb0f7944393dd9943dd242cd7318f77bf5525163c1144a26caa3340981d52bda3d45b415dc6e17f37a24ee1dd4166ee7b57de45921c51bd7573fe1c2173a550d3ae8fb2d35573fb622dff3cc20452e4fc8eec7232573c17b1cf2a97d33e900ec8dbc9b3f2c4fd0329e84ea39a3d6ab8175a3762bf01cf4ec0c49c47cd13bd77f681f7374fcd1f3444b3164dcb94bbaa4596bceb9a7c786f372a38163e2191b01095aeb129e0011b0a2014ab029d9b0a9727b732a9724dd91978a06c62ed8dc073c8505d7f2b1a6a69c825f673e2d197d7dc39071ad3f2e7472461ab86855b1b4f4d769eff9ad4e5667c3f446a72a52e7c3c951cdad7e4d0d93cc4037767a6a90e78886fac29b85b7f7b28d38650a5eb5c68294d45f1629b1226920f5d6adb794812311108a4286bf80417b5f985955f1dc8500f7ddc13f0f027afdf4c038290aea90802f5e9174edc4e2d65c54d019e5b1422930ec6c675150b1ae5046f135e457430002a88deaab6b9cde7b74d91d039a13189cb5d449a4ee5b39cf2a80405dfc004fe1fc40650c0c10bee2eb7b2b6fd2fb525a8e298b4cb33c99a1888c2d9647598b959f5f0a493e2123293f15a6a531a392eba356304967129eab45e4d17f3130c517c053a4bfae3f9c8d8b422fae083e38d8d54a709821c150b013e00c27978da81ab3f2064cefe9486b3a7f79361cd9eec624de548d851ad5b8048f025b558f9f9e40306d8c1017dfa9f4a765d30d18d56de9a280b232a3c04616b260df1160a50cda28f3e16744cf97507e2773fafae4ee818245827e17b40de21babf0d499dbf0fb2526de6716d32f71a96ada886582e289f05616c7e0e17a4ea7f0d4011199e158621c0d64566cbc4664dec34f031726455c2007d61aa48109e499019c16fee784e4636ff0f7090b02c90419d2fbef27e2102613e851e8df52607f0ac4554a49aef3afe0166523e1ff94976bceef15e3a5b1bbfe99809f07b694ccb24e18357198b0a63081e22e82501702bcf542ede18d9405c210927950fe84410c7a017b5852d816d0f07a0bc59849630c14a3e40b23fdb5828209f51b8a4d88acb460d0ce0ad88a502800d8e37e81b19667832c1f44259f52f9fe0fd51d41050649a95ca68027b64136b1d657592030036960b78a8e6dfe35e7e0cb8d27b6950a67dfc9b76fd82f39b72f68d554005a4284cf46f9cdd216677afc59f4db21e85d2effa3460fb30efae3da960823bbbf8f3094eccccf41d0d51e33a199b48d4969e8464a4e9ca2334729a03076015b7f370974e76478f23748bfb198f0c50c8175a49cf29fb856279251cf5e2284e22d43da0e2b710812a8fb0d8ad35defec32c5dfdaa0c9989147db2ce939509a57faccc43abc3e27ca9f2f41e60c4c6055f925d30f0a4ce4223a57a46a428db28ad7bbd5c5abc1c300c2723621d2deb7ef32e99d3975b9ac516b13920164c76773624628b21c0c148fb787a0a9f0ce110e1e9a1813aa9185726e10fb63dab92ad4615f820c3d17905549432fa45901679bca2b6249f862c0671af5aa5b1bc2409312b4df2055a0dd3c31f331bcd65ff6a48de050a5c81309345104aa824fab57301ad6a4c5f56e33dd277e46632424e67fe9d2cbdd3a2eb0350a93f61431c313acff41932a797785453030db52008087dcfb8a07c54e1685145a3702e1d54bb9a29c57dc1610dfdf76b38d10229248e42684902691dd3b160acf09c90a8f3e7bc52ef30ffaecc73dde53572ddf7ce587e17d75bf10c85e33bc6da74364165d97bfa2ebdae95f84115d79e63a766c88a6bf72767dea2e13b77c431297e61fddb32cf1ee72cd36bf159a27883be52e6595f566525ecf5e39799a49597fddbca9ac544a29a5949f92626b080febf49e6ae7322defa92f15a26522966b1c69dfb0e57e8fbd677f64d9e658a6569e2eb187debfc8811b7dbfb9bf67d770d4f7fb455d4f2fa6d1fe342d697913d1da16a22b9d7d6e8293b28ce60cfa698d3b75697b403d04d495c3935eb5feea0c7b76319b7871d4fba2b4e23b73f3ab257a8cda446c264a1b2175c88c3acfcb058f132def944d33750b7ada2c796baf9762cff6d3a69b271949a1c77618f64f67abdbedd02bfb29dfcf7650f789fb947dc2b02ccfd4d3e962e7360860bff74cc7340fec609f342c3ac5222ccf4c20d0da33cd033bd8a669b906cb34dbe7d884b7b6e5f9c13e217bed18a8bbd6d9aeebb45f0ceb344cc3b45c4dd334554dc3d739ee3d1ddbb7c7075afb833b3edf9e1f682d5f687b3c6f4f8ec68efdd86e03dd1db3d83f9e1f68cc071afb0e6d19cbd7cd54fbd3342dcbfb06db214f4e683bf5acd3b4accbf51de67e71167586f7966b3c399af64a9ffd81bdfede97fb8a83805334764dd3344fce7bd91e1fe85de3c9e100121c38e2811dfd5e5d4f8ec74977a1b0d1dd69d5d52cef6c7ba8fe45180ecf38daf5d9966df4bca9a9555c09c5ecb77e66bf79d7d4fa7b8b77d576575badb98aa37b6f76b3eef357d4bd3ecba2aecbd5adbfdf5ef1b6d936dbddd9bdb7a6ea9be59a0a5a0965d9bd37bbb7ba92dc0d6f1bbd65cf5e4518fbaccbaee10eefcf4aebae75b7efba630fd12e53c1338eba796ede7e6e78d7d46ac3dd56d9259691763b87b78dceecb7dbaaa65a15ac3dc35c4db538bb78dbe8fb0edfccd6ec3ebbd96b6a4df50188175fc5c8d54046b1cff01e8264cb27928c2d6aedb50796efe916b2a3a76f9be9699b3ddcb8ab657ca333bca91cbddf6b2414957bdfa95421958e3be8736f7fb34f9afdcd3feae9ef312dcfd47c3afd5e7c9fe14dffae03b8d7cbc47bedc559767b4aefa757d1bd767b2aba796612a287e43d64d35397b3f7661aee35d374bf3513de96bb5d48e5f617f4b12a1763f7d6ecda0cbba7356f7b6db53f2e5d350da3f24984e16e2fc988309fdbdc5de5b4c3166e79df8bb55bee4d68950e43ad823fd6fee0b2cdd7cd57b43317a5b1a77fb6da3f6bad962fded80d495c0905fbbdd7a96b9bb55d876738ab6536d76f38fbc55ab6af5c23a1546b5fe9b33cb4634390ccd4633d2cdd4434966bde44768d84a2ed9f4cac18eaebba10214c862099120a490a19a5bb5d98ae4dd32beed30ee52dad3d769b71e0cf9f9d81dbbd93bd1d9e7174f37ea7f7f41ebb373272d78434cf9bf417bde8f43a7dd3b487a66fd3eb354ddb27ecd54fb90a7d027de553de2a7f7134e54afbbd768c7ee23e6943d8a0b5637887348689449fd370b7ff647bce4e9f34ac9de26dffee00d0b9cb440da461f79cc28ae1e91aeebadf737803a1b92cfa7cba76ec178b3eb7bf94d22cfa64a7a1ff3ca3ff9c7e721547f6f6dab95bbc81d0f71a96911cdef69406ea7e80ae651ad0b94c13ba5613d25aae0969509e212d34d563d7f25ec95325dbc86979d878a87943ba4ddaa47193fdbdb64dc7ae4f13973736696f9a3ee57459d95f7cfd833710fa13d2b4571106bb06ba967dc2da37cce19da3c79d36ee5be69e1d471c719ff0e71daef697a1bcafe65c4078c611d74def264ee3aebfd7846ca6b94e2f5a13a297bd28e5f2bed1f00e69add3da86fd454dcbdee10fc666feb87cb2caa973204b290d5dc730f70df48e3b76eed8e7f6214cc3e52a8e3e58760d7707e12dea0e6f955c594c2977cb7d9efd737bcf71d7f006426bff605db6cf30cdcdd8370e3f7d6deb1bc5ae61d78ee52a8eeeb56cf38ba39be54d4453acfe5d355f879f6e72f403e23da9f2c9b9dcd4e6dc3eede7f69ae55db3ec5bf68a3b9a7b5867d6b89965d9afd3d8d75ff6f576bb79dfe83bbbbf34d2780ab84fa78a267a06b144cf6b2780cf4e1f34220a9d1de4849ed7aa3842cfd36bca20da466a1aedd3e6cd52591ee854f9ca67de9f579607ed9326fbfdccf5b9fdb8cff20ee27a08165d6db5358b7c3cbd6551779aedf55daedf6a96fddd012adf2e13219065fb09cf6798db81fbcda2ebf355747dcbba4c74651f4f8bb0d35cef8e5def7ed577f5d937bc7fd0f715ef1ff4acf7647fd607d42afb9ecb3724716ffea1f22cd3a87ccb34a067c73693ceb2cda455b205ed009f7db233a0fc58f64a9e9f6c23b576fb6979d078a0799e6a781399b917433b23b36f523ffb63eac9c3aebfcff28ca36d23b596370874d52c0febf387bc79c651f69ab7bced6d6466733513a78d4c7229b43397ae1dde3fe82e26a68a3121fbf900ec13db6b78c3fbe9e47da3b9cfcb486dbbb61dfbc661199231a14b7b0e9455720ce12aba6c9b889be7e6f6895999c6baec8c75d94c150fd6fdb327c831435fbf5bcef0fe4167b7785f5bdb82717987b050a7657fd1dabc2f87bb63d93b972ecbc80cefcf3ddff01050ab3cda99a86ba6b9bf7efdba4cf401daaea99cdb9e7d7bf6eef5204cb375ef3763b798bb0ad670d41cde9f4c5da7b15ebcaf73e0466faf16024f8bba63ef5e31f70cdf6f16ef1fb47d876f762ed76398e6f6d8ae6df8d94b744f93ddfee61b8e5cd14c76fb2cbbcdf659b6f42f5bf0f306897e323fe84792bf130386801a7ee6a3e1717c240809fd8142e34e3905c53bf4e0b38163de068efc1e822ba0f461bce734317899a84bd084164e34a1b3e78424c59b018006a277cd730221f6e47838a79438bc432d9c50a26be8a7c5112a68687fc81f9d132ecc190beefb15f44123a84833bfa3a1865ae78a27daf3637a9e99f9e5194733eb5c9103e38b58155de2658468488fc7e399d3e3892280d3f45e1c01ad4f47b46f8710d66d5ec11c29cbcaf0bd501411a869cc94d48948a0905ad2c48c2cb4e0411443d0cf89339c90d2c363a488224ff493a2841730c1e3c4194e8c01da77f8dec303528cb0648c1e42be40a389321cf0812b929ca1887e0e985294f08225e807a3a0ef31f2f04c1b47689a513f594371343915dc1b7a700c566b9a8da696100591c861c20593a6282b9d1429520406a4060041ca7379452a23cf25a60139483c97a7f74743a869ac9713ee0ee99107094d3d2aef1aa9c540e1508be454107a8208678105a7b152c920548ddd81d304612668d261ce77a9e29199a6cf7daff29ea6e9b2f03475734e9f262e17991badcf3e6c86cdd4ef97563d13bdb676754e539551d59cb75856f119d834d9db837e2618e9eb1047efd354b3092899634f6dce69cee9595cd5511f8f4a9da6699aa6093443d593c3b352e59e739a7362a9188df7e67cd9c885afded422a50cddf3693acd9ce634cddc920317736ac939876415f0186acc392da0b2ae165ac104a891a7b98269de804348bb0d35e0f002aa615ac19c2a4b2bb282ef3455d5bda190888500f54e739237c8dff078f80c73de4a0c2d0638808646cb34abaece299a10904386460e30d81558a619069695699660b412caf102ef50098b65560d0868b9ce6725f4fd9ebc263c31b680bf5f14fdefe705fd2e0484a332e8f8e7031e793bb088c6e2ee778686dfa3ff8f1ae3979ec6f8515f19331ac9189bb811e146a96c782fd286a8313eb621fb1047506a5a03a6a1458459f00a0e8170949e66527a7aa764714fb6266858d4236af9c4889a5e0cb58f26de132534cc64c612bbe53171755c591b301655f876bc2aca69b2619d3ab5c1f2a0f2acc1f29896f56c67a64f5305b5e7f29406cb63cad9ce783c12bf0d8cf4d3a9820c4ddf91470270616e1ba7e7b5b7e3c11bf1d352793a3e9fd5cc17c63e4f63ad73721c4727f7fa1297df9465d667d651faf912fddcfa79b1a833cd0677cc6c62eddd982a38f4c1f7bdccbc6b3abd956e7685e9fcd51d747dd5ae7e3ee74b9fbcdf67c9662defb95d4686f08e3a6ed3caa79a73ce963fcbc34a04893e2d0f9fc8dd4e4aa99d35ab599ddbb66ddb75eba5eb96a64dcdba35f37d2f74ce3ffb80ee77e669ce833e2b9675eed0fea0bf44f3db39acc7cda5b139e767499ba252e82ad6da507e71f4ec9c17cdd4cf97ae3c6fb4f5012dceaae9a6cf09fa3c768a77cd359deef29c01e59695d34f519e1f1e3e3cace40df5e7f3d659393ae77dfd4c3ae7addcac73ce39e79cb35af9e634bd4629cbe96b84099dfe3e1da053cd629a3fd8524a69a495de49a53bc59cca43b59ebe5441d93ded6e74d41f0cf555e10efa48b1f66e682cf8c511cd4f87f615ed348441b8529a6519562b7df74aff097de59f1bfaca5742201048b3dbe94b9b55c155f567e90b534c4bb7a47d7bad9766510f8e3b7d89c3e8a5b45e5ae167b3cbc8d9698a71b8564a65a5bb1b02ce44abba05a7d473359af2a8bf98c3b462510fedf5efa5d699eb9f570ca7e867318ce37eb1ebd99a453db0d7fa1296ef7bd12a57eb4b99e6ec29bedf32aecb359db6eea17857ba12f5c07eff5e6e2e61f9ce2aed8cc6eda07dd332f61ef7f4a2d2cdf7bd60a7f9be977ab368263b7d29c32cade96e664d0f31ca950c034db3f6179d0fd33f64d53a8dd33a4dce5ccdd0a7b433cf2a2b6d69c5b057217a7ab67aac661ba9b36d3bcd349cacd99c736a5aa665d65a2db3b6566c591aaedcb10cbbaf39c9e7378eb61a47f5a2a9b5dacceeb7317a6a31cdf6a7ebb6bdbb97b31c774db396b5f20e9209b9f8bdd3fef4466f6da4be3eebafabfee266365931f8aa905929be8e492981a8844c73ce393779b9208344182d74afae5515e4358eb2396da6945224258b94415c3d84e8ea204182d84c9b296291524a19a44618d047777410ae71d4d9cc9895637605bfe8120a62336d6690393f920b82dd6ad4d64ff38c469fe5ecd72586cd68553eecf433587e55da48d86dd69edbba6aebb8bb514c669714eaec95c6b22cea613dfb8c95c9cb67bff0b6e8fd45e529d64ea9155d59d4a3fefa4cbd32fa2c536b5b56939986bb95da62d972f476dbba6dc336cc5aabb25b75292d5b5dd6abeb160ba9beb7d38b69f699fa2c679fe17e31bd907afa999a937cbe7d86fb7cbb443399cdf6ca34d5ad2a5b1eebaa8e7dc605bce8b26d2486ed7a9d52cbbacdf0be4134766d84e81b44534ee52f2e402507d137ef7fb090f7ea5ea7f3ca34f696754bc4bd7a778aaf0d6f2133159eb94ecfe11e97a4175fc3516feb1cb8c9eab56fa7140ad1f61bfe417f5ca7afb8c745addf67ad53a21ef4d9676ce4db3715bc04a212222127b92838ee9566f6e6fbaae5cdbd8d62749aa07e3b4240ac510dc4a974da278cde8cd3eab15f5c6fed29556f076cd02207e89b9c9b9c9ba7ef9b2a264ba72cdb707a66b7d74f18ded86fceeea917d7ed3211abf972bf6f47dfb79365ee7220ec57a5d38e69da6429466dded8c5a8ad13a64996cfbbd30fc6e2f6c1cfbe7179bf1d0c477d751f0c758761f4ef561a0cc3fe2c8665a1bbc372b50dc36eaad0dc37d45cb6f71a96b36f58fbc556a3b9e6ede85a77bdbd3739d82f7d3bb656bd6bde8ec6b0490848040a2251f43b35df0e17864f7d976174a2dd276ca769daee4bd9afdd6ea70f9d26cefb9da3f6a299ecda4b59d66c2e519bf7f4f97c5e3fa10aaaa1ca1202ad505d074b379ad5aca65d3473bfbda465d1cc76ed25ec9aedf0d6360eb3943ebb767b866137df8b663eef5efa74f946df2c9ae97e5feab45f0ddb1a47312cd3709886651c08c412ba5db135546b56334c3bb665359baaea5573dbae76d085dde725ed9fdce9ee589616ea8b810e021dbb6846fb7d09f4fb1b8d65d14c76ec251066b56ea3f4aa17a59dceeebdd666f7da4ce554a594f6a8075d0f7d7017baf00c767b102e6d331b769f7d3e5d4974b72cfabcfe466335256c062b6d335b7e5cc7f5b8d1a2eca219ecdb4bdb8dce72c96a37dfe81dcc7a8a37bc83e8ed74ded38969eca3bef0bec94ef3f638ba7f76e6de7bcf61b94e495f2710a771a06ae6cd029a2bdc67aeeac4ec0ffaebf66611966768bef2fbfcf52dbbeaa7799bddcf5fafcfb0e89e3eb3f9ca3b889e9e6b9b9f2eed99cdb4d966ea4e03bd862a07e2386b336ab99ad98be65d2b95524afa0c5bb7eafa59abd66dd8357c5d6dadf771c4fd49eedc3f7846178e3b28ef2adbcca9337ad94c7b5d16b5b29bf7cddd41b4dd5470adf5d24c935db76f07d1f518fd86b1d7ad659b4969bdb7983ec33bc80cb53deab13a6da657b5acff1064ce3765931a14382ce6f0f64173dd679b26bc6de8ec26d75b8aa2a89cf74d8eceb857fcb48f38c2340cc3308cfa931bd5f9c0e16dc38686d7de54d9a87714a5a86e65fbbc6aa2eea91f5996fd7a12dd3c6373cdefd4a70ccb3e10c8281fa82cbaa75e45f7f61a966159867d5f6735d72afbd8c832cde735d36ccf708d0dade51a1bfab351539ea08952a14e3b4ad3322aa3b06bcf32f5899ea2b48c4d54365114a528ea93aaa795567b0d531ff49ddbb5d30d679fbf38eab80edbc0618abfcf3ef711479ad6344d73d13450d6ae923fd9067da557d35e2bb5b4562cef1b1f6c5c67d7d3d4a2b3ee9efb649f6ec7dd6c7b758cd35eeb3fcf70f70f9ee9321f300e476df1deb2554f63e5c0649f611fb4768b67b06cfab5a1ebaf5fbc89e89ab1fc6a6ce869a27009fdee838d0f19e686778ddeea9db869ba66bb50a6b759cdee613bc54f9b6c962f3769b9abf8466f78779d869f3bef54f1f0f994ef9437e8150f373bf669c2b6bb9fefa03d3b56a329772bc2be3dab94ee1a2dc23297774d8dce9ebd4eb4aa13b61dd6694bb1d36b937d80cab54f19ded86986160255c5b0a64df7502dd37413de58aee9b44af777397d6ea7e9f27079f8dc9b6534bb966299cd6ccdb29aaa7b2abfa72a38e332159c9dc37ba42dd6bd68ad8dfaaa60a84332666630f7decee62ccbb2ac4663b778c3e266efa96b5b9669ee5c56b3fa6ddf5cd10c6f9a6535da1ec3367bbd8cbc6aba4a6f38722bbd6b3a8ded9aae013dd4e8f7eacef7a1c1334abfe58b6bde135a1e58ddaefb5a69a6918797fec61bcde17d93c9abc873569e9357b1e42bee72254ad93d749937e80145a48a14231ceed995d45e0c6c42d2fcde4b902a9e230a4ce2912a51c418882380023c981a3bacdff84e807edf3bf4ae2eec214d3f1047c21d40444f02747e3035be5f165a2a4067062c600b05ac642327553a84f22b82969717c0d331e5212e00de0eeaf2f8f500c48e9983bc1bf23b072d5db47cd1596658e95477c00bd3414f9dface16a05dd3b0b0023bc1a5a8ec993cb20bcfa9fa793144ac9c8827b5479819133aacaa4a3ef158da02aaef4f25d295e5317f7174f25ec0782379cb036a0c5b9f70741291006f84f15eb2a0ea6579404de1843d5a943849f50ba3581be2ea29432ae207db717d8b6ef53c679e7c78433e721f96aa5e58a51a7561956a14ad55a3261dc3d0f215093c38c2c8eac44fd7c8788890b60e2d48c59e151130c79a4b407161518f4706cff3c2a3453d74d0f31e2d350555962857a0e5e512f0869c52050f0652f1ea917705d84464793c8d6179248ef47d56c3c2629ec242c825de8bbc4da529cf0fe00d792d4fd5238f44e88325b43c0685e0c404056c69698913b66f8cd02a678919b61da0553c9adaea899a47833c80708af7e2c149428721d8c53b803cdce2e5204fb9ba3231ece28de443181ae1b9c4690556182ae11dc0c251c710fd15e935650d52af097a92f1cef824e9c2934b704ab43de0159a9831ddd0d4a94a5dc18f6461a9ad8a2e85344580f7360e7787f5677ddfa09f00f2b70dbac63748bf872200de8e0e3f98ebef34ac3c98faf7cfdbd1929d924f3ab8232a813782c01b70c76556e97248d7c83beadd52e3b406869ae69ac58d205b1c5aa16b5ce541aec31d57a5662cbbf9ca1616743e79c1cb226a3acd39750dfcb44dd43ce0144cdcf80dbbf0d8129c423d95c252d7c04f5bd96b3c2a813be411b8e38eba06865dbc1b59e08b775eaa7c02b7783724b4228c275c68792b432c24654bd0097a2e617a6850b60477748d687b402662555515f460fb46d7c841c0299a866a841e1df2f7d3017dbf9d2e3edf2f0cee41b9231c58be9f11c060f97e4968f97e4a6842cbf71b43bf27e0ed9834bc984ac7fd7b00e08e8c86b42963092b1180088ab2548b5ac14642242d13a19d082d179183a423a234b0d060c3314b8d38e10e4805bc21ab0c7f10f3965070e4131e9e6c2bb53dde1034756a2bc44942f7e0242bc76c8f6bc21dd149740200db51da61a8350c71282cabfb070f401de6c41ce4218e7c22c9783ab2988aba42572f54de7009ac54a64000d4a55ed8c249a8167b9657384fc7142fa6850acb32000bd77887a1ae91f143d75e5d3e8930ddb724a30a5d7b75881361a8883030e7e98830325a215cad1c5d5938490bd5027342d80a228a08915ecc8108b8c52b807c11150912011e409e826ac4afaaf4b310472a8193c606b2a510a85a98824b401bb2a557052a70b0aa853df96a92b3c48a4ee08e2370c7956117ef86bc8c32bff7b2a3ae320b7156923c61a55a78aa91414cb4fc8471962274b185966f49021839cc69d32cc4c1814e785fc8a91dc489b0c608671696af3cf496bf86b75c22f15e016cc81b16e1bd03d09037ec42cb1c4479c32db4c842cb87f07b3980b0ca3ff8bd972e6fa8a3e5869f7451c9b9b2fd47c3d00756ee44f3225b5229c119c4a83d3889f68be1164480378c8061d92489918a444411272dd13958262841cb43305e0ef29585384ae0d450c20f092dd54aa279b4430c7d5000114024d5429c1871ba985243bd184ef15ee4330c79006fc8631852713a892010de8b0fde8d29de485e79c39cf7461be258bac25668f9cd429cf7222f8fb8364c2c4c24d041c0292588851e900651fe53c3f60d124d4d9e0ad6c0f68d031e14349527928948bc9199068ca02fe67ac1442c3dfdfede7b2fc2c4e932bf6d3dc63f7d5d56aef2f454efc5d2f1cf8684710cf3ad68f2b0258ea857532567951f4551074201ea38640c0e399a0a51520507778f461445510fca2c41143de1b52b8cd058a7971e135d7386b563484c1525f70719ed8cbd963f5f4b514fd811d7bab4428abefa0a25fa5a51c65465224c8c563cd1d7e9154de8ecf1569569c0ce6b725dab5665151319e9325f559f7ee0bce19e2efbe36a2deb4a41c0295aa33f6eae530ff8e994dd017eea71d574d50d7d44a21e4c131f77b84e4f6b15c00eee3c4dbcdaf5c5f159b6f8555a1e75dacad62ac2fc552c001cdcfa2aabe7d1ee104f453bd06719c64e7968cff0d6728ff75eea33eb1763cf9e6807fbebd76dcd5385ab9af7a2d012d067a3a2d0fa84ad37ed919e268aa2a820a4d54306124790027104afa2e4eee7c4ca3ef2c7c83465f8201146346f43da2f0d6d8f81581e550e1247387258df381090737c34fa488a3bc121a6a6b28cb49ee5615175c2f4144551557520c772bd7244981c71046f132dce81e305f7691c3266921090c35a9f76263e4e936551207154c511c5c4bdbe81c81e228c65e16a0541e9a98709f78d8ca4d52d4cfd124d20d9066a4fe631af230ea10083f6081398a0054e88a006468cb8e00522f084a48be7d6d63cd8653c238e660eede12e13bb47b884c216dc1a6de6c4cd713fe10eef7886f61cc371278e3c51e776a713e67df386f1d58c31629896a95b9d929507bb7d1a2fdbaa4bb9651632f1882acb43c632b37cfc8497d324eae2bb782d4e89e5a96b9789109079ba7509a5a87b3cd4445deea2f638e32fc9e51b92b830db4c4b6a324a3851d5a56499b62c6f483708e594534e16e639c9c9c4ca2571e4991e1b3f438f77e26803c6bcefd67deb3ebdeb7eb3d875dca5b2cc34f698c52c591dc30e239eeeb412e3fefcbaa6028f55c7e03190e5f036d9ac1d84693a1831b7518c461ebbefaec5389da38979b3991ba6c11ef5b33e9e9e2ea7cb4f33dfbc8968ec94cdb06c71f50944ffa0a95f30c773c8c463cd39e7acaa1c77229338f2fc5383bb63ce346fc833f3ae744e1c797482f084de95f6781e925575ef931ecf6b848130b13a12597e00272a4ee091a85b48e5275daad00d2e8cf42163a6b74498a7238427aa1b7a32478c31be67218d74e6162cc6a7699a493062c4052f8850eed5c11f79eaa92a26b8978972ca0867441261b80c8fa0b005171a91d2881397fb9511c97c95cfe2125910fd3995526a972fcacabd72c71f8fe438eef5bedec37c2527b1697a26eb096d161e995b8b145de6ad7268244bee12c3a0a69dfb473b778d9397879bfb04ba86c153f29894c70eb95fad7e9e7d5e3f79c611778e93dc2bec14966942c76ca6c62ea706853e798e855aece131910a9492d3b8df631bdc2c0f7a29392d6f88c179846273c2237134b1df205ae3b8573166e5dc4762ce86969f6f9fc37ff2e7d98fb577d8622bb88a2e9f7f3af9b9cc333f2cd3d0d7195aa77531cfe530c43b08cb33f839cb0a9691b0ba8655cf6b8518fbe0530dcbd36682bacdaa34d82bc41c7c47c365a837f60dea8baf6f98a63e6a780c1e3bccf35a9627fb096a6a33f55c6e203f4023f048657950f379663eda936313387e94dc1d8fdc1b0ac1bcab09b312dcf8a7130468244259b14235ad53a26a5a918f7ab7441d25481019f38018c6ac3bd3bac7ca53b6d000618e1c094880c7a343eba8aa7b7f28ab191a32810950d0f05de10a30305f7cf1b8e082011a7e332046c3ef18fd6668aaafc6f763e2f9ab91f1a7da79e89d3e20c604d1f191d11d21d25005597d743eb8bb5e5b45352d9c74f5c6e49af18b2e36d3029b1e1d03e8f7010461d16fd3eff2d1e9dcad8315c48784b20325f4e43a31c000422c7bbb7c30b97994c34784892fb4e3e3e9ec5c190d3000969047a3dbc5595df5a134cb039ade0bcc91c3000618c000726661d9b67d49181304bac4eff785270608af47bd6112fabd0d91d001f720114508a484e00c980d82700412c8000313485882193b30a20593082988f00414ae48c113ac50a9a0468b2476aef003266ee0840e4430841d117831f5831263a40b2ce060498e185f90a6143a4b78628ec18505c670640a3188a10622408234a3d01903097abe0111c6ea791f407a6802869ef741670c9c316ca0f7a7a585208cc184dea7a109638ca008d7eaa72386183411a4c041492ecc69b634b9957e3a626c4137e089679a3a5b0c81095242a43de734e3735204e2a09fce1761e8ab9f0e11601079400101a40719e9127dcccb4b1c50e81ca258c185116614a1040f483107fa066390420c52582209339070f0b850228d2b3069f24513264813143a3e81c2163a80c28b284c40418acf116164644c901c231031852210a14811a429c98d912350e1c4c8ce145b68429a6ea06f9018a941169c34a9e2045d20451b44994f60941d989a265e7ed798497a3bf01b017244e323608141091a141186345e50843495a065628c4ae8f81be347f1c6188470fc364638d83855821f6481b3041761c80119b6989ed8f9e2a3dbf83fba8ddfc7242070850ec220450a13264061aa41107e58dd2e741b489842efe3f03cf17bbb508ba704d28b1f60a13351c0c51246ac3c4505033d7f93d0f35d84d1f47cc80b1d24c880caf4d301638aa6fae9807146129d2f7434cdbab83b46795206ddd3e10f68825c038da8ecdc296f001ad131ca4bb0219408b3a7264d628ca2ab4bb93b469145782f42261bd020a08e97e2426b041609c32b2a9821d38008b31f6f55daadf2ec117516c58d365ecadd6f675fa63af5e9d05e27ae0fb98387c4d19179064afd85a6dc289540241ef902bcfb74403d0901f503a20f394d9c24a8750a42e36e0842e359df2e2b1ace9dcc09774b29509631c59c2d6107424b9a1147d67b2046c48923eb20125c22708724453c3c85768725530a413bb1036dbdc4e9e489a7be1c1308dab2e64e0fb4f52396d096f54be368ab8a0bdf7b99d2f2803bef65ca426419324a1c599f3eb8d6259e26782fd634f25eac475999a0adefbbf35cacbfc322bc181998046d9d4e3b5140783a604843cf3d721261acd9c4fa54624624597f54fc938845b182a99ede3942385e0c243dd8248e2c0beec491b5c33422636614d1c5ba55cd257a6b22993c1d4f2415a0ec5856bcf5c80492ac47239694286540284a702215d619dab2ac4886b6e4f48ac714b327dc0d779abc172171d4e3d273e7bd58dcbbcf26d64ef7ac19458c5162d1a9642ad1d621ceb5ecadbfc2de610c8d68db1fcd9791314fdac41f7226a24aa30cebdb19d7fad31696abbc6fb4d79f05523fa388236b071fd1d63917dc8943f35432954023d2c5f2e4cada7067c792560c3c1273b06edd878c7924cbcab2203332eed34fb8f2f2bcbede9345493cafa744f2d82b296de96a9938b228bd28bda4e8aa2a919432245dac575d01fb7a09d87aa3b30848ad795a47e2c8fa65bd86145c998127f374406d79e159f231d1d6619308772ceb2f5a1f4917ebd625596408ee863b70a7823b3ba534ee863bda3afc1e29616742992ef251101a775f4db5c0c19112893c023e8158449cd88317239b8842c0896948222abd3f7d70690e0e8e64782f344a792ff49da692eaa418b0caf2bb867ec76fc763fd1319b71563c72c4431ce479c0833a3d0d48c18f3c270843e2e89304f070c4ed0ef98732860d881de23273a22d03b5241d3481f9144981da5489889069afe499131918ae8424f2bbd3589f41149a4f4971e121161e4e9a11188436232ba9482394b7628fd44c1a5bf3035b3903882d76f75f9a7e9542f2d6ff5d53094de533f7a9f5c185375c4eaef69c411954534cd514ab6840ba595af70a40227e2c0e04a1b11e61dc70d491c1af07450a77f849974481cc14bcb2c9b782ff4dab74b27628c0ed1a5898e46299a3e521163a6d3471c5ad50d57d245bae47b708464041e69ca89a31c645ceaf5f059162e3ca5178a2850a112e922e437244829bdcf85fe9d7b311147bad0d3c740d216696a5d5a20538e358b2a50459e8baa63b7af7475c489237a10092ea42030e22155100ca9a4cbfd932eb02ee1bd54a2ac6a08822195a87aa5a786b6aa167af15eaa2ce41267d2f003eb2a5a5ca8a1aeac03212dcbb261651a28033a59e8142e3c900895486c75e80c172a814a1e5452c9d09409a3e05c70214e1ccd5f192a794eac27e0c1d7859e212b0b01350522904e339947a00e6080811192880231df90e88331de60c2108a90884478010ab50140cb53c43a72a12600158a8fa3f876e030a970a74b58bba7036a08b51073f2688f342289d0893b51c4519470c73c62f48742f3088ffc8427196611defce28d229424e80877cc23f0c6446304866b2134853174fc4cc17b89df33091df7c482de9131b3aaee0d85fe3dcafbe5c87b893fc4d1f4b9448c9009f886b082265a5af16270c898478a974b9e0ea8e9eb5579e283125ba2230e69858e8f794b32f4fb422a414769041d4fc92da61c8dc42332e68614f5be37a41d9a51c2a8a8b84b74d4d171ee34993b514c336a70c18db67b2ff09e22560a979388648b216c21c613149323a4ce1638b08ee8685105155c8828300df1fc56b813e6c6b83a5b2c51e1787144280c493a12452da2e38511e0ced5814257d522720c9d203ca1df1f479f8c897fafe08ea79f09ce28c31112116800450e4926a18110a0901e149eb04111129d35e258c60f7a708444a71ab1842208583021514f8d386621892f182151aa46fc986081054648b48aa71ef110f88230d4000989088481199028f910052881420a89083c83125ae490aad35829ea551ef29878910413d2906ac47da45df37488c01860514413a4ea948c50be894d9faa2cc5cc1d895a94135fecdc6b086080a1a4a35280810c8a90baea82244694417a318788873c2fa6b8a20889c885530428a0dc88876054308209495401eaf1541ef2d2b0410970484460162b68c11112f5984515f89b2286189090621e124f6529e4e1633d25328408d4424915764852d4e98f3471106fca942967d0f3c708ea0d8c34ccbb073d3fc59a9196d10847d8400989de1af1db028d2747485453a2832824ba4de1c50e897229a8020b9c906857238628e8e20c2724fa79e2882224aac2051746484418c211909068a8461ca530258b32487425045a598957b841184f4844e2cd240225d5049a45134c8a681ba9458f0aa498038326e0909e0c81215802184548445e14bed8e2c98844b3a8059c2c7648348b3998a20c5248d4f26058e4e85c5186b691fa3d1c76656154201181302a9197f5ac973b1ef7b7317a9695adebbaac4ac6e0a279e76e1c7afe386474d173ce8b527a5915e5999890413dca6a9ad43429ea55aea8aaaa288f94478853a53e597afaa6afb4d64a33e599e0141cf2cdbf396f6374597a5f1c92894b0827cb03c62e344d789de61b92b88ff252e67dcde9999e8d79c61492f4a2d704f29e3c2713bde41309c5e3a11e437f4109c0180aadcaf280a7de010162e94b53fdaec41e782f154ab196073c1d6119bde4358558982d0940cf63b604b5c06c69744b32a5d1bbe1c5589707d052881053ca73f2a4d4120443cf67b6a465b6f4a2a0dd4e0704e0106ac952881013898c0255ce521eb342eefcb525b8846b4b0f0955f6c07b91a7265d0989436419f4bc664b90059a2dbd70d8b66ddc176227bbd9755d0733b66f54b44002a365c551ac28abca43a28b3c94c913a13579a265519565552106ec1821653c3356203d2024c61823f41471c3017644b9041eb92207369133df7bf255953e6e898447a487a2a6c7634b7089c7961e15627e3c17f96d636b569347c6d5c187f8c30f233e640c0c01112f863a19649041e5e4dcfa163dbd7da7e879ca96de1184a0430e2f00a06145f381b221f4c8b86460e0c55095844f68ebc918aa5017de15727272461be6e49456f484595cb5f4c6d0f3962d49cb96201268153027c703af2e2e5b8253689db6c733c3ac52c3b68c86b5563861fb66caec0c2a89180145c40832292b2fe2a4d0b7b5ae2b86febe6ba75f28432aa296654622952801c28c45a212b1aa2ad844150faa18714f70777422b9d01be24020bc980a8bcb45e88b336104058de30a5988a9bb109dbc172772891c3842dfa395efb77c87587e27f63ac1127aa2e551ac8ca808e158a26588a3a3658ea2a2034a09a7840b264a7092a0a6c41e69c52212a789a6eca8748cf7d4412d95221201002020009314002028100e08c5a2d1883c4ef34ccf1d14000f8eaa4a70589a884990a39031061960082100000040046060b44d100055853a42a1e12f673e75f06f162448c631c87892983f700ab5446c5dde846b792c09a94c482f808a67bb2dc9115e3cec0888be025f097c4fbb4c4755a449eb48564349a05852e65e34f7541884f6e190645d4174a997cbc37e4be09437026f12fb4e49b9ac23410445cb503b95d0a538bb19c9c6f602eda4ceea38bbfa50c1e30319551cdc90416b2413c571b526ec18f483c98c8ac8f357042cb49325c113da48d3704c7087b1a83473dd50ebf23b983ea6f3c992885c00803a360cf0f260cbab4e47d0d6eacf245942e0ce6b02db003629ae83f117edd1ec97c3ffdde1887ec08022887234fefeb63938f8d0eb4579bedd5e3a3c1cb09575909498260a0b6f0e1500f9a5faf3b3a0e416f0d315adcd633ecf178a295ec0fe6960aef0297d3c10fc848b1cfbadb507a7355ddb7579b26aec791304f2279408b8c3256fa9a917fe22ad0ec239d36bb9b67a86f93c8b03f03b2f6f6087bc5160f2cf6c454d120b5c3ea5ecb1ab7761de10d77370ff926ad65f2fb9726a987269ef92a27cc14dfbbe74e9bd099c4effcd2cd19361ae55468128547d71b2e59d06af9e9e726283af836e34f26244793d66c3b5e8d2d9020aff4484ef6727ad2b552ab2496e372332fa2d4ca52838a0e4920ab344881d38b71df0d3e5e572f6f29bcd14ad639f0cc7194a8e7387c409a478231b2daed179f0b1f598095b9c6cdcf8ddc0298d09db227b6e6ab7184feeb53d13c8ef270d4a55b2246c5288b29d283d4a1e5167b1854454ec1451fe91fdb2513b264134146e21e2e6b330e04160e4758f844e48c99b591833c6714e6ad4ae1028d3eeec41067565f5ddf76f086ae918704f4405f713b13f6df30d01bfefbaf519b67d0a39ff0374d2963f30331d70d32ea91cfabbf6b8a421c351f4f6ec47e315ea5d8600a0267ef90e123d7955253c3e4dec8958547a8c43cce8e158745e50b470c343d0f5a53187c8210932594717f69fa79836ba87957476be1bd4ba13caa5191e5be76bf86b11aee6f4f147ff6f7086db99b2902997781da8809ae55e2b38aa988033130ea064dee40c4079d1c7cfbc2d81996a64d102911127d09906358cc7996894e196cb57345523f564e848a7060c21c5ddcc0f41ea19831740a1303d5ad57e873528c6d67ea5cc5c503178160caa8e39808ed61e6803a1e26c544ac519dc95afaff426e6e896d9bce434b5333b87c2e38f2c09a6ad9837e847595d47f29eaa6e2577de96d0b35815de5d82be4a45caa114bda8e13210195afc71a02329c77cfadcdc5745d8d796c346c9fe53b37a11613cef8649faa65036a60676b9a83f84e27b6178bf1f54c656908bf1fa2676604cee65e7c2e6db8d04311fd857baf52381f1c0d9f2986c00a00757743d2b31035bf25891bda3db185400ec077bc3205c0573d93d81d04f6191ef54c286926b852da6f5b252ff6353798dbaf6e9ecc9042f74e2c63aaf0493372daaa46bc8717d39469200090281f37ea39da1f28c2b7614786d7ef2cf619fe35c9e1052367aa0a0b7f08d2bd0299abe278da3516a9ad56b2553da82ef86443d6afc9da77412927d1d05ae6d5930c115804b961533f7e4f647d3b275b8da8d7a67b317903941b9c40759bd9f4354ddacc63ffe10431c2d50fd14d4f89e7c3714887379150f740f28f56e12f0581f50a5138a519c0728f4f7b5ecaba568b8063748ab3a7bb26c69f47c8893f8f7505836df1c6a2be55cd9590136ed8853d188509cb6c259ffb5ed32491de833c12e1a524ac403eee859197e4f22815eaed3d85d2b40adbbce6a3d440d6d41fdc61118efe7da9caf6d44d3b5116490e3a800f2dedef7e8603db0b6a164590552a2a470a82526281ab225661212338b04070d2e2ba111f645627358e892700d98e31e2b4aa48baae5bc5a9c43d0aa940fbd2a36602f571537d86a6b8073e632c17fb10f0fc48529bc1d4661f0d0c85993105f7e825099f45b1d81fb6af8ba7c8ea855637ec744da5a5cdf81e6114864acb38b11b0bd3e87a725376f8f065983567e52a221ae8367e0ae360585ab11386ab5892b2ee94e1f9e0b967ae0bda79e7ff45473f52d494292cf6cc38f786adaa09c22658bf96c2042965822d57705f8a6641d6edd26add268f3bd8828fadd362545287ce04f31621fba7eb615794f5b6d524846001fa47d60dcee7ee8d0000fdd8e8c8b91e0c72888847fa462b67bc6830013ca3917b997529a9adab3d52f509d206cda4c75a3417ace5455227672b9946f2c13903863c28bb0e365d79b78a03f3b098b5ee72586762aeb9564970e2d4c076918c30f6d19de3ad6d89eaf81c49257b98533668c8e787277046048641703b14f610884d42575ecd7ec3051e06f676448fec90e82bae3958e0f39da80c671498f4f5b47e658039949441558f29bbd79a733ba7210256a3e904a6fd6698fbddc31b547755421242c2f8f9db2b4fa6a7e2a02367f202bbe4b357b9e898d4d122f1a05e44c42e98d24bd31a4265e95943637029474bdf0c8ba76adab64c809d1c5e9159a726fd5f471945b006b8d2148ca4f3355a3484b79d0237e9b6d62149fd6f5734193f4d8fca7512bf703a1386ff3eb06033f324e52b07cc058c005a8b2e851a0b7520cf81e5ab00afbe75b68a958b5202533c09466246184a0f586a5af703c290e101c424b95504894d6899dc8580aa5feda3a4737a6e0a1edb9fe8f1261c73f76c47b5899210592be2097516639c53b7c29338cee4b91ef93d462caae8ac94a0a1f24fbf0a8c1045ba362cd8c63fb7bb463d52be6bdc7378ac465ab84c95b804f0e6698e97587d104b4386d9ebfc7b1e2cc99b7802382611f2fbeecff86536a8461b35c5c6e5f8df5160dd112d9c10d7d91750e9ed766688d06bcc2f765f75e16bb9a2048b582d83ad88f9097d3a1db51569c7a8ffc06222ae602c9e46eba6fb05322cc00b590ab37243b706888d8f7ad2ae0b065c7be6053b4b24b47c181c441deec5d379d043d9539eeef430842855737d8ad43d480d9749635321c7974a6fae9ac60cb33bc56c1bc76b6388cb5a4e9747da944b394341f6f0ccf5d7ba53ce78f8b94adea60b8d860551bd76695a18a4a6caa23fe02534f00031ca00b7bb4863ccc1b510decfba466ca7029c3e6cac925f1574a916c60c9ae09d9a2fb11116aa55fadfb321f37d8d357663e2026469dd86ef200e25b7a80559212c0dbb45b106b66ce7b27150712fbfdae79c054571244948b66f1d11efea7d56987d047634a72868730bac14cd3aa26aa781401ee96a8f8e08dd730eca0a5967f90bd2b89547d78ceebec8db20f287cf396c4d6dd92b374339cdc9562135ee45ac65c15756fde080e9c6799e090221de6b73dce80ab3ffd96d25bef06a6417c4ffa3be1b45e218847af57b3f50728357686c67336bc0d1be66b553f24e97ad46ec66643603de0797b6128276092048ea8e4d5fbfb78d1eaac082930cc57999fec7a82f1d56a7fabad4e5cc293641cb16b3b94c9b1cc5ca2c148ca35dce291efde05e5562f24d3b578feb180eeb3a8b262c26d3351f71b2398ad33cec15d95e729c71ba44d4bb501a880881f6037c256fa0498d20a42f49e56f7b7b86490f394e60c9014b99688b49ff69b9ea9a00f7d7c1172a52de824ed6a1898056e728f328ade78b242b046c66c18e142412f955a723259e29e1b4bccf599ad7412b516bb98e9470671c8f919067f9b61947c858c67f8bc0666ee85663f35f9c290892db6779e4701a14176f58c48f8125270af1bc31d7deae066edd24f24a29ebf6575dc3a0e776e8f03c9812f87d3785697711030541444b7404faa920d73d48654aff0a9e57418607076d5e0248d0e7927780a58bb72a58a58216530f8222e852ecfef3529cbb3dc02d4ce79875dea6a1384ec8d21f7eba92b14c1c927a40184b78f2cd2967a622bf61e7e6e3acae05ddb2818424fe7deefd61ea12c1532726081f49bdb329c654b98fefe2ac3b1adad7efdadeff43cca2853f18f479ee34b3409d4e6869c46706e7aed2480ea40d5d7d83ff49db9d5730febae7bd26605fd7be53499f9ad4470145613f22fcf3ad39955ef65fa7a944313eed8a9b51542971bdfe29d9e5a303699df731681bc6ad4732a3628e45509927a0684b3bbda52fb190a14d2c85887ae061c35dc499d35484b69c923ec6268f2a00e11e5358eb728c1f5d2a86da0b27952b85514f1cfdb076bf8fe4af1e5d4f334ef19c0bd5c33d816349ea48803e85f93c725e759172976afc4815e4a214c11aca9f2597d3e6a7152720972b261c5ba16c687856ca3aeb3f05b37aa2dd134cd1cb05ba5d0b0db77b93404bd9e28702c7fe33d5c9d4192899de567077722aa1687008648a9d7a29e3c5a158107f16e6d40cf48981dead13b5739ac675f1ed8175d34b2cc9a0913e410a129362b4cf50da0c6ab38e57c3a972ceb9cabce701fd61c6364ebad2c020814c67144b641bb8f716ca3a53a8999dab8ee04e11e0f94b2b7689051db32769140d916905dc9f0811b89efdd331ebf0715de3a4994743bc7e74ded5ecf0e55636103d117b15118bccacab19e46ec9716313b5efc3aeeda1daf0cf2190c5e0ad997b7df8c5ed05c872738c23222e05852b1e33097b04c55e9aa9ee3d5066ad5a31caa31ae9294f629d163a47c0520ba3fb4baa20979842a446337fe163a8173fd6a706cda0b4dc956a7219da72a296e4ff167f8a65d5762445c59b62341a2d9ea8d11f0ee1edb4afa48c163b18e7f8fc5bd944b4861af28c33cc5c09e984dce1a8cfe2381fbdeb4e1a0ce78ea43e4a7e19377a571fd52bb5efb617c9d24c85807db6dcdc4887088797404d634a186068766b5f60a01b4e45dbc390afec9a23355160efc92bef97c81ec2f0eee1b9d87f134a23828a0f0d1068b6fa072dea2fa97f2bea9f83102e7aab8c8300f241b5d4b272819403e76d3076cecd1bb0a02aefe605786420bb1d2aacda6985a6d273f9db708c4da612a95a2e7136aa36c10acd4ff129a99ed0cbf529f5ce7c5b71b7cfc6179c4483b56a3313e22f603b7092ec8f9e1f40809ed88de9040eebea7b24f913629d40d02115ccd707ae36f738ff0e07887de4d741b0d9b710ab17a1e0a4d0b3d45ddbc554441da26eab429c30ccada55bab6892d27700fea8caad6c701348953517488b406e0b5bb8523a284956a3e2e67b1a4db844ac282e991ac1c7d06dadb420c541b94eda690edfbe2e0c41e2a8a480b929e82428171e64638d710dc2322667fc1edbdce4de7eb55bba9360e1ce429186a45e0a1cf38e0c9e33ce7376375d501e56e4e8048da07c014324234a0237f56974316642bc350c0d9e037b4693cf3e073e863aea520b4edb17044a3f9bf658749d2762845b06f3a146de2f54d2c48a5cd1faf55dccff450409b46f79fac3b70032270891e2a5868dacd83e3a08c8b5c6aeb2d8a323565eaed0920c7e20a47181aa7fb44a508fa5e9bc35c2b74b048c4d1b3efd29fa1ab1d92060a3482a2128b5f23a35dc8080a47720cb4006bdd7fe23680a90421b8ac22fa8921e8f57d473deef5ea49abf01efd70cae6d1f8312ac8d5f68d88c555f03bf6e71767630316b6d7b3810325400c2fb1bceb1a695d42bb3c5f5a0c69785bd3d351d1353fa55ee8ada99547b70be17f5453a2f5d0fdaa8f7b1a027701bdce04d4c2af7583d05b43f5e016a592d10500a2121dd7914b3ca30b1a4f318434d32d5223a25d402a5e04ce6534a3967a2e9834d527e4cc92f280bf50f444da4931566a4aa96ad42a76524ea951042000e0d629fbfd81e029197420eda1cd5c185b982c6004709ebfa48ca2f85cf5bd709ac87ff2f3141f68117db26fc8dc0e84c16406e1e607f195dc7a556f91f217b1f7c3e970bcc83661eefac39cc530b3d36d9f7079fcb58211095586bcdb7e1b50e68706674b53a5db57dbddd95d8c05e755a42ec768768fc69da14c66b7a72e804b91438d87d673e4cc17925e6d55991b83d20c56d9b1c7e2af0fccbb7b6cdcdfbc97bbcc23c4fcd73a1fbda46d539f15a33c8883d2e5430a3d91535aa3ce122d01c693373f10ae1ed61b58b1bdf5cbecf1e547e89070429940c1d295671b84c7f1aa6a7f369e955b06c5fddbc9e3e5216ea56e734492f934f2e5bb57dec629ab8b7560c26be465e681583f24ff2058f2b20e9f2848a6912dc6f7df39883aa22487bd8727cd0c18b6518c09ccda184a2f7861ffd4a32c0b1a884294fa38dd5575adeb4ebff921ec5165662633f8a0aa9455bcf0737c2af505e7a5894a7f4c0d5b3a0e2275d6e4f5c773d3d3a4228f147e44f60378394fde84f7d071f1414e207fab5df062b387270498ce73c2500f9b8634cc796103dd5f37ecd9b87d54c203428fd9b1f5efc426195ba0104f3cf611a467e36b5df4c0a168f98b579aaf70d4551d1830c60b058d5ddd1b28a227a1c6e7049ddd41a892088aae03dc22b18ba1e103aae6ddd6a84ad86d615a8cff4f7dbe72ac517f2e2d5480c410088a3a9b6539ce56aec57acdbe2825bc512b78bb8615a032d7cbb6c42b94ffafc941c473dc01d200aaaa5e9c039111920213fa4f2b010f855b518824a156d7acd96b87b2cb422ba785ee929d235c8ef36e126688366909c98e246d20ebc3038eee0153ef8c6204d2340d6aedd361533d2dd90e5ccfcad610f7d633251a45a88b244336a5a5c69621b88f9fe92f9805b2415bd9267e2288736d635a9cffd195b119da4425c6da471b8b31036cb944178fb03729e29b5ce304d56c5e6bf9d06519d3429b6345da38e87b630fd19e825d3cea857978a8b837939c0b162b964443637d0495e225bdfe54d2da5263a092c41087e3246a18d8e40dfdfc08df100fa87c2acb7b6d382dd06dcd16d3e6cdca5d5c2440037a287265a48b61fac7013d1746a3c314dd7109a5373a235b66339fdae3df2a16172721e6131edd9c914a525893a9a800a1b639eb5aa67b79956e102415926ce777dce771ea4d05f8d8fdc88246c2bb13924c6e8f7a403d0f26ab7ae96aa333fa44865156e5c1627b1812a255b2e48c86f72c71e7d209ae91a0405fd967622633860d7907fe1d73038388564c04f168ecf6c6b7fbbb934d50218ab7b7f36f4b41e54130343329de2710d35d9499d05cbe2857a0517a0ff68c134fa79f06edc3ce06c7c558e680a3e6470a60ffe486bc64652062aef0a44187d1a066997cbcf2424f8d66513265673af1ec6f700175155d886914cede28056e88c2f05dae39922b79174818fdb9f51e8a1ef17f8dc16bbecc7033e2371ed1985897eb7b5f6711a5989eed9b6196dc290ab7e93bbeaf097adb73b2844e49664dd0f192a5705332b29eb3cc015d9d9bc98d04692c69f2c2ad542082056483a1b50ccb29407d773f0c74db97469dd8daee20e32aa58131181f879c33aa951751fd199764bb839c5e3c2026853c35175d07e6f1033c8e43343aba6cd3c8083344b1d4876bcea854af7f81f807d83eefc04094e0b36f64b6155d61a07646ce5db49278004128284095af39ac683f1463c9fd8a6ae6e47a81d08258ecbbdf4b3edab212a3af51ff92327c1fb0864d9329ccf678a997533d390e9252bafdc7480234a51e605751afc4932770c11388b4e16462689660a8ad5775f53329ee011541936c4012c8f7efa2ae0a5226fe8d21b4a02a0c9496d0f4e46774006d591ea8004e54a0bccdd6e1c56279ba62c97105f898e00bd187a9fccf4a6e47ff29d49c095f84ef83f9f2905784b3f2bfbe2eb61a7f57e23d3cb7f4691503122be61fefcf7e0f24f090e8e8e1cc1860b7434753f6521bbd021ac52fe9092dd2a158ce71247cb239d355780f5eed4b9440a79b55113e5f2055744fc6a5de3d8b0be9314d4c1a40e6c6b4454ff12a09c42f6947e7c4b78ee3b032817f94ae4b5697667cfa09b5b54064e1e8965e82c5895857957efa70d31e8c156d806f8d80a325ec0c1f458d07cc2f3c8e18888e6c1538fd1058f37314ad35c01eadcf6e72c1b3738b6dd04caa810ddf81c9684968d57821194de6c690e2cc10c93e0d5691e14d09c053fb384b149f248e5965ebbd6401f51ca61144ffbdc92deafa460115e2262c2da0fb8ff3acee73dbf9a2dd4550da08ddbd0ebf65fc211d7abe2320bbaa4ca5b5f1457ba8f6e8c6c0d31e71e581a86182ac98e4cd46c39ae0111e428fbd5b9dc1416d0030f1827091cfdf5f417aed06ba3ba8d260d9c39c77aeac843e12fb5ef80e54a5596e9eeb470829bb03520af1f1e93efdd7fb6245621ec47d20622c187d8dd97aa6d2004fb460225ab840e7a746d95189da9848c4d0ef54dd292ccf04ddb955042e9a7376993d49d4e879d2f0494b00faf8d5490970015d699c6e2f85dd932648d0707124b7f578be26fd3039f7091a9fe121199ec2251b91b7f785b44c288f5863163e768f99bd1660b7147bc8aa38e2e17e525f9c9cbf5584c0e29f9b8f943fd5e9038212c24fbf42df31d0d0b395709232a35cdba2529685b8c4f0c71e663d369c1729ba13056db8fa008d633993f7fd8657e75ac8cadb26f04c932c79c29a714d8f8b04ee691ee78a4e9113c1a0ba117e8292255d29fc25f66f20427bfe9448244af20d1d01957ee50bf03e321293d61717893ac7bc38247ba40b357ba015b9c7fdce80ca520c4bde9211f1d6d12281437195cec479eee3fde5891dd5131e1944b6a77507345dd5a0b7f40fb79db44a97a0540f2452d9e29121dc2bae7348a98348d16fa3e9bb2bf9fb9c31c8057afc0e9129437f7b75175a75b279c55d8a103bae73b96386349b0f046b00d441ae42d8145d6c90a0c9a9db6789f30b180dc6d754bd0d82e19cfd8ab812a3493721e80516359207d3d0e6e8e02c7310a351172b3c7e70974a68c3dcb18a3e293e00b405065c719991a7c6bac12463b5cef6ca24841a2ccdcd1b5f3db3090e81cbba7228f13c8bf684daf2bb3a51520b4df6790e24f312a51fa50047fea298479192ff89917835939194ccc5d1349548db836c3f814147238a85bf08e508ce893c749ec2f18d9f25ff9be07c0ac3bb55deb3e5e8275587b6c5b163a5196ebdb6c4c83775ac13ba4d4848b2bb2a507c77f388ab588bae54a7762dad2aeaea732a6753baf281faac7d3d743a0b21d0b56f3bf15e09c7e205b20dd348d5facc4835c2c75ae2c1ddb3e50ba56e710fd65d5d839e25df8b7a3b5287471c9c08007c4099b352d2fe48fd809bae0930a2ff5e1c1dafe16563fb157367db477f9a8dd5262deeadd2f2f21a43271dfb25783d858db61385271c97215eb91abfa3fcf7771ea867939a5db5a4bc7418b308754853cf057510354185a08ab7480d60b131c5bc8a2e0c536dec287336c6ce11cc23789c4a7f25bb89b9bfd76c990521fdc6a20adb193c60a9576a42b0e6250713a683f2a6b2d938baeae0cf5ea3765308cf5eb0356c8ad1fed595ba582150c3821ffce949e78769e13e43bf091b17a88d9c279465b280309acea972e7ab4eb646ca1e58ad1b95b907c989b56bb4f2ef11ff14f77d4ef65c112f4bf9748d910ed94a932ad184db016396370de99eddd929309e1e2f197969e27fa8c5e2c5e9f1900aa1a98758c4273b37f06da0936bc333de8bf6c15b3a12050935b4556483b152e79148c31c4b76a80b0c0513052f62c6e355a71b8c3d3d6143cdb9702c8428d95c27cc5dd8623192272e8d2beffaeb45ff83f227630b164977315fe58ec3332f8ddec1de781507703fe75bf9df8958546ba1e7a01f5f655f834274982625b140506b79c014efacaa63c2328566f8bda90ae64fbeb3ff49a6384c579d3526bc80a1fb5b0657f93fe5cc90b8841587dd4f58acc662db8fd39cd1d06f001834e9687c93fa2d8f3cb704a5dbee3390e029a64ed311a389fed2c2665d0484067ba8d74a010bd8ac601e661dcb08a2b0cd62ace027dba2db751443fea28d12e42b4affb2a85db7f813e4b5724d918fae344d9a9302b3c0ced7a668eabb898f94e993b0f721ee3cac7fe4a7af0820caec910ac150c2aea8ba720a4a78a2b09c880d7b71d9b0c70a3bdfe93eacbd26dd15b0045c407c1f67501f49314a2906b2d11b6adf9c4e920933a0120e871c2ee0e2ddcc2f6d85f694a500c9fc8cc94b2146c68f9103178198e174f647bf4fce53a63bd8b2c1a0a888242d4acfa90edbf7efcab06be564e6abc79dc46dcd9fda0a9fc929bd5abb720fc267aa952b3dc077917ffd3d34a0f9980712936d834936be09bae3de25a6182af50459c6e4328ba5ace185c66eb38383fb8964fac7d03e01b97aba52c6747e6a284b42d9ea30a48b8feef86e1d0c2c664da5997eeb4b44aee1277a0783e429cc0bd764de200e4e524099f6c85acad2d2b889943039d4972bacc4ef2cb50f53cc7f24ea9121683b6c642716ce4b89c319d6c3e703931d1cc7bfc42011aae5ba10978bf4d8418cda711ade8d3625c0ff3316b342a5f470a6e459d868b6c5be3511a39a625483fb6488565251ccf3f0a2486ba7641139baed7e23d39d11f89577ea4f97f5051cb239d843dd258f8a821150e7427dd08f08621b510fab6cc9796b70b761801f5783a3ae9bfad824ea8c26d9b40905a8fabcadb5d69d462f1ce5ab7e3b937eb7a6bb794fa0875e9c00e023a10c07d1179fb8e87e97c4828a063cf9239439162124ae66d50d1a578d3b60714ccc0a0db03fe296a9ccb27c5a1c649f120118f31ad9c69b3cb378a4af966567755f2063e1d8702bcf6446836a6c7a7ddd0dfba218ebb708257aed90628d4cced44076e661659de322a20ceba587a919ad4c67ed280b632801797e4aa895b4475fdf418c55791bdafe315f639ddab0605dc4a1cf1c404b1db6f58197422a105ac5be1a7a3a94adfbb99142460e738e2e4ba3a5b7f04c8ba13284359eb2843cb92330aaf76e935bcf9e8bacd25f824611624b2fa9d0ce98b1c11b318fc990584fdff3588880631d25018a6e90b4930cbed6cb917261a3e300020eab0c99ec3152b7f0d1cfcd4612e11f0a3d3a348761bd19e8613e33fa8b9b35ed7d51e0d89970e1903ef6a64ad51248ef7ac4d6f076d1312746f7c8a09ff3745f74d7fb5b74af32cc65b955e922e0090f3e81d62a1344eee493710f7a549d1f66b45526ba5aec515ea667029f6c344ce911e5f8b49a1b3e7975d6011a3afd3c4a544abc41a6ebf81c15276f8f67a667ef348c2daa5af34631bf00cafd00fbec13b170b74cec2eecdbbc3b32de1b783fc98a4ff56e43ca08f77ac692dc3ab43de963a4b1ef204b2dbbb8a476014844ad929a962dd23855a2cb82769508ef01ba54ef36d88e5c1a7bd7cb24b4e1d67b79c93f83d610f844cae424fda901a6644bf4ba5deac3e9e883573c7396e8a350e697b1de24cd06d5c9826dda8bb125e1661b41223072d43433810b47045b7a4b13c3e9742fe18c6811085a68065706dd1eab0480b2db7c004fe349aa0779e492456b75c0b6058383f8a66e5e6d35fd03c2ecb0fb039a9b4752bcba6ce594cb6ee2b56d1201f533784a15e0b5d5a7b8209726bad9f26c3d3b303d819c2946574d2e476b094b8440b01f1502c39a9e19195deebed5c24270893b0702be2cc6808618fe4cbb2afc24a5c1dcf213e6a2d27ab2fe5402cd7135e1140ea51d7e4ef60a8eba2de5445a215f05110f9a357d89842c68fd501244ecd8d4d103f382bdb3e7ec44b1cfeeeb0356fe61ba5967e28ee7126604eb9464d7aef8f44d9cdaed1cf3c7d4e4305c454fa7c2b632941e3d10d0102a7a624e9c096a3e4f45e71c6fad04cc7944e1f3fa3ede2b2b561d43b3fee370fe01083834274ef58e535fbecdf85b63d2e602c99672fa60d19e9cbd7c4fcf0ad72e35606a83cbf6471e4dcd4220023803c434480c1638ac1ea9b6391e4308929edb23c318f781756ec4303e363a54b0e076d5c55c2ef8ac5beb31c73536736f118625b908dbb8adcb954775ef45287587bb7658010b94be4af874e35b5800460fd2a63ae09fb93d0bbc5d42cda797db3c17ad48cfac1d3367b3d7838ea09b392837fa57fbaa53f6e2e6642e9b8525fd3c25897116a681fa863b6ea92599986625444d6824b7e6192f0fc5a4c164ea31c951bf79cf5ae926f81bd371d55ef6f4377ed255a34885485972fa668580a469952daf5a17616ca29d8340364a8efc1da62085e3497e8db35720a80dfdd99f42e61c8ee5e6f8b0907f071ada8bf75ecaa2dfd84e0336ce0d9383ad470057c47dfe03f912e741e60ec75f04f1a1bb8be2c6aec381b9ea60c20e14ba42a36e374c337c6488a6c01fece9e3b10d4eda465f1a0f9922ee10e61bd3a6b943cb2d55b4b19f6a15258c1732df59f2fd8f9de3ea13fdc5dcc821d68b82e05bd677cdc55226630b561a36a4e7d63467a99a119b473ad177fa4163d6991a4490cd50e9fd876d5042f3ba939f66052e16009e5c693bb08aa087f5022faf874bbb9030bd8852a75e804fb07ce3f373926cb16258a4c34a0d9bafd6c15a5f55a2e979daab1265471cc46a48522fa91958020a632a8349248615a79fab8c6067bce5ea7e5f6174c6fb554d1e11b79e6872e19614dfd52d678084ca010ae7f3ed63fadac50a931d01f7d9bffeadd2597250fca7d7fb0d6d21f98494b4761a3c703f2fd875f5915861efe068e85c805bb9ed5bfef144ac5550e0ed99ce14a932a09d5c3c5e286ba0aef815e9dadcaea42c44b80a768e0299632e64dd9c2bc142b9fdf2eba3c09a3f8ccbbdeff8569fbc172e327a19884fea1e1ca015498391e6951214e1036b2a9b107207b86710c34ee067f8c7ab219a450443cab85c440227282a76bffacd27858fef63e1bf44fca4f07afa0b89bc3f0dc2fc8b1e99b8c476cb062ed12c23e072e8fb537ffd1a15c1d8bae9a2a74eef2b85d26fbc609a9514140a1fb6275812b65b61989ec810287145891cfd3f2c27fa25cad48cbfe7101cdcedc56e7e21c1ce29c80fa530c3c6d543e964273060603a68287f223670011ca6f426d20a8447987b5ae6d48d111a188dfdb634cffeb60330a401e888f414e7dcc6a2a600aa16cabf93d7bad3f681d41a2bfabb6a838e2bbb3ff776682ed76a10876c2145925a6a484f7443f9295f64d4fe20245200cf84112a301ddf70032b924c0802a003571cba35877cb0da1e0ffce1f4dbcdf11d636b3d2f9282ea74038e92b0b01729460a526b1979078c16ff74ff22ae0b972067e539b70dbe0b389dc1e624d5972d8c3c0cfbd424b2c254542fa6f67626a0d00772704f2150acb73d1a067d9190489c4995d91534c02797559bd9795aa33d68669d354f78942d384743f5c85eb0d9c23c304331549a9f345ec6be9898c7ca27ab1595fa293369dcec554234905ffc8e711a46b3a7946f10bed3c824683477326ce96e623e009e420c2f6437aede84549702b21d626ed90c87a3672ad6213ec36af452b46b65614b067d5f9b49b87fa4efcd7ce96edf2ba2cefb13c669611cd0fa5275d0d05087035d1d9f049ce6bc16a23a0088d7108819a26eda132b6722f9281055fa91c3a5d88e7bcc20458d3598b555b86df5261e6e7ee6615459afdc12daf6f6be3fa5762a3e9452b743df57d3a1d40f3f5a623146f68410a35fdfc6bece53f2efcf444d82784c3e501e91ff89e04db657d69bc0390ff63fcbe9977365a2b9d9306ec0278e0eab8dc204d5c78116a0c3d8115b5b8781bf5994f3d6c340f6a2ec6807a56a564cb2ed9919281048259ca9acf83caad6f296a76081ed1f2eebe4acf2c6e58a80d78f71756c5e95a7ddfd19469f2ca40a402d33880c02215f5c209f1be17a81a452b8d8736e4477df494469f4c40ae54b59808aab9bb46f1305ae037f1ae23b5d3161b89d498385a118404305d10d8272900987df13969b0f92a2758145b547e9ffeb3933d49cedae0a77c39843cabfff45a5f9507e4d489b65089269a469cf8c9eefbb21a7d7632a7c8f61a05d570f5810e3754b0ff51e6ca3ec55a9c13b8047bb727a68a45b774cd3d4a35af2ea826df416269363bab46387ed5cb773ab683f036316efbc7d55c5bf3fd4d4b996ed30c50e76c2050f93fccb45e74bf01d5dbc98f7bd9af0bdd010403bd32077bfff036907401b00f5b5c3065f64daa4d96c1b4686dbd9521b3bfc657f4fd4e90cd39374ec83d253a37d8921b85cb66f8a34c8c1f0becd25b090359811aedb40e158cf74344c1a842b023b95247d393d347aefdef8a2e4a729f9ae413f8b0dcddebd1bbf88e4b3d8695278ba1c5aba73ee20336533a41cbacd7fc027967e45c41fc74726a0b5d69628979593a49c60ffc4a45cf4d4183e80c7bdbdd830956663a5f1785cb54b3ef3db3d47a35a95dca5101e26c21d24f45fac93e81e5bef66e0fe42a9af9d35041e570ab1c35d116a11439427572b13303858a901165831c0ceb9ff93241d2a84814bff647da8bc5bcd65de295851a4d98381e7719b8602778b0d7303effd059c446407b6dadc2da2c0dd7acdea37e39db4625bf4e5713f3566149bdc4dc9c960522531a5414c04bb70bb073cf5852bb0ad14349635df3991c46b7615c6b7f81c2790d382a841c1df5e75eaeb7bc563887ecc53c0dbe1bc342645a672b010d4836b58c65a0d352c8ec9c807d368deaa3d3eabfc4cc6ed00887a76a0e555084e78bc86e77fed752203d1294f30e89889b04c0faceaf3e4bf159f61c79e2536872e1e2f1eb6bf8076064002619197d9ca0087216e8f14ec81c75080fd41dcfa082ac88ea6a32b90db1deaf955331e80d672d16e294ca7e2561aeb9933b91f1715f46f2ed9e67cae092a6086010889823a4f56f3f9a8e1267f762a658ce3feae792b18348162e1a4a352fff6a97eb121852affb913514a00b42b0f431ce577b610f29f7920a21048ab6eefa6d9880d9c510d503b133a3ab61de5522f9f2a741d92d16c5800101ed31649abfcd5195b3cd6b1776c00b2842d8207e4c006b2c62cd88ec784ac63884cf4fe46091611923e6bb041cca4c954dcee4b3c4b9710c659ad1009f37ce8397a3bd33f6f8033db9ccd6dd8bc3aaaa9052a493dc2da08343ccef2fbadcd424204ff9eae51f1f751ed84e37569cb478f2f567c229418fc7ed3254d7115c5a92e9cd3fbed78d8432a03715f9de86a533df9658cc7c194fce2318f8c749ac34322cb4e855bc0ff70b196f5a4cdc5634aefdbac7d6c71847414a0b0d8880fd85aa7918751b51ec6a2134bee5fdf93cfb7d5da8c65b1f420237155334f9f48ebfb4d297fe48a563fb1645ca454a5871119b598ed4b1cec87e101ad920b67c95add7d508c4997a5078074208bfdb8d6fb716c446de85d7a80ed74fd4d1cef4e4d5c045b39ac8e09fe010229c66401071f659fb14fc4fc2c7aee3042bfd4bc714329dc241ee88a3c482a9434e3cf3a8cdfa80ca0b31405b2d4418fd081c89327bdb5752904839d4a6f53a268c7501e307d84c7bf706b816df1dab1cea0cef5229a5215a830f935d278dc55ec42985843a95e49ac6164beb8615d9ccc69db33f25773b04b30ce63ba8449496015402d18868dc057fa38bdbcb871d8b2f9e7e9b639713a4f1ad98fd83412bc65f5050fca2bc27381e68b4b36168ee5828cca85df4553dc4b17b63b83deb266523da454cba7a5eb820584c3c8b75560c9b7c52e19a3ac5590a50865f4315301c3967183a15e0ad0f68df45e078adf65b1e0107e96ed2880cd1f4276af5de1a14bf104d1b897eb7f8b3877220540c1fb88dd8db28390c3001b2f14c53dd2e216eac33a2bc451a39604fd8817962ec4351d2993971f289aa5459668436731bf63dc3bce43f975406d5fde0cacef536317a32237f69446b95d5ba29fd08366af1e37c8d73a5f5b0468aaecc8659710a78b9f854023916a3c231efa24d3fd1086f228327790abfdabe5c81fe6d9919d8fa6ffb3dc0295d9c300d924eebf8ca8316e50aad44f43b95186aadac6bd1e43f0b56b8c469cd3c9a777ee61f3f783674c9d3353fbae35a577b9e26c4783c87a41ab88827855d065b3e70d6aa824006669102a6a0a41a1fbe913fb775cdae3f4c4e27492b732f4428ca96cf6d431c6d45bd5717d0beb7bf45c521b7de918cca4d5d4df873fc1ae959ad400a0e1e61e1cbe5f0918dd4213ce27d010db8e8a58cc355bf93ae76e118a11a9dd0f0fae10183b7ee284335141624bb87dbb55987e60d565411d68d24d7f197d54543a3f86874bd4c6c376ffeb103e39eb87ec4f18278a46a24f85f72ce6236278759b0d784b189426a829f9f060c9c990b5f2afcda21042b6418ff1df461dc22557b86c0a45bbda3585165a4b522e2e715b9936c9fe96e69c7838fc27cd35b60dc045d6f53ab8c1ec26ac0a69bff537e020dd6f65ecc2556429b2df4764c1c587ef4460d0976dd128ae03f239119c194d3edd822b76b29611f9b820c9c2270b2e9179018b11df7095bf7cb2a4e61ac9b4354e9f11eea816b31db4b2c441d5fea4471a0971dcb0e1f2d1c295a361c196c72f399cdcd4b9ed907588079aece2084821e87a8087128fd65c19daf58e46d09ac60d9141523d567d623706792fb98872d1369393d7271cca5ec872d32730bf77f724347b12941c55079f41f9844f62b84fae7aa0f0eb878ae1b29ed04910ae3b1f26e1535d5e214b3e989f61d097eaf33027aed39956fc7fd83cefc475bbdf96e1db8ebfdb752c194e37ae9b5f9f429b80d47c4d8da952b894c201c2381485487fb24eb41dbab9488a72478b0885965e2d674727723ecdb005319d5619a822fe99b57d869e0c24f9ea41a53946800a9cc3594265b372e48b24c04aaa436c557a3f1c3817e3115cebe2504315495ab8b81830b9a4c804183f3693ba68d84b837efa9d76ba28f167421db97b1cc1ed33bb80a4aeabf13874b8c78dfd57c4ccb003c936a80bcbaa2e4edba38240bc4c2dc33118ae780fbac324ad0339c682740a709fdcbba8657c66f26c85fecc5517dff02822127ea51697c12d99ab70495da07faf03cb548e2c6d32e8fc00abb1fabc2b35da09142000560ebafb869ebf883dcc83ed69022d185f134bc9e50b0a2c8481b95593e392a422afafc603af917f575d46ee031cececd54140b7f96f1dd3347e74c50bcfe4d078c19f6a0a9a242085d4f2c0b9e79b39dcaf6e7bf88e322ae9a5960866e0fbc129ef2df57170501fd7dff097f6d61b22a4b8c27ea05876fe6cf102871a524b6625402bf1b2e674f7fb5287884b9b7b1882b3578437cbef9dc5d6f9b0a4e648746dabc551c6921b07a65ff87afd15692d729455f237945f7c0b79b8bc2b52133ed1411c80406596db9e81ea1f89595e1b0450122f55515c5c3990006b8133dbad69e7330bbdec0c782e1ff93de67f2d138492e194a3b14cffdd6e747fb30ac36fa9fb67859a4f68015be2afcce2b4728ab937507a202896db9d1f8dc6d8791c858fc9ec93f8684ee5b42800da81440adcb0bcd632c284458e610b04209a59c6a1d1562eb5df0d7423fc6be7cd825e135d6e61bd5b563dbe7dc6e5287ef5225f333eedd1a3d3e21feee1248a9ad39c94bd1c323ad1ab87409f7282e78d608a5e73517caf8bf6f967fc5be9984257f939a478151132c162a8929c9524cb64c5e1c05bca27c2ab6e36652434b15ed5ef7719256e75a90dd8a8ca877f24bb5c563b55ccb85018df2a9d947196fb26f9ef2a77f7982f728cdc35c0d590c786ab630450769506027f290ef121eee45cd0e345acf01068a7711e5b13f1040e8919e9ad95c79377de6e9fd1b5f163cb66da647654ae6e15e7ccf16e0786582124136811b296d7de57b4be11d16ae839f4f9ee20ea7e929fe2f27332a7c59917f233b0b14c13747038bd56bda840a647c84d32361af8ae502ffc8d971b2256dc1004e8cc91d8c3b2262738fdcb0418c2a30b1aad1ba53e065c61c618ca1bc046d1e2f2c6660e5cd1d64dd35da83847c767803e85424d5461848a5188ab6b1ac03c1fb1593b5fd16a677db0a12241cc69951ac59c76580b5ca2762463bba5b4af924fe42f550f189101cb41fb1293a5dfc6b0ae6b5e54213869600f5383559cc73576c365a2e43c861fa442488dffd171cfb824d966640f452b5283d5a6861b8a86703488893c178a46ae84f9e77d13c5a1320389ec7e12094a21e277dbc3cfe0e9cf91e8b84c9e7831d9ee613ab2ebe436b724a2cdddc3575b7f1461434323b331bc2b95c8cb46f0da9ae4c0a0bb57ca0a5fed7e292b6c7f146deb459a8689e424c110365eb8e70b740df22f68253aeee0a4cb3a783fd6f497684ced13a2cf63afa11bf120d9c5ccd89e9f7762831712aee6e62cfe079fb9e022157c5d40092e2f56243ac0ed30d30f2da36ef8b99046e5996e4f0b5583c9cc2e9e6258c29efa1e9e2d87fd033d85f2f64525adf9a557984800b8ad0814730002e28007bef887a3ac0e9817af4f60be100b1e0a8949a881ccceb30b0f7ca99201e30e098695a7630a29c863d9e18da73d2f48e1cba89a05101adf9948cd1831f3f93b6a377fce1b6abf43a4b74680e4d9ca1aa342447a67a51a03521f1b8fdb3b0546bf483801648d22f828c1281e5e352c5a3a45fee56e1585c49fc4ddd877115fb4cfea0684f45bfe105aa3db07c0503db33c7b20580323d46e31f5e8a4cb17e38fdb684dbdcce4ed368d0eda262d9d8e107dac5b3784bba8761b6b5b9f8076da64ec0dbc094d290759a451e77e7250c8bacd570ca90d965507d7ac8038f367054d5e7b09a2893942c900d43d0128bdf3e5ce6bf85cf4dc85d976be879f50f449f73cec8352b898fbab5bcfbc04db47dda2960cdfbe647760f9fa57a36b4ccc5e33e24006531b536395b43062ca21410a6ef2221810c22659fd91c63c81c2c1caa75d7659aef948b8190dcfc1e8490d424f3f7c9743076b169cdc3b445f1b000a1d3e4b043b79f773f413a91badb96b5f7da81ecc8ca217f45911c43e63104d92b99e8b00909818946e53bb998416cc89673e5ad92a01459b96a45f43bcf2f559bc19b8d83ad400b3eb81e75b2df8abc93b883b7e49639ec7ffb63392f6d192bae29b1a165dd6f04e13672bba92642cb16bed59ccc7a35c985edecb09420922088fbef097f661d56d02fffa480e0f0b5fa4118ccdd2f55d7f6eef3774c9136e32913230e502c6a70182ddb7af653c25163c9a1032d0b7003c14a064fc6788e0f8ef494ef164c810c8ff4884151a6d2fca69a4bbed1ac54aca410442ae643522c092c56d3148f7c3631e0433c9f2b0e2fe2117b7eda5067621827890703c0000e180f5c0ba9a9c297f00048922afe675bb2235b80c7fb0ac26aeb971ae6939bd490e8922d8dd40f8b2212e6e8061252594449877ae630acdf0bd1e9bac60ea27b43408c4aa2eafc79082a07df5b9631674ab8414e7c5705300678758dc8fcd27c33554f180ed5efc04d1f619fffefd664515f5a60ea44f64d814c83fd8c3cad02744fe2989a84ee979ed87d859fffc24760289cf7fe3bcf3641394f37138dcf43d40177e09e978c782d389513ac386a76c4ea46b707a00210f6feba0d1b088a5a8d97a2b68a9a73add3014f2b045ae70f8352ea89510f2dec336b7c11868d4628c0f85372dd97b8d7b1be264107afcf8fb8712675db406099bcc5935e414db3eb4c1906ee9c1284cc390cecf60c49bb2713759950c39e0f9c6ad41be4bc775880bc93d9fcc4748ff2f0f67697019ba80dc17ea01f7569c39d06285aebe131d566ae1f7d128fd55eca8658d17263800643920dcdaec913c263325eae5335e09c90ef9018e93715a089f3e40bcc9534a7706228fd235cdab2f5f9d3e419889dc442855cdff66d9de3432623fc17c15b6c90932570de3ddb8fa67a5c2f05f5017a6f852689f26e26b0aa4ddc1dd131677b029402408af8ffd3e8819df2861b4d10c9b6aa79364e338370605f61afd7efc6f9dd51d22b494b80b3e57de43bbac1fbd2bb75b4a79065d273df3f681e69d0bfc01e076cc4e98f0e75779f6525699bc8a8c9540d07d1015f00e6ceaa89b13396d94ba9337b26d288df20171b51d83bd0fd246b249d4d238e860fb9689aa9228d41f8fb284e9905175c18f956d37cdc2329f41e6a667e030e4802942d96bacc1cd865607909e9c63cd41ee37282ca147c7ae05641c194b5caa1b45fd987ddd7fd58764ce126d4a4da5ef3e65e3000fa15b0b3960ebb1f4b4ffe04cf9f68c2ede6585863067365b9f376acea64554460c295e0d0dd5c052804fe1d62f784bfa74b20bd5665b63ffce95387f209884e2455447b32e8ab90c6b1d0a4d94b83295268efd26d5287e5067a0264dbbad92d5d261b2da45d8834a9ef91343ad4ffd6396e62601832c591f99e6a43cee8107e76543806b3bb58dbb45443bdb77342d65bc09361ada40a3baf71f45d31ad6946cf6f072b69aa14db426b74cb6b2bb33aaee4d0ba48595dd4456b00503219a5c054d189d783fdd6ff9cb7b4a6c0967c800618ff1bf4786bda580b78cb863e48b1b12fc0e8387cffa857c6f2d4257f4b6dbd0e7f33bc94d67b98153cd48101a245cf518eeeb69c4ee5f59294f5dfadb77e7b1e0977f0b6a282743e7869fdeb3b1f60b1e283f69209b9bc34710c1dbdf2292451d8e32ee68b05a8623777e44954010b60315a63b0ffe01da1b14d0d085306e80bf831f2f1e6a3ed54578a29b28511e03eb58e2b9ba36f3dde7b91b4f873c29a6742cc5cc51ddd3c151f8105b3b78c6b8e45d7b48a55a1f32d8e4e9a428de5f070517af33f124ac4019c660ef9289e273b3f23b6ef8458358acd4a1d6e60113aa1306fb0f18a0c1ee45882c09d9c2d8e006bdc9ae0cd8141d122cffaa203c0c7403e13f0e5b7744e0f6b43dc6a6908f6156d9a39f2b2983bf0fc83560c42c58e3bd0d86464f5f036647658f365dd84a5965e5db4eb4c11a2d0fa13142444fc322847eaee5188cc799e3b8b9011b94987a18d2a8a27ba1b2914acd4ece7f4895c9f1cac238318ab032ff562b1c5e60f9b97ed77ee09c19422b5361b5a15f265d44065accd5e150c8564111ee314c1f6b60648f3a91bf097d27dc1c8322edca1aeb9b2e7255dbad7e62f32b0a3be40ce69782998a337bc0ff5f49390cc06e18e5b5c43af303fab2684e1051ac2356dd9baa6c30353a624841ac079ca319cf5b8bdfdc36d661819d208b87b6e6ad10ad51c7fcc945cd1486286d7d0bfd32f7d89faebbf7042c3f4ef48168faae0c1c4588ebcd6f70fa21f6d60d4370cc66b0ff82a22b79f83fe5cfb1f3cbaf3cbe1e051adf896a3e2251e57a048b5b3f4f7f568031c4d0104b43f1dfa5c01c758245431d6b20691831041b65afa0e56dd949bce9c8da1bc4c3e918d86160f916987a3980e3905ab004840aa33b541d15501742d3ecc53df57b752a4b1faf093151e34ad67fd75941af0918f6d4c6b7aae6a04ba9a3d62fd547398e1be69ed6ebb851867fc912523b901e1e65286c3c86553d62604434cdfc8c022bde2a9bf8a5f78970b7df974f49d7cef775bce2d6fa21761fa127c035c409ef8caa76f9e94298b94a212c6342f20c26402cff38c3c19a14b6096dae34c64d6b031fd149c7cf36a25756e28fe1fd4069e148d4c36bb2571cd08b1658b7f658670c54bac3bcb3c74fb112f49e53bef6f6a60f94a54234e5153d5116e8aa81a6f60bcd5222ab5c788ebfc8008f7e10f0c4249995e7449a86627dc0b61d8daa9eed2a73db905bfe7a31d954cf768a339dacf481d6bc32437194bfaa45e1123d60d4965ec512b7ef043cca2a5c553bf0f755a08f0e39a07316203ed63e32e81be87ac98151083adf0b054faa0d1c33771edfab7125c3f56b06fa133614d2b2e2c242b972dcad99310960639bfb3f278945db60bad3986c9ba982719c559522b653bb5b4498e01dc1902d6eb0cdfc31eb8e8f826367e4f80c431be0309e58db8cfa0c11695b6434b388d624a06d36e84b2bcd85b694249485d198cc429a3c7b767e02a24029e947e1f36f4db2b182cb64d8df9664b8044e1b116f13c09421ce3693a28aa3081461047dc7709c2d88da605368e0fa1872098e2625a0887344d0786601e62fa655039a4ab6535f63b6f9f177f95cfa9cbb30c5f14a28eddb9c2deb67881aa6134a7101d3feb7d519f051e0a5402fd651e214e45dad51f47ead5c9edaf4559b9abf7b196deccad9fffe7c68f9d2cef707ff33b7c0621644b893f9c41aa8e7e422afa4ebd25b63a706221be5da947c8130f97782a908c35ddb9663fce3ed1775a95d8871b79490926da384054498c9ca992c77f199e66e9ac0dcd166df3b2574b1f2658f4667c9d583a24ee65f3d26612d4d0e5c220cf03f5a2121720b8abe679008ab3dcd97308ebcf1940e73c61b8ddda79e5b2e24251332845ab429e1d5518e1b358ef80ca88df16d3d6252143b4dca904c46986d7e3cb3e70ee598bdc49b88628512f4e5af5768f33b432354f3ce8e560a76cd4ddc7f000a1d9c54a676a2792ec51f423f871386ab96f8c0e63b3b58b98eb13e76fcf56345795e6902c9e9d8a3a643f5fb1a50cf4288b49562d9046f12852aae2c9f2177d1f4e8c4af7b806503eb2c80e8cd397a4d49791a4c96a363bb02b7c05f87454e4109cf1b21bb46e995628b21af7722d5c766761bf99ec2d6a1d669786776afb7d689908290d02db28e8f62dab95be63ae33bbacef0abc35ede9265b493c0c0c1ec0e89258e87c1eda1dc6a686377c8dd10478f2ba85548c70929c412b6b83b9b283aa23ba8b4c5aece5795ae11034c51be818ec81d95e3334de58abd7303eb2b6e5faa19d4c0646ba68393759ae5ce601d5e7dd7ce7fa2e22836f06e4e76050596d2548e90af694d4ff2a3b207a4a03f9d16350bc8ed95aa9c1eef08179ba134b548011006e92e9f3fe08d2c938eb18ed53eb602c338dcaaf4fdf503627a053fdb0231c28dfd60157cad53c1db7e0df65d19ba6ba97a06bcc4a18c251ceb51330ea39b2a5171bedb3c58907253a6c038fd619971718d2328f1aaf98e4945b09b5b4ec6bccae618c8d1d6b2d3e642831127d0817fff3770ee70e78f783157c3fa56c1ed3b15e80481c4dd6819ad5292be25c9b4962fff3c737fae48c5007ea49530dfceaa48d7eb8717de5915737e43b53c6ebc2a20849a6ec65d945694c3a1e0bd9a4921e0d5a94d3384027a7400fd1b72238836b1ee49e23764b7bace66cdd3bad46c74674bcd4d100d66ea55e78732371c2ed9dce0e88ba5f36eaf126052be27abdd0c6291f2d56c76a75fe8c575b787bf6b281be15ea4d5d67ccd134165831a870f5a011a88755aed1cb880db4125bfa6588012dbea5333e0c04a7e673dc0ca2e081cf51bce22c4c108e01055e62fce1233d5709fcb8a03ed8fc234de930b9163af2bc99c47b677daa32b49d5e08200f790b0f6f102675ebeacc26f21f0dd7e82448789ab6a5bd9c804f1497655b15585ecaae0a457ea0b7af1e6b5772876a7ecca5449115479cd756372ef4dcebb88e6f7ee131350cbab24957ca8f8fc2656ba06638ee32acc6317cf60eb794d8eaab37d20179f132f82bec06903a24ae76b0753ccc8ce8b9557a23f8c2628a47a1e03fbe879f08f34d0439c07101b6a827355a535a8e15cd5b79306704ca82f66c693f53be2a5185fbb80c7cd6dc520f54464118e3beb2a1f1c8c316e65ca3974227cf771d6d670e99d083a55640b84d98941e449744669dd84754f1af7f7134b31c201b1ba451cb8b2107a385896e79e803f6949830dd03e3e93d535df1b20b406f59d8019b723e65bf4853511b963c822da2e275d9a90ac6b3ac4e485df591b79d49dddc63aa65f0480cee94047d9d3887759a930f5b8d1859010cc2b0ae8967cdc8e1bbeb959c9133d65e023d73801f275a389ead3c505177156c1aeac8a00575f4e71e779dbf885c30fba29ffd17fb1209b47be2013f9f2ff708f6a31cdff715f4dfdb8e3b84a5000cc1583c38650dacea0f31c827734ec0cc560c4bc3a677c3f627ace20d55f96bf91a5edc0c0eceb86112c128b6a13d83948dffaf2efce4a842516ea41aa07f7e86264151be9891af528b20786f4e6dc035b82351df1df7460dbf6953f636f5881cede75a2d378993a137111b8418ab8ec154323700d3b887b37c6d0118c13da30f4ca2258b1030aa8f93b2724d41b14992dae2daee123ca500b485ee930ea6eb5171302558393f41e75d728dc2b8e1bbff74c2eddcd9f76d7f304c85d9ea5dc737ed951b679723b7a72f6c2e9bef1cdedda7d600e35aedde3838042919bfa60ce7e651ae25c3e792d71735e23db1d3556f13c473bdc35082369ce3402276fc8eccd8968cbfbc1eb61ce07727918b4590829208c5f99c018023226407343b5732617772e1d4dc6e39bb4e1ab5506ece7bc4ded55673caf3bd4eae1255154234e4197037666196334199c8c8422a8390bc8c868c7f809bae70e1060b4528abab33b3003f09f780d2084d61be11be804cf28669948d312241b65c55843b6b2b4ba46e0a35f593c5fd0c8e4414db26b2930529794cf0d8f4c799ec84c7bd7ab44af38a9bd65c0aa7238976808619a9850e709ce1e087b06c908cf955440f540e7327cedda83f67c172e433a40f02803f458fa4a230e7aba9c67540e5935d326422efb1d9402587614d1823ef322d9df944a66d0fd397a427b3679a5efcc3780016c34dbf41b83449418b1fa42af3104d202b6d95f81716adfaab994591be26a13a215a5efc61b5235863d750d849b12a31cbeab1aa52171eb09052a63e45e58c06b7426b562508f52723f06012a66e2cf1f8abd116994f4346231f70fc4258748060fd4168f7c7491dfd56a5f84acf60a65a7a3f09ad7bc2819ca871387a2b035cdc49974dcd586fcfd6bed776a8a81bafcf3be149e0a76ac6918c5dda188107bbbae4c83b8eba29f4cfd37d74ee18097855538b8185d2e21e2ac8de488e9a8a99bea198120380585249d094ac748225116ae609c02ec0fbf22f21b44ff9f990b5abf1a7e27b69d6dfaf2e73ec1df438b2ca851fa94a5f5a305d081096a7ba8e99a7afb2b43805921af62722c5f9dbb1fcd404c8aad55a1bebf6047228a28b27b91be42d115bf32ebb387a27fe0e260e0b0bd8bc32c144aea4fd1cd4a269473b02c331fbd4ba3dbb62cf8251c579950dca1a6bdab810a4e3023ec807f86c719dca8fba9ce0856488d9081779bb7ad074c9af47cc96aad99120c12e47f4ef55cae2eb11e0501e2b35ed82fa1c6be1b6b27fa0486d9941ef15a7a773d5d248446355aaea542c68e46647a5355464101424dd2608c5283a138f15503b6723ffb9b52d710d9eaaeb410bb2acdd317c22f9441936d79902b5632edc8dd4cf3416d883dc1be5d7d9e6d3d03b996979d362802238b714936d825758ed4542f5c8693a8d3531778541b8a8967cd4d96b000d676bc556e6c45a8a33fb15714e223e0559543e7c920012d35ea9f35b43eaab9488f79a4eb853f5bba871655f1d1b38d504152dbafaad3b8de6104a03036e0c1826789e10905eb8882d7b4db1a886270d11c8c0d3b2e4f2cca57901df4b85f3b4a0f1d53c02ada5f5686620e6042976c3ba94064d4af22d3968218f6eceb43af7bd12ce636d600f1663c46c7800632cfcd55ecc6d5e2e6201094e6083cfadc1f849a4d3b4c73e136297197dcd451aa8e153c0d9705a712e72c864806a4263c6421f89b1c99db1d3edce0d006da2ddaa7a387a8dc78217f1a5764383ab8050c90f7b80a4bd3573308b74d77b88add82453866e15694b88771f663c8fa09b3e18f7bc66d7d4118b124056eb14ec026fabc291954212f27034e5306fc88e354563214b38e2bbbafea226739480c1b333785203ba930fa77f434375d37affe0f03395423b9e83c844b3c05862bcc208234c478af34df8e516667b5852c92abae2452a9a0050d43bafce5bd3a4301ad501365bf0f7028ead54dbe085ae14d6e71128f3ba278a8979955ec1904d747b69935ecc3ecb55fab1a720f8e2dd1724ddc382d7ffa324b7d2274197b546ac297c684e04a8c1438bedf4b25c30aee0148fe5ac6966f81df8408d62217edd312ff2e9b445471c349def82bbc387eb96687a46fa0ca0ceaa1e86c156f6e47d8083b7140959c082f23c1c10c671db7955e701c6adedb7d29648db75df63f7cc98139fb18f974e6a207224593a9a8320fbaa89044c37181b4edb52501aff00d235780308add2254326db6c17bbe153242c673fc064792c00e843743d5cdb3b41580ac1604ac3794d1fe881657de411260d32a6443160e0eab8a7c8b4522f9d0250b2d8016d287875dd51f6843e22e3bdbff98b902eb55d98553d899d44eb475e71b6b55469962b0676767c37d204c6bde08b648804e96b08077d882069ab20aa48ad72fb4f6fcf531c2582755311bfb527bf06f63d7c08d20e6d0bdc44e0b141ab79c6297006ed0ed25c286ee54ac755a138d12107ca0d6946d9868fccf811182c87e8243dab5461162549d41e1f6ecfea6a5957aff8537cc56042583204aa6051674e2469cab2b55cd84a61188dbb403527eac73da5966ed61065e2f1bc600d469cd6a3a141b62d28ba76e13cf3cb88acd74bd80af5cf3130721d06b780a079205ff5c6366e5b987ceba1c56da865634e0bfae28ba99722a220bf3f0095c0e15e0c31823931ff2e39f4b31b826715aa830944da608f66ee24b1bc56c53d5bb5da272d5e639fadb557e7b7b40123007e57574ad2eb2f8ed586e91e1df8bf9d11949b06200a3e7018e38fd36eea4980bce5119356ba5f1aa406c20c87acd3c0a0e6979bcfa7a5e0cde61d440cf43c65449e52bc3b0fdc618b533be95f25221d77232d8f3cb3eeb04ca4d0720bfe1d40c2de7f747b8474f233d7111add9c0346d954baca07332ba923810a907cab43575f5fa75574be0593c90e7184d228541c622f81aa4fc549f94d6e497b04bb06c106d8d0663200124b34be763a33a876b0f95615e50696a39b99f3e14683d07be5e1cd6cf8482697de54e354325606c4b1552c327c69900b484d7627a543d0f11092e00d947ffd441d3ab281c0aecb69bf4a1a0617ca6e6e8e4077cc985cfe97b1f8259127418869fb02c73b6b8c2b537853e55dc4352cb06b9701630669806203e84ff0e6a3a7373b4409e5ed7b10065fd8ec26161b06ca6373a2475ea08fdd1bde7912192a9404d95b62a2aa8179a692755a4238dff8bec1a4248be90e8e59029b14a40f340847ba0c564e665d70e5a9572cdaa917d87c211bb4911b4b483fd497f0f3c6713a7e3f8e8da40ef1f8245e944ed728d4a19c56e6c48c9f02794f1d6a4f1409714de6d3a3cad2ebe51c2cc2c3c12a77acc6008913cff33c6ac62e0035eb1f4e578e60c90ad8f4fb5ac4bedcaeae62c51b07f33f945ad67b3a9413be38812e1cdb8f3a2aca994d197c76a30f12d5444a3dfc5c99cc6484130da0a485ad856b5127eb9d5edc5c7b289f981698f88f5f43174c7ad3c85fc3c6bf5a3cb0962a00d55cba2a25598737d4f1c88c00df1d58f9f864891d45a637994239b6bf0ae0dfdf0084b345074543163b05f0dcf36c9e9a13c30f423f97c609311170b224a725d831b43fad11a0acd467d87ee1b3e96ef8c2045bb324739aba063973ba1b502bff58db6de05450810bb024b7c00fa710c02c1577f302e7767e5e05593f082df55f907dfc74415105ffe51b6cf9b848408aa63ed8a9f739194985127edf9944dd0e248a21b9e88e22093fe26d19a0868945d54908e10e58db7826210546b7e103ee0c22caac0792bbbefbc479cd8d242e8e3f673a903c440e21a6bda6f47b2fa28da5b88b0c6137bc8f5371d81adb3f9d91943c7f4684297e8d9484843328aa713967b4a6150fb3e058e2f7607d9e039289ab8f40efdf141197207368419080d55d3fc7ecf1ed7a92163040f79730f3c93aefd562edc284bf61495a3d603b70d82f8d8949b64dc59d1e1f3cbe279ce19bce60f445697b90ac3b034b4829d07f6bc03d1f0ca55ec06fedc371daece7fe3598179f5a0dacdd0a582aeb0ce3f55b89304b4284728843c25902afa61bdec305eb375a9d6449e9066bb8d467d06566063d0a01ccc15232add32499e34bbf218c61d76c05170ea61ef2f9b2c88c4bc00114c0eadcb45ecf269cfab85e3647b0489daf348cb303baf29b85b4b9b2af5e54234d5da7f9ff4faa315648157153f88c9d630d02243ec9a204b0c6980050ca7a552a1a91c71b4f6e770c7a73f6164ac5a9cfc2284310f3261bb6be8402542bb76c05539124a7333dce0b6f3dc2b1a6953ff2fd69a3896df5b4252e90039d21cd6a5eccba584477ae22b525e1fe70d759c0db950fbf8e2d855e728fce91fd97922b4d0ca5f2c923cd26707353bde492b216737f6c5d3d41bcdf9b2f0b06f3f777b49f23af78576d8dbc4ed79cd09f72d98514c63dfde7737a2fa0041d0e5612e6c44c22437f68dfcb993b04ac9b40f748eda624acfec17b206514afbf476c99a3dbb5a2bb06fe3e732ec917e0172db1ce05a2f771ee9bfdc346138cb43bd3108ca09fe4b23c0ba018a609b1dc2beda576760b383e5c32a5c8bb330ab1c1d6db713283a6ad197c5e352452ec33f022ffdc667e28e6a29cf4a84f6f0233890ab5361a2ad9d3212069e291892148074e8a4c371420786aae66e52e80341fb28f1b60200da039448196a5f213ab540e40b36e5465419fbcfb7514cb34c808588d409d07b08b4f1b643cc524f3d209b44392d4ba644c2b140f2c3e1af8bfb075bd9ba52c7f1031ebb6b8bad1336963c9abe1d04da13f0bb1b4d024b9458e58370de8486bcb1a11976ee6b85914b828940be1334bde32ff74cd3bb71a2b64780b12399d46fa7a0c24d29020bdf78a941d3331358d62dd278c4e538873a7489a4d55ba7e948965524822828a6c885f44a322d7e7c7de9eb373038018a098f721957d11e63735264735cc6134ba68322ca967f778c9cb0ab2ffe145ca4a9850d1611d73b784e9c6a0daef8016bf6a6586ecd741431d5230bdd603ed860fa60ad12aa2fe4cad7c124385c5b2bb1e5188d3fce9aa20e5fe4db92da5d7cb951cf964cfa4c9a7deb1c2aeac5db879bb14102f7947bf251caac88d193b16b74754fa02b4be5b87c4dab746ba66688d563dfd827b608023f41f24b4ae761e03770ab66016caf187a9b8a55a20a18cd616c6c6f23d02b4e418d330d960680f5567e357038e259885db1b9ac4518cc92126988d7abb73328244c8740e2eea44c925098f3157a57e884ce3b392112500cdd9350cdfd084cc1182039133de31ba45f1dcd59a0daaabd077d75007a18bc4c5267246439d77d8b3b04f1ad94824835dca84378630af6e9d74922e51a700e2cad97043a237f047b571e4c5051cb6a4741cc7cfeaf6ad850dddf9e426d087a6c90d2cad02ef6be0a0c3ddb0a27ebea79d4ee716beb02bff0d7914241c275bdea3a89ca43f1bcae5755eb75d5cb95617c527c097fff9cb33ffb0199b40903e49f6644edaa6e32eabe5b03970b36c0503faec81764933124601cffd16437c4a83565ac5642ce8f0db988bd7267c76bda08b2fe3bf810ecf7d3e3ad7fba5837e3201cba04e343c8501dd782adc6bd05006fba3881632ea6cf7aaeef4ad749eafff30092d68d44028f5fcc503ad4a0d3099c990f46ea5f6c0c65d5ad3ece7ede7dc3037478d9108d244c85225f4ca90f1aa522eec9f718cff0d8c1a10a911d0d7231e113981e5b073d7843a4008d49372a8f38581df0672532a47a87ce5afde52cae5bf46f2869a19931a3782c23286f313cc7be29516a2de111fca5547bf1ef799d6089dda48910327357673e520dfc51d8152a7917d105645061ba03298520248074389371a4d73c5b7bd232b5e715bc3cb03fed19658d0cbe43ca08f19b1c73f62780f44b2e799b5a3540baec97249a3259ce70f8bd66a81ab07b38768d159e25688f9a84c7490e904ce0f6bbe2738f6728cbfa0da1c095183eb8a5e2d4ccb5971b7c2a4fa36d19ccc2377fac2683ecd49639583371dae1514140077263e13502c6e31c6d3707a50a2c53bac0827239a7c17fba88a606e78492c8516486c0ac267ad699407f714cd17582f6fc2ad536cc403927fcd86410c36b9f3b6ab5a5bc689a17c91dd5885a88f6a85121a67303ab2ca08e84e707e8e6263fff31eb672cee0b1aa66353646593e6a513159b14120af399a5345b56411ed3f7a4d38c24f51bfbb688058033bb3d504facf6c5e13d20b2c03a272c5a2dc88815f617e5960924be82b6bd9cfc07eeb5cc1da6eafa066ae665c73c0774cfcdfc199dcfe2d9ef429b12b7e42e09c5f684e008bdc9e77415b501898b91c36796b0c297b7cb3d3179df379e5782df77a7dc24cee44a3a0a2906a0efa9d58f0c3b07c3a2cc2d65b4a5a75b8d06fa15830cba070808a59d8960871cf800b16fc626e94e41826a78feee0571ca1b8ef38a7f9681115f2620f483e4769150d399e65a544c09e880e01932c802f63d4e1cf6dccce96528d5d85ba8a02b448b1c6024860113e42e3a7df69c039152d370cbdbc8a0990bba8b1df4fe2334de75c071c5e5717d882c8fa11875f60a64e11d37a409da1eff4dcc852c9396a6df0de232702e8a4f8ba6dc36f8938703a86a9fd4a1ffebed72d7bfab6c2a96965d287ef5fe8425a0814f832653e867c3c847c691dc2a699ff248528c92d673163a5cea5b2aa31e9649d530e9c167c810e6af29d014bf5248c004e5dfd2a14a38805a973e364d8df5dd283d02464a94bfe427952737d283a01e2edb0c1c42596de0ec04f733de1298406129865e5c1c7bad3970cf8fbed5c472dfbfc1e0075889a25278dbb7a25bff2a04160786fd479a1b47de87b7232864810d19b3122250dfa4da215ce2685f8780c3007a24abede1902e03b8a60a92b9303cb5b336d3652a66bbb53ca585f2897c629b23139a1cf3f2e02b011151e562cb2e68b8729db22c4160d40097a661ce58cf74c2481121e8246b1d5646b323b61825be3020bea91e02fe3aa18d08c3118422e7c5004d97172c26091fce57f7337d7ecfceb24dcd4b245d861831a737f269ed7a64c5e8f3371b48bf1582d464f573e5e9acb48b76f74b56a625804b9237ae8c111203d4c36a5b204f1180e45e30ee10a421aa79f3ee1160e333a11b1591a22ed52c9b2f948dc49b7fc3f5880cf5fcffcaa2150720ffae41361663c1a08e5923253296bba818169364346b255909d3c195003be0351b6da2009d6441854677f096cd126520333735a4617f1c4394f823371f8ceab8b3717ee2de1ee28aec36a02f889f90b12fc31f2b416be90736d96263171290045b087563f57cef88742bf519993a598257a1106b7436b0a71b4079bb5e7cd3ac678321639ae28e8f23ae3275e25497fb326f9306f111525bfbf4c3676e985968e07b1293af876d04a043c3dea0111b0cd4811ed8678b89c439b62eb0cef4021bcd84aeb5ba6230ad52ca2b60cd3c85bab1e4e57734d5d2879d2f1ac15ec039e2d2ebde484e2b675e1e30edcacd3963b43d9c0c8a3a6cec26126291cd5324559aea7c752e3effe26c35c2003c73285c0c4d455a4f859c5744196e6a6b22705c36127af42bc24523795573601dcba6482a5e8a68d7e42b4210bb8b5feb127f35536942913521d608790659e91a5593150066c978e3ccf1f75ba311258ba264f176f94411a818c56076f92e8a0c2e4b4b314dfd37f0e36115cd3053f371003a5a176c4ba94709644cb11034daec22dc38c95a7805b891cfa15d69b34dd56595b2a9fefdcb297d33278ebbb399c22e785d17eb187ed0ec7d7f703ac7b5bd3911f0fb87e883b82f7d4b407e47f26ad82b640a14d76dc39aecf6c35a493b41063cea1990538e28d809214282211967fb929d8465093de93b846c2f410f4cff7130c5bb36f6d13be4a32123830363a1c63ffa5342abc24a3b7ba945bc2027ab9574b9ca8c8bb2fbed45d6ae4a4c7bd5644887548d1fd479903b4ec1d6e5324945280dc366702e7a47f150b759f2ed311b8c124d8c97f853cb418c4e66c47f439685d7b627fe63772f42032ea2253357070468abc909f4e52adb54d88907ec8a0764081b102c33b210d37f2e96371b1cbaf55b8ba04f02a9d2eb5ee73a86589ccf701f98969f7bd4bbad554dba039cb3f0a11f9f3a4b50e458e54d1e1d52d6fd3f9f829eff8a4a089547dbf5b620c6eca8d5d27bffc49d8a3c336645769de86bc49531aac49c2fdad1e032369c349b6ccd19f4ba376497c03aa34ea19226d7a8e5bc9a91df2006e05b95eac17007c36137e6877dbd8c60f21eaf5f978a51c2e9080ee4982d2707dcfed1587341d006a01134137d40f49af5b7b110b8128b37afb657dcf22897c3bf100068ec22014cdec27fca0022cd7d2dd1025516cbdb1c2f9505e3b1160b20f44f84e0a29125b51735fcb236db6d74235bf0f517484aa75ea778fd25f1e8e2f5bb7a1e8a3c63a7972641d5fde812bd847bd00d05e154abee551d03a29a59b83274218aa7e198a0bd3feb35418b3b8db87c6106c8c5ab743c8b16a23cbd5c5db3025c92cfa87a8370068407bd88d5f2be31f9f38fde58f189632b300c329ef59347f61f5cf6ae97f8c7cde80030e841086d916b495129a398ebf5a8695e0fac683068b1748b137d97f6ff390a995ac4a965eb2888876da43bed0bad3145b6b78f41c772346dfcc0ced02ae1d8d68f0701b1e052995574fdb3bf3625d11dd84d22ac9249ecdea41a9b8fcb92fbdc4c035bb0f88006944f2eb41cc39b1687521bb818747f7ea73726b6c463bfcc162db56e4e2bf5fbcc9e3874d772f4e366a2a3714151cf7ac562fba431565a8b76525d1817b7adbe059f724a4cdcec86f8cac7650697de95de409e4180fea0107d42e8e193895d9ac270451a5564016be58985f83b6b32e3b7f3dd2aa655430ad0ad4feb6e3018bafd2d391d58ada72b8f32fd854ed669514aba4d4d6bc230d621ca84433fb4e383ca6553d0cc49dff53427dc2493f18a694777bd945f4c0165dc8ff2eec6ce8883e77d5688dcc524e357d2be49f8849492f4996a279537377af018c8f93712b6e9e33be3ac88aeb259cba3594716bc951fd9f178c5cef3304f2d86db44859af5f164958dd515ce13c30f869667bd7b83849f97cf26ee167af4a51cbb9b47cbe5771b90a59dca1161db6ddad2ff7ccfec4a2eb6fc96d00f9fbb13a2047441d4f619106aabbfec06656e9ab7a5f4b6417f8c798827f6ac5de0f5c9e8babe888fdff34402784719b1f5569f50c0475751af89eef1700bcfde44954bb3a1261a71ed622b056af3ddd9efbbaaa1e476ee337545bb29cfd23353792ca92ab1d0632b3e424ad71e40690879cfa60b9dd4dcc4df96dc7050562f2f2f96740e0c964b1aaf73b015f74d66a26eedc5f40dff15791c7d4262f0f7b958615b2994e69eccd9287f0b01adf4999cc82b9dbac159b63de330c06783179e796e37413d5184e306f6168fe5f703f03758ada02b8b02b192e0330afe505e0eac804f9d0239f3b90172a35512996047f8a84f6c4f45b530c6d1bdb5ffa50f37481d4111a4413f3dbca69ac29544975b4223a0c1ae61b274d9516aebad270397704d4c7210d6d0394791aee1de7a6a09c8dcc12541f6128ba19991306516c027e8cba45efc4ccd62590f306500aeab00ca19e1091da4958748e6295fbe034bc0021950d3174d60f05104a8cf3d3a2a69725c1b454aedf592783ee1b842e0dc457d14f79f0edd0d2609c2587bf436893b456fabb44636d15f88ddcac73e08d5ca574c14c0be7d10d1191eb2f483351e68d0ec3cba5a7add8c9ab7d4d9d4d242296d9148f27c24ca249d9e5d6c908ed386acdb8159c00f71a012d83995ca156f2854ef16a6c3fbd65eb8a31af5f626287ac2005c07bfd418ec362a92b70292a9f805d08ece1137023691a4abb849e9650eeb1d4a63f0b9d712114003c04b67dcafc00b7a917d44f756221000ca004e2f78d3009fd6604d7565dd9af5c71f42f4fa02778bee9376985fdd1d43a9386070896d8a3c7b583cf8da77455f45560fe511ea533bd505272b7b17bb2a2952944674952c2a68326141a2dab834e991639327911e3c98b026f4a5d5e4f891076d860acd8559546cc800b2c6c8f1146b9a6c2cadb83b31868008ed4011fd9bbca158ecd4941d4552b93f9122edeb4b6e96208e521bd308c4e6f6c45dfcb437ff42d3b6680beb2ec17c869fed1ac7bb549f00aa51e2c33a711ae82c16857b448f60f519b506cb6302b28be771d2dc7e13cf656c82843a6db0931b5bf726225f7e57631b03850013b6bc0eaa6bc5deb02c3cdb0bad9412ef232d227c9d70c2cdda79e9ac945e720b5b3a29c43ed0a9fbf0cdeacdbe0e21e5be7b7e5cac2387627e956c590fc110f4d4c04b00c0ccc6b4bf032abab68c5820dcd9a60339f7c5f91ee50fe51ccfedc83b630aecbbc24b4b8b9c44efcbe03c49021661a7e9ce931fe633980261286c2104a02085a41580e196903d5d08c2ad76e35c69b897a7fc78a27dc0beecbf45b62db794522629033709d1084d08dc83742a55caae1741fe408e3447381fc81e5ab43dc81101f3c09ce4843f803d17fdc3fe031a08b420317e20c7c4d684dc6ced41a009999e4310024d0836b308b42022d0848c20534dc8083421d9968f7f88d27ff8e187f9c30ff4c3225f13f2d2659bec03a9637eedf291289399b8d9f3b4e783c0073aee64c1b3c1ac852eaa45fc4804822309426e0ee522e971382ec2bc9f1e038e701343910147c0895fdc2077a3810b7c1e8cab115457a4b1228617893dc0883da497597ed3852381bdb0e7fce843dec89ed3c32c79455e22f67cab6343ab33022023c82ec1905ee5187b7eadd982205d20f0af032c4d8ad6440343a3a239d1b0d0a060162ec91e99854b60ae989559f8a2209f20e3928b8cf8c866a320cb0e97a20c678373e26e50a035f1bab5b49e2ff6fca8853ee421b0945c241781a96030f018210eb51e6d65755cace8297b4894d4e1cf022263d98e9a0364889a289dba78052e6041ceba4eae20d74edb8932f369a7551165e66b54441d4150ce77a07f9aa1f99c29956241a964a424831ab6b2c93f1f38173134de98a5837ff379f8379f079502453b61e9252d6881a6d2a4b000ff7c84fe7938cc2654985fa001a9b2e7632c0493ed338811775c2fd08048afb66a97d51eaf91ae1964dbd5f0b70b7ded60606e0860c6c6d2d2bd8d17ef7d388e01cc8d1740a80617306cecf6ef060fe452dedfce86af5d4c4c0070fcbf0fc75103f212130000e0e8a27f30376af8ae6b82ca14c6dc0d0fe4765c14f313c6bb34c8b6d3fee6ecdbfbf0ab713619111a378932f36d7036eee11d0fcd4c71a8c5480d08cc109b060f9b623a5ceab0913268702be11dffe6bfa8f67c50c783c32863840631aac60c72c5b4c74264db7dfefa1312ebb010f9764d644f3bcec643f3ad87d96efbdbcdf8dab1bc1c923d7d16dc275a9e7638f81ff40917ec7df864e9381be76efc0b43c79d2d6af6c735cee49c8d6bdded6c078606e5177b3ee5529c89b3e16e3854f55c5c3aee6c6113e2adb41971917f6a73a619327dae8031cb0a51464ef16f2bb1361ea88410422bd14b74a8533bfc1b62884cbb14a673746a4646f16f621a890402c17c984499f960fe3061cf1f629352a4888dca06c636c69e9f4d5a984dd9944db56aa1a6d274ea83fae07c5273345b7bdad3c70af1c3c4ad8ed589348ae88136893d1fa44f581dab436ddeca9e5647baac4e657d3125d59a51a2b808942c9b44ac563c4a41050d137288220ae0898c0835024a978ce222d6179106fbf93235c5964fbb1b907040ca2e5fe8605650144fc4d07b887868823aec95916b73a3b341e962b28df8cb0e882022c7f7b18864d965f883e3fb7393832c8dc855769fcd9938d6d682449aaa3d9f6342ec2143a963fec672826fafcda5ed6014be41850639130dd41c4d26aa9c104767cf9bd49e1b104e9be9075b8906123b8ab141ce44830762b0a472187b3ec802c59eae0d3a911d5ce97136d8a52be79c673669a109b366e83a2bc867e3971d68903371266e491cd11f516f63714eb8267b7a48a49744c99eefdf04c7795a138e091ccd09fe624f2d742fc63f106a2b4dd923bbb44d23edf932e4814eb96371fa640102db55ca8c0b4294d1311f7b195a47a770f8a7b51b2b8d51cf62b1eefddc4499b9955c1f26f6fcf0a3f369228781513b1ff093b327aa946be71b4b24b277d9965d2c92b38e761b8b0577576f9b4284feec20e806371612d9e50b9d759c0d77c3fd803b622467dd66c4439bcd864491a844c6ba68856b677bf7d9db155a0ba7c9452c5baea2e879624f4db527cbbf702b7d4197f6c6ba1b0bdb6850a75c98334599f9b70ced9922cd673ae135b914e54eb5e36c8270f182967f44965d101c10e26893126d389c3d3926f64665736d41d8f3abb7b15caae8b8a5c76d2c7d63a531cbbff9298d85561247dcef401fd452a06cbda4c90c0f6a2773c479d9bd546b2ddcb3d65a3f271761963cf2b9f16f462ddb99181afcb8744183d6ea4499a904869a237b5998b5e7cb2482a05ee8b8412e543428511807c4281467f26f723691939d4b4b83590bb5d0456488a38d854b3334b36b86e62bd28c21d23812f20752082c0f4a228072487cc92236285d7384c3199a8ffd7c37e2a227441ac7a1cb5d7eb3e79c391bf49d2d412fcd110d231e1a925d73448334c3b5e76fac39a22184189a8fc40fb410368f45845904e6f11177e321e7a2b184ece17b3e97a241e24c38cc5e083e8dd39ed803e38b8669ff87335dce949ff8d7237b80513e903fc819ced91865bd87966d7f2bcd914ecdd0fc7bb5de4a7bde7b2fa8864bedc99d746a8e381fc8d0fc25749c083928547bba074410b9b92351663e10e971a69206a5cb64755cfb73e31f1467daf33993fc59862dbd9a033dc38e4d6c56db877f52ac938bc0dcf3b9991f9c3d5b3a7b7eee9923fab3d50203a2810be142031722cba613b4e851f1f4a854aa70471586a10e9350a786142d3f623aa92ce4e8a45229144e0a85daa902b553c5c985b553c5cd4e15a89d2a4e3b559c6ab8e27e5e32d5f2d36a966e86dd18be64aae5a795c5aebd2f99b25805ef4ba65ad5babbc7f02553355ce1ee7ec118bee6d77085964fdf6f0d57b8bb634264324b1de1d5859eb1051831f4468523a83c2106870a13687882ca11aa5031428c152aa82cb858624417485c3c8188173a5c6491832ea8b8885284ca8b0a351f684683fe717c39e816559441c7ecb85305185d30e209d5cd4bb5840dbed682aa6783fa33556b67467e64cff9ce7064de1784d04351757bf4ca433108ac7fd5952424073af170e2f150dca0a6a10a27451ec797e30e316387c085cc08152a0a4d9c3e596629a5f4884d553c5c68333b3ce1be3beef0e86c412b25a249e8832652b0a2090ba688266280d181ce45d090a37312342ca16b20b181de7462bca03f5508417fb0809142d32a7c415f2c64410a2e50418a2f6aa42843cf144ac0443105ca098b83213ca0a59745e2885999c001a51ca848894622a4669c7787950422f133e2a164ba17b39503c5743bee588133332f6cf1e240319adbe2c6b360253143166038620611475a4e3dd049e8c116051b962978818436053294c848f0002f41e453842299134a570a3dc09e6ce108fbe4a544dd8112f4c607b309a648bd2d8ed0a215fdcb924033ef5eccd6e90206182cb828c20d173d78021744c40c416faf24b4d6051e564c118db5a0010a8dad80b181c6a6b0e1d29912680875a6240b50901401c5084c11a00c818495cb897a85cf112c845b043a041e5a29155c1c284673351bd45f6d10591e9ec6a3e596a281a1354141d1b070324714735be547f764d462384f114a0c08b9e95aa9e42acd308c061150a91cffdcaf7d5973fcf39f4e5a9a6158774d649ac4f415854b5619a589ecb71b0de21ec964632fbb8f7f61d0a04eb16839c6b5957fd994edc703798033392e0231cf047167cb4fb928e793f28f8c0f15b4ce61923d9d2a0315847cfd58babcb66233369696ee6dbcd8e0c504205403cc8d1d05d0410003e470c34c8ff7e1386a400ef03e5c7732eac8af75397bd36b60695d866b8e7093189a8f9dbcf6ec2963cfb74be0d7d656f8075a5bc523421a7f845a5cb167488546e298b080ea221d176511fef93a74d18e56b988e5fae5221b3fbfa5d4826a095da4e3e7b7ac5c74c3cf6f71b988e6e7cf38cd913ccd30f2e313f0e00c223d5870777870860ef6fc19a448b3c36b9ead7bf67ca2573aca14ddd255b44b5bd9535fd9604bcd9edd832d43f66c21edd94224000fb618c1f1608b69cf169b3d5b4e7b7e0fb6dcecd9822380075b52a1075b72f66cd179b085c99e0fb6ec6cb045b5e3c1169e023cd8d283c3832d4f5aa2881e6c6119e0c19629393cd8d21a3dd852e5000fb658d92d2fb0e58a0e0fcea841c083338628e0c11936dbc727c0036f027e011ecc8d1d05d0410003e470c30cdde1a906c4c7e71f3fb6027eec0e1bc93d3b7478a78bfeedf009e8d135413f3fd1a18bfee9f03c1ecc3d7e070fc42aa779d7801c40d341871e08f0b0c93f1d3adca3c3b886e6003cf0101f7539fced0cf0b5bbe18619d1ebe06ca27fa22efa37f306c8e177744dd0af51a3e3ce16a77df7fc02e470c30d323f33e3365e6cf0620210aa01e6860e02dc70c30c0e1ebea1c3251d049001000d52deb0d55acc62b5d65a6d70cce2c036c035b5de7bebadb50ad6e122b6c34718b191454a526630b22bbb4ab434451c51cf5a9decd214978a94700935433ca82857b2a48ef93412875676815738c452c7ea1cd95824d656352152ca251accacd071e5380e679716deaf0f66974e6675c2e8d9d333ab82ff298923ba31616b527277778c31d6430cb1276bd3be7aa1166a4f0b370f7c25493824b18ba10d5a1d026c90331160835687732943a6520de0418519f1d188089d37884b255c2a522ae5adb41971d1e73725b18794a86d674fcf8923ec2b36265bcea6633520641941acce07c84b6d9403d448dd063552cb68009fc3e35e5259a7130a55ee5de91915809c4286358a3f719ed6943d9f6b127be092d4c10101dbf88829985071618d48d4cdc866b3dd54db83ca26ac4a6c1f3f6ac813984bccb792975cf491358702684db450db79b267a8f1ec89592cd756bae18ebb88a15b76cda6197224ba25740f3d448206312bb4d8f5eb7213f697a18bfced8737cb386c1212a1676c10fb3b199f3d39934b571e07c053e0504a1753b0d48ad04824995d2721a42590a4e3609cc92673245e040a2fc2091f822505a350d9b543f7a097802c4676c9bfd8bdf65a0cc33039c6e7c348f3d16a879b441929a48ef9598777308f16c4ca9cb3766fcd166d09c9a65a71495ef1117d1f423decb9fccb2c168bc562cd9c78cc20e527e38971c6619338e28e60ab5d2f88dc1f6f9b22258703442789325ac87a2aad544cdbf10ff3b450ba5c2e92efd50b67cd3de0a6444bb2e7fb56aad5e3ac6822c5122528812249447264cf97acba6bfcf30824488e8e3bf629b310e434229a913ddf351d6845e8943e824ee91ccd44efecf99585a708c1532620dd298089805138d72abde22add29cb14160b89969b8d8fb6291e9adf8305178948c302d0fefcfcad14693e2f7fbbd9337b9d779b942833ff65b74dd9581b4bcaab79f9944dd9860c7d7f9bd202b72a2ec23cbb5fd1a00cf756da00073c40b35a3f80611886b3c6f2c9b0ff60c3c624c851d381468adffc5a6b8509823326a30eecf10932b561733fe04c3f228661d2e34afee950a7acca454f7c7459dc8d6a4fda0372e18e4d80d003800d7227cdd5040860d820c7b327c8e5ecf916ebc1774bf40ffb2a1b4b2d08ce6827a30e2dc4a71bb953e514b28994181bf10f4b771732687033b98841839bc9650cad050937ee462583062fe65b693b6d3bb246d24c5a69870b6418e4ac73b9b4225d2f55661d67e3759352aa9a8461e842060d72d9850c61a469124738490c5121466194e7ac849c73ce1927e7ecca2c177137fe6d25d0b7953813c899b69e0d72a619bccd886933619fc96e33e2dffc10871883dcca708e421a64989da0431fd1778b43bd8c511807a330a67543581d0b258eb0a5b267c82e893aa0d5892f474099ef5f5a3813d8599dd00639abc33d41e66a9ccb187aa465524483d9946d58b7dba638ebb4599d199a2f99b8c82ed1202eedc8292ec23edb733e77b23a2e1ac722ddabb5b461c32eb14de4cbaa64195627fb37af76efe75e97de65517380c57267c3189d0d3ee36a389ec324dc51f1f4641c97d960038e9bd369c6d55a6ac6acebbe3e2c353a040000d9a5952ac588323abc9328da5501e4acca64ef3e9b3b713742a0d020e64edc4da4915fbf893ddf5fdae4a29c4d5aee168ca586d568dcccf13ce156d9d442b3fa555dabd6557bd2c664aa5a6bad3757d554fec5b4703570e4b879878bd4a1fbb090586a40eda5b9a6d69a1a6b6aab1ef9d9d14558b6b12e6e173168306f5023009eb13a1b6b9be212062cde1937394ce4c7b77b6749ba7c0673c7301c3286b1b060d285954ca58d35dddd9dc537d6d6c25cd3ba10b75c7bfe67eb5e5ae82250a7765ca4f1f88e1c38402de42af6180dca3f1e05d881df354943e33db25bbbb1b2cbbf196a9ab5d65ad44ded1eaab0fc9bc283ef90804cabe02c44191df3f102561ad44855f31efe447c94fda4367bfed6b01a7b7eb671d107f5496196d44851e665071adc585b23e99d332234de3f3420dc118d3381415b0feff8c79978909587ec0cc8de1521bd083649529499ffaec9f0ca96d26b0fd9a56b3dd0a9eac92135b20688ff27c751f30a1d325dfbb562cd110e3a64bea4cb0112784008818cc31e150464e09f0b64ea454a52c41225458e20d9f331c618d7e09adc53010c5420674468160b64cc72b52cb015d98e6ca7ada402ff52804b2e168bc5c225144635906507b2ecb25d379071b8c3c38130ec5171402b693d30817ff587ec6a7d9fa15c04de5486e30e529d9ced3f7152d8fb5f2ce208f332d208f326dbef921d322d653b69bb63d96dd1acc5b865952de3cf39bfd65a6395b395696ece393bfbb20322d28bbaa71a9246a56729d21c654ec8903f1425259832294edb6996c4cb5051c635d376cd44efc9e5b2e29f945467b6546f61cd9b29cbc6ee39b6bc92a3232e631a106a3bb96b47bbecefa5b45aec661f9c3516bce5dacd8d75c6db27d31b0b4c0f2c3b7b969d79feeec900a67af40838e20073cda6bf5da16918524475fcc31ea461d8f4691672f4c3cb0bdac5a61fe508a45c6c6a377d8ac58cfce853d5a41e08f2bc4f97797287f233bb38298f19a24ff3ede40fef7c679dcb0faa9a93aa66fca33f834ac71ff341aaf383eacc910f33449feaf4ccae033344df5a4b976042a367899b4d67a6a8688bbaf01255d0db56d9e2e1221a593b620a7ea0b40373349fbe0fd43dffe83fa141ea187d180ca3aa978b86f8285ac17ae2a2b86385d6a6ad4d795c1477a29c36dd20ed696d4aaf6c2ae963b6d2a7ff838be89bc0457588033428687f9a6b3e4de08803e49cdafbb132adf89cd38a51adb5d91837cbb2d71c8901e79cbd60d9b6ad76f1c77de9162d8f11657c86e6ae595a49abc92ffaba2f1751ffb8982f78378d5c7ffc8eb68501ae2bbfc14c84256c5023651f859e1fb5ec7e331fcf076cabbe39334341205b7d98f4eb579a5fb7beb616ba3eed6acd0ccdb9c1d88a2aed9a0fb4c6104dfff5b2f1dae0cdf6be5888d060dee07d597969433cade6ca0c38baca1b50e83aa74a83f9b5b9940b21a94b1670a5b5d63aaf7ffdea4c05550facb556ea61dce06cd206252dc28863762f35d0f17df81785fe0d82f08e521441c9063f5011b4fc4b4583d1c71cbdc4907ce938809c8baca904c8510ae53ec63c228dfc7db392a63146d68ed5be0fe6b80fe29837df2decfb20663508a48efb60bd98a553629706088f6aabb3cc1f40207b482252c7fd7befbdbec13865dfcf34203bfcbb3fd3c9d30cddc73a69e3df7ddb49937f37cadcff61de97447cf3c0d7335f22fbfe470be23bbbefc244fb98520b5202ed1c333c7e8e3e7f1f14e32270c7be7f4b5969dffbe3f654314829631970c4e120bd9895b1c66f82426c3977bdd3afaca1849ff124b862f3418d79311e92a209dad5e50b9a8739da716776ad71a686123aeef0408238ea7a985f7108855e5e321c55fabc01e6b123c7f7314a24dd31b463bd1f76b3cfbd99addfa76357306850d21ea429d2c8d8427f7e4e94a9d9934cea634f24d2f8639e4ccd507d9234224fbbbe0d3c45d797392e9f758a991c389ed397ee28e33fe9e705f80d5ad0219d5ef8cfaa3152da5507fa333970bc94f4e5f7319cbe34bb6b40a2f7e10071946eb6678e366fe278a87e05258b0c530cd4650c9d5dbed0f66b2c4147db521243f6976c1b8a61dbb7a91c8506274a46f169afbbbfe8d3eff1cfe565df3e71917451e68a346038bd37c73ffb9c4dd52d5632c4d1e6c9273a903d36d8f65dbea0278e87ecdb89b2396e2d934bf3bd4f5c24dfd66ca3883627d2646fdff6ccd1f52c9518b2d65a30ec6a5bdbb258d8f6312dc867679e6d4519fb188996dbb6644fb6bd679667db07b19a6db11acb43b51ee496b2934ffcb32f718e79b2d8b7d65afcc47bd0266ae2f867ebab4ad16a1865c239aaaf19b20ffa627dcdd14c12435686c503bf97165c5f33fbd457d78542b267a2a28c751983ad48e2e8befd3a444da489dbda50ac35ba25d69a6da5f550f527cabf5a9f88a33a469c3891c67ead76885d55bbba075629ecfab1be5ebb6225fb82038cb39d63a4c9a2ccb46eb348636daea1040dfe945de08803c46ab64b915541d9514ea8944ea8ea69b95eb366924aa615cb4925d30915aa7a56ac96cb244b266932c99349a24c3265d2e9b92bcd02b53ebabe49527da48ff4f9ecc1eb55c6a84120bff6d99b9b76de8fd9f9fe08897ba652ae942b155d29572aba52123547b4455b28da42d1168ab650b485a22d3fd59364ddab3508f4ff7d6eda6e4b3333dff70f02695df2ab41ffcd806e7078e7a98561def214663df5c2ea2ba4271a4a52adab2949b1c7967edc0e74a34110d68156f5e376202863a93f56364881fd49923a48dbb7dcd854fd9656b55d3e5643031762561823ec6317656fe678c83e93b9d3c28e1ffcfcab147294bd1ac543f6719d62c5b659bc753b59ec5b6badad61d2f167caa5e322f0325985ab5d57a18be8d30a25cad8975a5d4519fb3594a84c5cdbba660a8b38ea6248e2103f71ab4c2494389ae1edcb150ea1fc60c7f2e08b96ab190f66953447337853499ce165577b2df605943ff4e15049db62de4c45199b5d7abeffb51f04b529ffecbb7841cf28e2a8161143f6edcf9c4883bdb5b616d9f6a50756d6b6d554b9b02de65592adf14f1598f44fe7f840df7f32241df378f0b18030e82570c441b91d3129354c7653ca954bcdf1a491088dedf8d8c62dcaac44b919556ff06a42e69e1f04db3308d5845caa09c9a24c16a55b6ba7b5f4c3326f94f19f9b927b9252fa276d5c4f4e27b6f4c05ab3bdaab01abbaa38765573ecaa32b17567fb6a86dc3d7bc53fff79afc9aeee899aecf33045d2655baf8748737f3e03640f4c54ab403d305201256a11b520fe38481f4049d36f807f540ba285e399ab16a487fb18a3516218e618363f2c4e84ded119402475f068426513f633fbb763c1d55bd699b8718834334a6791b401b4ba7a628e1c9fcef181beff423e16e0df0479f06ffae021c7b7e39b42b402d6f57a3b3cf4576a40ea67de8e394384c621ca4c973c34c0bff7c106a68195fb8f1d740604a2261c7180303493394ff1ef62f7da6b310c939d750fa3a2cc7c8c93517b3eae010b957618c7434e481d49a2ccfca89fb860d058e66c7291f44f82929fad571ad429e992eeaa51a36fa8b47faddecd42db34413f9b4877e78cc38494c29e2f350dc5533aa5531a11225126fefed1a317b10be9d24994f11c0dce7c9f5b869eef7281390281e26a8e542043fe1b64c13fe3e541bd67c8fc2f1ea837ce8fe3bed1492451c6a38cdfcf1e943a2f0fcaf8d24955a4d12c3f03a7b98f917b175a53d3c52d355ca3cb60d0da83fc9bdb6b1f5eb3351b1fb58f16319d44c56da30362e363626c74522525c69327ff3ca68b363c7993bda0a5ea6515f3fef8a58b5bf2f4d0f0fe9215d3c1c47cdc30ef2ab8fb49cf8e9a54d930bc3c0d0f4a95dc2f9def98171a3a9898a7e1a50de7f1cfffa5838971984e3e41424b940d4f9e6449835ede7f07e8411f359007d2785ba3f3edd239d7052167e854be5b3a4d644f2f82ddd63c1a04cdc1cd3a08e6712a554683a4f104cc058a9b023862e2b77d072555215192cca8d0be9d082dd11b53681005e19807f97723079ad29728e3ae514a379e074519275152150a02653a582e8396fbf54a2529ad562423784a14ccc2af4c04b7b015998498b2288b9adb744aa2432a4f2552aa1962c53f7f6dc751ac809a55e68c31c6392b5d55bcc22b977ffe2b1c25d264dbeb1571f429cdca1369e47f8250a3c4aa4565f5584c4a6bfa9c2c9507bb406a05af709428e3ff29cd11b602aea2057d85062d8a7eb5a839426d3b64db1bac56aed569b56a623b1156abd58aae4e3a37a52125222523259b12cee1e95195a8ea84a4c96a899224b485859355697b885d98b59a23cc05ee82b2b017b485c3a02e282bd40a85577855e242ca7549933449957c7223439b93d4913c289923238e33a151254d59495e51db1f0694a4ead42bbb88a98c31c69732bae0ca1844114c04f9e77f018789a20c444ce30b9b933449d1436e207fc40c44510ce2e7ef824aaaa519f21844518c1549a4a24169aa241b17d1975848276f924ba49224db7920d9fef21469a2f5ff39ba9e0b78f0e0f18f61b546a6e449fa4086fc97a871624371c44432914ca6eb9a5a1538e2005b52db275629a594524a29a58fd549e7cc563354a5564a295dcdd17cddaa41ff514a29a537aaa0c16c954d7111a87db69a1f20c4513cb26911d6a708192b3e2a36fd44b1e9e7894da707de0f139b7e86d8341b63d30763d3574665d3cf5af42dfd3cfdcb9aa38f97e9e86c909e1e88f587b569ad11ab13c3e26733664ff19c7362159b1896792698f45553312cdcd4b5296b539d39cab89021fa5d845ea8360d63d3af50a20c5d45199aad36a5f7c645f329134c9c4e2653a924419aa294a66844210b65cbfd465af1d2f69755a4cb496e235f3e44cabaaaabbaaaabbadaa92bff7bb50681febfcf071e37aea0ed4b976cb9a856f1245b4427db9b6c5fe24ab63b13db53e0466cf71b6c97646c975656923447f77a1284793b642a4aa9afb0dae335d2a59a23e9850cf98771e518b67b0db64b2ab25557486cb67cf09b3fa7be225b2c5666c038e79c71ce396729e50dda41556aadb556099aa338411b08da646c37db6cad9dd5b57d8ef01879884c92fe15a7a66e8cf8e78fc9c057228ddd2e939dd82e9381b03d27918dc837a035fe694868e98174089e200d3f4ab1b514638cf3277ff2277ff2277fb2fc608c3f61a469124752e2c87af44529adb4d257ad1b2b97720d7dcd11ae414d0ef211258ab1c57488d71c3962c40811d01090837c5ad92008d4c22ffc9ad184849132e5228f94c95cedf93467f6ec3965cf386b9d73ce39ab4829e52df937672aca4c7b6df6acf37535e8e79c37b6a0c10c054e1d17819a29c3f189332f645a4859614f2c959369915db16746c59e2a265c149348136fae6aded41c512f23a9aceaa66e6ad75a315c638d58ad9810acca5a2b26ffd6c73a20263d5dd38bd6cc69aab5d68a6173ce3ae79c73ca3ae79cf766b6ba69c543a9544b9db1851a90b0cc39adcabeb021f68975d91edbb257ecca4ed9fe334a29592c67ed386b8ef4d451266472a5c65bdb74721269b0f7772b648fac7915b64f0ff42650b6bb16db7586d276eb48e39f8f9e23cb63a33cd191468e5c492abb7cf1d9dbf6b73c914682f6c99e194b4635abf2cf6be840d307dde42617cd70b7ce501a7b504be9599593ed02067dbd3cc313747455947127ab2636165a6237dff7297fbdb5fdaf26c40bdbab6cff68425c4a94f1c79546596bf55ae78745be26c4595ae7b97328a42b8932feb8630293cf17aeea89ca5289a3ecfdad9338cabc6f0c0bc676d062b11dca762b65fbdb60599587849e3c5cbd31ccb26c0f0f7364ad9021ff2c7ab8b05d582756c5b22a566b5671599555b1d460941b03e3bb23c7ccf6188507bef39bf3b36777e5bd17df97f8bb13e43dbd12dcfc2e6777330877f3d2c773ea6e628c1fe37fd00479dba71703218198169f20ef12a8609b208762c879cc0ecc5f94f1d74f74f69fbf7f3f5dce6e475fe6fd7dfe911f24b6d49c137b5dd4cdb943b02bb7e69a2ece255d23db7f4a29a9507fba6a93ae2a3829376daf94f6c8e6cf77ec4a94f1ffe6c8ce91f530323ef4db37d8ee7b7e73848d1187b8a31b54e89c0d4a23db151a23238e5e2efa6cc7ae441a3fed248cb881771f3bf6f240492408b9b19757b1fd1d0ad80b7b7d68577727756f5217277573529749ca66bb7de29fbfc4aa602ee961add4f430770194e8c4dd2b666dbfa5ed352e98236c0c32e45f839b037d8f784d6c0c57b9ace221f93ee40af6c25e5b8a4e1d06999af1e5ff204df246056e02f7978c1e358f1d1efe3c3605dcfda3f81081382241ece99126903d9c34dd874873b77f04228d8c3e4419ffab44db0dc61e1f22cde7860e347dffbcc52f3dd035eced59ac2c8152842d64218a295ffcf0af3f44197f5019b4cc7edbf27b14d034af8b8206b17c95e09baf125db70ff9e3a6801039c8828aa592c2a9a6e647f53e2d080ad4cf9e0c409e04e28f9f218bbd980eeb70683d600f5e4fd7ea3d41ff09c9fd90cab8c01107d842e3531ddab2e24f779c3271775a653b7db2fd699c3ee7bd5a8340ffdf87c25528bd26ff9caa74a28cd7b737db67869a235a5393a16a3214adc950b42643d19a0c456b32d4be4bf4f481de60690fa362a844cdb53741ebd48c000000013315000030100a860362d18850d1f3b0c70714000e7698447c549f8bc32c88619442c62062880106080808808c90cc3641003fb98d2d42d1e46618c0926265ec621f532ef6a1921c223a63ecd3feb342e038680f927f7bf2026a4404828e01b8fa24ff1f5a39550baa175e2eb41ce17aad59306b01f8dc1e4c5b069f5c9a2219edbdb9774c806fa0d2fade5cce0bbc4630d28452edc1224d6a52d4035df366b176cc7583e5bd76142b8aae966ab5b87cdf6991ac2900b15a978c0658119851bbc00cc789c15154ea65fc92fc6cf2aff84abcb1b5b5426599f62fdd8edc274e4ac436333e4ee0b7278e7ec63901042b66c3b358c96b7aa14ae27d9b72412ba174c29a1b0293a96c4cdd305e2a334610d3855b60585a43a1050d2b0d95b009a9bceae8538aa1c03a1c54e288a5d127fbbe3b24a5dab55a1b75ef3df228a3f5c03a827c7564b460aea442e52b11aadc629c7e0390558ea38021ae4049ab362d45f40d57f204245ac01490d3b6d285d009484be948708aafa29f35228a13bcdcbfd614ff1670ba3f2e04058af77428c9fb33e6d8ce7830d0a5fd71cd8948491c4936cf2d99050bb7a6ba25fe687480be22dd1228dee25fa2426878cfa72e9c5b63aa29ee8b080da77f5cf3dd4660bfa95453ac242859e82a16b16cf87ed85cec6e2f99748f2238c2a1b7afedfaaff05d85d18c60adafe33603cc3e0470890998cd668585872945a6fbc2de2115526454be6fe2c6bf032033120ef91598f5afb01b000f5c53d10edeb1712b3a2ee8e88ec7a3b48791874ce0a68f087f7741bd2561de7f11f105434aa1a9aad2a5d0e21fd449de57ab0bf0ca10647beb06f4969313804681e21d7f1f29e180d913f9afa7648f8ae962dfb40ff2f2a2490d49385a073675b4483c2fc68d420e19f6a2369301c47a9e98de1bcb282b833573f86bc6f7acd590d3707e7c8f4bdadb8d2492530dfec63a5bec4ee0ce77e26ec41b25cd5bc3255ed3d77d830b0d50c29e94a40495745fb5faaa612b48af8cc6cff6c3d4d83337ccf2dff50b13163e07f94ab447ddd7eaaa728a3ccdc3d4629b41d3dff1d7a9023d040e6ee2ef1137cf239e57712fc1e60ee7999678eaadf0e415f3321cbd20d851559ec24b716d7aecd1d773021626c4aa06aad72b4ce49d314fa34c4f6907c6a6072215e97501d27235877f027d3cba396dad42abc49fda3ff58628a641743ca8971680d8eb37f1ce6ed5db76ce5b25bbb281d9404453e5294ac125a943e495404a743aed9ce0e35c610ffab690b6f7188aa3b1190f794314509c6848faa5bb30d5a5196ed7f04dce5b09515d285a5763d3eef96a5d4b2564360543c1d359fde63a71291d8737245001ba710aee95e8f780e87f0dc8baa760a9b86f496d6bc27dabe1310f6450f8adee4e47c1a13b7dcb322cfbf8edd8e343d137ff2b3efd8854f496ba1f57eb251103e1a749c0cd4a0ca77628a8767e3630d40ce24c7e9f908d1f96387846d6bf4a6139fa2566ba2b671c4c4e45ad1ab92b1913fa1cd7f6a62edc25dbfa198d8e3acb18e84a4dadca63f311d2fcaeb449090c601c0115d59a8b75e86dbaba10d6a42c2c0cc5569aebfc9a10cbcc7f1ea815b20c858ec7a6597e10f3434322e18d94d6f8a9f8b37764f63160a2ac7435420f650873464ed3b1c4ed52e14a052764b186a1eecaa9a721984b69b67a9c05d70ee2434d1b4d17c48f5a8794e53c33b39898a4baa263986db6d39c451864426e01f895b26af064c0f9ab99252720e5ec63b266d38d6dae9bbb5c4c25fa3bb8c55baaf69b148a887bcc7e4a0d8c0714bd13283ecedfdb7abcf7d6fab0efee0e5fc099a99b50fe1698419f006f9c3345b6cf0db4f1d7a07b4a1062c4fed2fb04edbf29702be7b9e0d73d1e6c0182bf0b267db23f4665a811abbd420750745bd35c970e293c80c6b37f83cd91380f3204e0bb6f00abb8ab01d3065db3176c91876aa249e590e2328bdd0c48bba300058d862d9d873308b0f994c194ddd243baf7f3e3ddff6568f6821acc2ab2b1e9dffe43bf00a20102a245207ac8d84088cb40956e3187f203f18950fea7659215219c42c76b461efa9ee1b2d31278070eb52e4175d5cb068cf2624775c80e4b0f936e9224173cf0506ac0c72dafb29e6b851facd70057fb715ee8c86d96ca680574df6cfce8989f73f894d71192bd7391761e2ac11b249fd639aef2a92c94ea034258ac43e86922a4667446b416a008406ed3b7c486cd0edccf50176f5bb5c56d5667adbf18aeadd221109f76c56cdeaaab6284784fade73bc323b18b8a5fc312b208acab3a50e63a248df19178755c7e01272b59a712b8ce9ba338a529504b91bbad6350bc2a47e3748168ab94c98b5fafa53f20a846a8d70e9948df47fece54c1da4ad03e0a48a1610973012fa5e1c1658d22a136c4f10dfbe1b3d6ef9868d2dc4f2e3425e17998c856cba20bd1f8d6d38f10edc34d342f376cc9da869de0d4df195d0b4f9821c97cd4a000b4f9345a8150d6ea318d25643e8790611a83c41ab17b84d08ac523bf56a4a6cee4517036f98d376d18d4308bd313f0647d0e3cd77c552bc21185df76e86030e1cb0d23e4fe18cb34153f11778f6e6465202a76a9fdd6f3a194938f201e27ca28f586305452aae468aa668228f5329d891698f59203df7f10531e535f09b808ff815301d10a5671fc0f0c95c839d0926b3098506a683da18ce0eedf061fb95958f6026785e4d312c415024e93e2cb67931486d9e2d43b9daab201f4311801c608b4482ec873eba574020d4cc1e48db01d5023efbcf9ee2c414dd9f9721c529a91b779ac93795be83b8629803ecacece065353cd6a3ffbb39b655c7f3d0225b1aed7c6690a88486f04f66337bbbd2e65a296b97754c6a346eb17a92755f7b36ceed254e9bf32629b96d36a0970954da9007f6eca1130a44a61c01151c6eba258d102196981bb695b83e06a8b84b99e51435f1cd587d2d4d26c510dc163fd0d51bc01a2f3e0bb62c22afc28eda22f1d6d718fe40f107f7684e7e91a7c6794253cf89d10ce365f6d9ecf4df1988036acad776f189da8dad67016919f9f5f9f1331c8f33e230250fb8bebfe4f5f03d17358057a1132e9fad2b903a3f339a01c15a7dc083c8940be3f3c535b837e00a37f9e59d4ad7e8809060128cc787d7cab03ca357b2fda5ad2e2fb93c0a27426e7662d3efdfd6cd0253ff9c148942199c502a779473abe7970dddc039ba38791c0a25fa20ee60ba3c80943a3e66a78c164b120627d968fe81392c780ef0061e4d1996a2f0dfb610ad0478ed8c9a0a5e33d9c234f48de0b22cf7fbed7ca7e048eaf3892b209c1e5c3f9b820b39d747bd82304df3c7f7b42489798b6e93448d580281b91a388b037cb8b367f47d82d91913cb68a55465c15b48874f9e808747319d587fcf57d8f9c175a9ca569cf6901300775436ae78167166823c59cf707fcc3ca3a6986cfa0dcbfbce0501a4b9469e017fcb0638dccdadc468850bf65067f440e47a28457d8326371a0a38a304395c24b33abcc099f31f7e325afb2dcd644917d5c27215b298a277f9360dd9353bacee07d5c42dbcdd0f308ec0968931738da6b89c8b39065c4d5a0ad11bc0ba08fd94e46b6a19fb46b88d06d78478066eb73b152a50ebe5c4f07772bd2979bda1047d7f85ec10c944b464463c6350360d34af843db991edd3d982e6d2818afad7f4cf77dd46bd770c47c87fe72931b8f80c34cde30e98ddbc6de941869f7b5a074c61c2a6513c1bb8138e7bcddc60ceca735b2c811660c1e2dc81dc3041ad3e2fc4ac24df0e46ecee0e4f92373625cf0f7d656cbfc016d360d666c206b99eb4051994f1d66c74e5e8b800dd42f5c9a3fedda948590741f174ac0856f1c67b834bd472041052fc882f9239c38e6ba90344af24662c3990b56e8433791892026a3d4cb66891968c8354988b69e3f83b9ed75848f934b7bb2358f95be29fd51ad40d16e8ebc9bf2fc9114189e7adb07ad10baa37900d54825d7709f34c6d830f8af103444d1b5620f7c86b44b2134f4ab9d7163a854e8d59eb0f17237c64ba1018865d574a29cf02e55d06b97f286efbe8fd1ee15f9b85d319c8db640b291e2f5af5485a2386d1bc387d7a962f294e122e3e2661d668b2475b3d3c22a3084d4e9945301153774ddb81d4a00cfc8320ab29bc6e9f103b1c14acd344b527e3ed42cd2a1098b54b963b703548d0031c53ab3f00f507f5549c572c1910289a2d037777c29a05e6763ca329349d48ef7b97a7ae4b420c49bbb12d0f63e86dbf90bfe40036cbd285214e6288d42485226ace551f08935140acead6714e547242589f2289e4595dbf97ee38439a2506295cdc94346a7648f2575272402e9761e6b5c91e3cecb5da8404a98d9466cded60a499f3b0f8b3fab805b5f77324159a037646551e61a0736b2e4d12aea9c7b00d8878c9e1e72f234d383ff81274f8b85ba3be1f3b1d818da694ccae4ffc9021fe0c721d5871a2021afe4ae02fc7884aa6eb711e783efb7018ce77e0b82640dff5beeff41b9e2ac42d2cc1cded291baf8826f223720e563add3a11bcb1fed744d9449991d29b7ed194aa5022200f125caca2fa51c90ad36ee8017dd2b29efc28b949ff60377eb5dbef45330b503f9f754f7b84f58e875caddd1355f05e39c90fcfd5eebd06ad5c6a05ec36f046be01b68f1eb8c7299ea2bebf9b13f08b2e6ddf93fc7f270fc2b1a5dca0bff787106cc2ba62aa8f3b0cca7ad9c8d784b0ffb0b1d1b78074662da92a202b0d79f651ec387403f54f57cb3cb30f6d5c054259b6128f323cc4e5d6de00db0b082d8a82305db2038721a17e55c751ac0fdfce74aa5a5b58e3fa55a8e7e8513d973dcb8763c903ea0e7528c31ddf74b578894759a540532b4d38baea1f5793f015e8d001764854d0beae1205194a3e04aa2a72fee6d3d9e926600a1b199380e8938e539a84aa045ee676485c1fcc00667069d45408062dc78824c7927cafcf4299bb225a55d5e2723d200bc9803a72f0401565c32192fc870fb14934874a0615ea2eae74a941e1a1adff55f505a7fed41194bfa05de8aa02a387883b80b64eed4942354eed115cec70cd5159a800db364cfee9409818ff08137ed868b514da36f335ef607aadbf08e9d0b3a8e526f2abbb282214843c1a20198891344eae98f050f95d56cddf1117d3dfa03a3cb04df77071fa64a4ecab913115ed50e7168c0f4bfb23251a1168b278461b27831e9d06cdc52653d0ef4a410f3e068ebee828644ac05ee032379944f3417dbb86d5ef5dd44392ab4d988cbcc007f69cc50f94c33af3e060028590a491175aaec4262056282710b9d75b06344c4fb70dc90d35895ca12b737c2125d9ac7ed87f6e839eb9029aeaf41635b987d920b3c62f9fcf593e3aaef5fa768b25f384ee07bef21be9c6c5780664a0e65f3dc34e32cbe3507526144af372427391b88486888e8d28194e900d36c08bbb3516b67bcfa485ceca30a437b95b8fca5016d758f803fb2fdfc37fd2c5d9f8b3eab336535488421977e16266617b5cde59a0a8c86026aa569ad9f257505978430a3e8bdb55f1cb676ad59f83fc6a2aa8f3a9afa344d31c9964cc635d5dc39c3bd4ec2cfab4f364cbc17cfa98dd00c69fa0e76444155236ef38ccd2b57610337f7ec7e2d21933b735bc95a57b3f7d350e0d20a76cc84d7bc3d9a312fe7d72fb1003546d5d7b25bd8b1440d4aa978bda270a849292ba2c8d8622851ab07fc43e0e3b939512b4a3da353d0fdf501ffe6795990f2713d3451d37f05b35204ad0023e2e29a5481c58a08858444356e071519cb3fcd413c25323589fb2fca2391b85e0d1504ea15626c9e7f2595261ce4903ba9c7b47a0e29843e57a5f34c8b6acf2309cc32b3204efd9c5281ac5ee7cbe72294a318d3bf56f0dd10f932fd35ef5d1f7b3a33119dc0e19df3592cc04aa94643ad7c0c88eb84985d864cfe04523b918ab0376eaea3ec1147cfc02f9a0d00b5298b801a26adfe7f09de1b93b5b33a4b97d5dccbb8e55bfa18b502d5dc432897def0742e439a40ebac7836c094273e58152c37f77efaf385877d70138264a917be61bcdfbcadf88226c060d652b650262b30203cf4b35a5187ec68249706a16148031498219fe08e772393a6e5612fff9f5be3da6b4984553fd0829cb4eb9a08603b54ab72038f03dd44f09b564362094aff42f886334f2f19c85a0f669e12999372c998c0bb77481999906f886c411071456314f421b413964d0874d305c0b146516e324ddf07eaa8f5ead04c3d2a2458f7155f3856f1d1c234d7c0f4fb62a2402782ad327036cd50eab17d609762e169329a7678ea0263b1c7f0168275bdbbec7bcdf956cc876eba8f421e7829db8c4ea950756986c2a66309e0bc2255514ee66a088af0a2363ae0d8e45a8e08b7cf7b82e0db5c5d7d97b5c5faa4d7a9a4cfb34ee50de2d691b7045ac6932487d9f958add4074554c01d83edb441bb9dc2d6e09da49a9072f148545a8df3709b49d9a5fee92544cae16878a75611ae5a679d45b249b349a3b1db346bf266591aec9fb0bf11e6e220b1c3623a2d0ac1890f8e1299450e27cd27cea2e2d3cfe7cc1d2c91a1ac91e7846bae07da713915809c8bb34cbc1c4f45a359d2bed21fc92e6553aa262dfd5ef73e320365e56d82b5be176e3c59234ec7207a56e841fbad81b7feb2d51cd1ea4779798c4683af62d8bc4ea37a9318fda6d947cbe111c74d547450b92c3933d66ee17c2fa9eb66020c81e6ded746d85623f44134e249e376f7e22e0d383e45cde886732eea58e8370cf888f5e8a4d85d9a51fe842faa27b9660f55e37af66a5c95b11ab951bc99ce5ed615b675e2a55bf631eff6570937d42bfd881450d54b252862208b09f97c014800c37bc4086caf50a141910d472c86faff301aef83c9658e7c65a2d13ac0d29cf84195e03ec877e8c88cc38c9331ec5d5bb2c2f5f585e88c5fac7422466d22f445e23143bae3e07b6a91ed2d5af1ad8f21527f09a3b2ae580de702fc86881d439b088f87168f318e55bef456d3bd5650236730fb6a8b64e4386e7782ea04f04819286b2d6cfed1ac639ab07da9cc8c55e6a6cd30cf72a088caaaf50b26d65acef68df1a5177b85231db43f2352e9841eea5a9fb8094dcf92c70da4f7bd69d1517e3a50e853256294aa5e143cf4407362245924000b95b51eda5e2460803d261961d8e964df2b43379654ef44d743c4f8e3731613c9d0fe057b2e2d7a4c6c92f33b536d0b47c54528949cdf8c4787e4cf86ccbce5871053587def8c77dfd112e6bac66b698116997745625a84166ef9945d49c2941e9ea06abfad8721669e62ae3acb1b18e730f5418d84b0406f3f6012a1388fe8fab0478945052beb9c816e70eaf99531ebe07bb6f5353161b446a0a1086dcd5a585af9e276441f2c05782b43c6a6f0631f5a6b30ef493638f9d2bd1ac0b8c2fae3017ff6cafc3bdaf2a64a561554730aa9644db37c3349eddcccd912fa92e9bd578d8864e35875205764e1514452f4625e938c738a5807c9f5a967d01cbd88e5a9dbce93141dc859cab8d380515e7c55578cc160cedcda4cf8979876f418574726cdcae2ecd7f03ad597f61440f6032fae0736534975705677683da70edc6e62550aa1ccfcc82d730e149f1d4582c97c39e2e9649ac63ac69d6205f01c9a14af58f7a0e5f52cdb3282949fa3df298f06d57b12799149ff29aad992558f3d8ac98b238f2029117ad323b832a37619df943b332ac70505ac32ff2980b0b783500e0299135514def4bcae16cff0311fa2cb44f4aa3ad4ab73154efade00dd4c3f59a32655614f68b921bdbcda7a06f10e0a5115418e54a9d64811eb5af021d06d0f78ec6c8715ca7466ff9fa847c11c4715699a73103089d3cca228da10df476f6897581501b7b4360dfd7609eb964d2a64fcd741d2bdb03ef3acfd7e8cd4b5e213153dffd688463680b3dd1d15c5ebd5d380890aab4fbd5207512df54beb82a4d522d398848fcb9c98c70972c803d6295838491d7f6fb0d8898e446506e5318d3ac1d0b42e7f50831d18caa6e8deff717d115b542aeca86454b1ee2bef5befbeca5a923b045df74ee5d8382127c63974a46302a2b3d9405efd84502721f72bb7f5403b386a44218e990b2a025cf61628a8f61820fa32b090ff2cc3789dcb9523a1483a6673c8ce685f22bcde1ab6759ca5b2f6f0fb3344b8414c46aa786268d33cde0c5a02dd1bc18cf208c7af8c1a57a3abd6cacf85098a4dfeacab4a265d4391c43ec5cd7896c7674a20e8d306d80dc136982133520a27b4548ee63cefdc9d86fb37dd4a02f6b9a3d30feba159e6a566a4f34708f66f66a462ca970eb1dfbc2516e56868e5496e93046c30ba152d74bd29116de446d8d5e80116207ad2e1484a5d8d30162af039fe307ec1677964f46debaf1852e3069de2578c32a48d66780fc498bdee1d583162ff09658331bd2693e6a36c6c3b375f3325082bff2a223cabc2261a9008180b5342db2c7451db6ea3aaac4f6c9ff836fda9515ca3b4d2483e4a2329e4f486b0fffbcbd4226799d944a5b58997926a394674d05726edd6f829a32a659172bb4571feeb5789101d7f1aaf87147bbf46e891639ce635ac489852243bc05e8e521b410d03d78d0e15911db09c3d4310735013cc9919220dcf16437708bd121eedf54986456faf1e0028a1a69532a57c206d88d5583fb25693c6820fcdb0673df074f7b000e804b5367e58c731924e2cc9470c40b2005857e6a6bdd57009378a456816ebf7c3a23e2999b0279615ef851e7ca27a7017a23de1d398c0c5469e046ab38c24266eff9aafc351321241382d1007723cf152b8885909d3dea4c060fa4acb158dc8107fb9ef14340ef5807821618c496e816712c48951e51d7aa510ab2d7ce9dca71ffd8263e6efb20d1138ae459a14952886f71057883294ab430b2174a505326984c2d05d545bd085659d233e0876734c1a5b5867be6d50fa11426fabdeaf6a3a568ea24d4825dda327d1794da584d1d90fb3b804406ac5eff938a021701e049503e1f1f7488f790dd0631143ac0cf493013780a41d8106f73da279ae71f18a5805ffe32037414f6c8046e99f59c170acc85db95b701bdd9574ea6cbf32fcbcbc8515fec0e6d5fc8024ca995b10db0660e7e86857da61d9e53d816d3f2e4df7de0483742c8da4bcdf3a691f89a0fd5060244d20ec41c198beb2f1fb22d875fffb9b2ba06086a69fad1041454c073a488082596e44e0956fa72c7727ba7ec4aec033b8fe54228515a855d947ea0f1c5a5c36f07916a5d74b14553408d77abd6f81e72101f3c0e39180dae5376eb16ec07c325d73e059cc68f60aaf4f888a2912be7120a20c70f697f67214e8aba8a7f891f120365b75ddb43418b76d74b1bd692945ae2644d998344d4be726e63e4494092711650e24f8bfe050638f7b8c8061977911fc2981f388602876046f35d575afe251e121ccf978aa242f62f950954f5c4fb9c715a70b94bdc4d90b15dd22962fa94f544a5eec838953db55458bf5c246a0a35a53e1b33e0fa8dd3c866c235934c3a02ad01efa6920204bf268bb4d3985521871d58ccb88280f3f0884c61b62a4b9d8d8347e93375212854bc18c4207efd8db95cad395aaf8d4340fabd93add2643cd94729556a6a44d918a1e19bfa1eedf23e5b170b10d804a07e9d8c194e80cf46e59a2408ac9af7a28ee6a3f32fc2e6854fb309f1f7e108fbb3a81f2a43412588c52407f53eebb5871cd1ed13b5ba6cd92c1140105d310565f070157f7d67002ec953f48da6c64dd3999b6bf4e54b70817e72618c5ce2a2d04d3be0820a2a953143ba003e26718fae6521c4e59983e1123d5cd4e9a4a21f8b0dd9296e0d9c6bce38a3317d2201c5f755a58eb55f971386d6bf1085d7b691b28e8111f5e6c390b372dc80b51ebaf9243e2f0bb98c11130c0b82416e9eb65fb2757ae81fb0820c3e054aca508d8d92426994e5f77a96eb7865aafe9dc788c5335a09972f491720da3d932040a5d41489ae199dc29b3e3c03979895750191c12a3a074a107b658d8087b054b444ac056c66f1389f7cf373f6fcb3e088975f87fbd48809cb4e03d62e2416ce994212bfd4d71b879e4a958a5974ff8073da213571276ec78919b6a6aa95a79d360b938fd842d29969ccf3fcdf0094312d1621bc4836ae5ec89ac027a9cfa39052124f0952d129b1e487f7d31ba48af582423c2437725717ee88ca442547960b2512a1a0fa4b7df5f23dd1104f16878227c94fb955444d09f214e5afdc8d064aaa901416ca8615885add8c44fe2522dfaaaeeef16c1f0dadb2d43fca45262087bc4a7eafac4574ee574c5f0e4b56b1c933d08ad56c04e03e3b1ba86f4e6d427269610093ed46a58b800a006cdf750f6224179f0434dc9dceae9604a27d0383c746f654c67103174bb2a2082e29094a6628f8e0ff24062ff7865cac21a51fa709355a61427f224f4e5adf1426588348e9ce6b7b9e71ce431dc00e6ae28ee0b9d00809bcca505beb1aed0d42a872443efcc27271b63288d012418110d3bfae0b2a45b90b9e80e6df319c9e0efd0e4521bfa6d75347b0d1fd2559f45350381b44d35bdcc23ab6588633c8cc62b47327ae8506fc3783dfa8554e0883a4d341843879817e6271f40cd48a4c55d3642e8ff48c3000b8c969e445648ae0ab85aa46ed1f65836e56fa83b5e208abeef9331f5710288006c30c29bd9300ac74b583802912f9f5b96751b947bacea0be543d06be82fdb7a093fc3858446bf0682c6092724ad54153553ee7f3dc9f29c52de7d5f24b245bc46d61ac811bf156f98abaa89105e69d034b5e15c21a202c446a1bfd906ca2615f656e9fc04adfa06e7c559e12820f70c54f2722ef20578e3f25c326a0038c6f3623a351d76ca8b169670fa7d1213e7a2da3d9511ad385d684539682ffccea85ac145b8ff8e08d1e8b4f625f2dd7ed518d4e395cd024cd6729a54ced37c54d5e4eb8747e882086ad298f22169a6770489c15280837812b34362d8c5275a187d3dde321a763669171162aa7b27380f7a179f508eef236c261cf5136fc8be29668fdd8cfe425447ee285324583746013dcd017c0de4aa1c517ca7e0b1ddc074ebd4ca466fef703d534a80d27865c81647e4f399455c038ec30242ac3a89f4078df401a8e241a9287f40b2b0f34de12200fe7c8cc532137e3a3f3f3a91deac97499e91a72076217d28a23436e6a99a0a0102f4611acc588b063df1edbd5b158a8b88d59f331bb618628a0d44e23eed949ea51e6c92152f9b8e57276e80d08a837b08bef522d8b1f96ab0d674dd845d556a3c98d6522a2d4f3f23774bdc19cca1ab058b1ad2bbe30aae476589a91f7c4b950d4304f62b84b7311e453c38865d82a3b51129b145f6b94999e6234ddc7ee1c793036cb862432aab30f413eb0f5659a7c258df66d26988ec19d0f9ba0e222f04ae7918973a47ff6da1809a7e169b802d4261533bdf292bcff455b24a1e713a85d272754d8d8ec53d35dee15052c0b1a8057f8c7c385c70f4f92e8fec59d1159c04f2c702a9f1179813650645c83fa95a8ce99071c18d68fb60648682169cdffd5cdd463459a40620da6437a3d55417c5150544556ba6d9b52678e3ccea93ad261800c8482c0baf382c45ab50a50c635d4652aa369e035d863473c5a0d75d838eea5df8a9eb785978918b263abafd3d61f483f198a6d19ee8c7c4c40491c316c25b75db67a8345c9cc91c97329fbdf770621638c8757d09e2133b6195631ae1cedd56081634cca9c8cd57f20f6c7ad4629fba93b1242f56daee552e735c66a91f5bf2a6e78420950055c19c6bc45563543c57e6299d46c59042090668a00733c1811c8660a28e8797350cc8662d7c1cdd77c2219f4c5745868b2917f730f3f848f8754d403d0d9deebb57aa50ccab4e04b9d372d1039d6ea79bad5405580f7940ee14e6860de034224c8a8a20495def0a7d3b6b977da5e5782a00f953d5b320b6d2d19a30ad313352257f4fe1d13fcd004937f0b8d999fb19287ec8123717cd7ae19270ad8ae0fcdb69a500dcab92181869eaf780e0d8d341a9b9a142922255625ca577539aaacaaaa57b96b74833129e89a924a823c9e4924a8c8e765d63346a49e0429b93f22ea44dc97f2390a07ed6ee88f002558e2aad40ed978c510ade8c212691ee862546c5010a46eb2aca0e511435c7968a88b4549826bff71d6e71b4d3e12ae75bced121267573161f3c5ca10b14d786800cebc487116dc1bf66457780ea42806af081f7596309468ce2025f59b2ca524a6625d0dc629fb65b453bf5087208612c955b87c689d518254c04494fac781e32b0939c8f31d3ffdaddb51a81358ced5e02018f31d890837fea0034cee675c9f84e0f409d44859420f10213f4d006dbc851a0f67fe904ff185dc3c6fbe2f8b1bb7aac0f3e06538f21ac05b1cf20ed2e6cefd980f3d34b30e2c2c4577ada76d2dae03b8d722b5cb5e9ca34e873dc7da75e64e05556863a9639e656c938ff443b0a76c24547d5ce663b39f972421ada0e302462ade5e7706c29717311a2c1e395b9791f170f1f10bc216451c4bd89a6886bd1b057b52d62297970c02a199b0d1ccacb92d5a79d686bb909371f71df7cc1edb5590922f5901633d9d4e96099e8067da24f66ca2192140cfc2ea590b3ba8f7f8cbabcc0729969dcc81da338290d3a20c76e8d7337b81a44ab8f210ab6e769bbf1fc63d444d9131441f669d6a63a40a98c1cdd385965ddffc97a9396b6cf4bce8c62724098ed55a1416c32bfdc45341095ddc5710f3176b2d018527b72a2931e5ca48ca3518f4a5f5ba1c406dfcd07f2dfff73ebc7d48d967288b382b5be9d0be167c1d3b396160f63ac36d2c145e1c16b94ac18145374a46816a00c8b68128b5ea16b4e356cfa09a9dff16c7af62f75585e0f4f634430964daf68402a6a456d58924ce496e659d908028f9f6389814c99fabe5b390e2e4522ea65cd5a4cebaa95fe68df54803630711f3801f3bd5f35a2d0ad25eb2f83fc8185bb0fa1d524f9bc4f1a391e3b2e08ce1c7f41c4319843db4bf3d48c18458b845d22048208fdad420ab2bc27c497f036e3cff5532c6a09e1fa9a8c30657b79e524041326ae02ae4bbd633341d98ed919f31a18ce72e0cceaa7ca850e156bc708ede12100e3aa370ef00017a1f804a65d11f7182d2722856100e4da213322d4b96362a2a2b77bbd3f9cc2164f15e1b0ec9eb3f80fb503244547246472377e8ffe2c94acf38167d2d9b61b0c5c475e0309d8de258302dae6ad3b14c7be4898d2c9fd452ac117e655322d5b8889e1f401cda34c7609ad558610675eeef904cf6d205a109740ab64cf1594d05b2c772b0a9a46a33b78581347e20545641f4173684c1ad38247efe13341a46d2481d7bfed3f82e6a905ec2689e616541ca50f22880643b7dc6039437d6267793e2ed1a49b8f0e9bec550b14b4e5c2c8ebc67c53bb891625fdb484e7abe59e325eb956254f15bca857f3e414f9f204a59fa6a359a865c742b5ebb3e8de192e1f22bfcbe49c3bad6b22ead377ae8ffb6047a01fe7b19101f51c3105465af27183c460a448033bc71618811e0e6583cdbad5ba0180e9de2e5c3187420938d636d06517d2f67c08630d59ee660b5502e3707ef2c5088e2568526dd34b975e717a82e901ab2778d49b3d0395691ddc8bb31b6c40e38dd20e30099c0438b26baae09435c5008c9320d33e483e738038a5cf1efb9069707fa8ef971ce151977d83b8224648724b250571ac5a8d2bf1aab4de18045d306be634c6be38694114ad315ea4e19fe7cb8065e49e3417f8f134066b9449c4da6ae39960b504687df4f7c62f2001d89ec4e8b0e297c1eff514882f4149b2b9000ac3c9cbe2795fdbdfa223617216a63e778b040c028808311422fa8dde07fc252d1f5bac8362672dadf6cdd01bcb62564e00a9815c5cb0daa78ae390b22dd9ab8e12191bfe6a5f318484717290700a2700365209b042119dffb6c04afb60660be81f97f66df2630836c67d1e338abded34bc3b91259d7e8da4921bb3b89dd5214b5edb0faace07b292188b32e91e4f8b555e208404f37d9eb20cab99e710c4e5cf729c6423b9485c4960acabddaf27fecf4f0bb7b87846535c974799d82c32964b1d0be459d202abd6a5a7280e20b868a8f5d35a7c94bdbca66561c6418368bc7e50c1aea7ba40c93a29b3e721a8abebf68340c7df936e80cc8aaadc9354a0d1a58ee5b9dd52708cffbcb6a86324abcf94b647266d2f87b9bff81d28ffc58e07a433b6695c10e06328cb072d7fbca7ce9c8f5fe388a0cb5d4958c62ffc053aa2ce866e0272aaf4a1cbb52efb1d6982755efd292b96d50dc05af91374c8932ffe14e9bdd1ac929fb2fd4525a5ed57b6a6170e2eec12c43a248cfbcec1bb1a57a31b152f9acfdb0dd57cf7d4cb9b38b709efaf306de30ef90f1bc3f7a5af6b147487ae86c4d67b4a2ff5db29c7e61fa1b9bb9dd2ea6fdac06a2b388bf9abb8e3e0aa68d002fa523ffc49bfd6637297984c8dd9f120ec486f767bb589ce4535828d3a87fb60ade00584dc33a1af6ecbef5ab7d7a0ddfd6d9a6f7ec9a8d3d969655ef74fa8390234f92b52e8d3fd669dc69dc0077276c9cf3ebf8c0d6d4fa3da036b2224c94440adc3999a4d145ef2cc27a2f9607944078586a55631538476cf6fd0a285105bd3657c26bd590ab573127dc28f5dd7395c814a5ae212b725d32f729d6f9618afcb65071d2e8a9dc3a4a95521e37a528286770edd0507dc10a6171e0fa2195998005b8d0b188a3b05805849dcdb9a7345d16acfd0a6a19744573de1a32dc784358f18326d46353d905aa21a4346bfb508f911811947fb54496ec9417b5ea71ff611adad442885bb6f345e3494459439435458acd3c8ec1b39f9f49117e0924488147d829b544b6f5fd9b84c4ead963fa3ff2daef3785686b29ec74b5bae93ef7f347382a21a00bc2107d5cfd18d44a29d097a9cfa0941ab7b5a663d8a9d045929b1aa054fffcfb1966e31de921c3a77a046114ffd9b26c73ad8cab369998194788ccafb271834e64895787466fa2af6d00377e3a9bc048bfe7e5655c84dd53f1094780261da84dd79e8d48c630301fc156c23522e66cdc6d490f931addc54282e79b57121f8ab9311149d6272236849b309a3392e581d1a5e33fd5beb794ccff737e1c1c9114c67d53862a92e15e24ea6094253a1b9e4a7c2c85a18dda32bd34580f2b18b70951ee9cd9b1af29151de02c0ef46cdb9b464118470c14e3743f7eaa0cc408a47ab924bdcf217178ed510a3ed2a3effcad35e3664d9dee94b56239508af9c74031b24ad187849148ec6dd1d1da55c015d05f56c9f26a593274033ffcf0e3cd45ea8644d01980268dbc6d5d5de45ffe0da6ec78e1ef207f5ca972413ba887a4eee091e319e77abbcdbf2c443f06f9bab94341ed3eb56e4795a142554f62bcbae59e5645dc509592bc5bb82505bb376682f0d68794cffcbe9b56c513123fd51bd61674016d8218c359c38a5c8b6236ac3c2811419896a81a613182f27e90ca136bd95216e92387ae5441690a3c18274c0a2d6f66c3d404a572150fe6b6a3a3aad1a7b0324630063d84e234b2423ec6485b5b75b095b3d144d2b6539afdc2d94079730c459f179768e9ca262e9f7413bbf56b8d9cfe4d840258b557d8d6291b96a66247892dbb3b44af21292922425ada064191dd5b0925fddcfd75ae7aff5de6b958934aae0e79c8f79cf5f45b440aefbb2a254af3084e930ef60d5b812985610510a2ebc6b591f355c2dcf7bae55501f7ee98fa225c492b70169fcaede6b4ee6ee391767d0b6b08ab84a02d0618f4a2a7e9e88c9faf22c45d8e79133089b0f3c03f09b61d696ddd1a27362f215d1a99029367a4fe70c9b3d4f3b5957258f32340aa6b41dae4b713b651c0151349d64acaa92b297038341703a84ebb776ee0312809520413307f64986553d984f2151cc408a4996b1809184a93433111321e3026302a3e2c8b8178fd9fd22ca78f62ceaf668e9f285e40f7fb5567a31d3843df8099687d4a922f487eb16006cc02fbc344951f74637200875264554d2cb314b97e13ebbce88c1cb24b95f4bdd6fc798a4d2cf8b1546a2819e72582b40924a4b02b99e75c3780bbfbc8c31edd0ff4827cd4045a2d21efc8d3818f5aae8a0f0265a0ff9d1e6649c11f7f6efd8e707565ff8bd9e4bee642c1b6da19a078bf4f5b6ab434dceb6d1d9d035249153a0b5168c4fe51d9ae1593d27f5060a1187ffbc308e106a0af65d78ad1d2fb805f424b17ff9d441c25e2fe4f41b64359989b492d3dd7363c725e7712627b4b44ec32a72e2b89f20b2a97496439a3bf4d70a324e984cca57444e8b7136dae38d9af90b22627d6fb9c76cef107d29885890e0961668948fcb13c58dc5bcc120daa7671cc81f5b0ccc19675b1049c23e05a36554ecf69fdd008f6a19822f73c8fcae73b30094cae0192d32c932f4c6e657049eb1de6f67416cba95c4a5f87cc506fd1ce4f9512b101bbdeb3b81d281573784c18202625ada6a40287e0964069420636044f6b6961d55e1455cb23b40782493c8f086014e62ebbf27fe664bf2e98c1bd72f7fc35b8f4b17c188ae238cdc1cf3846765834880cf2289159fff0ca6371382371de5dccdc73717aaa3375a8fa20b3c592170ad283e5e189b2f437f50df030b131b60292381e4c832893390331432e01083f41f2b95d9d781a9b22eb11377102067cb1d3048157091a04482222bde57d6e02439bc4735e06cbbdce99ccb203edcf7a7f0418e5723c7a75586b8990f3a866006e7cb80e1a0984c296b891b7310ca977446b6a10a2eb2f514bb571ecb6b2cacf994ac9969c9d4bdcbf16a6a0ef37606cc154451860ea1838a92ed9c5c925af57831122060e95dfb90f657c8b76b6e2d7d6a4f50bb4332900cdc6f03b4c8cbeee6c00dffddab0971a5e08b407985207b0ef9248fdf914b71f661d5ee29c5b84d91d76c769cf240e07df1fa637ffe188bff8b993d574b4772f7b17b7da415e55808e50ac25fb10d7f35f6562a8ca730f8d1c3d2ebf8db4f5e6455eff21e04d24dc12538f3f6a23e447691860bbface1e65499974eeaff6353bf149cd3233f9f669eccb5d650b6af0258f48e6353b7156253080f623587a2282b150afd7fa6a50e5017a3c6fb992fbe8ac28b0e347b1b7030d079e8c40e71c9556b955ce2c2a192e0050bc5e2106fafc442c5f6140ae8c2cad68550dd6a4ac264fa0a75182dfec687f391bc760f1a3b0c6e986075f682b304984c00680960c218804084a7d1d49cc4e8ab904b3fd1925043399a40e462b4bd5917194350512003189e10a424fc8e0412f1a4fb5e7c72a722c2ea94e15ed91c69d79b942a4ef9b9204c3605c37cd1c4d33c408c44161c0e962da9f769fff3124c79d00ab7121c69bdfaffaf35f894c642b9b98641fb3408e3f9c39c3f6721c905970051eab7ae54925d92ead7466856cd323a0df09d54c95e8dd3887af2bcbd166ce653e1210bc241060ad15cc29e73be863a804334d60975fad52b19782b78bf3e5656fad48b7e65a41431d1a7fc15281ffa58bebf05b35a225fd86faf65e96fb45cd094f89479a41f85e5db6fa1c9b63df806bd74cc8fa4de97bae007d08caf64bf3cc3fb282c70237dac93bb57f0ac202a327f87e3b4bec134703996fe704bb50e0a78fb8577814bee57b77cae007e61cf6ab9d67bf299a45c14fff3ae05d1e67e145a054f86da5787b3f28eb228219b10410566aceb02e20a0fb5f01c658ba49d4774f37204dad338f16174ed2887db6b5d3182e8c7bc7272119c1e48fde0f4507c5b95f87d9d9bdde56bf021263c6554d9e173a6393f3c9907967b3945a83d00a7b276d7288f0a30b2923c4453d15ef8503396ac9bf2667941b8ef570fa037298fda9ae4261a36b7f1912de6dfd5482fe44c4d2802d44ce6db4195778115cff5d7c1b4b5249b0eb2bdbcfbdddce4f159d748cebb59aae30bc35783274ec8fd56bc343246c38a656b4755ebd30cbbcef2b5da450293a2320870950cc4bca6b9f17944e6b2c4f6e824b69fa34c96b5c44b6ea3dd0e9fd30e566c44c7191a3249744739b72b1cc65d88114c0119926ac565633338fcc02c55a2e521c55a8d2021cacc92aa58b0affeea11930c8afa2631b1fd55ef6ddbb7897feb962b12b88a3f4cdb052ec1742a2057cfbf8e7f802f60b55353d01ae775e6e7d2facd59e784c16c0739c56f2468dee9cb743d7b917a92730ed7744f0c5d98f787061be9b32384ec4dcc1752fd2cf7d1abfe09e1ab64d0efc6b9ff9f82779e8a264bb16dd306a29e58a417fe22bcd9135c52185c44c41bb91b0d13de7480c8e7d819d976a8736bc3daaf6df6ca21ac5889332f42fba998d80ec0867f3a88fa19bfd5a1bdd21530b7d4cabbf30f3423bedacce5e348dfdd441d4ab818be214485db60da90b083bb96561dae759601baaa5177c310254c243f9fac5a3267f61c056da8b5ca8f2a83554818f2ddc76bfc3b0af39d19fcce1aa86b0b325f0b8cc963e3bc6b063ad834e2c55b8d3fcbe92da2509854361fc6a794ce8048a6d5b3a15f2e7700d962885d29a5c2b4027819045b4090821f1c13f07590dce422320ed7c8f9c2bf2b1d8129a72916085138770690c0df27ecff242d7216c4e68b1c439c4937fb7386b5f58563dfc2a1e0343d751b9fe63616ef438d5dbfab50dd5affe35ca9380d0b5735af5bdb591e5fba57d40709764993e8624fac7a82ef3bff047f1bf717c7342b6999ecf10dda0ced15701a338594453d380e5abf127a784b334d49a5072a7c52e46e40fad79ec816e3ce7060738051436928624610d6215f2538827d5b658f7b0d59963f1b50f0f69cbc9e46b234794a7be6aaef6bb411e5a16c44a65f702762319de57f914eec276344ae7c50610dcc3b5e952cfaf01e4820c5301cec7fcae4c0df19ca9251bbc037ed25f231d57282428b5da81e755d02192595ec6398fe0067233fc75a02d3a49861a2357ed8aab2fa269e68bbdd212bf4d96ba116d391c86c4d0c74e5abc5a004ef3cc3870b5061b1f33498d0a4be3d9f0640927554fd5fd13e52e6f6f29bd0c8ac4f495d31943d1d01aa25e2319f735f4819f60f93f40d5aff8618467c769e4f1d2c2ab27ac621ca333ed76c1872439ec43244567aa25b51d68c0cfb95059af3faed7f5a59b9eb1618747208510a0ca78037d62dcc5a0b5dfc3b45a0bc5139a4b1be994f570564fb018c24e116a640495ad82ca2d022b420d0a8230268dfa8e38d00882058375fca6f527625e868202ebd7caaca5fe7eaaefdc11a69ede37e3bc95a4c556f2c89ff28b2aede31e918d3460018fb074fdc5afd63a7213683ac206266ecc281bec808129d9d606e4c7af8360de696ad0bed3f5bb98f91a1792ca793740695c255957513e9398a493155441a9f6d93cb354d396904d83ec61328cce21a1514937077ebe7605274d9e08bef81502d8366a70faeb36b392f51685f4e5553ff0edb0909437a0e009ecc16d889699c3f7d24e97d54b36f3e9a2a475ee81df36cbf4aa86f274865104665518d2ef0b69df13a9f95c89abed2de4e48d255a49da81772733f0bdeab39924defdf3f52856c004e4ac7e28ce0f367e92aa800352cb6acf7136df5fb9eec02540e81016db23a8ca2f44814acaf218278f38d745548374209b2b4f733e52edcd750e0264ce3be7495e6f59ac2daa7cf1050909112dc03f3ff04b627b3af1002914768ad633040df11187d4dcd89cd62f84e2cd6a16bf8ff7549e628b689d5ff45053941da223a874addb7f047d4d839ed85a1e7e8981f41c0510de4f01ad70f4626f7ca91218782d67fc2e192df3d31b8b1d75d00ced8841951240f403d01fcaef8efb3e0c029a4f322eeb8ec2ff7635922c9263b975bfeaf61589174b5e170116871010f7f29a18b418b670f12b95163fc8fa9f1807b77361ebba65a26096810ed2794a8da678be004f65bfadcb224d811b5bba27db7aaed622ff2a0f94daf63f6549858945fc06170cc649c960f223f1cc3a01537d3f118154f5628d5682124a3ba8a65894875fa1f1d70149ad796b8ac87908e7b070e10cdfda1bb158fc60ca20522ccee273e66977ea4712498780c1fb93a2f65cc1cf9414ba3c7c39dc89a3b4b633034c601aa0e1a55608cccabf461de56523c8aec41c5529c1cb328057b12cc94069dea3d40350ce9bc5d88f1edf99a5521ea4b04f39e6665b4da0eb17721d528646f66bc081fa8e39e4fff7b1e7110bff2aa2626952a17f5ce2db28220d315a0399b5d461f3902bbcec8d4ddc3c2b0c45c4b21ea41f949744b1dbcbb55ac0939209c1949e98b1b38ee19d1fd63a941fa020c5a5bd22c2b9deab1bfa6d1d8f43eb58c55c53159a4053fdcd3d48c8121eb027fb1ac68770728c38fd3088089ce0d732fdc63877f5f13c05d43ace905727417a307f68b241fe5bbc0a4dc8b38c28da51804efa169ea737fafd8d27315c9efacee4f1bc8b9d2001cc2ec29f2ce3a7017c2d3299f9daddbded6f3c290c303bee5e110a69ce20e1d2a6d39f16314b85ef3ab478f1027044764626bd1651138613d14765dcd3a6458755043b9090474ee55d2c3bee33f17d6a02c247fdf26fcc8b4b25c472ea83f2c7bfb52283aee37b5be50b0353e8ce8463611d2b5a38bf6f605ce4100bdccbe8dfc4704eb628d5606c5c82d6a149b8646ee104e8e54985c1f51ef3d4b19d1564484f8fe8333e91742fd92bfe21e788c3851d59904644cc3050ff6573642cc194612a94baf822f0dc347b7116c7bd69ca3c27fb47b9c0833f92bad1326018fec5ba55e74feb267152bef52d957bca134cfb55431ef8f4ec349ecd960e916a6aec849e476a36cc3492fbd7fceb6a015ff2e64bfcba56f5e67ba8e4f8b2e0806ed2ddca252b6a292b188d178cad9a206ed8a7cf96e51b1465d8a034e0a38e178ca1695704f0fa0add32c3abfdfcaa74dc2965481235619ff2efc73cca32e4ccb1ec605cbd710fd8770821e71c8988864e2ac57961fbafd8850d8a875a1c17d56da99649d81b414b7aac619ff4baad899bd2de102372b788b087d29c5db02998435d1d2701055f6eec3049f996c1618fe47c44351d4400b010136e18b9cafdc8d70e70bba75d4d0acd66bfa576bb516b1ceb20a2aa4115599beb7fe8a210356a85d377380ba3915473bcbe87eb7f534d04358f834b9f43e910b8a7e1f994bafb84f23f367ec39f2f8805d15b9da1d53a840327df823bc406226ee78bfa76015f0756d790d1cc5fd19f10f94aa40121b0dd69a53a6a32ed47a82c46cc783773f260f2215e05faf6802b3c2cb8a2f1f7f19cbbcbfc8389bc6a0831cd6faef7383b8969cadb62ac268fcb45c101478ff77ea5d259d99cfe7c711f261edfefcc7038c713613c8021c0556210f7e9ec22a042acc4619114b48086a87dae914282f67b7aae75eb9db4ef610932c47aaba2d7ca29fa4c91d6de382a7024714176fa57d73189ac9fd89c9cc122e4fc241a2c6294a2566f907d07dafc5abe0cd39e1e7a536178115d89b7a1d3864fc247f0b356c76ab57aa6a018ad32ff8126a1a252847e6403d1be88ae30841e22bee0f5a8222af2095414e4d3de7e602cc9c22f2181660058d04df5377ec9e455b4c377e0d84634d4d60288f8a50dcf92dc506f2074cc6c1a34f7e35f0cd34dd14cc12f160ae40252085691b007e97b5833292739dda5effb42c26b66337f5a9f97718940214cf44f1522591552e347d42c5907dffcc245a9a987887ce98b9531ec9ace0306a5a549cdb35886927aac43c7203cc060f88f5612e098fcc9aec57ec6d1c47e9fc5423fff03fc32b1031cc9b45959793b2a39f78a301281ae1234d6e535c1151c888096c4acb8ae100075a26658d790aa591280e234ddd0ffee7b221d7fa3c44b219c4af27473988697611a4ff4f8b6c2dfe123ea03a2dfbbe4d63be685351a543cd15ed4dce83a0dbb0507f9c72b0edd71555c3fc669cb645cebe5fe68361ad2f7ea4d3f266377037e3e128e85df93668a1e786c67134842d02e05db4422f267870d74619902b03e4ebba6204734cf4f6a166dc2b5f47afbf4329070c1c449ec0d6d8ccd1705f06ff091580f7b262afa9a2019ad66f505508a93cb788a27cce6e6ba97afebd00509b424e7f7c95442b4f5cb7d40a53f92d4c428d06d91ed1bb37c2ed1435c9005480f0f8296e8dcab2effb518b0a433ae14b7351f1c0dd8ec19322491803e4cd9dd628952da06cb5b7b5b8feee596faaf33eaea0c4471dd50b9b5b32c3be2e97b708ec44f9095b87b5eb569c09a6894daf15581450e2300c0a34f312ba9d33c82c8a8e5ccd5e251079d0dfc511665d4b7725213bd7466961a66138f2caa7584c91b42b635b458666d73dbc9537ee8323f2e159be6796eed039e1e7c4d88af5c92902c5c837304b5b0e7dd08d5e8889727b589845482879c1d1d0610218f96994b8f3456440d1787218a1b045ed18147428a24ae6751ff079b12318ab4473a7962805fed25f486b4d5ddd8d48c07065fcfd0d61dc966bbdc66939d1f2262af288ca16dd630ce33ce0e8639bc09627720f186ad9c4093ba049cd4bc6c9b0167452719dbbe542240f6b926a9600c1aeb84f305262c9104998d7b7b18f2ff490b89295c9aa9b69db838bc6b8b96f83568e0b26e058bf8185577fe1d22dd0851ec8ddb8edaf3d723559733365d987a36e91a4412828a961d4e5f454930185a0189c1ef2f38b6eaf642de4c4aafc1687151639250bbcb2cfda0416bff6dde420e709eb7c124f2d67913e3742f5e97360021cc950612e3bd767428aed719e17f10c08724fec42b9afca58b0e01d23af528aaaa7a741d16a5d47e8401dfa6b3897974a601b6eb9303e95a99975cd788399ae4bdb0bdbbd48b56461f5881c61f52e2326b89e4e96a5099946696f87191dec9e77b605f343f871b8b9a3a485bfa363a022304e8e376d6c8b42817a4c5e6ed7a955d9f4d686263ff6ac540939c5afd648155bf71021f52c8827212cc5b6ec47dc8ae0144e06ff0acb7fc7d6f402db229d3d29bdfae697caa16f16f170d35e0f9ca956f9f9e812bc0429ad96a9f9f49e7f0325710835245974bf8bc4e3e0ecfd49902018ecdfe7f8a7ce6d28fb5c57a16bfc490e64cd085830dba80863fa9ace031f00eef3070d317c93055bc6dac5e0b3dca134a5a97dfc390be722371c2ad353eb3050b3203dabaab6999b1ce40247402857862629e862c2d8363b51a2060047f72938a097243891c822429b4be42b66d61338e28c3754da253a4bb6efa033ee1e075341ffb11c91e04a119cf79da5a9656302ad58ab62d96ce749f3b9796cad80f5fc8a07902f13c641e569bb721c07d2fd0672c9804bdbd99547b993ec38eaa641117f59727f75707941aaec0060edcfaba52cee972c546a4025fe6c9817ba0cf8bbbdcce2b8c6f1981395a913a2223dc71c58a1f44829da7e178f49a7a81f8095795680160718c8b8b7a2cb6ab7b5318c7002961980a742af4fcab74c250213b80bce9963222016cf65b007d3e9b7ec1ad7ebe61ed6323533691bf1ec17c16041fe27a61e46edd4bed8c2afa641adba3216483aac4ca3a67c199274732c60043f3337c29d35aeaebcc7f93a395edc8346265cfa950e4576e69c1a533b0e6982bf8068f3739424b20e9d903c52226d14757f6f8b21ea7a358d1cf0982fc75bce5bc78928cad877e50fd171d66d691adbafe712b505504b3f2d935df7dbad2dacbcb243d45811b22709309687e77d234468f6631317688328c21f8482e4e4a9dafca85c4691c745c37d385d71c111c74c4e66d9c11f7a2f992698495e877dc1a00dc288eda87cc0a01c3feff93ed7840ff150f9430bcbe661df79c7540316ac9d638e12fb2a27cf5b1c0b9a3fbe8ec5eafc3a9e29a741940d6e0ea56f219c326891801fef7e4f2fd66637f6f99a077bf7ca86e21e56b1e394cc3f8d0a3186b5ff289982c3f16b46b3d4ff67e15ee44b9be3903484535c03834f6e3669e81a0494d1e5778d1e920894bd55c501ac2db97351369c63401c4d2e807bbfaa1bc1b6ca1f9aca31ac7016b8e7f6b13ae14f2228bf24c38517373a217cf02863bec6063eb8ce633e43809540cde6ef502e43bdc2a20a2be23a0436d3af14c1406c89a6da3242cfe201dd0d7b095bc813edaa4a23f559f11d275e1e2ec2aa4872a658bc7130d8381a3a94db82a6950df5674e7e841384f8d1c9bd23defc6ea627b835bc88d3c07aebcabf1c3f648505feeb224639152b272b4a2e40ff9e936ad6ca280b42416236b54075c96d07d84d0cf137c261b86d9c61fc2e21af4fa428c78a42e1f980b49baf8494105bf78dfe4cc08ced198c9dcb99a951ce81105258c4ee440bf13ee9de9e0de192ed2575823b4bf73200da59eb19a3f5456fb08fba53cdcb5ad1f407ed9d1a8bff1931d215c4325f2e37812d5be0066f8d65f9e7d7fcd218837981d647dd4ea5c84ac7aeaa20a6d1c1ea5aff77827c4ef4d2247f973ea513a1fdaa66473f55799116ed1a2228e468d5f0a8468c12ba91412cf4fe911e247c6e1fa15091f31a59010d0df51f510c87f99fa9b565c9df33d0a8e12046d97b4c359951a967d3ffd4c35252832046f01e34ae512f6c0a82f860c1cc0803874cc4ace80a475b7b91f60c95f6b6b21e44f57f18d2e14f6e7b86df2c92092e058d6482d3c3311edea8912f616d93ca5c8e236239b39eca885775f74c15ff0507c55be4fb6382e5bd9bfaf785ccf167840bc442026323fe543e6faf07758a31cc023e7ff24f182a1f9a284a79cf3a2754b8acd718e4a9ce637103fbd90c888a8885a98ec8adb1c04d372abb1c7ec60958aa3a8826b4c89666aea9da2a51d69f5dac0fcfe0448b1935a565572b6c4cf6e2897179e870840544b3495bbb9b0f0ceeb8402d43cb1cbe131b0fd0e62050b9c549ddab25f73f4c851f0a45d8d6b0e7d01d33d2f87fe81a434d2813d41643f570b03d51bc8394298009593ac0a68458011122220800a871f926b6bc9e4ef1eb7bc526c1e6cb599c230639054ac86e871e2a0549ba368a0fbc74504ae120e0f63e440747fde4b80544fa544ebbebb16ed4197d64c9d78ac5e64bf3f9747bac69ee1ae2e37ca190222dc550228be1a2dbeb643b3f128241905937968ec769ed6dc5122e5956052ce74227a68df84a07b8e746051036eeabaf1b21608f8bb5dee128c18852e973d68b807cc4a9eb6090f0a68ef63be9e0552bf9cc00e8c8f70f4944464329221ac5072702414fed097ff46d861fbaacf0990005eeb241176bd77d3c39c122e9715227c36e41fae9372b9358dcd9555013e5290209f645abae48949a7951d8c4ce67e2aafb9c1344ab942538b170551611a513c56dab2e8d60462cc5bb2d844453b0d10e5420b9c358c9419a9104a10c8eeba4c97b486e62e0448b3f162a314a5528672b35712adfcfe6a8d6388853574cb56af174dcb6598f93d358330fd8a7722b967bc95d87a43409e2a9856925041d41e7c90db8f9ce2156a3ea6b99d21f2c931386b7630240069db51363500c53ecaf3d2f8c13f6da61d6deb6aba5b3c746bb0919cfefe6f6481ec20bb39754a0a0e71489ecc997a585605e18ed34411939ee47f10be9b5d0a5789981e171b3e3076e58ab52d831ce19874215944a05569938f18b5481865266322f3ab721154c94b0e9c874cc5d20d419a4f29d1af2dcf1df7d6fce5dfbff145306045217a7828123b4b2a7c5bffa0bbe8850624d882427c7fcde5f6f85a9975f19e77b8924f74dd317f70474973c35efd672938455ad25e904bca51c9d1800f45f9f7b3128ed10edfec0cdf04bde4a93db12e3bca8414bb61893375523fde7b7e1f7fcdb9d9d518c7877a18dac0fc61d82762d14840f4dfde4be69ffd63bbe0a4f813433d612885ca144f5f34ac8c576adb036ab30fb35d73fce7d96b0b66900ed367c3e09435c584defdef8b991d362df795d4ea4f5b4f18d3c50d98a9f3ff77a4f42ed47e043e0a42c986c4470aa0437aab36293f18826e0185a772b02531b9fc9b60d1b8c467131163b458fa5e83bd0e26a81fb010c99214d967d837a78bd024c28fbf250cf3458cca9fa3e6f7fc05fff04fe25170d5b528dffe4dc252144462992493650732d4e04c238427dc8da4af8237ca490ff79d3fbaa6a03e5e83a4d0bce968414e3fcbe1a0a5f36a11e8e544bfef4955090f7a25a720a4f7ad9d9c5d8f63ac7302e1f8a6551a0932f2c790f0c42626fc7aead218443d82f7a338b4db05aa46a78be94fc1e17fafe78044f0fc1c30a0517341dbffa479c890c6b45e510b1ebf607376ebe2d9dc3329f80203574e4da02487442090bfa3944745604cbbda77f399ee3e4c2e50c88192fb79ae5b5d106d3e8e1d35a508327613f910a229f46594377887647e66c55435eba6356a0658c7f637a9cf25ad96f677e2f2497ea767b6e6480cbfa2cdc09bdb9a04e10adb0d13a4c4213bc9e81e11e3fd14cd1b7b799b42512219983f528ddb7d150bcda589ae2dc8fa47eca5fa973b40f46ef4c3db04224eb359371bf6546fc437fd682085ab22c59693d9fb7c53f9312f3f3066d90e3514aa0e5351b012d000ec69a2dfa9165286e3196870c3eee29508f9783d0e30ac688112254bb8bacaa72adce3e68d30bc99248b15322ca078a004710a1e726c2dbfe5e65d6c8f60ed75a79006ad8476b65d32816882164bd6ff8c2f7e7124db3c67609bdcc7b75b5f4a55b717aac3e36ae2c1785157e0ad13edddd7241138cdcb76022d288fcc7c4845e6fd49f906bcbb24c7e70014830704ee53155f4cd46592cfa3c13750dd4171bf70087a76d30fd7bb62b855c749f8d85202d53127d4073c5bc67ac1d38fa3c693f4d7900ef66be66cf2840d8a49b158307d6da28492a7a74b66d74c2572f543b4dbb0f3b3b99d58b1f89722b1d07e5d441b6c75bf13cbfb82b119358f60133a063c4563221e52dd0c8506a6734326f47a3688d7ca4e8fdd7ed7ea97a8064950807baf98cdf16a179596eeffda212945dc32a5ece03ed840058b395e1b9e782d2250e1604641282a2467aab1eabf98bbe8092d5ebc2e1dd29efcc3967b27612648c20162e13a948a669b04a25843cb127a2bbaafadac03d1d657f1a6d9d7722c0694c149f58eb313786c223fd2f14575b0d4dcc48c03719e3686fc51a66001f4aeef07280c5318859727a8aaa215c77f00e86e7f028011f524439374c13c873196228dac937758d03b90e476b74bb153636fbdb2873e56db2c8845c92db5a54d6a9b54ec47a7256b1dc24e49950f538b03632c1585f4a6bd5d38d208a7c5eac4e0de83f480d259afdb6d44ba116108a04380db2957a1242e1a865ea479ad79e4f1e071912fb2ec8ca8828ab7686a6d1a509e10c4b37cd7bdeca3a3adbabaaef29ac0a2b5c6c56cba93d96169ce9764d2d750d4af10895b9a2f538117c914a2d2f0d49f9d9cdf447d4a69f77e99770c862e4afcbf1dbcca604fac3240f4941be55ea50b366284cc1b50e40625317500268b1b63a87046f49874e09fd414ea823d778ce2f16751a91881a568c30b14c784a6eba8d2c501ca161cf23815f5d5683c234d34aa54526efa9ec41e52e1225e5755d718a71704873f0b539cdc6cd0f92b13fc31d65377b4ada81c93059c1acab99fd0983acbba6834197824b5377fe9d4e2ad308cb3b6346ee074376ee84a0c0049093148cae310623089749a45ff753e132dd8d7f43170fe1b31b79cec73c4a0b10cc82b12a09ad69bdd275c944911d12a2bc12e8a716137138ad2ff4b9d8f7483e3f15a753755071ad28ddf9dcb3bc1f18964eae0317ce01fe1f9101a93fec53d3ffb7198c7086a8c0b4679afcea5b10b3042897aad073c55378e7cb6727498f4841c3147196e51623275f4d6fbe2b02019aeed3bfc6a5fda25928b3f387eadc66bfb8877873c7210b299109b95acd2b919d8267e392f7c878b668e088d0300dfaee19d8c8e806ef597c2cbd31a0728076ce64c073cd4e09516de4b5ca514841135a50eb41b1ebee38da54e4c834da99aa9765f901ce2e362971d267544064b8cc9ee11188e940b81608022cfa4a8fa442c08041abf89aa20b16174c375a3b7f97094606c615035d8c03e8f97d63a918184b65cb20f9bec0da34de09e83fecb0e00eac14dd6023bc72724f301c6da06c4ba4ab670e6e245cb9780b630adabc1d526a7c475c7e2565b04d2523f482eb1104f12062bd3d2c17b7115e1ad34efecbaf500bdf3ac1f254b5cc47540e5bf903453a7f25826943efda845b91a554ffafea41b692b34cd55c301ad0724a305d2053b24558167f526601829ac2a409d3585086fc5b59ae3c88391c57592cb60922fa39c241741d3b1b9289542a42ad0fb3fe1113b7b4dacbb35c7c12b732f374b25d8e1eb86c1754c2334bff0a5198d1cabcb273449e645089a960927fe0be4357f9660234e70fc4483155ca0789b2bf9f4591aea0b090cd9da41dd632dbc453801baea5ad00a36ed0e714b7394effdffe02c7641ff39b4773ab12e389a51a8f2b878e0801cefae698c74a23b20ca67900282ffdd5892119084e17ba6dc43e0c790cd6453d416c463978849770644a5734af7d2861005f931d6fe0383a7b1919bb0f4df91bc3ec2ef07c6667b95872a6b26180cfca1bb3b6be6815091c83c8d65aa5378c2721c2115ec3525cfc61c28a418925b2d3e57d66af02fbce68fac069cb4cab698900ab4af10cc6fbd8f69035783b689342b67a5205155a8041e069c8207144a573ef85fbc9862149a8b1065a1cce0241117bd62a083a0b316aa7074b917b597e28d62191ab8c60d30033fcf08d2d7d8f1f22bcd8d2771e4d2e3fc8a198f7bcb8bb28c498c6a9d6930c324a9032cb0f7f185022a6e4574a43cb0f0f37b08a3b2f1d45191845e1692a6e2aae3aeacd803cf00ee5704014b9dfc6a390edc8be389c4d512098b0f721113d60fbacb9bc2b1d36b88cf62be9683ef18e31053c35aa1b2ca2a0df08551d191830a9e7a8a448f5e165d52286679d8c09421b2227e03d786e7ed36df797c9ed07844e1797c0b17c862b20847dc4d54082739cfdc15f3215779be00478d52b485475baa6682ec3976a7027f7e27b8505763c0410336f62907d9b4db3cc8a2f4c684d28312e39236257866e864a209721d3afa28ae440d1bb01326dd52993b52dc30c67652ea015e83fad1f3a73be46ae1e8cc56abdb31d1323c3d73d324d8257a4ed298baa89fa537a35f068fc848ec5004f331920fb99e95ed4dc21378930f7f35d590f84300e207be6bfc4122e8731285de4147615eb8e708eca0c8dd44a62da69e0cf290d14891926d634c5a24b94b97fa14d46f56a3da4f29258b95a12a615222146a731c148a84fa8ee19cd07cee90c9f3d5f2b2e1426b57e084015c6e006a11aa5595f83338a620f04fbfb6818b40f6db3f0ec671acb92326213f15042446cf6564d9b7cd49c7db13ebf64d3ca1b3f508b9acda809713629d60d6b99d66ff191e1e58f11a8a43ca4dc5d551fc55af9890b175f5935c70680b14c3396507826279fa6eef63881ee70715279410eb2cdb40c9b444a6dfe31f161a0179489cbd207c034b20a1867cbae58e87566e2ba27d06a2bc75d678a9b9b9cc053828d51be8a454bd7571d7dcf38018c43990ed64770810ddfd1a0ea556b31a1595e3eae8c96f9b789b6948106c49570d82290745bcd02d2823c867d7b52ab5f9ab13675c0c63c0547bbc9faa96e72d21b6d0a1dd04d9fd4932f0356b98c610dc6859c6640df4477cc8082fb033e86d79d099440cfc138d4e37167adc858882e270ce67faf773c21507166d7ea4dc14c735ae84e38a2d243a88a494e0125a4a4f2138a5cd7fdebba2028e24e0f5bfeea54ab938905ea3f51a97dcb410828374213d9e1ca61dbec588680dba7c238057d317803b352c4bcc210239dac6d521062e3eed18c5e11d5074cc9d0b3a2afd9d7bb796acebc9d9be14dd21af55afaf03e360db85bdaffc47386184d2fb68e17e7885fcc92142b6a4c85aa681dc2e2558da48f881b3aca84d8c786692eba14fe45221eb699bc16fa4b120bd65cba3af02554146c33f095705f9398f0cda6b580afc9c870cdb385d0afd21158cd452b83bf80c48335972e87cc170b78a4a32586badb8a83e8ee93b4d9b89ec8ca0558853b51b393d89037ad67c5542c8375035b5792db8a70253360cdd69c7e38ed98d1b749a0c70a2011c2a50212f95e2dfa3cabe16829d5c7d31c7318122c556c9c6a1be4e0f67aa0c8e7d090c623753d4999917214608a4f0e7d53542ee9dc1afefcbc839a4134f1391073d5627d17924aec406e8bd4ddc716f9a5e944f65718b931c3b2c2d45b07daef3331b98a83a1f248966154fce4e9c74dd8c8a5b5e072048cde15504c650ba6c198f663a70a79be00cbf85c5ecb00f137985352864d3125633e2975ab0c5c4c03d898555c38d06a4bf1d2cece38de599e7bbb4b71016e7e99076e45a022e819dbd773d4ee036ae10a935920dc15a70309cd78376d98723a7092ad09ef71a15d286d793915c34dbe1b8ec18e376eb135b7cd05e29825a641830d0a400181db34a123754120433ce4c0caf67a98ab43ddb4dce013cbd843afa885b4bdf7de526e29539232ff081409f0083e19c8ccf4dd8789ab5c659af381fca853707032135ec47e24ca27322862d972558c317e41565049a953975182a06c49df66f1d48fdb1ab92168431bb93354fdfed1f7fb1044a3a88d8843d280371a94df52832b7aef3bd515fdf6f4c1110eb9dc759dbbfb8bb20f88cc2118c62c723f27246bdfb45c832bb1a338ce91ac52689a36b5e9a0fb0f1f79be26fd0bef0f1f1a0fedede768aa4d6d6a53fb7ec43969f69af69aa67df8c3470e7de4ede98f9b2b0e97c81be6315ffb0f7d640de7680b6e49b8a197df33451cf24759fb18fdb5f066f7b0e336fad937c38a999819c33882607c69544839aaaccaaa4336a736a9af0a545d754a6d5528ee2e5f7ed0b2471b672cb6b6a7072876c42153358b06aab832f16a933944a7af1637562bc8d477049992f1c4aa4c220e9afbeb1611877c309cb6e01285ea84dc1fa5179b5756651d69b1582ccad2f9b144ac94dc758a8ecdd119a253859270d7ead02f2b8183004e2e2e82b2a82d9d8c615bad4a78aad62e2a13ea136816ac1e564f6555d60847c9265fa47477777777fff1ecc56699fd2c47fb7df55c1927dcd10b3a7aca8f24797537eeeeee8eb32ccbda7e4789a7fecc752527ed577f7bd260077593c6ed8ac1cd3e6c57ddf114876fd79d76b5e47e8fc2791ad5ad065556fc6d0d6dd67ee50b6fd630909967db258d6235ca8618eee1f5d3195ca96ab0fbdbd5e33ed88bf145189d28c1b7c88e45eeaec94d6be24cd3f45796a71ca702e50e6bab46d1289e46a97c7f2d527b1a75a4512cdf5f7d1a45aa4972fda94aea2a775de2e119d8da510bfdfea9d2d2a5fdcaa524c7f11487b9ac67b28c01c432c38f7c2d1ffd585c97fe0c5ff57c7e648499a0851c3a0e4ea3bcee48e93d0dfab4a84551f45cfa436689f911f7f11e21dcec43ef3102870b48e0850858a005141b2ccb7983c411889aeb8ef7a0e06635384405c494e809c07d18a3c42c3611f6b1bdb42ccbb2b71a0e85645527b7af72bb8f0f4ff90e72fb0ffc0aa9923e4586bda7ee647fb91439a541e93ddeb3694f4c219997a830b2aab64b2c113ba4c72ab13bb6c86c290465ddf239bbe5a99a9a514f51b24a42698dec568d8f6a668da72c14f1d46f82dc3b4598b688e4b1aa46695ab643220efbd84a7a4f1e0a28d45625c5aaec106ce5293b021b450a6e165665edbd9ef70fd27492dc2f9b0756c5235511c8aaac6a094db02aabb22aab02723559255929592d5931591d8132c5e20cad7618f123a6302c5551c270b22337a0d385d5cbf2589d10a86c0b5456062a0b855575cbaafaa7d380ef5dabb2aad14a06cb5eefc13813c5dd9ce50ad7b34ef4b113408e22dc3c3c9e1437ec959431c6e88e43ecc36645260d0235e81d1b73d19c996a5aad1886b964aa701e3f795be799b3b3089da70ee9b82afbd78cd31cc8ccd37feb6e8870b24573280817c756cc7647449bed35e438ae0adb5f610f75dd0d566584700990bd16944486dbe538dd11d1c61f03caddea27d9bfe2668930daa23003b9593d1ac96c348a168c0c8c1f34307298e5700ed58efee6c1e086cd92517273cb54717158107f8aec218d41f6a19cee2c324e3b21d25c64f74fe6e6f1b756a68a2b430ce466c599dcab5e4dba841cd20d64f79f38432417e7ade08633684ee9937f4ef621afa11b609a8c2d3a92a93fb6d2a0e62277f79fee0e5404207f21dea53c309d9a4326a7de2c8a1bf47e872912e5bcd122c50dbdf0da90dbff064d6ea716cf4e870c030ca4c05daf07c73977bd1e1ce71a4e4f4f0b4a12a0233eac273fbd244a29310cc3300cdb5982ed78cada7b3def77e210b6d384eb86ddd33eddd3471c06d2d6e0e2c0ebc1072137480423e4fe8e12533954009ae0a1f07c033d86185fe4ee9e2db0e82a583cc0761a45a54fab582c968f2a362171a48edca958b76c95a77a07f607f70ad5143d3bd8ce14318717335c805950317510c655f7748f8643fac1d63ccd03f4a48fb0baa79bb44f2b9152ece8387d89e9e8e848568e6a28f7882fe99f96311d4fd5974fbf2e82350de2a97fd448743a898e7baa63104ffd53589f965188020d86f20a6f9ee69102430150f3344ff3b44be3692126dde44936d450b2a15ea245b125d97e369f6cc873c121a62a16c0e98b59442b22d0108661aadcdd3db97778aa65204ffd36e81dc4a0fe417479c7a079749a675b8d4010639451d62a0666311b6fe2538ff2abe57177924a50eea74154882af1a749e80f05a250e88a32892e318cf2643792dd59a25c6c722c516ee871c7535a146a4473c5197ffb73a76868c4025117626a7bff7034c528069a68088aec2313647f8de5a90d6b2ed665b958b58a5ed979b2eb64d75c9eda42204ffe2778b56028bb0cb23f06459c7195685365177dd37d32f5f1f120ac33306c105d359d4299f4d325944583a8140a449fc81863dda9d6defb1ff34f430382acbab353776a4fe59102c8d48ad859cc1d29e82ace14a1451a7482fb6d5e9deb3904392331cffd0b12dcdb781bd809d9f25363ddcd0ec9fa24909fae922918ce4b4a83501a6cea1a91601a6cf9f918cb877527943b2f24ef437b432f6f3871fbada5bb45c616bac2a4441c329b5e06fc343ec64fe64754e35bbec68749f97119191a38f4bc0fffc8e0d0fecc40822b8fd0150b88b66850a35abe1f5335aaf42b2fc3da5b77bc3a50cc176d6450c41133f7b4496cbaa457255c95946c13db2a610b54775a3eb4381e6130ce4b0c38f45cf08cc7bee5933f0df6b37cd166c6c785f40beb0a1b929b08a60520925477b055687df595a670773cd584b5dc15b741fb118839220e19a3385d51a04649fcedeeeedf4f97748a5bf54699c8cfd3f0c4d1721e5dd155d013528886795234d72fdd13f00678cbd8ce294139e932b217120d9719b2d790ddb7e84ac4992e948838e8bb02622ac61b05e3e4f6d128f96ab05d8d13677ce54accf7e954546ec5b2205720d2c6996a24fbdc84a7325cab47e1a14118c0d92b290dfbd0a7fab503b97e8c5204ffa1c745fdea24d70f3d8f92eb5b1c8256c8b5d6cfd12c5eb8d8d3c7318233d6deeb79ff0e82339ff4a921c8705c5c5c4a2f59439dd3e4c504c835a50525f7bb94dcdd258fe459b2955c4aa5eec6e54bef5fa9e4e2f225ad542ab9945e7371297992c5e5195cee97401147d684c6c5054b2654f2f0ccd2bbbc7f2577f9422e87333eecc1e5d2639ef75ee94b1fbb1f669466bce39089cc6301f21479ce0b46a066810976624067a760fa44576670439aab43a3c21e5c36a27a1b02d4a7a7192bb83436e478c13e66f93571094c83f4e7e73d5785eb4f1be03d98613a9a06e91258099a4c3f860457d2c791bb2b2f3fc2f654b66bdd35997eadd8ccb2d9dd3561dc0f6b6ea463db401c0425f6f4d3a1a646060ee815b8fe2dae03a4c42fd8a40da0c94a2c659451c6ee0608e3c5d9607ccfc24681261ad0a8f84131e6a63352a08946dd0667ff7ce5eea6366d1a4f594c739508e3e2f7147d8a258d122c4337e4aa7071da0a6ce6b824a4406e1ef17b7811f7f078587c571ac4bea6a3fdf8efa90ce310ad0033c6a241da305cfb614dfe1c93b7e6ec27f395f2362926f2b961047a911f73c3e41d8d0a231290c0be086f1952dc1c350d621f5383eb35186be20c0a6032f6617cc71e096c87d30d2e32946664fb3331f575d1dad88ac520ac8a196f9e6f638afec47764af9fe2cf7ea28578cb2c6c91524a534329c5286df07a5fec6d4cf56318c384f813dd8e33d2a9adda6a545b22502cce93a0a121d555a5c8d86ac5e8039f9ed1d09c3dd913dbf345666d15a3a70a754fabc5490de356578b141fad271147fc40fcda3768b5bcc55324278a29954905aa2c168661b6da8a51ba7a0531e10953c08293564faba7b66a4b47075fd020a66217e01658441e2089010bbaa1e80dc82ec831362c59222db6066aa046b50f7932d4a4f5f29ca01692314624b0a290c4569ea2b134ab6e1267fa693cd54a889286e68b15941510a574484a929f235134c843e3a9e6229efa9d04d1784a9bc2b59e1a1ef20c2ccc908275dd2c78519821c6edef893340d02416464c0561454c2db11a238ae7e4625cac1aa8819090fb8700040434817c07a8a7a7f4784e8f0fe971223d2d8509145750cf0cc2098a4131a8e2b07026a5d88fab5b389eea2ee4a9bf99a0ea27e84c617201b4025a0135d0f69a7db18831ce3825269f64dd2d69635d45ee8c07b93f4b92b12ace546da565d9d9d57bce392786b9ec89337f7ea893aae0d9be8787a5d36c72db7c73295bba943434344b78f4f07248b3bdf6393a88e82e258fedddf1100d6edde9d0f0100d729a7c4d8ad538398e7b57a3845cbebdefd7384dbeb014aa31fc36b9d9ddb8fcec6e62f82d5edb53a63dcff33cafd338ad133dd789be93c1383b1a8d4824d28c168d6563b1ce729fc4c2c5a03d473f4773dc6bdc0bf7a54fb21acc2fdfcdcb974a2f251c5fb4aa69252d468b297d2fa58f19e637ee93f90508c77131dfb9a4c57c2fa58f79ee85d3be9712cc0bd7230626e47bdf1d7da2ae87b7b5a4c919cdb49c0d2c4f4821d5599c448f5146e9eebea4d56a79abd56ab55a2d306eebbc66a5d04ed56c011ce3a37861b88f4692bb69d02f5035916d138948b71b49919d37310a514cb6c85ddaa6bd951dfd2d52d922aeeb3a973e89f4497e14b6c83d92e52751628518ee9a3a5f66fd8493f384ac2a5e50776fcc330fb41062fb2007b96b205bb6ec1a751a9c323444828227f32c939974775fc9d5124d7e0f2e5b1cd6641ed9dbc9398fee7b70b80797fd79f89b2c0bcb4b5726a5f42a5248aeecca6e2e2f3f1e2c3f646f312043e0490edc28a1cdae96263cf53ff4439e924424919744be45fb52f7e1cd324a38b459c35a8b15abd277a5af73d5959595193366cc6829799b573daf5462753030ae95abebb05c827dd17dd728988f590a35ea25a7340aa7515da9547a20a55249cacbd57de993b9eba4fc524ba1cef592c25ab97620e1f2fded82439627bd0f8dca70e77d9dbf2c83c88735b5e321710f2e67df83d3a40d8ab09f611f1aecaff1d48a9cdc75b97864ac40f4faf97155294b8294acaa5065d526dd2d7d8e08e51814a174ab2855790ac3550993bbc4fe5071bb5291a93c557f9aecf8c9fdb58a98c27e94441cb3065525d42d2a16320a11477bd1f3b01974a41472e75048147e7e4090fb87fcfcf80fce4e0e14a1177dd1577d42e4884f0f7d7935b686521ea0558da7ea0fae5869c1ea02c8a9f851fda8ea4ffd794d21b3472dcd5d8d6a5a444aebe4fe29d4348a394473668e94a1d91367664f0b0b6e385d16c85373f56aebca53d5399c4372b6ca581950f6ce61c684c9a45373489fba4956e5d0dbf156f6e61049c31ce2b95c16c9265dca296b6a44223be7fc3ae7ece165f7d8726d9d734eaf5f05bccc637e0f2f636ffb634bee29c2dfc50d6b1ed56d93c34066d6b2b0875753d3491b45a4b3612d55258241c1c182b0a13a0473615272ffa6b9b76ba2d74438cb7efb7a80360c37ebf8454c798eb59e602d4c0b11ab426e31becaae3b4d42813d11cafd5066cf4e0d6dcf653d77e806874ae4ed7dd338ab790f306beff84648d3342de34634b8a1548d1133c7a112d93ffbe4c77ec599fe1c8d4d7043aca561d9cfec6bf634cb249ef50bafcd160399d9aa8664df2f89342a74dc036cbdb05615eef6985439b9f2e555d57a12d428288d7261429207fb8ad3b5eb1790c9e2eadbf5ab4129767254cbc9fd2c53903c52fbed63828938d31ad6c2fab157a3a6549fcaaa4111c713640e9d1b6b6152b0a1dc2688a9eefb7b8c98eab0e7a7570c9c05b971a6715aa78334fa11013a9115dc084b1e11e6248fa669da5b29b515f6c282341e4f614c90a77e6c0a58d830271ac65aafdc9f7d3ed4a04fc1719710d6c25a221dcd3d14643a3f524a29a59452ba8c52c62829a59452baa4a7c7adbdd7b33d3dde639f7095f4c4ec5b2cb988591040bb3b51a4bd0fd64aa5fc813cf55fc1a385ec4252217f7a7ee40f37a4a65b8766b98c31fefcfcfcfcfcfcfc64dacf0ffda13f3f110a37a461d603456e6c03ab2ee4a63f16ffd03172d328b96918b99d441c916298eeecd4d9aa18a33b73d532c56d99e2caff592437cd7828105dd11d4fd11fd02b280fd582f6d02ea8cfa454d09face7671669afc935353535359dcef44e0a524a4f7a523ee679ded7c3cb9ff739fafb2ae0650ff370ffa2f755c0a340e6e18ff98c6f1b6dc1bd04eaae32b6e42de3a4221717ac831b4ad67f8e96ac4675bfecff7f496977f3f2b4bb81f99eb8ff71fd973fa54b07f3b1bb01f2ef627f344e76f9ff5c7e935dc945e6933d3197be9bd2cbc8946464be587af92ff3df7f32df8bccc71cf39bcb27f30b10171797ffcfe593f9bfce32ff7d2f32ffbd4bc9e5bf179998927cf962f07ea3be9243c992a68af927597c307de62c61f94f76254782089d48b74c818c7156e14f3c25dc2dc28945764cf22074552b499fcbcb7c301ff3bd7ce98be1efe7f2a30fe645dfcb775f0ccf7d2ebf7d305825e805ab40e918b08aeb73c12a429f96bd0f73b2012da4e496af1a41c5841d6496cf59b0019615f28c0f1381152f31966821498eabbcb2ca2b58a5d5a08c2ba952f97e70bf0131e5ec3cc395dcf363cf1f4d64ad889a432159fb51b3265fe2784f6db61aa50a55a064a9e25211ca52e595a5942c5586b2ca948c936d9cc4fb4504e56f6164f99c18597e1725cb175521cb1f8da1852c5b71467e9e5f94a113663848ec006ae2d6170927cba8c50a0c1d1c9bfab50df66123e0b189ddcd8edb3ac1fd1cda57ab8bdc00fb5282894ed197efa3516de9ab41f9326af0caf28a295290fb6295a1fb39bcad2cafabc76d51a0c1e8f2aa105315a232854c0d08281bccc398eef56a8061d85b7bafe7fde364ec1be75748325ef45cd00ddb27b3783cecadbdd7f31e28061c821e6ec12c78065ec12c2f92b1da396bc3a10fb91259dd089e45a4a1099306314c4a29658d557e8dcdb26e843883bd67d1dd785ec822e6a082a38293dd081147b4ede329c9d3552ec8a783de89801f7a24950fc2bc48c6b02419c34a9c1567bca11064616faf5771e8f9e09724320d8c3efb68836956031cc8febe1317bf2431ba3ffa68e344f617efc8b0dd11fd2491bcc48cb19c5573883abbe2b4771dec317b3bccb35fc15c8375c3cb02f2d66b6369ac8c61ef3b9e1262837df609b1711eecfd079b4f4ca71e4e4c5d9bc1bc8d687003ac0643f811f2b27c6a648b2dcb9ff2adfc2b5543d0b27c9f220b14c84094e5b70d0280c507a4f8f73c3047ab1d214af9b7465c4284175cc989e1ab3c5d675391215776bb9a873d5d753f3b1938045570f8a3fb8ec34b22dd231777921156924578cec75a27cf9f4372f2a4b56e7562157bda20d7b59b50bf76126998ad38333d2f5cff7ea9e3a7f9d6deebfdcf297596f8e8291a14836868b28fcdb3e1e6a121588375c36e9e5690cb719a4788cdfcf66996afa890cc45353ba082955b8e3272fc2643f4497e949f10aeb43366809389065b8838d3af23d2d00fc63062370977c83dd34d34d8312eb8d1d4b3c8163fec27f632a7a494524a29a5536293ceef6e70650704d684a7da8652dadde06ecdd92bdcb066078d9fb0979fcd5b104360df44a3723a555a21817d8482c5293d51a12492b1c76690b1982591f832e22b45dc513f47dbb75803d64fbdc91867a6a5347e8aff812d9a42193909c419ec438f40a4618938837d8ebe30f0fc2433eda3ffd079e653c1c99d618f0b973ed8a011d1a67eec76d8cfd132a4b89fb1223ad85beb27297da43b0d30dbb5d69abddd28d5beb7ed73b4fd4dfbc2ecedb7cdbaabad54ce1652dd8fb045930d13dc3babed41d301ae7b8ee3b8af5f87b96fdb340d7bedabb6d6e9538cec9cf38568364a304d8d8a94d2fa18c7f1b880672318d83e7660fb6d7edc6fdbb6fdfc381c5a4d7bef8ab03f3f87671f7334f619f6d8cf2fd250e6f9a606699e5a8c000a39763a46d93688d129822d9a5abcb8f6a3bbbbbbbb9096120a3eb5d65aabcf0c0a239eeab7fd6c06d5a1a1a1a1a1a12a544a9e28610b2c5a55a8943c51c21658b4aa502979a2842db068f140d54ac2f26172c3061d544b54a6234f825aaa56668421aa9c3ab9ce210d56260d56a05c57be64f3a1c1b6f1a7cbad754d57fdadbb5bc6c6a2bfdad49f4b220e99eb77ad4ac8b56ad987b28a5cb36aebd7ea365c1d72ad55e746ae6fadb5b6369406ababc1fa8d655083b566dddd5ddf763fe5b1537c52979356898db84db3988337686ca8d121c7ada5bba92cb546f4d96f33ba9b8c654e1b6e742b2c2618192cded59adb3a0c136594d63935772b59dbe8ed6f32ba1bdb6259239cc37ff49ad6e29aeba0d9d0a0cca4962c6ba111a67aa2ee86b260960e080cc3b8d8a84dc33c9b33fe16c336ea6eaa572537455e6672a7d4e9c740bb1beb591bf3a6cdce27bdc1708ca40260418ad7051173c54c74962f25c6d159a38d1ecc9b7c73915273f1b28a6d5a66a91dc0c89393c6b3f468dafeb6711cb7c387c08a404d5a39d81aec0c34349aa58169fcb482841bc627597ea36203b4af8738233ffbb4ee467b0cdb11840f0dca6c69c8382369bc864eafb1293de2682033e288a4cc658eb83b39ff306e324cf6f3ee0c24b8d8ab7437f44d18c651ff823010dd44b26bceb739358ab9a5188661efcee914b335564aa7f52fce0c11844b08426aca31a39abb3bd8607c4aa9d3e99b533a7d68f0318ae110c31cc3fe73c7bcb18e523add317753fe8ce42229a55324c24cb85704a34b447449d0354ac68899e81c9fc7a41ce54c303ea977557036ab55c79e59ce66744eea12822b3fc6886d94528c6b305a4a29c791c0b8f26ded21cec4f864471857fe0c35e44063e259a30f9fe38c3d279df3b38c33f167e7226e44841ec5289f84059d73cee994746b4499d59246d8ac2b303026d38d1b36d8a003147754533012d53b44d4d14a7f66e5303a315a05b683e9c516b6166cb6943417177791d30997f1ed9df506d72e5060234ce4d81783614478c662b0a955cb655a60188e1be6b6686b11b4b9042759adf505819be1186730cc62517743c334b118c950a34327e8c46810bc9818fdf919a1ae2d388ed55449a34ac4f4ee0a0c8cc974e3860d36e87041e0b98c7ac93d810b0e11b7b212c657b4e18e40d4c5f082d91b1f0dceb862769d8ec9bd7037f6614a5186f31a6deccca96062089e11aea941984dc7cc6a4b4784b794b4ce023aa64b47444c04e926c3c588c365decedbe998a31b2e2acfe6a8d331757c588d20ed2c1013d3e99879c62138cd66dd62745de1e100008e5098e813090979ab6103f4d922edb70f2b59a1f8025df94134690b39023de5c35a1f1e5ff80157d22744344cd324432abe7cc4992523196a74b43e7cf0e0ce063b1ae1ca6f223e231866a24fedc392a60ffd72e0c59019dcf0a26a60230c63324514666adac406278d29f457c5845abaa4dfeb558829771285228e7e9753b24b2d646765773912bcd54fa588c9e2babfdc094e279dededeedddddeee1f82e1f409ae7298bc09f60dd1272c4f39e79cd808f6d1fbbb816153cfd8e286b76255de1b3b773cd78898baf1d4df2223a6b0c7f096c33b236b9b4d40c211ec6c549cc2a5d494e3e5acf40785d82167952bfe4c7745dee82860e2c5164d18d6d3fdf30c2deefc100c31a6623c61758b8d9238a47425d39774fe17798a91e76376056b1267268639a51a5010cd6cc5328b43cf29a515bf674d0317b6680a67f390bb0a518c9c025d3e8938fce9c4e40acca4c4e921cf7a1e1864caf6079a04ad822d5841145f3a41a640275ce418c4170d82a04f929f20fc0708080868676767c70e0d0df590b5b65bf6cf4fbf1a08a8777676ba87868686ba3127c82858610b5ec82310210832d543920aa9831c5f4e1153fef3b28a8843c6c727fde468d6432d8fe12cda8be33f9eb2f6e208645b37e8e5f258353be08eeff8a9557e04aa7c87554642d83029a5a4f4a7cfe92bbf84b7e0d063c1e1c5e197472f7f4220772abfc99081639c19c93c5299dc37812b644bf44420468963604bbcae9d2f206fc7123b1e8376ba67beea2901d95f3ee9939d8ea741b2cfce3bd2ddd33e3db65fd6533d453cf53715dd7303a06bbf7bdaa7b1effc639e4dbac490a7dac7f35a84fde5a9ed1d7be5de706b19d0ad144f9d1c69d0279a560044d9a229cc64fb64f918595e7e3d6ee4956df4a98c46a45751515121a9903819dd8fbe89bdcacb8f9ffc2dcad1e847a2d1cbef070fa26bc4df6dfc6394f151469e1c49b227de8fa38f4b1a25fad97df3e4d845667cd83d7d84ea04750c654b95a9ceced7ed2e415358b57c8bf7354f77d3f22c5f17f962832b0d45e68b2bff9351c8229f4c22957c724983b2c9b6d3f55bf96902b98de3e8a7962864afd113d2765750e940cfcfc1bfce97994705f2a26394e78fb2110cd067626623d84b1b0cabb818450ba8b4754eef1891b0913e9a424fe78b36379ea37bf4c7a3c74adebec74ae6ac171e5e57969c65a2894635e6b1f5dd7a25fbfbe0e1dc3bd7df3e1a94de44833852c545112832e602b07f49226a80f4f1a38de9a3af75453496aa23797b9554b9caa5e323e253d3c7eee6923e27486ffa28c188028c2153f276bd86697979e8ff2f44f6e00d7007a12779fb0dd3441bb68ff9d8dd1891e1b7db024349de5ef49b73266efb64ae61b8dc6fa17dddd60d6ad0bea4709f756db7d5280ccb9d8ca74e0fbefca006e58542735c9670a90a539c066376704f1f529cbbbde8f4d928dcedbb57d4054144e9b7d909b1bd08bf08b1f128612bf41b697b1171dcf6249c272e43241569482a76e11397803125cbbf2e11b7e170428d9a5ac8f225c571f98fd32951e3c1975d12f641dce1f8a92573430d9abe17244c0f3e889de0865e884dec8e8836dcab25e76ac0f4353ebcad18b82fa6c6f792047dd39bb006484f3fda78f783e7cec9fd98636692b76f2579fb2556acb27c2b645dddcd86ad50835bd6dd6cf8b696dc4d6edb6b32d2309dd03a1dfec3c330256fbf753a1a27ff7020a238d35b7753fa8ddbb08c20f7942b3d27da44f7e21f9e45d825df0a35aa844321399cfb623eeb6eb6377dd1e687674ea8511b96312fff3e6950fe26c3f7b261fbb25199726fd06d35a8f2852b836383b735e3cc867bc3a17f8d0ea6cfb1e1296e185f4ec0c9fe5f3841e72589f84e60a6c7b1f11a307db4413f938e26e8177f7646c4373dfd2c20f3f62affc5cc42853bfa1f66e67edbb66ddb3e7622910d6a50ce90718a4221f947cd1ca6387166a3f1217d282ef78a38b697f8c31fdefce10f6dfef07f3811c7ccf23a89331d37fa570ea54ecc176ee7f0b66eeb761807218798e24ef9a62fda90a4ead502d2f9e33e27a44dfdac4b223ea66a70db2427e39bdfdf4f9ca3512ea388ae8889a5eafbf3a17dbf4a6b65e5c3dbca0197d450c9312da1534e241b531a152a695428e544024936483548438d0a8dc880d3a8d088e9a751a111d24facf25259352a3442bfb1ca5083ad1f5efe7d02c4cbbf4141bcfc0b45c7cbbf2e1a2fff0ae1977f5fdfcbbf52fee593548d0a69fee6e59386342aa4e17dd06954d8c3cb5011695468f332863428778c8862074f11450cd0237324c6a794e4be7c12ab51618ecf2f9fc4a45121019e87974f02dae1e5939ae8f0f2492d225e3ee9c9102f9f1424c4cb274129c0cb27b9462f9f24247af9a417490aa76a5488e37318d2a8b0e671d0491141bd7c959d4685335ebe4a148d0a595ebe0a4fa3c29697af52a451a1f7f2557a1a15c2fcf6f2558e342a7c797ff92a3e8d0a635049d2a8d04585d5a8d086bfe1e5ab3069543880afe1e5ab00352a9cf900bc7c95268d0a67f81b2f5f068ea79c98360278f92aadefa3d1802f7d320bf8ee1b29f1f3dbbe203589c70c00f1db80327f037e3f804080238cc31ffe036f409b1203c0ff06e093ccfb70eaa1872070f83dd6f13d9c4e3d7c0e920f873ed41fbe071cc4dee0b0070bdef8f01ff87d38a4f10f7eff39487ec0a111f06f4e3d806f73eac1e67390f880c3ef83a081c37f1d8f1920f3a5d3a944e3844f34f0e72091c1a191d397187062c08d0f34fe07fc407c8c026ae810c67cc6416c8d1c2446d4d851632453230687467ca9860e3b460aa8f177013136700e92303f0f38880d47bfc30ea58f31c0e5e177c041eeed3e07490987f92f0e524bb788df0107b146e070075bc300f94b354a3894f95ba3743f074911383452e30d6063871aaf030e7277d0a1f445c8e0f0be013e46013ce030ff0e1ba3ef70106b83874ec6468c0dec811c24323948320e8dd8781e1430b2f19d02320f326f44ccef78d1374d380749784488fa1c70106bca61b40d81c329ea7230a17078801fe120d7841a429480cef49c122219700e92908810079b831038ec5e84837005e072c0412e0e38cce153387c0e920e8705a8477c0a07b107c061ca9a8428c077a6aec3e1e83953c77d0e92237068c4f442c890323d0a07b929d4e72029000ebb17628443ee0bf0a20410f143c89083956188ed4732886418893e070911383422c30f91801c64781c1290030e9f8364c3e1e889c0a1e887780700bd8183587bc40d3ee93691b80107b91401476c3848cd38dc7ed2ef2f48cd46927012ce41121e20ace1038083d81b02e05ef70d35e0f0860f000e7249354c1cb65424dea3371e013888a55ecb4f3a6753ec811c24330709123834423f00a41bf43d52006e7c0e92161cce6fe920351b0100cb016c3642bac1928e98f12ca40d872cef380897b107fc73901c008746487f04006ec0a111d5db90be061ce4660fe420b9a186cf41320387dbcfc0a13fcbe7702376146100228610a2003a8200e2879b8fe67df868f81ebe99b7f966f8fce5e0e12380b411c0eff0cdbc0edf0c9fc3870387afa66d04f0a96fe651df0c7fc367430ddf009c701b01e01c243458064e8392062c2300df0c360280bff1cd808da8de06005886ca4ff24f1fe9c18fbe8d8ff4353efa327c24acf2f2937cd347b1ca909fe4d3f8601e7f2fff7d31fc07a572a8744c994b7a1222221100000201019315000028100a88040281502cd02441b31d14800f7a86487a5aa389d328c9611433c618628821044000400446489b0aa4adba6591bfc84f91eaeb22b2e97c3dab2ea1f61dc4b7bba0e33864e8edd4f19dac450275a127372e0e212fbb6a95f6da3a56379a87350e0b0a2eb5d5b1d4fa1f62b71995c91985b07083c28ae60d354dcc1341c0d06bdb0ae33538dcb7c091bfd2c13ae7d28a8127ad31b3be4cb0c9f1a8d1fb55c8e0ca9291b0ce68c25c6ccec99f9fef24b75f5fdcc2acb182538870d264d4c81f597f4e149cb6b464e08b27224f212fb0f36200248965e29c613b969ae996a23c10faa77702c1f0673aa079d696b8a893b338fe35222ae490950df088db7e443b28142e5895fff708528e82f1d594f67d19ac0de0085b9a346fe023f26142b5afbfa3adad9cf292f33c6e46792af278dc5e0e50dc280e461b8c85272820042cb2071bfccafae3669eff2424328115b981137fbee3dfc44adfc2e21ac12c4fa51312c99cb9207842b925306eac416b8147418175166fd31975ad27acd0d4d0035df073869418e8db1026e4545935eb8fb9252b4e17b4a4900d27741a542429a05bd287b08d569302bb2a518c736ed0f5ddc019914bcd7453707b7e4ac0b30281b21e99a5bcdefde614005dec8a2d0ab1c00a7f1e5cc0ab6ab4b72eeaa2296b063c646e216d031e0b0718dc03180ca7cf874eb6eb40c03e159e0b42c9f2e1624989cae20bc28bc05f980748901234300e0a9260a7844ce04dfdb8cc3be0f5e0f4598cafeb5deeb28bfb60d41943f5133043a948ab767647c5fda581c66e79795fc06ba8f5a76173c0048957463bb916fa234acce2359e6fd9afb0e035c6d0203ea2aa1e0ddf99125629bc0660cc06aa1426526be8482461e4c1de10f30800610556ae78462c2e0e42ba68aae63270357a995c188bd40b9a4393f29f4b0bb3170fae68bb3517dec00750948471068e53ffb748444d5b31fc2f2833fc9bb10b38090cb7fcb79552b8aef0b0bcc5c4bb8f8dae979cf145b71dc88c44a6df3ffe0b6911226146da529eda3f36900619ecb0e18616c87cd177d98bcf0a524384f51578a23f2761603abf99d5389292db32b84eb0cfa07348c39e72a725efd1d0c6e89f3b3b9eee7025e3bd5876dc493966765436d58548172e127bf36c09f4f9a2f19c23a7ece150341e025ebf2ff10009db925d4e0470e36e73ca8beed3340e9d24339e8feedcf70f729576e5f3f1d0fabdc536b9aa131d04acf246c3694ef035988cb0c5ddf22d2601c67d0d616b1ceaf56609531a71ff581135a139b440d656f396e5959c0be8db0f1961f7def06179de377eb3797f39dde1401c866ba6d3128e87ba518ed7d29ec562f95fcf00396a272b2c5e558e4a9142f0e937df2971674db5bb09cc9f0d8666f0fd21ae46ef180ec316aceba10717e94679bcb2a78987a5797ff32a6fbe3c3075ab79e2bd94530ff1765ef00970aa37cbf9bc41ac20d1437a9cd77392606c321cb48ef72aa6959b5d01d86203cf18faa7b856ec48caa2f3dd2a5e252836fa885a0294e4670d031cd56b1b666961f340949dac030288f46d13fb9aab1bce640c8eac79e38a9312abb5fddf27425f67379a1389e191731cfb3bb22b9d1cd05f36bf974527921061b24df1d565907889ae62ffc20b8e20749142d88de4139f77b7522162ce81e41ab08c1932dd6ab12a3443492cbd8b4b41d0face6d2897bd37a2a52a065f3e572c9b0d3be12d9ce7e99011e459b2f828b0066311e3f439b64c06455c8615f9d3843c57b917dbd959d0a555be52f6b479d5babd4ee100a11f3fe8aa8f96a27e10ca1af68da8478ec0e58de0bee26c064b59784f97fa96f91c0339496698b60c7ba8afc8c6220c13c215325e281e31d5f1c27c1adac8de5961b1de2289ab11579799fab67d0ce3a212a85a6e5844d4bd4e91d3e5a0d355d3c80b4de001571f290a0e7b4f50e4a51f840300f6fa85287a29307fe251c0c74de81c9d36844d1755bdee4f0622b4705549691e29353a837ccf8e9bf187738fefb8857d76a07f2ae94c5674b188cfd4c926e13a05cb427ddbaea217423163b25cef38ad0e06d3790fe38c3cce61f27850ad85f70d1dacecc3973f78419519464808c3134692553763f102bb2185c6b21bbe9c21257c798f824a6b14cbd150f479c1d96d3d79287e04c0d0c3b2284bf3a3cf8fb458035c611dd06f6b1c21f925a5c26c71291b93c252eae1f32d9423c6c9fdcacc4ad34a53dca4cb3905b2daed36aa7aa21c957156072cfa4cd2cd28c2ee8338436892e731f47b4669e833150f0ab439853e740362bf2c68f687c48e7ea0f4fefa20a214cdf981a4aef9f8b4a0714b694c4b37e52b1f0b11f03cf15975c7661513d7f8f0ea5252a1a75fea0f974969acb1d01ae84ba3df38a640489448d71a910d441adcb9d144ee71f827aaa3abc4ef8618a4a5d1ac2b9225437df7afc3762c03305c2cdb2e71e3bc07b4ee523fd48f0d30d68f60d7b7a8762086fd9acb7a9c2d43fbece736f128743a52386266910908545b261f7e4757546535421a18906a31fc8f0893c5b4bd2ea57e8743dbf803050441d180da00e7cda6d996bc0e10f91eba7746abceceee9c6340fb3756ef228debfd73fc1434c647561a5f46c812b2028ef41b579f78dca95b2f94814841e46228a08584ca8096cc1f9a26a8750bee9725d16dc27526ef68979090ced4aab059065591d6cef1e8caad1c69b15f575c2fcdb0a73054829968cc828ea0516d86ac0b223254a2fbecf0aa034f589d36cd4812627c8b3311d71768c8b18adc868eb48e4609942edd78f77400930dbceeb2dbc869bd8a43b88151d2fa0bb670e05166696647bc1188a5a27f21ca5320368bc51e1c473717dd15c2e55a84f205fa94d34953dbf711c9260a9d0426eb340a51a4286862131f48b7376284681335b2b235e29b501cf09ae0bb01d3d2ef61922428a0e36d170cf60fb47d029dfa8dc48494e1344a9dbeac582b04e53c59ace2ab4c1013752f53b0c99e64a818039b7e83244ef780fa329a047525a85d614d17e355398682336196dcc1de4a202c12a639f4c100b8cd10f52558512f9367a853f6223269cf4aeec7035e782b594e3e3da0017974af934e4e4e3316818728af150bb1a24e2c183047c6e661e97e98361cce237ee8e5c3e83eb034c78900f2f2102c3c1ebb26b3d42199cbf8d34b6d02f0625a7b2c65cdbcc5aee98874a2d2a2d5f55c52e6b37c0de698c179131cab1c414b9ffad9b2fcedc7553fecbfe503cb9e2623e45b6000cf56657b743c4c555807bbd7c7049c821caaf103242a0c02a3592deba9a5ec442f44f658c35da2982dc76e4237c76cdba735c71e75a2ef96bfd3c528d0cd41ff167eb96280cf89eb3ec9f69936656ea402a1d098309e78a051803a64609c761ae7a9de9ad35e3cba624e91ed8fe012a9aed041f023f9619be26ad616660fa6f951ae7abd90efa3a4c4ee3ce2fab5ab362eb1aef9ac7093719ffe1f0c4eeaf20ce04aa51324de76085717423a01166f496152b4eea7fb0863c6c768091113131d3f4f1615f0f75f7108275a4b6a7ce20aa6666810b4ad34311a66323f5e5544d2d0cf8fed5a9b43c107d9e95afb7c602e0bfad424ae177675d468efe80fdefc53fe4e38af0411c5ab3789c2eda44798d71e42a52b32902234ec4d41ca9c872a60b23344d65ed91300d76660fd47118d60a42e6f6e49f662890ec91fe52ccfdb0d8ccc6af89b7ed986208f70c7f0a199649ab0f000addaa7b23c2b5bd4d0bfafa9ea3dd2fd2455ea53c4426e395d97ce34c3d5c06adc0a817ccbe7dce9a685e3666a1cee06639dbcd354dd34aac1fa56c4972ce59aedf66cfbb1959f4c9e2d000b0c5441a71e2e28ce029815488c74b9c00d4fe67961028e2cd2a89b60ef00e3c49aca0c1e9c2f159777e2420382443aa55f90d067568d032f25feaf46f40751364c025837b5a21ddc33617b61eacc77f5ceb845f1fab7ae99dd98e0c7e22a5978b6c51110eee9aebdcd88af1c3503d60c09b792d7813a5043997ff328cc4aabf1b594e990f0a13500176f6f7484c5ec466b6d41b18e64daac33848232bcb045fd822eb6ec7ff006f410386ff9648145c59649e957ec36a0c95d75d1470126a8ae005bf50df5618f76835b6d8af38fb4741327fabf9c593fce049d56ebdfe9c80180766096b765ebb2bd540380121e18ec6b64083cee382504c370145748c6f61c1237a83fc3a00ba0a24b3e6cef9cdb860ae676eb02b6d73742a5ae893420329d58ac87765c0621d195c706212573565544e5528114c670ce7fe07cc39701d4082f036ddfa7ae9b50304eaea1e936f6655385e84420b19fbba77b21aa9a529dfb05fd78e94b6ba013df5394957c73a8e35d5ab39943b77dd916edd3efa71b1bf2ac52cf07db0ad2af972f27e5f8b4c4a82c8a0d8097c8eb41d3544009c4eaacb0de7608302204d94fc50f9f30f50540a4a37cc6bc111d6dbd8ae6119458aafaac4635dfa8936ebb6e5199ad157abc46a040fe8d14496ba069799230f4a595748c498b4d51f9125b832252b1853ea5702f51924f6d76f0a966be752e1543fdac3c8ef265702366c860fb300105230c8ee33cb187f06011c7280c252d72a858f0ee3c0cfd93dd52425470e22eb8b747cad01199101b48f01bd0e2fb3e689756524af254e8e66210ed884f355e92f6592bed6fbf45b0ec4fa00b23f6ff1a0acbb02151b95dbd0a4c9fdb988f4b89086cb35d894160010090abacdb16cf6fa0de99b82dbd21b6d3c2e581670f4a8312def03a0ab6b52df2dbea684f1e9d14cf50a335df663bcc1f10bac9b2d3dfca3b5cabd5bbb6cda2e8177e606bb31040412a4e4f8132cca5c235386db36f62a6cf55c995facabbe939bfa7a650cdc8b9ea751bb2cd465405fd85891625fc240d026f72465daa342dbc6a087d27746e3337449c244d8c167749f1ff6b3b850c7794963987e2331ff4ae50ced1d7ea0df79b6d9b28a80fd836b413506443a909251c72b208affb09557a4bbaaf3a2bf19b89f193610bbb67254ec7c81dd0bbb09ec7772af71b6b2022a10ecc95ac80623803909f04017d2fb7bf8d1f646a07db064e0c0d2a78caf2718fd24abe9ea22666356af8b141c9dc51210e57675367e1303afc191b52f53f6d3b6db388f5e142ff9becf4552647ce3306aa5390f53c90ad10a71f300ee800e55f585c45fa7f608f438d28f735e4fa6dd343ab8a9a5edd0b1f3b831864459972800d3eb068a108e2d2aabc20060ae40dc36d0f45f8b2da67795078f8f0560ce735b4e0350654468d6f8a26899fb4920c350448bbb430300dced67036a821218b27cd43dcdf9a16b25eee0edd43684e3a57425c8b69535f59c1650eafbb8c3a1de3ebc3c1417695abd1927dc9291c3bea52c8991d3a2caea80b2efbd2cbc4baac57587994ff29c2a0c47d45ad2094c2e82476bf3ade6502cda7116ef3742079b7a71fdd8d6eb54ec7295d75d710491f6781709e7038206029f4f7281753dc82041d01cb511bfb749e72155c01a358be797e924b251643bc6076a962e72c03cfff2874fd1d673156923d22b36c4c2ebdff53c3573002f42d3092a8169d39b3cd3d85b4fe1174e43b8cbc6e2b8e50a1ebf3c8d447c1b750967e30e462a063bc3a274a51535ea1426caa48842a1db76a6ca6721e350073a7dd147ae53fe3415f1dabc8adee06f69ad9a03289b5159afe9906f4d6c81dd2db097f81161e07d53ea43060dc3d8caaea340674bdceab851daf85b238791f3fe2e807c7db579a2ccaa8ba952031c41e357592e5a0bca3e68c2917f8c216b898c29855ea8d305297206d75362256d3dac63d7f5db7f851d1e17208404b785456485ddcd6afb043354193bf8462d38028ee78db69a98ea51595c78a3ee7372b319cbe7cd242ae6104cee8983e941dd9cc6e050e2a5433ac70d1e62b0127e32f20b9cf3015ebd33418cd40ff4d7e8a0e2961797b6474dfaf24917dbe6b9690e8eb91e66faa5e5d43dcc2c93379c034fcae554eadfe29562ff5b3286b984f10f7a7ece091fba1b4728cb79b6d2e2e8094f07942c532be7ab8d740446e2f098ea1b18314da807dd408267b1622131c3164a9b292ef0a6b53049c90d2607b95c3b039a84d9c9b03dfec85f338cec7cbafa8725d716d3b11b730ddc3e9e64436754b153e2189dc28c2c3aa40e3f63fe0cba1868abf76a9b23499d4e6c11415cc1e9a16845aa649e8f46680a295a905b8b1a77be0891ea2d35a0b274dc7a60845d3ed65eabad3705d9ca7e8637a09ccf8e1b5311ac8d1bacbd3042e461946d7f6cf3dba669f9caf0e26abac59dbae563f596a45a1a2dc0aff859cd4dd557a24d6c9ad6d4d58372ab053af53f38874ed788bae2fcd5e067dcc6f9f1f796cd0e0e16d44138fb5d0916617e0db92bbc99adff96f100d73e84805547d69b3fd13423ba3ca478ce591264b71ba0d704d8587ff5e77c785205340b93918e343389905af4d34a7e4cafeba5e040569c99c612a02d5966c8ea38970eabafc90be094b7140336adb65bd8f927fb08429129e380120cd011b96d02482876e345d3615e1173e0292c7cbfa4a9b3702d905a69b61717d148014d24279cb54146b29ed634c1409e11deb0eccdb5cd9e80396750a838f88b146d607c90207a0b11bd13bbf90df01424ce1a1d60d218783c52f731428cb69edd3c5cb2f66c127d6596fa9a3de1ab8983c7685fc4f6047bbe81d6c4348e7a884f060829c19e0a2a5436d8fdab3c3ab54c843aabcec4d71f5414feb476a92e655d56de4e647da6c2b578fa8c4c9d56a9169cc600eecb7e6888039127d5e012ffed298edb4de0894e447ec8c12437e0cb5efe0cc6f930e64a2086071ee64b4812ce00948ea0dcde1058c091f6fc7d80b60559b586295cd33c41079ba4cc05dd00d0a083f5f3b332feabaa24dac33e554ff8637617987cd1ecb841f8ed26ec07bd864332a5d91b5e526ccd512b98b9d217effb3edabfee0b5d0f9d980511708fb68fced16f84d9dc6d70fcb5474b130eff9c75c40d0de7fd113d1cd15f2847375d55fd750741854bfcccbefec282d721cb9100125e1dfdba60b5b85d977c0ec189fa66be7c7f96b181a4fc17fe03570d982c95515d30216b2f6d387527cb3b07f11d0d8827bdb0e9599d38956ade70a27d0414759bec5818dfd19623d55d0a96b03b5817aecd3ff9fd64f2e6f634365965f69cd45b970c9b29b76c9b2b2f04544a3e076b69ef4772d6d3e9bda3f207fb9ecd399f7c7fd2e26166810f0d049c97d42785d7d2f065589c36e9a2051bf0da8dac03c3df9f4073c39e1175c706fad15eb93eb15ff5a8e8f031962dd9ba1ff5ae809bc89f47b0b0229f956a459a2cfa91ab51baacdff288e28fe88969b235977b51026430e300da1e9b702295097059d8232a86a82f9a06e53100ec16add8c5bdb587e62d3c9b89b308751d137a04197e1e54579d8de70d15ef91c8fbaf0aad12d423016f022b4d2efba6de73416e572f8fe5738fb9acf47e01d6517528f6da584eb392525a44427aec6bca029a8e74f89b38d427b97dd52e449410a9ee84d0bb8788225896db58239e188d87e1ec78cd5b59d6582a02186065c8a89a2a15ac0176329c3b60f11b4df96ee0331770554a945f883bd3ba2c0b165e78c9cd293d210b9b40c10bb3ccf4133918a43b82ae1402b1f5a6ed10e173bf484b228b37041bdbad30b61a827d658e21520ce418b1f8040631d5a7bed8f03489232c469a9c0ee56dd8a3aac0b02dc4180f79bf85c16ca8b6530b081ea37fe81cc832600d2e0c44eee644b11154fbef7aaa87060b3c301faf1c58c7641e7bbb62381f3f92b7a6050de3d5bf7c4e290d4fa52221e2f0085db1f983bdf3586178277855c86e882f0305b780114971b59f3ab6440325b5c0540ec9cd4cb50f8a42f1b52bd528c5e42b4b2d727e929667b74339d1137b340192c673eddcf158412be4d6c42568cba68d0bfd28c867606b46e5c21d0df2fcabe4d7b86f067bd8a2c2c1a844e8bc699cefbe35559a1ba1456730af7b08952b2c4baf1bc5de0c866ca143fdf7f3dccc33df591e07174f535cc163b857b264d105ab232af05bdcd59707a31f2a86efac40cfc369f8fb8437ac8b2aef78111015161447c3eeb7af1c69abca222e284c48e5124681c23c4d2067a0b9c751d59ea92cb1a21ee559f354ae7e5e00385ff1e4e34de94292323d181d0dc017d5815b1c3ab71bc41c98fd18ea052a020f7bcdbf5e2072577bd4725929603eda4ed0b12ac33637e5df803014b04a03f4eade7fb0e8b995f6ce3caec76a04b9cf8b8eadb63dda44e6458430e5853d0ba0daa672298990fd99b3584006071b6de1c49a62a6e43d81ddd37e144733b1a636aad011ad38fe015e0f58a1b193e3dc1f93b61a7f70e73f1369805cc881c41263b39a0c7fd4ea84bd594c6b6d2ef50b274b77fbe0c8bee4620648d7da04f2d1335a3ceb85913e234e4d4721cc3305a24614e1d764ee2d1bde2bdd1a74f0133ac3c2411ca384e7af70488f13ca505a3c1ff0a9a2b8c7a0691a830b9a39a71bc08e14a71574ce87735a80436c4bb3c846b8bd1787e8a2a43aee082152a020003230b49048705dcb30c5367a0f8947b64afa46c8e1f92bcd51b3477d7269fe031a01cc0861fbd2ba2dc5d26f1d7f1ca14e0afb086cbcccf215e6176343f3c09178c94afd0e2bb72892c2389ae417ba4f0984663a89b187c2f1f4c35de2a359bdb7fa8bab0ea26861d6563e8b2972e109ae1d5d62465146a9314489c87f5714283a4a1dea17ad1b39f26d1669a495b1211643b61a4b79702a2cb78966621486b4a278926f309407190602ccf305da45921cc41fa2719ad1f8401602600465b973256513fd709a3cf988596e9e5d28c799dab8a233c655fa82a3a5598c1ed6e60f2e0e0b6e7da3cd9893c019f48518f75c2e8cfcc16924584a8261633d0f56d504f88333b4542772a7b183f44066894164e7f02f34f6bc8c49cec2622490c3470bf96f64828f41585485ed567b48249ab20385a45a170cbe06157451c23e6da01c8dbd096ba44d4da2fce179a4448d44583d77da6c75112eebca4d3fe041ef455d445138e403c4e08193627313a96457a812b5a827e8a082c1323a211105769bd64426445e3dae16cf54e2644028dd9822638d75db7d6f364b625f37a2611d21106d1db725cea0913551d88dc0345f1ab64b3010b0e6d2839e48ca3715fee7c54caddd3a0d857c90edd1cd83dfb98fa7492c1ecc953cd51b656f55a8efbb5ba1e0d8039e1a22235bce5a50363f7806920dc4ccc5cd868f6213c3d04e3af4845d6b7e14cbf4937cd940f1061fa83166218437b8d59411038431423fb239929b21aa6cc5a714efbedd91596c0f54b61c00760f0dc89cd3b7945e3b1cbadd927375d1d5ff5390ec7fdb2d8e7f2ed0e7a0a6f3872309c782c143e8d154406786cdee7f0c5081981c5a7019a273fccfc348e7a27bf17dce47775f828e11f5329191f8e0c2e266437264afdaf9a6c606bd1e7c14d477f5f99fb3f07d21289ddd8b64f92964ba1b494c1fcdb13a507a6feaf13b7b833f57ff4e9a93aa837100648fda3dd086f9519d33f9c3e9bfca304fd13862514f122ebd5b27850ce148ed7fcd7fe26dec7d62ab0842d12e29b43caeae3210a3c74952f4ae6a6020566fe5b1a453505523da174503b10a0aa8552e6bfda76855baf80520c32ff87b9faa04ddd32ffdcf9ec19f1a90c5790ceabb5f4dae28d7f7103496d6a05cdbdee416136f9a6210e640d9c5e7c181cd6c055dd8871d997810768574ec30ca2cd90edca362b5b5710f5ed7fa2f5798ef5d0c39aa16b44fb8288c97e745fd16b704d95a61c80d32e6c63029913839511b150d56389982f34e9b7456306d915b2a079da0cfddee05dc6627372a43a668407b1e7fdd6feb339951ba4330f07b64c664e7c7391733c27cbe392604950665b4eb095b2f397ad024974a42ace9101e721b304e9efda87c282b6eea92148f3267b826090c35fea27ff8928804710a8e952ea30d8d2062b244369c559e39722b5848786fdd40173846972a875fdc0af1f28366d52befa41027a853356bc954af34cd96c3977cabdf0533a11116d23185a3c1dde7820c8ee0a8b6286a84e647c741051e4600a8b4b78d369132a19c2e6c564f077b8dd2d9351b0cecf258359c0fb325ac59072984390dd7631bbe2ca301626ec9020b35512f30770cc4b60871d6bad601cc0d42f8bdb0c8b58ce0becc789c139145e3a9a400545a759aabe5c9658274296e90d9acd772d7882d5e742a8562106d2dd92c8c94ed1783c11dd4f6fd67dc7fff3b4ae37a1cd52339baaa1b416861825c1ee0cc7058984b4b2686282018c63ee212375b0d9b1837146c0848b0d012f74007f2579df76759464e01b4f87eee62996768cd0d5d09237dd3fcdd5bb8a157f40796ccfc8c7310716d08500163f0ec68da1e68aa121b126af34844125ec267e120d05395f70bc94c80bd65caf0313e2006f985ff58a88284b4d2cd27edc26358c1bb658681715476a6a39de6ae9d776620d0a586634eead9682806556177a58b66fa38614bddf002e635dd70cf8583f45ce0067a2bd7052dba05db9a2e885419836c5d001e803e63da2cb737a02b144306a8b1536fd0062fd7a1d7e1860b0b22379afd95da179fbfc17892505e195a2b7c7dbf4f82f9f52f126a4b4d43031478e37586e38b2c9c41570b3cff6e8ba826673f421a8d794096bf3fbeab69732a4709536ba4d24e2c0e94864828b6e47de2fc3741d18d2d348980abb55bf357a55dab40f0a47a0e23fe93d43841522251493c1cb571db022c95020971539841eff989d4ec8896e881cb02b488ef58beb4b415260fbf37e1047d352d84c974d5909915d42a78f1af65aef06f7cd293f53f4591e5ce080a40a2c85f0e1938dd0d20f85686b3ae376dd878cd57ba802787cda0d2f6c66f7c8aba4180ad3fc10b4930b79fe15e4dd04615f5506ec9d49fd06737469051cc66251caad8d967aecc5461bafb2b65747d2a06ea0c07a7be7b4a6a00c0299bc215de4bf878922d5d86ce0c36314f0a925e1742ee5a5e50e48ad42442e4d52933fe1ec62d2166916243773ec38062fba1177d652866ccb6400d24e3e9e3eadf0485e384e592b3e4ed6e7374e4449fbc42117723f59b103ea5f113898939f84865e2776e386e3dad4ebfb91c0a5175673318049fb847e0d24274109f9d28554d26287db6f73e703676f85617cabf89f54f50ed02ee11b7e50368906ea7b019b5ae54c73777df00180d13581a51d942a7e918beeae66750b0290a305dd7574f2e2cccbfacc0261191004a9f5436f28d16c675997417ff5ec11523cb785fbcdb271c7edd1a5777ff96e5238a6057655e430835a26717a56a346409f40dd2abb5c068c8c31f50e18518c9c6ff00d98ca121731239569925be34c28253e49966c4fd12506451ca4aa168626b475249bfb49e5faa848435b4e62016780ab20dcb40c662a9352df51f487d7df88401dd396827afb804113dac775ffc8b85755c0d62259fec8c002d338a8c54968620a3f991e0cfa2faf275eaa037c1bc0b3d87db36baf375a2dc1c536bd5018de5affe6eb986e85970272b47e3e8130f208c1aaf68ff0ec3036bc2a538760de1cca07a3559b6bbd0bcf1efbd0e980fd61026086227cc9cb3521a5e32d70aa9463a3168e24385b2a8016d92e25372db08d8af3dd66dd97a53a8660872e096e69344b7057157dfd165992996d8a805e6948b615b1546615b9795dd58253f5bb77b05fb72fa8d9278b8e697abe049fa41fef3d74b23be7e61b3df7ef5006a9e2885308a9f6be472553f1c382379c322ca5dc813de0a0e73b844ad49af9447d6893a472d68cf2a542afb57495d8a12e700ef669132a4156645c8c7f5723fa25acb88999cc9da54fed4ba959622febdc106e9329fcd2c830cd900d627875b54aac8b9ae82e9087ba650bb6f96315d31ad4820762eb4605c6f265babd848b012bcd2d54982c9cf493d9051e1e6b623c305772e79342f9d78a28333e9dfa7b1389d5bf2de3942695731745bf61306e9ca8746dc753163be2c122b38dd35d668bce1a384e89526d0e982859e47ee3745de050e392e498fe2aaaac58f64a283b0d14289867c4ab1429cb03277012ae44ccaa1801a002920e8447da4cc75f90293a76c9887a1a63df24631c4134f83d3254be0235333479c788ac2da5677b16ec37160ce28eae5aa29fe4b08e3b961f8e01d53a218e5d74b15625b01c9274ad6abbf41d7d549949d692696c27b2c2c1519ed5074b337f8f01d6ac124b9edff68ec859fce1afb7dcdb74d70e9a7c45e8007a3a7487e28aee5b7ec98853a1a63a1769c751ac83807564848280a6671cf6b59d9c6d6a81236a51f6c9b727fbd59459a3280195abcb044339183f3cfe9dc4e662719ec1435c183bcae1735f32b3f554324eca2cc8483b0cd6e1a7ed7990cc54bdc4c60999ac8578c4be2e0692ccc13a2ec605826cafab1f3d2d9ae65028737d806a693ec5f61a4129f6718003b33f0ba540acca9c7758459b92cfa152c0ec1ef190e3f9d38877795da92b6e420000fa3a9e250c29e019020e11d1505440da8b984b423f7f5bb2c065bf3471bdc7c39f38e54ac860a4882612bd1641b6a575ef726a97ba3919f6ae1fa430638980e1d159995c692741ebc578c59a1245105fc6353c8eb78efc69e68a414aff58ad58a60a6df8d277a24a7b7e801ca7f519a51e0c6f0dfd4300e09ceb7ef7bdbcb1387e950c11fe816299658fe5d768d5bc1aa10f752f0b08f8ad4c26706dfa3a88eaf42f0aefe0a2365341c3e49a098dba6dc941e34453501bb2444c153988cd92431ea5bd14f0847e46548357d4d5a9f7c81cff85f5d333dd100444764c350f1323085df7133f9856d61fcf62d3e6d4ee7b0bddc5c396685c0085e95c883aeb0e7693161485c6a1de7aa1746ce90d41906a2dfb2a805aa11a7ba9c51847e8006823b4a353e31cf9937d05b7bb0288e1274fe4905ca93d1600306d5abcbd05094a870d2ed9a5610cca1bf302ba18f681e8653e702926449c31a3780591df23875d9a05769c6d0fefb01d0bfe02644861ad936a9d73124206bf1c10ffa4a91d4696b7cff4a29095f3ea59a268bd517a9018b012d040f9f196a53b160ce58f24aa35faa0b51741ab3fa912763ea635dc7086de009094b7f54d90b418b45ed42d6fafebeb6e33032b23f8756d2336a4fdfebcbf00787e3281281d9098196dcfe7c2968831e1a658c0d00b5caf1597924eb89dce3d665f911fb545b9f865ba50d43b032234b0679321f02dab339f05ecbb14916de3c45eaa99d497a0b2ba6722cbed120e3bd412f7ea142bbb46cda914dd943484f26cee8f0158dad96044ad9fbbeb22d6cdeda283498437518e25d84cb828cc216071a8c516209989fac0018d486eecbce6828ab2722667498b488f3d9a2ce56d520d99ddcc4a22d6500da599c51212022a57cb66fb96459e4ae096a9983c3a92280d8af558dac814c79c7907d13caed401a7e7c15ea1c1dc4485b7a98381df9309e68a90c29dba25229b455ebb35da69d349a9d5bc32e2219f27aef16076a26654ae0f6b4fc4a4bab9071645ef811617c39970c2a3621551a961655e3053d9fbb1776f0af7f012f8e3a24b5318d4ca9db9fa6cec15d0870435796e7872632468bc97871d16a1f583240aff0e98d3a47e0481019029db92354572ec250d5f70b0c7c65c104894111b77bd73a08c5bf679e7e042c1a3d06244f00f0553bee608a530d5431d391d6b51cd1ef680534f7b7ec50e306241cb439fc23cf01828eb3f56349bdf72253dfd68f4f3a867983519c3b892aaa2f148b8abc5a34cf5a96f844a333960527a84bc1dadc6324f5bce3d8d2d7d18aa2b615c49d7d904db9b43eac0f9f3e2b82b7f9cfa3622a71239152d0181b3494ec87aa0f6580a61f1c16c32047ea7c6830f9f1b5500b6f4a730e89c0646a99d44d180bd66e2d8322f93176bb4636f818ddb885916723328e1fc3a443175595ba0cb70c5c95ee0aab13f222e395e502f7dad9fe27cd21f4f3b8e20b6ca449eb9cbc2e39d5051046c2ca889eb6fd0a3324334c92d466cf20ed323f5c39a6a7eee1b50479278f62a06dcfd8d5dc8970aa0909785e8df3d4eda8db0d81c4085b73236f0a69598643b3b85da4ebdc1becfd2e940407f566e5671d912ed20c05dea26e9e4813c70b01e47f0448c4f662af191c815ff038d962571283ff044515e4b7644d317cead8fc5bf7e64038036a22c902874157a9fb0869b7e96e8a513db74ecdfdb1f5be910e78824b32f8c176364353cd1af8cbc8365725df9025cdd8aef0279bca95d3023ece6da856c71adfb944527105d24678f34c4e7fbd68bb937986ec810f5beecc47d16e4f3ba845d9c4d813a967faf982e466463ad0c411757be02111d38c2da9840266e1f4b24fcb53635ab3380c4479084faca50504e161c14e8e83542f50f59e048fc0e7b287388ce76f3861145f1c0e528b011972b5ad7fa3819997f15dd603d24790e7b2430e86d535dcf7c460d416239bc4695e1b120275cde910676f8e59756a14a70c711355a43e1c9c98c77a40394d9bf6e3165591a8c0d1881955c352335007a1b84bb041f7e0a96d595a314c941b1830fdbe0bbc8cf69d412de28753900e2273c5f0543e63a0fc358ecbe6ed78cdb74301dd7c782be794e019fee90d5cb136c4bc9bf91dbd6a0717b085d75de9f899c57e4eb84110ce6436f59fe0dbc02cf6832e3e550c0fe1660d58ed3cd70d7d5f92134d8eca6648fa51aad0a382370e98bdfc9649f1da0059a15278ecb031f061f197e603e6958f635516745f97beb872c1ff0232a3a025583dd0d3dd083b285dedeb9a170bfa78ed86fbc6f3655dca78a7322cd1350e9cbc4ae85b5e0400d23a0a644583e8f69c41c6f0a8153b2eb7d2b8f01e644f30a219ffa0f56476c0f449f25df6961331092c487fc25b6907af81575989ea8af50b873112ce87558d59b4555668ed16d7969043b590590133330847ea9e4cc2de0a49a2f18f7a48b9c6ae631aea88f6d9d288c97675d0173728321a0af9d7dd7bbe9ad1657b36a0965659510bc48f29ba5d810e57c3832e02cc3f840776430aa70e7041ad5842a41bf6d7ff6c6d9547f1779d81ae9620de5d90ad99e8415a520c8ac4dbc47d9a8514a13268875c4d9aafbf44a1adbfca594e81993dfe2e90999ee54dbdb2973adb2eba8c726aa9b1a1866fba7322dff09a35015678b0c7f60f2c661193df7e05875557e0c6c3975ff80eabc1a492698650169eed2e4d0a3f176e315d624bd5b83fdcfcea3af31e8da12e465370849d6845b8b5e2bd5dd61cdf8f1a899084469e71ff23e65d84b6a8a273c6364419ef592d46b7d15a95fdda995c18c32b7b6b83619c11801c194abbe7a8cb7d9ac40057e5469c5fcf7cd686fe072c6e17dced5c6f6edd90f6aec07b9d255b1ab3be89f2478c142f739a505eeebd6aa0662254a66184ac81fe01eb6e4af8ce533730af251d48eff136a6dc4525ed00018e89104ac24c9493cbbb18b8567a3202266622c5a608e3da40711b882dbc858ffba598cb8ccf7ac881e9db10ac30476d6c08a9c46037ca0209e378dce24feace996aa89dd7747a9436fa191e4f1b9888d7d9e0392e6b04387ba876ce8cb2c1c8769b66c3423a37d62a164a962b6ca8567612d1d62a5ceb6ca827b4a3c1cf578af4fd8f407aad46b4e8bd6a8cf15835642c6d27837b68600a072559139d27136d2b640e9d97ff8dc61590f9f92002d061a4ea7fb63aab2683b4d9d4e02cc9764b80dd0afda68409d0906ca4064c29f778c1bb584a1ea315969e612c2a98724bf33553df9fd7da948d5bcbf4a698ea6f76575918a6c70c926edab34c2d709feba4645a19877bf2fee0fb7e63800e361a92a70720b0f447b5a5197f25e7e75680668208cdf4a38034285d8fa024291c5060c2d58f4f4008580b68a6e8e63d206db9d530915bc349266f135e5d6a571a3298f65471e4aa92b3bd960f3ff674321443ca5840781f2c8c8678d7ef7532533a0ee8bd383afe6aa778fea819670a46021dc017617c6c3ba5dbc51c20bd30200fbf5281bd9398d32e60bca40600821dcd517da3f31ca3774289cc0ff3e793ff10c2e4e36119feabceea13e6866855268721d106ec1853308c70a31237bf1871a4e1004afe729c98065ea748e413b668f462b5c08b0644941084287d639acf6befe4b01508e34b0e76d4558db9a72ca8a6d298d70f2367ac439ee35bcdad7c1be30275258182d2c39706c560ce25918e27a8f152ea68cf5e0113cddb2131cb7561a1fbf7006af08ec82a8feca634360f6582b639e21abb60ac029f626473c0c2fe85bcec34b6258ab02a74fc8add5a3b7b8e40f827bab550e23535a99f1895f023b3d1b8b2f6734f5ced1ebb25ae853c9f43da0f0ef706d6acac2d66f90ea2676f0081c23a48e55962caf5dace9381a4ad505c8db535f24c5afe1e4273f4fd69826383761279a65a3e7e8c853cdf76e062a394ccf8315e97bc315862b29b5a57d494ebd7fe8157037882ebc81522236c126778f1370bd55f6384a9d214132149c8cc7bbdd74bdabf8e2edfbd40e4fab8cd6062c4508ba6c8a30796b1249d67df9abd70391c103c734a5ee775a6c2c06a9bbdbdbb90602c08a66f54098cfdd7470ada3c4b29ce379e94866d5dbfdc7c94056761f6c37942fa54213cb0e136cb46d92e3ce62b2c46c1ed091e53ddabf34af791880fe5090de899810d5b0cdd38786e8b2390053ab4ef473313c2e1bcc5e26f0f2aa0dcff88ce8825d5ff0c654ed2fcba4e00af9d92c6d1e632c0f165e8fa90d33a0a17f07283516059ec66b15e9aa9d42a1a3be0d9260dc55ed7c0bdbfd181fb0cf64e1b34be1b22605464da517754d36ecd7e4b5e3d8e4a64d14dc985cff360aec62838b83afb1d1dfdc9cfe95faaef7e33ce84a64cde95e4b0d9b04804d326bccb107a78d718a24a42c9cd905d2569d77a6defe71a4531b0c7f1a9a8032a80d10cd9e993245e67ccac409a5699a76d11041981ac8aaeb5a7b4afc8521c95129fb2ce52fecd241fdfc388d7512ff8b6dde782926a84497c0a64adc4c033ad4250aae607193a7bf2e09509a834429623c263bd7bda42e593738eede569e52fdc1a00064c3830e3eaebb849591280a778ec91434704177dc01477a4929476d8dc441c26fc5a46cce62e46a7c40dc5c8a5cfb699d22ea11093364f643adbcb65083602d30feac1f36564e4c978158e8d276178c944c74df9b3616c6cf5f4c1e462093215e2f187ea40be487bf9872098c71942f0dc6183c8c9bf2409092902d6f7ce022da7a4c961d86154824715c7093dbba2751a8c0373743e3ba8b75865b301d883e13e981ceb98e7e5c7b8fcaf818f1089c2a97edc8368092ca97f2a2402d69c29a0ef87e9cf27cc7d9c6de28cd42ce296e8f14bcf81ab2d5a03550b4970f889214cc0f1d44e2f75d039742b3f0a04a7a7215465c61ad8f903c710e0e3f82664658c20d66637bd13ac6b05fc03ae465038a4232f32f4565f80f2e60a8c84b345f02729c2c4fb358df3a358ca151954493a05f441685d789dfeb557632e4bdedd0e186c0bee1189e0af67bcf219626a8d735f0a750f011c1b4757dc6843ca267499523f4162fff220017c5a107139145d1c7bfb8727d203d5c347cddb82da37b8c9e42a1668fd49803c72413e593528bb3c8d94f6a55bf303ccb15f49655dda3829a2dd646a0a09b9f9843583d716e5e452353864362a85c0b85749712f5c15b1f7db5961625244a6b6922b976ab073a71f1d1b3a149caabe7be811bae7abe30866e09190b82ad45b71b7249981c1d4e2ab6607cb9d2fa6186cecbf85e5af6355031073c1c52064b8e94011294015995114bfc68d5edb57b425957d2062fcae861f40031f7c9f8cfcfac14c1b3293f2b2da1f7bc51262560807071f78bc4ae51a66a36a943cd50068e9e45a3cba88fdd076cce5efc2d67f18229f6a860d1458a71c1197b5982d30604033c0ebe220d540023e69ec5a8fda71520458af1b86ac4a72539bb449dd69037462abc21231e9a44dd9aec62db448861c6dc3d6def63c3d87d64a33aa042141915d913826f7009446909bef2a1d692d2a526c7398eeb38233ce2fe0894715f5bde6d6fb9910bfd1d935de27fad34c79263889aa34d2fc4b41d08aaeb92686187326536097aa75c125a895395408b904dbb9fa14a56b56366e206dc74f69ff79463d8e1a6e17fe90ae331288aafe7c996477398b84bed66fd4adc7279c273e834ddc28776608fdcbed5b49d3bd79407a5603dc06910f7b6f112b307a1e79730c549d45813b87e4cc752009c2894c3d282dd77842b2a7a9ce28e93a41a844517e84bc9c2c0156a62abd1d82d65d563c86215ede3c6d608af22aeb652f0b4c08e9d3719de91be896c1fcc7d1eb919ea92eb9122ae6e52393d5a60902d0798f04c4cf8d9d7096e9ebcb0a672b14c5309c3d70f1219d93f65254cbd7fc466f43e7c63b30c5bac04f3396f52038847ac84ee29af5e0bedc63751b97eaebb472aed29b5b2fa06d5f368f0d1dd760da32e8bab5249aeb7dd46d9036938189f80abbb8bd4eed5be6bf81a0fd82a1156badb254cf1bc91deb176e60f5534e6fb1bc4326bcbd3f8eb6efdaf04af17b5fc6912d87fc1036216e8aec8b335c6cd94a7824182baa132c236baec12879f4b4da5e525b14100a18f0fa2df9d4d83eafbc2c3b9f11e64a0ba9389d33bdda39e3f8e4fb93548dd3399841d131de8d7c4fd64381fa6ac6a399379136e67c514f089677d7b0616720cf6013c946f18dcd580cd2e6f763cf379ce8d078ed5edda5029cb08581c41ac7c86d38cfa4e9dd7967516e5b4d701f0e30d6dfca4aa1ba4fea29ec5c2c004db09454dcddf6cd30db86d400539258421f12b3e264152528b23f6de81516a4223683e210a2df356dc497a3fa8f940fe7bb95a9414aabb19d3b087a2c7bdcb27914328d145099294983a3dd6b7cf0fe54224ddf13440b3f832a285fbadbb00a97327778e86ba064527abe190ec662e4c50bb62db40713770e2769611e87b00de9f2bc14cb836dc12b6bbb065e377f066b7fc2ca1045fddae6dcf5580b2e03cb641c7a54938c4c27ad006ede700d31220eb0c7ae999d8838afd8fd7aca2248d434496ad8a9241cf3bfd577cf76416fe339dbd5db61a440c3f07dca6f1584f8717f410b33b2861f0bdb7a274eab96f033e37be249922f3013020154e7f0c80e07156fceb29a2f2d4e22093dc0395bd0a782cd1271e0c962a08f7dc270658d9b1bafff503a520a8173cda00b928abc7a58ffc8b7c991b13356e05576bfca47282995e3be542ed3cbbb2333418d8a56000b60b09ad7ba4ae299308c475d0068a968fdb09812438a7c558291a83d9238aaccb2d772da145d86b01e83dd57244165d80e5f340d478fcd251f4c52c0dfc42881a57733120706dbd442b26b29ade15e88cef65f046cc7d7cb5d02f040ddba3ff524015a8822ecec7fd5e1030ed2d9ee73a96f7f54c04fe9e0c13d81c9c2fab43caf14e8c9fb1226778ebd0f358116bf00ec6c7f4b34e974a1ff2e97b7ca657ee0a2acd100c09f99c59e694f630cf9617cbe640f12fddc83ff4109ac11303b038d47c0e797b389a0b0d7e1e61644d3e2ef9c0585826a3812e72b7f89a72d3a6042315cc34f817d96afa72b01464bb3933486632af4c2e8eb8308acc9b5e378aaf4f06a7907ec002e7df89da307b2852eb2f89b7c17cd09e69f61d93ca1afccf1af5a3fbdd9e4a7dc59067570436891079ba481bb302f1a5addc76b7ac3fc8a0fc5dc32e830897938d310247505bf512f8105ad5fed342542241b9e718b4f2e50120f4247d9ffe56305f0767e91fc29b67cf8b981903cec26741c53c1f281bb68c06533efb80130725b178f212b16362bfc95bdce21381488143838d713c2d418ec9018b86e34348ecef9d1f2ea472b792e6217482fd3e45944ce82486bc8b50f5756e5f206b3a81df82f63e93797c16d7c3987b9ae33b955cb5d843789c4ab53f88de8d1ee6505f87f0de61bcc0d04e9ba0762ad01c75082d5f3c7f55cf20ed71870e21c43ea2b36b3f08ab0d6158a1f9595701463b8f57990357cb9aa5f29b6f55704b761af489da5714b5a78d18016fb6b8bd132ec062d59b23582122f31439284200af2d310646ae81aca43b3643a1b70443fa6eec3795a6628250f7e0b2e286080317a885789009124a47ca8c07777aad0546fb00522700d0ac986df77ae2a70353e85860d6c1bde98e6d11dc6c133ea7373ee099b11d0569941b6b3c46d646881b1b0a1f61cc337cab6b3816918ce597445511322d602bbc7c7343dd6c81ad08bab39e174f87980040989f9092ef57610dcc0b2e5e5e136038f8019de5e017f96d710baa4a8ecfd58c7c77611c93b95c4c6fdda237a744f85f8efc85fef24be6b903695c14cf8051ea758c06fcfd920d430c06dfe2d7611173b5deae4347dda5a7c07c0d36de2540f52fbd5b3f73486ac10641af193f6bcdb582a3801a6e7517b1097f04af9e2f55d6a9418ab071351529fe6e173337dc68195663d99c726a5cbc73ec54c4050b2d153bf4c39d44da1fba2d383421548f7c4a4986ffa7d6a5e3d877460e1a1d382f131b778df8e1e9c133be3932dec33cab34949ed55c5f861144c7601b746058aad6a37904b8bef4070c22c979afe702473294f4b9881e99bc7797af61ed5220cceeb942dd50800d6ec63501df07eec51012c78f5107872663b1639ebcbf0095aaae82893b62e544296dea81114de0c324927ba70288d3d97a0dea15827c6d9c68e837cb8a0037e8394a95b5ac8577e0c2111180ef10ec2b5347250771b8b83a5dfc9665b0e04704ca10312fe17fc644340ff860179865c6c7e5216ae2f41d0bca924065f70b9c06beee75e1412b40bcae0d948e2f3ac21f898af12183efe71693272c2b71b23263f64479124e1146e6cbb1806c416452077091eeeb7b5862556b2506b39ef1c4dfca720733468779112ab806160d349b4462fad5cf75e7f1024c47e549da4050e7e9428384d31edc596a7440a9ac4aef3d301bfa20252c9e790f1e7658a2548d55dd034bdc5e03eb89523de957eb60b188f956890f743aa84f548af2ce5603fb421ecb4ad8d5e54b7aaafc58521aaa787a2e659179b40cb40c08f36c26f49665935156d76ee0757cce29c05f42697a6152396a6689e6be9e9660bc0ab81e4ce7bf397b96b50414e716f3995903f70763ae1a46a094be184e411bb4be85bcdc0b2b08bf840f3428e0a493314a54fdce596a283c9445a33afc180dce42468616e0bd7bc6568b8c1d6c1b7ed5d3f73f4a6a30d11fde9e5ccabfe9203cd79c6d284348b95b88a47a95cf505fb15389ec3fa438153d3a45e7fcffc864088ef5946fd89535c63eaa79bb379f604284bedf446eb93db6f991b5065a282f6987f671326bf33c462ac68475a780476472d77dc9b7e4cda81dd4e97409a07bc43f2e137f99713dbd7d119d48b3163f0d1a7c2558d30618b992317da5c508f14af2a570e613f21e0204171340e8835e389092fa9b7a6e5b470c196cb3907e9ecff68754c043d463dde00a310b8aebb02218be03f5f6c02a33ba5aa07ae9c4660cebfd169fe185165dbbc71650a8af53b50de4b504145e7908fb6953e92b53878bb4d98cc0463af221f435804da0e95d02758a2106345fbd60df11c59e08988d7eda77c232febf0651a50344507b95cc2e52b794e68014320a92502b8aa2a606a639c3381e74ab053ad952069278301961912c6c339277509077f7e5e2a3736f858176f69111bd5c9c6b22c1e2e0e90aee9f342573b80542469685b85c0f114be910ebaa917b9361deb696ce054174a98e6597109786d05c940e4fa63415ff43c40394987cbd4f2a0da858fb9bcd1b4798e98a4436f90f032a559e2069e9a87931fa9c03d57e4106fb8eadd93f45919e3937f761caf7203c5741b8115851b7e71f13fea99224a2d36c78658a289897cb4ffd4a99afcc866a12ec965e4ab6da4dc432049022a614c94bc3ea7a850e314e20e084bf0ad888331f04d76b7a8d1db5599ce55d999bbc7738d26481c32c6cb0769a735f1a41ad27f4caee591bf66e7f45c8e0ca483c95708c1f836337fb6341fb2f06cb40b9f7e98f06ad7f8b6fc60d27c8201dc9e0e918672ea8fed1cc1ed352bf625851ab4e1cf28f11b4fc4919ba3b4dfa1193af899c9eb9fb432a7d8c72caa20fe321ceea0206f3c52a047c0c8d72dee07fc92fba9e08c0bdf225c9eae03b07e25d9e73be77b753854464199c1ffae65a643d46d133b0145ead1b4079db858dc2132b1bbc65b9b061a2eac32063d44f596594a5fb43d760ef5f205c09b1681b6910c4d48c5430895bdd934d9793437a0b6f77a67c30bbf6ab973b1f95ba87e310a92307d1cba85383a99d3a592f198622662c142a529959a5f72e90c1910d4438c520d6d71f263e7961bcdac3bbb42a11fb8b0452ab6856aa13e32f0901987b20eb7e87bc4d31bb875c9a008db4de330627a5bb6400eab85e470ac2408e4b8463d63b7d0e859ae86dae0ac591e85432ae96ec7333e1a98a80810601290c88a73e6b050c50223f98eae0223586bfb7271a303e148eee681bf3c4f4bb233b5f07354ce42881c58842f7d4c0b3ef67a57d0f575fd31d09056fa823f38b044804b8507b97a12b11dd16e81acd4dfa2b558573e9852c49ed634ab92c54f4f5955e4a3161d248bf59177f78387938fd6d85a4abc370dea5d8384cc2dab649131cd07e4b3b8e4a61a7e958e66e42972f8c9940d249a41d08915f85cd0c68d6007d5668b4851d35008a5df9684f842a74f087a4ce4caa42404d5a8170a21bca95f1caa66efb6b941c3ba67e2c5b2e376ffd2e704d38f2f342dee823993ff43f81508615129ac5860e1fee6918b07fc706f3eb32095ea3db174ceb194a76bb3d4a289238ee78946793aaa336ea94d279f25732f996223735dcf40e308ebecb8936e15027f095864bbc98bf1581f36d9c4ac44e0c4459141bdfa8a2e7da368c62f54dc6998fbd32706929e0d0cbc0ac048d8f91e1b0e6c63a0ae20d57c66697790617edae3ab08a53a846879afdb00b933d8c49a81329c1aa0c407a003030ff8332cf6a0ca34634bc4e53f42b8b57549140887a144f3d175e07e9997d6be148d8eb34aae2dc306be26c4fbdf85de015fe2380b168b1b58d962ace620e4c5aad455ebc91a1f5de926b2f4ab8406a87096403772d42a9a9f4a70b4e69f5efb8e92b6aad7b2cd95c987d37d62e3118f35e3c288c6234175bd946d8c7322e608a0fc9a02d1efe2c3d2d8a71f5bd10c15e76785cf8e8340dc72bd4ada8d6c8096a77ceb01d4e1cd071e7306f1c565e173aa1704f9d61bf4d8bd7621863d52458c88153706e9ec476d60679c05614e67c8cee37dc1a62318ef951c814501254a4f7ff5bff7cbb99d3522754604403f112151f1a776145283ed56089b543b169f2e0aa94ff630ae2d7376d39c6e8a92a3cf36608667de4d5ea0665b2e64c8f93ee664c610eb204e37096f5df402fc266176cde5ebb2fc535fed627bbec9802575ebc940941e05e61861281c11bb76a450a4f612f11475d90a2cc91d54731a3b0d85685dd28d0e35a5bef97e713026c7dba3bb4fe31e40066533fc7e20e93b29931d9578e7e671a4955c2aba833780d1e78bc6a2ace9c0bce1b4a9341ceccbd979d3bae729c8641eda06ca24b8f9396c111e2fb7f11f14c6f24479bbc044bd1db3bd5e81ae3ea3209f8a414443459a571ba0b39f22f9c97d6edb9e77c9d4714fb16ba1d6078ce27b00efb304900c8ef92a3fd294a3de16dd3b6aa6ecaf2f9ff8eeba427c49c7fc99cab690b38f14f34b76a0872f7ffe0f9180f4d6481850ee881675fdde29fa2a91b930aa0e2d1aa409f6d98283f981df6ae34ea3f167293767530dac69819d3063ec4e46271b85f257c1758730ea46dc380e4c0cb8ec2b10c127dd4417d6be853a1d0c46d48a4b944fcb0e6713f8aeb3e7dbccf3a1a3d28c412b08c82b48624dbd937879d496590534c7042026f2f98dbc6b7d9e444c0b7fd5526b881ab1c410b9672db8595e9c6e1fe861c68a144fc9aa9880e39b03fd6f4e3083ec810312cf7649cf24ba562cf23968a003a95a03516e10147534cade25b4e4948e852cc4a9878bccad84491a781be5529d3d53a726287737de4f8b4a0c46bd54972cfe9b87945ce5d161e97ec6b2a61de213fd957d4ff89e7db5fc2fb9b4f339747e9557348ca524e304750f0e640070bca5d810f92c0f799c0771b7721cff0dce54d3036270e13050f1c1cca14fcdc6cc0ab3e4299e94e4e20d9ce1f56d633afcac653d0bf59b5c469a777d3fe23495cac6c2eddc94d87889ab2a25a20f755bebd849950a6197c77805ba50f084831d665dacd5d6012070e1e3cebb66b77f8988d81ec6197718365c548e059a4903d5d39982d26104578950fa41f442ceb03f2b6784f9028c7d2c8b41cb04978650f0c3e7f2a49d4ba5adb1cc123704b204161e06298f79205b0e8e64849f60fef7d2ff1faf98abb7721fb7628414a6811b8cc05ad46192841251f58381207ffc55269071f57c4309daadfd3e53d10cd731978fc74c4b3010eeeb572a8bbbf039aab225b371f1c9dfc22a7e42954f011f4d5db6363e96ade20f4dbd596a3a0d86cce834e0fd50f12428b58baa839c1f01e391c986f9d862f1d27b5d9188f38a1288fe1bc020d5c80e106b34a029865b9d26fa14b223f22d2927e3362450c87534e45f9a14386a8bb108a8de8b6975b059bbedb12bc3bffeb9b90146065b556b1d60606ff12325bf8c9e20f712058908ada1f904fabca22c16e984e05e149dc98e95d4b75f233b1e7377a5f3e37ad17d006cfb193487b4867b46d1da509203d6fd4658acb931318dd066c8256e6c2b3a38c7bb94e07e08c73ef072bd37f0671e7e537cb28bed83a4afc367de34aa6682d3f4d2de3b0c9c2f77c46405836cb421df555bf868b1f5405847b8270d90c42e8ed2bba38abb5d56425bcd15305fbe0605d47177477ed72e7d152a13fea83550e2767078f68b009706f056a0d82e4522a9c0022393ac21d35bf957d33ead7258a5bbfaf4e85733ef07debb73f2d2512243f33229283544bcf249f10935b9a708793cbe635b44a504b2002254a97316a5d56a9c64e0e2695d32cb64b939ff820f2fd5c6ee3ed1a069411e1d7ace3d172ce45920aaf084834c163313436b34cf8c902071e3694c20f6585d2be5379a4db88ec64b7d37cca4661652454ae4da91a62b88ed0191798d1f838ddd73503ce8066ce970aa7352890215a7c96091f7cc59fb1d208c20847fcbc0f3c07bc075a510fc4dd4e7a67ae4252a005a3f220129251eed95c0bf264115c935aa9937b709071732c82299e63a48b9c91f895398d656c793c3eeefe570e807f5c4886e318991e5b6255312fef2ee1d40aea23505ceb31257fcb0f607bf1db37abb9871ee827d1b9cea09323ce0ed6965863d51cbd8a2f97e6c4a01b086803aeff5ae0f944ad477b4d3a6e2f73234ce0a851a7ac42cd3922572e80130bd3505f31209d334913f160d199ac9e0d35816c404fd2e998d0a7b03f1eaa5adae6305fb09050c9585ae3ba08dbe3df29a76802da13e3a9d85599394fc6c9987c93836eb1573c151b7adff1b2b456f5563166d949430e9620dbf77d09e26b543d2607fc38241d7b2f8d4dcf204d01cdc0f2af4540740e460cd4ad8a6b8e48323cce40f7c82c2440f9b3519c821a52f4e5b03bda56f3350b95e79ef9ae55bde27b53d3fe75545ed17dab3ba3283db0c6e2ab900e802845e7714e228c83c84898b71b72c5630c9a8b766143b98cb32d1caf363bddda2461286652561d29d1c695c4d9cd767bbb6ccbd5e60358bbf9e0359171232b81d5843a6c908891e407e2d46a22a920357aa8d6b35e18cfbf2b5e4dd43e658afa3dd1cb79c8a3a0faa933f7d1e044670aed372f7d6f32940dde5b55d2aeb24690e2366e1caf33ac96f1f17b8f308a5dcdadae2b4e6ff29640223be9c4db95e7b63112d2960416a67a63af93aff53078d5d8b3f4021b3e9c1fd95858fcdebbe2ec93af493f8043a53e89362912c0918099c142c3fd731969783f0210ea45ff8cddaf149fc2a345a0e3f7639caf45cafe3229839bc51cea83bb0f5f91e8db6a120b5a0286a1b8ab02bd6fcd9b17251f7682a383deb15ad33c18b782de5a0f8f0f4b00ce17052540a9ac94a243bf16d42c10b3f711fe229951d7aa84b6c767382d77452118cd0f0c810a3201e79aaf86b458cc83cdb654a8894d46d0ae250eeab7bfe257782d351044e527cee2989b0c37e0b3117c9334ee299fc2125cdd9e26aea8ebef0a38d3c6a3689fdc468edbf8ca0c2d6422b8dd1b2e5a35d95a88aa3d907199ab3138db05064549c029ec1b036aabefe3eefe0fd19a909413e6e951564ce067100048e2d2ec1353ffdf85326f12f060efd8880d10d336067c190e1124a45629b496c6158606aff31a3771932f15a8d2c630f8f87c750216b364a4763d5d96f75f10270b16d4fbd36d0630c1f5563d421fb0a894a2c5646309605a12e67460e55c353f1c9e083dd7f09154b7e7b179d66a8517c65b74aa058ed947a86c01025e68fde637903a60c68250dd1b24609f852bee18cb02a2c9999973f45daa7be0fb6fccabed66f31337b68bebefc5c7d1a998d8da3823f2525607862cb42ffeb4b5d26c849d34cad3765e923d41bee2e4215aedf760bcfa9e36acce436da27285bccc3216c15872571170e6c53f11a89994be9b347abf45d9a3b47aeed45e30a17bf21b0b170a869eece206ee73985dbc2bbc4c61e617ad49c5ee4f7e7e0076afce3d2ed0196b438cbd9583ae7e67fac278a23e233ed1d2dd66627e6a790c16d108808b06fc95f5d11bab5151beab78eea61d1ca1d8cc0e08cb32972b7d3214ca9cd366ff638bc1d1959bdc8a78d01e83c3707095db8568222dd394395fc0d94f9ab2e28b6651196324621c9a312cdf4adc7aea9bcc251580bdaa59f4c6e5cd950c87740b1b8d555a5652eac22d253b13fc5e17ed3087a5611f9883c60b9984f2345c27119c498e496001406fafa5abe1ac9c456541e7bf1f92bf0c66f681151b26bcdc4480a4e3970af57699e5a8bc95176adaacd3835be280c9402f5ede3b5f6eb3544fb36c24d24aa437314b88d8dab5da702fe19028aa4f093a595b9c60211c21088554aebf0e0c00a454b2e08be16f0fd8fdeaf9cc45de0a3a5254ee7dfb4cd6f33cce6dc4b643dfaf023a768e7bb38d0184703bf110daa62d32a74aad60784ae3ee0fa43caf423eb7851adf3296594bdb646a0f18be5bce824a9b59e536ec2c18854b74c2a60451ab6bc4fd5a740f72c975af6ba698e5e7ce73978dba28eeb4b8633b771c1f342fcacb205f537f1cd295e54b084d9158cdd76909028073e855acee1faf5142c4de64f2162de176ee0ffaa84577dc298905b0dbfe16f12f03659168ec74a0201716766a1819ec4539697972a7bc325d356d61a71ef34b02447d6ae95247f61489ba6ce612e852810674d75a751aa278a92d9e9c01d67349e37e73b7351018bfd1d9c411ef4e5fb4cf19c0d0660e0442ff882616b6f3e9882cccc6418e6a397aa21729b4a36c1d153e4ab79f19bdc558d3cc5631604e2a75f795daf1b634d0cef8a0996d9197a379a4660c82f6ec7418a3f9e8d9809beb8d8aaa7719309006a28a2cf55696c457157f3ae4de813694d926631d928ea3409636a6a202e330fa82b20a3ebd99846c3f4b9f674e18ec99860828655fa9c19da0483aa1f5a8f908d3faf77015c95ba2a842c6a854884c22568776dfe04c62c9650704e118197fccbf947df194f7604616f23101ae5024b4f34a189717e99a4c9e2aae2a8ea344c3cd28e30333cc5c6785113d9c6a41c42308bc34b87a04cd81ae94bfd499ae84d7f66daa125701edccf52b9e5e57c779dcbedd37e2c2a2f05121515db1cf390cd6e188dbba8a83aa9d4dd7d599197f210811daca4304210e54fac8305c2725c2f9f36902c9d41f806b7ed53c0873336559d77b74b609a0e398e8a0ed2ea3167049d725cd3f40f6a8cf7a281a33870a86c73f19a5437ca3c183b536481baa2ce4f679a5d9d9c7ab0d8a2ebaac60a3b43fdbaa8596fd8b89b54117605f43a400ce65c71493225600288ea283a95e9ea81ec719cdfd4e3c888a32dff23db92e6fc37d51e844463f0ce71af67ef31fa47c608bb19cb4defef3d9637e77f8f99fde992b418e199b17221d17f985de09185dc3c2ecfa042adbcf26923c28d44ac1458b3fa7b25dea18b750c1d62175c0a121e618bdbaad53df1624d16d4c19078ace9cc6b54c0cd512c78001b54a22d89867b18cfe8cd9d3d1ae9c33c09b3bfa1620e0eecdd900912884f184b34ba01150a3c4de2d27076e904e16975f44720e296d31888faeb2d5c02ef0b57532507253c6e645b37cd81f945da1d9c5a8f9661adc2fddb784ed5b3181f6872089e59390863f2b5da41efe892546f34ca3854e833762513b8d147a6af4c0af150e1135171ec3fd9edada9ffce65f50160bc1996415780e460e648f659c44a38c1d1a1ca7a5b0d4500b2af5e5807df0a895b8495c11f2875d39f84959e7eaf17a46c65a9a77c7e154f104b076e7947747713a0f1a0ac0a6bd6482f2722a50c5211d2a8748ea1e72f44e985f890337c5219df1731cec627d30ae74ae098ac102b445cc2602850123b66c2d5d5e352885c5248164ab4c4e31fd780a7c205b53dfd5eda66976241f8d101d6bd5b1958a4ce3fadc15cd5e3078e2efe0632d56a29c1b5b87208c26e98f1808dca462f0b42ce914eb7ad00fbcd84a5f4e93f165a159451b729e6ef558e24fa97f6a21128198293204b36657a2985ed82299396ccc62d8332627fb5ead6e1ab896c04363abebc6b35455d9902b5d571d94cd9ab358f072bfff561bb6ad12dc4b3aa0e4132899fde8cbb4cab4e1f7f3b34a733029ccb2da82494c3c6ff87665c28d0c3d79d3ab2a0ee254d4282c3202383928cbe65492274f022bb8dc0a28f9085ab488e84ecd0144323a2406d7fd4a78a05c84d693a6a086691dbe2aa41fc6e43728bdfe1aff2b78f02dfd71261d44c0bfcda8960173a0fa60456a2c4f7c8455892324d5d42e8199d209e332d685d3a6fe8d4ae17df988c849c5b0bbe2b78140fef2fe6a609f9d6d51ed77c6f8563a14bc28008bf51fc4b00cb8a4b13219c60e1320bc4a172481ca1ccebdf9a17906d702cce5f0c9adb7e222ab2bdc1ef95bf000cc40c42b13c31123606c6c327c970757e92ba9a3774d6a42d756d4dc3326900705fb61016832c1f4a3066d23cfe9af25350e02dba896951a2ab33b992ceb805229b213fff2833fc523f83c4b48e120ad312a46fe543d7a47dbdfc8ceede6843a673e9b6171900db7ad464639cece2aefad4f8eb990ff1063e41ac00b733ae23cb7762d1ca9d7b7105fcdcde5c6455b5e42a734d7f4672c610595d82c16bf7f3cd57406a119024871b44a32f47f42e5b8ca56d6cee2bd055459f3bb36017d3787fee3afcd710542d45f6587789ead8a6cb9b21f918ab4a4372b7b9d7d0e5e631e7f5d3ced64b53b32691539d77bc6131acd008e604c323de24aa5459dc9ad9684f3b11424368582a1543d1c55078ff75e7caa9f2dac1932e73e55b8e8c4bbdd2f9e999810ecbf884a074094f303846f71871bec0fcfa3737b0a16218a9fa87bad0cfd239f7d1d5832eeb18867ff2408cc90ac0d30b746a2f8b982a8a18c6fff39b8ec87612765858d1401a793b2236fb3ca60fdcea74b7b9125c86343d27b79d3a56a042dee74f2f2d0d3cf3ada56370d94ea0718ea8aec7264a229e7f35f6d891249c9ad5442ccc58a6c96e2b98d87ece4299aa6c6655cc0eea63726cd75949478323ee5bed6a70beb2eb7a9b620156a65d977bf9eb04a5892e81991f20c09a0b6814b71148db9da45f9fc17f3edf75a8ba7c01e8c39cdc6a1382b6d35608603030eff09d664ed96837b1f30bd5896efd62130c99c191c70d50ed231846d2a12fbac2b38fef4595b9a8278c79c027b46e876a2cf2d706e63948d8da28469ba60f3d654a8825494644a3e849b720352482a2fc11d1e818f5618148da2f454a6a0deadb24f0c1c006104aec10227196787ab3d9482021ae9d4f89f8c67bd8ccae13cf15f32496a24e04919acd32102607d7d3ce8e205f3228333d5a05bd145422330d5bef9d3825496e442eb10023767b03044f08503d69844b7214c7087bf52f86facdd363c6d574f00b8ac6975bb8e36adccd64480b772d29b84a48ec9a4930aec39d43938267acba42b3a05a7fe8639f4d04f0c6b7c016782b2ae4fa09552ebf93ad9baf8bd2403d2d822f6f27aeb49f5014528e7816610f111e3656042a3292c544181f6408808194478112d7742f49c98890c025ab8a38ed5ff105fe82532b028a3c690f35d1a4a87aa0e9aa190eba95a45c4d06cb760967366604909be168c863acb2265c2ce9098c700d17a70d764bade92eddb9dd9d164807530ef0e8c12925085e11f6d709996f9217103452aa3117948323b0cb03c7ad2e40e5cbb1f00f8bcddd464d1d1d2d481cc3eea27013d243fdee959ed6f21ad275290ea8183d76568e3432a2651f0f7314df006335959edf1cf9556b29e4168b477b0f6c8d2984b60b6054901a217e45871070444e6ba5034e1d28b68a28453cae9142e37030a326715949c576704ab6daee176e254833ff8a6b2055015b1c3fe3009ec14087df57d37b346e3fe34dcf9e5979e3ef939989f78442d43c74d4b6a3258385e99875b78fb619add97b4471f13571a510b735e82bf20905dfbb84b0ce85a79cafaaf68a1c2a48527fb6f0264f5f03ff2296bd121bca7dedc1be211954c239aa81d1abac1b61c81a2a77d920f0a8d414494ad9bd9fc70be514f98ac76e4142426f27773241e2f9226a259618000ce46ff9c20f88e9d0966a8c9698fdc9fb9845e93c60dd227548eb00d224b401f8c9bfd74e587b41ddd4dde501a041fcc6df75c1fd615e822eaba2fdda74027e9fc23307644a15cf09ca5f33d115b63bf0d298600e7dc49f24985fc495a54ffaa6be8e74487757a25bffbd4a81adbe1e0a6c4df1f3c5a6094be02f9ed7fa8db63f02cdc734be416b95b629c174468c7153e82e8f7ed4f0a6bfdbfce93e26fad806d0dbc4e9a471b1b60b03899cc04aecea1d1ad6eca7987c3a7fdd72da5f3009d583ee7149918bf5f702521146b29d67418d6858e08734038501f5512bc0707fe6404e4f318219a7c731ba7a9991e5590358e676bf4894d382f3b4325f7d948cb5ea7ddb6bc129ead04777b2db9517773409caa74673366efe0de8189bcd67fecf576dca72da36b02f3007d93119785544190853b8e843ef9100978c580fadfb216a10948f78254309600a7de3d680af0914f61285c705d0f6b56c6a4b544aab67ac9d359aa032a860e378532dd19975e0f8cdd1d8b277ef1dc209abd9a7635b6135e8fbca0727e8f14430b0f0f2761165b03d925e55d7dc27c19432a02bd74fab6f5b0a97a3b047451d48abe725633f5dfc3a78535cc8dfa313b042385702979d11583bf46a8cec3b9994710ef2514f2865c74979abcaa9be7782035099d34020e3c82e44a50c4dc031e9f9a1f9a2e4ac67455c0c89cd2a17d16f03a6c52c94d8e25e32c5c916c4b7263c8da00c59ac7c01fc774ed20d5a237d9dc4a5430493318225883f56458307110afea99df2d2ee75757ba1342e8d7a327ec533c440da10523d98f30b70c9ca6806dfae2be26f3f9b2cf1f1637789560f4585fff282855159d9ec796f6460082a2e1c5fbaa0f83243391350410cbe710474a30ea781c6844a6e7d70539ea4344d4ce42ac8a5383ebf976cc830da82f42b5524915b6a335852a4d4f33e0c87b780876365457b9531a58542900f27d9b077e70870f7978d6747b2b929b96d5ebf160a906578a258693cdfbbf8795433799e3ef2c8a52189a255f4b87d3cbc46e386d9f216a1d10d0d24505d716b2bce514e28ab5335f9a163201b45803ba4fca735830d855690ef14b09b5a8caf6b7fdd7b9e96a869c2e8b24706fb7136b62a1a1c73a52d6d47b2cb8ffa7787f30009d41f9031086b818b0cb65e80305208709ac5560e65ac3ae5864114f3049da58db424b56f616b9a54c49a63e07fe060d07389488c1571083082b4470998071002804c8c2757f6637c94b52b63bfbf5cb9f980ddd05f941def87c2bee62db28651f823942d65b96f5f9509f8878688f9b44ee477b1410ecc74017601a568285f7025d16f793d9a1bd2e09b6efe743fd37de45cbc8beb99ef368f9417f7e4c8d7b0a68cf7dc85f08a09284fdd1e1d01ecc815368005e7fd23ee451a4bff56a749b299fae31a87da48df44d9428f0e3851d2c6218d6698f935c66863837361ce53266e301fe6ed88324c1c68513b40606da361f84e0085fc0b9798117464828322541c0dfd132b0065e2ea43871e1c8890b4fb66b690fecce8dbc032860c0c384a22e74c1891a38051729d8aef368130d2c20b9fed19f72e1fa5f160b605c7f1a5b98aebf4bcb1ce0fa1322ae2be1facf13a1991e3cd7bf8696d1ae3f0e40b8f6faff38c2f5dfa1656e5c7f1e7eb2c085eb5f810b90e0fa0b69991eaab803b8fea38528d79f48cbdc38e3dc5c7f3884ff6ce18aeb59fc10d1e03a9faef30f17425ccfaeef5c8ec262414af93fe48d126650021e0401063f38c10d241347ae9452ca6f0fc22b0c24b660050aa4d0051b489e51dfdcdcdce4249982320faeb1519490e0c33430040c337ffef419e7419d877d0de39aa3f6fb6dac28e8b50f1005356ef3da9c6993dc7cb72ad83e5ffb70d1c643cc0594207a96d0b9a9e19a27e05f5c911a8c2b5233196b9ff6e60d262cd7f4b7c86f919dd7de7c8ce88925f0a0073937373531fe325f8506f6efd73e49a6b8f3e5f7686ffe4731bf391cfc65daf8c2ce961dfa8661e6cb25ac174d27b2e67c9edf3ef31bc8346713dd5974a7dfdce93877cec973a7fbf0e03cdac75fe6d76eaba67c3abb20f1466654b03cb11032a0a59ffa2235d6cb27523dfd229bc5fdf017cab5f457402ddd1179a2bb1de4571d91f7177f22ec2f5d919a22363f36962fd8d9ddc07754c3fdd7c6349661fc61ec3e58f28e5e45a574facba43ca8cd5f9a4eeb2f0dbbdbbda38c1e21bb33fcbc51132cfc76779a3125aaf4560a67d349452963bc31c6e8cd959d87fcafbbdbfa0bed1863f4aeac6045557580d259758052527a6b15bfc451066e633e68ec4085f9a055ec875f352ee21d81ecd318a19f988b801968d003360d9daec4c1384a98e0d30ea5c595433ab8f2af96e1ae7c76828db451832af44c51052f8c600522902a2454e802931b9fb231832aa40a13a88044861b3fba200a40c8e2c6a72cb8560a58b8f157a6e0f32cb8f1c789163706e1c677952cbce021dc242ef08a8b83e6c03a013ccd87fc2e5e122c7ff5bcf69a065e486f0f2f729612b6a50c4f8610c6fb5ec7a82c6163d8c4d706d3c017f216f0b044c1b6a57de4b4af31561c8645ee5bd1b0af344d7bec84713828e0870b6c75eebe952b8130acf6f123c7430301c3d2af1ee2c021ea93ab6918f623ac478fb82f5eadfbecdb151da88f4d82aef6d86d22c58d8f1159fb9bd3d82cc37cf67f01d86bddfb901fbbf7dac33e763be813ccc67a3a6479a86c416e89cfb7a52fbc3d9aba2237e9d534ed2dd3f0d53a1c34eec70bac768302ba1f4c737d8caf3dc605891cf612b3a1f251fda8e3f6b0ee8bff03ecd1d8c79819569ab0aec6acaf95617b163b5ad196f857722db1fb716acc06f8fc2a2ab07f61898699f63c3e1ca25f1c07e711556460ffd6e0739120085a34b9372e07410b1ddcaab18b9293fdeb4fe5c08e706083c4f78f5d10f9de05914f2186759f101faefc48c51ba9772e487cfaf423f75d928350860f04327c1f2872e3575dea494754d21136de25f28aef1cf61466437dece3ab8c5a543a1bfaaa68effde8df715b0230089dd2ed9fa9411b3134407c7f0ad28b6a9ac6310baca68d94a43ce45aecc316dbd970f97e108e3a683ba6f3dae327acfccfbb11b35192f210cb6194d2327a78473b52b896514a141b93f2858d2f1730c4877818198d87ecd0b3ad3d2aacec32ae8a50067fc8515006a718f51727533d7b55b5e4d0229f6b68f44bb7c88f576509fb570655b8dfcc6db7441610b088945915ea035938b28285fc970d9a7ae23271f92925dcbb91304c6351996e2cb03e1363ecea45f2e20bd217b69c2d476369e2e320cb5f79043b235d4105a42d2cb7c7dd0a8e1861bf954d059a5561e4df5250230a9fdb9062e2c2a794788269e8c3a772a8232d633d8414920b3b8aa775bae67cf6b23cb11f25735aa66f88b7e6304cff57c99e7b7cf6fc0337fe95920af1dc7e8a8769fcf90af9b659ebdda52670e3c39a4385b27ac4ed1f95886e8f4aa3d26daa2310373ec350d021a5e33c6a4e8e8ed71ce7e1c3def8b3f3a1bee00919c89575a3e68cb45a9433cf39e764e6b8453fb34308e45294d9b24c9d62ef28a5de996584ef3ddaa7d296813066e6bd399999194279f92174f22bbff22b61e822bcb0f2842a6861092a5848b1a48707e6c092ce4eca144540820a105111bcb15a86b5fb13aaa08525f04b7ca6eefe831be3536c0418055f980d730e182602b9fecc6d4b20610e1e692fb2bb4b8b3bea6d58745629e5124ddce0628e0a0d55311475f9363c77f7ead25dc6aa06381e0ffdd8c767a62766e775628c3af80789410a681919a58cd50cda684ed245d1154abb5b65a4699786c528af1067148c4423b15b8b312f924d91581ca9fc9ca48b627eb96274da75492c4228a58c32c60b88a6d28dbacbdaae653ac6a2bcc28c821169244a239122227aff148e7a9433b0dc9e9c310a469ab0dc9e9191d532ecea4c9be981b44376af02d0456517ed21676143dbd65afb9df21533376d4aaf1a5754524656cbb0ab5ab0a29392cf0c7457fea3fc108b1f34a9e4a438b9fea392ed27d75fcbb82e2e1e231f340df141d3e480a824d763074dfee231b09f1311b54c175ed43230dec839b100e446b62a8a9a1435a955314766f6151a977f014208a13b841042082184ee103a740821116ad5b8db2f7b596acae894bebb44cca5bbbbbb1b7a988f78bb9be1f28c5f6618ca8a599cde73c249b393122c4f589e20d992206d41da82b405d11050cfa907f2e4401d78c3105e20d8c1f608a92aa3b0dd6394929a5152d49c945656b42c6f68591566d5ebc2b02cb3d508a6a84415156fa8a252a95cbc1283492c5bdc366fb86d154b6461f1862c2c950054b021b121b1953624ae18a30b362536245b125ba9c22fbabbb73b91d2fd84449c08bb9b13e245b77b2a690bbb2161fb196b00b301aa0c96275e141e131cd75b7b642a529437a468c60c03758282828282828282828282828282828282828282828282828282828282828282828282826c308409207458d4d11b270e412177b8e3d3d40c72a28a55e50d2b9ac11d8aa238950f163c527403bc3eb4d734ebc1b2be99cbd4180d57a3c1466bbda1a5d98c76691a88a3ad53e00a7603bc31468c11c31bc6a019cf30d10e1422c2d618ecd4ba321b4ffbd4423d74b3b3b3b3b3b3b3d383cfc478c9757cc779bcc77d28197d66666666666686567ba5ac4c1dba6379b69ef7f1806e9b86888afaa6713a67676767676767a78719ca96f96766847a88a8c86f1c4746ef9999199c51cab542daa81aa2a2be699c2ef1d01eebb301bdc93b41217a6371b69c2fedececf44044d43bcdd33dedd34032eeececececf44062b964b4c89a28b4b3b3b3b3b3b3b311615b62b8624da9542a954a2521a11ee80381a0e90485ba542a954a250885a01014824230861a57ccd00b6d276ba240945abb95667070189a4cef390eed4a544996bc64e3da88b05fd750668ff999c87168d7cdaeebb776dbdef36270aaeb3836aab09332e6f3801954fe62027793089899a594324a2923b31dc116020b5f5634cae831ba10149551ae30b42b2a2e34b6e84e31738c912d8db13ddf2ec708bda59431c6af7bac9853a888d0dbdd234db9915107b09bfa1462ce39278532ab9f0a8a35a3a47ea050130c93f2cfb72839a9af085959d176785e45ad38bda0a6cbffd5b0a775c9e9eede5c05daeb11267f38c6ec8210ca65615aa8ecf241d81e65152d0d202b40b6202847c978ab57795109603c50ca26ee80fdb86646a74ba6a11f0b5120fcd24f01e6016fb6b87da3001ca845cdc4f8cb17964503ddb2ea46e3add1cb8a90154a29b5c3f368ad56a457c56daec4fa4b91cbff75611ab0f19798cb651997a1ffc5d4caaa561523c5b9740ae4c228d69063cc28668345ce2acbb2bcc8ec4c0650a0408102050a8450dc4d15b6c738434c0c0d33335152eef2bfc3f3a8b96269605ea8b352a7d2b1a0a0ece82937b6dd5d4a8f2ca58c56de80d2b9f42bf580444add8bc07105445c0ac6a58e844bff73266c506c162e7d4ae97b945e0ee4409785d5ebba2eec1a8dbed21edaa30e4444a907b54c7d7a5d4dbbfe1a3d7669d8956595d3aeebbaaeabb2be5643bc66f47afa75c687c1ab0b825d5f3d09c85e1d062cfad55794bec571c5514aa71a61f2d3f9636b4c3ee7439ee93c10e08169f8ced9c367d6b1848187ac8a1957b39a65d9e8adb5d67ee58620e021cc24d032f5e75bffd1b8d967dc0784114cebb2ec2d2bcbb22ccb32be9af599b56f6558f7c19b75431030ea7c90973ec4b2ec6b9665ffd9f0f7702237e3aaafd7d55121ca4565173a04c89d4f25a543feca2054521435296e3ec5d1674e0926b929f7fd8c6a05fb41200864b795276d3133b22e3e4395eeb33cf847edf69f17f3333a19dd1773bfbf1d4bf779f7fb2e46f77d97d2f5a8fb28965d2f1877cde9dce983395cec814d2008e440fe94fbf8c707295fc68e760c8417a96e6151d9e56b9e4b2bacb0a74f9fd2a62421dc1a4a4fb48602590f871a49378efff30f0d7028a6874a2da5ff33f48a4a476df7d9da7d94bef684abfb288ed6b18401e2cca733ea14ec07712e8e578deb7bd9bcbbc321ca952143ed2f786b5f3ee2acbf5ee3aed7344d1b8d467f71b429c4b00e0e81613cd01e8443ed51fa10e77aec3f0a876899eb2ffaa3aff5abc67d4018b9da57c634ed2bf7551d1f20846e8ae8f4b81a108daf2dba35ca1d8dbe6af3d6ca0739aa90319bcc761f916ba3f7d5feb36186d134cefa8be36bb921442c6c885f8cb647db9bcf2eb40bd23c99172abb7c94cff58f171010101016f76b539f98068601c344d2ca232dc3032271a54b9853a5c0f6535dcce9ea31805075946c8a1725b8628db0ee9f84a492c653f9d51196be4bcb7cd463611aa752bea502db7f511445553fb3ac522ea35cd67df4ba2836bf5adcac28a5262595cc671ad94f6b7e758475f158acb4e634c2c68c524a2b6bb56721b42752a446fb6a71f6354e040ce8b4b738db695c96595a55bd5551cba2158da14114a2c855ce1939c218636351d9a5bd217f4aca664e3227b9e133f5f5e3bc239452461d28b07c4ba55249968060a9141ba8478a9e1ac334ed18a4223746bd4ff5d1a5ac3ae8d343bdb34f613610f6c06a05d69fbef51028a8654ed547d8e4c62873aea694cfa694e12429b14040b1d9bb143b58da7a606917bf6f4575435c287465f7096127373e046a2f7e8e27cc87a5d81d0361182514c792c8c6c00b9c19196194124629a594524af9524a29a5a4a84eca1d981765c7295496c15304a5f5435c7463ad02508465b1f5b556485fc8762ba51657810b080172c4c2af9ebfb10bb3e9ee8e654b7f90f9cf8304309baadba1bdc89108f823f6704aadfd8b5b86bb8ed8cfd2d03c8c0871fd08bee6faf83356841686035f0b2ab9ac17b25df8d6b7c559560ef25a5717e32fd1b3e08e1bff9a815af022c27ed6b3ce83d20a708e28d86fe6c6d85c8ff620ec988623f6529db4a840e570cb8cc9a8818dff591d392b2d43411a638c92a2288aaa384a4e8a8a3236e1d49fcb8552c67e18fb6117d5bfdad08889728b3009959b47b440db955de55ffd222b23a27bf4ab69116d24c296549c307e5bab540125533c3976fc2b7071e3535edc08dbb5a8cc01cb3f453d977fbad889b9fcf3059d5bfb21f5eee36eaafba857007e891f638cee4f437bb167cc9861baa3810403d8c5991ded451d44584fc8a50f2ac51712943e0bc3505f1d61bf8d46cb7c96c5c563611a78a978b5ccc5e9c0b1b13d1d399676d503611abe5555599a963d0b9165da675996fde4b48cd20b7bfe1e7d715f7dcb72698f27d701c8b1defe118cca326c60637b2dedeecd6c3db61e5d8310bc151f826ba8f3a0524a9e3c792ae09f524aad9d4c55cf1e0f540dbb34040242e960609ee19a9a0414611ff6a9c208f6a1a20b9803600d110bd4cc67cc012e35d37ae894fdb66b553dcf941779a01ea040c022324a24b5f9b20c72fd19461649a2c2af9b13342bec8879d0a7dc85322e8ce1d13d7de01215d9b3352b2e28208f4a015171bdfa04818707d7457077926827f034897265d3af5b897a322f7aa23f549fb447d49e43ab8768cf7370da4bf9c2f6c7ff2e9ca21a855affc1af45ed5d373f963eed82c0af512cae9eda8337d74d7bfeb5288beba665f87ef0f6535006f810533181fdae22174e1643b4cc574f37a765be0a6580df1d0565e897980fa29681d71050864bc8552dae12d5a1f6fcc2b986a87d5d9f0fb71f7e3e5cfafdb5e294d4b7ead7275d875a86ab51862a512d6acf2f9ca2eb954d9fdaf326d549cb74b7d25e116cfccf66e1f95f4e5c3cd74ee5b9fe58909d52cc1f2286f1f664cb92fd2e1ed216f6f3a1eeebe6f60f1839b73b1ffa0ef1bb81be570918664bc27e17cfc573fd72a23d5f721d7a67d70e63970eec372f9c2dc87ed7cee5dfec993d3e7918c6dd87545296f0af95dd724ca3f2cd349046a59b296018e7914bda731e93e98a13d3f03c923391e4cc24d71f9a28b5b6dbc6376653e31bb389e199317903df95a6a84042745bc573d9d1f082988d8c96969696ff5ac6d96b79c82f2d066096a1e525a4b80014412f232cdf193fc3e65b62f81eadc27d2a7fe363705f8c27fd7c21e752df356a507f830a9d2e2ee9717c55b9481cbc37387819b3b9812306c94d3878b8fc8d8ec3f1957491309bee4998cd8d27e150b154bed2206d424e869e10d5958b7483fbe0cdf1f519b379e1fc0a3731613f973c39eee33f0e74e3bbe7a4149247c77f72f6ccb9f13dfac6cfe05ab828e3e5656036decbc06c5e5ec68d8fa1e58778fb8768b7bb0f9a74a0be3b95cff18dd990e3673c6337e4f8e65a5ae86cc921c7cff819396470b8fc37430c33de6bbc3f146a191beffffe2f9cf3f812ce7b6258980d37be9fc4ddf8da5c8eaf391efeff106f8d1a366ad4a8f1a39f4f613a505fa3fb015e1bddd7af92a36bc9e1c6d7f81a37ba5b6b8ceec75e25060e1c377e9403c70fd12e0e1c4fe325a603f537ba1fe08d11311d488fa3fb01de1c3d1cbb01eb82a83cfd20dbfbc072c57e1c9c973847d22ffe37384fd2fe9c63cf411b1cec82833338f8040eb5e71f03079db410079bb4e74f838327a8230b3be35bfef3264dae7ded3f37b5702c338761fcab223ba39ba5f6fc596470f3487b2e316872ba751fc558ba9953fd074d3387094c330412dd873a5039506f6a99d1fb89693807eafb49a4ee8bf1296fa5b38dc1b10a97d2cd1cc9034d17347db00b38b921f3d32ea4449cb724a9ecf2e3059d2bffafb7b773d7794dcc46befb4b6aaeb44bcea5bdf8d4e88af998e85ddc6ef82b2994b08b92c99c51ce9518f322d91489c591a2f19a980d8dff6d5b89372e9ef74f83b7cbd05ef4c23a450ad30405fbfd650805fbd90e3eec986158865020a913cc26f3344d352efc2d0bdbd5f061988e610a39d0cdcd0b726ed3b85cc3876b684b405257245c45d86f9a4c919b3f9d44c4305dc387e8d6f0d1765a66761489e8f6471b17c670e34f5327bf1a3eb73fbe8d1b3b8d27c713955dbe193a51766c0eefc49b588a3a2ee44e9c88bf95aa5bda641fabaa9a51abafaa97a7be32f494e95c4a93feeacdedb78a2ca22418c94a3901919a34014842f4dabeb0556555cb9acf1874c873e1920bbfc22fc549caa9743f0de7e2b293bfdc10615d66b248276849a7cee6cc7e6615adaa1956452b8a8a33bca29465613694aaaa94942128d82f65e8365f2b4d2c7cc69cf34b776e7f4672e2f6571e528fd5a45fda3ab57785a5b2158abae806850aa33a1289e756d3140221d34412229d485990b2a0192565c1345c71d7f685a5d46b03aa9aabcb4cfed2a4493adde9c4adcc670e334fea4e4e899672fa719dfb69a5db59ccc1b9fd65d95066b3a29dbb41817699a9bd2cec679d5aa6fa7eab8925d4327346ca49eb3293b5591535e7a55c8a4e4a92149e1d9fdb9f62bafd4199e92733691a66a3c47a661a7a6b97b2f3a204fba59c4cb7ad534a937ea132cc26a5497b3da710274a116aaf534eed914e0cb384fd32d3e9f667422df3914e9929bb223b654d86fa4927a661ca4d59649d18b6474961349ba1d3459a020011db6d1bbf3bb61795587823370f7c2e33f1e9b99799f060c9b59830bf61116eecec950961a5cbe61e13ae7303b8dfc62f2de37edb666fe8763902a96322ba42080941c4ccc4c8cd854a5c661204cfad955e10bbdc5df34bd3b2d173c6f5750861cd6636295827e638b66f9d7ee97b3561fdbb2b1b7df615b3c9882e45fdcc2e77d7fcd2344b46ef4bfb71bfecc26c8837b6e71f5bc6ad115bc14c0e70f909c03c22cf0c9777dc8cfbe2899b959187daeda3c972789365d967f28661b268721eade3fdeb983a6b9d4e5265596731ea6b0ed98d980fed46d8f70341df161f7e3f20ee8adfab9b2d3efcfafbf5fa9ebd57fb991327377badbe9be0faece7665f4f90310941926baff67574655cbc3a8e7061fe433408afc574c8deb377ffac7ec66518e6a3aa64d875b978eded48429296f9b41f05d15a876952bebf97609a2ccb3e8583d7c274b09fd9cfb267cc47f696afa67523eee382689f3d9d980faddb4470e98fb84ed2a321d868ba9146240ed3540e5e5902a7d80256301f5e7d0ccc87d7e87f7dc66d34dac371af2afb01deaca361497fecc9befd73805424b9e25e0bb83ef351df4d5e3f0635390faea1369a18a6fe1174986c7c1b5a7bff8c8bd7b11cb47b05a173798bcb4c42b0e456966bbb7498ac0e24d8201f646bcf3fce9099df0adb3bfb407057aaab71b5a9293dfb80b82b331af28c9861cedc17c3fd5ae78be1e47edb273f7b7b041f06db11ac902402329d1c48095d005d61440d369d93101857f8c004b689847288981891c10ea60f8f163a6164e1897752e326ea54f1049653c511a208e3c712852145133119c116aa5018a0082327064c7c60e432139f938d80fce83c40203fbefcd8d1962942dbe38e32a0c80ef1654724764fa8a0b2f360623a5d1ffcda58d243049e9a0a8330024e43b1240a4310ca92229448a2047300c5127049134c7c200eb45802a7069b020843d8a9a9d5d55cdc82053020aaa9d6d59c63d182304e355e02286e7c6a8068309aa0059feb36d7c2ed11e925a060099d1a20780a1f2ad8091729a108a19a9a75f1029e1a2e7c9a38d55437192108403da51278218a500f931d045ded32939e9ccb98cd0c549c00e73215384d662e5361029f1be5740370b9085f4871a3987a2ace7631570e2b58ea3fbad1a05cad4eedd1af381f32bb952d86567a49cc46c7082cdf587dd5f900af8df5d0facaeaa08e0e1258bef235107d2217517c8098c9e59f2f8a6ed5741c61fb7b748c31624fdfe9aba4701ff6f49d62ee54fee9f24f173db788cb3f5e00dd2f86e08a0a27c4cacacacacaca0af34b4c87141515f92a29dc47bb0f3ab436a3aea2d1a3b9fbf8a910974bf9579c7f755555551fe33e21d8857d865d1547b9285025c8c21b3b88e95881ed8e214f8d22c218631442d5b10208218cdf5545294e084abf3a573da594be7355e7f2fd7b384551ed0e1bc2c6a2ea60818e2396ad3622db7bbb1e1b698f5f4712b6ff83516e779283105a5159060e64406163adecf2b5d095fcbc53712d45bf482fba5421c6b514edd33f14f6f47749d6a25b339bf8196693cd2a5615623631b6147454b2ba6fbbb4eb9e6e4c4acc86d239e9acb0ae85d6a75f7df650e56227acd57a285045bb14a02e757bf754f04227ec8af69f85dc19fd1e5d2907a584123a691976e2d81574e58fbac7e3e09109c46b19d8456de56add03bbcf5ee8d5d0c19c21ecd7a51aec8fe06beccf08401110da501b8b52fbf68910691968e5d7eab1693923b40930e946391a1f3bb9b23dcfb1d9bd0b1116d660614f7bd2eb9e96a92cfa73d949c66920caaf0108911dcd03e67c34c09c9e964236d095485aa62184f0678e2758ab048fd0097360ce11ea039fafa804ce365539ea14cd08001004f314002028140a08c4829148244b9351341f14800a7e944280561d0a644992e3304821638c21040000000000408464640c00832741116861160ef583520c89eaca48c290a311b100eebbf0ed8f97dba5aabeb7aa89ef2ac151546f27f34f4089845dd3e5e6bffe22de2be3a5fbe964780a43acbc124d8f7ef48afab13f9e7c6fd1bf33d01832da8e8219aeb5ce9d55dfc5e47e7d7f076938460b69a6210330307f9fc1e076cb20bc5698c434773f54af674ac827dda900d4b77e98d641dbe50b9fb9323c3de092081c15e7fba00a5967bb53c466f3d642d00f6e937e6c32e24eae96f02ae55f32070e17cabdc1ac742dea86469b2f27e580ea486562d0b1c406c3006e4147166603bef11c47feab06d77258f51c8b6d1d81790df809f4de4d82830ecb277ee47fa34e1f2c95383f3299d240e548465fba8aaf81f07b8b2c355acd8bd0b2bfc04b8c993d1247a80c0d1b1f4849cee0e010ddb354c62cf399ad017c4bcab0456c211a0492e2b35d3075e37db033a69f0841d31e75e8a2bce2d27c39a14ccb588bf05790a7648f2fbb9e32d0c13aa31e83c61e7ba77aa088f841af53a85380d2d113242b69eaae5b9a3bf7746804e9cf19e04bebfbf3a7ad19865a77bdb5ce79f82d582b56c52206cf79315f4eb1950e1690847ec5b266930bac6b8f5cc36b5a4efdd950087f1f52a4e576372ad1d1959bc398c96499b8ddc80073cd4ed6b60f4aeae65ba7f2cfb30bc0e82eb2e594997bca9ba84254d6418bd3c58075c0ab211a0d1cd2e47cea33f2512044ab99aaaa0195d66773da7227a0f0181c8588c2cb0e77d1bc0f14313014408ce2a69514eda96b7a86d9178550b916fbeb734c31b42c05966fb49183b5267624b087c8ab83ad4e8f9fc605992e694fbc868085ce2e4cbc33959fae4453fde9416a13427f7b5a7de6ee35ad533b42c51b0246dedd23286f43250fde11b49088a1ddd55fa22abd11869b78c9a6ad2e8a92814ae31d832a2844255b8b857d47c5bcd22e57b805b07b339ec64a16042d881cad0c0e34acfc2df49e2485dfd1accbf0e1702ea59052f57217968bc8816f0d51e474100475e051dadd4f161083e5bddbbcc8aa27b0e5a9cc3c9b308fe523cd54519bbf2bd24e2046ac625e183af2bfa8ae488ed5b5f1a90957e30fcfe862c516a91326cf08ee02a4cb764526eeeb5ae187716e870688f82419eb21a2c098bb9cd06f8ef92f9f3c7901bdfd490546c9dbee1820798c1ccc8b7030d6559b025331a4f1c5c2e2c9a1d1ea489b5f399c17982ef5650325332a76d4215969c16fdf9bb0aa8ec643ab03b38c042e4554d8aa49731429116d2da0c0c9c81878ff17314b5173bcb5261013b7009dafd694441b2f2f9ec2094c6a4a4fa3a9f42a167a118212d877fd4dc230462c0800b76b6d3fc0891aab81229f3fecc0976c886caee64457039d3041c556c44b317c17c2f58ed5bb52572b840d69bf737e65244fe791e36a9ea4416b9565bccf52870e09b4be9e4b102769a3ca9720f9593e4f00214c87d612a3822fa354bf5e212991d4fe58719f5cc9ca5c04dc0482b2d883b24d8587208288dc5c1ca2cfb46b652b6f0c86d9759a5ac3946d8fa82a245438f7a2918d3da21d4706b6a05121a282f693b64281ddb89a2fc858eebea7b786ad928b2113b869144827bb5beb7129fe13677182a9a0d807123d1054db2e6e8d7226d0ce9a04fb92b6655bb4ff4e305ee9be95ee4a3077539cd66181964d8595d1ca491a5b75532f8dd5a5bc3531ee22d66be12f48f9d21e10bf00c4f16ad98da6a26a55dea6a041ce39250c52628c3accb8bd96c1461f325da2fa2f487ec17cb3d00eb1aa9f9635bd1293aa858b34a44e7aa8064965b4f35764dff08e400b4b8d86bab1d8c70ec48f22d3c2266f1902a45f661a48c5f412ca0f797ce584d6b1895f34276bb1c57bc470ac1c6d92ccc42e42bd95204a64a16a1dbdb029bbb210a666c46f2a4a355d77f589cf8b6c46ffd2bc7de3003f84074ffec3868b99a2ef14a2b9e7450c58304c09bd5c63c4d6feb33e1af1423943d8e4329ff3739e4aa9b59da67add0696e05ee42ba4229610d9cd1c93b10c5c816cfcfab846278d376f289726cc7aca1886603d330fe34486dbaf0ac1bbee2b040214195587d1caf930922ae55f7f3644c1939be342c9e98a453af9576da5455f8446f27f059a2eee15451a44281e6b4eba23fb86d70615ee8bafdcf226e08183c4ac04570704c385a9273140b0fa83aeb8cfa7618ca78380c7da78f7296020b8f2e1a981f5afbd616199b32e9a2bc60ce1b8d57cee0625d03ec6b9783353d68d74be81f246c92baa6aa25c7779b57ca6d65926e8c7ca3da66bacfc068aee53dec16a6be44425c2547a33de108ac6c02488b1714a92eaf791fff1317d63211c3a4096d9657f8cd8af0314590db314814ce8ad9c993505450e6ee02bb4a848b44f648ad27fd28e0ef1b9fa59fc6ef822f339e4ebf5868b22b3abe7f3056e531d98c8443c294677d6a1051026152547d3fba0394ca6788a2e3997abcde219501b5f69338e4ce1f9602067aea10c2b63f96c2eca424611933dabdef285a89f46fa0821da13fdaa94fac244f4134d9c990b51baa810cf42c0f305682a54f583121422c95d54c01d89727eaed1af41d2c347a9f15fbf60eb0ca5d2503d883fb4865507c552d44838939bbfb3cfc7d7021866f5c2f401393a6682c7b8c90a49d039ac63bef0afa721d8f44376dad426f20c87d045630658e152f1cad87b8ac2b74fd84aeed5901c1531c9bceb4302d356fb16de48852a6d8f3720e41e4c29b1006da679067ff8ea98e0ea676936906e105d14be34c7919ecb9e50c14a69f2467907219b16bc70858de16dfd594abbe6c87a30627ef0d6231de7c369b1ad3bddef47849ec88eda6e5422667f9479729d5c160b6e4e7298c7f2c6fd58acfbc763f8c2b7a109cc97a8a2eae336c6188b212fef9ff9a87029e22a2ba0414172beeb39e6a7b88abce87c19059cbfa3a47f949f4c3144c1bca172caeb1c3336662fe916f840bbd4642256866113ff12540eeb6e91732ee80a2b4ad1c4de6852e6e5cabbb839807c3bb94da042551c26a34d5365b0da0b7858f8fe7743c0eeae8d396ec6bd2623ee8d655c8e29a8327d7b7f86edbb5bf0304fcfcdba0a1603a23802a2a810845701cdee8cc88ba4a19f9111bde2af6c1aa99d250102921f4cec4653617a4ec40ec738d0e796e8c7d5c7c0059cc84a89de86f2aefa95e06c26b254a3c8fc7264f728b27cf8d30529b608974b8e5937adc26fab12c7502e20913145a9471685f3343bc97d3a251eda78bbc46312637d28accf1c32b89e23d74fadf3da155c7c0e559ef9f85fa609726514c0729edb2becf49a8557d3dd51442a42905d3aea67454319a042b39605af3b10e2dbaa89b96da1fbbb01cd62171f95e438f8ec246e0bb16d2cd47bde2dd812433a631cb4d0cb0a75f79e3489ff17a721f07a1c87c82d4eac82893eca78921087feb9116eceef47990f336a7e44d7c58df0dcd88a943160d7c2ecd0fc3dafeda378d7a18231f74c9c1c740b01274c5566f4ea4e354420b4b25f171fbd1fde9f2f44a402ca49f4e6f14de8c55ea757d11ed58582b0ffb9da45b89d86d773e4fb5d07e32746f96d7ea9f6fcc643f55db4df7bf6849cb90f7c9c377d763df9e8e09c1c3d542244cd8f5c125b21511350964ec4e52e5fa48cce0aabb1d63dfc2b6cc762556295319f912094b48dc7d8080936c4624c70208a404d460bd62b30ca8b1eb65247a02fa2232af534b1a0126236fe3658c1647035e9efbb58f0e98b8ad7093261b90d396043af4a9914db4c0857b67bff6c6e0513711ea2fc538577186184b7dd27ce9ab01c55a6215b9e5684fe55d2ad5ff167409ce32e7fd4f0a574ecec40c1d59b14f49be1dc47fcc38138930281b93d0871a500b6449e4f346f0a4e00c2492d061387e814c4dbab218a6279234bd42e7d7be4495ff297f07930bd0ba4984de6ae2270c91fd208386164f8d7fa1b78c7516c275ac93a6a5b25dd2bf41743d1ea6f72edfb3523ad7f6f86eec298d904954277ad3cd3ff9f776511037098ae4ba0e46281c0884689d72471af6dee97b15a6b4029fc06394ddda28e9861847768c716c3905555918aadbd79907af1d9da35675eb17b9f2dd8f92763161430512748d8f765f94fa9174d887bdf95e7ffcf837a81793e849333ce211420cbd8fa632500c48306f1519c2b169d5e60ea675fc9d99ef761b68dc798afa481b0af705271401098c198005d172110e70eb0f8b5c9315fd60d03172e6f4b0020ff9983f534d73b76208001972fd71c64399ad3406ddc03730bcc0c7d095d0d9e60793470779d2353784518c3aac6ba44e037ce16f633232d60879132651fa263ba2440dfe286b9a9e5744152d1db2f49dc1caf77e5ae255e33fcb1c946a0c283910f5d1c5c8e6a87d78d924045028241c253557903249645cdb14ad2a53dfb54724c73d277373c663472505971fa1c0eb21d49be96cf56a3bb52564b0f731bf884fb7b0032d4f9c6529b27b62c85e0a2ae80987a1ce82a4e863bde905b562511a66d04c8746704a73693b4c44b5511ac588f39135a3b2ea494addb028d8c01dbe21f6b1d45156a9060c83248fb687f29798e080556fa0c54f80babc9e71a615a89bc754d55c5f201dea910993379347bcbe6926c7f5d675e0cfd7e4248552e1e5b9b5b874f9cb7eb6c990de6155ae8bb0b404c3d148335daa2a411c52ef8af1078ed7cf2f8669782a9a5e92dcfafa96faf653e56d0754f2dcdca8d511980cd76242174b53d4ddc7d6a047602d4f1d6e10e3fa094496dfe91a428aa9936aa0935caa8915e06f0b5dab707c49dba6d8dce236f2dee542c82f2d682bc3de0bcffc0e90c374c0424792e0af031ffba7718989cedbaabdd560108db245922c8258540f1327283e26b638869004e45c8cea5944ab0076ac0530a409683b8e95dfa8c111a5e83545db8aa24fae2030bed43d470400af8f5d6d5eb6bf5ecd806be105ebdb35658ee4402d00de4a05da1e88d3c65fdf6c9c11f2f65058b8a42985c44b0205c908f4ca00b6bf519e37fcc7dcc936947f6bccabe9bafecdac8e2af3186c3e883f8b1556fd63513337de77ecd8005210c7d630a6eb4526a5b211263e9142322331b80e9e4106f0c22f3ac303241a4908a636968f14f32f6435f30862c3fb414c11f26784c7aae27b2b6efe620625ea8fdc7a4d90631f51bde1f0360e8f5c30e00e7a7c2abd35401b78e4cb3ba782362b743b03bf2c0a868e4b0f7aead46ef9b604126e283733d8636502938e90fe346ad9c0052d95cd401363c1d296eeb5970aa4a8fa214842d2682123358f8fb309df57da0315e971a46b84d52c76feabfd747baa9e343cc5d13d8cacf1b0ba8d93706fd4486aa902f950624ea9272efd3781216eecf8092da7cb03d9b16afcddb89624011f6a11383b594bbd8bc121425f5f35e9356dcd54c5e10df3b9263638c27409e16c1a191348e5c0e950ed0b1402b7c18719215f2d45bc2463895ad81b81743698c236e188d09f14659d721701a56d010f5fa8ab082784cf9c905fd4e2f7cf82e2c4c3144b81920c454afa8d40f6fa39ba59d8fe4b2b456460370d7f2de45d06952a44d93233f89593d66136c5af58665095de91fa9ed35805c0a6982429e85693d4a01f99a9a9aac940f34b0ffd14ba563a774b2ee9625b32ad29ee41f29e21a4fc3d68ab89e74ebb2b68a1144fc0b9500efa7020d61f1bab27c4c7da4c550a8eaa21e54140fdbfbaa5f9a4d4118c473f166fc8afab900e5044856184fa5e341073480d8821e7e4a5705389e27e947947b400b5449d5930c2253fc31666dc62a1028b749644b805d7f13de130194f3b9dcb0a6b91113838746677c91ceb057fc14b0a8253e57fbec9d2444109f413e57a7d0570293790f1a9a2c0f1fb20eda779d4a8e8d6a12937ae597bfac6fa214f9068ec23004ab893f37243f7715ba845adc7f25f68a4f74a5d15895d464e4d3f0b86193d8058d2bd7e7c5970d7aa3596251ad8219aa75851ac7009cec397864c94724b08f4a602d2e6013d50c8f89abc2b15b0087cb5e8b1919684a858bc49a1c25487d595b2472bbf3a9905c209d9f873da39fb9af54c8a2d799bbe15a070e4a21d629b2bfae7f1c849d83b5857aeee1773f6f25a1e78376902674489a4a387f1ab86c93096f487646294b89968e7e30269a0d6de7e3ad3ccb4e6bc32a12a13f94a959ca0e4a5a369e8ec5c1b6e29bdd1ab14df5d85f805b42297e488947f320db3ea581c8146cf5144318c4b16f56435df4191d4244b1ed91932c59b7aa94463651e6c2fab3aa117c25f7e2ad0ba5555d42d403027264a6108b73f00671f8a0d5ecd92c732cc2719c1d13d7d95d4609b33863acce7aff1289ec196dd88523af591bcdc002c3c216063589f44d5982318e496e56aefa81200c13aeb1daba7e2bf029561f1e000077a5478123d2a73f124172b204ff6f2c1038e29053f3bfac7db47230e07eb5f8fe04b505f62a5d990dc0fb58777f342d2b6590f5e169f856fe1166f265642d85eaa6d531aae41f05e37fe072d4f1e4a853e2a8000440b2ae61ebea575870868c0c1b14be187cd7570b47ea227a21564749ad61f7f03f7b25820ddb5ef164840be718d074e35531fa8e752ef9aeb5103faa603b86341c26678e28774807aa19df69225656b87c23f5235f0f386ddb6b114a79d081b09db08612815c5f860c5cf6aa8ba634f8d30c2f52019e92a58b15d74ea6f3e0646f3971ef7814866f2c5597465160ab57ad0bb63e796b4280bee2f3370d3801aee9eba556f4a4171923f65f08a85544e9c1a9ccfe00d76a753f468ea79fdd267a99721e6957c595bf48607f75a44aba3a702f6683b41fd15a4d63f61ed8518f79c364ef499ad3b40d3856ce8af83ce9bb88073d84b76332fa6f96cbe1462b9ce81b738bc44a29c462f4c519cca02a8b59c9c18fd30c6c34dd9f26f6e38bb9fa6e21dbf174b1ed9e18824da8c03c8e56ca6d84059bada69ed80b0878ee9313021aabdaf974449f90046bc91252a882d6535a8d8b1b8e451e3eb0ff6e80bed3cabe8d677c6b36e8f4f05990e0cc1f08d7b64e91a124bd5a50d932953ab946b1708c31628b8c180ca1efe199e6f380bc7247a8024c93806df792443f485e5b4429ae72c384ae3c1f2ee9f1b79c3c1c1b140f3c5251cfddb2c9d25254626db06b69aba0324a52ce08f949a99a00e193aefcaf74fe304fabf4f5f69deddcf7ce202e25391eb23614cc77a70b071e8075fc2a90d9d9e5c0a028a503228cca0fe3a40a989ebbc1d50ad05a581aed43dc2be83a478ca793186d1307a8613bed014b513cf71571e7d743a31849e91708868b617ed921091d39831d7745482443fcc345fec9dd8865158e2a81fdad2142a6b418076aae06019ac7a2029300d6b174903cc3781ee3fe55458089efba530d5f9df79dceba8d97fac468438c593d72656d3449134603c7f9a2a2474ccc865d37a7579cdfa995f6f73d7ebc57c536dd87209557f122e31a213d575b7e185910e414d4eac13e0b72d612d09ace5e9204407ff9d4997ea86ea34dbe4cf2ae5c242ceaa9a0236c0985b53cbb1818e0651ab55c91cd7f3fa2d3d1fa29933a1848dbb1a0e504b4d39e31c1594b87382db06a5fb2db11860948bd576609446d6fe1a0f63d7136418983fff13293530c3d72c20d2d32aac398aa2eff402d05f2e80b257ca7a2447b4b10982a7337cc4b2f745b55f08400ca47b775f5b9c291ec3faec22c89152fb2bb4aa4bdbaa005aa20c5c2627c8b3f8710d22c241f9c2f6ba42cc045379e50547b2c3eec317356865cb63280b015aa69c57fe4a47723e7bf458fb2f3f87576e7e0d308a1ae6e7b59f1ca0c2283fea221ed3912e364db98317fa8932dba171d8963e70a73359c5ee5b714065c09b5904a0260df806282671e8bb807e7f34fc1bb4cb5c22c269424271a4257da54106c43d88949759e2f8dbb5f22ffdb0f1f63c186788f3765369e85e6b7f11c95ecc70fc5e646be26a9ca67a76cc8c65f34fe00e62adbfeac3958bc0248056a710326451ad51850ff653e2609be4cfe6a4a46a79c221e74e04c33860eca91b7b6444699626b5b173d7ca67079d804b4c30daa98409f4092be3dc3ba1b663b93ad65d02874906eee199ace60939a8480fe6abb19b9fbe9b25a63a89089619668a5b1386ce7d0601b63504279d3f28b929f011ce9ddb0d9b9aa037dfec55ef84ea702432b118c8c639eb58ea64a1795881556f66cddd7b02bf398c823eaf60ebd761ca287bd6ced59050484cfa26b01ed14e2ed9eb675a9009181b63a7be1ff720da6b5ad92cc2e31df85fad0d7a3a3cbcc9d68d03e05cddd7f1d598626ff4984783e924ed140709e9ddcbcf8af03e445777792d8389f782722d795cf857d763c0369c65faeaef6bd7be9453b7852a6d3439fe0794d3055ceeee455bf2bea3ebbbb60946f78eff2a42077ab1ef16dc9736d7c95921d181ac774f0408b14245a4b65adbbd96f9ee809b821804d4d83b75f6e13f7fe65bf800d308e06c3362183874d791ae832cc1804bac6e1ab775693c0eb810956cb87d1ac5a3ade729b84a3f967fce6fa3f6772cd9b380f597a6336c46530e1e60b6dc40d44993be7509e521f1e632995970f1782225264f8dde63c06375233c32e6b2d477ee64d941ee9ac942a906a0d11e035c08ea25316c359b7f14b422a02d93931a411cb79b5b43d34afcee1f3081de4827a23e09fb3e7f68148c67f57d97b36c05dd005a5b3906d48dab055137e8e0fa94eb9f19e463863fb4ebb9b2d771e8ce3fe74b04128669376b7c9ba1871391965067cc871a84b5878188e755948a1ae8902e8c5fb6413c6b332c994f3860d3ebe5941043095d1a5b8d7ca4c9685df4bad3221c1fd0b383c313db637087204cef2367b2ae785b9bdb87c7df19738303c3a1d6f2fd6ec80c6757b694b644cda436a79a317b8c52438124e52e7515986127c5947648322939a8edefccf1c567113119de0e02ff3b6e07e576ed376e84d0351ace88d032ed7dbaba5ffb61204617718b8b95074383ab6fdab3e096082a3f18a402ce3cb1440a626a18f180e47a8b6ba4848b099f02141c187234f25acb6f0b5be4c1369937c5bc51c0f440ca19d87b104b3229040437240911468ad2eb284d8b04581c6169f90f5205c28ac4363ce4bea1485fb73b332c31a638e8072a30482d75c77c9bccc3c0b98fc71d1d586d9857808ed46b2c9cb6191ae889ac5ae00eda6cb9ae5056d16ba70f505e8b4e28017e1db374e511dc052f2f2071976712a41c9db4829f9f471047440c547c4690baf36ab7ac43916dcff523b605bc96b57305e84509f3af7a41f668f38b0b6b2473ec673f4eb598a61de35c330fc9a243f43ec4a282c96480ec7a2918195eaeaa88505eec62c01c43706351116c325af845f6f200bbe70d71f805e94f321b14b6450dab1272388d7172e8b98685e0657d2c50225c23766e69c5e3d9dfbc16e2c00025b99a79fbc19eb2f2ebe5ee0257bc1b50e54517df7602963beb12fd7aa7c59fd1a8186d1bf91f3147eb6e231ab83f8311f618258fa791335900ca75bfb1217aaeeb0410634937c46f7bb8d7acf641902055c7209d7b270c1807f3e9efa87d5ce6ae58fab2008ed58448af169cd71fa75077f19aafda8a9d9af984bbfe0d81415bbdeef6495aa192b2de0983b547ded6b4bdd3c4d523dcd46d32397992021ab9685e580d6cccca1227328d974bda3ac4ad739837333163f334a270e13416a7aea38c8f412c77e600f5dd8ccbbc2576ed3e90226f9702a8dd8e2f3cfbcf2b9083439587e2e1fc1109dff671c0fc5ba589b593de7c7d2c0c68f94511950ebffc1f287d2cfc99a52923e88850457ec22e145b221fd108689f547ae81c5deb20e0f2eabb0a20a8f872af4642a72f33be4d7b7afcd324daa5a7d28f7beabb0a7a9439c5514f1f955ec7b9062cb1fc78e9897d9b2ae47ff27f5b57ee6360ad6c4de368f6191db2c5b079c78f8992b9feb9f4de4de9fd3a5ba37b3a15c9f5f6849655bbe24ae64bdb61684563786b8087ee54ff88498a7faa76afe6f01857ff132bcc7da02b1036a4601ca72d909a8364eb481b82de98daf5536b3f78d05073b2097e12573879546ff06ebb74d1355286dcf31cf58d0de5b3db5235fd6f9a1027b11840fb4471b71efa283049dd441944197c0bc4eed43c19841b6ed815d597ad0e116aa7e537edae194c99e2366aea66c38b9859d2191cd0ff635372f8d9f1d4f2d95dc53b4226c6e6e80b59f2421fdd574153b2e700a01d0ee0b8a171a9304cab5b8c9be0a9b95a9301a5bccd994a62618d4b1bd5696887da621487fdac0b04f1c212159440fab076ed0702372bb61bbb5a8e19b2bcb28a490807721d142f9ffe6072ec895c34f9ed4db3ba01a8dbed7621466b1bd8b548811ab25b043f59309cad0ebdbfd3dc50a85ea7944cd65b0413f7c15f10f385493da45c629c86085e47a2ed156c88a160caee4927a733023741a34cb306ac1d262e248fb2cd2f2fa7f423d606ddb5c142428b01dbef6b0811e1915a941566b5ea4ac555d930e5c7f18bfc6a09fa1117644748d13bc22528b2043e7f1ccc3227ad776335193055aa7489f9ae317b0226fbf12ca78f2815455b4b0a8a4b42acac833f75ec9f85d9b36269ab12b18c6d050e2e40666a82efeea86d0087537d696bf617a9a9309e20fbfba2d03331364537317c690cf0653897e826ef06a8ac1e778a59bede4512c890f0abb991f0e38dbac02da13e76556111aa20290c198fb964d987519474a6a69eb474edb45b8b3d3003c1e537cfcc073c091263131725691be9adebd428ba595a46b0e0b339cd5559914a5ef842390622b9223006df58bf6e9e4e3876c380fa235810a2904c07a42c0ad9de04ff611c39f777e5582db344ea951f240ef54813ee8dde20c426ef8415fa6c37ec88f2e80ba5384fe54316404cbfffb6d2318f4b152ac6dbb61b35ee95f4a69e8f97e2e9dcc190e4361dd5aa13b28262780a870d9b2ae0877c61d0b52854f7a9aa2f50df2f58abb144aa4ff1001ba9d241981d05650fa714c26ae540abda6a3c05acafe90a868422a8c9780809352bec6acdb03a3b0e4c547934a34ebd669b15476392a0f56569fb88145f92ca0482b5cbc6f1b938f61e032b04134a6eb6f71e8cd72ca31df022df1b50c377bc3d760adc9310ceb5cc9e26cbb560092473305bd2ba4ddb9ceb074c0765a68fbde4dcb19495683ad947ece94f6ce03729f29aec6dfd080430f0b6356e3fbc7b6f72ef49b7b26a271f9f140e4410a15a264694a074c03f1c407b9a3ac688a00d2ff4e77137f970248867a4b3206effaf8130d32ae78309339a6841867d4b2ce650362cfe0bd8d39dd183cd9ba5ed9c6f2a37b8ce4a5f14688e60430e90f0b6d04904ad8bd1fbed878876602c0eeecdb3afcdc18032612bbada334dd9984af00a2260f7c80852da07afd50eb2a511ced3cf3d9f49015bdb81f5701b17de6c507eb14291fa330af24db97167592ee3f3178ce306daca1d026f8a80e6c9063e997ceda49d636788f512a80a20cc884b6444f83727055b8d9332b67cd9a462a3cd463a16df90b52cd73d9d0b78824a1049483ac1f4be070f8598f2adfb66462a6274a771d47013035e401a30c3b396e00e4ce0810e3080e3173c8b4efd9f5491f6edcd984f0380c7b0bbabce4a9d7fa414fd7f778b83efa1f8d98c823d39c28580ef1493d4e422f0652f74bf6baaf50bb948edf8461f1d03c6677aeb988c57120282e8993bd3b6062b731706425a9ff88c6ccc4dfea2bc5848bcfaf4af07618258a5e74f2f2e26ada005678e165c70cb51499a1f6a93b77a3df29ce43bbc2c3e5b8f80b817e143e8242db2fee200cef2f391cf4a385abce3c70d2db0b50c40ed3421af233c07d469ece3243e1ba85586036d356844c89d23cae34d9f0f645272a7e3d35e8c95d4e61d58d984afdb305ae5c7cb0c7235c75cf69f13e94c546d7653faa42a8b96eb1ed9710449199755d5e811f04a24a2904da2780ef4644b307083f0342e2d94a09bdd9fae30caeb0462ec279f9e7d68edb719936bf1db5a109cfcd01b981336c0a889b829d11d164d3f7de0d8b65517bf7962a6f477b3ffea2ac8e48ef39aac11250a29c85e4543d7ec923ea703df88de029ecff1ccba39514b6a51bcb29886beb8f61d8689f4ca2d6131478a99ca007010b82edeb42be5ac87e289084070573e471a41b0a42e461caa5fa4a9d654a9e9c576213f4b8038df896e18285010ee88f63951d44df0e16154cb28b65d13eef52c27484076dc234f04fe4728b905e95e985e3c9a3ff945bcd3e2fc25edaefe9ebe92d06b39dc1c70dcd6416d3d7c4664e89f956df8f00d5066c682a6a2ffd22e701176240c2f31739ebf668606c8df384612919dc404c47e06e247bf2c63de75550e20e63bd3ef4469116579d3b707a492c2fa9abe4c04b6e6215b58d57ad19ffeb9460dbb4c75e03d80f36e1eda08ee732ac2ec6584cda886996939b7df815fe3f2642c7bc854e98d04736e48857c17e26da634a7692751bd6c152bd8ccd9e6f2ed9661c350d3bda36710318c402e7053ad49d90ab66768cd5f9097d6d4a5c6ba8e2df418f487ec416c13c8f8b4b311a913e60cd84dbdff83642b3210ffa647e9e0d53c1b96b2217f22ac8d8976b890dfadc636cea54d7b0e05c9a3a5ea9797e463d4adb41bd7260cefb7771c04ab42aa6b93a5058f5951449e7974c0299e596cfffd508449ac524709ae88a64b610952b8de2d4b7dfad3b19149211100b3139df0800294aa183be05b47c17b5673fcf64e33816005f8ca52aaed818ec2700877e3d2b626bec48b6f6a7e3ded29e463b997bcf2801e106cfa3f21b7f054afc3343a9d7e5b8339497d761838b4f15494c1eb5be06bde5f27c0ddd436128d08ad4ac10890bfa3a0a213f77bd9f45856f1e481f1fd2f4927294c88677f82e4e718af82dea323a531e1734377eb47157e136a5a0d0daa259a5e6e65815d0f6e2c75143342c93cefe5dee8ecaa1da097741ffc751a09000381d889f0e09ada69ed3b098d6ae238c78c5047a4a6d5d019867d666c71e43f2aac73a2064620438e541378908afa6ad6078e157f305ba85faa935c661021441ce0f9949cfa91974af8c076a25c4469dacf8b6969871019464aed44e902e36d7281827d1f3dd45d0445541c934b4e50c690430fa335e11e2851215ef47d0b73ab773136b6a9a7b46415f480b59c5034619a5fdf2b1ad21dcedbbc8284a69a1d731eaac09a42bcc5414fb90158221a5454a1a23803a2cad31e480edbb4a50956c607f0bd9f8918c43c17cde051cda88bd8f86cd196c994b8c2246f021319b70c23c1c936db8a93f239c5efe771420f9e422a4a9bafb65cc220882ccfbb9968b55bbcc705d4f90aacb89a6c0aa457951bdb2b6824cf43a322d27143412efb1403c4549b4341cd6bfe740b259f2f2f351c194ca2e35cc987fb44eb2d5e5e0b78fc916985eb55be7a87c3425c53907f57eb9a58ef0b5be63882f9434300bb4a76bebd4f5b5db548f52fe03e9bf827f1c62049a05037fc9c0dd521e12e7cda92be682f1ef460810706d17c4531ed513322f407f026c176f09aa80816e5b97667d60406499812efb931acaba9e349075358e1149907704afd2cc24e648c3dda37810a0a0f0883791ea7f5905d26bc69ae14bc69396f0523ecbf0e2fc9ad9ee265520961a9aeef93ff25cb4be6074f7e0b63ed18cb8bbddfdb46c553049080db3ea28c48c7b0761e2e0cf69f8ef19e3791ea409b60957566172fa126e4b351f85d8b008b3e55092173de157c95bdeb6197390eafc08acef33a6b13932352b7429b8e8b936b55543c93c10024177b01a4f448486102218a1067d81b111645a9fc6769d8cfe9bd7a92cad948acd3285b7b7a3a6faa5113619eea90d66573517f4b0f46722388c43a3a8ae42ebffbe624d6539384590d23411c1a267fd2c48aea686953b7b7520d91597faa5f8e5651b4d429a740405de0e8ff279e877c7c52b3fd15b494ed8e2711769ced026b31e1d1b4ce10b99299076a2c0d055aee0589418aec6d5ef965204dcaa0715f5f19df7a32834f091d5d74ae1e9fe364d5b3c3a30b9c2c132af4197f4cd2af2b1a5676c909877145a7880a7706b4639f9a717d256658d5ea98ad80d2a9f10f0ee6af0c77df857e976e28afb891fddc3e501e98971ad0bb60e16046787d62ff99840d0ca2dfeed7b7b20a11743bdc54056e0719f602796d28ccfd0d19aad755a5db7754281c049f373861738095adc9c34a9a679aa6d7e60c25fcd9a81b4a2753faa9bb5b4796d816b0995e8bd88e32ed2d6aacc4b0e91abf1880db9a03cf13dc1bdb8e9f54d1a16aa6449d73040ce36238f99f421dbf0bf80bdb8e34d8ecd85ae064b0ce0da7a71d375fa37a827d2fb98c4b0843017b86fda25610c83a57a71db1149e58c5ba717f7857df1b932d23dd942713387deb035759c6a04354f440b74a51e5dc73d9d2fc67bdcd3ef790a6e3060c3cedfa613fae1d9cba5eeda3a31d5b335c6f15e41a041e391753b78c6123ba51a74b5273b7f86491e623aee89945bd305c0cd9fa09bcc3d39db29dbc9c8381854c983c3f8758f0a8571955781dba9fe770ada0299d44e70e958e2b8489258d391409c5176d43cd1b7430399ae8d7e7c3466f56b0fadf5cdd979843ac9d2d814a8222132fa6924d3b2833521198c06c19a4c21759a399cdb75560c6b1c74f8ddd75b6089195dcf92e8d0ccc95fae3b9849a27cab9c351a7a4a736b42db47e1a54a02e138237a046e3af512f6e6bca1eb8e8d9d0fca11a4af7b27a84f67cfe06d50bda03adf988ee09d4e3dc25e456f74e87c423a9d3704f5887b35c239a374096f42f56a2d3d221d9db7b67a8c7b50ee0262363107575141a8bcf299ac89ac5ceda05951701f106bfe78d932d97d87650ad386932fbd83166dd854acd277fe28eadf6b5b6b290e227d64fa0cccdf0f555940d6538320aee04ab283aba70cf0b1198bad5f1657980e707c7ade989e1f7a9525fa1efcf292eb6e7054a87f8dc650970bf28e7378ec0fcdcc613da76d3792a4c72d63b9e478bb850471a39dfb688c15a13f16c84a48420a2f5c00ceb100aa68fac2c102b91b7e4c2273c82482934b2fdeb2d893b371c0fb3ee2ae9464b8ec45ec2b6accdc27dcc3c10481bbc0ac268ca59e07fdcc0a6a1c00e11c9edce7953520368e6febc11a6fc3af8089c6d467439ad2628fd9c264184b46338e8123adea9128b832d2f38ae22cf749f3c2447d0cb52e3e780c955bfa7f2f1aba035a357b49b007a9fcc87419ea0f18bce470501c8d1a11ef5111230974758b2fd0283f677990e96f14e20512f5c7510eb6e55023333697956e9b3295e93035a2bd58cf705b58218969ced8ab19a5a68e22bd239233bea31fba332a2d130ef01c121dd442c4cd44f1b31588cfed2925284014304a8296137c46cf45fabf37c67c3a748711347cf2c297fefaeef41b669df13b417d3abd8470b7f15fbd08f103a43a0424460212b30212e36302931961e6066009e86433b07ba512256cf6faba1330752bdbd4cd80a9db8bbe0e90bc598f3ce7ebc67783e1e9ad7e8bf693b73a3adbfc7f842c8ed74b512020e02e48ec7e4f710d43bb57015e646dd39a8e06a3f8d7a6c094ac4c75729c40cd07ac08bfaff6d52c766392e94db9cc36e1f74e121800daff1d47e92322487d456b80272575d94d1d3528bebd16031650300682ed3c66ac7cb9fbcb971e64e4b6ba50e4ee5254af624495b2ae9b4ac3a3572a09760d819eee5e847bef8836e9158a38f73b53d758ba4b136a41d0eaf707ae21a6f1c8e706204da6bb47cb2c1d00919ddaf244908dc409f3c8ab28e220231567300e5f515889d59f14e07a838ef1d2a5674551d75b3c3fb8924c0e53565751702619bb9f7966494d31115c9f583c9044bf32f37b1d60d1a52cddf99c1327827a40230592826bdf0805c7210cb8819045c40e63081e6c63b978b6bca38f035a4007bc700f9d2b2e12e46b25c3875d14fa5b52a30ac29d96996df38a3b6cb7bcfd241617a73f98cdaa96f0fe602b9032c8e44066f6e4a3a3ab1c8eb095aa683c3690068fdbcc8c1d4ae38a3442b2b65a4519c2fcb1f210e262990b0414b3733672d419d1519d21028a0917c3ae3698181656dcd36916abdd796d4e17b74a68eb6308b2075ed5c0361c46aed5e83e400e288be724c92910b27158a3892d58fbcbb103fbcacb4f99615f6b4f353d3fdaa140ebef09719bc0fa00a1ac8ab007a5dd1f711f745007c721116ba0fa6fccd30479320ef0af7252e7d0fa18c98a3b79cb2b872a7254a2d55c846c33c00e5de276a39fe27e5b234c80a22cd5b6a97f599d311d93a632dd24b3d896df9f510ac3fd3b3006e08e978b49fc0f68f479b3becb807d8c7fd167bbedb1a2d860563dc963dcd007aec65b7671771f5ecd547d180f466229135cc80dd9e6d4953623c06c90d4852d3f10b0131d6b640be658f981fbfc9298ef3c549e98dd8308eee4b41d2d9dd59e0d05542178d0e22b3d76eec1060dc2959c539f73a60690a9a6532aa795be9af085df9cdfd30efb72726a6f1bb26ef8d49e6fdf6f694e050356dd209e8ceb11e008544dd48d969118dff3da32ef6046b5f092b12ae879fda2f7be3c700a6100a9acde266bea2f30a9195313f4dc27193f8f2607089005a9842059839d2a0564a5d51adc3492efc557ad3aaa3cce38725b5a8f892b8b1a6aadad659c11d383f05220e9cf17d55a9f9c92d85e13da41ef84fa314833e3d2942baffc7ad9826ca9be6219e3b99e137f8ca57e0d44339c257d2d7fc2bc49fa33377398b4d69f2734f88980ac10b2ef6c83bf6e7f0ba2325526df282f21be8696ff54e5158716d78b0efbc2ed869cdb8f0e31064a6aef4fc9621a8620c4f04fd393b338a94dcd210e5d385b0892d2235d551e2f212422b765799f9eb9ecc22d95103af512b686e11700c7212d474f4aa15e490c3157e0bcdf3bdbf7d4d32388d04b7bea0534e8697c90c2c94d56da7d0bec4f2fb82f6ab47515085543888bfa1315edba96ce9c1580e69399527de9e686495ca5011035bf5d3bedd4a79daf0d27fc0fa71e96f39123456dbccd5a3226d28a6eac25efd81c0d5e8ca35d7e094c3a56d42f56e1aa186519ba69032ce82d0c59fa814653853851e86011de0ead24e5ce95cc34cbadc0635e5eb9bf602d085341e9188830f2fd812dbbefcc00fa96e015334fa97747c7c69ce074018f8855f94c94d27af5a9ac06b5b4563ca010ba1abe1f269046e997cc3a49d6582e9d15332fde53f899f3a6409a2c592f52709afbab91ce1382d80f754eae9119f5b6eb493dc38b53dec9bd28e8aed501845ef6fb7c7417005c5007080b6f1d350464bdd6ca6254041a50c93dd16aae8f08346cef32ade1fb6b3f3f82513f6df375e73d70da3442a49f05ed0810b67b89f51a1d1aa2e061b3049e249db332592abe8b812afe3e49a87e4cafa616b4e1811d0c8528bf4ee0a47acea51a8bb18adce17d778ef5ea80a21efc5e95188d852cc70cf8e5b70c7562a119c8da4716563c251aed796800ac7489fe754d47c1160752d411cd874f8a28a4615281647a738bdc25a23bb3f450a2ab0f82c59ddd77540559b77f0edd4cf49f10371fbf758fde3d4e643488a607002c63655026c578428534a17ace06c288aead74ced8521c2d42e728d8eb8eb03b2f6c1001041f17bc05a3719245c2aaf677b83f135c66750e2e509340dd2169cc85d5a60b9692ba077d297c60e5e0c587b378b124ad9be5180a9788c0842c7c258a3c08957c56e2c6b8168877f718273ba2e147f653653b9715d6cc47bfffe4922e4dfac33819ec75aa765c8af76009a92881ca1b56c3177389686898f4978dae4a7e02dc7745b0818ff131f99d9b2cde206a02537c938bac6fb164eeca0f1fab5c7e1df228a1161418c24f1c06a11de84b2418abe96d0aff61a6de653ae6696a960865010122e4328ad92999525c96150c5be45cb1038dfd6b45b8031643dc8b2226f9f651ee4fc813931d896365baf7d74cb5df2ac1e6bdd16bcd8946e28dbafe87aeb6327744bcc7cd9660c9c3929dad53d0c7d669e917cddcf9e0cd553a8a420f1e69b43b2565a0d5dda63e892efdfdba23aeb9a2d2629967b1e9a225cfbd42955372da30a876e412774e2cb8dd2b04031c2692d0cd49d12fd70dd1aaf6a5802b1c6088711b6ff22d7c0901a29bf57368e4d21003239b9c5325081e8108bfb88d3f19081e6b63fcbace15006a781387ed2e15c37d6bc62172f65acbf978639c5477b539153fab5220260a18eca6be5f87d38c7c166b7b21018818495ea63446aad0cb5b9ad01272723eef3325b85fd93095ee842b149d93a089fd4d42be3116de7bb3e3715baed0405216d4a0c9dd0a09b1b4c3db18f6f2ac494e447c90e1a4995e14d5d4ca39c19ece6a60f7f9f79911f1bb881a105353fd76e9191927f3d98dcd0ed76dea0e8d1a4b4aae1f37c20b85559912fcbed0e59784e2004d626880dbc5bdeb3ed783dda5f1881372e7e50629ba1a91e7699e3e861269e2d5760a467ebcbdc2b010c723ab59a99b2e5fdd5043fcd799e4e7ec022cee369e16435fdc45ac70db1fdb9f37c069eb37289be741c0b2ba56e59c2b67c65ddf8cdc9949aeb88c51559299038a4d2fe00e71b4a8ded5de8e8a23c791a9df2dafb9296de9faaf235a748ed06997b9150f27def334f2cf034534f6e8962117b950448f36ab69ffca1b04b1a5a4e9a21aec3aaa44bb307cd9b20d45ac3e3a8e2061501448f0a33e643e2332cb59520a192c31b6d58d792a980bacaaf6301a86144832660b802c20e19c195f7149483c6a0e3c2c71435513d7a0891f0123570831aa5c958b0b6cce37b1cc3ce6cbb40ee85cba910d9d3e69618afd5b07eb48097051f91928676f0b5eae85a3137d58bf970a896342693f2a668c53a3e53e8cadb995aa02cf7486d2d292246bd57f15c68ea5ebac60b04774ca861021014e9ddd1615af6ca2f7d2212b825c102a3ec17244c1e74226d340a80e47818e8506d817f81aede8ca74d77067d62b1643519704a211632366eec7c1e67bde0bf5061010f4ce72bde1d2512ba562097c5f59a20284065398070733bf865752c1cad25ad0767032a2538150436b1069e5aeb51de4d1b262a9d48c3afc6530c88b8db92a23f9e20175d7b299a481f9cc19a5c2516b8045749c918a1c50994bdc347561204b0c12f8cd656baaee0d95dc428e5d9eee5fc3b8689758c831b042ce2045b2c5ebd6233e761031a31df4a4a78b89a5e3c36927fae37291f22d9bf1b1552cdd888fd8afa04ccfb269600094e98f43bee463c499c47e041da4c14f614b9f644da29a364d3648bb7e84ba25ca63f14bbf78ceb63f821449df5d3a28f3aca05160c5281343f0a012c68ad22105bf4345ec7b8e8be94451ac6547a55419a150628b68835ebd51035284ab32e6cc81555b0691b752a4f888cce34ca3d5dfb8743085d4209bacaacefcd86980be2570f17f73fd9c3782f2fc48671a10fa3f4e7cbc4a23de284cfdf556324aaad585bbe4d817cedf34eb4ef789aed9ca868b16e1211402249e251c538e164328cd94fb252802706033ebb00e1eb1d1150690493dded9cb96df8101d67c59a6b523be655f3f88d4ea6ddacd110386aa952cb6732288aa894dccd3315d9a4c3ad78b0451bb21cd0a87e554f31563b64bcd8ea943f8f5f0a8c4ca15df789eb0fbd575bddc989240792377b4f4fbced983cc0f57d94983b891b449b5da3f0f5be2c62209409a0649ba7052cbba5278d264e8b30bd2ec553b99cef9ea922ab1ec80cb7294008b20ac2b27dbe2c6baf419d3c44c10e897a65d4aa2215853093363b77b12e9d276673216c26c026f15936d4da0fc93f0bdf354fb2ad20fdf8d8cb7f0fb45e310d68fb6ffa04ef0881abd8ed34d30aea1fd32d46c38b4221e09ca9b8fdfdd3e7a7c797d79e77541edd962cfd298d3286ad6511f329dcbfdb93aa77b2e5bb0551d1020ffcf0e432a79db19ba565fb6aa4823ab852cad577c1ba819e7a51e19f6e4e6b804a7e0389b621cdcb99a3429a819d26ab37bd2def07eb46f8d0790dc9951ed560ee90397decd40da40cc074733868d0c0115654c73515f9e26e3baebc671fbd20b1cffbe6613be21aa9c495b2cee5413c717df15d1260e331afcd8a069ed0470ef16d3d0e17dfcbfd79060082c36611cf03cd9b28821d4362a4c85e3fe4ada9669e116c65b104e78815bf0ba01c078df9607a52ec948a01ea953d60a560ce12070464f76f782bfd68fbf25f74347eb7a8e1ad11ebbe4a9008f41675d3421bda058f91b7fdee2b616819d1cb299e384b504156772313b4f466df5262ae6ec6c74b59d0a77ba93679c953684651c032b251ffaa66b8116046d32d3ff9b5f7f5a6da165de489db67694cb54a958e6a46bf06a6ee975f011c0b193d7977dfabfcb6634b122fb042a37f7c600d81aa08750242348ea34bee21e66e78b5960f169ec4d64b9c3667cefe7ff8863c66c02bb3ce4f99a0579dcc76e608c25c61e423cc69e514539ae26a058e3974990af399555135d18073fc4a15fa70854612829c578703c72f6f2f6b7ae18c7186c04d6c5d64c4c7d1b012a3ffd482394bd3296dd108e0032b24fdfdf040ec78b40e17a22b346b6670cef8a096b4ec3b54c738ccd5bb0843de2eda9de087a5e493ce6b1a400a34aad8d9d816088369ab5c039035a3f9be5c4fe0741f2bf02ef56c1b11376ec4196ef69c7ffa9848927baa799ad4c2e179b3b7564158535f617dbc0e41f3020b64488578f5c5ab390941bebff63a7657658d5f37d8c511b890da7501dc190a78a77d283c9975160511275581df70b2daf0a4dd0bf9da27dc0e5e5e7823cf294801fb7a3f0545e73e6c683ca23c87f3128c9f2ddc9b47c4f2a250b5023e2a38d713bb89ecac90831785e862f99c4db0fb1252a88bd9e28aab1a132d7fd113d13af992751dc9b16d2673a416a897598108a6f510736666691d1505a99439dfbb28faa2d604a7b2660baf92781d27883b73c74371993e078ac0fd3edd3789bb0afb9b90c3dab07d20955f54fb92e8fa0b77f9db3282d6b6e98d872da33ba92ad17673b58db2f1b29d4ef8dd8baf8cc0d9bd84c45d96face7bbab4045516e2169fd5c454d5bd521c36547cf7c38b3b9a1259d7637e34bc90e01ef06d63e1c2d1875bebb8fb6973019c13fe2eec9ca33b69af541cf1eb6d08b50b5ccbf571b01065ae6e197205bc5b21291e6fe3ef721fbd2f8ad02c710d586a5713544fcbc17373950f523efe85c2ea92f1c5263c595b025f15f14bcb560a4853b3f760d62ac419c48e8d1f53d95e77e94c47c6b639dbfc98a02801d6605958c2b0aa9ee5bd6395495fd26bd0737831678036d93c48d2d510f77963e3b920335c25ad21001b207e9d90689e1d8a3521e48fbc61e84c3585087db478658157a60519ba08d3daa0cf7889d052930e59d174d93b2c79e601392efa565384852d9e8c35abd7ebae23daa4db4f1a7542422b50fba524a77561400b63198f6a6f0227ce1a4439619798f8b0ed3c737ccbc1d093f57277295bcf449e5083167bd0d31879f531a9036d2489bedb377745b4a667df01839b3dbd47bf641a5ea9f7a1e2144e90ea228aed2aa0fed746bfdf9a1600f581ad440a195e2e12affd2443c7dbd57837a401d5741e6c3a1c733ad25f91e50a927b9b003e468830b2e45340aa014d03497648f7127cfceb24b109b079a3dfc3d5476ecf0e8df51b93496ffe3d1ab7f8f7b427b9c04c6667c8c08026a11483c6cd914dd6279545f1520107c37eae08709fcd5e10295e02fe7286eb5c28fa21bba75c5b2b358eed902aa99cb7c20cbac4269e8a7ddad588c748f1bf2687637a45dcb8054e1bd970d8f6d463e479c90dfc03dccaa83143a0b6b1583bc760b5da97a6d151bba32a64be17f431e3b7a6a9b6562f2c19f3c092008a3bd0046ff59c4837fbb42f4b87fe2a11c2c62057d5176ee58119590ac0c3fd5602e4c1cbd3b3924e3980bd9ba7f23dc7317e80d54ac19324fb99aba8ae5f50975acebe84e0e8eb594a4214bfb43bc03ff8d3fb59f322ee095ac789a591c10bc3a88d0cccc700affae91f2b2074b45fcb3ec29760d559aa005241881e0a96ebb26aa7a785f00971b94c61207c273e2212da54f1bbe3dc1a8df8e15b1c263cde9ffa1bac3a5714a1d6ecddaaad9bd442f9a9ac2a832027f42578ae286a271b5a150ce91e7ec1f7b3db51898575e29d00b33573a1de75ca24870e17cb3c694b34c80d9427ae7a3f88456c99d108187f20b3476f9a9d9e848c92534679f15ef201f90d97d88701949934767348605c290c3a71b3edff2ce2c1baa183680e11dabbdf13719d8ab2825c351d2ddd87e8271d8fc5fce424852aae6d96f05786a84bcb666685c6d34e86cf471fe738ed83bb019e7ae4a6d4d6bb0d972d7f2a96fa366801efd86092fc1be779e19e33a4bacf5e421b1d3d321238c6b1acb9d1e886dd501494d160fc924fed3ef7a92c5a059d37b3877a71f17301378bdb36141b5a8270a799a148c9bd0684e941a82ca7736745b7ecab2215610900002696a40f26f20e0ace8b96e376c1b0d803ba342cc23a5d46c828a9230a656bedabed30c17da92b47a913bcde1723f83aabb8253ae39c7d3e1821635a2129fda193a921a9885d46d82528c5f6abeb43fa43ce35478e0ed777b24589a746a0281d1e887a46d7675da5c6a7599bb1ade105731e2f49224b7511ebb4176213f14f3df55033f653d0a5acbbc095e0a6b953d002a36d802fd1f675f2da207ae5b9a7e34bcb3de6cc8a723c89b95374765580ec2e196302eadc44f8ad26f372a0de67b231a7775ac4a4cb94f6d4c84ed6f78619711622b92cb319dfb986aecdc94d74ccd40abb5e110b766530c38a86f874dddaeaf5bace0031473ba298d058a10f6f85e4246e5e04cb5222819ba5d2bcd33b7531c3260b0a0243f1314c80c44b9beb549af8df61dc166091c376768b8b657b71eadbef3a29a4e2f1d39c76eb18c7d39b14cc86c17ecc51dda2bad370176872a09a473b909a225a64698bb0edd31b0232fd1e457ecac9a090fa7b81cb084a39f9c20476d9f41ab4cd53d7335107958e0202088625c01665ae7a6df2c202b24008c4c80f2c42c6df55f98678952f1c84263854a6eed262509805cd04375b2ff4a6e1847cb316e446f63206bcb15c6dab3f5fca29e2ed4453feedc8093e8660a50694c8f5fdc755cfff2a67c931faa02ad037f2a42a63469d2be4089c0691250177d926520d928efcc2b2f1385c6dd54186a5b38d439a3c92e65f8efe5a650c77afd04f420884ab0fb47f85981a1fba4d4080ac77023cfecc50f0ca10f237a5e9aa9cb327331cdaed4292291bbb1077a4eb53e74238506f6a138c590d72a8ee01e2aa81f7cd9b99c0d440d801cfdd3af49ffabc005a1322ceeb7061732e5b298353d0e43cb5d4bfd325b23ab716fccb2cbe24eadf386c94544cc15a2963f2246d43307d1b7564045df48f7012330b9dda73304cc30a9e69ac3034cbf706154606b7f8a9ae33fdd01d6b8137eb3cc93896fce55bde7c2c533a2b771abda037e7b7b30e5b4c5c8279828165d04280393d1b4c66669edd00c22c9c9e62d617eb15fd6a176d50c3beef28ceed7b0b2f417526020ca74bb097e8569a2f13344774b27cc2f3c98d8e9a941fd0c9f9492fcdba03c736011f41b4f991ab5b632ff2a074ef3d3be4cc9400d6da53bd29397721755535cfe756b7b6b857246110fef469c6a8a956503903e6a16a62be0528a11eaaea281e87b1b25310b2561d00e426c1a99105059bda5ae13e2f2f6a9c0c0d618673be0c1a21a6ecae0b2e256b5347667d76de9cede6a5165785096d9990b5303fe8052411d1c1f792304b5439ee54f3ed3d7993c7c180dd7821ec5b3afa8a3939e15443b4aa5dc51c41722e7888976cad0ada1cea84fc91b1316dcc57e64b35067a87989fb977d389669835d75c66994faeda308d925bf4020f0708c59367e8708cef8dd60716d906d8222b1413344a3914661d9f6a102b854f0c70ab581d7f729378b6a8aceff40e2fba3c508c79e253d274118724a48f89a975f0c9236e88423f5cfadcbd4802bea33e1f9e460cafe3ef338ad01abf62d703154f39da9671e07e1be5067ef28008116a15105aeb06f9bf6e8d0628bcb044d98d7dc80ac0309d51160bb7661e922e13163b9933252a8d660e081c5e2cc900c805ee925ac65bed3e90597a2c76116140ca96c2e6c27e0f81076d17ec9624e499f285bd377cf011cad5a5aeefca41accd04d9c880ea2ee302e3f19f507cff23ab62ae880809eeed3c16d92a3a781b90673444419fc208a989e5f313a082cdf0cc7dde6c4c288e1c6fe5afe2b1af73097cf18d2706ffb63205e83a7decadedcca952bb4ee80498b28bc2bf070e517db484bb00f62b0c0a09cf2f40276e677c340143678d6a9317bada3c4b803a8baa0a04711b48849a7eed0b7efb4ae85fd754da9585c8bcbc8054bdfb92cbce2243ffdd48274fc030b1c29034b4e5901c0a08fb4194c4188b53ef327cd7916f5ab23cf1858b0c5ebd768cd25a6ee0bd370f6550fd0a2fde29ba6e03792d1dbf244526a43a667b79d2a9ab8b761a2277b994a6679a64b47b1b9f2e6237ad3af9e93bc878062f7cc3d0195499003910a43100cd6ccb892ba06f0cb08dda2e88bcc1365a35caa2d8b30da0f64737b5f0b30c5b8cf12e55dacf74245f3c5fe06961cbf19c3051f5f996af418a5992cfad79d98d1fd5edf97bd0f4d8757dd7b24be89a5a928b858be1d39bbe827b5f2862c759b9a1bd7539e74e0004d2a524cc1694c23cbc6c26ed5450ac931ce69ed42d47ae9ea486101389f0a5a275546f703c3c5477708c819d6fcd9ef4dbc8ae06d60c8c56ab3344556d819dfac413ab10fd72ccb59c3d27099ee6aa53bee74eac49389e76e0771c46b8f9a477cbd804301b6ba363ce414fa6e671f028be24abbb96c0c8b981a43468294a73b5f210220f64e8f6810305d49b15ac9b6525b206b04d6bc51cd703d61f5f09ba5f28f4cf0bec0e0a5290c5fa1dffdbb6bd616f82922b89aed69b4e48a0a3c35bd2b2d8f218ffd7a2628e8fbde9abb77960e9d9204ff0e6210b371f182b95d3239e95654b56825d84f3b4d3a4b2560deb842b416487ca6cb39f5f8ac60d6547f3bc63b76494bd5925dc3a8964ec4953228d206091d3b9c9de167ddc874425de13e0bed0661eb4978cda6c37fdfb0889b0f40477bc6609bdc6498a287638282d4ba572bd556c33c9d392f78de47c526d4eae99f0fbbb4c39618eaaa4368ce521c6015e98aeccee161eb704865785efef21fa834ad8a0c70c621e5aafb34e64ec4e820397ede98da46cf193ad028b23c36bba4bae7bc05fa7965045c756db0437981c5a223b4f1c1122b9e23d63b47c5c5030b0368caa7fe647047500ebf57064a7c2aac30f54d56444d51cd79a60edb61838a5a7b97645508a4c4a8b53a4699780bb1ba501ec1553ba81878d3826d80c58e9e3b1248a70e502fd051f4c8e74560f68d3dd01a3fded0014015ecec41c14ad087a6e17a6792c00e1175c6d34762b33fc3e6089bc3ac4867194e8bca0e0af96fb6a55d1508c81530e83d22e40e9e012079782d3d091bdac14a01deaca339d02e439a5d41458cf537341eeec09f6b50b7baaac9b784adacd03fbb49572d61bd3898281326cd65602ed78ced9c29091b3e8fa2a99357c72d7d292afdcf140a65e4bb983cb227e313140387fd63c33e19dcd7cadc4e98dc09fb86bfd54c19dce411158ed501e249254b1769789d757114e1a7650dd2f355079fb645e3a983b51845f978fd35760324461a5d780372c76f46569fc2376eea0480b9ba85b9fd590c7ef85b99e14ebb00da2aaaa4f5217fb9d8aa4a25cb2701ca61dd2f63d06e00938df1d99614f5f11acfa66491fc10e5e97aaf2d98d235ded627ef11f785db2032efd1ecc423bbfc701b824db20cd187dd1f3ed1f33af5bce0139f3b80cf9abf17d9e72b715c5c950c2863a79dbac3cd5f2126920ea819910235fcdefc9ebdaed707b0a3ffc4a08eb577bb8638f5126c2a55da4206c6d1a88e21b7807b756cfab4530930ed88322ef5401e921554cd5739973d0bbf6ee39d1e4d761bcd28e2dedec2768ec1d5c7fa81bc791875c2e548f0077582283da7a4c396930b67a257dc5fbee96cb5a02a8675d874d3aa80000bc5b51f21aa1fe05ed3dfdc567ff0f3f059a17642820f0517a0e935f6a959fcf8a0794894430f48975814bb6e1d1b0a5c27e3135fd66206568e3c1943c6828f99258f8b0765eb3655fce637312cbc8a2d6a744d4585cb93d0051a6613a9e867358a910f4a25c74d78dbf0c1ba8a76ebf993bac6420a7d4f21aac816193d73f9174951f2a66a59a493c98b9a9bbfff491c48b04b0b1ece90d7d4a282671875b5210c71c606f11ffdea4cddf6fcbde1c91bd709902843de925b05206a88b8daf5379ec3d4b8f427646fa830cace31b1449984d84f60e38401adfa645f2f25269cccebfb1625481c85c3a582edd6779be6aa574b0091c2e113428a0a1513e6dd2ede84e4c9e7a35be041d24dd87dea0873404da0743a626db2037261d60335f199c4c6bb464b950c2e4d4d47d589f2e45bd72da3ee43e68b45980b6d43811c36b3c43180b3f00d65b7768392f3f2212d98fb47210220e72a782364590773e85c038ade33abe0c0a2adb588bbec2b0001e4d85c01706bd3b9432cc37c538b59dd27ab87b98eaaff258dca6ce3898f92a5d8de7b8289352a3a6e18aa94b3e9ad3975da9c6ec87aafc65dfc3348d60ec01096d3d101c500e7f6a3de13ee86f7295158a1681acd89d4f8cfb0ffe0148e95735251732cb00782e16f7f8d3879a422cdc7d164e569036470fc26bf8cc87f6d71babd00d36023254cd61cef55b05a68708bb29b8cf050ce6bd4e623dbef99c41e9c713181c0735414d6e968e5a5bbf86e054479c2da1bee45dfdfb1dbadde15c19b3654b1ffe106f9755540b93cf2e525bedbb7c1ec040a566873d2f2851412be23c5c004e5421dc5748f40a0b1dedf6afd13710de2ed083f2062208ab140d16ae6954c5a9a975ad0f7aaf5b9bd61e22f6162b2dca80b068fd0dadce021d8c2c77f7570179b227305af9863bf444d926fa0ce3f2ba11e06d92e8bd10930cf0f1aa38ab808a2f0edb96366e53cec5641e40967a07fd2468b86cf9675ffc32a6b9db4febcf20506e3c17ff840c690c878f42c55e0c806229b52aa52e0459a02fe0004fd8da6bf02625f0a4d255810a4744153129ed48ddf753dce854ece7d7c3ab9c208dd77e97e14945770de119773b377653d5a450da89da1b79533a7e54720742ac84e61c3c8694d8a674ca00f457f4abc984c8f803e269807eb4aae2c9754b971aa47d515c4c0d80bf94d94cfdbbc295bded97576972f029b109b8ea141715a61c1b29186b147c876a6679040166ca151b4fb327af27f4804cafa150d38baa289600426e953ff764f3c02c8be82ce33db3e02ab092312ab90b0e1666fdc38853f92544041918adae6275a839759628dcd272e28282abecb293496fd1357d50a42cb1dabe8e1b92ce6b5053682ddcf48bf26649b30bf3b7874eafbb87e7098cd100116d335de0bffd4a1871a286030c3936fde911574faa2931796cae18cf186bbcb75300b39cf0651b3686192a68b58adddf4306650f2f132da808a280d9b79c13b236258a7999faeb92d2da232bcdcb38ed4c907861a7eaaae962238951fad84639846b384baa96398699505924b7f8c52c6d5ebac4163c5caff9a1dff0d3db6659191f190be88fc1e51685be974d131e0b94130ac10129e2c3ed30a0263d1acc07e15ec2eeee853779633d2ca27b1cc7594613244efe5655dae624e626262609895da485ab235af6e461a80261c650facfd2595640c61e0314cffbaa15aa26e2b9ce859da38d67937a876bcbb11c1c611f6c43e465504f6f388f06392c4878a3b1aee33210e22ef395161315336e66673ec8bf61357bbbfd81b5d3e83139c6d011cc5034a9c12855b30145ea503552ac7a6388729f01869d25a7e5201057f88646e3604706b85317d5b1fc2fec13a7ac2a2cfa32cf438b5421b46e3524cfc1a72d57c6e8ad14be18c5813b791acee23d0dc0bf9c3ca8d6dad2464ef4db6dc52ca94640a38082c0866082de4363fb4137bceca677badf3d95efb8c68bfc5252108c4567dee5888add3a7729bba2545b9f26123bee431b436eec84bf5b9b5a2fe2de4630393fae4f5cb8564a0d8bf33d6c886d6e80ab9bbfb74ead2ddddddddddddddfd2393e77852075d8f5fe700f97de472dd2df2fc56aa1bc395f1c17e8d9cb32d10f272bc83ba6e33a8a27966d6e943ad5f6badb7d76afd424dd3342dceae47abcfd3b56a9ecc32599f99fbb69bb5b2f7ae47eb18503f7e195df96890af4c131b24fb5a4862fb435ee22624b6214777dee8ad1cc09f7d5fbf6c9b38a73eb9f3e36b7eadd6aa54ffe0dc9ea8e6575b55f655e0e380ac84a333e79c40dc663e4f1b455883f346127b44851224424a902041220414842426041413021202fa22e41202faf22586c3171511623874b9dcf5e0180e5f6e7f21917e215e8ee1e0c5c52194b13bb8a8437efb4cdb481d57723976c4745597634737dc03a0ae87168675f84b19393f7a9907ba8d7c2eee2000eb902f0d70e587a82bdf93589d1c6c7cdaa0b41f75e64f67060df6c7eadca4f945ec882f9795b81c3bc2e86eae63431d3376b974ab8b6ec8ddd032d8af8377fcbdc76952c671ccca11ce37cb8ad1ed4fc147b354b79110c5ed9fe99918bf55fc7889c4cb23ded8dd28772c906685d647059a35b15c8e1d01bbfd29d8da5dfc5e8861dc1762184c6c58e714b124bef8521796660fb322ff9ee467de905a330ff5d34b3df5603acac5783ede0a9d4283fd46b83ff9c029f280094117caeac7e955affa7e5adbe984021bb2d20478e70ee103bee1db0f24eeb8432cb10ebefd146056f7fd16e00cf0067847fbfe2091056609c1c25148f101d66204862ba668c99fdbe4a32b2fc79a1071e7d48edad50406b7fbcdb7cedb8c1aa6c4458a4d2bac6d12c5ed2296068f62e2d151b44193e5d2361d973ec565bf7930cc703396e33c79c2c186b1cbf46e30b17dd460bb8059436050dd593f8b01e79c92602678877ecf9b8ccbba1edb557acc48fd66793ad575337ec68cefbcd0de1933be087b81bf68d44718ecd7bc182f7ee9ff00d3c03b361e350b4bb326131c6b8225b6c2c632437003a12eb1bb7922881151451037c6a34d60218592ab790bb81eb9441b85e508f329cd92b7df8d7887af1b1177f49d2ff3fd6dd4569a1503e9bad66d04261c55397008d347a2fc50856d5857e96f2b71471fb972fb6396283b145d21a568075eb4b6975dcfb665300f63616e2ac6773166fac8d562cc748f42cd9fde1029f3acc4f54fc68b585a60c3d8e50b8d3bb808ef44d890f885f676b5e2a33111a2257f9be132d4d3b8a3461d7dc46d1d6117e136eea85fc320eae8efcfe80832325d4ff6960ad78ae2b2af610d8b3b88e09dfafded02666d1f37d831e09bfecceb17b00e244a62743d6662743de20e6670dd658ff26050ddcdd6a6c2a06d16ccf7fb111658c31aacd211d535acab34ac6fb05864743d984946d7839fd864409cec63ff842c8c7786f098cfe3678621100dddec0bdbe876371111ec5f753d4d856ffa65e73bd850756b743d2294bb3df5f8cea83f63d5f588773271e70feefc6080c1c240f3274fbee6c95bbded665e5feac5af7f8cace857fad90665c3fadba8bf8ffad926861db4b475f5b248b5edaf38f3f9529c1370b02b07e0b8f1e7c781f87ff9f20de3b762c0bbf4ffdb35110459f407364c4184ebb2d57ea484cb31a123ee2685ca0661f1040c28320455d19483b9c4132a55cea8685401b81c5362e59e6e683f063ea3a289c1090db800594114842dac904351159372c455ddd0be6c26624a7a60c2e598121f5cee72ac061fbae8bba8073e2ac1882bdaa4334a296bd044e304171f582d36a0c4924062c5432c0998512c8914d020892591432c0914c4ae8471e7e5d8952364d30436a4ac74f0821a42a0795179054eb4b166b566ab15d8ed72ec0a173fb03155ac92589927a8d43882ad5194b0339763577658c97025681584edbcd03cb1858d2956e6720c091d9cc076976348c8a045a78c37c68876c82ec79070e2fae5181258283711566a48e9818b295d5c495a52e286966b6211d7f58f21eba2e2817c315d771aa2aebb6b11da80a1f7aa90c6f50f6d0813f3576ef8718925e444676777f7ef9823f3fe9177f843011460e63bc5d490f9f87b1b6c285ff2e539de645f3337bef42618771cae7fd10518bc937a7fa62e4bc0473c8ceb6f9d56b7d65afbb541fbcc37ed45cf9750daed1bbef16e9f6e4c8deab2ad85b1714d982d4951f96993a5bf716cff56f46b88ada255f63efead15fd1ff9fc9d7d2cc4f7f7893f45f4f3e197ff13dfffa7687e3ef2e31fff68a0c0c6e70f411b3cb0b6237f3f8ee7644b6dc4c635614dba99a4ade9fdfc682fff6645fdd2fb91affd46df87fea4dfaa257ded7f741fb76693b6ea2712ef0ae67deeaaffa7fbf99ab7ea6f05f3f9d09fee7fe8cbff29aa9f4ff7f37fe453e971abe3e4b7b6ca850de3908f93d73d7750b4e7e9cfbacf4ebf7ddcb8f8438c45442a31cacd22122a4b21cbbaeca5900a30cbca42c6e2248566d5edb3d7f11c0e02dc02024afde981eca3b27fb94df6d68b436e937deae46559f63792d89e150ba7a7ff43fbf9b1fb565de5b7cabe95bd4a0796fb56bd7d54fbf93fa7efc77cf9f2fbd13e769bae99fcec335b932e03a05d6b424a3ab3af524a29a5ac32939a94524a29a59435934fa794d20e21a510293b0a1736ac5c9b6cc84d2a1dd87e9c205ffe0b1b7252bfbf7b0ebf579710b6162b7eb3f6a78fa7a1bb49615fe01c0e126d88472e6523501d8f866a35a3d446b1b4bad0ac7045a459610d1a21cd8ad107907fbf3ffd15efcca75f8377641d8a2da1b859ca9294e070b0a18ca626dea974be671fde5042962024a34946d3cc4a10a2edc39dcfbfa97060430ca8702085e49c3f6796942595209425dd0cb16d2ace5a19696447399373599a31f4b71bce7af2b51384ece972eca5824b7f1b0007e3c98ff1e2957139f60abaf4371d9c8c277f3b41c8c25c8ef100c6a5bf11806b57bf663c59e3728c872a38cb32a7120615c270635364f2b8412f2671d9907af4e0cb654380c1c0f682acc41a2ccde558932537e42e61cbf8a271d110e2005c5c753dfcf6176111e6393de5898d5188ee570c6ea472fd2312a05707848dff4aa23060d793c38b9d5962a2e50e9177bbe1e04da1811a74236d0384e43a9742e7700b74b93ac805e6c0d18183d3f5d0fe243500a76a2ae2393c6ee35f234c8ba5ef2a80010cd0f56811499236b3d4a404378c3056773a699595c3e5743ddb7711dcdce595a34291efc2e3392ab04d7347d917b212d719d5922f17bc1c5b92c3dd18c6460c2a8ce1ca2fd24f5d4586c48faee82ad220839d14d3d1d583ea9bc5dd6b3de7a7dfa7bf1504b86569135bf030c58889252de93221a855dd865bed710ae5b4b0fdaa06b71a86f55bc216395515763ea5433eb28f31c638839032b66bd9b826c4e9c8858d992acef7c9628bfeffd49f1f0bfed9fbf84f51fc7efcb3fa55ffc9fc634b4545c4b162e31a2925c0371208dff0cb29e5945a56f8818d1fd63cad32ce297d4ee9f3884d328b67ac2d6fc7bf8f833b1f8268e366796450324fcf020c04124ed5fe6bc01c359f95e0068e35c90df535941579e162c1164e5081720512d38926443f4c22212950a8d8208c2324a108b3891cf0c09170749ae54857eaa0c3959f42b33a46ca2ec77440d284aa66b56657d818976349c08825c1a2d9b81c4b9203f72314c817142b9a0d508a625bc2689cb62109168d02467021f1c40d9c20210bf98a2591a2b3976349aac49244c9418b84426528f262fd29032ac7ae47cf996b7bb0ad7cfae9d3cfc8ca871a893e5821d4a21f43ab3f86d68c23967f8b46e20caf18512b9342f889cb31295f9aacfcadd91b05a5b9a9bf95f4f7a9dff185fc684f3f3efbc7427f7d9ffe2a3f1ffadafff457ed03e23f60a4c27ef47b9c2412c4232396586af56fb27221c47318477b45d50a1784c48fffe0e3e01d4e496183348b46577f8c2fa4bdd5fc7c04719bf8dc926962817c3e6e24b136786083c4e74e088dcbdfaa435ec3566db0fc5bec8f46c5314689bacd916396a88c6eb1b99a498eedd967df5b61e505ae8b80cbb11c9a6e95a65b85e9c618b5dcf81be562d7c339c10410ae566dc26eb1f2b99b80fc2a03cbd375a60636fccb367e822c40e8c16d17ae7fcf6c5f133ffe16b988233364ffaad89d4eb1714db831142a30e81f4f10c4a02fc9edb9ad7b6e698ffa1fa7efbe9fee4f8ffa7e8a7cba3ffd0feab5a7950b3b23f3a9efd275e60ba52bfb6462befac5962b31b32ba552dd9d8592f5ba8bdb04c1dc871c65a4516eb57a08ba05b81cdbc186bbc99c1902e0eea81f7aaee48a3afcdbb73815ae0319aebf7425248b241b8c2d2d245375c2c66fcf2f773db5ef96061da6014d51f852330571810bd21bb7c5662ab2a13310f7a707ea7e7325f725b76192691287e6f3b40f2030b7f1a5a51bfa1275a51b45d8303a09c23bed04157db654c7e3747df08d7fcd62a3e5525234aba37f6bd13d61bbe9c6cb469894725d02d1653a93e7683d5cf701a8894ac8063135d32acaea51beb8310261e51683dcc65f0bbee98f9d0f1591ed3c4ad706f3290da53a2fb6506c135f69a9eb7ac05d5ccfc295988498b4bc1a14c286aee44a414e969a15ba16d7e2efa78fd53abd0fab755ac567b54edf2a7e2b1fa78700b74eff437b6e9d3e23453ea7d73e2345e18f1b4b0cb5645000d0518b045e43524b7b0fcc5c28daf703fae973af21a9757aed43550e271db7f13f0189e5967f108f40de3193fb174ea7df3e32da597417ae3682cb8fb89ac995aebb92e49bf8d926b44d1c54d86de44fffe9ddfb29f2e93f7d3ffeb39dce39273d6573ce5967464fed168a0d698080ead307d2fe5473f282b88d7ccd13e236f2ab74c934b16083f2a56c75f7b422aee2f753e453bf55fcece76bffb38adf8a85faf47f64943ffa47b9699ec599cecdea361ea485dadd48704e9a4acc42b98818632b514afba80ad06d286ac3f97452f4c1a3f8b25f88d3e552a4f8e2a3a41642b249211f6d1de4ec4ebbd3e743fb1c286d262c9554fa19fdd8397d2b857e379266e150d241b13fca7789c36388ae01b1714da851f600d09ec5a58437d3f526201e9b3c07003e203bbd5149c3d526a831be3a28b2604872f2b469db4f2fb6986bd41c155f1d145f1d149db48ddb00893b2213d6d103dff8873d7bfa5f20e85d547ed2b4edc431a70ac3f6e0dbdd871d543310ecb6145bda40bc07832934cf00749b1518f4ef826dfc5d4d4a66ba0e8a4a5439bf756cd203b3647c601610f1d585f12593d199e88ea2cfd35f37d3411e6d824e8832d4e78b4e366d7bff94a6bdfc1fdacbefc7f6f303e236dc4beee7fb4f91cf7cee7fe49fb8557c9fd3cbf7e156f163e1f4f27f9c7e703fbfd844e4364436e65d7eec4e42c57c4de4d57e5f6c3591bb144dc55b89eb3e55bd2453fe28df98ec141b3651189ba634ccdfb909480b9ea3bd73436ef00106c1085848dce11375f8abfc3718dbf5d4b7311c8c0ccbd815d8da813e5ab8ed14c3b1779908d79b18f40f695c209e233f4fb152cef5a79228a883e01d195c29dc430869a2b86305245cf73ee27adf2c7e16a3bb472a41f1c5370e44ac425688f3c67febd98d8c43b5a548029999d0c5b6a5545e545e545e5cbc7339572b545d7eb0f3c93e225d0f5b48f251bb78f8c67ffee046307fa9dad5419ee330a3a346eaa476355337751777a9bc55ae729b49e9b7aa5cbbe8cbea477407db10ce75e9734d38856e73d4e32ba2f024dee98cb3419494b9f7efa1168a5cacf5fa44b791494bd7dfdddddd41460275ea7307c4573edba3e2f6ad7c4ebffdf619e1bec8145fc4f8c59458a63c82bf2b115ba28083d32e3d4783a083389dc44a52874e29bd09559515a65a2b3b899b380ec10487a303fb41268625328822031f6cb1a48a1e5a130a2a35c8dc168a5990500947dcb81135ab4ed18c8ee4cb04372a6d895c2293092d086ada820623287d69c5f984965b91c46f25af1e2ac18b1b8dda4a636956eae3371213b1e5a65ea6522917fc70533f937a54d793427dd7f5a03a226ed89ab8dbe9b5aee7f45d8d0a13168d2a335815562bd42e7d8e9c0333c51033601b5c17228ceb588408c26b48bab2936e2a9e6490454a6aa59452265ff8d0851523c078d042e512aa512a850797524ae91769b1802ba358154d91149746f9a2dacad96953f4a40261e7153aa5091db24ca142e889295920790236e50b275994aa0ccda868aa162cb8c880062208a18619625043122e9ae00451c58611b64eb1a1c5662c88d9181d5220c5861bdaa78194233808028c2cb8b0e1b2f5722c082c7a08622908a51a304714a624524a99a2dc16e7c6b5dc3ae79074fcc4793edc26fe5653eb8e9a3ab5d7a9b1490028af53774a9da290e5f01305756a90ee092580f24eadbe74f9d5eb3b276ad2a9d5aff5a3a93a3aa9c9f5298b39e00c9d150455d2e53ba5965aa753825f633cdd96adb5a76593b2a5d6b17677f7e51b2b259573764bdadd3d758eec276dea93d25e29ab0a6ec3b55a3be7d7737e875ef7ec9e3566f4e3d79df1dfbeddbc69347eb03d7fe59cecf90b99993f06dd86a78c2e7bce39416f4e9292ce3929a81333431336be649e9325389b6621a5fc764925cb8cce989473ce29635266747a91199d313a259d5ee8cce88cc98cce98f4e245c6a4cce8f422333a63566c5c9335a8a1983394d775b74bca56dbb66d93727eb41fa30cb76316e79c3493432e21508230fdac9ab352a360194b7842cca6131bd0f50202c587958d3a191a7272fb23e7f288e5e57a655cd6f540f9e7d1d1d1c1526bd7a3afffa972272dbb3ce4361d5d51477f386d07a51ea1c6212357dc118b601dfd5aa238826ffafd8b46d18872e4b8d43337b051e86e29f627622e8e0e4f1237def82aace003a4852042884c70e313894031a88811284edc8c89aa803b635082ee9c50dc39a56cd601aeb760c97567aedcf544a19b45a902953cba2ab06229a596524a691231232b88b890928215d02c94d2076780e3caaff239166c41715061410b6c8c7832c4002e8d3da9e2d22c97beec7a28cc86f6698ec7215cbac4a55f393ba3a2f91a30070e18973e0acd8a355cfa3a09e0494185157c005dfa3ef48154a0852a97be069a75baf483b820e4caed2e8df900c5a56fa459395c592eb571696c0809489ae542ae4b3f2a6996bc947e7412fbe18a4b3f3ea1b1151871e9eb00b6c3a5fcc4a531207870e9472bf4a88582684229fd998fb965b34a880289246aad3827231c322a4a9a1327a05486ea143ccca62c0b1b885230841e30201d8870f1b0438f2198622a9872430f2260561565a9d619158d9d891135ddd07e4525c1612cad695a1134ec2085e59eaca85819180e6860420a1a686023091ab6dc1e223a65e31031b9f2ca1a94887658825bce34e835c40975aa4a05b6544042eaee963f1f47c75a221b398e878dc612fb4d55fdf9f40b3f1ee99d76b0527e2a3438a7cf6ccea99a61810df988d52f7f7e4d2fa07f569c66f14f14ee9c2f3f9e560a6d335f060616bcb144c53b2b1ef1d2f9d673e6cce2060d6c46bfc05200a359e471ba3772b8a1845c21f3716389e59700e7d4ed359b8c05153c632a42eea2729e93d602fbfe43dcc51573f282e1d8147342e54b0c99cb03b84c882797be0a4cf8e0f2713e62c9b82127b5389af1c47a78c5b8de31c000b7396e47c537d917d297bf79d66d321ef4abf7b44776bddc75a4726382d2586239503fdb9c3f0e1099b7be84c0e90badf3f62c68cfe31aad59bdb2250303abbab1c4c6f7d95e36aed9b84f2b16e8f7fff0fab7ffe1cf7dfff6dbbbc7ade4af5ee8cb7715ff14396fd5dabc55fc7e6ed5ec79fa74e43eb2af59967153775369e963bef74bcfca34b141e2d742121b3b1ed9620df61966e39ab0e3d6536cef40fc2171c96184c59031e39331e5c87febc1cdeacc7b0caae3b81e64ef83f93dae0c8c4d69272d5c52caeed772b8690c1933667c5fc85d1abc21779159e80965b4bdcb2069495d0fbedc7b0f7cc03bf33de466686a7250b959d5739c8c2f47dbf8a390802e1d1823e839468e32ca7dd75a6bbdb29d74ce93229ef391befc4fd2e61c268663704010dc541c53d713b508c286ddacf8ce7932d2a8c163a5e31185e09d6e7e3913db30b3e8df2196d8867f287e3b895fc8dd1ee2db432feef2ab876cdcc0f13a1ed840214e2bf900108018434695b612b194108f2e5fb6f10f8cebbfc9e0665cda33cd753ad8e69260551f0fdf38f7856d109cdc095abbdad5534ae9c58d587827c63b74c39103265bf88ac391031e90dc10f4d873540a2c9763ba706696eccce5180f59bc8e07fdbaafb13159f9618445eac53658a54137ca7e601b8ec254b808eee14109dea4d744d917f6ebd59de7c2cc951fab340eee65fbc53b7c637c518abcdafe10d92b1ecfd77667dd34876ddbba5377f566748636398f033d27c6c7f89044188c6bae7bc2c33cdca05b29ac8cec2bba51c61799b8764526a618cfd3b10befd08ff1f5cb08bc93d598262c97c9215249d73bf0ce8a47f7f51c78a7dfbf4b11cf6927fd24a6094b03df44a01b3fc9c597310014ebb0af08abd2399109e611069b5cbf369c1826409ce12358bb5c47ece21b8fb75d31debf8be09c18df7fd83fd0083b4ad854667c3366cc983163c68caf41a735a35f0ba0f1010105e9b4543f83ab543f43aa8bcbe56a850488b022dca59d843de54992db6c20132c60d7c3a487d89d20c404c9a527649efcee4e107a7db9f453a954179be46e54f8026a462606c622654db35f6e27700dd43945766c64ba13e9faf7ab591c7b6971bd5b773b81ab9ee418577270294f3e8ae806325df39f0304656466e28ca551a9667aa477f1598d7a9cb0d2caac47fe55a32df5b46da88d1b8a41c28e6dc580cb1ff34d94ccc339d3a75fe9c1c932b71964e8ee2e3de99b62e3536d4e59e794198e276cfc4967e6ee3ea57b75ad4f91dd7d2382942c5eb24839a5c8c9540429a71739998a90250b5311988a80c3e6726b52caba2cb96e073125654ccea9bcd88cf3a4138fdb3492ccb23a9b47767d7c517c50c0712df354d45aeb93436aa78c0b590e654c389c60dab8c9b1e47cc8a4cb9c3d71b06882274df464cae5779292df31d61ce0d3d008834618349cb032a8786069009ac186333564a871c4e689cd4a404497d80d8aa24a850495fbe486f699c0f205531138dee1ef9f09c7049b8c18d772f58764b5569af9b6717478b847a6e0821a062708e4fa33386705aebffc77154f6ee1ba7f493ac426a64e9eb4e05c4412818c34e872a1166c16368c4257e52ad6c295aa1859398a584e1e5d709d07773915bccaf5684549a8c1a8846fa490b69d220f7ce31f77601dfe3043b05527013c55a552c5a6ea8374352c0e35acab486f2427f2275cb62d9d343434b46d3da59fb493069da887fad5412d970941add50feebbefbe1fae6137c2b00e731d271af2971b1d2dc1ba476d92a3b1034b7f9b73529a1d4929259d4f29fd8e5e602d3dfcc62de3366f0a8cabe6a84824356f4d1be21b9f40f7a88efb64bcc0867188b50c01317fe01d53fbd37bfd6c68a8abc8232c4845b00e0f7bc6911a26434ac350376c5ca3eac286f188668f94a4791b5df7e2ba16d7976eb4d2609506a7684630232b16622bbedcc6613ee663be1f6e75279f7a91763db4cbb8aa753d15c9e9b4cd4dfab6f5f02bad78118fbaebf11185dc06081bc6a3300af9ab6096e80e4526e4ef90df10947d1c2130c8e24411b56cd9b1fdf60d21f26184e247e663de47e62ba21fc31e3021e84281f96de912f19bd140e81271186f953d73696dde1c5d3297d6fc6c6a1e7189595847848206acc37ff36a703d47e648d7a3d0a216a54c5e1fe00b4708eca0f74a9f27051554f24a296595ef527e34d585509d42411fc52f728c9163a41b75ead4a9cf509a1d49c94decc565fe72b275c9462d6d13ab58c95a1a8c494f2c1797bc98d4a08c4fd8f8614cea23ca828d6bc2195b12794ef749aed6cd5ad52f4949c4d372c973e64b25979678f8ad9fc637fef3e539a79d8b53005000d73f550d1b335f956ffc67a8c0863329f4262dfd396ebf77d1f4c3e99b4d3bb0618daa23df8a47cc95cf3d62ae9c4b59d32c364a290fdfd0041cb1bcca71eba53817aca193a3cf074c0e502f81c886f652af5277fa7cb94b20925f6c524aced12033c3f8c0f21bc1728ccbb28cb186d97383f5b34c4e29a30c9a32649e73ceec6316e269661a64f9c11cb161d534ede31270b5975e594a2935eb54fb6ccde4942f2516d329a574d2385510837f1c75b2fabd1b9cb18d88337cb0211ff917c62d3ed2862befc43b095079626c24b40e82b802090a6f72832aae283c0e0baba2712f021f65b8939170277f71e7642bee7c66aee2cea912ea23ada998024a92a6691a9212fe5a047b137bd0aa929ad8b866891982d0a515c116aa094b5f080a14df6838615fe89b7d8a523a5faa28ed3cbe5df7a7507569e7f5ed66b806b9a83f516155a0cec90b55f774d9a3f91ccde2a78fd3aceee933738ff25c509d3e2ede2dc5a5541d1b55ff2ff3889dd7fdc90b83dc13f715697ff25c505dedab5f48829b51a748f5d9ab55ab9f695996d5ec2b1162d96f0f6e36abc0890a1ba4480ce22b8d34cb25a50baa161acc803478ca9ee3ba0409c265d9e9a5575487c81915d890998c047141880b60f6457878e774332934996263318483201414fe034bf3cde21e277ac964add9d74c428901a5dbdbdb9b6bc276809937e63927cb68c5169f6b423ee2c0b0fdcc370400737c8d8a86bb473ac438810dffdd9d93c286ffcdf2af69bea14114e12700851c4b5c5e576043a7d3e98472c26a5f735ab2adfcf97257ee029b06c54a149619d8f82a0dc4b97d858809532bb4376659d6422dd11f81344b7ef615f8af35cb5e3585f5cc338f2ec964e31af622b445522ba298b0f36fb0326512d9dca987c4ac25891d825eabb5be655ef6c5a106e7bc451aeca48c367d24210d4e263623f215d9d2acf02fccc7d48d7e21cc17b76869709e9e39cb62be90e7675b626b7692bf67c58611699a00c56693972213df4c24b7990f33a7b664890b53537b8172f586f29e7a7cb38f6b7052af480e56fbb0ba3c2728229959f6946a4a996759046a7006b92b0e452d2e70ca1b5db5aab26f7d48d8d0fa1147841324304c787139764474712ec796d872a758a19cf5c22037d49ebb21a9acebd1346dfb94176f8326f4606d48a4affd66b6d3675dcfe9b39385f1f8c23cd739b2659f7fb35fbb1e6b3f0e468bed53b259a8b7f6bb1e6bbfeb497ded7a603ee5c1d8e7cd9b773b79a81ab59e50a85418034f8735f5b1eb59a53e07cc6bdf3ecc17bbd4dbeaadecc76bffe4a13c2831dfca726b83e1ac17b2cc26232351330dd2a73595aa9ffa0d4683e1067bf4ada90fc4bb596189dc10f52e70d7be6d56f6a9a7af92280e672edb8f6b90bfeb62b71a30721b0d921b12e99b0a63b8dc77ecec6fd67e0fbef65bc13c07befaf6ebc3fce963b8daa3bc90088cf56a835a17c345792e70b7fb3813441ddb6b5e28799a59fc94a6e6d20f7370f69ae61187eb6e4bec09c877f92edfe573e7e32f3f23b1c51d73b04144441427b0d3091b3a2461832a46ab1baac068b0b0f572ac0ad10d32aff5469dbc8326eae8a7cf32dbb4ae47ab999655ad669526ee88acc3fdc31bf2258d73b69c6e53d2a5f496f171748d37f5d89bd5714aeeac37251e7b4e76d79cd3250c62fc22c6a218a8a46db65541e914cd08000000004314002028100c078442a148281ed4c459ed0114000b82a0447a5c9909d328c7519432c810030c01000020400060a4863642017a73b1a5591f1542c7f53fbedfac075671803604d9ca3446972910fbf9f007aafe48bc3fa1180431368e8aa76a1e21e819036ecf2798a4f799f0bb15db37c364ef4362948db44126a56d4f0296766d402e7d8229649923aa4e18cabded2d8fae87541978f04875c8f0f09589504b51b19ac5e099ba447fb6bf8fb261fc1034c5b46755989bcbd48be9d167486818ab3f63f31960601571067a0c55841d1246aa7a52e9e13a700d55822fe282d66c3985ad85814000da1d51c90c03ed6ac0fb3a1ff784844298a2ab1853b7fe5b717b7fee6a00bd3cc6c92c8b08f00d960247913135d72d7f11a551fbbeaed1c5f1b24bb9a2ff04309d26f41ce0f9bc0eb133f707bafd279864053142f98120ea3df07fa55d287fb72e2100387310c00af636f8c36969f0b0419e3c02d2ff222d4e35e00f56e28f563f3e953cd6e3144251d0116cefd4778f4c977d010a6e89a09a97719a43e90af6fd469158828408ad7abd7b086fe4fbf611fe4c335fe350d3c4acb9dff61ecd10e1bcceac0be80de9f70fd6513fee3aa1ccbffb0f0d9249e3d00cefaff064361ff3edfd3ed48f90a2aa86b34d0f60f4a87ee0bac15d6c4f2fe300d88e2c5b25573fab1154c97ecd6fcc838c6942c2f27214b61101b6e580e5c6a418debe65c1e16a005a5923f473e64531ed663519d411b72f46da134ef714deb5607a2ef389ce9e5ce4a6987f8bd6c8889c2e87bc082b384d26d0d259459ecab840e10e6e271b8c908e9a1c1038f2491abe10c0169056bb89e50ec6e1b4ce1f3b693a6b17d96a77b2a28c23ee9902b538ea5a5b6016bca476684d4ba3992df54ef64c21e8012583afc1666ea41fbbd5bf1ce1dfa0c824daf199c0e348f10dabaa1d528508da73168c0e78c6cd5ed8b3400dfbfa8f029b93ecd5fc8087edff1f993558d002ada1422d9055719861a0e98201c75ef98691cb007d2980441a92a930f0e9b0da4710f1cfe3298206e94db372b0b8b5e7e422e7fba7af32d04af919cd8113a9323e3e06154ceddd345763fb7b6031a03feed1a888f958fbc437fd4af31318f5a6034c5188157ce40fbf8a54641012d88bfee34e096f607b96d898ad16ac1016e599cb869088e17adf0f0334efd22189f41f53e30f12c4e9f6c68e0105deb5fefbd81f37a30cc857cb0ef8354a99dfad01106eeeffcba111583a2b755cb242288d6e70fb9bb710425b3babd4da20b4ff11349bfad7c843a68ae178ce87fbd64f9846eb7e6c848d39037bd62f816bca9e5e07e049043cd48b2a895a6ef07bca6af94e323bba76e807649a8b7be86d422d1f94cb75933706541262aa5f9241a7d2f20398cdf5bb405a76e204e20a8e15dae8c6fa4baad180a47d0b0d37f61f5ba9fd27b05aabf03b636ae0d8ac7107af8c1cc20fb89546803160f429af7f202859c247511f00d2594ecc6f43a80e15b0a58c8155378fb82ad505a26034866127ac6b9201914980ba26c026aeec6db68558b319359c21d98b316921b2010556d3540551e39cce9db0338748d3513fe37ad1e0ff7bde1857006da3736106aca0e4c5c3977290c73e2a60e6a9375138120f8c943ec1d53aaf92ba74f68f68a7a42a7febe823832b339be5ba6578f382910fac5ed99195748164302f84ed4c9a3f99088415015ed6f92246d0cf5b502798964172953ab80552ea3018b93149f77631225bdb8d390dfe4b1b9ad4228cbe00609d47f5fca9dcf5be92f96ef7f7822195f4a7862f4116d8fe804c0cb0022e2696d077adbf8c5aa0f9cfe0654d50fa627d269cf6ce999438edb4ceee7fc29e3eab51c34f99c986e1f4bd2174259d7c7f1521a3538d49baad282cc965ac80fd9b79f7754a97e8c07ad7c9064507055f0b52455a361fb94dd7adcf11dd9a1255c563aa689a9bb50dd8f18ae4bf8a71fa1fc69976a704764ab3292fad315008b562367e82789aeaae2c0c069aff62d55427a847568777460f4022939bb1e73228e0939b6838a75e2c79e858d9d2dff0f3115f558cc9ed8d318c031981fc9c1b00d8e10d88b76971c8b9e2ff05538855c80184e3828edf2b1696d094bdc0883e013aa1fb7fbb3b606003d5af2f5d95b6ea5e393e7df00c404efc888977932e8782c17b11ce6a340874068f3ee9f113ffa203b414492fb8ff1c1cf0f3244530ff167edaad003dfa4a70b8c383c957deaeba7a48af7a4be19d30fa127ba60918274f7133dcda300bed0f2ead27b2aafc41d4c8a6fbc19b962213cecaf6f7240c8e7863174be66225718919d28993153ec4e97174e83c6072140a303beb158e543063346100f93a6d3d621ff97a34361911a092b9f97048053232cee9e04e8c565af1ebc99304926397428e63fd07cb56348878236cf9f7a8bd55d424acb2119318b2dfe40ba675e05c3681acbba0f59598c99a494623a4fb97bd2f965053a616d9eda666994428b82f32439c0e3d94601d0b10ae537cb3aaecbc92159a91ec0d248b1d6cffd6822bfc6c2856f36adf83a7b2bb7b559c9ebe7afe6e854cc558d897bb415083a68e42f609068015a731e8cef2ac74c17ef82af0a2a9eb2174916d102f88d341afeb000e1205fd4217c5fcac1ee70b3074edd7cc23bbb2f8e51bfa7a72ebbe708731f5d575bfbdf892c5953d17f320afab73e1cc42df87a30ba3d3c4bccfc56bab4177947c9b0752927fd4215a1fff034e67e18e4a624d70fc74fda0983bbcb986ea87562bc712837f1c6a33d3faa6dfd69f115e75c78faa1d939d49beace3bb14412836545b9266e7f6b7d0548ec8039e00509801c7b08b2af05f30b8377a2d5d0953a7b3043535045819e874dd127a4d91d8e3e04a76936146a13522068740e2bea93d9479c45a9fbe16ee6b8a253a0650cce92e1dabdbfbd87f8e3694497b03e240a872e629e675dae4162506cc93dcd581b0979aef8d4b8e47e296c3f9d29604677c7d203df48e0fe0fc0c28645b6f0ab5759f71c40a1fc40461041fa2daae74419e2756c561ff7633fa08b5a449a27b643e7338213412cecb0913b9557cb109998f375c3a83515151103748bf9eb77b3c00f9cee4e90a799764f00dcd5b4d8ab63b6d9b980d5d7e2f453af7b1db5211916c2567dbab0b11a2254493166970cce6eec282b52763ee60d09d56e848c80de49ec3fd1a0043430037772348c65ca2a1d8e9fab019b04d7eb4c45854802ac98dd7b5b24aa7f5e01dda1eebd7d0f6f00f0e4404061b5afdfa6863f66f79cf5a2a6e5938482c1712c3ccf17a8983e2c69fde5b498803de007d65ea5f69389d56da005821869297358ec3280aec5f7b038d0680bd9d7f395405b3177cc67bc18426a283c97022642740c60c2079da135703aff631c8495e261fcd46c3fdba089744577955e6d2ecaf67520aa02cc8025af775fba86a26f971e0ddf664bc74c94811f03300a3c56f2d1210377951b8b33b3ce93c8f1d6160fbe4c07e44899c286e297ae6bdfcd086c7669eb094e12c909c1aae25ec1685f18c10d9922ce4401a8220f56a021cbe5e6f5c617737810d2a8f7dde5ad7088691666462f82ea26f0efc28d98519fa7b0833f622dcf2caedb7b54195080409b5f79c525556d501738933bcd5f18255d91750b0c206b27b6ee7f01cf09346c160f3808e4ced541e81bb74de42368ca0263650a4389be62b1fe614ce8e5ab2dc3b83951569dde49287d283633f3fd2f37684a34077446619d492619abf2800fca325b6d74f51984324ae5f7d491ff7c6ab39d21ff218df17967f51b1a80c62e474d40b154d353ddbc5dba064079184ae55bc65cec55f0eeee986f06a74f3813579e376643c3d547d43c5c7a80ebe9a9a53ee47ac8acfb1cd25719e2c3e34d072cbb651b1f402b43c27da9665b4dab0edae3e8fd5e23baa6368238d667dec84ea9fabca77b12db37b58e540d55463901585f4145b2ad914d9003d23669e0d60bcad3d4701304d866fb807b42c8c228d9059f89c741459493868a271166ab22eea22a160e04098203c31f436b5d5e00660b34aae534fb1297f30ccfda70a0a078d6e86144a661481a384d10931fc694a3c590ab72b0d65103d5f841d7971ac088ac0a1c1f657e3b84f45915e0670fac5cb0390211b15442d7db06b5f81132b1221302a7c1e25aadc6d22505f3ae68b2a61958c18f4442147eb8f1641f16194a41296d18c05283075ff8510e59fe58337181b03e2bee631a090ebd5cdcdcd524377aac974a7ff7ca12937c174eb03e06a0adbfc169a2048b16e27de804d717f8a9e6d3a51d73458bf1242b341df2ca26c152eec9292e87117bcd18c3f1be8cab47028adb7d5a484926b075d766a12320c89c1545ef67a0480bb34728f84d8db734599eed0a7ff74969829cbd9da6cbda0832abf9171e07dea198f5fdcf4196c773473388fffe55d547acdd8f539b93675dba50661318ca62dd70d0d604f1cb39d96a8a455259b7d00756bdc23d8b8f8b0339cc41878e4e8379d9420d75b779e77632779dce7c70c5570d624dbb2843fecae8ad203752da64d5b149d5b2771cc10762948d0e3f65d0f0b68dedcedbfd6ff89a3aa7600612061974fe1263614b7e50dac0e651c4d4bbfa9301c02b279cf9e8c0d531159a0050c601a01dcc3c5f5eb0858b123b35f8685b583958f033d59274600f88ebd0fc214ba87b972ce66d7ec2871d455925825d5f997efad74e5e9ed747929358f73da82cc0dce9c8464761bb118e2233d577cca29f2a9520aff60482b98e24d0e54aae6418b15733c486a5ad2a7f8eaa5dbe0835ce1e4fa4d500e32264203da8d79a2d6608b066e655420b55b50e1e4bd43bcfa5b9789a24934c2827b7d9c94a01f01b1f404914443c4178caaabb8f14d27ea5be75afd7a7c90b147abb4d1809964c4cc4849381ec48d3bcde9505660d64695831e87868038658b03b011222fcc116c79a7d85ed102c22b66ab0042b95d712bd8217499cccc564845a1c2a812710e4b15dce08345a96ef2e8a1dcbe0a663b293ca5ee67f1fc05272732bae6a568d70f69521334ed45c259697a9b5f10a959720372f4057f263e1eaccd652192365d03385416f77e26311c5fad3fbba02f58c32562b010fec1101e67fcc24fdab829a6734f9a080d84a3ccfd04fbe507cca015ac78dda9ba7688ed20947c99009e49cc4fcc7bbaa0952a3dbe44a882732a96f64c60f4dce24cfc4284dd973a750def1f52fecab65bbf11973de35fe4db151d79f2826f1384b7d5cbd1d1737644aac35f8b61a32d55cc35a088a3e6a756842efcb35ff508a3d88357c7a08373bb92251ec1f3e8a63bca5bcc3859c96d33e18e5e0a259a8b40435304cd48f8d8cf67483483195c8c8bd0ba107abf40a74e86847f097273738e986156f4b8571dbe98d479f0f8a7a23855a52457a54d8a6099fc4082d486514ca4147a9427abf7588984fd61316ae38a773f4a33ac5f0a2aaef1a5bf7257a086b8a72646db07864544246b64a1ab0c9d0bff8f37bbd822859869987243648cc38ef1b8a9c6f92cbae81853ba26e3d01765ea527ddf22e37c392fbb479aac77e9d6528a205c566ea5ef1c6d6a1cdf0ca07ea00dc8e9e3006af9b9dbb8eeb5e7814ffa107f87ea573bf8ecbe77dd060dfa3a73d0c764915d4ed06dcc3615555b907759f1ef09b555ebd2c8773560f10ce60de7faf4f0a62a7d2fa1da9be71813e2b3243780464bde0f224693feec30804e29a1666cf5ece6fc6732d0d498abefa41024aab1901c3cd490657f770bc73ef44fdd4e8c9133beffd21073d23dfac64f9b1a0e8c1db859e46c3fd0a92ac4743714c858f6ff900a9ebe8289a0867eb679a26d96315dec722944fb7148e688bb83e85808baf9d8ea2e7f20aee76bc7ec0809d8983e37a4eebc3a56aeb4a5b8cce3ab1ba93fad63b41e7cdf95ce86ea8f859b3a42267f49e9ae4dc2deb3c14e2118bb7734d04160dfb31e12aeddcebb48cfa33f9189e85272b2171b268635befba36911b1b738fb3ce7dfe1e0c57d6578036f8c83ad5ec1b809848e81f9cd5bc7dcac767f253c812a3de29b8fb96f2e521b1be5f3739727eef65ab9eba671d5baf647edae6deb3df2e6bf92c0b6ac0eff84cceff00d99762949161759335649a9f77906dbadebac1e2420058a2555d1144d648df85b7c9f3a6cef119f41dce6345c1ae60bfe075149563efa5d633acb9ab643457a1ca611bddc40864f1e48a8284a5ff740e2b396060a7da2a4316a007e2d5f48757c521b170f737e0ac8c6ef08399ce76b68b3297daec12886dafd460e450d5e489fbb559ac20316f0d86fdc87a03f6682828c5c01631412b026485c465c66fe43de38160a19abf0acc68e42031c3dfed00cb5f6896846392c9c905ff171901a7b410c86927e60d69632e1a6d272445e9d7c8e81aa38602bf87e13d28a8140a20306df41b4ede7d02ff8560b912343babc7ce8cea3bf590503c6896bfb86d1fb7e022d144d8ac807d9c1ae4b6dda4417ac50508c61bab7a8bdbb68a992785f5314c87cdc8cc0f047240448f77ece7b38c14778c292ffa2a6623eefbf4f1369079cafe6553ab0224e361e964b40ded7b70ea6722128f6e6651c022aaf00324317f0b91bf3c26c3895dd803f961cdc2fd948c32161e1816186237e2759d6fd0e7e9e249ef155102e1203d71f6680cdaa81e6a17ea1d45bc82d06dabbd3ba9575f9ad4cb7ba4910051bb3615d3fc85606496296452f6119bb6343e2e58dedef770868c1172693a4640800e882c9813e47192b47e3366fb91ee8675ac1550b3a8a0a7ca086138dd73a27ed67dd2b8411db754ebbcceb69372728278acfcef39ebdf97273d9559af834293ec2ebee98d9e6cf4bcf329fe6450111f7897c47e73c24d079b10e338c0650cf5d7c7d5c8c950a9181110c061612ec03c6adbc2037444011e355b2d1b35e6aaa2fdec78eeb8d197c6ffac1cb0f76a06902819eb8bd502747890554a372e738bf250b28f105843a35621c3371023896641b386cb21e4712c02c914d4ecce783d99829c149e186bb4fdfc79ba61bfd619ee5416efe0167d88b6bb7c56b5580c228425ce78ebfecc778824a80c636c6144139789b76bcc36b10c03ddf782006fe36b1de120dbf3b8a03379e3564aff5eae41612da0376df6158df08a6682dffcd4962cf1e12ddde3ee62b2306adce9563c8979a8884d729bd3c8b99091c222162fbfd4c7b30f527adf10799330e4a658e2c685c036ec94f36581e8fedd54e3ad3195ea5f3affb34a4b94971cf0b08a0f365f0161aaefc036493ceb4970c1b8188dce4486b881f97d33fbc3be6c9d7467c6283f00f43d332e3023161d0766cbea32bb982f87f23005cc24ba6d47ddf4078283e21027b02228070f949cf904f0cdb97451c0efdfe56fd9902032296138346a0ead263bc0903ced74ea4ea114801dc6e3ddc5b3b8ad051bc2f493b8e307606226d680d342abb29c6b452952fa1e79596a7a1ba22994622cea6fd8f15b93e0d5dbb031217b0d7cdcc1c1bdf7265a513008849529203c6a969b3517049b391ec70c2bca337ad829eac65ec28cceac0400492f03252549adb5b80188d632acb7408924291f9c5f0da523d8932db28a601b10d5ce43f5c11805ad9495ba9bb80a6a7e343ad5ebfaab5ca66466d4ddb558a68e0eca3cf26e94df5e120227f813bdcf1ff79cd4315129a8a4b7af87968a9ee9fe01208fc9dcfa564820dcacde40a63a6e3573ab8dd66fc7343356e7a0afdbeb161c85bc51c7b1a57e35ef174edd5083372ea6fc110aa89c015a1f716dc99811887c7683765ba4f3f64af034092c07f5ebe9117976b50b4e92be3db8e337e7ddf0969ea4c12c0e8aff4785fc50c5d77871e051c2390dc9be5246efc358b0e2a310879a3702555b4034dc15f91db3c83c3ac46c441a92737a672057a98f8b752f683fe0c4009301d76fe109463dddf6232a9aada8d9b03842e342208271257183e542052a239c568d66d4cbf0510a3fd66432416c4dd376dcb4dc615f07e3fa0ab5e3118e1cba6f818121817ddf835f1b5eebdecded924047974c81bb01d213d58234c9c65f4aa81d313a842c06c369a4c70b6493305094ab5bab4741d58ef87cd02df44c4ad8a7106d0b80abe3e071cf695401021b28be7d6deee95cbe470f621d091a95a9d542bbe7eeb62e9164bf10e25f0fe6ccaf6031a38a9c6c2c9d6ae4ad38feb0d05624faaf8a58f84a2dcde441b64a6b0e8b41b027c0e4f02b0e3208216e06ae5ea52a12bd0a4dbc4190a27f4af1f6c91bb3bcf7519746affe570bf297b1e54996f723423c83e699465d7b2947580ab5d7120f148e0b439aeabacab54f675935c6bbaa25746879e843ea23d65db13029e2c7bb65a14cb70e23087401e09290b9e4d48415c6d45b57549dbc609d021217a785409b5065329e81beb1c645fb5dd1fddfe501798bb6a5c653aec8c6afe070e32f1860a236d44146fd2fe3d3d044a1804c5ce10ff681364b5ccdcf26f3e800f2ea1eb1399d6496d9d9c73411894082700e795f837dd21151e4361e11d1f4793fc7f4935a252664c93ca43a048f21820b9f75be2cb79a4e9ac18f30765e17ba6d11e8d9c6809b7b25e1f6ca0b4aa16211c3e6ef8f6191b766c0a063de818a07e2fb3dac437c10141fe1bebfbd09e7d45af7e1ed14b69dc24cd9c34eb96e576789a45b4b99c8228217f11edd93526617dcb5c139753ac8710af265dbd5d5e9aef65fab7d0d4bdff8c1d3ebf24a0ef1f8d9df6a3b5abc28e5953ed3d1dbd5283c51ea8cf3a7c17c91757092b5c4406f77b7b2c915df0da1250121d15771d35b1e13bc4721b6783be72ea48d407946189f58f3b8d20987a049ab0711380194c0d7252edd12cfd36889f26b1e06104eefd632806a85115d28fa140469eee640a8301d97be9eb0145527022b5fc0b043e4be53d86a083937d96058742f5dfb3c944bf55a4c7c48ad679f3316717d35b4f0012ab8a0a5ad40cf2ae2a2a2e6bbe09b39d7ed6b54449adf90c9a6ee5e65ba6221dc2bb1b47b60b23686f1e05b737072c28e3f2d7adc67506f57094eea500e86809409f4360920d0d4b43cb08a35d8947484a2369b0f0a259c5038c1cb10f8b07cc3d7705c39f55692d6ab811d3521eafc46656abf6d4d8f5dcc6182df735e020928f683bd9f2e4070223e5169999663b76d44ee4f08dc0799c51e9aaae63005a0532f57247eba51f6eec096d4f55ec04c1fb34f11dbb2af5810e80b5cbabdc6669889a7aa2eb7b245b50f890988d311c24aa56d71b6b5d5fbc908a6d0c87a8bbd3bd2ad1772ec3852d1c2f5b800035b6869b930c1702365a0d4f02269ea3b5748764cc24d6a3c45772d429bd2b1ce7dd891b9239bd14988f7a80f9633103595ee0690f8d4a80a558106c6c183089dcbd7bfe7de663361efe35daed62908d8f0d1bd4c39db5292ad99e771bddb61456323482e2b0b7344aefbefff3e0746793cb1511d541e581097e097eef92ca54403a309fade3cd72c60146df755dab6be998d5b6589c61df5e832d90df7b344462fc06ce680b6b195a7e22b43747d81edd8c7e29680c129136872bc84c73a92820eaba42ee7f933d7d4e784b24288c72ebb9a011093ea68825edb49e2e68f21eabdc62e831664bcbcdf6d6ac13c530631d7b82e6ca42b54b282c0eb44bb2e71e9a5a107e1c121abeb68604014c68d4fc047755136968729d9ec2202924a86bd8f96b34243866fd04d0c4e891ce6052bb84c442b2839cda32a14e21944507b17963478b55c4e3dd1d2a86565e7a7fe001e2686686e352f59b44e2689a9fd20abaa15084bbf54e33c676d4fa210737518f9326d34a93f0fae06f85fb4b5986ed2520b294da1f8dc502740b8c7c5a1f66f134b29cec0f4796524b502432896c14bd4ba2a883cbb05e5bf6d05bfc1c0ec5f51eb8f3cb21f2249d87c0bd54e3e0c1e03caefc31fe1e20873f26440e3cc8fd8c98c051d655dbae6bc24e08e7857e8d0fa33e406870d0dd441c7d697f55eaf615343506dec1481d58fc182a390b342e701f821515c277ff7fc0f625c2a514ec2512b65cd6e83daa2a847ce20d55ba517bb30b508bfc987a45d10a4151bab18055477a7c60ca653c19611d931b7d33fa40ed985db823b91d856224ae2243ff6c17f28f9c68de8e0589d0e262bcdb4569abbfeefdc8f30dc9d71f7ace5174e14d16e8c8365d4ac101bb20ca7aad49e0bffc148dccc60d72a17803a04a65aba27a7254b5e4006bf47b21d4e02549614b334cf8f7eb1ec1ef0a8fdd9870c2f6a146c005715a02887129344c101a599e4d44e800ec22fe5c92054ba769a2a8cbbbbd0fc8e0a6a2573c716b6d7f3873fb26a6b3225ae931a56965ac13ef9457e0b53de0cee90d432cd3017cc3d8fa5baa3fb7b0d4018a3c57bf30d1484e6896722b113492876cb1539412312de093858b277168822b216097498e7b6353cc2c3942021c182c844f195892536a63e21ff0b1568ccdc3368a8f5e7bb1c758a42cc504eb8f516123af295200685a8970a6e10ccf26d27971bba7d8d653658cee8aa54d7903c812eca646dcb68a57f51a89db0fb827b3ab8078f1d442419315588144b123713cb52d5a91076828a7fe778d37ba12bf6b6af85cfc8ccfd872d871f271e11d38bd84c808b9baa548b649a1e082cf7c2cfcd86ba207bfe3e7070362d6117a6461c10aa3ce7cd9d80056d0caa345e2968832bfd43430a94cf94b7eb925a7c5fadc781757de687b67b33e2837671b64153ea570afd38fb88ada1a23e841e98cc27bcde378082e84ccb9dc35ceeec372143480ed9584649f27856b87718a911cf3671d2795915cdd8213680473dd361559051b35876e942abbcc8fca097e220f95bd05da71dfb4acf0ba0a47592e5982b69d45b4dccc8431bdd0fdffd0517af6213481cbce774b9b40f010556e94c945f7bbe03290c7a1ecba2c304b636e002d0afe1ecf9a357600b49a70bff5b1025c505f5a44d518296d0970feb31331e48fb84aa69c333994c06b200d69de5211bc5956420290aab3d071df5a590514454f1e51b0b49fb002da7556a53b0fa5093b8d02fabc721b4a2ad642fe3d8c574e151ae6e5bd0708e230663c0ce5a4ca8cc2f042cbd8f31f8400f5eb4eac2f84149dcb175458bbfa6af341a35877701c074ca9c0f30cfcfa6534a3b88a8d8ee0fe20d298cfcc88c069aa76cdd7e1af35e127d03a3a7e7ddc9be307cb07c050c56fd6d7e74213aebdd18eb510fb78b78c04711eea1eeb1c9bbbcee116432c0f8f51eee753ef16c8b6015bcedcec0027031996cf81e13d397bef96a60a5556eb29eed58e918620e2fef64121d9feecf8f470aeaf3613f97ffacf8f71c15184fbc1e41968dc651f2d5ef5ff25d5830d7548650a5871be53ba6ffec508d9323a1c924bcd96f3d929696009038eba3f57dd0fbb14cdc7aa0f35ce24b08eac7b2416af018225d56e8a09055069430417333856c10c5f5d5806bcaa4a9f7a6994758667f8bb802bae88c21ca5add713e842cec759bfb1ac6912c4b4a69fe47df9bf63bf556aea8ad118a0dc47437afb761368dff79ee8d0c01ed4244662a808332b644909fd271e0e4d1ed3b0a14c806ef9dd3c8a121bbe9f15ea0d9660fd301fb7025629b1ff931886e88e9e25977b7c020834adaedbf3ab69f741963931e31fb7b8978c383dfb3a56563f4002f463753e01e946f5fb8329dfba14bfcc2d5641940f8bf54b9fbfa51763b9d7a57afc8bc4d00e31ceb6388acb1bc18e3e908417830e8acf1d670f200da5e9aa6d54b3cc0887dac205722988f1daf5c827c65fceae38b81158112e5ddfcd256a5d76c9bd26250d1b8c470985c5357a8d8d27705f2a4a3b277e0c6a36929ced923f17142e3bfec8c128e21a574d4ffbc72a06cfa6d3c03baaedfb16b8924dd53a4f3cd5816ec89d0ce49893667c0818938e32ba971cb1413321b08b8a94f387a0817f942e8eb3768c5e0ae810624238c31e00c38b520cdec25eefe24105548623217c9b507c1b4335ac46e9ddc632b87a90ac6fa2af7e49d58bcd1b65766104684ea37258eb5a3c02c23191a64bf4daee74ce2a94e399b9cf9b32b0966b5210f07ad0535fc17ba14619771d66ca4138a19e5412bd1392c61bb9ad7bee5d62c224c47ba1187bb9734943ac4197362bf3d8ba3240e59d787f0a0c56b160f11adbfd4909fe10bb0fd81ad05155a43163e78b57b9af6c76d1b06772db43e0414fccf325c311455f61058ee0b7968f1793e885fa813953315a9c4ca0c959c4cdfef68c6b4d339f4bc98a4b7d992eb91dd0cd805c93f4244c6f039eb40ef0a882951df9f2276421f1d794ef1a0554d9ec98b44b9c1bdcf30665dd426d52effbc9c30bdc5ea6d286e04e63fdffe17e2b9a4c7bd99ab24af23164208ee407ed7e6d3e1648741c5d50b2ff3503504fcbf4e4718ee181a2274ca1a6525ab25753c74c6b38fad669a8bd4e3d36b516434fcb08c7e48dc373d329ab23fb2c48e230b2e8fe5dd23614d152a6a4fc541ce7a8d57cf032e6a89701892fc57559de2a02e8f934c82127011c348575fa65a4703fb3048f15e14271c2b1fbceb7c07f62b52fae301da24d90e8f8894ed494ee2b735011964ccc7426b0fdfe025751ff01fecb5f60f34c078648ea8c31c3e533894c67fa6a2dedf615d86282ea1c167ee4642448f2f6a49cc5c26074af97b55d29066a713a2b6267e37b6faf4aca1fa3d934322ffcb5835d3f6312222f969785e36a8611d0475ee365606686ae64f054bc4166d5ce8f753e655f0696dde666f006f7c9c1b4cc014183e8b39f2bb9d93227692d796f72b0aedf055bac131d6bbd9ecaa993fcf59d398ec6e3672450ad0383928a71f111d4f1b15736cb95c4183c65d66753a6cd08236aea5a2ea35c9e007b5a301a266f7c742ae371474c9637657729d98d7e0c5fd48f8edd201f4a48fb0a0ed594ab90c726583f56ff7a4cdee8a304d7a4428a60701579d4ca983e6b9135a6a874d7c7285faaf089dbfae9c6ae9c1417ab69641603389b530bd0ac83a54106fc7bebcbff2ac8be526d5a9f2f6d2f8b2a4e806c6207e1e4b21acb3ab98bc28953a073b73de6df228f4520375bd9301facc3e494ff1ed222f05f260956b897eb4181e197d7893a4075c885d7acbccbb499cd4e9fb0524d1351197ce991f54478821542045c3cc29d0a9ad9c732ad82d790fb2980c9d5301515f5b7ab8a30e8f2ae8088759f5c77c40da61d8c9da5fc9042c6345375249fa09e62d5084d9c92548ac15b151043487957423848ffb25a6786f79f7a45e7744d743b50bb8ba11b978e1c642c9481b25123691f07c7706d6b68582e3a61d7884f83ecc8ab333f856741f6626991d49149c81cda235d05dabb7e6f02c56de1112d5c6ff486337401568c69de603e077ee5c7e8f6c66897ec5e3d305af9d7a118cc67402d4a41fb7cd51f616902c9831ccf6091302fa6d39ccefeddd503d406d17287aafb742879fb25dc435d817de4bc4c7b9279a4ad7e8920ed3cfd3df7fcd2a0ce2f72b6c3f16c032abb73e0c8c85d94e647ccd0720873d0486bae01e291b3885705fe6dd810455393f8ef52cd7361b8f437389d6eb95b522735faee962d2985102f2ca0894939bc49099e3875be960014a22b45cc18b40aa6f2544aa801d5ea367c2094188ca756c6581be5331e2511949850a946a964ad45ca849b845aa7715fd87658e7f6f27ce0a2ee3b812b387b1875b7235d6e283730391c396616bf50f5ef2b277d7b3b1e5a84acd1fbf13a77a1d9e8a9b616a071a75efc337816d0e67d154bbd53adc37b60608c24c9329139876f31e4422cd56e2c70894f1b6d2bdad04dc31e1746a017c32fce2f2331197a1cc3212fe06da55e7e3f0614b53b6993af64b57c2264cd665b46b2fca98fe6886252369df404b5302be8b6bba7c7ef0cf4369f325164f458c83eba4d63f9c443bc25acf0c1f9550091558510335e138822a150bdb2a67972c83c4e84e23540e8238aaac45c55717ba484de473bd86c891bc58a3b6be00a9eb61d1630dc772a1721c1fec645e9cc3821cdf6d6ef31f025ff4fda078d49775ff8f22cfb587df7628fc3866fad3d9bde4d91a2de124e7195b1a837c8e5ca9e503dfbd909ab86a4b96214014cdf096f8a827e8e022315796ea0f85e09dbcad19a0e699d93055b72c2d2ef5c101f8644597573a54fd059b113d91b92f4bb3f82b69bf22bac265f754db68cb1d421c18e9060292364800dc8f20b1e6d5a77b30698c2556bf95e586b5e5bb572359d99df2663b05430358703dd21d6f99e3f29309136817e8ac639436b92e49d7016ea2157973c89ff35a3214467fba69554b3fbd1b3324a8201b6da0fe42de03b98a0232f8549c1309b1753e0d3d67094c53fc4cb01c6fe255397626da198925c9512bb102784bd1cefd1e31ec9293662b2b3b59d36d38df3b10532d5e63e98b56cbc34fba2aaa6cd2cc2e18c8c41b0cd9f0ce8f61222e208a1aec08315098edf630845460ca1dd6b079e7f08ca497bc2fa8dfc518262dcff4e63524145304feb87996cf4ec446a48e5cbbf05207ec7697c7f020d521d78fac9a74616fefd65228d2cd969e00448fa1f079a6c14bdda4b0972a5b9348e4c17826cd88d5da9e97191402d498ff13a2dc0ff51d81f9d575b6085a6a6a175be00383f3b7ca49d62d1dd20d2e1e0321c1c94223c67c6b59db4b94ca247b03c9bae1c48942405a4a1af62a9ebf3344f79ec0739ae59ecc0609ad0857814a72f43df9204bda9c47f0738aeac2fec7fc1923a9d627137887bc1dbf1bc39aa95c6eed92f6d3e9d530db15d02071bd1725f3860417465184a12cff3b1b874585a8e665f6de38bccafb3b8cdb88ced22dbfd50b3d0652515f843bbff59434828b1efac758f7c51ac365b66d5e742bf2bd9ac761e31bd8c0cd69486bbb0073dd124d68371a78fef24afe8ddee4c51d598900fa9170a534e873865e9ea7f4d5c1a434527b56f3459f453bebf40d9d2ce6281a7d8062219bd3efbc2bf1c43444214bba58473d0a164bfe2cf440c32bb6011469110223df432f905af5b4208b69c8983171b7be7b1e589c4a3615cd5b7911e5240d355358be580930eaa157379662f35ec0ee67bc2f2fc0feded457d169623caef72795bd71d5c8354b2d8edbecbe3c6efe51f7b90015bbab866b5b8c597f0d75160b2626176dbc0f7fd4d66d5dd2ffa803eec156e21837b3d4e232e9bba4c16c41e953e36c76e1e2afdadabf4ae40b07010daae5971b636213d69068c09d5d6c8fe99ae9f880cfe9ff9ddb641e368a62ae6a84921d2c609657fecb1528fa455d593193c9a93550a0199831893b986159628bc2ebf83cf8184054ad4c923f2e14914d623d80504179d17b334f8b9f791a04b08f649658834eb884fbda4795b620acf9bac5119df9c7ff1e6063c4fd1caf8ed1a4b8b46112d63a365188e501dfb164b965a8085d02d553e0c1d55c76d7e6108827ae3713867dcdc386a0e845c82c06644eba31e86693a89574a7825d6b6dab4f907e22531b0023993b0173d38575a41a75deb128ff2d37b2e763e9791a5471de24d1024e86d70a994c7cf4c4bfda35db6433ffbaca564b3af908711eacd3144290b153394525199cf32ba905f5dfffea7378308504404690967ce400742d799b5dcf7b29cd4f2f46d3c8238044faf134e7b1f5932deb9613bad88efb8cd6d3a9b24f08238c3b9da8450b8583d1b03a507e9d3282c4b9e7f1dbe3aa21ee92182993350f4b23034dff7d176bd6d36f62283d2226d158714ce72e837a9519b73abf5c6c1edf4e7a13d6cb13b3600d7622deb343f219cad2fd87dc4f425b208bc1e5cee33b2bf8c7ae78abd0dc7c7e7381b5978790576394a7d52351d21ad34ed11db0301e7224bf5519893f36744b209dadc6eb151274944d383a08fa2ab9d9881fb37682908193c98f914f7d41430579b32cff00b8bd5258b3f96560b972148506c04ba82fac35cb9f3ffaaa4b909aa7ab585ea3dd870106543833a6b29c2e38bdc3d1766c66ab68205836ac7d9886b5b49e278f25f592294f03892470d3c179b3c1c25b09e50e6e70433dfd974632b90a261f43f55469be0e22ee76075ac2389a7c03841a442c1083e16ed8225458ddfee17a5c1538f30afd6f9b8b0e70f064306762bc560db087e00199e855e0fb8defc754e4ac92e407de2b356b6825cd7da96dee72d96967ec95f96b254dc0bc7f082579f06c16268d10b0461fd352ac2bfa31fff63a189b0d45f956b5b592fd60f7b2a91ffa6918cf1cb4d27b1f54da7aff53298070d697d6122258d5dcc592f0552eaaf475cdf4b680f1cf388af9a6a2b7a8d5be57eeb003a01f7ca6dea977fc3e0fac103d8cb4ab88a6fdd9f0dc041848d780b8288ec55ce9834b21df2fb9999f1ca0cc76350d303b12df2ec30826c75fa7e119f6abaac4cf672c01a832481e316fbb0655ee9d133d181148bfcd42fee9608913792e66f15e21f6a276ebf37f18fc3a8d4aa54eb254d2aa904877650a795a77a3ad2b8271ad8ac5ca64a04d47cdfdd9321390b40728b4ce0cf0b8c086873004525c04b5034eecf2404fe3c4387b0e3e6132c803248ac225667478d8d9b0805dcce50c3a0843ebe9eef51cea1d91a3afce2fda71013d703e7b976186af4fa56578cfb1eab507644ea097a7cfafdc59cadd588944f76cea3e25bf6af460ac07ba8bfd04186175a9a26f7fca85cbd5296b84e1ef3dd0dfc6d65c32e9c92ab6a17182df6200f80a714cb355f9f7309805cc3f21d461750e0ddb62135a9f0d03330b96cb00ec24e9b2bf83994a57e116e14aef1096191022b5a9af4a77077615cdd93ab0da1c6da9989db95e62a8d4b4afcd45140bad3f0070efcbbf82c18f4387d51cf8deaec0b98a96da93d1c0f438b4c454f7827494c827121daf1c65147265d234f637adfa0fb2c48aa826a6dd879fc852a87a0e37260b51345b806f9283e3d4fe7e05b6841206d0c93cf563376cffb19035b7ef78a2b6a4344ed7a7afebc583c31887aaaff70587eb9734fadfae2b912d1f42551c261c42de5bc36f990e952580fb65eec77ed5fd15b7103ee898ddc113816906b55e11247b170ebad525509c275ba5d04a83267a12c9f3b1dcd7e73651a28b69b40a85f417349dba1ad8e95f435b4daf21b4de79e7fbabf6e46ab7635acf185cc299008f825bc667e6b74920d941f27e3e0da88c0b40ab25c9169a9d4561e9e058d63af801b74a3ec5994a0af3bb01bc461c570f40a3bfbe8b42532987262aeb3451ebf714f07250f74efe5124e0d07a16f159a49156b890b4121d6c937862c2ae82414f14a91b70b98bb23dbd7d476127d7df69fa0c42cef4712896aa5c8323049ab8f83e3088eae63442d27ea1372d157a1c559c26269fb35c892c8e26d555154235952e8d5b0278096937aa99f5198df4afb7acca93793d10af5cedc435cf6a133e7256fde790748a84cc807568f6a2255220a92373b493812dd8e041e6bf77cb39208866446dec859c102b72ca99a938f9127262240e846b13cffedeb833ce0bfe3c8c704b948ce23de64c5669f8fa3c1c0bd51beb9bab09a608af417cfada7c057155b3226e666301f96a19ac578652be216fbb0527f251b31930acaf8ded9a7fa43d2eac86fad756de7e3a4160351c27a3e0752cbd4a1c428ea87b7a406035099751707e4b3012585e0e97d964a538a9e9b4d8783327ed4c0e194fc50cdff0d0318ff410fc0feb801476482cc1b1e28643cd043eaecb72cd25d9deba8c47c373e11db0be3231aff73f8bc0af2f741d79b88b698137ff58ba1bf20692949989f686079a3f7c549efdcc597fa121f1f90bedf3d922472e9f683bbeb02903177bf4fec45467b3076acc1a6931a41ed5c04fc13ee570b2dccd11823a73a801942e8ae0ff9e13c00d62fbe7bfee7156bb5cf2731e5b468c7cb862735c1f8ddc0d7cfc26a63a73c6f72c0d3000427811933cca081348345a77667fd07cfe88dcdf9ff02cf3db8e10a86930b982341672168d352fc53702ed046409a138b86f41f1cd1e0c0f38145ebadda31e127dbaa908df0734423e33bad09f53a29bc2972e465dfb0cca7ac52e89ecf769ce88edb8f13160ab6c06461a0136e2d4f21c549f583a4d35e62eb23344b33c15715e9735cd41438c56c0f5f4491483cbb80a5d0aa62a83e3a0d61adc38567a653f460cc48c1433e1421a8c779f447a81dd92a2bd35203d7999cbe150a44ac175b81ad90af6d57c1eb8c5569fae5ca0922ae2b70df853a3f7857d732d460131aa3394827104970310ab2c73fe9f0e303e2b5ba49aeb77ba3be0b6101b15fe6d1e884ee619acff68d0b3d776d7af19b6e824be009b9f596851c95948e3272087cd8fe549c91b7c1bf9f51c95904fd422133fa60903ba48031d75ece605fa4e0b1e9d949af4bea2b5e4e63a833c8497cb1f38e88f276e95c35228db2e9d6b1cdef129a68edabdb798e153d4729cea4b07ed0de295a035844e902495048c5fafc96564b4bbd48277967d86e31b9d64989056c922c0ffbcded042d68c1e825146531b6fa70f0b049522b25714c67e22e0957efcba04892c8ea0939a7b8ffd098a192908b75be2bc5c4eabe982797322395fce2d46af1f64f21a6aa20e991652ee2094c1ed75dfba7ffd3f3766e0cdefbc23a44f6f79ceb68e91e6c43ac0faeb62e903ec6fbf78522e4af0553a01f3e950b10f48c6401962f3f16bf5fd6d59364f00c96c57eb7994a1819bc5b4f2afe38fc8ab85d21bc4b10689102043460841d7c81b928f6b180ae8e8fed46d3e07cc0104aa595a8c70ffe7151124896edd0d9281500c216a9087d03159614e89e58e5175764a4a68f4ad7bed1aaf9c165edd2104b9c59f4b735d742fc53feaabcf970a0afd7a0ba9b1ccd4672f959f0a4bea2383b80828575579ad503ac1f5884b0506e0d9003b49e6ed1248bd2c3e684abcc9f4c3a74b2f1483e12f529c2d95a156bfb474801280b4f6090fe20096ed242be62fa33f3124c7aa219f9110d45aa61bcaa7cc047ceedca1d4c80bc75e3b7d9df9b0532e6f44dde5247fce6304bd53be4017fd5bd29f5d1051687ae11e4282338f26b39727ccad40b04d8d048d6975302fa9ff840eb93825c2e6464798ac68d9a15ed3791a9779ab17ae16a796c420e4c503a201532164c1577cb70df91b08fe48b86b3bdc7d3716737ed1929fd68f964087f76579c3346837ae26cabb6b4fc454e38efeece19a3ac73ded7cbb6221b805cc5324b7818c6e5ed87c61ddb5e1b589f8cb3885b8c8eeb4a689fd8fa13eb3b4a6fbc6eb5110580a85002572f3beac6214f092fae855f93c308ab10c52851c5c4edec93761f174cd177fa3d2028e27b78050bad8e3eff37671e79df753c54288e89a830512d865a0bd224ba9e9a3813d6c25fb80f993f0a56f291a528869f6f18e5d1bbb3aa850e70fbc4ea38210bc4e7f5f4020791fd88bf86c7de0470b0a10b2d555587b805186cad9f308a34932fcccd4521c1b580a90ade96287e76ccc8234c3ef73365ec0174b126913a8e282802cb6512db0f6061d22a702f01eec75e3f3001923002ce11fb081d3e793a43e97b607f8522285e04f60f37a1c9d9a7e4c390624d9384fefb40b22af475630bc69e2a7789a7841b5978f2e08fa6af476ed8f657cebd32115854713039aead2f6916dc8be71580a09223d81d428663f4ef15d8f83f87866dc85f32c36fd1c4b1d7475f00de9e7378692428320cbd72419339d4fc55a5c0b90973ed6c8f5e349ba110248817eb74fa910e71f7e15679cafa467875de65624cf564a6ce9e83df8de2e2d125bfae87d6a4fd3c65ddbc0d962166be14020ce6111d2857444db6a56d8dbcbf0afa7af3d06b73b5d7154cfb3db3ee66d384939a931509b02a9ad52093fb721b410f2327654daafa75aa90bfbf5eb0a517513333fd610a046fbe7a586175ba7d64dd6c71fb9d9ca8d458cf101b1d75fe6a840c3eb438be12882688d5ee8fe903e89081fa61e0b5f42d3a22f2dac60dad4ac0806a5ae042d81f766a4af42a395dddaa84fc2d9b65c4240601f65e1bad126905d476a09d9b7ea0cf29c620c6fe8a4fa74be3eb30126f0af2bc47168112a5b3cc1b0fb6129fc4f76b58cc5ddf78f5a0cdc24eb6d655e4a8a844f95bbe061eb4f3b4c0c303193f3a1b7742b311543a3364be78b05534690f29c186dee78aa1cf7eaecc107533b7a3d6131ad0901cd0ce9dd251a4edf01e4e55e6d806370340424cf6a8c05a9b208e0411fdfb9791a5356e67077c92bc39fb7e06d72fb129b12b5ea9fdc92028da136bc01d11446ebafc0877913e296d47875a59e769627cf04300dd5dd8d9b43b3de9b2051f83d503f74b058de7a046c1f8570bd120e411de0d660dc476a75114167f7c93f9e1f23e1e30a6cd02ac8814266341d4074713b6ee9a9dbed4d59d18c8cacc1398de69350fc7b82f68d5e877cefa52d08c1b410fbc1409cb56e9c25d1f3428cc05f6d6470a6fa93db5be28f2a6373672f0de773a5b33322b8953a1c54fbf720470b500d9ad44d2a2c272390e3aae1decb87d00065233a8cc018407ec6e0c0fa3f5b61b6546957d453d0d5c0dc4d613cc9d1bff07b7e60e26c6b9a640a9fd80ad934fdfd4094a3a64ca07cc017a3326c38d0c18a6b698a7a91900c7dd0b49620021820a27ce120199f4212e71034f8991007d7f5bf628869d21aa89eaac04e2afc95803e45df8fd6e8031400f9102b95fcd3711b78ad810b8b6ed02d434b36f4d4bd0c2fa11240198e05b47e8f16228bb1826f07de927794551bef7eb80819c05f3e24fe086b6fccb0c9d1f8c81eae2d286f1234decbc58b228e24e5cb5d803765033dcf5c7436b3563ff0c18026b756da40a84de66a5caa5bd76eca0025cc05d47a5d43ebed6a9f28fc93103a562cbb016db3cf7322c2552d72fc84e92a040e1e626b4741e6793882d5edcf693a93ce3bc08ed4896442e8f5feb67eeddaa090274cec057a2bbc1d72b63553f8e359a94b100c031ed5afe94f75637419a20249ee96b810b2bd88b772ec6ef6e9a9e08c196a2ee5bdac4af07aa5b1d4b033e7ae6425c30650ff9b880bb96344195e39c599c30941e2287a1f8930f5ee287ebff6eea660742771bf50e52c18993bcdd64b08c699e0c097166252a37c3a0288324a20bf148f93e1b532136049506607231e858f32f407137fd22227d003ab77359112ceea7c1cc611720888f56892908194afb54265f3a46def25c45d39da5368ff7f7497cf43e2bccef51e9a143578965d58c8fce99eca41de81763c82824062f9dd04098acb1670c77345d01fb8be9bcf19a5fba0b83c1791c05d73bc4af632a78dd74934c4958ef116464aa3a16c395a52f0c9031e37b608a9e9910015d82bec475de9004a96e581bbf703012f7f5bed26365c85019a614b76a570880be5f940c357e013644286289a5ae148055aa04b58ff73858b6c7817f12f9c9fdda2c974a0f6ebb33a01386d786f064d7ec10190a8e1336010b671dd7e031794c9435062e1cea380a462191d7e5c688ccd667a5a19a5a073ee985423f56313cdc0d7484b4f0bd5e79bdba30750cb34902cfd59438992cc799ba2c3391e180d1fed27080ea24f2895a39275c1879237d942c62d351f52d86636f6354775dc0815dcc54b480f2d71b679a2f2ac9739992d486d4789dd30ae2573feddc8a06fd4f5255b1e827193bb47006b12a7a2ed6e65f776bc764476cb903c13c27ad592fc2b592b58bc2ed43a8aee3f26a5cf1fea0f8af4e2da4e655640d09c968c1b073080080579d96d444e417a177692b159417dde34a309745ea587d586d45d29f781555cab7b42c223c4f968880722260f5268a4f1fe6ca4947238d254107ce58db3d4995d5aff57c8582e3ce2b5bb0e161f508cdf4ca18ac81635548999aae9b18b915a783e17e0926e1498ca010ee7f2f77580cc489568f0a36111676ad7e6bd5bb8322a55219ec0dcec54531009a24d0ce6af912b68809388fea41bd4253c5038cf718ca2809c9d8d74d147334f38b1b62a831489c394d932b04723537633bb9e8db9e349c76b66dc7b6e28b32f55aaf27ade81354ac4f4b15f1524694054ab1f43188e6117a99c0b612b983d94db6b2c3fcb7d24262fa8ae0bad368928f11ebc70850dd23053626dccf7aa8a5a7ea4aadf2c899e013454bea2dee5789838ed59e2232b82aaabb4a15ecf31875e97e56fc803fee37c678ef6452e559937430bce7f03820cce9554a43dcf51e02e466235944e0adc808bc48b1a5897f2958753de6d19e5d345829d51c72a6947438823e451a17c118fb2968a2c6c09e421ac8602a5ba74ffdd4a0a5d32b20384eb68e045b1c5414343a92cd23e489c82324bdf602307f4af57632b9fb941789517d1ab91af458d96c26696180454ac60428058b119cf4aaa7e5b0ddc08977456272533d1060f1b6c9a73ef3d69125c74b74b59c895434dcacd2b44d3a146a0b8a0a0c777b98423b0425c818ec0645e00418501139d8f1aa54d89210199dc65085b810a45a86503acd2ef547091c56f85123e0273cc5497414ded5d39b1e42ab1518dc129317c8431e9fed61db5bf4405ec5da656c9d9de1e24c8e3b4eae68e4a94ca1a8e308bed79c8cf56ddefc3a2cacac8a8219d03be902ff7e2c5bba85dd97f7699574782ed759f244e4be922302c5320f73a0a23e07897726e78105ba8b9204e2d44a25bb12e544efb9e6a86fd8a67b287daf6ea7fd55d53ee3549999f50cb28911bb2039d8979c6e2e1e21a29d3552c2c05462d04307cd2cfae0f0be78244cdf8e8fad92e3d3e2d627a179249b5b4e4d53f0841804546826bba417077ebc2361bc0be5da2435cd070e6ca46299067ad11623ee459434f3113f8f3e53b2e3a3a729823c498dd2a6d3a2ff994609c8dd2589dbf4b8d5bf8736a382335c902d24514c92d448bb6ab4e375123e2602b1620c2e4f03f2790157abfab30540df07e44eec6b275f0eccf77dd1b489b152ebe02df220b37c68b4d840acfdb139fe222ba347df033a69a2939573da551ad64ae907b21348201df0bc7978cbf86598b6a3ba3535db75c0bd9038da690d43c8b7822e721daf649e4b51af14e16742aa7301f71695620261f32ca4c78481321aa452f0800d57ce1b2df33a14edcd64875c46e8bed637899c88de25ec37ee5929987008bfb11bb9036067701f8fed3e7f40ae617ba0a35e44864e152543fae7b49fa578481f52f96f5bd49fbe06b810f74c1efbe9dec1cbefa97afa76ccf4e20b5e707583049840b72cc2391fa46f02fc4c3ef0be04c38228588538542bb0a9f56bb9d634dc894f6bd74ddd9b1f52696ba79faabe33e3c9276c9ff6e4c36ba7f0ccce5e015ae96b7dca9430811900b6b841b0f1b3c57e561d31347496d88355680bb986b8f6121bafaaafa5f0cc83abb5c1ea06b7c5440fb7a28553b01415f610537f5ab078574e18e1d3e62d297b6a892b6c522719920f5882ace13ed026849f33ba3034c2730059a03e3b5333a5328230ac9e90f1ce2ff44156eb817043a6b522cc1d4f9774d1ad986f62e8475420708deb4dfca9bd83e5d83ace26b5d24ed90e13f04f479f789d1cabbabd0f0e5e15c53e38e05b9e1e53de8f2f8323a3525f6b35c1a503b56ee233e246f1a8ed14baeeac8cfb7f2ff8fbdfc6b524b7d1dca52efb883ff3e55b34ea3439120c2bc45d899a0bf8e558740fae273f8249f4e5c94fc23ac72b8a2460c2524f43d0b2aad8b8d115855840e17bdf0f744b7dd05c87e4c6de93532ae974b9fcf737f08c012267851f7ab043182205f80573b7f7e7a5b1158b1d76a1e8e6eac5792b370d21f09b487aedb6dbf9c53e2f6a908ed77b9eee720f074d10bc71b9bd3660377327f3931beb270740d6602a9840ee4a292b0706c070d02fa32ba6bbfed1b54f100c74a02a699f6582709de1097e60c4f4611f17c120258c24d33054459e80b55b45088d04b22215d8b1443b5d1e41dbfcb4de7a678e1bb72c1e82c92b5f02c3f07f0af2714d65ce3e1483a7e66e7783ee2f005e2d42d9cccf99b789f8eee65dd7c375742abbdc18a318c54b32cedd1950c4bd2e2f1bfb3ec370007b25a105c6100dcf13d2e1221a0c09dea3d89ae05ce3478ca9043f51c543ad1c7ff8e7abe34171503a9828115d0111b55be92f11f2e50a01a1a198359b24db2e4111072f272cde8e2159f50119fae80c800bd008c59384ec2acb259aa332127bd1e7881309c4d9f0d73a539eeb1324a38c3ef5e29ac995b945e12a87bd12101cd80631379f9537b408f999de788d8e38b418c5d152cff581c3410cfa21a5473138b1cb638d6e8a4f942d9017c4efaed05d81d773e431c9583fa8c030afbed7d3cf9b055244f9cf6cb617fd423f73e9389054cc335afe47de683b8f4076c30429fd079383093fc8b664b8be124282a6a5d914a433fc2048ca7a5f4068468863df4dab7d88535b5c1aaa97a08f5eb6b6719b795f4bb4b81b1e3425f2e9999f83ae4d5f66ee60fec1ff9307397eb935dbf22b36896b8df7562e9f104dd7bad4da21232f3754df47a6ea8fc05b00c87a25fe4f661daf54cb5f9ca5a59a1dc843141fd766f5011eb0a3bed90b061a0796d6588af6bcce5ea4fa4027565868b48e8eb89932df327aa17719361a711a6933bc9f54a3ad3bc7a7d3c3100cfcc4841ebd9f94511011eb4e33e70405ed5a22801eb59a6b4d4c7213cfaca273360ff7738b4f2069cc44c81c9a3ef0a96c2075087081af53257d839148021875addc3f82c0d494e46118c8d813c88fd01402519900587d56110cfe409771518e72a7f60f802c123cc0cb6312c44852170b8fba6078ac2890fcad7917b819f042fa1450905f5946e73c97b370a33c04ae52bc6f29c101ea84b8a1ab0b5ab0005001b79ae0c505b8108120e9873779ca0a268040e0f548c7a5cab9312820d9578310e396560e5b10df77cb3532b0e989cb3d5134e5c4d14c2105362f12d0c949246d23ee99b67fad070d6f0dda387386b168b246cbebc8f39a19b598918954e337661e2b0f4cf848d430103c9faea5ca0e254d6d94109c2a8e88ff334adba79cc6524b599c0663acb530a2015d12f160230cc044c9a7dedef94636b0ca19a6465ec4bb07e8ca1d4bdb808ec0508abc546ce5e1185a6703cd2120805b70b1004919402807d48417728a143e46e2ed66f6ec019e450195032550dc8a1f4a4692a1f0a0735794800cbef48aeca88e6344163ba3e0f32ee2cab951aa3a16a5dffaa0bf96129193c6c4c6c08618ab45d70d04f84898fecfd2630cf9c0887576936c31090006280d76f309842bf571b11985351cc7c9e3bd4eb7ea625f838af36f21e21639c4921d89d09ce223080fdf0004eda02a92675817732336c9e3b093fdb4651e1de38c77220801f18576e289d6ead95ec1f73a7fa2b70edb2554c26925a2fc8636217cb8ac296ef92fc429b528fa6744e0d21036b608a9a1b36710ee68d217c72a7635c46479101945e5938b084d7cd8de9fa4b74cfc9d680bc1febb465eca7be0c47267254474121d272628e3ce1ee7e219d018e8dbb2cf9056d718c4a562db0be8b6383432511928191c17fb5861a3ccd3385240774a03011bf74ce40728db65e24338e9bca80a4f7726a347a49a98a6e430adcecc455f566d567dfc9c418004fce8125b33b76b1d54c3f40f3b833d58b06322222cab704e53def86e479780e14cdd7e4db8713f28187c4f3825a690c2b207602a19de983d693c22101f3e219401ed59aa35512d89813bcf8e791460ff4278f46630fbe4b65c468d6c1674c50e965618d1ea251afc3126a2e1167f9582d3ae9b60464fc1e85347efb42891445ecf44a234baf20b2f6ea11ce1f6e5db369dd38a8ed9af90f09cc2defcc29b4cb613ad3914db3568e9e6962a24e10662f5730d81705d54584bc85c459980d6ffce7ab09799879d4daad97b8d2a761474767825466c92e78748310f4565af16183637527c611ab90bd36937a1d0a3628989512ad7ee7a6bcbf0dcb66ad743bf4a7cd78976ef5e30e04975db97b6444af4f792f896480569b287248d03d39df1cc32dde2349ad6d602cb86e8360b938ad906d08eb2294f640217ee198516b1d8879ff4885478acdc0ecaded9c49b917abd7ee42746a108604ec792863505c182c0f91a007ec450deb7f7ac0bb42d23979ed73a83347b74e3788fc2ede9e9ea4f4f0a17183df593b56d520ffe130bce36a2945d49e14f0bcedf5966f3ff1364f23f15b189324ae8b5d1bda56470facf34bf960ec482bb9e7356b221e0cdf9985a52f6d9980b920d8d912beb23413d3093f0e76e401bc050d495bb361c0a86f484de8c8866ed323ef027c8b7bdb762dc4fe61e92dc02297e2b29d4b374664e1c6e88dd7f05150d6327bab051d01afda26015721b1ef239a45e6251d9798f7c8cb87ef3c6e6802a1684715b3791d731980673cae4eea799982fb62e0eece1cdc1b60280f110b5b1d08631098c17beafd02720601cc6318a46239e085ace04006037be19c878dd2431047e98cca59269a712239c0d6d3775ff36a2041346d85f0399527b453a0741d4f4885233ac959f1e6cd0a1f2936a7d87e834b52867db47519342d1440ee045df7f2205d4f0a328a440301997316f32cdb51ff6ab4595072aa63ddd9a99e66dd44d2bad7ef902a64047d4ae69117e64955941f807fc8dd6039ca8d48f651c19b1ac7d3e51568c1666e070168a7af6d9a5fabe21538f3d4d123306d090ff0364751dc3ce3b2ee1a87954e4db416e991b521bb3ec1a3f2de954b7c86417a1662f25a49d43437cef7b8da74a30473aef7eb3564f93a34d688533aa670fdd4483653189ab9de60f35d78175937a5a63208e5702b12314d307b53a1dad9421adea3ea8a0c724813871d31cfe2f47591b2c367dd30c5a51ec9e2a3d88fe2b8b784b731858f547b1f7f833bacc9af987c223ee758016e9d619d8e1948aa013feeb54808c5ca7b8eedf777549ab70e6a3645abca6c25995fba49a1a0d38187709b1dbf780c4aaebde35d9591f1a7adc3832c4c9180d3aa716b5005523721faa2c4f9e7d3d2907697f8d95f2d194800dea6ed067804cd3a4cf16cdeb2011f75b33a41b071e8927cb700d4add2d291afe0c8c393cc2263333472721beb3e825d048eaca31a80cc8fb20f09faea8328d52fb5a7a8b6c337c09f6cb054186fec9d2c702f95f4fafff2f86328071c9f1bf91a0a2638e76e35f306e1184862033c5d417f9430a98dc357593efec6ad896308bce2b7182739b3d9a16c62f9b5cccf2fc90cb97233b5d342407eb0552be6c1b1844388869030eda36354bb646141fc09152227e92537a897901600f4bd52c6455f68b3d6e4720b72ea4cbf246694e376251bc38a299777a479116e6605dbb46b1e7e832164d47489dc8a7c878a87f3a5fc427351a196c82414fe0e18d923cc6cbe40483c69d8ca615329b149f008a6c875bd688b857f0d52492cca9af0054e1661b5f49f2aac9c281d5203bbf35f4c042a636655c3adeb9ff866bffee85cae4ee168883fe440e4100f2aa3d0f4330679c4848692d9a78cbf194f5f9d8bb24832fb69c9e1c9cc1406fa8586c8877731b5895f50590abe9f0cbb113b1d9901e2b44eb48e862c768eb11b501d022c5a2635c2890961ac4a17a4a8d8dfa11acda081a873bd051eb2105bf4618c182a743e5c884e850a55901a69fea8a81928ee3b526b580b056d6a85f1203363f980ed6c12428cac85869e74787a8c08408142f4847682c89c7efd19e3989cb7bd08064a1a1f1ece7b049015a1931f2e54f30c05271b639832495a1d5388594515237e9f69e1f23d9926c2bf7a25c282e249d9e5f64485314cf202adccf3316badc4f8907a9246b292e9dd06704e8b93db4ca3c3a5fb8403408abe4162af13d50af184a3a7ee4e35f9e48471de53d8b3962b3ac44a59fca5cc190e08f1e2aad7968a51708fc86a4f7b86b9420135338128c06565b90269cda93f407974d146f3761a9146e0cf6900c26fea4a516ca0c7de3a06c92e863dc10c0028894b68eba5243c6da5ae7018dda9987012a3c17833861e35bdb4a4abd53ced9c9a5a640a08ad3040d47780521a50e0a94f7d1d0df8ec0795cc52489eab60e326e88e0cb3e4815ef7f3ccf76f6985809112626fc2525cacb9ed9a5827a8542fcd56489e67a356deafebbc94cb7854bb4fc96377825befb923366457452a6ba4a9facf3e0099ddedfc289221c53e1c91e9939355510f5ca7000531394e7842a7143454fda816eaa879e61c7644d0b895c84549e19bccf616077acf3624e2d919bd49500bd9bccdb8dacf81432cae004e809a11351e49df71c95ead53c3d976491180626b886aa251d80b28f8efed99d61c3f330b0ba47f79cc77330dece67827fd9affcf7ea7229c395c96fe40e700112035a34236bab1d87b7833dd14a1230f6b604d0ef51ca6fade22590b6dadb92a07b04ff236765a400343a88b4ad9efb3d4197064ec9e331edd264c30ac53f29b95fd32464bfb4a27e84629ed79ad1ea36f983f734a367e31ad1ea0a1ad1dbeb8f71f2c3d46785d56da9dae7bb62c157a9c6abffae51fe74a438d28ba1c68f8c399d63dc1347b37e1460ee03c25c59e0b3fd8078fb1e73eabf38d4514cdef895b552fe49515464141e3bb7d886ef3d18be78924f652b96bb0ccfcaefeff4245af82ef9e780c0f56f10067881cafa2091dda046b7c856c4c87bada24788a7a5a0e77c54e332704778d83f7051cb6319477bc2349da586d2755cb7b8017d4a845041d2f4f942b0e03622310fcdb1bd2dce92e8a9c0091d62088d666be018cf7d1b4531e1f499ca3642a6ebe8fbfe6c8c3e05ad653f82e4896a9594b51986d7e97e200259a6a908a60fd59dbc6ae5b8d1d568966a2bf742bc683e619632335da9598b0318e3f0c25035edd570ddce429051472ab7ad89cc62b945574da72d0a5ce11875c481fdd1582df04458e3b2b7dfe16d6fc73de846cb9ebdd4b71521c9b48c8368a9a350d8a5f159f2377e45962a01b81434e90984f3cc425ae3a658fe0b74c8989b02b5057c8881b44ed61d9ce486899891b2de68d1369a43e47506a3a92591f7a49128e38ee2262f073da8c1d2c8123f061aafcde18b750f0eb139a0127daac6c253e2435501df5465bffa6e807df4eaf19e404e787469502dd7839bd4f42d1228ee4a4794afd26891522a786e18443a5b9290809fc23305201063325a719beb30f7d3522f3dd44004d0536d68a46069ed018e8e2f31cbd9e5a935eb973de500e590cdf0acef381262b5360c7912d53330379a091a539942ebd344a2f88229312ad9b641c02b9a16ae3dcf91ebdac11dfc355d6f49b8e8dc04766124f0b6b4e3fefcd084b14af211e1311855418aef82ebeb4786591bfb47c81c1af2a547d1894102611e3ace91cdf0347152a110d072f66ffc9c1feab4edf8189f4dfb72c0f50208d77e221115db06c31a1c6e6c31d98937b41bd63efb0b64683d47d60f0611305a7f14571c39e3402d4daf6d03db4f5ab1d2dd93b17f0e5a8445d7d178812b05b10d325bc70bb8033acf50b4d5e9a127dab0621cb7ba875598a299cc14e050487acf08ccf42f746b0d45348149582181c8ab484159924a3a23827db50af339d723648c309540beaf80fe951f15968b1d8ec7e26e8a09ae5523c91b45cd443ad3232dc529d82e4388c4e40fbb8afd520d2f0cbd53898e67213f9668b7a08397a6b0fb6a959e1426db7339f1993cd93b2c03a08d182fa1e3aa4747c42074f660dd4508892727cd967df29fee99272fa8d0b9a1fe4eda961eb630136254aca1b2c282cb516972455e6065876383d63805fa1d011d499ec5597018381653ec3b35b8fcf47e4ca34808082bdb194e814560a5b1e742c2296d3ab437617dc72377695d0bb7a5306a2b6e469c53609133692b1d33a897d58354b4959d28dcba6d1319ae4a535974537c5d599bf3c42ac880d846b43d874a8ca2e5e0f72beacaac163f374ff8a05b901a63b35f040cc11fe790859f6de55c8d86b59d7697d2ba2c933102bcce6f28c5fe39696d8c5d0c9f73a8bd1fea7fee41d87f19bbdffd9f2c92e32c62fa0b0923b2fd8b3d7c4f4d525b7a444b6236a821f4cc6f8f38d1b1f06c65ad699919bd483a10214b8479909bfb03dc3f3124e8fef11c6ca03a8ef8df5f3fa8e6fecf3e3b6b390f40bc56c9ae5f2bf1a31823f58dd2c5a092166d7565fad7a33b6e6c1d6aa37a9a79bf53a77115722833030235266eda82d2d466fd90e75a3f102b859ff2f7c14795410b668d468b4320e5a15b156e1c4d8ba8d32e3b6d25f7e487d316f75daaddf0f407ac7a7b7324093a415d5e779a6fb03c4cfa4e1b5255a66cd11eb72984f592d43b31ed924222ae8522b342c1722504ed174d4a63f61441f7ef876ea660dc29a9fcb9e8f40f4c429ff4122a0832bde9c6ce362122a4fef04becfd594357e907d16ad2a17296691391c0e72e3736a2652dbc1cc1db1556281daf6d1925fffb49a6c8ab1b567970de85174f44e7bbd3583d1aec9bd19ce0b79aaf6b233688922b989727d2358269ed7273bd122a231b9ca6465f91fb46c77da5105d8b07064a1c6f0507a4135323e1bc63ad09bb7b418f6342ea02dbab0d0c38c20617a6e4001b19162daffe144ccb51328418fb23bfa5351f3eb5e82e52558ee3f0010b1357149e9cfaab0c3021ef12cfd523eea83601a135411a1dec2ed6c46c9b9a40fcb5567352f2c789edb9f88ac716e0d8aeb0103f23d4d146516ea7ff4ec8c3d4c362fb00a6f94a7aceb35747fbae41db4b7d080cc6bec4bcb2f2c9a677b9387fdef7d9741ec16e240bfe1fe6758f765bc312db5da5edfe01ca94d84a4a9171422bfccc8e01218eac7c2633cfe661d9d1199644bae6ccc83d30dd42279d83dcffa2f1de03eae27a55775b6dce3a1fb42ac375a4265598c4eb32ddba254ed713cddca110c5c0a6998df189cf151c1ba989766d8a50d48903d2d76b1163a1b50871faa75be78ee4d0a890fb4d061af1bdfc67c012c165e81fe82f589d7d058398bcd9d148a6e1594fff436f80e9784be4087b402eb1951c000ab670da1a5030963ec2cd50a78be6cda30e12e95916196d3700c18937fc2632859f0da120a2bbde27ca927703220c8d876946ddc001ae7062420e307a6f8113f29a584a0dc95d848cae9470c4f6a083d605e58f4e750082d8f4d9ddb682a57d575e08f668b49975fb7f29c0c44794ccc921612a65bd0cf7125eaf4612044c4a53b7681761c08ee79c08e9c800da2b5d78a14317c3c9868490c7f22f38f896d41e86679517fe1b4fcbfe2b99484805ec37ac07012be75b557b5a82acd28d6df598a4ca3172e376ac7ad4f81ccca84af21773eb11a3b9ec9357743fd14e9ece7ac2c841c7160e95bdee71ac1e88467948cf59a8a079f9e2d8ccc10245c856e46bc1fb997c14683e10bfeb2f9264fe80078213f717572dbde8375c0404ad027abf9d5c5e408cba9a0e067e4d3fad110d565c5869480b6c2cfc948b8331ace240338aab870b1d593ac00b51525d673e063395079effc9e7d080b1a4b901e784bc169ca9fc2e72b3bafb3faecc60788808bbac2f62f6915493d6f66e6b524a29659232860579058e05f7be1ce8c62e28ba10de2db2ebdf18d5b933c89bfa3fec8a64d77bc3ae95ab8f6a55230f6b518c135d836afdc974a5ad95e358fbe4b3f1dbd6bd39db6bbb9f372dd05ae50ffb27a0d0639fb3d6be6c5570cea7766e71be3fbd31ee118e3695e599442dcb6d33b1e5354b7dd1fee28e6e670fa704675aee4a391437eb54298fd6623bc4548ff272a84ea7bc535e27c58c9ab566cfa9456b2d5aa3b5696b0aee5be8165aa3351bad9d328e2521c94e28190dcf242419e7c962316c5354e6aaab8ad66c319bb661fdb7f2954cd7f1168363133e6bd6629c10ad25c99290642f64b118e50045c15e9a176886d00ca119129b1ed3a473aa2a6c4be9bd55092d696a3b01466dd4b6cac1ab9dfecee300b575aaf9a956156ad95e22a6b5660f575f54c7ebabcbb41548cb6328cd220b6a9336e6732d6aa337f351ad1b04308dde4b2fa5f5ca896329dda5c2a0456db954cae6c5d8b0fea3b5e64ea3aa4ad5d19bad7b61c3fa6f45abad93b1617d7ed54aa93d793972a63178d68364e64d0383e6726dbb585fdb5fb7158e4df83a689165a381418bd4b6699e33b73b13ae5da0e68bb5784e85312d0d0cbae622e7004501d7194586506b69a733b509715c94da5ac17c9228214edacc0ca6ff6859c1e9dfcddf02ab35d3a93f54d6420b2d4cf002cd0b342fd0bc509b28ba44e382961edee9b472282d501c47e3011a0f685157eba9d469aa54527e922ea56e4b5ad7a015105ad41245bb259cb4b1d65a6b3198ca42cb9d77e701edcf497b317e9981c7016b4f10cfa48df99c102daa84f67c9510be36c60fce5a6ece39a7a55f5be20e89f45aea7c120461a637b876ceddcd5753cfe976065bf79e4e7fb97befe93e773addc7cf5dd0736c58cf92366688aa0bbad034f6fc7be23aae650405defaf3c317b55d99de0f0099a162860a3060685e606858f8a00003866605303440685e342cd0acf07d605a920a500ec0bd5ef0ab3f7507a7fb4f9f56389187b209478d4e4af496519462fb8be93cbc5b46519aed8fce17a7da92c9921b6b0e75016357c85841bfde2b744f19d7207a231f3482b194f5d232755be9fd8aa595af2d9fd2992dac95d5f15e7a2fb5319eb897de7bb429b5510be2a0e7d77be9bd944a495556b4d8a2326969c3ca1bfb9687f55189866a0db205d7c5d8215babb682df50ad4dbc0cd58680cc21ea76f5f3d9b6ffc4b4e92c5f61f93645f2d083cbc57cb8237ae3afc543c7b3c65d9cb95c85686cd7f926cdd4a9e304b7d791eaaca6d839d3ea290a62cecb91e9dbbc71f691ebcb7b54b11c304de21a308d23c25c4d7b39ee8deb622c149a855c47f943eae05915b2fd866754e7cb5f4d55f401551466ba68fb53c76fea704c5c4de97e50e898174c75dc1f57c3349929669846cb3219468e3129a671b5079c7ab89a101a57036ba8e154b6ad86a8b5d67a3f2b56ac54c171b293ad8a529d66adb5da172396b5ca4eccd96332d75aad956aadb5d6daaf1577d293f2a5ac2f52b0d5daaa33f6539eb5a234504b55d951835e7efa84d7cc167ab3b65a5b4f314cb6ceaba8a68a6a4235a5544daaea3555afc96bd231958888482696021467b3179bbd642f9de7c5b39c17cb79e1bca454398b1429528e24a59d4727ad609e4181fe20d7b96b0d289d5779545413aa29a56a52559f0984b05401cf1381a6b9989b8faeb51ee46d3fa0bb823a4666552dbd41b1b412d1f4e205a532d5d20d8ac847f2c63f2f913a7596f311db5f5ab1c379465caed50a86dbfce384210c1831e68a15238697c3524a2995512dada1c9d24a4413f7020c276da4d36a2fce1caa525adbd39bb4b6abd847330ae6a3192c509cedc1c3e6e3367fe638c76ec7085e6a9e8d80cf044258aa00e789404b71aa2ccb47414c9d3a9be5a38a45dea04cf0207f407706a7b4619d03a754f781d1aaceced76c16c56cd6999287b5ce1ae0af754ccd47a80d786816c26f565af4fc1d7ae37af1624733db634ef8246b6dda4d943789858f185fb4947131441f6549c0ed380effdae249a2fd7fa69fd4645db9114a5f0c5afcfc594f452789510ac44f81a263be7836f071c2044a3abdb4e1f1e1e108841665ec91d019903a9e7c2fc04d6b8693b7d316e5cd7bcf9e025d1ee803b45e250108e0f9a03a5bdef89f62665a218fb4e1dfc5a0a5d4f9d1bf7a4e11769c6447d2447832b4fd2ba043c77bb030d9f44a7f224b87873e52e6338416a5cc47470334165a8708d2e947c10bd4ed3f5749f4dbd86e079e10b155fe6c893bae94602d8176c1e40aefe2c968a59c73ce1de1766b026d85149f13a6dcb1282dc7b498b766d2528695d605cd7e8e83cb31cc265afcb627c11a09cabaef9efbd482ce329ccf41ee68cc494c1a6d9ab44326ed2997bc6620b2368816f39ebf43752c58591da8a4fee0f21c7167c7096cfb6bf0363790a4539935115a7c202de60d8a79cbcfc39823edefe316f3fface2107eb6edcf927565e33a42fb8bdf0a2ecfb2b35d62d9fef563e174597e5f02ed0f44d3f78fbafcfe6df6fc980d3c6e5f6d04a4edbf2377ac2e33878b87112717b40c2798b70afe3e5a47d1f66f80ac2b24f5b9acc3c771f89f7cd0fe27215acab066be7cdff3c3cc9ac0b6186eb1c96bfbb3fc43241c4fdaa2cd8f9c21a13f654e4dfd5d6546a0ffc87c232deaf9e3394d94b8ed1ebe315053310c5001110f3906701929373b7f798e844265dc7233c006e43912ca142d5bee1403b88c9e53437f6e0a3280cbb865e09c6e7cb209378e6bdfd8d18043b5a89723e6a99743f560758e6e196ea2640df7be3ff02df39c4c4b7ab87a4e7a1040410445297089c109922a50f4487923f3b9b502c56ed7dd230707a29e879eb05f80abd68e6ed7a83e06d4b4fa55815a9665c875620faf5529973fe4502f4f79e5e1ad9f46d232f32ac1cda7bbf31c39e77cd4113dbd5aad157df60e17ad396bfd7d0e5a1fd1b5bd56d7ae3fbb296db82c0de3e65462b7658cea84aebff0824d33f572581cd7e9debb95bb03f957ec3b78e8feda75e6489e63dfe51d370d8fbb3e57bfa8b68ab12fde6bdd22d246cde78b42596badfdccc9e8e44c808f5bce187978691c36e9e319bec7f833fecc7adc84c9d29ef1385fd6d3cc407d6fede3372269cb24b66cc2e4b63997000a200d3065069783196f093000d7fc1740000220f3ff578be542ef838981e701cac6c31ce2a0501d675b25a86a3caa6bcd7d81b59e73efbdd85a00d8bfc0da0bacb51658d05a0b5a0b001bfb278badb52d7f81601ff5353c0ef0f798db820e74a3f3a0efd35a75ef7d1a5e2df2f07e8c132d5e1b6ddfef7e0b994109d3b66f333c10e8639be774f19c1bcbfb803e7e1919509c5bfc9711f3ad79cea57134de07f37bfcd373c0f7339e07f9f14b0fe5ad18d599b59bf57de9cdf038f08dea360af562f735587f69fe7e4d2233c07f6b7c47d39a5b8607028bd5b19ec76968d49430b77d13eac65f824ac657cff12de3f1fbcb0361c663d084b9ed7308e830a0a255fbf41828a1c55a8481142d56211a9a9a1a3f93e777310fada1f9ff0e251de63916fcdd1614fff15bf0d2ebe07f256301a855b5b3f659df6d1a6f5b26cc4de3abe7cc2de3add7c1bf6db56ade844af335be031ffc180f04d6d38026cc5d038af669bcf64098f11d285ab0e52f0f5b60cd07ffa8478124e0190f9240e37bcccdaa429e53031451439ec302494011790e0daff33c407119745366c0c18cb7f2edd3f839efcd5f03df2f41b52ff8349fe38150f31934616ed6e3f04040fd054d981b83a2add1f2570e1a60cd073348e8668024b0408779784107f2f07ec6608a16fd45038af867fe7e35f21c144802fe23cfe9c0ffcefbe07bfb9ce701063f0ff35b103b9d126553335f4b7b2803c6c7f000c6dbef6080dd05db8a33b20863d6bc6ded57b0a28e689bb3e7a0b0dc2f5a1fd3d22d318b77867d3fc5e33401b79f412f6431322d5309511d1ea92be45da1ee0a7157c807359ec66c6954c7952dcdceec9194bbc4f6974175a8168a11bdbbbe7d9447cae6cd967c403a9bb966aea32c0452d2a552746554c71e596aa2b33186a78470342f6d62db91b6bfd1f69f222642dafe780727828da807426a8b1ca0608e228ceb0ef2ce4b5352daf0eae8b09607d53115448b0eab4498d025c08868b1a2a0d1c799d95ccab03d8b564432442f883011d5992f8d47151e5394a669db75e49da220aaf377a43a8e759037fed887bc4475a817e96f69cc32a0a883e6cb73ede515e93881b48e322aa337fef46f54896a6959a61e641722aa63b160da621dab173d62dae72a1876b20e248e76344862ba3c9eac9d07f278e83bb41c2902d54180ffa422d09d107cd1a431c61863fc2becf4e0ffb1d6da7f116814cc123472e2b2de3b3cb6831b22d067651b8d4313773c4681526ec80a8921fcf97b9f7352fadf7bd1464810b146b8d0465edf336be8b76ae88b3051b404b50e5f98edcf92d526ff09877f6e65c771e7ac737a4fa53f335de272d5b6ff8d117668701fbb1c879016656d041e353e3db20726d4e373047ae33864ed012e975924758de0b366fd3f70821dacf60c069d34937535c726497a8a509114cbb09c9388b67fb7aa3837bcd35fd7491b4ee46191105accbaa6c50ccb3009cbb04a84b3d88eb748a1be625bac441676eaa24519f3e7d92017619a102dd23a0968fbaf84868c9c68baefe03994bad01cf2d08b1c8767d15368cf2222df61229136fcbda8c8c3d07d87fd4b7a3e2dd2af1d56d0a37fee6cdc0f925b29953474d1a02798c125585cf4ef48e912e268805a4287381acc15ce8d109584163fbda2d6367e4bdbff849ffa7ee79cf3cebf165f7cf1c5f75edac52a06494fa1c50ca3340e15c3a3e378f5a0451ad359f492631986798e48633b868447fc838950104853198dd509e251a4b1edb89622819615158b7d4b5a4b21dafe2b9648dfcefaefa1054ab4f84b1608a1e5fe3cd460b4f88fa4c5a73e70b367ce39e7dcb1aad24a2bad943d3c741e3d6ed3b645ada5046dff158f1e3fac6aadb4d32fc8a3870a8a16274d4beeb211377ba48d8642e71d668b33c8835e2f2923109122a9979e41d58594d0516ab2aedc9529fd192634a5605011ba4a94a5f949bea0994f14a3ed1f8117501189859b2fc7e18f8a610293d207e5e339323f8d2bb47c20522765e76bbee6ebfbbeef737d2970be66e06c369bbd662b0ffd01b3f99acdd76cbe5eafcfe7a37af5b1563a6643942260102d7edb9f52d113bc405512676d62995a2ca594524a4f18e9eb1f9b90451b622e6929d37687d8517ebe599d9ee0880ea6eddf80f187c8cb9f5bb63a2e5a9c6307a4cecffc61229937cc1960982d6c7fadb5d6da03e72893c964b239ca3cf480892c5bb2d862d4a165b9d3ab2ec76e175890a0c828455a21494b1976c064c2a0186d573289cc21d6d7bcb411bd356135418e63c2826a268c88b4a2512f4e189d92e26c63b7a48e8f31fea6b5c59f8939bdccc0be4fa4d5c37819fd31a957791746038a79061435fd0f94e1638e018aae87b13cf42bb6386113c9753ccfa4a98465ab8eb4f8d164da7e34b348c135f38de3f67b64411ffdc5fab1aadb661c854508f51c8e15be678e8ec361f334f7dc5f45cba7a93a5528aef3525ec7a154a799f26667b98bc2a79694a16cfdcc074af974579a3dc738a90305767a69e3c371f8286fe31c73369823f531255843411ea5fc63ca6e94d69c4a279d76cffd4bc8c0e3561b41a665fbef9075d5c5ceb1e62a7d426885207d22e03973bf125a943e16ac450004428b52a6a301364836b373ce397bd43ba7b43f58a196496614c427010211f2b86e20c9995397873b41687fd175c343aa4fa0e5d7bfe1a211a2fdeb4f054c708916bf8f35b34362fe9715d9fe363c1b28e1cccda3a3084608b42863ff9d114c48d9cff6af9d8f3966a073827752b6834b6c9f52270301da73e4cdc17bc2466fe4b636e70f94e08508280c0d238042080a720013c40b2a8274983ca400e8852294568801a80a164e8ec4e02d507121c664c8164d82ac30f920c38eac79f5d65a9ba58bdfc82c61f28f06fa887c11bf91510cb936c63b9bc7512717a46cec248a2e5e9366e881c58d28089014047db962861a280ef7c96c29e667015b9210b9e0c1a878c91e9c5451b4f1bdf7defb2e9c549da04006c99216527a48218b25d60a19141d5cd70e31f21b290452d2e56088d2bd21c6d85a6bed09638c31c62adc104cc182632e59083ebaf7e259af847868c96f24ad663be918ba7d48ef0af7de212c5f8c80c0815cbf22c8112f4b1c393293620bcde60a1558f144099723285968a8c5a858e203321081e49582083a10e3c7052afc82fef44aebea827e4a9b2da0308225372f3f2ad090d4aaa8b956d209d3acb679fc64edcf952b1fbecd3f66418b16ac70724509638c3176a35b877471c494264610a8e0650815533e7c9bff184d5c1014443073e2045c60191a82c81438f89084a27e7c99618a0fdfe63fbf9ac0024913197868c243182d4659509059683991c311254c625c2861a5f061491572e9c7711442a59311fc2ced1a64a380420a6ac35290921532388105c9950a345434e483d70f48225e1ed0049ce022eba2072635265988808208a67f14c618632532bf91b3bce4377273a084e637728b1fea847f383962e107122535274a50a0dfab926a2f902755084d7185fef44a6bdb84fe499fb8f75e0e70389d2e9103a4c0a4ca901fb4a8008c86e2048725aeb83c9be7503f7cf931310ca9891a0b54f05045e906287c88a23fbdd2fa7ac002454629b830c10d615a78c2e88603bc8042125b143f6c43bc7069a2e75a27f6952d09c25f27f1c31863544b36c1c268e3d7ee84dc6c0193e40a0f480c1105162ebe0449fd88f2e1dbc8b082a61cb6c48c604144922b5944d0248925212022e48a0f78c036717b92c77cedbdf7de91de4cf10e94c082d028464cc083163fbaf7de7beb1141f470af2c49d9e654b0711c81f488dfbdf75e275920ed7b57fb02ddfac3be2dc49c188192451a31c30b1c66479e58014bd2c4041052a0c4cfe6c042446f781c75fad14256c41129454362e8a1077f6e52a58afca1801236d4922459614189a442c3be18638c3110c662f397732f649182c506a615aa8069b2348589219070909f272b10329ee47542c4edf40363238c8a2cfdb82c76e100332445ac50ea32b4c59e40e6c31132a398ac5f3e7c9bd70fa3d58e081165565382839527fedf6555a818eb9a571863fcb3e69587f55b983799096c701282a5fb199cab8d8560fce50990284b4caefce0d283ab6cbcc5958d7fd061e30b4af9944251f3cdf7827df3fd0e6eae4cf736019161cca2294b0a567aaed2beaf9924e1aab5a7ba0d4bb41142980093ad065521255acc3298f4fc22423548da78800c2d34ae491b788bb4e19866477ae3b6c8439fa0688be4525050d02867fe3e11b011d91c073d19c968d2f35d31173ee2991db96e20d5257a138416c31007c7284c841086b6ff04b4c47424d1a25c0a21e720dc0f92fa1acc90b5faa464596d3f1e334b5ad4272b7a06d4154185e9f3d0eb0ae89dd0e257022a4b4ed0422ab1ed8fa3573637705ca1875874aa772bd735f4e4c4a93f3839e79c929e5a25c89d23b4b833b99dd3d7ec3a320b1033ec001bc751a8e7f43168b9c5cf17ccdd8d053468b97fef48a08b9e4a4588a581dff8cb9dd7daa6a2e0f44ec941779ccda8fc28599bed727fb0f8cf50a1c529e43ce88ddb3cbc390eff540d5accbb67680ec988d626b4c54c6bd022956d9a24f4c4949a9e32bc6b8ad2dbdc700d3640dbf465bed0d60e17e23142af76d0d85e79e8aba26e56442efa888884d821772ca322f7de7bafbdb608cc431b64613faf7bafbdd702d55b0d73db3e4e221ec262fa8ac547b12944b2a3151c694a44500e57622510b247a20dda5360dbdf16d12b1b3b646b6cfb0379886f9bda309bfe89b6698e8ac56adb18831688c8e8e1174ddf85f6e8a1dbd70eb2411e5aa11fda0a791864836c11d7993d3239e8d75b1a614406ea36a6c26cac6d9d91b86dff0ee7526b71369dad1d38d6734c115a4604fa37cd9646e840822d861f13ed95c9f73f77e639e21592296dff9b740b037495c671a461e8ad7a74366f5fcbc779a3b3518816e78d2e8df336c334a1c56b9309d166b326c3b67dc2089a31a8544d1925ad64680800000004b3150000201008054482c16834cb0255930f14800d707c4472683a9407e324466114c520c600020c208000800c31c6305464a7009a571c741647640264e6fa230a2ab8810ce074b914d5f44f0be2aa5971caf2d0f94165466f1fd116a3112a004adb12da88197295ad194a99562965a3bdf08cc0f9ba0a314d206be27db41af1f66254e98b0ead280f4185226f19ac112acd98b7004d0a34be320042497838715b6dd95b0a798ed729c177629e7c831a800541d33d9682795fe60e22ae3c2142dd7612f81c4647ff9896c8722fb0a803e924e84fd28332ff55c2f9456b326beb1fb95bca7ceb32a8a3480607b23c229cd5ee5a9159adaf97a878f6ca7c67cb0a1d13d619a312d4e4f43e91b878d1d4f86d149677c40c42371a21966595efbc2361dff31ab235ef14fc0272b107608fdee1968bd41a3e128ec3f60247902642719428c86f25ae9d58da0c07eab9c3ab944683314ee16fb6c16d2294e943d48ab1ca35239c0a1064372cbc2605d7b04053ea6c9580e5041ebe15645356efaa785b8c23dbb70085d8b4071994d91c10e0d02de915a5b6529706e7824bc7a5596e860316002525e3e9deb1040084f405537902f2509ba02b6634d1836cf3314ffc821c348225fd921d982b3b2cabf6ccf13b4336a752d63a7380eb25b5ef0c07d0cf260a4dd85b510f2db622916385a24410b834c5190aa1cc4dcf7435c5411351d52348f5c5b5cf010508e4badd64f9191061c6fef40090defccc7f28478fd2fac0bc5e02d91623846432d1540628d8b292a730dc96eb34fe2ec8e56e8ac5b65ce41a6a8c58c4f98418dc8205522d5680f8bb5a2a684fcd4e845627b9be6a010974a5701b9afc50391f3d2a9158760eea65ccf03ee86c90a6f525bbf0de4c2780d320ae3d31412239ba4c8eea1879e3102fa52dd74d2361dd79b74617a6a794a6785c6fea3c0c45d89e1cc15b70e1634be56b09d62a00d02cb72475d889861364b7df38b076b714dee5f15c36c79d4341c1872cec68d615245101a6152e4274348b3c0ee53b2e8b2f67eff07bc2a9819e909098eb94f639de3b88ea8b7cb9d35fde7fa8c0b7c9f457debe544e3d1b47dea33dc3402007d02b239d7e2e5de6f6e2ce25e6778c8979cd15ba8947ccaa9c2d8191a70ae099805660675b42d1bf8212a4d762bdcd54814293257a4fafaa5fc9eba009768f32984922bdc2e0516d9d2fd63ec21f438dcc94e50e5d5b62addbbe60465e04935a8b76caf9ab082207912deeb2791a63ce9d869aadcdcf2e4b587e4896401ff267f86cbc1002b1d2a165cee33fc740f7c7c935fcedc7e7ff06522587b1087be5f164c303d4c409fc1bfe409b4fb03d09091b50d701c488e92837285171446695d7198b41c0cf2ce0d1619cbd3091daf494cc50dc7f419f96f780ab5d1e5a7a515ed39acf582a35aafd1780d4b9fcdf6db64f7c0ecda9a9a8ba1bc262d5b37010b870f02025d83710c12ad6b1e4f2a778e072cb56a8b062dffc99d3b5f3211a35a392e0a1dc5b11ff7a8ed4772856ea01b217844f6287edd3d49bdca35368941a1a46ffa43fc4cde8d5bf5f55dc5ff7fc9e5fa8b3fc1567b92873cb558417b418b24585d8d86cf63ea4309f54474f6431d7ed7704c1bd356a47b7a6659adcb4de89ea502f4d009bea0b555dca10baecc2fd7b0d761d4a3d482a5f9319372152f60d152a7110a0afcc59eb83f62aa7a4e804604d2ecf5369e38852f60ec129a120a87c3f8202d7820ea993d535f86202cee764c784c58f5050da15aa1a0954a8c8d24a31ad2ee3918292535bcce1ca5b254a088784b6e7be441f8fa213db8630f0679e41160962fd312738a28b21b6377f1b75d0c5a6c38a74455ae4a24c153c9b0ca0064ef1e6bc17e740c8200488c63939a8d8158c88d6dc9edf4eac09b9a7649b2d303266912c3847330b3958c85310794660e00471da47b7441e355403d4f315819ebb8f16f67de449b13d754ea0104a4e1beead19f4fceb216733d607746290b41b0345051781e4ab76e9d7c220ac57c31a1e8c4a105880dfe187b5024bd4b10875b9cea456efccb464857fefee5349814ad2933c0921b38f2afd0a1534af0b6145ec77739954688532fccf4914156aee237ae55fc8e15b5b92b9e9d0c68a35ab319bb9d3afbbfd860dcd7f5e22176dc8d0f8a6470a0cd627ca7be7a0dca7976b0e71fb684c1348d827b958541dd26dce5e337619a2538243507f885aa2fd00dde84ab5e582d2bec13dc20ee07c44d95d963037d186ffe7b8c7d461b2c40e4186ccf06c309700f26aff2e4d1672fbc2d2b6cb7593a329e151fdfcbfeb19e84d8d086463cb5d83d8c316928eaa84b277eacdcebf79289c4c0e9a36c10be13ea4935070e67d46489f5b23561d38b065b0ec6d0a89bbc16a8e0d24eb20c4702a2bdb05381b42b05f68da676115da70af2256dde29589e6edbbfb5a02a8f2847d0de37530e0be0f328afd4d9d8fcf1abab94babba20cd91b2e37f2ac51796a098f0405bf16eb75738a19dee9702503b505ded4d8a8453deffe0a550666c9642f9335372d6a352685cd155d0bca9b81e9edab5341073256066ac7e528191436158f4cfeae7cfb2ad52463406bf643063e228b8efd64ccba394b8ae16653a083a579e1bd33e3b4977c9527c38cdbdd4e614c4bde5509eeca5e0e420644c46e054161070b752bee7706c2ed9f79c7db9020e031951608bc6ba62495b46262b5a761cfcfaf166066496fe6b0c50eef0bd57b36b8cb2529bdee6025ba48da235e2c54787b49b77219e8b1715dc526ca4b8721a6790ca83b341e7070a592a0fd7eac60bb558d26a646a6aef2ac23b512ce2161d740647d31f0d91e2223d4735f40624e71a3ae144e6ac2e914149418a2fd25705387904bf4ade1d68ea092db51534c7d03edcf8fd0ab5d051761c3be03d7da41472a1cc43372d3b58d35f620a56a86e7311f067d0bea7dde9685bbcf3a8ba137fb450738457a749bbb41cacc73c7de1d0a694015a504f6d0dd5b129872652d9468ee47710bea200c767839fdd81b37d4a9c28aa7a1836706cebb036ef659330a9b754c19d53d143b07b46b4db3891b557525aa9794e0c021d02fbfb7b363e95bf38b00b26340f9679c0a738baac3327c1ac5365a6cdc4620e074229c4ae6a52c52e16d0d107b795e3e83357c7f1c5b8c4a19f83b68734b2b7d71ee04c6acb58037039cc7d2e6c07a17741b451166d4870d57cc25c942f7c18128cbc1325b121645f6c9392a4a134d63c01ff9ff66a03da0978998222f36211f6873574c09dd76cfd564b9815cce6142f1baf12abd044e7743df7a70bc883ce614b1bba16ad7294a9b699c0729d1bc7073c71f411b5251f3058b998beeeef994a5b350ae0dda74c494cd62a26ebe05ceca4d904b373801dd53756c41244f976bb63434a583eecfcff59cd79220ce0eed02630bf14f54d03394207895ae0379ace265bf3c4ed5d860c33c60b97fbc4fa380a7a6b81a33016ccf3319e51bd1a92c9a63493c5b182b3ffa2029384442bf99271ee4b18d6a7d27508c7987eaa61e86d968683cc0ed9a12ed1f6ba6e6c7a0090d4cbae7be3a881d0237b3dcb19011572bc2cd2291e338e4114fc90b0369e1c327d03fe0555f18369ed063360e08e1dee5eb29cb553394f0201ba806b561ccdda860496091678c640a9448dc3ce8e7c83578083e643abb763e05e8ac079b5c8cdd5fbad992a941219b9ff649dfe7d292d1ec91ea0639f7e3d311a3d3e843c0eafb04941f8a566b509fcf575044297f8e464c18246f898633969340ac549ec7987fdc6b078818ce58f468da5ac14b3ce479786e77815d6e4fc8583e2c4eb56ee08c22de1b6491d83de60f5c341e7670d6b93b16a11c30ffc332f2f57d3f168554134f889d981db6d3eec3a7e8b2d11b16c2eaedac55dc14da79df76a7962e2613c2e32266fd46c4aa797db810c81129f94cb22bab07c21359efb60d704640534bda9b2ec8745ad52f736aee474aa1b926bedf096fac46108fb83df8450afa93a0bf15af817d9625242e828be4bab3d5c6760ebb5cc0751828efd456e1d6df7f9fd24f44417e0d2fe8fb0aa5997c2c3e3eebbc7598a1146ef2ce9016e4e07578731514bab003ba8f0e66d437ac14301d24657a4c728e9196ca6a7d7b0b3852e9bea13489b3300f551215043d28349cc9c84db6a57ab5cee14a7f102d1a9e79e75aac880ddbc44f2ac4baf5d3c30d9de5eb7b03513f7f21321aeeaf10f49d33aa45731f181769cdf4d28baab2ec85017fa22f20945179d3f9c222a6829e9d6779efc5deb8a4dc8530f09f122385fb40b2e4310694a197b9ace444aba430787acd03fbc13597d70134a73ab8ff19f8f04f675559afb4d2cfd4827459786ab322a4881ce2950fdc4dae5946e6459761c85fede95b58d3e96d545a455397b46dcb894f806eef37d58d9e135f73c0a0a6ad8f07a0312285050601fbedd371a2614f21df3c4e8b76a0435d76b5b6c922193c657f622093e8cbc339c42a5c6c241968e92fdfd6721d06ff6f5f08f45b1a32435b87305c55e70249a32d97f034c8a0753fa5f152de0cca0171835615b02d9e7eb40d448f7f0b05b800105f2083cfa9de050880b4623ad88b03a8ba226cc62ea9a8aaee13631ccacbd73f22e55db7a6fbba498c9c29d82a5e324f11086151657434ceda814d64a7e39e8c01c0837d37af7480f8dc5a19e7ad1c8969c1d142e686cd6d97e39a67ed6e25b765151d775682bff78afcd44ee0da3c5c8a624cdfcbedd85485b6ab12cb6920999a2940322cc81f35df3ce15cabf1465b7e844379fa47ebeb77ee7ac4051f44c20ca21219072444e02fa99b8e337091ad4dfad5b75f766c856d074b7b614487112d921b63e923987b3f8f2f3a77f8548075012e2c5d53fdc65a2c19a256046361c08cf8169c27d107451094d8ed47f25397c8b7792ebdf87e4d14761bae7bd05c7fe8978cb229c9497d601a90793c65fe0bbf6d8f80277fcd198bf9beb34409e07675366788319f694e8816f3ca47a55a8e44c4dc3b4b3f7f61703770bd1679c1ddabcd3ffd48d2f2e40761ed05df42a36a70a5e8a2d7b5ae0fdc44142374dbc223141909f0bd6f99ec94988559fad0c982fc55a37e04330efe9e1e579c96dda53cd056db819a25dc78c7eec52c45d94fb5afe541a3bd171ecfd5a40d6c90812750e6958d10df3b3c47d71bbba3d4c5d254a9378f666cb323bab931648109bc925f5b307eb28f1458c9f2e7e374c807a5c8ac84f0f33f322681588eb852b22a879cd2ad9c1eb874c1209bb88cbfd4897786591b3d74abc5cb35582e3079f9724f8e86b700dd841198ce9cd3123f9c556ca087e522789601f8e1bf051043a473c148c86bd007402ff1acc38200cf138ee428fb31f8135ce142447a70b5f5a88edffc1e4326ba5a113c4c433500821c73119a1e5a9fdf749406f7721c6f27d9e221e69731045b6a97b5088d6993d9025ea3c6d62b2a6e4619fc93340b64f9e62f467067a8862a2cc724ee539e60760dd232ecbce53a326b02b31d1d80ba977290430cf36ea1d077e75028c9088c17563ec350bed7ebd1254599457d10b51990742828d37b4b4d116ff654208aaaeb20b718daa954186c6af39583c879b8608bb32cf1604db24649899404598cfe2a640f5278b364c92f818514e89af22f12d4444214c772acfb2b196b1e93e2e94c8e2f5d5c8b5d378144a99f30bc6e7905eea8f4fc7411a80059562fcf904b81f84e47c884300999786c3105a3171d12363c0ed083ee23cfb6489da71c6e713948c47de142c88f9b893bcbc4ce438f6d522922d8e74c4b9b5b0fa50eac5a74a0536e2f968980194950a8d659ca2bb22bf336a78cb34fbc900f311de35f450b51cf12feae8609fd01740d3f9bbec308c056e4c9959622b2c5db3b4e2b67ca443a0bf9d83d68666e2390a3beec3acb06287a0840291f61459762c300602c5d0340c2f44c8d57416f4c6d7ca5c0db7410ff47fda35c6ccb2693747b2701363bb042b1936500c94958ce00e7a31a216e9621f50a8dcc949150b3bec9c63fb1675085594f20131a1f71398f2a1f79401a06f9f80355f53feb1c7b90808d3566d6be915199868dc5fbb83b0d29d6153f0872c870e1c6336d8cea33fe4a7882d056fe253a7f66c71527452e167955e263716ea9f27140570729f7ea867b6704ae879409fdc49f565b03cc52988f7cfb49a0779af172e16878a5f31acea6ac162b31291806b0d72d3cd2935b32d07db3fa333c8959fb274f6e587df7b20b0837a195692b81c8d140ef51157bc4efe6d10d932746568453f143b9413ece6b1b5b8ff2d47d79018e99d83ce00f1f60c9516bc616a4ed020127884ef74de0588efee3e98f42500551f757589e9ff81196174e22e7b5ed0299b665564312c3c4ee7a0536dfeb767edc2a98a718612bb22f6326372978df0624bb85116403cc8b982805a75c1109326592e7c23da0231c080d7de1c8ceb87a7d7c9edb9fdacfdafe02bdef498a4a3592e6ed172ef7af8333460acd640e5c02b3726463f6f16c88d29c817ea06128e792e3a43b590383838c9382d5be11c89eab102f462d7c1723af3e9ae98e4d5dd41e04d6b11000d78a44c0235ba9ee1f4d66eb516125601c0744f5997c451db63ee37158a0b84bc7d8a2b252d063ae6586cbf899641f7ff01ed29a64f2a851823e4ee9353d06e7c311fc59ee087f989fd5dec0656d50a000bfe454bc850dbdcdf9718937eb513e5486c24ff732196dff19b635661658722a6f506e7b6d781c9e6b75ff4bf0c7473d6ab577c966b38d5fb396841d5d19307db253d6992f2cac2b42872159aefb01a554f2eaa23459ad184964ee6a2e641a6569a95ebeda73c8caa04f39c3ded2a991dd12d59e84efd352c15bac5fccaebff4cacd541178694d7e06b4df0ea2362250bfae288ae7a7cd6fb31bd2b3dcd5937da306ca17375e7e9e0138466c08518863effae31a008dfe2d96155eb91d18a79b008760550596d439d000247b53a5b005d191bc2d3928e7956c8fc0973674b96ec05263bb926b1d556f602553f3cb5bae88b03e7f83f8c8ad72cc76e55d77e9df600078f9f9eec593dd6f1769c932d0a32b5f1e6af870ccdd0d0beb15092839180c752ee6a5445d91b0493232096cfaccbdc373c8db71980a2d6f022008e216bec5c874f4b75372ca4c93465466a1dc6ada2bed77af41227d0d4283c7153abada797b1fa64e51ebb68566de57fb4c3f3f0fca49fa828f2def122c27dca610b664199cb8ea1c2dda1f99da8c1de09510ecf61c3448f4b9b178b7380c06596a297ee93e95d707b51b3cf2471a5edc5ad2b159939d76682b98997dc2379139ae61f4fe7db603ec49a6744700dc0317db144c0081a9ab4890e657e410a7794e6deb37ca80bfd828e1072a6f432f06814affc1a59ff65fbca7bd7d0d1cf6f9ef0e831e1ebb478b03a2c2acc1c82bdb4197c7e1c5170db5126aa5aa4cfc802a090daf36d1cc8f3cfb145772d360ce7308bfaef05befebeab747b0060dfda9256b7ab68279202296df9205ae9f4b551b2b17a556eb43b128556bedf49d2f7a85fbd469f86652c2d2d22dfee2f2a85721a85f36bd0af38685f6f5900553d25e808b56f2ddc1e379633deb084c78caf61260bf21d49db7d4a1542893320063e45361a2fdb2a833128613bcff90f043d608852d6535bc1aa4e4da33905376a3610c6f55349bfa48c98189ea5b674b2546ca223e7744d9c9eacd28504a8d66caca7294a112fc083b199553b5250cca0a1287f41f0abd924e310909b3e397f8b4fd199961d080ec1f02ea1ddbba484396d8026b7215fae7c440ab8a7753af7bd4d7f73c70234154df89ca700d35eb0504eefd6319ca39199476c65212c2b45f538c6d0726177398729ebfb0d3ef21825258b5ba3d2464b241bd84536d5f9e9c849b5167caf18a1e74521b49160fe48b84318b855c4c541f901be7d3c3365bc528c41bceae93bb529cb257fa3b406257138c3f112c481aed7be17b9a6b42d5b3dc52122f2525acba82f19d24e84121698abc3d1721d930268980c52a789a9f0c5cca0ebd33efe5dd88372374f331f5ccf7d6b6cc19451eea83fdee3496a068b329f32b194f64fa2c1fdeb5289402c52d3eeed5a45aa7599740b522d0a4c3c84b85604f8ce0c079a0adde8b82cccfe5f422c427cb8b73b48c954f340047f6cacc6e0761dd5e3fc5daa9208c5b3106c898e68982399b6ff942af38aa27cbd590cfd0c5ea603c88041aac03b368097d293b9dda213aef3058ef14ab80c4d80025a418589d9813b348f7575ac83204dddded094d5ecb3b67d55778cc15dab98b7887c31ca285e48adcc6a9d67ad76f597f9e976a407ec380713101b39dbd48d484b77447f7def190a3b41e642e685c2cc5cfe93939797794ccc1443f38bdf75d7d677169d58424d9367bfb823ec5a6da67a85a5b569981c47acbab7c6026fc585cbf5c75ec1f6cab60d94c99cf25dac44956761728c4a6833130a330e07b352989899e1f9c4d4e17c5cb1511a50d6b8881651c0b80615818f1605072fdbdf2b6ca91066d6544fd0f9db2cd451a38195b5b3925095efb1441916735edd799eed00dfc19c1bacb77b202aed9b0b0aa918ba10bd54628488184fe93584210ac0309829c2ace152686227c08abc05110f4176b501687a21b72ee5745d5ae7ef1cc356199c1d8be39ecff0d03244c4ab1ea15a501fb85d32cc0f7d0f0d62c06350318fa2fda795f25982c5426006b7022b0867e280294a57942d692899aee51d99b7c7564d4498e3d6b0dfbcddf1223964b178b0bf5f357759139d9189cb1be3ae0cb51878cbcc86d303d139c4527820f82aed6e8a44a85a76a8033b111873eda6fb413a854d29d3b72d37f877eae7aa609c5ade5bbbd9264e3ab76fe4701c240e42dd00d6cf1a0f81a66ead30e1cfcd3141ef3d15e8001268875250ca4947393491f28adba96882a99488c909ed94df5acdccc731bf7e0f8d8fef0c3b26d2469f57b0415c648f9d232b62370b5a8f14e752ee1369b1126e976dedd3783e5927f8ea724c5cb46cbcd4df76565badec2928cc066fdfb9e19e44ef6e7a1cd7753b1a7e1934f099b6dd3abc223f58b3e68ca2e1eb73af8d4b929e3287ee89ba490fe0ead023c299aed57d4340e839a530a3775dc11967510b22a78b1a6a7a82da5f67079458ec43425f57d75974542d835abca948ef7c0fe4f40810ca29dc3cc38ceed3693e3672c3d9fa8eba9021a364fc0a17f4f8571d035c94333197bbc30a18d7b760ae7a13abc2bbd01c6c281b3c80e5b829390df5204ea6aa91167371fa0cedc441a88c224c377b9848544c098e9ad265969c5eb429cee9edc0f31459a6085a73aed359b7c8b3b0039f9e40471b2b134f785275867631b1544685b9a1cf97ed467d99925b754b33216beaa733215bd4216842ba3a73bd9977340d3d5390344b7884e39112e6b401ca8f894e7ec706add99033b904c2e96ca3d592f137e2eb29ab4c5f088be7b5cd26b7ad4ed504ac30b8ea86ce349ae04d4073a282d00d4c0787f80620190139975359324c45edbc131d39ba5f39eb7c7579211a3fbc248e05b9b6522894ec119675d79d1912d0a75379828db5b7ba5a2d9aa5fbae756fb1adb24d7cbd70a0e894a94ec5e64848fa8d1d7113d9a128f50cc200727baac68626e30a5bbe666c57396462518e259337b8a28c63e3f2499db78cf1028ab8cef03bb0b45e659bc1beea25b9a919396ced5eaebe5de77d2be14c26bd7d625a1839f9263757a8a60d7e987b4a8e3554b9dcca4ea095abdb9dca9fcc68c783e39b377ca5d36e185cd533353d454ecd6cd813412931dd0440be1c7dbc74a6dcaffa7ee2e52d388e39daac516443a078ecdfa73c835ac3834ff2bb111563231e8932faac3e2ffce7515bda9e6bd8a6ad94b9687350be932435452466b0369043819016fd4e3af5652c22e8e51c147211f67ddf5b135604d8583d1c181230b01bbf40d790d61c71c260db3b9b45de68deee0523ff6634441e85197f5c5770500ff1eb56849ad2d13c879588fb226dfc7c9b574684ba3fcff9ed72bffefbe1af88f89c9769a38c5933e71d2ad80e777be4ac12e4b8dd0591031a0792cfa9c55c44ab2d568d30842d4d85c57b1d153d7cae3cee2bf1199c7295292d30fff6b47b1eacb89c7cb0d86775acf56ef1eb241a849e70c3cd48be721e0cf0d7ded14543b39ba383571e001e2d36e4158118fea83c52bb0a18ad41c2c5c091ce99fd1d0920e0b27603ac9bc260e1c4fe258787ceadbf50b3fdb89535e66113dd75967b67dfba7d78a00d3c3c0d16aa219b1dfa60a528bacef8c7817271667158dbac3a137d72a98a83ac0fe9ab6e604121b7f80f4099f62186763ff3f3e9ddb85032d88d4cb9194885084aae386d930bb2f854dc0f71bcf2f462f915ef48c4a4d2e1998f5c1f32606975e58ba4fa44c1c392231bcbee4990b1ac234a37a8b828415d66452989ab92e99330017aa2ee41b4a8e96a4aeffc75117f9dccf6515f1d2c577b19a074a98a5ab80f0ab5016b248c7b848e17faaa13206f1bbbeb6249097784113af0dd5543bd9fbb31071e1207c8969dc29f76cddc65a900311bfb82b215db88f4040f58d054a725146c0e63a8f8e8a0483c08b6060614592b5e7debd5dde8e6a759aaacaad75278750c19ee9b581d11366a1dfb68f59ed6b58e1e5103374eb2646061979ab7efedad20a71d8e28c8e6f820472d641a82e5b2a56461682628f5e62edc1e2a3d488f1ca53b68a587142ef3fbbe0fbeb348998a73acb7cb59efcd5fc94038bd6b331e25560eb4077facc147364f789e10ebb91ce976f2d892886dc4e00032e28caf5177d5020b8e187be66192c3fb200d863a9098e78cc5d8293e69e669061a1b13e2fa5dbaaa57aa55df7b2069d82d7c54858429ac3367e85a0660c14911ecb975ee995bafbbb4764fd66bb75494121826016b9b1a83c1984c8c089494b5c97f60d10f542a7c77e22a2801cc0f1a2deda9ad21978ffc6bc088f4dba10d614b15bdf068441778f412b31d6cb2eb40b3d857c483684b89113d8f8a2ac5feb3f301701e142b54e2c19af3c0e6b4f809918fc6ec7527d90897292d6c2f4bef237726f49506359e3d81b6463a7813307b11398ac0d42c772a5ffe2f47873bfea332926021632002646aa469665c56cfe63a42166fa505afe72544e5b7b41f88af876eef7f58dbe77637e2cce153d11a5a52004b7b6ba0e43a8c41f95c69018706f0b4813d2e219182110271a3a47f701af07477a9db844d4746f199d80c1f01b2ee0f1dbb37b228678f30d0c89b2dc63cd84840c31ba010550808c574670168531697507144c2e0be2d4af19ca174815e83de6741356df00881c2d01a92dc3f25a1f24cb0351f22391afb06f5fdc57c8c253b4d10211c602658c5c8705eb43636db8e6b4c770a0dae8628114986f8fce1b12f3ce047aa8644eb95628543b54ff0a3aae12862a458157f9c332940e286fabbf6533ce2185f86bda813d09e4595a8d040825b064fd975d99a1b162be510ba7af72b343768cd5f257ca94f9628cba88995eb39685631e08ba6a0ff726b3153381e6575b004b8129ae7a6fbe361640887f1fb6af7d1ebcbfc756252aa09a2f67b9b36c34c68b24b862cf85a3864914b7306b09425a7ff2208f7e9ac8d14ba83cef025c6d15b3662d5ba62013b88486393b554684bd54b7500388fbd38eca25b087b100a44f50bb64d1de5139692e93e28bdd90483242b3049b8e47f19873e3d814cba1b0ed16cbcfa35630ed03eba039f2c9d7070413a92284d9d8cae7aa76eaa177d446de6d5286a36168010e8c354aaca59a7483a631852012624cd3157408408b207829b80ec782db3e18ed3ce7217015b3c5450f4430094b2fb5595e20fd4e2ef702f53ab2c2ba409613bd486a4acc085616baadad251a25c1aabb56d106222c794ce7089b732332b18ffdbcc3f0c835e5d53aeee3b6be32efaa99843891b2bfd989ea42201ac716169aed495595db8054ff53f07cfc4a2a7d71600e94c3d1d224799b85c8e07112bcfe6d2b60815461e2e248c28bc35db5098552b88515a9dc31fa3209aae390bba32f36112140e96c5cf2481131e1872747a2b6e26e47be8e5ecdfd3434e702a9d6c87f4a52b50dc783f8b13f09bcf32fb499f26bdabc098b13e5d887310852b89ce68ac37f3e4c1db526cc2b7bf40ea5488823d0cf46e344034029e662f67595e04788b2d5b5a140c2e39562acabedb9c1fc56f2d54c692033393d981cc123ce4ab38eaee48011aa15fe4e89d8e19af0cc7386c193aadbe13ab2f710b508475c85f3c3483ef73e8abdc5e15413f86b4a223c205b404e9ce109a9040362d538f91986a45c30916ec30b424d229f413c35bf9e561c5316e49854670443a8434838db281458b48d3489a72b7c0946a2390ef3f52e4c29abcd19c0a0e83ea525406284f2c3979ce454591d3a3c78f8d4b6d7bfbfdb1c82853cf735a985b6291500c80849a3ca654a6a2dc32584db3e0c2ecac844194b3e98234adfcf082d35e3a507116ba2bd315a8ecd9a5ec4f40dd4a3caec13375d8f43074510f0ae73b60cc784a76d50c5f15afd0a334f6127717bbc66715a7ae39088d7baf803d0386204014fda9c3f3636bc2298b4c84f30a371f21c24be2fc763389a16bdf12931cb67cfac336305aa17b37f64fd2f7cc713a3262701412e8152a89e0f1ddaa66ee7ee847163d233ed0cb40f2b94276eff46686d763453672eab54a34cdd82431ee8ca41920fe454a283eae0d9b37600bc8ef75e82dc2a57df013b541c4e74f557e7a6c3f09a9d6f91d144597ff2ccbb50d96d759457a0d1a19079c13e278e2d07b5a4ebba037918b5795677a8975047a1071c0e738ad5039089e8c281faeeaccc7d59a14bb9bfcfb3682e3c06e19d00e192ee389dbfdc51fc44f021fb2063c1700a68b5fee65338e661da309aeb48edc3b811023fc14ce718349de22d0a2ebb274ae2b85fa51de3b2c6f24ed1ec5e3238100bcead0b041ede2c2ce22869659b8f22694109fb82aad1fc774debad2dda36788beb3fb0bbb4c58559e92886d9fbe9dbdba3e90ad1bbf6436eb8712107974e76a420bdc9b559ce8cf0386b9b11f70c6dc7a2a054e8f7eea30e6b5d5e511a716038a459b342c755bd3bcc968008054ce8007419e20202adf0a58b15954cfe42b979361ffc798ea46266217b3965670d2a3c97ae5f43a4dc86fb562520dc638afd401578aec5550711319119d20555d612237a23e389eacba2a2996efd197d30d1cf04b3c2def6c2d9a6e8f4918d00c9ce3fc4a9c25a2f62231e844fc53b86163b61acb91d68df51ab818ec4bae9006e8250acbf724b40b25344d935cfd9732ce5b23b6060c6003c41f6d83c537c1d5ce26f635c2a12532b3583fefc8cad287b8ea16676f6eab546621c6c8bd14828ba9285399af3934bd889a4526c23486c48feb827d8da950d475aa8e41f262706f53473ffc08d62b3abfb086e37b53d41904bf57383b8d330eb6426a67a573fb38c4a5c20866422b0238032804d7b75d39058398095919fab2859e22fa0e43a5f23e4e5a523c6275f8bb428c4cccbb9867c2d55b4f083c13817355ae85db1bee8c8410ce038406db06adae53218ae2de3ae7c0f290b84d114774a25cfc934cf70f11aff0029d7ad44e0e6b708237722f2d39ab982d97ddbdf5283501bf8231553c9695f3c9aaebff87918d5aaa773a25b56c6204811f3585801a6d9a295ee0f4389d996a451311ff48cc67f191f9a83daf6c9504ca94ca3abe7a9f7125a022d5439533add49b39baca5e5a46c64f4335d8279ad783edec9307ad4b2181edb39eed5230f85da83e709a22d839ee8af681a82baf3b3c1e9769974afbcaf577a4de320ba972c3a496b462561bab79fa943e7bb48c198f46d141cae3397dd4e5cd3f0d5796cccf7b61651fc3e922f16b7996b35a2272c11378176e517675c43a231c5c4de159d745da5aeb0d2032bbfbbb27548a764d146ca9105f7ebd351d031f391c162ec6616764a4ba2fa6ac1a8253ee32abe2bbc885150572dd796b39d1b7bde7079f1de2f4da1026eadc8013d760851cf832c9d24085983ab2fa4bc7ff66db5454f06b1928f82ea984f3c947b0b8347cf009e227e7d14c8969c7a23c257e9621d51a4c0f19e53e97354f40c890181d35ea2d365d5a5bcdef38f71b1ceb4e63d8be9ce5d6d5cad952bffebf3b9d9a7a99d06b2983fa31147e1b02b743b9cf60a80a69203af8cbe022e2b9cf15e59a10762f3673bf8dbc9b78d620308c9925fde03cf2b02717f55ad8db0feef9fbb21d086ee3871ddb665b46b76ecfcb2b801a199432737165211d35bf0eb18df4efdd2b9f130ee70a76d6fcd4ae84ad974fe88d416885536b62161049e71a6282f951ee76767585a2634e8359df165181d54c303edaf46895af06e53c6238acb591b1dbb36314cf2e3a8eac83c564f419408adbf3c48f40f9f8d9da0d8d12217b71401f8a00118f1a95f7649556de3cd171f955a9b849d6ab79cc753b15d102aaa99622d79a0010688b56ce857f4fe33302106bbb0a665e30f53be8487d2b433fcdb9e392b29322ed71434629737fc3a2d1f394b7a27c6977ad676fe754012ea8113c5c29b56a75fc042f5b0d771e218fafd42cd0e06c1927de059d30cc25ec5e5aeaab6e035fe899e919fdc0a68c7fb31d1a406944a914089db3f6ec8577507638c11f6a232fbd09bdf5275d086ac81aff0d29cc1f408880feadc2ec6618d331362dbe59455cb0c3bf191f5d2af437b0812abdc139a62f27ddb7ef65cdf0a2c81ed38756205bfe05a701e9f26073f955178ff8fdd10f480f93c814e345916cade8876b3f3489c85accd0fd871c818b238ba5656a85012813fbbb0fa987997fa7288fa7a63ebaf6857dae29999ca5a32eecb9d8de632eea033d00653a3454d71be0b1ebdcdd21f83d07c1b8f0f2964c928b83f9b968e5e1842ffc75ec5939ce96bf796575f98c1f240ac82787bb496098170da7d01599f14f6fade41cd47bca69840a0780556266a9c4d3b74fe466e46ec90772dce2171d704682acc7c19a4e9ad63da35b194de93936ed1c946795d3dfe75858ee2f8c078876b4851e5255cfc254fc24bca183c292e4e3df475c7916544f641c78918d73438b5664d6ea00c6e7838a713268d46d8438c950951a20d5cf52a57939051dd99918273ce90a423d2ec72e72f11dbf0f3b206b42094fb6a4e7f18f700aa72d3c2e6a7ca4bc760c03c4c1039a9dcb412c6e6874693db84faa7c35a74594f7b104090f9a895c709c7cf9ca60765a7d06c0afe2692cbce62894da4ebf3c3236e058f888dd3d96350fe99c54c3e0295d3153f73f6f816c39264194942eaac8728b4994bbce59413ac2b819560584c60878054a77848ec1cbf8e3750b1ec8b821612a6195403b7d3f14dd1f57c249200be2166933cb03cf79e053c202dd71c9ba671b8217890153b10dd4ad31a25e514b5b1085e8115257ad26361e7a6e4b2c874ca97e475d44b441b27814672e14419c310fc25ebdeaf7ab716cde0114fdd026b8f68b68451d5e235ad325c7e17ca014d54253a0b12472f99501023c822bdbccb3560b5ba323d8b394a222feef1692ac99e74eb49133a7cf3c83f70a53412e936802870918a3e37e457ed2334b14d7900e22922c1193f5e16275916c491b62688a725a63550e7d96047e4d7e652a295d271e0a3787ce7bf8292811dd705720697b81ac412202528fd213519c091b17520b3a8017672c79321b102d51adf55bf823af992ad3dd2475a667dc9749b0282c4a2fc09d26cce4742ef456ab05e4928abae13727b802b5516501b1898ef60a1ba8e7abd115dc4a98ae47ea20c5e69520cc2d543f16ee3bbf0f1c7afcb38567a6f65c84d71982f66c2290543ae1a0af507b42a083a83b88e5eab5e786d00564af84e0e86df560abe1f77e992c13b2e8a78484a4ec14da9830f099b1f5d0634ec8cab00e350d6d846a3838882e42f6f467e7af071f646a01c743332114f81c43bb060741331b445e0d12d619d4a0a88241cd02401d786056a5bdd812b56307e1508aac5a901a30d22be88b49e6db8c0615605c87f68d9983f6bfca019f5060a118c4b85e0235075112fb51e47e7f679e543924a5c1ef09ed4d0a79ef289d9d8e8a96c1f46fac7e34467555097b0605187abb45117817a6d89af665c9103c5f6d20893a96e5f0cc505775e0980084bbe5777b985286f2b9289b28d15754b6fa819fc84eb6ccc1e44357daa945d652a776d664fefd210b1e9c5b1e4b44fda668421fe50be1ab848ea53e813e104a551f334dba9996c8ebdd1cb0a21a4b6ddc7e993d73a3c68027828829c8c73ea0b2b9569e589acf086039707693ae3c34ed4657ae3cbadf460d579e75dde87df74efa8e80e1493d0a25628a44ce6c457f54f58cad434c7c709d76eab41530909e14d65af8f98a16dd0505d2ce21c26c1331282e26b731f15d821c8075dbd56afc424cf0bddb32d25fab7b8d18b260cb694a71501bf34639b21c11c93ed9355551a56943f8290915059dbca43367d8b50d921fa09be36ce6c118c2304ea0d76b0c2f6da88ea3d12158e3b5dfab26e9e642a65c48af5934ea4db502e0879efbbd081330a0bdad97a9b50325976f850df4fcb443c409660676cca5fdcf71f8ccc87ede50d80151ab6aa5e33f5fdb5eb9eaacad557927ae5a3d1586ca3f5ee2eab3b4f51fd84dae291a94ff4fc41bfd1e4fdb4295e351430ba1fece27090aa18fb5b1b8d10725bfd7e8698ec147dbb1d03440b9b5a905372d33c648e2626923685a9ab18601d6b0f48aa5f209bbb184385f20413970252f2c9c2ec4b608396fcc4cb1267f3273a88d594b3776d386cb0d86d4f90cde466a0330551bf1b0aad85abbf6766e1c1b95f789fd634c1b56d47f886caf858d6d0317e9b1fc2efa35e10f7efc15d354e462fc58a870f507dc2731cd97816583957b5245f245b30607fa38309912bb8a6f3c63ac9852430ebeac9176de2768dbd6ecbc1b030ca7ccc309a5b04240bf42223469b178950c44b410cacc12be18ae1afdd6b9270504502427d2d0d99d323e62f31b29d0a80783b084d2484471ab5313d0169e52f5a93f61624779028e50424012ca90ef62c38c1fc8e93f864dd099f633718bacd641c480a7869d50dac38520d4997297bd55a288a33d5caacfba07ec1e0bfd8b2e9ce2dc5c082a5ad2066f3232b488e29acc9f4375399ec6bc8464f7c715a5a99c6e085d37ccd31987aa84082bc60b50948b1e8075e0ec68061320e82485ac1603f93c53159fc5eefafde6de88732745e88953e381e994f3fde4ce764181c1b0918cc7b20d59703ceea38188a87861378286eebe33c6463b5bc77f193427a887b6fc755150d79fdef70eaf6db6ef1fcab434fac3c70509207f994a337da1856261670d2afde2cac2d52f4196568182b302a0cafda87fe09a74c55bfc61c7d866dd2f8ab25e5042071a3072dca70e2a641af4e4e8654e7846a74c696b26ba4b88799513a5809086b595497cea31dc0e6f259dec391794829fe969e4949e2b0b621488e41af40cc3aa711a91836b56249ec1f2b1f51d4baeee3f58063c08f267ee4b3f580dc3f01890093a42e6ef8312ea5389a429fe860166be49fe803d80463a1bf95f5bcd3b6b446d60a622aad3821e515a34144ddb4044f0ba9a2e5dc1eab8e4b2223255c44d8f6811c358130a910318b11f731473ef7a720a3b33cc61addc487c0e62a711aab6afa2f3343ba6eee4696a2ab8ae6b6ebe9b3e286a72908e64965d305c8ca75936fb6bd9062dedddd4d92c200d37d316a4de83ed3b614d210f4d04fabd62bdd055f3e12b1d820c6e1fb2092c62369145ec361204e0fb6b0e7ddf5798a80c4a168565eadbdb7fb6ba6f6aabab34aa59d506aa3b6af5c2e95ed8fd4edd5062bd1288694f85ee6ae8f7552d55cb9bf08f77879a9a6e67122e42be313f1841879a5aca2a02b71165b8895bb291282b8f4e8edb6813f2fbb50b1249ae92fb0af1f8f0795ceae2138ebe96ac81f19bc0b1b95a24ef7fbbd07f351aa2b9368b4baec9322272db56b89d61fbc5bbe473a849ee0b3383ef8f51ae22ac0cdfb18f343f8054b5df04e77593b8fd5177a64204a59208c50b026509242f91b1127e3b2abd716c52cb087c614984577ec213293f4ed2c7afcc9b8e6635cd8db5433eb2c82599d05ed261ad94d37de91a3df94721de91bb13c206e80d014b76adc9674bf00c32dd63e124168c57d49b50c7939c8da07755e69f4cbaa5b451e867eb6c8af3050e3228369ddf35b57a554a49f894042094529bbd3ff23cf6116a17c73246a284f19d682e07726a0475629e6e467c05fdd1f2cbdb0b6b8bc95b1465fb0d0e360241ce682bd9ebd1c130118c94fbdf66314660a19ccf50b882d11cec17b54a1b3836203fefbde88860f069e748a7921a307224b486640c9c5317c097e66e37812fead458de097801d3b5694fb1f8d6ac56cbe64005e12e4c780763775c2c0b80335b8fb5e0d7a6803eab1b3b61b6e0895a898d226d1d0deb1238385644f99f978287a636cce97cdcee3db633b4206fa7730647f34874ff7260cc5cfda70e6675a56e68510206bd54e1ae259b20809f40ef9f4eda3e0355221915959662cbaa7dc97202ff903e7888393bf6a98b16cb7543997587f994f19e9add20f2196a8b9f441a2d85546dd2df4b990db98b2d0354edff8dbd229602587c71e78ad49ef6f3b2038e6ad757f185432a8f5d195f2c504170d623e47efadf1f4d9c01490fb8ee8bdc44ef21c5e313c5d90eab137649a478b0beeb42aa873dd7d0b1b27cbfb4a6e3b10f8347dbc5ae9a9f4410c8e5253ebe434a881dcfd5d5984dc17508688a5b42aa18183008a0b63676bc5da65e133bbbe7aa7aff7c6003e19db79711b8df9c528233cbf4582da4c0bc6edb904bc3dd6380d1c900877b4db9ea9555e66374ff263e365ddb28ccabb471c33329f400a58252ef5491799557e37ed0011b7d6c0cafae69b9b3c6034e5f07eb83b75e97bb4685e5f87a22cd27333aa1851752c3523ca2b59f86ee66e7f325d46c4ae03b8ebbca2abb33949d0c6ae710048ff7740ecc254f1e5cf0dc59b1511e9640ebf86f1efa1717671633bf4dae558e75dc9fbb232d8ab838508faedcf476a7a5e6a826a8a2254796d808a2af30fdc137564f8484e1117552106d040e9297df967d1836e4450c7e211b2ad180e28e39f8feb5455697b1c14efd29f52d8e7d4af43aabdc3e71a69a4141219e7c3168824c1642cde39ce92c578f2c371ed7eea161b43ba3867131a5ed6c7b4c280f666811e1fe70dffe66c2dab762938bc9e52b3735102efb620f55ac02a1623c6ae71e37c463aea736a6d96e122919194e1104d465bd98b2c6232ca2a9199d3f15143f8ee0d5ee3cccfa20dd2549d80d4b99b071b163073ae2cce31ca1970122a7fa491c77ab70a81d0b8da9bdc13e45b72526b491d944cd42aa45966946f3c26e979672254a6a8a0e323686e600e168cb4254b23622ec090045f2697b7a1ce5957bd98b176bfb9dd5ae6378f82828ea0eec7e53a26014c68a14caa1fa8b67d390ee68dff9aa9e852b41a8b157e397cb68a055e982f8a7fc746c72f688115019e57e1a92a618f9d58ec2c7abf6e379b3df058d1eb72191f4d5d00e6484b571325c920fb48d1498a793da27ed16c6767a43b2d84585bb7340723316c0f35592d2c11ea774887f9d7bc3f09604450946093772d3e32ad970fe9389f0d62dac17d29168feb6602fdd8795f905d36369778cc8121412407742db30d6c2a1b642064e86feb48036d83da3cd1f0acdf8e8f402358bbff633bb573a2e55ee97c6d5df7fc10ada4869bea52d9d14ada32668a9316deb8c4659c591522baa32b1b25719dd48729683b534ccff6e3b3bb1196d975cc532d95b3e9919620cdd811ab37b328c034c40ff9aa26a9707f6f37a190312361990e5a8a1fdf48b466b9e139c65e46b9b9bc78994799f5e33689006dd291c4facda719f46cbf8fd9ed4415e9208153b1d247046493a08f3489927449b01b1bfc4ad78ed5c75556c225e16ba57fd2ce340a018d70464ca926c05b2195bb7c93b4597e668c53b4488ec1ec1f2ad87a3cbc913b606071157f3ef893b2204074977578f77b733ca343e450ec03205d6d464d79df4b894ce79a67d15666af08c06e0ef9c2fe85ec9711f7a39dec702984d553e2a1fbccb0e621eef7fcfc0c20161fe77c6558bb4ab9ff8eb138e2b20273abd7cffac86909194f7b56bcda2eb022f0d27b2b4f394cac2efd3b05640f0b24756c5c7bfa210f2f3203a708e455f7f0cfb995891e416a5b3b78f96cb4a8f2c44c236756d43f40a231309645e4eebe730b1a926c435da30ca95a5fc2bcab2112f46dc6406bdac663e97f3443e9272760abbf1b9385076e73f6ce1c3e3852211a2a287ad86cc540a4ba731710e3e3a434e0b9812e563f06afb8e0fdee849ba274161392ee1af7979253660896c1969302c0676806018669879c64bf3a88c5b3140ef5830b54f4deb406ff5943fdfe78306cf856c92e75a38c2c4cbf1b66e325e8c6bdaeee4eb275a7091eb0974f5302cf484181bca34319ba6ed99a211f31c801e7a3a8c6bc712d3e6bd2d041f0832c14c010f54d07253ff3d178c14ea8b7fa90a0340d09c88dee042c7d92e1ce78de51014ebf9402ad28d4f79b275cc9ea395cb7879d9b31dfe5580828dd5da81b67f44810a449a17441f6c39fc2029f384462ab0600865d0f625d1292eb77635641901e081dea126b0d785ca384d19e4e56afa39fa6c7804823027277438591d9ca70dd8eb0978442ae019bfd39e6c860cec7d3efc9552c10e26d254f54b3f4e787859f4cbb18e08fa0c9a8b22a76d68b462c6ee66877abd53afa4410164631b831b91749f7d2c36ba0908890716bfa6aea77ff0cfba23c92a0e86c4fa0d0d4683c4b7368338baa08ce78b7676e4e0adbd614c2f42e8a041ecd48418f3d0b18776eced3e32dc30cf65559e377decf68d3fa34489fe0ce841bbbad6aa418b9132d08991c9538fa41d5f8800b7e50c299f25eed56442523671436efc5e672830cfcee975224560acd158ebc76c7946921a8b471172961f9f9b5e439ac29d937a3a0c5d39a1dd7a0bf3ffc99455e15a6618eff257fd3bb73e35b87e61f3cb695640adf91e7b4bcb9891de20f712f5a7e28b042422dfc78bfec85842b2c731307b9683a023d7fd3295fdcdca5896e608112ef9dec3d198a749b390d9c5debdb61950e99715a46229cf7c567fe605c3689b01b1974415d8b65364c83f2819a38d25af59799193db49f413308c8b70ba4b7693ace11f2246daeab2999c96854cc8ff89053d358b2b04c9a0ef5174e9940c24d437ff92ceb0dda1f0017356b8b34f4e885072923d58c23ac43571a976a0266e4886da340cebd117a3e71a98ad44a32b5c500f7db5f0439e450f668329bcd09c15fed4931752909c841e966009f31a7c635cb60cb0ae7477f7e88fd1bb9bfb2f6e2643b5247f3c61800928181a9108cc0b2a690312adb8f6e96805e3328fb2363319b6c300d1b817f70be3c768b424857251b441a9abaa95417eb1e2004f80d09bcb3929d74f25fdcdbfb05e1a6fcefe51a03dbf1c48844b0c1ecc82894a518e5aa15fcfaae0b393df0de4bf9160ab364204daf84354fe092ffe87684bc92909f512efb93ca118dd2863040eb7f8d0b101255b707c2b634b15a988d5898b6588f71d9db89067e9b42a3d5436b05e9275e32f3dbc8f989b2e7d5d6ec610cd579a6afaf3f43003729ae0c5d49703495fd4ff8a946264706c3c3c75497cd64867dfafbd8d9d91358b81a2b343205d69212735985fa748b94dfb9e76c601e4d11c09b03c420fc9cf9c44ecef7d611e4b999b6fade5ade1cf787c0d3a40df3361b3ec2d5436f53031695a16b3e7c4850947276b2160620467674ff743068a4dfb876b2206b31b528c60157e7dc2496a7f8f161c0f398f31e84e46b070bfd63b56bf2f4aa652c6d9c0cdfc8737c2d5b7efe9845fc05d491ebdd6c9a6bbc9f09ce37226c2ebfb12f07f2aa2f1e9eb0e530c9d752e6d2a85b6482d96184b724103917ebd0df63d9e1230644c6258b2238295b4e7738365eae2b2814b801584b31d347fb631eb6683d80e12d496a8f2b4ea08f39a9388544ce40b85319391760502bac6cffddf87490372b2c38e0c10e5b0bb7e588a765711594118991e46ff4003bc7cb99b4834084c4ed9224166a531151daa3c61bfb214e836b12b4e2c43bad15619321e1e0424149e92f54caf4b0e57c1a7283b009fa7400a84c6be670ffb4093727d576590f63eff0cba5abb6a32d094a18e39bcaab9b47f953f34747b5d9c01b240e63922ecb9186a20839e67b29cb2b45e83978e42a8fa8f91feb24a3550eabb0999b0a51d8431a84abf0e833bbf4e1992de78c1c1827cf8d1dae5bbb09bbb18d591a2e49527642e016ad8502f56608ee1e97ee0b7dd76f15fec8303d5615629b46f136501cb870fb027b2ffda39e53e3744842f6068a88056f6e20616fc451d9237fc75e2d31f1ff947e7e3010975cc07f0e804c48ed1eb87c460aa4e10764c699b6d77d602e102f002b22ccbf2ebbc5b4cdb41ebae6ddade709c41865fb22ccbb25cbd7a6deeee375cb1225f9bdf921fc10f74ccac9429a524d26329f551c58377a45a59211363eddbffe8a85ddbb4bdbf6a4bb93d3136d06a33bb9cb95a71f497bb7031440590aaca7a9325e191ec01331b73b95cc96bc6b93e59e4fcff4f34c6c4644c54cef47ee198d76117f6ffdf92df3f86fdffc3a0cd29ee3f66803cc32a50218f59869e6999d6371784691abf86304d5a7735ed44f0766dd3f6eb7dff451897122bf31a907979ee748095c318689bbcc5711cc7c5ed6b7373bdb9088262fc9b0f0ea1376cd402c2306eb25e9514482340423e35209056cf999a96976c7777679a5f9b5b7c19b5064cc9d97eb9bbbb9509ce7d3bdea06cc62f997e91fc8df2861913ce3d3dd332ad7d460c1f153c6254e9b276e8588011d6a86ca5b042508aeeee2738afcdd591359c3867eeee0e3564e209d19db450c22dc4ffff5deeb5b9bdb9b86167f4da0fffb72576ecf0ffff4739d49093ffd05ddbb4bde3e06e0af7d0a218b8777777ff91ffffe82eb96faf13b2112534bd684189050ae747870918b0d68876e4eab77b6d6e3c9379dfc3dddddddda7fbf6c62f7e02fb95aa232b9c4294df854d5668381da790a644f0e428d1332dd3bae5a2d1aab937944316393c4088a4bcbc22bce126769dbbdfb4388a4d2847dc6073c6764b3065fa03ca049a8ec0eeee4c1dce47c8f103a9c0256014500bbc72d8ffffbf2ccbb22cf39c7051d615f8ffffffa17fbfe9aa7eec0aaad0091619a18a539f588b8395bbe004a3b8ae08f6c12c215c2c61376886643dc1084d672a17daed4363f81f7314c3c55450b228aa07c756c969de004cc24430e849b5d0c129050993f8864a54f8f272777757c64848d56ab55a6d51b1469f72126a8182179295cdc9b5405c64b5d0a1413bd016b907625870999a40c95a0a4d75535166c901022c5d7c202961352cf87a708a294a7850244eb0446c8818d3f5a5b9c1c0ee9cc4dddd7b70feffff1fb14cebd5e4a0675aa65d0def03645a365941f814bdb1a4d23402c4ee5dc22e6597b64c39a61ed3fc301936172560a300999dcaaee54556859344552c8f0cac38101553b5434af3b49d4f54b57c01270e8298a29ccd183a5117ee60392fc953f298bca6bb3b55d46b73b5b206aa2b59868f2b4d59a16f5724b97af049039d9dac5c0d3c573d848f92cfa6c8cb54de34edc2ac420e122c8ed069747220300878b46b9bb6f7abc6dddd3d4842f01aa36acac5c7ea3ff849e3fa4c36624859cd10caa892264780a86f92312999a44c62263593a249d28f49b0c20dac9248a49594f6c9d794fa5cf7e97295babb002e612f838d763ed54905a20e51a9d4256a1455eb2a01290d2951959694a25a2b72d119f90803b7196c766dd3f6d6c2217777f7ffffff8776d0c2a024cbf7451a0b12f001860e854533cbc5459429b6d95c2e27747797b73817ea93c4b96f713160141ba5527a99484da6265713ac49d604a465a8c3e1e36c66f554702fcbb22ccb3ee59900cb08e9c50c1e27a8f3f44ccbb47e13ae6709e3d555f50d2549a1ffffffcf43a10ff98f0eadde12f3e1605de1f36535ab1e62e2e6e215e578c484f9e887e82799f3e41e9031bbb6697bbfffffb0ca7be889a44c671b16c614473a13dfe5d8405e7fffff0fbbe2dce8080deeff8afb8885bd5cf4f70bb69c6662eeeec5d7e61a934aa62cbbbbfbc80d260211878854e252bc657777f7ffffff7d7be36531e892f4f463ea61e2c231be6c766dd3f6860efffffff72db63171b338ac46445e949a98327027df2d999e8d8866ac1f2f23ac4278b048505dd772b16132edc470416f175500e80e29d3ff81a37f0388b84799487979eceeee3294e88a7347c0ddbd8889f3ebdbd373d9dcd7cfa90ad8708952b421314f48a4900e3bb3bbbb1f6f2c60e9d51011313aa1eed4700e2d193c4479d07ab80ad9c59bd7a4675aa6f589e79e2a1e5e18c40b2caac142fdae466dd6dbca0de03e6b205b3992d7ab18603537981cbfbb7bd2fcdadca231a9648224359172bb945fca30652505e9c95ddbb4bde3ffffc7e21e03304808f7352f0c0a8228302cdb1f1b110ed303eee98a8a5a4001cdf0cc7859a1ba04b8bbcf2e9bfbbae0eeee45bf2aafcc6bf31abd4aafd3eb1586cad0c06cacf44ccbb4feffffcfba6ceeebc5cb637777ef91957b6cb5bbbb23b1b002a7851bac125224a0235d5040ad1120765ab25242689252eeb2b46b9bb637fca1ed6006d60fc903daa3c45187c5d1861bdd32b3845828bd1085f84181c2cc3942cc286460878c3946e43bf5ff7f1cdc4790e232e9705814719420b6a4003a79bf7a81881039cc29a818249e8340a15374f59e2b43ad0d3aa3bbebffff2ce76b7341b2805e9a17bbccd0fb75656dd8fbffffef92afcd55ee987ad79ceda2bbc6008d1b8d899ab82f48649888718162b96291995f9b088e03e860696a61db13045c611259f7cdddd0611bbf3c86b5560ba88830cd816387d009cc095739b113c7711c53cdafcd2d1a934a0da8987f8bf9767ef44ccbb47e95780aee6b88bcfaa2eb80213e2a8fcc63f3183d4add3564361db7bcc42601204bf98f7f334acd85796546ce34338e4f6f9825f60e691f90424184441115cd52c873141e156ef30693e37fa5a5d7e646bdb45ae96ab6dbbfdaf00642636582a62ccbb22cb794b9014c5ed03022720d38d19e073b493ea50fd6f2b73432912da2cbdddd5d093b971e8832408490c929a6c0da2fd0283f2fa60cc22174bd09b2e144a10a68d6906f6500912c999ead7aa6655a2bb9aa4bd5a8aab67a65dd597fd6614b8318d9d8c90a2d564d2a42149dd409962a7e9afdfee5608b4f9a5baae290c19b143d8baa198a4474d4f8a7705ff4ffff6fe2febd2084419002ef3af8aa827e219c86cc14f087eced45db6efc4fd47a9f0ae7478b432bb66f310718c81843c2f98c0d7bffff7f15cc38feffffd7332dd31a0390b723b2437c2fecdaa6ed3d8b682d7596ce25d0726849f560f102a914b24da797979622de07a814e5c68518c81d384020af567849508b5b00bc191704452e362244d183a2f8204b63c11a2e6a14b9bbbbefdb1bee330b0b078bd2e50a12ba2d898825c90e49cf0709111eea8d1c93eb728e06afc1a85ddbb4bd09d0c9816981e3458c753b02e70634c8cbb01c4107d110040be1cfcf71842784cf7d736b0b68e3526ed93775e5701df55cb967ea99966957ffffff8bb8be0486b93b39feff4799c628d71805ab01253bdb527aa6655afbffc33298422e4fcfb44c6b0f3263736c7415d5332dd3fa26bf7f0cfbff87f9e468e2fee578d7366def18fcffefee3e6be5f94a26d9cd86aea28c8a718c31b082ab0c0f1162948954e2c48d1355ba28ebeeeefeca00b06b9bb6f7be614861be36b7198d35a448f7767777ffffff9fc6256498487c79eceeee32345bc4b98bdc28426fa824fdff2f8bf1d2a8f54ccbb44e69fddc22a58ea3211e5667c9cd924b06e0ffc75401bd6a62459ca24ed13974122acee9efb6fbf6c6c8b877a55fcfb44c6b58eaeeee0e5b87ac54eb9235caaab55eedbea8cce5721f66459c0be5e114776dd3f696f7ed7d71806174609c3040304330d4a913b0aa25cf20251ea3d2a972d4e048a973abd42bdacacd95b448c687fdc91971e2a8e812240b1841d1814748d446d9e8b8c1b41d6cfeae6745080e2e6c0f8f540240c82ccb8ba316cd1a1721b1352713711fc7711c4fa7afcdbd62b320d32d888cdcdff44ccbb41e6a357b2000ad2866988c7a1f68aaf44ccbb4feffff37eb27c3d7e69eacbc4e90fa8466b65dbd77bb444697cd7dfd70fe6801d455168b4c1473e8440b9f7932b9b83fbe5b1ef44ccbb4fef1b88851442df1aab82bfeb6437f3a1fc2991e3dd332ad6fffff302875c6fdd3b68ca2a4a985e6c351ea3942e605d6e8033b8241f81f82cd8829a893b70b66f0314b38e49afffffff8ff1ff61315a18d66e0129394c649f279fbff1f9ac61a0c5d35962a7e9a3d776dd3f6667263dcddddbd19bb621209709f3ba6cca7ffff5f71f7a873878ee6531b44bac0103134c06fcfa36cfc4187e1008abafb0b00caff1b6181305489df8b0b29fa4a098e2ea8646c9eaba6108405331a040c410351148913c9772014000818464c4c604a0a1424362206026361100c0403000020181000000080601810080513142a5f0fb91f4638098bd55e1ec5e27775457fc57de7d744fa2b481369c10aaece23acc5cc8e4e1223560c66458b7115206d528e69c8881a14261f2442b910d97e8ee945602617a3ef4c701654c5b3c19e2c1af4385acdcda5b661d05050383ffbb29666dad59618969fedea6af09ae0ae98351d54ee1c99ad234100e387da0821cff1b8877882563f94de74d8b5ede7c992d75928a071ea2559a502b8a1729ae81bdf2d893ea2748417129a76e150ae694ada48af07ac4e67eb67de734aaad7a512950c01cce211ec86c2852a27741a08293169fdcb44691f51516035e04e037610afe945808dff7352fa8a379dd3afc4e92be4ca448c5d33584c96b1dc453f7db6a7ff054fb24269cd8953015dea21bce821959f4bb54bc974dce4a8a58abf74c0dc72c078e38a41bce1428780a6563cc7a037745995b82b57265ca48989a7007a9ae90667650d3e2398be365ee5e84776836e658fc194ec6f669c712a323f7a181b03cb66c011f640e4fd4dbeb907b733756d7dc83efed03de00a3b70cff56ada94ecaa2987da13fb9bff498ac40b8473dc1a0a9f9ed4e4a88a64f910c453c7c2161cfa3c30abe09d5c00c4342dc7b039b39fd22882356ca8a899d3aaf21459a452928c6d4a27aa1dcb0932370c0aa2c4e175e62cfa4dbf44d0c243521d2959ac28434d698476b5b0055e0ffce1561dbafc9534ae2a77ae5e46c676cc4bcb2cd46cee90af416e78a59e03f74a251569df226534ec463be8d0c73a5031dbd50df4fb141987105875986434ddbc200ef186a6f907a7efa65f67cb7128b2e02be4012e103f32d4b07be6be7c25b2fb5bd674642813dff64f22b3a2dc7688589d7218b9f2ff67dd2d174e6345f564238e6aae1a9318221e0e2a8e14b2a8903864265b68c8b3e00c91df89c30cb2f842a2df1cc5f02bfd309bad8e1b4a3af329be4bc08ab705e263d4b7409b3ef1ad82aab44785f290b6cc0046e63eb94f0bb5ec36f6ad4649f5584d9c7379692388a4a71fd5ea468c4407a8130167b570f9132b77ea9b1970be5c39d03da55f61449b683c8b4373bf07307c0cf88b33787c2a5ba16a189b5ee50a109aa9e2951f3bc14179dbf4fdd49f06fc0d87d5315345fbf7ce1c0b235ccf35bd664fabc35bed6397e7f3644c08a4273083ebb44afc78bb5555cc83efe748d798997fc29a6fe3fa62acbd23af409a9b850d149a45893dae66d188451ea997263c91a609e830643339c18062066b3277e8669b095c16f62a537a82ec34aed063f486185c6fe32f65f0fa442e68a3e70b2212710e62cce1895adf5e88a9113a897b562ce3d690f6d005f80591259d11451480674c14219b4a43ea5bc93f680020eb14d1937a643d943a9afdd9a805a3a38c291f5edb4cb458797b55710748f097421c1ad690c5911447fabe207145c82cb856c0f5165edb7d70424be9419a359146d1a2a11e4f5828563f0e700d67c004ebf1be6f568e103e2b2e6b09ebbe7f29a3d2d68387d239a8c56e40f672942be532bb6675ea5fea02f8040d08c279782ef57b22a5c09239e4168608c6258dcb78d4d0c98a8c737f0a19855038bd371656808eb6f2fa528974b45e27adb2b062734745f6c874c8ce4ae4f430d95fd16aeb49f15e644b8a60ed65c8e89e838d86dec294ac9969f0ebd460531c6c96f59f4e25fbe928a62165aca644fe690bf131d2a550236e8bc95cbd3a1af72014e954a8e53d308c3b6e19ba2722d8162a04405fdb4c32922d5f7961110acbe6e875fe2962390b1c2564dd2d2eb347a46b8d191b4829f302d46cd6bc40e3dc6f7c2faaaa99b393623b9c5496196fd82eb72e9b0cf95aeb635244b583963cb3cc84f780c69a5f6c988cf102f68e9791812450c6c3f77992d47e920724a354a858775a71c897c632da05ed63562b9864f6e4d38c227c89929511eb3b998e91616e28eada86b605417939db6650f2e8498eb25465d70c260375c3b5519b7aebc63d25ae9f5beb88b69e54503422164f0e2937a80ff5ce9af99206ccaa4a13085b4c4e06273733b2d7290ca4003e15882403b6d5492872aac0a506e276801a50c1b10a000daea38a9c0cd05eeb71b49cdfe367c0d2b6c2ba206ec4082e431e97276d2383b1597d24d634bbbf7ce088d34aa513d026372f4ee563a7b8e808f1eb70938dc1a0255071aa0c5b99e4ea54fd4f859f1c3b327c8f82f3a86865f3e206114ca83e261ff27867122c7a5fdb507c607ac12189423518e951fbec01187928719bf9bcdffab8a9eb973043d178dfe66d10355a6d98f173e0653a62379d587e22e7eb16fd9bedb692d836431332bb179b2a3af22856f6686b06f50d058d10b32c395a028be4b87e4fe85f541013cb2354b3c93d8d46d918f79d36abc520ffc2d219fc31fa28346d46a22706f34dc62aff06cc4809e010a2998251e8143d2d3aaa7d24c529b23b2a57875c9a10714855c6f4d6d9824e769890288d436e93b4f788c217cba9b131fb5beed8331671e076d1bb6eba6a1790c4d109f5a4f785c84cc0418cc6293d6827cf68302148674bedb4412066ae69c88d44d0b5e758fc2ce1140433ad72fb527f75498742a3b0b4552d88bdda05571438e48fa53ec283ef729053e45c7d0988483756cf416ce50fafcd27073b96690a2dc36e52c282797041ee8aa218b0bbbda836735cbdcd5bc7b6ecaaf85990f89adc9d6956215d964179b486fcff4f57ae29115889a92751d024f5adf35455102d29dac89d891cb976466275a8de564efde8d1f3f721ce25840cce89ef1b9fea40f476b6a4e1869bce1b849c9b6a2e7f48ec36cd35a47d0c481c3ac4c8531f98de4c92bdad98f429e4fe3b3e3a5783468ff55569af63b13ea6d2fac4b18d3e9a1f34629b77d4f42ad64ec00522cff59da022118d6c5c2b1ea5cc97223317edf6285c1b2c159c4e47bad6bc891abb0359b27e8994ef0b6dcced9198f436c3895ad5607231943266aa41d015dc80bcae1d0e629d471a1dd5cd912085a4674bb415e44a16760ff9dfe134c8b668c0837cf7c612bd2c1366dc903694a91b43eea8d0ad899b76a1465681c85a0d871448df229862143bf3b421f328b66f82371781cd251c713f72813b38299d586715326ca4b43c85942f71bb851537463737f5e7af2598fd82f65f3b85ee58b91117a03d33dadfced170d8d99e5aff1ad6764860c89f6492570392fab2c5935607722a3a56e86d3a7d13e25903c493206fa0b2a077c90b71fbd06fb0372ad773c9cbab68ae9aa7dff8da6aa6e509e794ff1585697adaa0d9cad3dabe72cc78475e9ff14d5fb9709af4fe37622cb62200dd54fe0af91b6a0a92ec1a4a5f214aacedf6985862c62927f9349021ca24e90cc38de460e1abaf878be31885df2e215141bbadae7cf32e211ee946016c0ca82586ecb22a4eca642e7fd2a4294fb02c811691aa47c0c0014c7e5123bed0a14493a54f67d41bafd6fce197042e7194fcc8af03b8f08ba2d9223d2cf0cb82c7fa6ae790ea2a86a5d0edb035f0ed89022d99e8b85ad0eb3b4d8022388faca67899f25bbfa623769becd13f5171da586db7c1eca18e3e268030135066512d4f8201ff0f3892d064255501caa372339279c09ace33a2c15698a393a8bec5a80882e867a1dca81452427f60d311a9fc5c631a885742d6518d1b185bd60b7202f72a832dd769573813c0ffed2fb5bc1c612575cb5002bd4598bfb1e6b4d2c78f45dae42bb6307d98a43baaf1db8faf86183a378c7a51363b29f1d611f9c9d970d57cd57db8a7ccebdb7afe6158d67473570418935cd29a353679e4bb9b7a2c97485250d39f259c542d7af5ffa678fc3f480550136feb547ec4e8d3f9e6d66de3cdd5bf876db16b38a76be16308ed2d65885fbd44f8b90fc047f83d44f847021396103efddb8c4dd72b08e4c22542f60f0572571ddf71da7171f18d2000b339ae6dbc5f4af30a8a9e45158b1071bc046ad8489c17b32bf05af7ca2cd08bb5ab6c1c198d54db56d7c981267ba8e88e9339a268042751b551ce45fb249cb5635ffd08b57e5beb4d3378185c9404f32da2751da833c0d5be13626bb7f11101eba1b6e882055548ca5825343ec0a9e10d7471664d56cbe24781ef0255492d6ca2ebcbbae1f377d43aa2395b6ce7a394b7904ed268d4cfa42419642e0874fc09ebbebd94b73c00ec225ca1511be854bf2ef6b2fdcbc33866e08cf65c2012ff2423bd5823f757717a1aac417f45bfe358915e143b070671ed9516fd0d30e2296bcb9741239a1e620045d0255abd28318e38f654c79a14aaec41e80625cd6d2090405d47a17a5c7caabc7d654d79b5439bf3928f6b9e66d4db1431e698f33822810edcf4dd3e092141e3e4f429134d44f75f18f4f32eb951a8e9284464c4ae0e4039ae796f312b3d747b3800df5cd33a42882b840a7e7b7c53955ca7650a5efb6ad5e48e88dba73dfc81fed3aa8d2774544d682456724f0bda93b76181e043f9a1c914552207be34a5561dc86ec056e43b61b210dd10ebb5cbaf8f04f8102708706b97a659a099418023f477737c8cd02e21bc36717be891f092678258038278671cadb5d4cf9657e23b3d100b667cdc15f4a68390468f0bf4c02643d1b42d7da929b1df2caa8b5f8c7e0701e2e921c29b98b3130b473fbf25c430218204c6073e3abfef3e3046f7c9f5678a59e69358695c51a324603954c7260543a52a1e78767a90cc8a242b410fc9536370a7cf29d1a3435ffba00bdc4f360c487a4ab27546386bcefe5b64ac723dcb173ffdd39e848dc1798c3be1abe3b83ab28569376c1b57554d61e86b3da731e2953cd9076db7cd9df1cd05746a1f7efd0e61962808d44a99ce6dc7518ef717d31a6e61573e938e0c5cffec3114ec97c139941c17bc0164b015882eb346e80a342acf37b755c0aaec78d9adba23f0d14530c4cf37a93e4390303a69183eba3b02876c87039acd8dd64f9a4ecd1ce10e2ccb16da2e6d4e4bbeb1c6646c1a244b48423c091ae391c47018707a2040ba900c185339061adc61e0768ddec30d8795d4efc2d6ac9d174111f2f0830dd86439f37f7820fbfd01e3c32f02d6bce14d4d9b6b161829b8aa49af35863cf13168e911c0a9ca9ace3664039be3ed4161e4e9910591e965fcf428ef82821ce704fd900aaa8e6c32be62a707005b201cf7f1b0d196a0d58a0a0d5368654599e0c4bd9525ff6ec20ab7f9cf812147ebfc5f93e091e892a738eb76418ed2db681f7ea68818f6bf911ca496ee54c7699e68da291228adb89049374f7a078d5eb80eaf00558dccad87c9cea91611027b5d23b553398302f69047f27b250e6b77cc9921606acefe67e8f72297c396e91c41bd7da199b66b04834b089cfd2efbb21c3aab84a6a29975b6e1a81263bd44570108b691b910074dc84cd57a1c85328e9ead4793db9dbebe1158d0fb58d6767bac10b239d76ae906a3d8a6504aea7e87191bf9b790e6e077354a1dd5b5baf6cf9ad235c3fb0050f99cb51610a5a1c564d07f22ba64a759464d893415b42e3146fd6eb1e3e1bec9da86a5190c55b9d96defadb11c230d3dca5bb9adbe4dbe7a0c684e51402dd17ee66dd91dd7e501c260421a960c16cd0f57e5b7610f5b57fbbfe2d5895f6bfea49ee8fd73cb29f6406b01e95b5ba329d6384029d3bd8f043275a84561089292d71499f50de2bf4ea82f11e751add037f7d40a2d0dc3397549424285f84402813fba73934dfd21e879001533d81cec3333c9c3defeedf925e39d4e09fdcb435d236446238a6d36aa0f4a52b403dd31a93e35883ea6ba9030b2441dc5f5059dc63210d8fc53554a8b51c68e0151d9c0a223be5958c7e9ae911146b0d166bc9c1921faecd7e5f162667bb84c1c3d82f7e6c841b7a36671c32d55b4fc13abcecb6614ee669f3cb26a44fde0b208f8117047585885e97fdb0d37723767ed66d0f5a3aa18cca66d0c63ed1036a7af39dd97c6b0fad2231da1fd5cbd8d356bbcbad5ad2b28da469aa8425f64f1320e093d341c64088a3df7c0b4c0f639c9a7423e4cffc8e64bc62b2022d0d85e61eabc9a62d42808520941826ac53b7786bb8e0e750248db52ca39d42e4bd13e70bdf0aa4b4f55cdea45d9ca10448ad19a67208121cac9987158beac52245b59c4408856867e234985d451626e9389495f4c161bf029ad1a9d4dad48a41755ebe1a4a1ee49694ca5caf3c4d543f55ce2f87bf7ed36e7d9e8b479909d669aa775ff8b52422f1ecce9001d13304c3ff2d2b1b7918d7ce1cf0f58a79cd64ff2b447e01880633afe4bdd151a22b890632a9541164215ae3737326b6de6027c4040cab6b70f727cbd83e967a433e4ac96be202686a8a330ba827d120bbc069b0c4f304dc6e945f91ba30c6b77e364b81174b993aac2cb3c20c4e2fefa80a18d7c35ee79216adb7cff4638d142306adcf041574abe3066e229a09d7d28c9cd1e72fe16484ddc53e5c2f91812d0f26206a1d7bbd8178b657a0c16b93d3454ca6ba4e925f91891d43e05609e087732248f24094c5c46dd0d3633cc34ca68f0045cdab601577ae5dcc628fb53be78aefcde59584b4014589e72cb22f82e3a99e3344ee2ba195c6198544fb61cf91a2d1f641ad85586abdafa34ec790953f48e4adac76d07cd7e79947e1f17c266097c2ebd7d37523a41cf21276e3ea4a541645969dfafd8b624939089c39516ae48e232f1dd660a9989e16bde0a5c4288bb0a48400dc88ff674290ec34356922288f81c633f4aef97950e6f9c1e54546fc1850cca008b9e1fd66068d00eab23201516d3ed0508b9b1e38dea023eb941e222f0dec255aea048656558351798adb021a04c8296902a105446dbb94cce1fd3111d99481d6bb036947d30ade0dd6cd11255afe98ad0858e127775f6ad55616d21bab740e33426c06cccdb6edc80dabab26eb777332720e77fce8bc8e5337b41402dbfd4078a78299779f94997a63cca4c32279904d4f855a1f13b2b26dcf47578970a797f03abd3623fae2f114f09500011421d7be5218899945232873827c6996140ee1cf8e935867c2d4f83071194a8a5e6c02fd77bffaf9c82f9aebf31a2298b2981526f283a5a137520692439f8dd3e2789a825977913363f22596c541bc8a63e08ba0cc36f6c4fbecfeb9c13cf97a48cc4a59b0c652fb6c69ff6ee2ad1a2cfe118caf74826f081789b28bd5b3c9318915dbbfd55d26ef04fabb78199a62ee84552b4563d9502e4f3804f220fa06d517a8dbb1104a21207a8a40485654b94ba2c08fee1b588f8b0fa45d34ccdc47cb49de3972dada49573deb24c676c77481b49519635675704c1b4ae2be420db7f252e0331d15fe54f7c1c99823cf97f23282ea894cd1c6032fcd96314662ac6afa9283209eee5d7a0b6b5e1b06f6a34954cce85d6c8746f530dbcc801c20818cc83766c16d24ea235ea66c07e3c1146a7664db50555c34bbb60eba778cb74ea8aa2c0814a32f1ec46843d0508bc7eb363702d1d3c4204f817395d8e352602b1aa3350501664c293539a5002e35fb1f65fbb3fa68af78ac736cbd76ca54d851d2295ac618410b1ecdaa1d738af1acb69efb57e71a5ccc04e0e01bc3d5159a2452c36ab6cc2aef9d78feafb0814ad4784fd14d18d4c1e768d096dd1b82fc7d1414541d90f880c93484f847ca3a2705cd4f467f42335ed653184581a449c8ce6f0ecee533ffb37fc4c9640dc362e821fde27b3a38d6834900ad9e816c037ae12c87730dd29d806363a4fcb0ffdf0853c44d6cf7e215224bdbc49907ab982a58d0e37601928bede0278ba5369a29020580ca6a1da80fc37d2099ee7c2c281764375af1d287f9fdd1e43843424163662ebf453afd3834fd21a55a4adbd90d73d9cf9519d08687587faedc7f47556d1e9c7569507017a80f3160fa2f85074876cf0c4f98a1f114c51814839fe9b86b64979166a7e42bfce0055670ccc8e1681880101e060d44a836083cf2e13f674a2797940ac9c2e3f4c927b7f6a1122aa9bc5bf510fa21dcbd2f141c7a59b31d6e6bc2fa2ed64d7f3ba1b247fd3ca950c67a933801fc945d198861ca5bd6babd862bb807ac6329da2a77f9648861d55ace683620e5d0a7b82a406972cf08296fff024bde0ec2a0a65043030d8d3d0237665a33bf7926d20996d95761b4bf48ff135815b3d643a5f5475a29742bfb8b849597ea54b539e57598e2b22551fc13f1b4dbfd43170f45233e9cc0055dc6cc8bff06a629d0460f238cbabc2c0515419f6804a789ccd46b6355ab000b151878c3826e7795ec679f1b24a4d13a0a9895f131a5b45535508967b927d57134762559176ca6c3aef862bbc76922c74e8938d646771d75090e2c75721c2c307b50494e512c42ac8f22a22057d1624ea86f7909db86cdb67937bbde386ebbc96530de2d07718515aa024d6701dc846331b66367e475e81bc6537ae1f99860fc8a10078da24c715b3f9f2cf642816023407dcb8ad946d081808d7dc796e31196c01095d024e3308c913b81cf8f7987881728d924de218427c1894b1bb0ddbc46ebc19b191e8ead5c9b58de90a260117d3aa183e6493873d8c674ce850b5bc65e9c1df157687a3bc75d4f9fc717c3c7d7ec0862da63a226a033b478b29aa6e1e02944faf532076d705152d755aadcf7d16e5b343322172b0485a6a2b06d3dccaed319057eab1616a704f23fe6130329c69558af1a90a51f8ba93a9b25464edebccbbd33f14a6acc23f98304aecbec72a4175dedf191c164d531e0d9f4d48a29e15dcf42f7b811b11f1ec29a6f3c72345c453dff10b3ebf108dc77f4432a06119efc1149a8c76d98d45cb2484ef94764550aacfbd12a1f8f778723a39c9b88379c32326418bc63ee8725992f4d9b683f67663b45085e2b9b4920fec9173581b41f056fe043f48809360d0cd2142a9231b91caeb59843f22960236681912299eebfd0152e3cdc576a7b0c1c12b6bd64da2a8d060e76476a528822011ab73940635a41177162876a3e8833b78ffed8a6b788895ca10806d1bc40b81f371d7173a71c6b42183ae0a6b74db57ab4f14a8c6df6d4f148555fdb726a81321187edc6b9e29ab0b76cf9b8cf6133dbfd9d5533afce4cf560f1400e670b9c20b5548cbe2209c1634c8150a5adfb9f08ce9f10a5a6b81d75eb4a5b54ad809f1c8edf7b8bd455aba467d01caa8db47ff529ec1057da45155629c57ddaa7b4b77b570b14a3f946493cfb5d695f69c94e2ae1410809fb21b5c9b7fa84e7d3f568328fe029bdef4b9826c91561f81637f5fd18e01d5c6a3e079de5a29c3ad014c4e023a95dd535d30ce3a4e07a351e7605005415b11095f0f874bba857a71bb16536251250bc5010d8ed1a285c595433f07b1445628a165da3900b13b9c9e334215e486e4e31335121f1387c3bdabb0e7c3bd90ac8f3d32c99210b457b62da5dc524a9902a0050c05080547b29ad119b55acda8fad49fdaaaad3a13e25582b6e26e489d3aae513670ab62acf5f7fd8ba2ca3da7e23035e6b4568bd42546b44653819a542873c7c138a355614594688bd5f1ab563a3a7d75bc50237a446bd58564954a75c24ac563020a29aca06387f83839a69e2a12a6cef8fb84958ac70414525841c78ec7e934c62b958a49c6ff3a2e8974670e154da36cbc8ea9d30347d2402087ca2bead31ae73f48769c9c2f89bb24d29d6010152171b78764c19e322a84f2eca4bbf6cfdf45897dc774cef44d51aa707d70214a84da946cbabfc2d4a9c18521ccfd02ddf199440d60b269f67c167cba99981da7d55c56c5d09e8f0277e915e9d9f01ca931971d2778040e5fbd6567c21445a80d4dd1b728816e1920f021dab713127ad4ffa8f9ceaa2f6b845afee9072924d8b4c351f4883d366fe0824b1749b60892b3ea2fabfcd0c3ee26c636dbab3479bd088a74477220cae8a43e0c31d4af610cdcc370354dc91781933d25174699af6511297f78684ad6a30807a2c8304234d1620589a13e05dccb765243187ed054ed224a8b651f890d5fa029f92e89a3d0a3743969d13071c38c15031d0293a4c58a323a96d75e6103af4d81a94490d9b6f1400e3b6c1aaa80b768ff1d7382750a1bf68c563b82ec382306aa938b295acc6a876b7aacaf1a644383fef0137afc767d599ce44577781cebeffe765598738e33c44bb610bb924cec9aa37bd9f2e9132e7be6d8c41e34065e68595ff53575e493b6570122c86612618c16fadf831e55788baea0b3dc3380e7cc39a7283dc6e339241706ba388cd13d09302aaa1915151579a11579f1e26588c8cbd010cbab6ccb906c0b170cb8906d11926d19926de122dbc245524a6958c3c7a634147f8ab36e1c8a448b30b6a87eb410358ed0dc76991554ecf12b8e98c30a31767dd4a74426e4011a2ad37699155a6cbc5d2614e58b6e89b62ed9156e26fb020475d5a02abc70561089bd87d2fad328adb5904b18c954353657161993e90883258c26ba805922481245b2255460adb54a5e4a8294c094c494c894ccaeeab9e72c0b3a3098906ce0421465072772a8c2c566b162e4092b2950b2021094514392830c3a603982880f77889a8d850126c8144714d18e24594296c46e528fe4d1d0e6c241055fe0004609257478b1ee153035ab2db69bdd8e92cc9433690285eb399ac271a61aa817663859c20cd892295b32935298486922058a942952a848b922458b142e5d180e0fbdcae6a0e2b6171fe77f3aa86dc044132a3ae072411061582b5646d0834c0a604aeef5c10b19acb5564a8ba61c6361653a04d1f4a751daf51100189941691f80189921d60122467ca27cc056f980eade7b2facc9c6030645cf0c81c28aec035a001d41430d568929302c1346c335265908fd6994d61e84b1e3881724ac50b1c588201b5bc203bb078f2223f28259154642c00496274ed81324c1216321434b3552b51cd1e1c5c7f9bff7de7bebf61407d9f62c3c08c94d7f1aa5f545327f7298aecd5a6ba16c6b71ebc60e5858d0c4ca16550461864d8208197ae0388ee38c5cd668893502b2462f6b14648d60d62866ed104fbaf6de7baf11da4cb9911a3672a43ffd95065991681005c60593204390d1625d24f67de2de7b6b34e5f888175b04f90204859114004104982f72e8908459c18cabcb850d3912e67a3445f228dcc19b788951823188e860440915201fb29c41e5beeee59142c39321650cd1022158d71eb12f085e7c9c7f233bdcd0822f985cc1f203982c2e68bdf838cfbda098351041f15233b9d70827bcfcdca0841847901063095b449628988061bb596bade5f10410c76df688b52a9c3762c55551194d391e6303e3c3b2f918bdca3322bb30e9d2a40b942e53ba50f124100905423754a08c202dd813236a2882882f2fb1f0c065d3f7de7baffe598fdc2b356224b960bcf838ff2f3ece5f29d3b5adb5d6da2eb625f5de7b5db0af3da281a83474e4ba77054050239420d204893050c6b04384f9dc8f303c75c7096cd3df16ecfb1c19fb7e2904b24d3fce5605b6e933b04da1d79363f2469804387923c86d0adf3f6f70e7cfcf77d3cb97bc9ea2ff371c716c5ab36969d3d7a570a4016936475da4e188c21e2fb06d53a82a713075de32a00fcd671aefa15e668626338d4743063573ca202ccd14a02b7a59cabbe42c990c64360a9427f0d47d1aa024c253f76940198494e21cdc97506407f7e56b7a70ff04fac82ccec1fd2158e6bdef3e0469b0bc2c9af20b07b3914aefd4f4336468317c1271f9029c9734090618d7d17f7fbe340847fc0010e9fdeba5fd437f5b9e214148414a17ecfbd224c5700ec2f00eee77a0fcc23db8dfe37e57164df1fe0f9a8204417ee11bdcbf3ffb7e063704e339f33e07cead37e86083ce04fa5ea93a0ed47213c0030e3a133837d029406702a9caab9f773ae84c5a72e0d5cf3c04e848208d2d03fa849e4f5847e03b5e288bbad00419f47607ca184dddf740097bd1d4fd0cc09294a79afa7cd12ca1adfe307ce1395f2f4d43c9e3d5cf614702e7ce05e8aa07c501783a1aa0cf3ff828d0e7c6e3781ad0c7c663f027d0e7e66bbc0ce8f3bdcd7ba04ffe9a9f017d683ccd77a0cfe9519f4ba005e4fe233d4a1a8d660269b068fbe0e3b881818d1a3792e61ff8e89adb1d6803fe07d6789ee77df63ccf7b1a19191999a721232323f328f04fe0cccccc8ccf80de81357ed0d4fdab8de6f5d9f74ddef5940e699e2a8553867d73230802ba03c8e8f0dee420d0f7932c9a1edca7d28c7d3918710766035c67dd7bb4ef7df99a320499011313ebbaaeebbaee87f0b0ba507ee1a92b693782e8b9e95d75d2eba9d9838e04d6a88fda7567103acfeba9756b4fce58b31cddc9934fb03a1b9ee4d24345085b3c67fbbae9ce3c3a8e8727a5f09c1e9e8f6e7a3d528a11ba0c3a0b8335e4149eb3f5e8b8283c67fbbc9a59f96a95c16ab55ac9703e704ade8aa6e6b3e956356e984ca6d5b57275c299040660f5ab5f69b00a57ab4ae70a872c4366c4c09e61dddcdd73a681d0182a90bac92c5fb2c862880a8f51c1a54ba5544a97ed1abe0d49ea526b8d901ec5550ed5268306fa8e93a59456e88c2b3474aab12e47645c5d4c202deeb40deae18d3dc73f4f772af31c7ff0a768dd5aeab5ae9059ead68ab936600b459ab277c7c4df028e8d3740dbf685a0bdc29d65dac67f71ab45645fc0bedcee8df0e14cf1ceb2d062c1bae9cee600eeb71086ed397085b75d1f025a767df95353983a2e9b02cab6e14473d6a576415384a92c7c75c6c7e93175ea4ac7d4a15d50b02d13d58a3ddad816fcc71157f5357e20ea01917d52c7b1f4c7fadb5f5beb9d52caea3ab65ab96d95fef6db56699575db2af57b44eb6fd75a5a2fa639b96f2a635b7a2f1da30ca7f55e1aae9bcf69abc82ef4d0ae7391562e7b2fbd90d212648b43692776eebc753d25b897ffece639db63d0b70f49bd12640be731e63250ab9c9b55f2ee4e5f05a774a3749372ba535a95b256a90419616c946e284c7f8c4a6a700516a41f849e5c7902c5b59b10f748266bad35aad076bb4cc8c91e5fe31e84c8dfa10344541a32db65569cb1c757dd0d88beac90576031eb905a35e00205bb8624c0dfa7b23e946a34a03e571f084b3e07824768fffc2c541ef9f905e93485f1139a87eeb0b0e1242cd01d1eed9467cbfbbef166b10a946eff7ba392867289ac32894be60ad21acab822c6c2c00bbd7d1526b05d80ed558a04b117b08578a6a5f0824a8b453d1f4ee80aca3821d262e9b8c2f3d2bf83ec51b692d0e32781ec94596d31a9bd745af50728680a955ac415b4d64a6ba5fec9b005f9820d12e9d1653d28c65a7fdfff74b9f1206bf7ca9717fceea5429ff0238b240c11adae4a4584ae4fe7ca432ff4e832dfe3b7e2d9bc1e8bdac0eede1e2e8744b1d5438a11ed57525074b7cbc6fcc0246997b6d0f4250ab4860ffbf52b903d4a287b06c929b7de70741a94297b5219f331c260bb6ccc104e7ffbb9e9905a724c1d4f9fe4851e79e4ce0766a15db880d6f1327283b11b8011ebee2196f3ca748fc7065d43edff3346124aa50e1d3231558c0049769cfc4382be49983af6ada556fe983a936835c54d1512a1b7af2ed43daa54abb9f3d1141d3b9a71a68e0af22909220feef9980c6881876f2164cb6fc187fc02e4872ddf872c630c614b20dbdebaddb321dd2141b481d3630bf1263715bc0e432fe92713f3124117d902724ba2956f26fafe2688500b79d0a316552ef8b0b1e5f7d4df31e7d3d0429f604211edafa59c4f98cc88542bfa9774c5da6b25b572f37aac9434e459a2e7a48fa56ccc973d6a4a44c5182e52f4906374fb3e27bd5486aa39e79c73251363b4c76f26bb5ac1fa3574c1d6f07c50fbd4051bcf999f6b8781b92d38c2a6a18d8bf337cf077d1ab640b70d3fcf990ffad836fd6dd3b0ced186d433cc2c6cb080ca111620a894c0c709279af08036b2011831b130617e783961ad58a15b2cd955024d9018a2081131a6d02c5bf0c8b6c861d75740d5a8d476991662ecd2769916447bd43f038ea15210fd1d33c3f6cc24d8333fd99307faf67138d6ec116f3fe6ac65fb53265c07bb6c4f09fab6d6dafa731f63d80d21fa0a798e0b52bac043ee3b14e69862ed2eb86db1d8f6f363ed056d2c76efbda0d78331c617c45ecfe5388ebbe00d1f3d52a03d8a34da1ec53d838e8e6231f9237fc62b44bae1a3af1049bed015ca09c1a7a8ea992e4c4a3d1e578629cfc11f5ea150fc19f4986559e61ff8b6c1684f574d455f684624b447714f219d6a838bf3b3acca6a8367287b7e7ee2e2fc4b1302efffe831cbea8949f616b4cbca60b2e99c734e9f4fc31b84613af6c97e260aa98868d70c3158c2b02418f2273b7627ed0f32f8317f10fee85f34f124db699a48e8bacf663c1a1aa89dd3675a6b89525a0a3912b8b3bd98e372ce39e79c73ce39e79c6b6a6a6a6a6a6a6abeeffbbeeffb6c6c6c6c6c6c6c6c6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6ea8b5f96af2dc72ce39e79c73ce39e79c73ce39e79c73ce39e79c73ce39e79c399073ce39e79c73ce39e79c73ce39e71c03d1d65ab2720ca697a6dc7932a567ddd71824b55cf7a260d27966be26947c327921fc9e4f43b67c7c4aaf7fc8c7aa399d4ea7d3e974729d4ea7d3e9743a2d399d4ea7d3e974fac1c20b403434343434343434b804eed26b0f4a9fc1eb1c944aa552e9af5782dc250c923e83925593983fb4dad16ce9fb3eef7b389f78eadedfb64d9fbc6611fbfee97ef5e6abca5e9fa7b4d61a86ad1fbf9e614fddf7d03d35c311486b8f583ffde99530b796e9e4cfe9743a9d4ea71fc2c33ab95028140a8542fd101e16eaeffd1ff759a03bf7fbbeef86ee5f4de69e06a401a2c013f8798a7261e79530b7e9b3d7630a697c9ffcbeef9391346666643e1a1fe6b8cfbff97dfeb9cc2233fad89303dde64429a5e1b8630608d02e694f99dec3dd0cf8edd879eb486047d3b44ce3d19041cd9cc4e49a8e0492f6db7c35998606ea94713c6802c30c7070b62dbd9e0004c0722613357194529176af1267a2261ae2ed291369cac099c2519a2100010880470416f08001ec01c8e4a0e938509a4c9b4aef039e7b8eb42e3bdb6f6774c7c66c4cea15c46c9085cda05d8644508cb95233623b2142f2e50c592d05309aa629f934942efdc2143930c52556da972e6be72f99a24b2699e2942e3a2da5ae2553b65e90ae2d5d4c7c382423de40754c133107c618ab4491878787a76277a2ab119fd3e77c9f73ba4f77f739e7e499d58c97014a0f2d5c78b8284a5cf91162a2c6b8d2823f8fb9fd15e03fc31d531473f4a84f77f4b8a2fd6b8fa953b797b2ca2aebf63d764cff1d75470f9754ba943d24ca2788454ef983de5adb8ccb8631b6136f166ff86e76a327ecc89f2f068c3d3e129f011cd9fef865285b284c714e1a4e51fe6cbfc99fa9b34d8cedffb436b9c9d6cffc8182ce8f2c5293aed8141ea01aa46b5d34a935e123260721ba9832411e209fe29cfe36fc557bbe28dfe56339e59453ce39a7f4e9739eb6cbc66c91534eb98189ed6712244df465cc7ba8964f426202d550ad8a16b1da15247052df59dbbbb336ee721ce6f05d4dbda70cffc69349a9155a57570d5509a34a1151ac36668f1f0e42cf3e20822f45b51374a0ef49a594524a29a594d26ea09c385f08de68d22a42156bf96479ddaae945d76e2a213c9847be8aaa44a871993bb6d56ab58258f3f1f7bef3511e8d12b279627a5a211f663c0ce51baae08002071437bccc6e0809b74c21851e51386638a2a0a88fc37261d93f90fb5ed994d3c0cc6e518376fd3c83023d62eb5ac106edaac7543b376906790e29bc01a447bc493784e8d3bbc783f479c9d421bd6a22d91d78922c84894835b1b569fe09a22920fcd2411fec63a26cab48b34d693445c335cd1d7dadff115d5b450ac2301dfb643f5371449b1ee196fef95cbf4404e25eaa9a487ba24f48cff6887fb04b2ff980fe250661987f909ffe2dc23ff09efe354282d0bdccab704b3caaed4ffbf899fe146613e81365bee95553e7c2bc033f62538cb5fe3eca235fafa057d02be815f40ada1263adbfef5f14250d63adbfef5f145d748762acf5f7fd8b22c65a7fdfbf28fed0184db5e88e4a258affdfa735c65a7fb7755bad0cd2ed81d2734a1e4c676570ee09f2c89a524a29a594524a29a594524a29a594524a29a59468c358ebeffb5f42ad8b3ec65a7fdfbf88b1d6dff72f8a3f9bde964a258affdfa7752b86b1d6dff77f612ad58d1d7410a640b44d65a55dda0c02da7402d9194437a1eda8ba6a6cb3322a7fc6dbdaac09ded8418fdf9ea5f1e32e6b06a4429e334127fa4d600758d04f8fe8ce85cd2db7064ba0a629b9810c786174e7f394f41c0ff49dbbafbb0bdd73ea2681e30a36ac51df5997ca0c2f6c8af44f4db40cc5f0a7486fcca0b7cf17862f6cea50b9b46b74afd8cb65537a896e11de7446ebd2e22eba58efcfa67f7da6486fcbba6c92a953b57cf6f5144957b47df936a4f8c23c453f4bebeb8f7ea1954d91d6db926dfab735757c687d7a8b6c6a5d9bd65a619bcad428904d2545a6eedbd76c41675d1be21451009fd0f72778816d4b1d53c73bef3ef5e1420f459aa21f4a89edf9a6484f47f41616d1525220704d4ad88f15a6ce7c39bb5c7a422be11533b1a79462cf2e7b6e1a638ca99059164c30752a53c76558bcf6dc91445c3624b4a7644922f62889724c868515591434e9f686e3afb07db482ee8f2bec4b91315160639ac88ca94e4d22d4b488fef249c881c621f1c18b945401940bc5b8d6c39e552a2018dab6cbc6682121ab3ba54efd73774a9d3a75e92a95deea972cdf49987d349648a8f44c5a2a5ae70c0d000000820463160000200c0a060302a1501425319a133f14800c5c7644725a409405647220056210c4300c82300883000c0088010821a9a483560060d3235bedb628eedcbb956c645eee8af88a5c44d19cf437b62267c6a4818d22e2db8a44444827df41417b0e65a6056f732b20b33fe34e67bda4bcb7e078e1c55dd3a704b90e96d676224773bef891cd040319b289bb2d5533df99579bc7d7d5ddba3eca5b486b8440486a3b1c53919cae937d466632c577dc5e932b0200e0e22dacfb7b2bab319b9349ceb89519228ed2f430cc8fd38aa9467e84a80d7a573968a58bad11c89702fd77b322bcc69c6a793c114f20ed44d2f66082aa709f25f0a3e9ab5eb7581bd838d96029e2079e9c08cb7a471c48879ffc20fe06370669a0026d43c1f962f2d53ce5fe6f950f2ee336c044b57294be135bed55bb30ad091a5bb62dd7e24f9f26dde4df462ff11da4ee11a49a7e7aa3fff58baa0b3a8ac72366da55d9beea159a3ed2bea698fa0a08559b2af08deca61cba99eedaa6787dc696adb026d1c78e2139dd22b9fa248e1f042f469518632b695c239777d472e0840ec5010ca840f91fae1737435b8ae5a6a6a7dc013068a06de9b10425e04f7c0c7cc885d58bc4e4374c604d47de7057d07b83bff366d44475fa07272fe8fbcd89f060bb891c714f3b7ae55c06b9614cffffba89500504ffa35ae3af9b4fe7695369b30c232be83806a6b5b33d1757fe63b919637927e8a9d43040f5fe9b90abcc6aac896e831a0855630bcd1d2048d5e39083993dd09b8de3e2ce092c506d1aa4841ec0b3b4d1e0dbb750ffcf57deab76f5255a395907ab07cd06c0b179c9edb873c02f64932406fe972404f8cd2f3db4cf678b09d1c12087ed6183e66ab9e30b8351689b6b98d895c88fda4dc5f8271af15490f8ddce08a13cee03023aa1eaa6f82dac7b9e1d6b16ecf16bef861362b0b62ae7e09da537d6ec5712632d0f8f70d05c45cbcb54da5f1e882e8f266f5841995c858c4c686fc653f0bf5c82e856dce96d884bc6827ce2641c98d862a1183ada7d8a70ba8e5562384b9aa1c71d69b33325f8431d40dc06b3c3372692197acfa16efb917406619318f681ee15a20288bb1b6a9a5f1a29ec49fdc7dd31424fad53cea1848da867728137d3522defde522b5150ed1e8f7b8a1faa56a009bb2700b058029485ce19452b54113ef4c0f7769419ec5acfddb71118d9733e4ddf2519739e70883e71f3b3a0c552c221916ab2136b22a6cf9ba96173d5b273615da781512c56d8cf991a717fad2b7c2259575f88e58de8595d230a1e785bf2cb0888b6bc670419d836907b91d305324036ca47eecb74618f95e5cd63392f664626f1c1c396b7a26bff3a998a76dabe3a7d5a47f62198c37b7beb5034bf7ebf6975707b7b286d12ae42e5a2473fdf381a762c7cd09cc4cb7a51ad8066e4d9b8166c28e1240afc46090867bc88e6d7fcecb23e6af637894217c3c42102f2e6fea016f83dbd30901c5078135ed4e90dc13844f960db7825c34b13389af8c5caf4ffdcfc0c22332acc3ba55334c4b0452ce4a6d17bedf19bf9dfde8451ce06f80951f634c7238d3252278d4066a49c6fad87c631f888a200492352babf119fd659f60cc2ad195216d193d5e991a8b271d1fc476a414d40bd664d48636e04492c6e738ffa1d1e090b850ea05a4fdf2c0dc05fe4d7325511e04157f67b1b3db266d566bab50e71b749f1506ece9d38a8e4fb20b335804e4492f51b40c4f3d690acc6e0260f504e1ed71718f0e580005777e97364127b46cc9c0c7e6870820c092602b73190a36179b3fc27c0a5cc76cf40bdaf7b1c67e4c14161e799d6161f0f0f0927b67b51df4d9aedfeaa3a186cf139b77dd8b169c499eaac0dd8dacba725ffedf6657ca43d827c5afba168e68c4078d1e897a299f47746f71e794de10225cd01957e81f69bd1a7df0ee8bd0dca296b3341b5dd4271a55b5c34dbb85fe95cc42d8dda90a4d30e3ff15a27f4b873e379c1434d4eeaefca8d00c6e4468c113f23d47eb8e62f316c8ce2730c2977ec40c00a9988ca4658294ccd2f5c94bc5117ee794763c78cf161cc53286e98eb96ca93c4387be7c95fc9a90d63ad711bffc314225ce08415d5dfaef680111b127e5f5889e37b7c53d6480007a75bf9bc50025686873dc372ff287c01251c36bc16d01ca224960eb42d080c9de3cec6b580eba9ec1a912bc4c05ac04840fc2d4acc55480c2331b2ffe182fef62c4d629da31a32f2cc71203f242b2abe02e75f91e34a684420d43cfbacac8030055199871862949f5a6ec2fc693823aea7015c4520a57b8a729dd8db071330e84ed203d12743cf3886a0a4b76132b3251d4a1b820a8d44a842da51c1708cdc5b0935f11b67b92e3e04d8b2a9aacf12fd3077d7e00fc284c43080a32b1c145affb2b4a70371e47e2f37e56af3da07600472003219268aa8d52377e57a9f6f392cf481da2ad8071b4c7112159fa1000182be9f9fb77f2d5561fdc2f1438319e667b2befd8a30df4e1fb9cbfe2458ae87f4871d97d3348c8254f6b894abd49c40ff05e041ca9dab1519e369438845c93550cf2dc7b78524f9431298aa74f95bf747a0d76c13705c52bca86af7a00f3c0bceec23fce30064c0da392931c08f7c33992abf790a59db996ed0d0eb145722d5e0418c57c8d41bb82e4c7b968982b6a5e1a2acd810597fe7fc32af87b0b2382c00df59acf156b9c60f38a4852b6cde2838fc262f94420ce83b7a040ddfe5883e4e10b5241f92c72263619800554f193923e2bfa3bd27ccf5e236ccc24b6ee7119e9c340709ce99426a428f6ce50d61487a0dfc8b5896846ff62d6e9da3dfe0ddebd03c2e4c2577124eedea8bdba8cb729557fce1aae2a3fe66a11e5f55dca014490bd42ac6c12ce415404ae154ec618d8c8ea57c66e6481b9689bc707c0483d9a7cac8d7abbc3dd203982aa9325cc75117489b788dcff63d45ba6b4c0f41ee26ce87ea9189c0574b01c7e0521c0a715b4d91c6ce07af92149429924fc88cd203df010c370eeaa9d0a50a8471158a0c194c8a401ccf1dfc588ca542328603fc9f04e8510c47383bd0f42811d6fe9440d35950a153998a58218763f2cf0fb40fe662a549cb03888834cbf640d294a62574848ef2b44f770c74cef6e0a73e99c9c7ae8e7e4bdb293b6aa379db674ddc8b954271c5a56ea85647300709d47108ed5f33a3f85ec6cbf039e85b798865ab4f93f7e7fd66cfb3cd246e9b98a39237320f70764bb79d03b7427dde9ff3193c067a2b0f62b1b33b38fe50223e86e5cca684479c76ef338fef9ae8572a6772e336593f6d4ab79ffe1748809c658ae216d70508fe3bb4400b0fb06e3c9c042fbbfd04dab3ec2b1c283691f9482b910a97c66bb81a4fc309ba0027402136e4e4991ed72b2986f4112aece536bdd7db8e4911600ade777fe085bb5656480fb2205b37b3f68ade2357c3e97c5f27ba60d78bf07ba593280b0d157c64dbe847e8b9c73656041cd2900de03a66deef4bac3e087aa89108d7fd7860dd06ced77a985eeff9de75dc24bbc43c3ec41bb6a47d41b7fb76f6d67b64f43c9daf67b4574839704c4fd1817d2559cd93bfc1a419f81e06fb4e10176db7815451d5b94c60df8b3912e859311e6cf681bf00ce1cd771d391e6610a5443ff569134e2bd5b751182c158b414aeffd5abe191fe815e3588e44339c7fbbb6db73d7e6a089752f0a97e15cf707997ad16b8b10e5277e7b9abfe0abae7f0381f6a3e37fe9d930cef3d59485971452ce5a0367b593c953dc2dff6dbdb7ccabddbb69ad07a017ef5af9bf08ba4d0b019a4130b63644c1d90742141170e997b67f48fe16a4ca337cbc8c2053a8ced76ef968bfb6485647aaeb71ee1c81786627973591219f1af5b92bfa8c50fbbee80d60f5028a55b152330b9c5a86c150a393ac14ae2b57a168d6dad008604e66e9c07e33d40cbd1223594835d5ed052e6a50d518304c6f5a1cb348b02ed6ffce1f0f0d8a9269c86100a780a733b8a23e3e9bb28c6bd9edf674b2ff2b7bbaf4485d58e35e434f0d64d76dbf345117608fdede8dc375a914cefd3dd463c37d68908f95ef9d969f54f4e947653e705591a24cf39de12970c05618579978780fbcdd3e297c64e0d5bbf7ef7041e83ecb5f872162bc8c0ccef124f0dff9d6e77d5dd58021fba5345006e13a0397256fbf26dba9303d8d8dc56aa15baca811101aa6b9eee7942a4063297044855377512b1da28baed625c24577b34de26f2e5abf9c49c3c527b1f990dd0f81067f8a8d54eebd68e5abb2cd28bf66224ac935530ad141d2b9ed210330109006877f991b8b1da3532944ae00e37d0f3272766b8166f2eed80a54136a7333db4834fbaaaa8ab7155e49139459e6c39e720e264b668a50db8ae0ce7cdad2096ce12387b72480437241e1a14de93128ee2a1bd4e3322295dce951c13dc0f16c4b887f9ae4d509bef8ecbbf74428b43a56141058c1ebf152158592439f4b8e709721e2b27b697b1c385255b025c642df5c0bb1e64171ea005dcdfd08c68c4090e4cc80b4360c72eb8d736024491f61b5ababe07d5ebd61b54799af06d0cde6c3893d1ec91badb3ac6343dd6b34811a6625c626a17729202446dd175fd110ce2da937398ebabf24d5d1cdbc447b1a6a10773ac9f07a52c9ef292eb48aa40e8f60ad0833b8b4b2c5f17c8724ea5d1ca84ff379ed50aaacb09670cd3f60081d3379df27260b4c1ee5824bec97bb3efed888f64cafebab1feb37f08abf0857709da0243934cbc76409b9a5f994e62b2ebbdca4720bdf842b0ad2ea19b59415e1e5c955e92791be3e01816a561a544fb460c863c1ed6821908ab72defbe58b7c86fb4a854e00a7d608db6c8aee993adaf576f2822661a3d6d5502599432ffe728faa5b49c33260b419c0530974f66d9dc2af77eb3316a691d1901d65c71dfe09d38885fd041e795f57dc64dfb3e30c6b0af2f88bfd16e84b0abca9f4fc498b24574ae97cd9f9f49b04a9f97adb065ef0dedc39e0a87623b1497d46b7694ee527bc449f7e224a2757e2c0ebd084bae6a68a19d5354f642e928848fd9acdd10b4488b49cc6d510f22548f101a57c2351f697ce2f590c4b679db0c4ac77b831ad106be9a33b93bc988a842d4870090f39c8e1ae60dfb540df29370b2612b98226f484edb78207be531f9ed13e8183e8645b9f251c6fd103e08681a3f2283552f7a6dd4fd222a2439b53f7c65a5ad0af606b1792756aba06b3fbc2b0d85f1597607409fb43a9a9c21844f9019f6da7bcbb6b28f716ff33bbab0bb46b3baf470e1643786d645ae16a8321e2ac887d2001fc3cfb82855c2f3f2fcc5426daa7af07c04f36e9349e5ca3e3e9f380650802118973ef5c6fb117628c7287ccc6cb9b9865b862719c08e108a6d8a3410821901e91dad1128add2982b40a0fc7450444a1b5871e337f18584717e70cf5b89689f301f191c1640d8cbbcd387ac2e281cb3ca718fefe09da1e1b2dc9e3118e06cdc00df579d426b750d112dc1e85a08163d0d1c80a5adefc39b7022876363a8ededd635ed8ed3e415d5c7c1216259e0256ff790cc4e33dbf111edef90508240cf214c5cc72afdf0a339d808e000652f06e0e39585486e1c21986569ae86c057e4163b0f3d6b24f402e70d9ec27e7bb05d88d5057532cca51556e9f5e770aa3fb9b8cdfa570b2930ee49dc1a59326c901efd99a5a5a662ad6f0c3bb8d6d879278e4fed0ffd3bc813ccb2d4e2e9a8eb0e536a0f4d5c0d2dd309f800d3ebc3ad93ed181391609c68dc7cab4d3fe8f1fd77e5a9e49528897d31dda5c88da0cc8dd7440c155de5e7c8c0d5102f42c81203af01e0f995093268ba12520abbdbcdac2f5e3e18cd1cfdb22d9b1379fee95c42c419de09fc04bfcfe0dec56ece1b4ef17b4ee3eea3f069ff887f4a9f8c560f518e2fe789658a9adbbbf23bacb3ccaa3e7d06eab8cfe3b76089e42fed602eba03e3a0eec6e4c8a544858d592c915e6f0c39d30edc00e45763b77abcfef5e6a4086769dca0c88796027778eb14e20e30411e405f2a3b570f53ef90f391dbfdcbfbbef4ddf9795f12135d4cbdb96d4019862efca8228c681694445a16465502a5538bac6e102d3e54f87e2abf24a5a1e35b0177038c1660e167c2de6f66a5c89008963d8caf82ffba79ddc9bad3cfae1681addcfa03a9896443112e3ef68342d3b4e41e2c349ae2ebf6b579bea8e1b80d461700bc76a7d65525fc97838d6ece446a4f5f84b8a212c78de432ece481e96fa5094fce29ada971a4de9918d4a7c307145db690b599d349c8c54a28d910f38657d9a6d98bcd72f95ec05ff0215604e5f7af014ace088e60fb3c3bf7328b91ea89c75a0096674c217de6e80ba51ea5089a6e3243fa940ab6ad25d8c125b538c5d711896a3086d6b8952416cbcdd5cd55a194499d57f4ee6df9bd4a56371d45efe011307a0623ae275e24bb1f08566da76758a5f541d9201d218e45d5756755606aa7f21047663fd45b79d4ea78369dc86da6dc8eb0f7940c9880ec4964ffb51f9af61717e184a3900c285973de3d9310a380c6d95332c0ce9ce457a334a39ca29d6d1e98c826eb5eaa2170d5084e3b4d797b84299c48198a36c164fb1e574b96aea943664cf661008572ef8fcc3ec51817535321dfd5225da4dfb62851ad86ee38815bc382e39f3512d61f74b3586067a0b27df7a9e94130497522e294edc6916abe836725c93bd90c37a6392b71e9b0aa1bb8a36e1ad4bc285b5b46f65c8ff120ac7428a8e1d2d5e94de0f94c42cec93b2f25300c27f51bcea072c365a56dc7f308d4d713f9482af203951916705872a0acd3ae3c2cfabe315c900f0466177f1381eda709df5c816482598e0219acea9bdf0ba8f3750c17a09beccd13aa3592a84869ccdc8353e1e2033e4eec5e5f612687f329f4b66282ab7694d24df2db529a28fecf6d8a52527fabc8aba6f3b02a7c550c8e00208479c37b68365a171d1f7d19865361e5edbbcaeefde80cbc127ca19de3538a17e14ac2c71c360b8555f34fa0fd29568ae2408f17f0a6ba5b41d2f20f09e1455dfb7d8dcc820acd66b840f98e1ca591bdfd1fbcce08d3c96337923eb2edcb7fd9f5af66c40a4ed4264433f222c01e1a5883b123fc10594cb8c6e7c4269458e431f1ff12c11d93cc82f85cbd4625020523e8b3b1efcdfb9dfac5217e43e8f77bbe7514a7440a911ace2f4f1d564626112966e5aef2c5358406c8cbb2eb6bd1413b31e38e45f53f0be0ce819319894f02bfdd25c881fd906ae6d177cc1bf105d4ede0fbf865493e57d80d33ddb7be95c28bd1e3f3475602b24498d2e61fd312ed73cc9bb9eeb7cee863504ffa4916315ffb1f2eb15e144e2bc85226bc954e31483ef63e759fd9b27b5c9da91014bca34e4240656b492705ed97310cec94a6663ba3ceb6937339bc10bbdd58f0339c31a9e4752a123db70c41a9cc506cc1c66110182a679ff7b87c82b0f62d9aa837368694dddbe3ad6fd6bbef09f093ba921aa1c90329f666e1f3d274d1f4ecded33382676700974e3808973f343df06c0c8cc806eab1061446cd267516fa7734bd9f768e688fbe0521c0c4dcc099514ad9f185581f3d3930449795c85d25cb5fb39387c11828a0626a0005b1958140d68d20a5245d3db464d24477be675f6b101fda6d1a2ebcc0ff488d9a639df7ab4d0ebe466048be182bce64aa158eb8d8c0699a1a477a5af5d5d03db260ac3c611e6044f84e6e0b4aeb4e9eb0e0420b0618f83dc8c632e1d87295a53b4a77f3828c23ab052a25c34e1b0b09335cc0ad1720bdd3b5d2cb1b8b0f67a19d7543cccee6a1d5000cafa91f03add7c93cdfb4dff18763753c1d12587d76b81639bb5a56d702c220a45886062e1073cdd115ee9c911d8ee5920b516c1e8754528ab0d6c205dcead671cdd557799e61fbc21ad8d38a0e03eb5d2d3285d840f50310eda14e276256e9db224051f135b951b691e59528bd6f3a840aeab537a30773d09436484aa588ce376a08eb904a528bdbd6b162494c7332a5e2e09292715d478c29e541c9cbe20aca606657281b69361350c95c4ae870d2801c642f05a28ffb53dfcf65621a7e66540e994e9df09822989a329d80eb4f0b75a97e77630d7daf4204f7f42ff821cc512737d93104d3bfabee5c214590e89982f4649cb2111cdbb064690e48f37eaa378401e05520f3a48f40861c09c8d9ee0756ae563be161079d2672c021faeca8be8c5fe952cd1e785b89971cb7a6e05f11147c5909db7eed16bbe8059cb479f7135ecce85fe690b9a88ed50b9ceaeddd09398968594a919572971826a0d14927b3d9dd6c3ae1e58a9201c90d09757d98106dae91ea179e158825c6b30e85565b0470844c6657a1ebda29be80aacbc5358634cd9a764293b66590915c1f8dfda3d909ee495b8eb6d6eed898f0508d09a851c05b7448c8772f41b44a9d447ab5d0294b343ce98236d702d6ec08175969efd52992085c77d497165a548f3e20e4975c9de73ef15653ffba134e795676da3cbe30d1c49355b6f00606eed75e765977a2bf0177fa9a632fd54ef3df576d87b3b5d73169c52507be717c2636c0f58d66b0d70a949b59eccd65fc96cc3a7d5af22dec0d34bef81dc541e1450204951820999234e61d251296b9f321d8f0107a261e142f10fe989318e94f59e4175312ca7329d374079e92298f2203332146e3289806448c80b4224ce547553c006787a3a9e0485910ececd1d90016582cdc5a2b19cb83809ba8781ae67882e86e150a2e319d612611d94e93d72c00e49f192df8263fd7596493e2be6fb3f5ec611e59fe7311843b98fe9f6af40939702c51f180e06ea0a6e401ded7b9799945e35616a4e0f08141be2b108a049cfdb418a00e85e1158ba9cb279dda15e726f379737ecd98faeb7c40a63926ddc9277bb876527471310f1bee927399e67b51eb9749c0a7dff8092680cdcdf5cb36c0a76ff022e2ff77845351f633265e0089f39a22a7ed94cbd813762ff91c876c4ee582d7c523a85bfaf037274c232c8faba0165c189c120f371e340df311a3c903b7241b4b12b598103b7da0b051ae0f99531762b5c07ff03bdf35a080553fa590237f162ad4ce5e708791f46360a2f625e2230fa1a5967d1c1fbb7af295a590ce87bf49bf951c2ab0207e1baf95db46ef49559f8e6c9903e126c75e45f81b5a35348fa4f2439078eb1796227a69384fe422b82a92e543ff5da0ed0856075e3514fb5e75f29d041cef0afa119c8394ec6a0ed023c902f2a23036c9147ca61033c9c5f2a98a982e09fd106c0751bd8eb3a636233563bb1772829146513a6485aa11022a798d1b35e7c9a15624100e85880b3d67762d198f7ce3920ab520c1bd39717c8e34759db0bd5543020bf760ac837d1a953b514981f2379b1d3cc64492106044441eb935208d3d26eac08d84c51b434e77adffb7c11cfb0a2d7eeffcbd7d5879d65a44cd7c1ff8c4205a73ff6a5ed1d0e708122c0a11170cae376ea9590fd31956bc9938162b6d390bb2278e3aa2c0a03dff3d4713d47a5a8da07a2024c34a44982f4701a71df08bbf910f0ff8cf87638ac96963e6523a6b8d19616d6a431eef4f64a9ecba5a69bedf9c7fffbb5a8ff72e4ed0d7c1c959db53608a2da4f06b965c3ca66cfa4fc7922aa9d8e53cd5cea5572e7375a9cfb015a473b7935a917023ad729cbc869f8839a96201b72d2b44d7d5442d3ac12a0de2121ed15a4884ec235717196829fc898c4c5180f245abc9de29bce5f184fec0aa9ab0982b7a09e8a61e229ed008e686231180778d2e2bd82862872e80ae03c764be14eb2154a6feef0d0719f4ddebeea500dfe4cac0170bd0eaf300b62b90bfc9b86e53a1fed4883950859f46990139885f12ca6d4e39d0888784168206c7ac275b718d5fe68c88d2c54dc2636b48c5e0e1bd2afcd824664e376ec58a53a0a4b343274e3f3b8f78d2ac1b8699f1aaf19cdd6ea0d0d499563ad689d23aa0bc8b03b12969a6cd67c8c9d0bd0e3676996d5bf45fcc8029014cbc6b40a2ed2f37d9c6ab240e12b9d2979328dbe02ca130ec04902f2ff5ed6b77d739b70e58054d0f77b196e452762181aa686bbca03e74003fbf9fa2a8f318b1152107ad1d3becf0f70aca99ee2c31dc91a91a2cfe4fa411b43a159862da5f02af1031e0e3b3715af69e21746034222b367b5859cc83a492a549d27d150e4e43464e68ae5f8200743d59c345b5d0fd838f65d27839dc59a9379d4c669778d810c67dc954d6f6151678e28015f2f340f0ab7d62718b7cf1d9cb1bd6194d9f0758a36d6dbc77797baf9eb496af2e492cc037c53f24e32f7acb820534d1ccf84a0b1fc2ca076384635963b8723e52705a2dd4ec6b7659ac9b6a4bcfec218c9e619cde828b2f9a4e995f641d632492d48ea2d81cd60d6f75ca821d4362d83d255ebe98067db95bdd13fc138485b6e8f82b32046297c082c11aca682d051758584b9ec02e917b14be994f0f54939d5f2c01462008fa95db16644446126f5f61436f27f9720b210860c73691fd6efa0b40fce09bc975a03b3b636505c0bb70faa519ac0c6c9934e2ded4206ee14c8f2afdb4c266f36411566bac8115581721928c1f2b6285ea8e31c7a03d76a470a41a2abdf7d6ad33b0465e359afe43cd8a5f0509535a6d2d3e1157f3473c9b9f3a9c7587e2f0715a40d543b17880d7a61e2b86550ba1d823eb4914b7bcbb820ba71117437be41030d5f7083b7d74defc5f890550de266fedd729a14e15ee5162a4021a932b5ca448e87146e0b0500277766c25c9794a790bba5b94f6fe8f720ec3072e5ebb082da62afcc3c9717f890b90c720f4e5384f8b271a9b79254d799b6b5087051ae655bc35e2c5b9c3405155c8f1153b1e509c8540854cbccbd546c47d195a0e52dd33f7c8937b59c9317d875e908def15c29e25dc979c5c69868401b56713e0ba9b637c385ea9ef80d8ed8f606ce9730dbb15f34c9883ff65d6095d15cabfb41bd44056748274ae164018649d1260cece0ef048faeb3d336366dd53addf3fd607a692650e3b57ccffc45742c8a705c4bc694e5f783e06f849079bea52123c2e33d5bf11a07a3815cd4e586720b200242132f1506788fb9206495678cabb3e0511589e81a37bde4acf36815b994ddfe79718a00c933d67342f4831760a1be01a417880dce4bfd040091ea7a314a554945953596768e886a0d87a88297acfac52b5ba043bf0996773d3783eb3285e229da85315b9c728111606f5c68a2c5575d6b8eaf6048fc78069f49aa40dd990f6837757b53410120e364e01bc683605379e18884b7a05eab5fae9774a6c8c669a5007a2056d3690d95fad70a10926fc687a754d85e64290498834926fe76241360e9003e7a1e21c1e5887a2f9a60a2c2e0c19f0b426681bd91532aa9735452da3f721965d4febd7a0c3bca6e7554c8c35e6a58134358612ca4afa6bcf48643e2aa00dea4b26edbaa302aa7d034abf3d98deb6f5e2667a8b93d8f8771d46c4aa6d635bf439538894e02c58e90ad9dbbca94f7d1f3bfe4429285f5d5cb32c9b24877a339dab34e7fb87712ae585b0d6a69eee4965e8106e50ad83283d587f3eb63f9af2821ed8a2183696cce81053d8bec11a9f610745484c7f6ab15d048afccedc62ac123e1d573b24ec5807844659df6c0560bdda7913175f7146efd4796685545b1b3f7e3c6ecf7245b51d77fb2b5c07edfd27c56eeeb3d2f646f59c9e7f0f441533dba63ea243f85bf029e417b19af3a7c79faeadac9a0f85210fbbc1dff0192d9624c6f2984cc1bb1e945239e5f055e47403b519b7109601d540537930d7c2fc8d0ce5bab19d6e3b0a46b7c6b59416fdef0fb748dadfccc56b96c9b772c67e7a1d4ba8be5c60be49a978a4fdf152ca001b271425bb406600418a6462eda2e217031f62c4a825177a1c3db359e10f6e50c622b3fcdd5b1605af9925bfe3d37e88a3f561f4041025dd19ce55b9897f725784a9a839228bb2dd63fcd575f8c9ddc3bde94503c27ac0c25ba35ecd5d404641c4494f44156c5ebe2be659944401eeb17e62084d6b960eb94b1863f73cec564742b7bf9087e7156e7fe3eff9b3339588aabd954334b1e5e21a4b7dacb08c3a2099d221c8fa9f4fb353bea0b9fac07f2b027eb7d4942fde11ac29bae35d3f19e45a7f56ccadd7ee2651dcb8de279ab7aa294fc59365e7380fff02f3350e8bdf10455c2d844f1e4f6c3ddb14e0850424d84b3b5f654f492b02f7e40848d178caaf8248de37ccbea39182146ad563b6835ade3daf50f330e5b09d707746dead077fa301adaa4d8448defd8191fc0b48a807aee54bfacc27a3502ae07be57360e77ce25c36a8902c8b26c27f6ee6cec22de441a5a4159dd60880b540d2b2b7f0315fc5f0ec65884e150cccba4762c4e6958fdee733d97e30e21146b528d72f80f8490cd0a291b193863a217d8a5ef3d40a8172906ab0f3d060b3cd76d60f55c29bf20a9835d681633d6ab8d176236c8db9ab87689e81f84946d6944f41a8de7c260257db783a1499d92e0d7419a97d841a82328dded918728b4e60fbc20b8e0ed8528a5a38503b1b3ec39e98da2e0b2f4d6f9248c7ca2e284b0444b4f117a3d901ef88eb8ddce3dcec9734b26b611ec550bbc24096249f882231c3d8af34cedda8628dd4217756001f0ec94b1295cd4d7521a7e7f26e57d251764143f61fa8ed219747a38c753ec9e00220ddaea8c9b696888810dfb899f609e3965a321b66364e969ea5b405baf55895ca4829251962a15f34b156cd483f1b329c5815f53ba5b457947e88a1782d518f0f333ee43caadbbf7eb2805b49354054c68aa4e5f6c5d52210c0619d7baac59ceec1772dada46fc8e2491fc2d4264c4c0e76a1fdafe5d9749a610fabe8e3c20a1e7e9140e56c5064f706e8c37b5173a7acc73912df4a4e04182e0574be03fe7a41d257b04abaa6bc4ff3b00184c1644cb80e48e74cf7126e505728a2e4732f21e43555be3e747f90257f970e7dd77a520a36b5bf03a400b0e0042df5583218ba42e013dd7e8b12159077648d67873a7823cec654daa0d12ebfa7484a711ef51882693721f2252e3caea8faa8d4150b7f80730e8859b0cd2446b7524b56d2b2e656a7dcd2b00a963e4278a65d7904419ce21478a6a2b3f7bbefccc88471b18730679e2e13f1460229ab10cb86db63a72f76276b655401cce69c63e0aebfe8adedf070a3d9065c4d0a0417e313e228058fa2382c5bf0b098baa5032c19a089e5a18fa1f4d702916528878bca1910063d0cc03fdd3f9ef4fca664e0562440eadd765025137d831887c21c1de166d64ab745b005214b0a6c78b0f254dbe1342fef3516e502383c9b47c6cab663e6a5c562e06a2bc6141f1b0fd1e5892466e0b0e24fa4d22e2e75d2f9868a4da7992752a0118042d6586568ed98938e48fdf8715d32e55b22e08c24e6572240eb147a178ff99a162ba14ba4c3ebd0298880f0ecf6d1efd8feb6105fa8be92f0188f58f005b5f935f1544310ae7c230336f218d7de683958d66a61cb71f8314cca4675f8972b9d3f9a21875c8ac9e449c453130bca1fec629bfa11766a73c998e0de4ff4e1309c343317a15e39e617922a6617a247e49c78a5f9c6249beed84e03cc9c3db259a01d32d9368a050a1fbf50c7d62909fd819b31ea5dfedbf20bfbdd65ef227fff2947e79db9949f4d3b5a01cebd03986810cbf94b391053bbceef2a0ba058078d36e10587040b034ec3627fe9389d9e42e0d26084728654d9d1d16f0bab09282aa710143915e57fb32d4d78d91c3ef300a1205f98e5ed876958a533f735826c0c218539edfcf8c8cc4c85babbe6ad843ad56e15c212453a111769bce4bdf59e31f08ce475d4c1513e2d909104c9c61c233294bc5a24937f14143814b046186be03bd534d714e930b5c89bfd15d8b498839aaaeb051271f99d37dc1cbd70bdb5022818263cc25d25fae948a06fed6133f44576b463977189c685f40ef342d116f7f847ffb5b365712f810a157c0bf4bc53e7fa88261ac9e3e55c83ee8fac7e1ed17c86112fca0b3a8a30c5870f8eefdbd54049201576c6bad03c83b8677e0d01ac43be34f12ba0e3f2cb829be025e7fa63d3a1666190739ba9cc91d1b8193c9b1c0017f204c131390085d919de3e28b12ca2ccce9267733008cfa0760c2dbc117eb4044bc5bbcd04488b47c4b04d28cb374ef21c628e1ba744dcb047812b3580f30d60fe973100b08b6faa188d3eed8184579d9e98a4dd7ca6a1362549d9170acf173213d0cfcb896358cdd2379a8c38ac3ee1053c02cf007a74118a93b62f4db2795a5184bb1d39d95bbb42ab3b62b888ce2051de9ddf6ff993838772c875b6f8d7f51a35c129fb75ea6f5ed4b098fb830612799fa4d13c0611e0642d1a936198c39d1e5b5b0c6cd1145c654f917098928ea433f23a989be2bc7b46e7886116feb928a713fa13ca943e563a1b535d9d4d7bc2f83f85738ba6874724c826d6c4fd718f1d0073a85f860b08c791fa01ff0a1004b185b7a087d0f41ca4047bf97c7051af65ac8e705b896a8003c2168bcc6d0d4b0cdadc83244d371652bda3e64bd197783dee67d87f21e4313238ad17db7d0e9003f45ea6a84f78240e029113908867b583133e09b88c3d102888fdb42c0e1ab3fdd5f11d3483c14ab11aa393bc326cb6a21e6c36ea5b686b13ca06bba58216fbc5072265a21afeb57c1d6bcd773ca8f94ce770bbd8cefeb228896805fbdaa6607ae47b2f40d9520cf4f8d691feecb928ca704e42018ae7ec5fd6c68a2db1f659a734d24eda0ddffe85a4de3eb55e517a7ec75412a74ee4e666248bf07e2129413792bb7cf8c82a860fc3f37201c32029713fb199e6282e9b986da8ca48ecb725a904e505691b195db969e75bc796e741230d3b088d496015a5e6765bad31c5ac988ee7a2ecdaa9778ed3ec5d29eb823f2cc608fae5f227187aac31284c09bb41abf5ea2656e98d21107e4c3d2b0ef5bf88a09c28bd3a443ec1a8f96d4e719e2db81e932694422e86723745dcda254c13cc4259626460b71f0ae6a4424aefec739887b1036c6606da9703df52533ac135e1b510375cd8975e05a967f001e596c18303668f2a033f64400a5fefc1bc84b20ea284e716ef99407a55c70aedd663670492c145dc3430f535bbb4cedfc592774e85f2a1ef228626e32cdca796d68951d35c4105bedf8eb9288ec0c0ce6defa144b227188b1861634f2d3ad81e5488e42ca25896c20490d15152e672dbc88e95e52a094a02fad4a1f2c23210c2a176deb94fe37881895a06f4cc659f809a9cde9c291520e4c06b5a135a265683e8fd2f9ab0bde36e0081e3908c9428094fa130a2a3a2dc88dad80b933c43e402613b294fc8d861f0f98f6a16ad1cdf174d7dd14a94f19c8ff8b6cfdb924b8640b6ceaf220bf843280644b401fc506bb74d597bb724eb8a156fac59834d8a1a275d36ec3d676b9f9ee2fb2e2655e851066f8094015df174d0b45a4b911a8972d65899e29f9253dc4c2deb5a16d0cc1978571aede42633b8c424f7740b1a756b00472ffff8d3d104842288f9a0a6b42ffcfb83bf8c0c7ff3b6b28eb64f7a7d7ca6ed347ed8d8399c59088523f8302d31de796d3ac24fbce00588f8c143b07e2bd9fe8ef02ba077d5d26221198daa2c8b2634a730dec201a35af10dab049caf1bba7ff747fdb8da2487f13c70e28080faeb77eaf9a6415a54580f33d3761a7b4cf340a0fb05e1841141b9a21fa72de669ebfb13ee5aac4c6b10d8c2691d48c55db53a764839db9c16e1032e7405dcca05930bc7c72ea70577bc258b9fa0bf023b58718f5370df5262b077a69406199240dd3972c275a639fbcba5561941e6b90181423e3d45772d2031aa6b7cced9936ae24d26bc220fc4dc93a841bfd7e5e998a4d6000115cf7008749463a2b33f5c09351372b82635186773de42e21cbffad95a1598161689f5cac986fb4bff67c6a43392d867c7b30a6b8944cfcf4f64142fe7d7d499e0c59ecbd483d1ba05325757dbe06e83bc6941f9f7fc74987fe16c5597df2a4fe64eb37f2cfc107d5ebf1d2a6c29012ab80c46054e97ba4825541c5300ae931944c71041a31d2c0ebabc542bec978eb5b4afa552c63c9c2529297708d97fd2fb2807ad88b11d75252f5549610bf22ed20e3202d8440aa6b6159268e099f27e696583962692d0fd37b4a6e0e3ce747bfa3ff7b5db0550d48abab156899dc877fd04c2068596b8eda1148291a79700ef63d9607ee37253c675a0cd1fd1aa5729f2a9496ff277398feabfe69213ad98f77e0fa7607596b903957fae6a405ddea9228903173de33b31e998f8f61b6913564e286d37c45cb070f5e702da28d1487185fc6e1c52a0d62b2829aa11ef1e555bbf5e06933f3563b28f690d7ac4cd490efa7992c8806d61991ec2e1284144a1ef2b1e7e872e35efc07c3ebe47b5a94594d50ab5e1b9b8c5f1376a9805dd9fbdce9e28950c59b4009ee96b897961ca23334acc80dc9856d3b6e5d1295f827954bb465badb7d467d9a912d248e480e22d1bf126a3f925dc12f2e7fa958ac9870cd7dab70a28e8e198e2238ee98cc7f509198782be3754d3e48b79e5ebeb6333418f1e2b9f5d0ed41513e2f6a94eb3885e67c9231415dc352832e0822fd8b2e07554fb8d9c6633f32da4ffc651dc78d757fa836094a76c78f1389fc223b34eb9da2aaccf5c65917af2b5a1aea4a0e031a1c1e3f460bb0cbc4888075703400fc2d0daf34978c3a7f2fffe56db5dce9641f18483dec24c7563d5254158dd05295587e0996928acc33f9734c7257092174ae03db48c7e1fb8458c90ab4a05a7f82fc9187134d119a049d961b109b21a632a672a655d9d97944775d318ff368ec1212f503d9f1d15076f012d2a562240d15b82ccc549e8819981bcb4402cb383cc05481059253cbd94e1547a572c64212c28f1357504599478c42b9749af72f2848018194ce53d9eaccd321e576995b2bf1da47f75abf545429fa748a028af7e4704711b63d416b9f8c9b080cc67be356d2361b9d26c695cdbf5bbcd23b3af80762b3eb4b674b056c97c54633e8588cb67845129b38c9fa4f400b4d936be1fea7bd3832d5ceddc469b83e4c932185ed18e94272a5032ffa17d2dca41d2b6a5d16ead42ae77ebf15aaae8f93221dc07a59ce62ace3bef505ecdb78e2bc4f4b8f8d52968918752b370f6099ab05479ef94ed877caa435ce12004b5d68a48413580a5f376088c8431f0e21be3bb1a58490d55503975d1944a927e733820b0a9e7b01d65db6907009abcc496ce0016e2bf80026e3b03ca59444474a3bd04962e06d9170a1a8e9eacee7f61a126451e35e74b9e4f841053c38ba4ec8968cf9ce6d61af39f39d0bd17f5b938eaca5b419e7c58710299288493c67901151c2c9eec04db7ebc79d2ac42138ca8b610e06f4dfa0d72fd31f7289ad4e4f3bae7c011ca45ae88075e1a1ec360b58fe0892b895b86747d225a2afa217ac62559e953640b7bb8066d79a410a5c5b1eac671edfdb9d19df47aa98d606d9e370235ad1e7d65a8da2c6bbe7bc8d7bfe3111aa4f14e96aaa7811eb25ba83261a04c73b9ffc19630e300f14081c028333635e90bc5da23b6d5e662906d0a66185ab542c68ca2df02f69d84037eb6439df108ba47512e083f8180776b73894f74eb31afe5357206bc09aea7b64ac445a9b7b3489f937081bb284041acb06c5616d72b886c231df23a8217a7de7d653a754d4460d881fcf6e42fa88bed00f6e0569e00493ba56dcb36e1576181ffce74bc60fa6fa4208bf85b00f2fd18a32b3afa36a56896b5c68bc6d88fa2ed51d6f2b2c696f22b87b716d8d419467935cf6ed8bba4991301047c49f63de4f51f4d7ff725c777eb8a5f99d158dd031f3267f5f527e9d335a53400fde91459046174754d23c51cb80da17e3bee5c5eff39d51ffbe7651a805f9e8d24230a392fd04d5719af65815bf3b5b9be86d33bd70b4366112f45145077a0281adcf47608b8e696dc6604495f7ded8a766a774a75df675d45074b9ff195be0b2e950e137c2db4fbc34885a9e8f179b338b9cb7e6f6ac04776bbc1a17f34efa64a66827234152af42f4564cd3f9d0f1ee7c03d625bd7137a438758a95e194f13e207b965b4a00169b3bc63df10c9efdb4d973f265ebb67c79d4a2b35b7072a8fe8583ee490b14f2a76ff54f7a8ee2a2d6a205152016ec0c0446f12bc8d53500f44c628106f54188d5618b3be3cd1699dfda2bb8228de6c986b84e8ebd46b4e847de98802cbc9b24513fecc5713f481f2d9ed616587a6e278fb7ff3dc876e5b25b3608e5c2a943d1170e51dbb84c2c3ea3bbdf366a85fd277f95f5b53ec1ea44319a941842f0e1c6a9a41ac5dd3e81d60d0280878aa747b0e6a93f278027dc3335001753b88fba423dd2ba005e4bb9ec42c048f6578cf04317ee8d47bae83b5500e2029705f8d3eb6989ebff8aecff6a457571eae1c4ebb41cd9133e17e4c5e1f9f8e6e855f36bfb3dfc9782d85723af1d2e8234f94716072aa978d0c511b3a9b78e03b0805a5217e385a65291ce6a135983c531e8d81165a36e15adbd4f35f4999bd6aaa8824d5692339c8e474abcc98f23bf5c5aae7439a8dd3f7dd6aefbcd76f48f38a80f55f39dd96ad9c0a79a1f6da4e89134be7a7200a94eab11251c2943beb07b097a8cc9ac0786f0d48d01d2dc7d1313894ce1f3aaac137593364e6857c09990ab5886cb101b5445e24f59c7c9d6553f6a9827e722bd711fe50af54344c05c204e9eec07ce09b5a50860750333681947f6d0a34d8a12b853d2d030062b9cc85bce7c54587cf6c744b8ac172db2b957e11d1ff58ae0950ddd54a0f3eccc1c3ee2f5435fff54883fcacd52b99a3ac7aa1ee8b55719d90456dcf508a7336ec4dffe1677259517b8d048a44d6602644d28ceabfa2765073c1b8ad0a70dc5b19c947bc3f55410a8e55bd26cc0156e1e7fca4d26b01526ce00a898d72f1e50913687d28865ec3c039a2a62705c30d22a4e0769b9fc69a1126d64a0575ee6038b8375eca34ed6597f1145d5258f05e3530ff705b9d80dcb0355d3f761b4501816c40010008241f9fc5f8fc6844702fb20bac9f4f70110ef069a1bad16ff08f2dbde7b6fb9b79432a514eb06c3060307339ce1f05de47ea73ec8033bd3bdf6bc33d38535865a44729af6dc0abab971cfcc3b1b09a85bc914299e143c5e142d8577ec7024a0991624903d0d675808c7191666ec657a99ae0c67b4a7b7fe7df0c619769cdf4336660c3bf6f5ea8161e5e3b838a5dc394d158bdde96f05bf51dca932b233bf61200e8e4dc3fa2d9d351c3f8452e75c71149f931e7171fa84d4e4e29c267aa2a2639aca2fa9f10ef99257ae2357fefc994c86ae942d0973f9f0b984ee38975cf9b35d9b4448b91ae77850111d3333333333c77c7c7c7c7c7c7c7c6c68441f1f59ea58cc27d659b824593ece8ab1dc8613c862b1582c96109802c59c4861428923621428e6440a134a1c11a3403127529850e288d8112c56b7a68f0f0e5c6a2c3e2c961fe1c193f8c4244bb25aad20962c790eb1182bc6f214b054b1582ce613c527e6e3c4e789741265a5f251b16c10b293bbbbbbbbbbb75aad56abd56ab54c363462abd56ab5aa7069a25a2d54172e1817145a19e01a7f1e42adc1920034c1f547c1f517e23aeaf57abd5eaf575050505050509012f7dea1b9958da0254b9c8473dac9103fec508f98a8897abd5eafd7152894150fa35b1365834b13656bada45a2b4a96ba0cae91dd9aa86e4d9407260ad56ab55a2d26ad562b494b496b490b0b16f9440ac9201904a3024fd2a082a2c03c0b0af13ca9634e30286cce39e79c73a652a9142c059b62ca254bd2e592305992290993301b4383140a291e291dd4bd6ddb52a9542a65440a068b410a0683c16030582a954aa55252a815faa2ae147551d88469d2cd39e79c138715ebdf6ab55ad3d43299a68b738911ea29244bd22564ca4c9a89337526cf44bae1a2bfd77ca994aa566b416ea0394d34355ba9544bce2aa62eba354dd39432994ca656ab355bb385c545f913ca544da1d99a4227f932a442c562b1584cc67ca6e9c5c51b65ac7d7074d8c898a362286fc22537c54c462061e7d7b91009b34e897befd08c9a54f490185c60315a542b714d944e978cb98bba62320b979c893b99363c89a1dc54e5ca27316864878eb666b4ae76b5ac9b64c99140a1dc847253136e7aa15028542c8c182a36257645cc8a8c79942742412e06a92e07c0ad123c6a96652c57161a44670c33a53fa79f5eafd7eb255ff2256374cad7896be4bf9c072e35ec05f313cc8180d9b848dfebd7707a8d12f7dea1998953142b58500145b3e4abc9e0922b81f91289867cf9a9610d6b58b3565e849ffce4a78639122d3ff9e90a3f45912f29f23545befc49122629948ba8a028b55bad56abd56ab55aad562bd68ac55c5ecb8f34a869902ccd9f8c06511a346950d3a0984c2c2606137b89b9c46c4ca5a93855a7f2549f4aa482804c0ccc8b4b93e0fadb1692a8838a28e5a3b8cb57a96489b654aa96aa4a2b16eba2158bc554aa582c166bb55aad560b4b4b3b7d4fb8b8e8b8984d7a9b98824a165e8ce1c5dca0d1c1c3849a65591677ff993ff3279cd4ad98ee724d9475c17191be74790a5ce3cf4475b95cae2f5cb682f64125eecddcdd2e17753a53294fa566aa5deee21cce954ab95c2e571941c02609012f4f29a59452caf9337f7e64ea2795924199cb53967449d60f13af91efa43eb150c02857be942b7f8a2be79cd2357f2610b3c9fc9129999229e99229999a3ff367fefccc9f09854ea12dca72d13504d92cc45d0617419e375a4a29a52432254b3a294dc952b3b859d40a1a8635d855a5bf177a8706555e555972bda73fb2347f64eac5c5b6ec90ae71070fd7f8434105165c5cff16914cf1951d779476feec106da44b897befd0bc49242c7924c76d09ca1fae943bc81138d1bcae294d1b97addca0da192d4d718dfc6e6a04977a8af7ec2b62706538d690ed12e8cae9e21db2a570e1d2744951dae82c3485baa3fbb04b366bba583566f853c3247714975ca9e38e7ee4d254aa87a67c49978bf2479abaf271f8603317952320b43892461643423cb37a734e1e737ed293604ed251f0f77419e5a63e24409f2f53a6ec5c7434f4a5df5265069ebe7edddd477ecdb060e40ee1a7cf7e5741a67cd9482d0ddb24a3fd9af8a256695cd4aced2d14fffb5fccdebfc6ff058b7db641754cd3717f4301e2e436ed9aba28f50732432ff152e30013c203d46dd36d25b719769b3acfd18808fc7212743b4af30e8c0fd643cb6175a9aa741c15161471ea8dd761c3335c62bf6d9502946089192278014dd73890581c5258afd663ac7f724e29a5fc29fdf3d1d7ca0f56be42e9c21185e50ffb392c984996b992d8eb1ba20ed1c5e7bab022e9079fee356e592fa9274d54a63ff9c69f9971f060f97d92b015204f13c31d6b4a8bc54fba62c766354b967a4735763fb9fdae1e8ee8982938720829cccc5d822e63ae21c43a4cd09d860a50708219c21296bd8b8308cbff007eee76fa4082d0205314457192820071019921089d1c845d60578ba7cce0373c85c368fd0624766dae4c33d7edee1d8a8e5257fe0ca5a3d4c8c9a835b2e2256a1a3df1c2d5621a4519058d5623d6e88a91d0954f67b798827cfc66ec502d475a92f87728cef117c1e4dbaa639a476265dfb1f60e4f4cc25eaf9793174e6415938b553ba7820f7003e8a2c99dbf8d8608a28e712708be143125fb78a8093e38e2cea722229aa8ceb8d306931400b86805c1450139caa473fab66d50d896cb2b295ab7c70b5383775e5ebd5a70c7b7b981d6cf482cf9e166299ae154324ad89534942fc9922ece7197cbca6989976ab8c2e042481392585e261f2530aba9fc666cd1a068515c602019eb6519141747966cd1fa626047fb1f0cec68bf8ee0d5fe6a77e48182f6d3c66fb4c7e9a1e5d01eab4d12514e80aaf22303d84a0b347af09104ebb4830f283e4304f99081aac78a6bb585182bd60f565bbc68af686b4f69dbf882764ca5075ab16dd22ca5a0cbf7332e2e96524a29d550a9272ef6c30224480ff88388df504a6996655946a916368105977887caa7625ccac5a5262f1cfdd4d18cae9a254b9c466a9fed5bde3fdbbea55d6694d2e777ea5936f342ddb62f32bf86316cdf121691bf8555d6508ee3e4733766b2e71dee37d24c1636a9cf3b1bf7753ff37d9e94981fe92994f6e7752eac7ed0ba65475ca4350bdbe422ed6180df68946e269754f443c73459ecf4b0b0f2d9a3c2cae73b79e0d8b494f2b943d0b2acff68537f6ba2bdc63b1b0744080a2c058759dc622b5ec7f912666a6fb828350966a19b8ab0337494cc521dd38c9be9d6ef48b5ca5a57b7d6771baee4a06be01cedebf7149ce35f6b95d53fd069805fdc5ab7bad248dda6fab57ed682b5bed832d3d222baf5fb488552bf93dcf86aad2d221980f80d1622a077ebffa8bf01bf11876eed93a97ee158b1a8f3ab18b73617df673add5a4792c9e401aea9df0dd6e5ed7f3758ae460e2c5ff03b81f5df8e70df812eb6bc4907f6822b5337b1757777cc3b5cfe87f72e2111a0ed89d41fdedb90c87c2f64f91df56a160b73f9bb6cabd569f0c197e39e77d4af59ece88edf5edcfabcc95f714e7bc10c84326eddc2216daa3bb576bd35c135750b7bc53b6aaf6ef56de32b9b6976ecda66b70e07cc72efbdbffc66e61ddbeb388e2b5b87630c4b7ff6105c977e0b14d66da0dfd471b8cec3a541d49774c1a5ce41754197ba059cb33da58dc6a54dc6a5568b1db413540697deb166242681562c908c524a690764865e425fc878e3f20e7da63f32b751ca573cc06f5ce0415f06bfa99e8c42491500224b59a80497485d0497485c936a0ac5a55b8ad217097ab034a8ba361b3a1c30999917e8d7ff41bffe985fc1e85c03411b5c93adf0796158a98520e89a96a1d1314d074443dba67fa34b34e4e15db9471db77e376b161b2319f682f7f363f07e8645807ecce7be087d2f8c81fb2e2c329f0bbd2b76e4554ff5aff5fbb3e11df5b3fab5d68f000b5c42093535367cb5c912a49cd3469666c802d7d4aff56538e2d4f77054e1d6e71ede51796b1a78780b4fae09754c33722e2f302f302e301c951628e4e9e54a4ac98173e867a2cf7eb4d7f3b8ca55aec63c25b59576556ac1ef19b0c6fb1560b8825fd0a3a86e7633ba931d69948f0d60435e3ad2999a300dddec1d8b97980a944bf11b6ec2e774b39decc11ada8fdf8c2e844af94dd6432e66ff22a55822a3b8d9bb1399cfde9f64af29ece82a1f4dd3fe02e0d5c2779554c184a3bd5bf72cf97e37d896905dfdd3d9d76a2d08feefd8a1236348a36c7da41f6e3771b31f4119d2e85dae53a32c8174c1cd80f08e21e0a0d0e337319fbd0c7e2383f3927de5bebef491a596cf5e9e2a470ae22aa701d7642f5dc53bb2d7f11a53d82b7da4ec3a8da7861504b9be3580f84dcc4b0c7857d3e3a858ee39ae7212552757675ef8defe8fef6d480488fbf1fde80badac19b2767e3c5cf84b9eab9524f31c29e665c21998e7ebf2d2c76f6262605e1ee6c71a4e175f5cdce7e399e17efbfa22d2b7917e88fe7b8ef482e8bf9008500d7fb4bc0d89106119ea70317bb1031244c80c4180b898f94dd6a69696179166eaf38ee83bd2909972b19d34f97644de8ce7491f99247b2924a3642f9564ae9b659984e2759b9f6ef6d9b715bf71243c3b2da2ea515cccbe1abacac56c74952bf11b2eeca0afa44e156181cc508136d52cebb8ead24786805efe6e6e16029df471310b650a08bbea833626b0dd7719f7d94b251c89236526d268c402daad3594495ccce4c945da2c53dc6743a6f4e93e7bf9e337f54f379328eef3c1dd1aca51fa38a7a21d984634fa577443dcc47d85d5e79ecb21042bca5291ede573fff28bd85cee995f3ef7cce1cc0bd9d78fe133eebbca3b9df42a191f0c24bf33ecfd0fedb7ffbe6f25cdf01701eabec8f6da1701fac21ff3eb1721cd7038e3853fb6d7c219b65df8a3fefc220192dbb85088d768aff190f6f5757c2b4292e69c4a883cfc41ff1b92246f8b607546aa6b97939985605ec1952fa0601956a7c709942b89fa5132912b2f1352ada48874903d5817c584d4b7db44df158722c53f90c695dff53ba9ddb5d166fb265980b76f892554513a4af76a4a0f5a88b09e7af944a2afe3981dd8510a8d58ceb204aa94930ea24b5ed843ad82fb85ed021b229061c4cc8d0c054d4458fc46260bbb45975763e47047179291610e002887d2292941dd1d6a2523572cbfc9e1422b329c20751e0a06aa445e8b8cc9988b70bb113c97bec38b710d9907401de0e36926ec43a6149c26bd785c5899ee2ec6ebd1e8e3d1be1b792310fc78b4af1f7f435e9e1bc1d4a83182b1e1d9f02eafc640724717f2ef663419f7167d302fa311cc4b071382c1841aa6033b3a0c0be7c07c1502cc8f3e842bbfbb71e3e3d1ea9d30e732d84bc3b29770ac210ac725ccafa0419112060d2ecc9c397ae894bec980dc8be8b3c9007861c2c94c42c7c3b39183d5912520b136c1e4ab7ffa642b68250256a846a18484ba0669f21b962799440875c4855aa6614c6c93ef999921a0c339cd92bde823586e159a61f689bceea6bbf1381c3887bd1897a5b95c032092dc2113c7e37070714e9bd0dd57bad3e80f1811f66055c356341eb03257d891553d8246e0f19719a31bc16b586f9f913c4572274252e537356c78d87ca2ac5d99672124b3a333f2801d3d957227301f8fb3d775a19c22af9052bc46ae744a20a4237f00c2cfd0290c98cf47fdec5f7a883a88b09ff6527af207b9438f0b713030981718376153c7f5530a93523aa7748d29d5c459a281c14c18c009e08b9ec86f1c8b4cc181fa592b7984c3c18eb20bf0f134f9be238173ac9014ba50fc2683e2aec8f8b9f277fac901bcfe7ccc70b4b9f3613e23bd7cb7b21404701d00d765aefb77bd7a987db35c94ad15d86c4acb45294b9e92b9c2b6930eca5ea896f0f148282eca8c917d4d3e4fc9516bf6d780ac89e8b30f59d6806d808f870be5cbc371eac891b3e0d95ebaa41c6142213612944a2cdfed47d0004ff3ed3a791646c95ee6e3c9fc24fd8400206ec668953c97cb2b31864cf04cf878eabb904361e235523e45499753970e2b974c0f766c946b7b0fc7bf4f3f16da4793ef3350473a497b4a1a35ff2ccc98d89854a36ca33ad5a866d2a8170e0606c5a1625cd65e5e8d01c41dea989cddb04a84f6d5d734ad238184950f7ebaa9cf71dc3784fb6dbe6431aef4924cc91a4a2975158f377b74e6cfefe9d1e9d1439b33ed3751870d8ee7a57ecba523207738baf5449f09de173a4cd6c0ba0687b9a00304c6393b27781c09ecc82a1d5902f297dfd3ba4a6ccb10dbf9bebffe1880cfce178abeea6207a16082091f4fe6d44525f021bf192fd0377bf79b589fc0395ecec7e32c73b0f3fb9959a4ec27c95f04fbf174cbc70023ade3620f1725bb68002fc6654797576458a1928f808fa799346ce6f28a0c317878ec372893c9e4c38e0fd7f0a907f6c3357cf9841e188a49e0db43f4f1f8ed6e3c27f1ed82605d9ed813ece8b001744c62b93ee435f2611f10b6c9e7df7b9ed77d3e601fb08df21b26d23f9118a6143cf6f99d937a2649676455d6df43757aa826cf1ccf1a15f2f85690375bc995d743a61e5e8382c78dc076d628f728ba46bef42aaefcf61e5cf92ebf97efb027aefc1fc5f77eb4429d0eaac7032b0a790b062364266164335248408e0a27264efa89a35240a1eed0111d977db9ec8411b03bb6023e9128ece11e335df93bdf0a3d784afcbd195cf2c21ea230085786120457fe90e9f590971c8a0bc15c08e6428d42c9925cad56a8150fb689f7a3c3a4b74920ed6bf81d20ee657743bb6015ab5c58e5423670559fe0a726c1a1f8135e031797a2e442b246fe94b207d88b8c900c8c5026c4c44b3d8482c1e44aae563dbe15b8dbf560792586eb8e3235b2ca85988a0876e4cba0afb67cf6c1f0c1c03b2eaf03013ec15fb29530788cbc45c318d66870c97bb761a84ff0976106ecf5b089e7c03754f220827d0ffb91c71d1dd602f7740f077002be97ec444cc8565cf94e854b0e93eec5959ec595aa1e30e10b17b6ab4f982ea41e4ec7c560c5b8c848e20e99dee7c3af07b34d443ffa6268c992254b961d51f7a31f7d30f0cef79f8d93ed9d5518b02b5e5e8561ba5d0b1e9bf4e7ccb44ae727dd853911ddae6b362ea2f09de0b12ce958188c7acc45182ce6b1d061241f72d80804d6df613116fd3baea64a5b082948f0c40a8c2ba21518ae5b2fafc068ddd13e155fedcfab9d733de75669a6cddfaa28c639419d902c8d8ce01af93856d84821e2e097b8b20b1ac56054a5047194da46417394eab210c14463c02b30a05c7ac751ca6fc6969150c7c46f261157fe68f545922b7f3482d239d1823e891d47a916d328d5628abdb45e5a5f0421ec1d2d08071ad67f1ca582baa0516a540497b6973f4af5f3168e8ae01a39a2c1955a3842e266e1a805dea8c586a02b532429569202329b8873acec8893639563c5e5587139565c8e159763c521c9b1e2402439561c8884039154cadfd474474d6bad6946f9755cdb366dd3b2f91eaddd640a58562171dd118ce15e8584e5ae691a1de275d6cd7d312d7c617fedef478e6bae6930625a80918b01f05e00bcf3db23f99ddcea0c9ffb9757434a869a508195cb976f279b5dc485332dd0d75e7bfa3aee65a0deed793be3e7d69ea1a6655ac6851cc3bda64d1a8c98aef65df72dc0c8addab30ed1c9f6f6dad7f0354e7e2db08b5ccd6a96d5ac722ce05c6dd4be3f4f94831d8dc4e0f96bc0fc268555d87eefc231a6052f74eb628f6df16301e7f67b1210423ffc01966be3f2ea8ca0db89bc4a6ad39d9f165aaf658aa8af6def3f429f90bd73dfa11116b8ef0ad0d77e02f439928f16af3fed5b3e9edaa1d724f4b7a849e8f71ea68a2ae32ce3d9dc60156926ca52a35055c81018a4071c4465bd57edd148e78435024bd0d84604116204e7649915e2a23f8ef78f28fe83a075105895b645c7348c028f4d639c9e7a63a411c3da396137a6f537deb6ad72aefe317512bfa17f5a4244725b785e924d081b6383744ed891631a10826534ae77120d80f57b64a97d405b690bf24acf477634f301977e67249efe5e73403053b13bf07cec9b8d59f8e00e4047a2678c1931182a54b0302742b04a982afc66040a43afe8000775ebd7a9814c7546e0021dd2f0a14a0b9e504923a354052aa2740ad5a794525a250da9a5749a81846e5fb970a46237d79f0e9db4f1c2971815873181b57507dddd8d865c0df9cc7f9a0bbad8d3e41403de58556105a8a33f6f37491b6893151765c2985358158bedfeb42cfb215d3927fbf91b973850c2b671e1ac99da0678c7fc0df80df844da74a7d31bba1973c38230ab758733d9bb5886d542977f2df85bd3f570c69aeecc0a7e6de8e6338d0c1a96fed83feda82dba25f3b97f1aa5c5b68533dbd3cb4d1b3364c7fee97a7ac156687bb3e99c435ae49cf9f26bb88451248de2952e9bd83fec43fbe7e48d61fd3d326cff2cf9785c38e2813182ec62b3a4d49ce8aa4cccce1fbf5db675dcd741fa4a12ab38e11dfc3acec2489fde0cbc6163c4b0fd60f5be607e52c5626d9a684274861636a8a8bca66cd1a266989cb015b001ac861b92988110179915a22b579c08ef8a0fdc0a51a700a10763dc00041f827eb22a0030afc0000b9ad11b5c1776acfcf1cceb842783316858299c830d68eecc495d29228252c0b201882b60905161cf804101586041153f2043043e08018d6c4a7725082c96eff4ee0a0f379389156620b1040a0a1d523ab8a3c8e3e260fd9f48014b13a0214070822a20982ad0aef8d478d99d6a4177242310000a12285f3029e389196439189a5bd8b0007204010421846a904314239882fb82c662793a05a59452ca03285650d0b802e5082ad1a03194524a29a5825290526a5da474fef4b0bac87161fd477ba3b29060296c1937f010c8a0c510163610a3862c5658b68c143b218acaf0414a217482f82189149840f04222c5c665e43044ab00d34370d77122bc2bd47e5cd8202c3842b784f7e3c8239ef8e4c084ca0998e8228be28e228f2bb533ec58e77d31d91bb7fa940e9b231c313b75338968a975fe307bb8975de01cbe730671e7e3ccf6545747f9dd2cbbbbc3ca7c02d3355deedd4df7878e2bbfc617567224213a2ec7b9f8c03ef3b6851cc73672dee69ae3b8b03297b870dc9eb7ad6a60a5a2a4544e3950b0db3fbba764423f5009a294ca8c4efa30f00efd18fa611b1841345865d9b66d4cecb66dbf6ddbb66d5b46b38c6e4f744c533bf98da44bbf87f4f5c193061f7ec326d9e348962c59b26429bd979dff511a7cf0cd1e87524a29a59452ca13c9b66d9b0ff3e5f603202a77fae0cb436bb51604ffc5f9e30e09f3c05f8d59aa1e541d0f96efe4c1ca77e14846b3878177b28fa1ff3b59153aa6f182607b56d0c579994409019113a070812ad3b46953c3899d1301cd842ca26659f67523529fa34852a79d88102142c4fbca524e332e7cff85ec08d8d1911e897734920554c892058bd78096723579392350aef692a79288b0ca0912a8763ad02858a2869f1d209fb3063b78b6b3b6eb6c5436369d2c755fa5f75ac82e5a5207b4692224b123af7afca67aafbd0b3fea6b2f83e7799dd781fb7d0b6964d6f5bec5f3ba96ef5a5abeaff3449f178e325ceef9e34221e2dd42d79cd4881a3fd6b39d7dadf5011d11d601123aa880ea731cef685abff63a78a02082da0f807398e5e4e40447c59cde3ec1f93d7e33e3cfb75f4a550c133b8a773e8edfd04f00fdf9a28d74971e284372545850c4e92667f4e3c9a43c49700059f41463ce60c5391649b4e067c7b915b8f7c16e5f9fe39ee3382e0479c70e76fbfa742bc2fa1dff73e188f648665cd01e06ded13e86dec99ef3292a94fa9d096cd76a2d08fed75427011c4f2c3884055df4a2a0d9e1c164c051342d4460466bdb7478499208df0307b8d42cc44bb38bb85a4d87e06aafd10b9ee1a874cdd725b1846a460000000053150000281008078462c168304ac320987e14000c74924670603c1207a324c86124658c218610000000041862c010cd1011080563b37ecffa027f90d9f4bb9678b1d97b9848b1bb8e6801ce765e238e2e1f8b386d9af3774fbfe8243fcee08bafe75e44ce4f2cb0b0ebe9099dcae7d6a78b18b7f93a00485dbf01b459949f371594d7ab5c1622e7120b2af42a1d854e71391c7881ca331eae4ffeef4de9de94bf537b8b4ef2e3065f7c3db745a4fce2de1186e91bbd1aa1ff512fdd16e7e54507e7fdb5aec5c879c5e51516b30d15826044aa40df9ae6db957ea1d35bae51108ee92fe62ea1ce0bf6527c9379778a61aeaace5757853e4f2fcf47bdef6b74ec161d9f3025d578b097afb2c7eaff879dfa37da699448918a286a9fb0346d4699000a356d1fb995965b326dae9f2185fb5990910d2d0fe7301ee5f1830be7c71f255c11471af9477314796729b51476119ae09e233cf668302493133645dde2360e34ec8d4d9b865e0c60e4c89a187dfc7bcc843ee4e68be60805be1918e8cc15daa5b17442a95c0642ae5e784bb804e4db0bd5e380c70812d0c46587da64f0af3d86e2616bd933bee6c31ff60489fb151d04e0da37a17ede790221808934c0d4c28016a960ef5e87a137e6c45e3a2acb18058ebcad2df05e0da8aaacdb8dc375ac384c43910e7d9c24faadd73de7b0f6efeb18867444cd0142765394b031660aacd8b9d64d560d048c0e150055aaa379496dab74ea24f4e47fe3899bf3cec551c122ea07d6d4c7070336d700a8601df4c4bf31752a2798a77c924cd7076d4732866c2c78ac4fe0f8bfda07c083a088963c17e0a970819adacb090106557f7d9c3df56714900b0606740ae5f5e231b774ac6b433ebe6b5254814053507e07d39872e44c8ab4c3e53f55e5a63cee07503fcfe0117afe9a6022aa901ebb07877f08f7c210de6ec152154202693ee92111261cf29dceb29ca0051ff0e5662068063809a54b7e326f3001f88d29e6cd724ddf77f3b8c3bcce8996ff49a5243830c231191f489943925222a1fb41152760e6cdfcbb18ec2f525b4f86867ee8335e0ba5c75735f0f2a86fb84593feaeabb2f9ea1637531108ce5084cf4ccc31aac7e4e1fcef05398b01817c4c27e41927f4f11773011b7de81b781935e8a3f04ef0896c6aaedd6cc15e931cb48a3312fd2065163f07a4a38d7b895bef0de3a891994312112aa312d120787f24f1d7a7a528fcefd917903552ff971a37baedf609f83f23072656dedc878636b0925acc607323b706ae3b1d627a6362b654c4ccc27c9cf61118da53c78ffbc5d84fe171bf87bedff331d317bfbf9729fb3de4174b28a111fd4b497dff423b96895cd611107f980565e3d911f02be39bc16c5dfefb70519c5622690984e6427cb20f090a5398da210b478605ec62e2ee74f7ce456edc933c3303f8c11c847af5950a60cf9f563786ab5da98073668f70fefb45319c18973a98a50086209b0093b41d95d22d1c9c986c0491cb00fdc1f075fbf4d2e1c0b7e64c75198fe6611b3bd7895da21d86d7897b0a4f9e972504f4e78032099b4f00fe61e473698bd0ab64e089b10433204f2cbdc7a35e4ddecd4b43ef5d4590fd08093042c64fe798a82cb7e842503b54bfc73c205605966c52341e1b5410d819965fb39886f79f4a3eb6e77c45741cae0555857e12904764e905d7fca8e6391056b8375584cbb0afd810d1200071c78cf1a770f396c8bd7015322388bed400489359ae8c414105705e15880d34ce9277af4e79e734b70592f15a148ec0b3febdc4b233c02ff3e3538329985b248b6bf3e3bf0bb427a4f1495554a7330eaf1cad6afa61d672f4ba6dfe9c39fb260a5edd8fa146ed3e6d10ef65c12579a4f4e3fe6ab43cc6651ff079539438d4771324b09dda37a3dfa2ed5260f9489508827f285c59a6717525cb59029654a71294a51802ac836e07de9ce580b55e9e6a152a782c5083f88aac2009a9b31d178f197e1d81fe30dcd771b850c6ad7b8b140a80e55f1fcca9b435a36de68a6526a70ff22ade1e7f03c3159795ca2a12808e4a067f8eb0ca4aa0ac919bb11804c5d512676a823ea9cc0b40c29b4ccea771baa2fb39b8245aa05e2f5127bfea88b593320cc2722b7afeced0016b8f3d511103eaf1c6ac8f0ec487c50cc9945f597febcc79b1b72e7c60e12bba77e50a503145fe672c302abaf37f84de24703433c4b8c3aa493ec069a81f7e3e3a48701bdc53e2c4cd1016f4c233bacb8822262f682d314ab762f501c7511942ed895009ebacd0dea240a7de41c8054ca059c58651a82ceb50813235ee0bed1e27f85a355918fb3d9437c6be4652ce41fdb8be9507fd33e8a8fe08820a9785094b6304b5bf1d63c1382eb9e53880dd2638156a88147948a22814f230fb5e3e454e9ff7bb26a433859e79e9d2b5893fbe73b7a5f2e630e08f0723cfd4c7a28d610510ce0d62f080251b90294d2577d890bdd0d2fdb011fc0b2e1c3c2fb6aa2af9ed5ebb06f95d4de1cc61bec1712438e34cf7f45826e9e7dfc6b144655e928dbefa895fd694e3f5ebfad469ac0fb7cde922cb198dfd1772784a221a4de6c28d704f9f5a3d7779c6c5df49e2bd75916bb1484dc0e6bac84385d711acbce452c9da51d60595645700540900100e47baf01f7a78d6e7cee9864d2485e532eb46857b7263e99d4e418f694594cd27243478178168011f884d54d883b176dc5ae3cc6ac3ab4c1a880195aee8588a48e78227275f1710cfafb377654af8e7a9d04e60e46b13f652e33b22c5a192fdf45816d91f6e23f7702562fd2450a47dc356b00b65a271e060a95253595235bc292438f5c3c80b6f291840f4c57f6d795b09073f2ff0c917dab8c257917cc0ef09eb93051092e04f0960d369efc00cac845c996a110eac9d7ac863cfa26cad9d8ef65bc6ee290e18d8c41a2cf2ae78b734995d2b73db93417a3c64a72361523c6df68d1f694186121a0414d70a82fcaf2b15af08af3ed79c79a3c4deaae6ae1d05009f8e80ec3baa8a1c0e1cd82090741346db3985b7952fa6368e7a664c0b15b0497a44e6439a19e31d8f07177f65e8ee3e45a463a1aa34105e7158a9747d4f5162d64353b043edfc7ae602ddb19e7e266398fbfded41ef038bba1fc49a9226efa0b1842262384f9bf1a5b165cd71b86aac3c2c6ee8dc008fb5524e615bd05968003ba70bda5520b70141ede6b791c1905cabade1c2a21531ea569a54f683456ada44a161c345da038020ce6bccf12c61890f03281442bbe497f823995ea853993db39ecf8f30668767dece2bc07b31336fabd02fabde3dc8c15c1b3e6e65a6f0488dd8ccec5964bd7fb7cfab7e256c7fc8f50c28261e7c3a1b6b8b8b7fa3a9d8af905ab9e07cbd3fa6a200d6b364957f00393607a0eb6a957a0ca9c2e7495f3b4f7eac4b59b535207b98698d95e918bfaf4bfff2fb483715a1cdb38b484ffef248807210c195b623795d726c5efc7dbab74fbc47a02e48c90bfeb4f2bd2841f3cdcd55e14da6b6eb2c137b13af16d26b2dd28f1f471c08027208c6edaef268032e8cc0ba3870058b4ed290f848424a031604b87537f40fee4feae9861527abbb2f80f9b4d17a0e21df4365b9dcf7d61d50b50f30303f7a8c2c0167d26043333befe99ead3a1918bbc590550bbda7d95969d669fffbeeba0ee043161995cd99677e6a51e7f8b25c78aca598919d70065c49c8e626af46680a6c48774d22b44ad5e32e0404833cef04a316f02064fad61e850bbc9277ddc630d5410e4798a2b1d24f08b8519521be81e2f3b754368ed864d1fdc50ff9556a6d3293a4e5aa97db5c5ecb236b4e0d27605af23f032e597d2edf30f4949278d05bd03ee0e392c887e1d219b8b0d30c011c052a7701f7e3b2ad98ec6afaa3a184fa3f8578c7a055d7898c8059126ad8959efdbd1c5f3e9dcaaaee14f1e105ba8f08150007ffc5b226052e1452af01af99edb32062f3f161b8e0ff69f016efc4cc5e4edee81d653fdd69b25baaf0a8e0630d1585e3d1600880b30efb1e1ab57c6aebff29e28ad42c39c3c406e65eed59b1f15580aba8d12f8f8d9b47da1875e7a997e07476e5ffb57022356e82e5ceff69875a982652aeabdf330329c148c5af343d6630b644b9aa7bb254519cac881382272b31891ef380c76c5e3e98fdd3c8e3e9cb6fa7541de6122c415ee7a6dc599c13f7d76e92074ed0bf17e095a2f2a43bb4190b0811a2ccd89a3d31d7dd5917a0eae4ae58a074458525f119d77e310e696780d67d68d0fab6a39064423b20d80e25514f7df42181959c6d94c6c764e7a48c77ecb441165113178f696bac72c1a982f2604c295f165e1f6c74b233ac9714d80b062fd54325ba005c12f0bede85748ca0ef3b23e07f062a47542890f29c68b897b9de2e7bb0101708c9c78dacc6ae411da95cdf034844cd78befe0ae18701b184ae3ba1fbd3d21c3c87bd83030d1d3eb4bdc01b09587e9ef7bb5e24c34cd7a89704914e2e37a714c009f2410163c72c34723eafdadfc15f6eb2a1616eb0a1b03975a799e2f5079ac1215868cd058e6fdf8ccbc2740826adc1f50d3a7329de6472cfa59e2556b1dd0ed187beb60cad80fd29bf46809624236c4a3b6457f0bc775ab2601135bb349ec99a1db7faadde304b9f3f00289cad7c7ebadcf4828d4f848d1ba46aba0f70239530ba140bea31a054b60be13d273e4162d6e47ec6ceb085c75d7fa07a32f363d6b710c6bc82555fee9206430d6482bf7bf6171a688dd0fbd54a87b9e5703768609fdd6b77735d5dfefbb133275ef5712a9064f577a173a14596fa64ff0bde95dee4044eac17d57d2c6e16d42deafaf341c9898ff9899b58d24b0b9de21a3357c804a4386c07fbb78a5c49a7d9216643334d4dea49fd72564bf82048e49082dfe15b91aa180be5d54fcded4125e4dbe7f9a90f9f14511ec8e69d904483da47aaa60342bad9356e77eeeb28a04bd2757982c1233501885f4553d30e454024bc9c75237b28d6d215f492423802db1983fa4dda6f711a1112ca71c1356772f8168cf730239fd6f2cfc8633ab3063fd100c2fa627012591fab9999aa0ef92f2e7c373cf19ba53ad30ba47946b3b532f94afa10a212f711f07f5fc2c03f969282659b927bdd43b9f2560f3e3891025f41c3304a0d2cb40183f25030680be26aa884c42385caf76884624ee57b54dedd34575a3d7fa7a33bb7da51b78c329063f397ca5e3f45c6d82b7bc57a43d01c6d4f90ebf54a6ec4b3d72bb0c69a6164f92828216457f6520ecd1beb8f45451d90b8693d64c126bd28c21ec1da71016a926f3e11010e0f8aca6f8f38aadb952530d6433c4f74baec1067d4f699faa25146ddab2a0ff1d3ebd3883c199b34b9f29c0c6184de293b7f0f8dddfde26f74263a92ee9627d953ecf78f5eea0b670339fcc9c5a2fa2ab434806729b93c022d4e71f06bba035badcd5d7663e995de3dfe408e59d3512c48c98378718d06089c77ba4015bbc69ada90229bf4ef02a8c7f2a6ce57c2420b04ef8762d6f768422400e917c1706cac4500bb228939c3fb687f5dd1147c062b6e2cf5b0a4c4bef7eb6d50f465cc6470bfcafac0568465a1c08ee7b5149e419b4aeae5fc7f9baf2f71a5ba99ad26092c01d1a02d19e3ef086740b2d6b2be36532451b6c91e39b1c352b7bef3a833b8f7bfd4deb7e6ec2ac23a7ed315afb6d0219e4d55fae3d65dde44b263db882214b0fe652c0887b7fcca39c5bea252044f4ce745d3060fa0fad117e2f9f72474c885977decbdbab3c172cb0586401094019a0b5030af349002f3f3a497e8290f2cb08b306582446696b7106c926d8a6dafc5cc210e3e3c6340e5fe9ed5e65784700a80510021d6f6e9cdd1c7080d48f2501d65d6e81c4097b7f2d8f9f2959cbf0750185484638d9efe163f79bc1292c9690d97a2e53a465dd5ef53035929c87cf7e7749eef000c5fe963028c07ef91d0ad80960e42b2edf6b7c00d2af164644a785bf81645de763cb4143d7c507223c748d836b302c8289df6ff76fc77ede2213c13cdea000079897a2506c52109390d153031bb5b8dedb84749494d0152a0fbfe157f84b11bf7ba2398c0ff32557558c619ac242204c1fb1d6ce80a2721b39e7bac4bc2b46cdcd01b61c6b28fb1200e71f69fe2ce42a8f88a5168b0245631bad3c422fb14f3f35291e7a42ebcf3e704d2c3be197ace573cc0f45969ceedaac0b473f30bab2a44952218fecdd1c3c98ef1dcfaf77974f4d153a0a8886cf88b820e4e9e92a52fa286d4057f179a1ccf80ea46f658b54563fb4c771b9ece34bbe797fa8abfcd7755973f9c35ef04f08ad80d3c1ce150857b80af22ef4cfcf587c39f1c8da76edcdc2a82b01723947809dd89c711dd3cd6b9b75c51df19c3bad6bc4010f3ff4006111ebe7121e2680c0482befc037bc59aaf3f68dca1b853f4700de2ed3f4c3a39b0c0b20124657a7ef639cf5d748f381302cfcb92714a47d64492aa0337e58c67b281e094ffc3839b58f42289fd97e79f7513025a35fafecae40f075cbbc41505f0019fa1d1a756613ed2699bd509f70a0a7283aef5b9dd04582d8c062c7e6a1bf2e83653c6f909f1a7bf32259bcb2577b86a3fc6682436950ce6873c323b30cccd223ff9ec00444e2691900507e75f86d9831e077c853325dacbb79c78915e8c9de153c11cbf2aeb4edd3930d9db39216778e4cb90afff168a9de65774431749426a7b858e8e2bb3f4532e0cf9ed988c406d613ef92ee427774bd5c11ed152bd187c926f8343313b5e5fa2f0d5a14f9f7e9f09bf414648cf25e916e866d03bfc5aa0871f5600134617994070909365547999122cd185f77263c222e383a43d6100ce7737afeb8ad46efada7e106e00d7f23eded3aa24908720945c53ed3a6ae7df23ed855ea5a30e4b095be2d604c53805d1b6cbd541d6e3339a69110ac6fbfda67cc0fac9ea094d9e060384c14856658a390b7fb72d3a922490e481d184a60e9bb6a440a27734191f449f369071c0a974ca3638ec8d0f1be39451726b6aa5db57f5e9d2b5569cb721d3fabb6e2c545cf06a04f11ab2d8b2bbd1581b1068bae3d53bee4a6fccc9f89e902794d90cb8905199301e1c73258d51a4ccb2bf8142c9a120ece911baa35a6d678aa1531b93518783958a8365f053151e020773f321f3832023e7c0682c844beaa9ac2d50d1104cdc8ee54e1c57ef0df23427f269b91c38ac87839558993cbaaa9054d9a060c4346fd6adb031fe4fbd9c570f0f05a27d7a8796928ddcea4e7cc5c0b6b3aeac63a557dec5ff2b3652dcf1fddfeb7b1414e3d77500f2ab3a27301af98a45e5f7b1b7917929667225797faf5d52fde531948c789e4652d6efae4e6ba5523d605ddad8ba1281ec0c57ad0d15685a75fddb5e50f29adb4452b6764671008a1b7b54afa4445f93ced08d6b7f06c63e042803935210177237e166202a2c7a0a55dd4a2b11f18902aaf7025f534c2ef2941045703a7113ee1355df156fbec9e3c42636edeec6c9dba711acfa6350e2d5f1d72e9b70cd30aef8edf4c3415e346ba7e1897a595d039b4a5ddab454d423559a7b8a6b63383395f2097199de442d25fb2919dc5c427e10f30391fff6764758780d9af46ad019e1db9848defa6be09eb50c8d32b306876dbfb8b1fe685348de8efbb7e0fa035b4f7328b907694e5f5e76114aee6d35b00ba98b965264029911867951bc52591c1f447c64efed24d234beed83fdbc7c236fdc9ffa48b6e2e63c517f22345eea55fa537fa60322b5678b1490e9e199c38c71c8ec515e076f869a90aef63b942bc9c4bbc5fadc9f9e42a22d2bae7873e9e6fd954c636b49f6bb579c4adee4ae00c9e0bcafedb1bc0a84953541d6e10880eab42d1a532bf1392545ca46b12a9b598b40258737771f6602e35e116182472d341e211af74845e5fa14ef7b0cff1ebd20170974113114b9dbd40453aca6d74463120b156926bdabdca2fbc4909637496d3bcb88a64e87b3cfa34b7cc22da5eae29b07cd0684163c580f270cb8dd1b10618ffd82a1258e625823b1119fed0a5859f27207eb4a84b076d3911c0f9c00a1d1245d9ec6a95181486d32082aa694ed05d46e92bbe007565921a2b1ef17bd703c9da272d5063bc833f651518ef0eca308713031f467074e161827d85f2f046aa2472b16d4610e03335e5bafe105f14fddf42ad0820fd5f397d6279a484ee7cfbdf348832f17cd98a9147d73cc182daf22759c35cda21b48c97906b4a08344acb53a1f5988610537b74f699c43ee6f8b68f390514b13ad5894f7175e0ee65cca309f451f913f4181e772df7f36ae649c620897bba30d79791d0bfbde119539e232816ae86fb130deee9050b20d89c111eb51b3ca4d3e7993fd60ada065f572c4104dcca32d6fc8485ee2217d04fa90c549e8f073268ded7b3201f450922c1699b1cc4aee7659d95a0853d22cc265890ab1b81575362ac2f00a4c766d04a14d66b2e3ec01ea5ac1a88512508f4aeddcdf87251e970591e20c533793dbdce0b5472618648ef03f2d488f24fb4ba918566d5a9bbe4cff077748dc8a346ab34d0fa2fced542647036427bb94e4626be7b6ba16256054f09dfd47a7094a1411abbd195fcb9e0b1734e065a44fbe902eb4c8ae05214ef47356c3d80cbb3208e3d1af1f269cb4dae10991191ff4997293bea04bf78712b33303147923e5a17042ce522d7a9583411176587a8f0af79f1568beaae69a2a7868efece088ce5fd0738bf344401671cd82e6661c84bc55a342dcba47fddcbcc06df342cbe3725adcb8ca939ff58a2ab69c277652f49849e22944304d31d70477d168fd62d0dc8593fc6094aa5f78001ef416ed26a4c073fb6e6366299bb8120402847abcbc5a4adcaf0f9c36e88a3e712d3af81e65feb51974492462861bba0b018f251e48e25bffe38b48e792fb1285eca8c1ed144955629f071b5f0f42743d98d06a3a36e21951cc007801ad000e49fbc96bf5186480a9d0991a907b9070032a9c1eeef5d1ee0496aced5fbbf2bd6210d34d21889708432ae79b6998bab8e9376a536ebc12e6e60ef50752ce4005d0df85eb956176ce1b62bd71d9605eaf79a27df5fa606092a0b5a5a71482bbd2551a7bd43130cf960388e66e343969970502ef4ade3dfeb7b6cafdd29886ca3950b118448648a6d226bcdf111fdbdfdbd6f612cb25d1dd53f2c6f1c8208920114958595ce0ef4de00c1166cd45f9ba60a7ee03ef96d49e1ad21012ef85694a1ac158be0f48d0d071165f1c084e0f8fc8e0d905814d47b377a813d8d8ab11eb0dc610b36a40c547b8dd4d12f8e5cccfbbb0df58f8f1cc59698d1018c4017b638f026dcc10beb79bef874a140a066a74d3d2bf7846869531bb05df1990a227df65ce4a4686ca94837fadb83e753ae90cbe28e46a3704964eb2b797a17c563a427b7e17906dd45dae0a34f08f30ba22ee2eb9835e7682e09e5014a2bf31618266824e19208056594da15da0fea95acc09cb1b4e8012f87885924665b8d0ae8330779e972568f523beff44c50edbed88413bc4bf9143534e8507de0fe3e32626c78093c3e4f15a79604828fb6f0ee174ca5d9fa2b2ddfc621f4e0ada29640121ed59082c6997e913c1c88aed29903f88a1428be1a0d3c18ff112700108bfcdc851aa8369ca351334249b382c094f9839cbaf728fd91eb3c75188a59011ba8dfb94c69ec5b282203218d24fa296f17c7a6bff49bfe99a11a92ca671d04bf97c506e23f1b9749f2b7060e0a1c3d524d7dcdc7b7d507aee919a995e49c65439c7156616154f99a6ba9e73e3d18afe77281c10741085a90f30e7c1d7bdacc87180de5b2eb3d89015c30751cf8f0758a61c053aa8e4ba2a9cbc048eaca828d52563a38266cb497ec68a24c4f2550102b0eb3ccc662e6a1b097a87b79cbbd8af3ac915e951e25ff023a8be0ffe48c4b4096c68d674028fc7148371762ea3236ea55e79f7c1d64591a5657c120afd7af2641b886c4a4b9600b6a9238e2926572a4725595f61e92f3c2f7e95e6c49064646d00a7bfacfaa341d15a5f67b8cf02099c278785ed64d36ab035ac89c40c00ee13bc47c40fa995ad0a3e8551fb5d90d1098c751344be9ca900748d7b6e0a67e783eaa386ea9e1029fc3471006d15c5faa19515a85c11a962a3a3e55630ff41d8250fb64585a5b304bf3997a851a81eff01be93e19137da6b8a77304b4f877491adb6db0b24ca697f3e5d8932b52804a6a241161cbf11aaf1d8197384aa205aeecec9d9f4d10796963d21d0af598ba4962055202662e612f4dd3db0b565ee6f665411a159f91ff2702e3fb90407115654a0c4ff580e20f5e8fb639c838c506d0786d8b533fc2850c48818ac7793cd07d3991ed0394442ee32eb6c3093c6fcfcc3849f73e955727d1a36b10b6184cbea46472a8aff5b30ef1bbb18a7946eb18cb19f10d82856779b2507b06cb5e425d33daa260249bc478a2e93536e70b5b57c0aaec43f6f12f513a34b4f51945dc6faebe2c416127abe88f03f22e3eb295ae6de0d5819ef8ad037d1fd82c3f904ca0810db13e3d22516c86d09e2ae44a6948daa630784f6951f573f7fe0e871de40df6af95a91dc63a6a5b36da34828e0b356468afc586965b07aecb466cc0a60f2492d8c6d722f4d5b9526fa2db62864a16bfa849264ab68f05e031e2066eb467fd20eefb1e3f07acbff7c9a3f8e715f8d2748856fad82e38596e899aa0b3dca1abf7f1ccad699220e8ce0525d6b837bbc339c41770fb6153cf1e69d9ce409ac614f0c2af3d0915f16a862e9b9371c61b2d7c968631b844173491427a5ebc4673e7069c7eccc94a527f73002fd1787f773fc16134112b48371459509abbb081596d8eba4b08f9802b494e11317c62410ad77b0f5c0b0267f4d6994af760ee705141671d21b5a2b70b685664066d485a31eeede6c40c8542ff3d8a8f2fb08365877ffc02e2dfed831f1e009a17a573570ce98bc171ae690f995210f4d3c50726aeec72a2cb9ef68650552fbb9991843acf4579bafae4723700e64617043eb1ce108578bc471a4a86d58e93f3a6d4ecbfe1ab99518591c3423ee7b4347bbc84959b1c95892177147c4e099afe9112d51be9022b0f860b510da2f7586dba89bcf1baefa661e9c5243e4eeff6862b52894043e6d73131a53651cd9ebafda8ba01c756f67e77c87ba558d2a665ee52737c57bdd410dac00ba0ac943a03143805249b1d771ea4ec5a397c3000c7b78e78572242202bfbcd08be4a51250cd86fbee3727c4e0ee63c018786bbcb4b55781a65fb3cc26e1a12250a9d5e68aa3b349186c1e161791dbda797eebf1953f69a3f1449edacf3c4079f20c6ac0231114f364cb289a503286b2eea4acf798072c0fbd203002fd42e211d3b680db1c8ea71a0bbe716d60ae985b12ac8b11e49182e4fa662652a71f6ca4c20340420ab5f9c170578eec2c04674a28cb1b8685f704a7fd5967c810db3056a11d18ec38df62e64d58399e821e762fa5b2722d0317e087aa098f318f98c24d275020d91b76735b5606f01bf61f4b80640885f187fb80d454574d8fabb9096bd62a5a2a127f39650395011823e958eccb7b649538a8933e426f23199de903976abf6cd9d785e8edbcfe811975858be1cdf65c9bcba06afc104d43edb53ec2e4bfd58326e83e8a7c52234c7e023227d20aa04d52fe849ae0f4ec7ae8cd25a830fedb6d3e87626c743c6b56209b0a8aafb59c32a37ffbd5b608c21add977890d8814bec11c6872691c8cc751881f2e9d940453f430c80de9bc3505be876d4160ab78edcd1a42cbdfe35005c6ee68585f855dcca77f79263e0d05fbe3cf56bc8f280599968c5c2d05f1c98cf90ed89feeb435a806907745cf6d3aef04a1e1f7a1bcd463b832da4242431a269230c56f728c68397b945089583a41dca5fd8b0e3c2f9bfd325b5effe123e70b9dd44b69244c98dc714848e529f32189cf241ae62f7cb3cba6fae55c33c0aa163cff404cda0808c8210371aa3f764054f53e471a4a02d373aa003a2c9d7ba4e09c244cdf4c792a17ef54a0304417bfd0821c923a1b368afa7ff3d90405f0116d8c6a49495dcd92cd80ece5282d63c8264d69f955dbdf518ef8708a1c4fda08dbe82df8808dddb96c44f6b2c2bdaff5b4a2aa19eed17986337e95d1f249a4d4640e4c231774b53070238e0f5192789b71158d941a55967f3875f096ce707f4c3ccdf1fa7eedff350616d073dc6ca33ea02a556cb879f80c0df3dd24ee0c8ab9c9ae9524c719a2bbd1fc1bab5ec240fb43b1d982ced3a99061279a3ad6a86ecde6b2465125b3bb940c083ebfa2465b27972c15a63a107367c38b872f969146d3e634f502eecc15513a9d4b80c9d032c80d75ddbc124e1b2229496a75e6114962c8c84fd041f0f1062cbd7d4705f7e64612906bb409cdcef979c17c62681af043a16eace7690ba03c4bc1b5900b7c6736249019a2074fb11dd7a83743d7a00a1f2622adabf37f3de854f3df8792516ae4ec9de45f6a3431d35b7864fb62cf51ba59f7c808ceabe1c6aef61b8e8d7cb2f7a866b092a45dbe1bb4bc7cd00bd7d645f1d57240b3644432862d3346c8bf6af0d8f9538e45253c618e19135cc09c554c037246de71465a461a4050fedc0660a3211fe84ddd80ae5bd04994f842437d763096f562dfb3aa13e864cca43168b8719edb3bc1f60823b596c3b7f1e4b27d779c5572df0100845462128d5e44f777fa3087412fa1117fea8db1c264d3d62886eb708eeac4902735c6c06a5756839c3de785ead6ec7ab0562d923731fc43a5b1a650e7edec39d2e75b1c47e85e0d0ee56c194cd07355a08893835179985320f493a95c882b1c9b488a4d3c9300fdee111316021113cb7e51d0290b4716f6246541c65199bc6f044ed2c30a9b332535b9523433a94ceeca5faa47d9c0e743063357c1fed76101cc49b363d21f0a7b17d32d27c1550fa3eb7f918f7387928c80a6e5297d1d9bda6bb111ecae9f4b3d41f114179b3a699cd3a235b3af55c05169b8804d95b9119f422cfab0929c238a61119a8d6a11dd764a58fea44f3bf0d8e8d786682e753720e461804348c70435d318435b8a4f356965d86b57097e6479a1826b67daf43a58ea8c062638096de86b4d909648e250f7ca91b18ef0107e2cc1c980bc87680048b3182b87ff6148598e156e5dd5fa8ef7e491215124fa69537e4b5d974798b5cbad600d3373cb84764cc291e63dbeca3c038260e72641e225be0d43d7fe41ae29ab76073ea88386a6a0bb6f2f81d50b41dab967d2b9c2c22950bb63463951b5b0e2fbb1a8dd7036c64759780ca914971c5c1766a850b65af86da1a42f587cdb8ed238115d02fcfab8369348467d5b0b27eacadc5234fba1b4cd1eed4720fe426eaf203904d80aab108cce856de4e12cca1d25c5a100f0f95947908ae00a8bf28c7400ce97b107ce348bb8a49800aab13103c39fa8b70da11fba8e33a86a4c0b64f1598417d3bc1313fe8791fdfe1cfafe54c806bb0df1573486f04cbc77593a916acac7acc01fa22c4e465306f56c88faad69008c9056c75f918007112df9accfd312542b8033b787ee0a35973e0f607a9370d157f741321853cf884205c88bfee33b7e9c134d8b3826f3a895c19e2e1f168e3505199cf834813e22792302a066a360c6942ba0f5ee560d38409401d184ecb62254d136a7f35e9e51003022d4837768815e11413592b1812ebc1597ba3ba64192ca29c5094345e1c37ba17ada39e4e1465dfdd821c2ba553b370da4bd3b24d9cd018b822d9099d47e6de2656d4a2ebaa722ed220dda26196f37057c1659e0ba98101dad045a41a97e32c2279775a2b4cd77d39aa7c994757bdabeb5e0c21df46e56665867edbb74d49c3025176d9a4a7af658aa07b8b937170a6870c9132bb429596fa4ff8dd9f82b05092c4061ec8ed90fd03fd859912ad5458b8ff61fc5f771aa7c15a6dfdf935f02c968660c57cb19b3e63160da7e961091a5cbb0072494136f306afd6e9c698ad569628b36c81342aa06d1d6e111cece2e0078f5338b87bf0159a9783496d62c3e59f580a17863cc4d758d626a2f969178d3e2983852668450876fe5915b1cfa1d44deac21613acdb55da5b15a3eed282516df15c3b03308d56bb90934e85a06ed380defc2d920cb7e537ee31192c5ab8bd86bee947f0742deda8ba6af15a1f880462eaec5cc6b941c3b2981386111d8d6213be56389b8170fcdce0a0d16cf35e2f2fed8f63d03096b4f8bcf7ab31ebe6bd2db29f31f1ea9323c2ba7519261c1a65c64330602e5aefe20f1b14cd342c640c0ae5bcba17bbbde5227eec78ff95bd74838c8b044ebc80a55a0bb4d57490b66cbfccc7666522e47675d4f149f02ed79c83bb46cb3a016c50ad7a7f7fa3d1f50a986b715f2f9e34da0b85930f2ce3d6e8b701027c653c24be19b5fc6252d93173207e917177f8bee38b325973d07d61b4fc1fc40b661dafe30b8c0fde524c12f7f0c12d06479d35fb37322502c213069a94ff13173c2140a97d3d6f2c54b4cf71607daa93c5c1bd52b24fec1db7e9337bfa097885e77ed2c25a767afaf8dec8693a83ddbed21c5648aedcd52825768a5802889000ef23cdebafeb24512049b7680af644f1d3aca4cd9bf06a13ee991ade2f711e512eeffd1c5a2f8c57e6e2aaa62641a2f85893beb59f5c5741d59373fd2ad3b77a60e429226d43f0ba5b87c5159acc07667c6458f0bb4aa4df1a3d90e7789d9badc04a8d8b58d428a51a3e83cb318e1d7054cd2e0be78a29663e6b2a0ee10f2186b2d9a6fa7d2a947fa1abc6e085cc77ce245b70cf3a7748d314fe54c7576936f7f08ed1b6d04276ab8a5abe6a5afaff961b261e2ec7a62feef2b65f5ae8453911462d996becc16c8be5156efba7fcd534d33e733b1216bcaee8192de3a375e55fd3712bc3c230150338a11cc9fa47971a5c4526107b02c17bd465ea14528efd1c1e9d44e22549c4f0df6e7ef1dd1dbe958bb5aa5df5e1bafcd0012dd2ca4281b1441cd21a155f922f034d12ff6261bc900e3e34f20cfb28ca69dd57d73b1c6b9422b5ec0ad00fee3b34c763790bd4da7b6d31c08aea922211369ebaa0e297e35bbdc031dcf5cd0e0f92893695826a7b303968afc9c73a6ad1e40053f4a8b0f25bfb7029ac3e6cdef4e17a99f3bbe4679c242014334c2361e05fe516098130a756812776f24a6ad644d547427452f599435929e4911450e6ab8ceab20d84d59a8f362b44c35adff714923d895b805d4cc21f182cf33c3161d511a13571f57e03d6e5ff006d96b90d5b689a734faf4be4443128377025a3cf96a2d964d406e7de152c6878df29d7cc391e88fe4cd866c756aaeee51e06b19cb36467e818752fab87c54bee50ef57b2038d23e52c1ec439d7ea7da10dd3a757a309a3d52c38d19c2b5cf15e722072b4343c1ea1f97474c172a0fc49a255268136a4d00c117fe60ecaa6d6fd6913a32c1d7d45b044a8ff2b6093a0b46f16a86ce889b808ea7d17cc3cc15c8c1347de43b117f2f3ed5f10ec5fa15445df570d799ffdab7062307402e60d67aac447b4c9ed910797b1f0e8ed1768565a5552a61e36af2aa9b46f4761ff226dc04555abc7de2437d915ae8f8a46b758e4ba552d98d2553ca9caca250803f586791c73c793f91242054a3704f6e1f720aeac03968bc20b7e2aec24405f6d9c2b0aa24904268a729422f322ac8dcc8396fb5b5d00ff32d4e396225fdc5e5b213993bbb0c03463076f07db806dead163156b60d467d72bab6645fe3486d6a3398ca9c63db00562acc7c355dac8f1e14b738d9a6a3d96af0cc2871c13dc25e29ec0bdfc649f404ecc81f4d277894d0fde524382851d2c01140ad2afff01369528e836ca93039c311ad4acc6f11323d75b579647e895714d37369dba97510aa05d1ca4ea2a67d1c2be881e4fa461d11b353023d7ef924966344f45c43b547ea2d856f7554deda734a653ca0367e7127402fbea48c6ad21c1211bf24781ce5c0cdea440bf997c78d555744e573baeab061545678675c4aeb21db644e189ecaa5f714bbb511976a0d522f4aec2e3eb08591a1186af700935119e49e791622ebd8ae2080dc01266448c1f555a00464384afeb7db78d25ce0d531fe6431649c3abb9746043a9b63b7e5d91f93f08f515a12838c967e4302aa8e88090d167538a8a15216a7f4065ecab6f8b86b8b460c4de3ed3e342b4cc508d684bc13ee2146f544c686d6e005ea42bd12d4e6263563e38ddeff41a1af062c773da4c41cbd2d2afa905508c8d1dc4031da42846da9275ab1706430ba14026729509345d200468a1c99de49dec6dfd9490ede5c9b4cebc9190ede49d9594c07ecfa3c504a7d9738c381e2dc66a74e00eb3542f960f75942e76710394fe6504865e03c3a96e2cde97e5a6fb72c1b447cc1d59e4740f664929a64462adef5d907ddae77ceb1590f0c86e714198636f42178e2c5549166a744e23fcb6e2bba3b83a1f798db73b480573eed63310b0520ab802bddd2b58f3b215e69da13ab634b73ba0c0d6d5be3c4e1eaf9075518a734ae5155de733cf827b2bb964db55a7ed850af67603ffd152f240a46c7cd33b91ffb1f358da0c062e8cf44dabf8580f45de5070e31cb0137ffa05fa0318dcc80a115b3e83c632b65241d5117bdd91a132b0ad4bf63d34a3d83296a42619f4da7631cd0ac9335d04f31a8eaf842a5b0a483d8dec70a915161cce4ff649fb176e1e5c1b48be1863307a244258fcf84989e513cf45297214e4f7fabfb6dfeea9217287e6cb889d76412db02d6403a60a5484e10c5c2daab5285feef72f99ad64825d9516776002198b2188824441483ffc025968f3ae725e1d4259fdcc9d362ff2d39e147f4a3a26b0e5a4fa8699ec30891842ec4d79bb42730a9cd5e6f9df2bff3d0d17605e17b295f15ece0b2a7245fbe6ec601410b65d677e283a559df4c01f7a2c3ee0f5c4c99f161ba82000029db462c523cfd834d60273c4dbdae57c80fea2861f8d8cf33804f0f5ddbce6a0a41948d0ca08cce5f091e5171baaf775ec57e476e1b20d6be282015d8564c51c21e805b7d6b62a05d222653942f557d04abd6bd52f7eb5fa058289e2a813b3064a5e201f65603f36df7140886478c4f20476fc363e2ec08c40c21c0c894cc3cbd73e665f22081826949a37b6cc76753d44c3ec0a8b9da935ba381e965ad75413f9959df2743977a44951216e7964a19a2b74cd2eb9c92cc9c15cfafe6d9573d9ceb96300108768e97a4c84b20630282cc5879cc0a6c1e7e310979ef983030d0a426ef11e68a46b812d041a7b091daac0017681a5e993c27b08ab3c456bc313d73fe8ce3ae8e4a3949afe1fd2eda0590f7a71ec30d23f411278350d4b9fd3069f35d7224d786e66f16a6a724bc4828e5611c388554d332abe06318a42642e924cd7005e3703e7fec7f227e523f5e9624a41b34d2bb979c802e3950a417bb2f57af8dc275b1d7de655ee74021347d78cd9a46eb200c61aaf7f4223c5fb636986d47a3f84318f30df82b13e581505a09a5157d519cea88982ee384f5f76ce221250f1b9105d3c933b59e283f23891348f86b449f21889c4f9d489a41b853502c090414eee11abc092abfc5794cf06055e5f75ec1777e368af2d4d05c57886b7580eea1f4b78df1192f33482746b69fccec6fa6f95b556ce7b01da1102cc20f29e34a9e0191720e23805483ca1a6f3016a89aa6cfdee7381c27f8b148f022de1c110e3d4ce3c6a94fa56d50ef349830f283ddbca4f0ae39df8271d6ac12e42c90bf98c5115cacfc37caaa893432476055471395c19f8e6c799c1f5c7be254843b96a4ff8ee7684f2672b2cc0c1f0289fd6beb34664ae2a18586f6264960dd0724a3e762229f5f65bd52aaa29e1cb6efe6bfe1b2359acc79dc62dd331ffa8524667dc1c0a71c736481a7579f7b98e467ba9a371a25c476fb8ae80120110a8d67622ee140d77eff4cfadcf04fd98a6f93aee276f7295d0e6642222eb31fc292027e876d22ad8734d0f1511db9a35b9f29367e148ee339b2b0d3a9776a91755c7e9d81ac669d91a1322853fc5d34321a29ef30c77c888ffb5c79af778891b6a54bbd433fe8ad7a8da44a44a8065a778054896d07ef8316a0c5bbc96f4fa7ef25099a3f600a9fbca0dcaef6003beb6f7ba24d28d0eb511a21028caf8d053efb5b57a76e021923ccf94252e04a8194f698c8219657f6e405df9eb896eb13c6f21686c127ea188fc28bc4dfe2d73c2bed8005e78c4ff48ec0b5b17f2f816ec4c27b55fc8f29989c8c8f89e729adad13eb3dc69292952eeae319231014b0844cbccaf2c107a98821a516c84b97964e7d49733c468598b2be4aca71b1f8dd489bf9d4a18afd29e6aa9eddc3204a1d721c127016f42c1fe95de60e68254b30b76c2981ab3b0bf89e9a7bb8c1e7df1624bca627fea24f4339cfd054ce0e4397d9fa489dbec071039d2c38b56239aa4e253a748aa0b768e3c30f9a0551876d58cf818b457577249358f0e90f39deb91174bde3d3cd64c1b1f50380ec055ecbd5433c83131a637113c453865ccfb00aaa8ff20ad31fed620ef8b4dd263fdbe08d56b7e8755ca80a767c3c272abafc146f8aef0465758364c744c008bd8c97751323a24f83fb2cad787d295214eed99a33f1602020283080158a1416163accae4f1b967c47d9cd13dc451f8c6a72d1cf7d551dc07a0024878604134aba7cf10d95e0b34d9c3d2b71185472a0f705ca9631d4a5b5d955f8a6955d9e3b2f35fd044827b6d16c61e1dc5d60ab364434aca9efb76103033cc2d9bef1993b3548430751e8f061ffb5c17ee016a44c5fedb8c48f1f47d29d1be78668620f30190a78445cb38b8c3961de4ecdabe773916fc78fd8d4eab480bd3af30b9559313a10022eb09489571421e7d4719f2fc2a4a3419c1e628af4449628e34f3a1caff3c818a4a0b527da8faaa590c2109c0d97874e3ce6459b6a3e21136a3bb4082cdea2cd04e51141fbd315f84c2c211670db7df053941d390f4b5d5722d48ec52b03ea2891c5bcb57be50c4f287a652969c8bed8c58c5ed05cdf73b12bbf276f2146fd66083c74d4285b2bc4e9fb6a84eb284344bc547c4b5a4a380437021e2f309a2de55ec273917e74591a7eb4bf4d812a52dd6214946e85553d00e060be727b10fe7dcefa71dc0f3dca137ede2dc533623e60404ff642d5dd7065dff1141c4ff96ec641fda832e80da07254917bcf7c4e1dbb9c507ceb9d1a4ae1b349a7d0782c85a8da20fbb63fc681f7e39b640d9389cde8f2eda56e61cb9c29295d90e0dddd214dadc070672c7758cc4473900725b696f999a12c501509d4d00502ec77e427428cfc25547490fd2820503c47c366329e77b8f004cc8af2aecd2c9e330c60d9e9922e175876ff0fbe1b2eb61ec1e8ae3b506aff73d78aa015ce1cd8e99971e3c0d903c862adcc31b3ce15159823498234a436435c4a8dd03ae5171b84981452576f532b1144f6090219dd7ec46a6700c869e1268aa82b5e8a4900553a11681a569a5339396c56869fdcf9213189d05f0525dc04a255479aeceff57cc0c3018b662be939ab8580bec3e868857b5bc59d84793a1af032a1afc4222afa3a71e8439b769747561199f2b7fd1ffbd8cdedfcbf4f891587023d108526138c1d56e9a3bd205f397e1b4b252a93833fbbe03b352a00fa71b9daa4829786190d8b95acfd7eba51bbad0f36b9340e4ab63c9c79000dfe868415f18911133aef244e0ea6406c22cbf842a69c0acca6801e1b0ac48ffdf88d37187fd3fd9af4aecf71b48f3b2b7a9e2672fe5cfbe17f87fd1e1145e170fd8eb972f13ced41cf11dae5d6cf84a1100377fd4c9ae284226a3ed6b79e295721a62f5882f8c504e77ba639920dfec7eae2800cf6bf0df8d0022e743f21a7f43a05773d88058302441dd3f885054c4efc0c68bf426a3844447a1aae020cc077e6b70f10be01e7167bd57148108a0e881c957f142cc2ac877c32f5a6e9d5eb08734aa5952194f8c3135cfcd611d3d7b07f91766a0012a73fd9c1858640151661e7246d0b000ceeedfa5acab8dc349c76f2acbc4f7bf44b8c938f9051a1618c74e0723d2c5ff6cd442017247cdb859abfc90e8f26d2eeb3a4cc305eddb3fe3163e3d01a115f81cba628f7578cd2406251a3a67760601c48f0153b37bdd582b8b4ec0acc63714b79061f425561aef3e0cf2e15d959d2a517d3ffb5dfc73f97d22d9cdad2d5475888298e4942b028e26083e4b9a6da1289eb36cd9e9c2a216584482a9955344eaeec4cb74a39e7b62612f4fe3613100f2ee325c11b0dbcc3609e3e48e990536b55ce6404d5dee779317c689191737573f58bff7d87c7752078d0d5420081790122d607fa47cc8126a1341a76a6a060e244612f9e09416b5aa797cdf094361211a9bc374e037d39ad4191952b089740037e9a75bb2ac795254ada36d628c075f0cecdaa3ae188868aae82f107c1ac5c05199b96176e1132cf1768817ae675ed0029c6ec3b86360cb2bc462bbc408ac0a293e7a05bed09145a77068e6f8ce5d2b5db5c8719610b93a47a3386a49c8d0bcd11887a62b9e32047931324b18600a5fb97019459e2e064cfc3bf9a2b940796311f21ce7659f3277daa2194e4306d142789e4ada15c5a03e77006eef8b36ed78bdea6d25863b1fe86d19032106f2f4a24a0090eff997f27796ea794aa4ade4596ec734f146476029b6ad3985f7178f3df6296c062d3aa12d57ee5c3933e7b3ff0b1032435cac813e106c607f28459c22c91d0851b3f54f201bfabef3f9384b562b951f738cd2503a7012c3273c1786bc7df35ab6b2553ac54f8d696e0350cc7bdfb7c16ef9c2bb3866c703ec22767cb2dfa802e03a9a954c1a1dfd2ded80b860f91aaa65a5676d254ef50ab4bcea2c11ff8629818803bb7bc929d2951c19da0931d319f2632e37d1325456bb157f8d3646fc5b7346573d19d857bd756956dbc22eb7a10952482b83b8ad0aafc4aa382c9834d0649511b2bde7af22249eeb7d62264bae7415cc3d928e60371f7cf878e2de8563f055d5f9b197a8544ba2ae2e66ff2fc4a22a7d6200aaa25d875bb82d2191997de0feaa430fa51c3cf38fb50b9b305efcb1f8b2b2438c732a46e8c9fdcedd1ee978e4f76a525592b4d4aeacd5167b52ab9133feab8bf5635fcec88c34a4606914545041050bc1809956adedb5b62511bdb1508dbbaecc4db75107884daade30d1eefe0cbd3181c641841dc1876c91553788434180142dfdf7d8cea5511da0bbc5eea749232d358825ed5d2dceb61d60dd5e6ee69746d2614edce72acfbb3db4981f2e635420993d22ab775f88418c412df1019727f40f7bf5b785c3d15f058e0555190d35af764da3886cfb77dad6c2479a3320c2a3a1f617411523da7e1380c9e066be15394cde6fd281c63ae7e1203c60cc23b8b7ffb2a51db2f882e2d797130f53b58941644d3bdbe66bc081d0acee5a6b6fafbd1119fe0bbd858ddc9f018c36b11ae21b22a3fadb37ecda02c342c973c823231d8c2e894e9553b426e848c6a3102f0a2546a2cd9649879874a40d61aaf5c5e84ab7a36043cf1595540ceda8896bc2e7301479353b1923d317f37d1f3bc5d1ae45220aa5af7e30766c5fc45124e0ab7675bfe96d88ad2d69694e63c55b31e281c399f414a55e06681951c2dc56b73e5b93b44c9423fa88d1f875049af24621237c93ede6a5ff213548cf1ac548793ffac3277d3e4cd23ad4fb6d5bb468d136e4644869fdf6169e074ed36d34fabec314972790bc6ebab49db7abe0b288dbe69c4f1a73735102b0a4e5298aab4cac5c293ba0520d9b3f573b51a5f01cb833d99d3e958cb23c5dacca85e2b169a9023ca7d171c7c07127c630a7b35496409c57586e869fe714d2a3aa9428d50a61bebb386f82aef9778b7a3be33e5876956820ae004c3790f15713d7325dea61a3e05608701c8100b4bc248fcb8e6b201221f0dc6746f9b2ef9a68514e97a27cf54d81ebfbabc9674bca103d448c04d48a2c196535c050e76cf9e51901c6b546654b02e2da527676a8be764fe19564471e3cc09f10b94493c7990ccf95f3586f5f5ec4dbf4851b7d6a3e610b5dc3ed709458a732129820fdf459162ce5442d19b68807f1080681031284aaee3d1647a267e177e878403f5b14868d9c8963dbff4ad4775023f9dc6836ba2888fdfdf16fd42a4d1033290c70dd34411f59b6e911bde4377579e37d51c1af3ce61a90a4f0efb28d2508a28369a407ba035d796c7a100ddcaf719b6b27d3370339603c1075741664360fda76bc28dbc4348ef612653c9592d474eea393836784985e069775857fa50c744ab186bab61947eb6dc549ec2fb8a4e167181e22d4e5e94464c0ac41e14fe3f5c47143096a5d5066700be6e31a047ebae76186378cd632605c6528d06d13e878242783d59bedc5849e7bfa2d824aaead50cdbfca7631646ec727e7728ac461009a241460a9305b850aa7c294239dcebf05f9bf800bc31fade2fea68b167adadddcefd31b5ac1c4fb57780d2e9123fe579371381d4d2a1020bdd7343cafc74a22c5a734ab964d2c7f96250b1b90eace8f7fce8cf55bac0f286ba683c041f051bb6353f67a57be7cc31f2ef9c627302ea1e7a06bd1d34381c592339962613d872ef6cb31e508295c30815c4b9491787fa899b8e58d0b0be32fe00508a2f08d4b9fcc984547df2c063509b43a175cc57dddd51e437950fb55616c18b5da6c8749845b798dfeaac1adfc978e70addef47c13d6705c4233369706eaa2c45d4e996942a9fa7222f35569a2237220ee95e332802d872cc50138a2243202b4988187acd11ecab013eac8133154746d83700319e44bfd2360144581470ff63df20a4a0440bceae34cae0fa0bef6e2945ae02109077e5dd8ef5022935cac7e44d6c2bff2924627c81e4e998d43645e4a072a7c2588da4c75425f585d49d49cbc70820fd05c9f08fd0b6c5e63ae5c2bc851668d575723b5cfacb3f3ce6a8a34c84989fe9301711b8db4df0dfcadf1ecee0c0991a6ad768440e541bf39bed31190a154a7074389054dc5875df3c5a3ba386682445e987c2198d147ed17d102ee2a0447c1547b6c813cf5eab42d523a696ff99cb7af29b076bd4cabc98d5951937ac684f17b22c3b6a515260ca5d656797276a960a4ec0e7972ae8c06618aed3f54f551451e9cb5f77e3fd56c6ce8115edc37d4daf7b04a7f4b5e41187b0c53e69ec2a4755bb1130a1fc08377c6126cc2b813476e6952a882414461a523739df9d8a41443b488abe11588a42213fab40f8d61c8155304e92cc2ff9a0513e83e5a100104124ce83dd93cf9f2e71bde7e680114fffe7175bbe99ddf5cf610572e381e8f0460f16c7ae06fd60fae400361657841b800ebff69cedb69c27fd14dc2fe9be4dc164364ffe12fccadbf0c24aea33a7e07b18d7112b32e429db8fc4882d82a1746a375febc7ff9e35e48fe84e808b765925f1eda169db02a3c3f28071564a27c6c77fba186f38187817ae0d3071e44b2accf0704014d300c8d9bdd6e6deb0ea7f769ca548e97ad6d55bd172e5a060ee8aadecff23db5c19154a3c4f326ade930ecf0239daeca3ffab269b97e45970b62d326e0d3ca8f1d8fbb9e5c03840aa2219607d036044a6a52f8dd13ee4456af63a3ff4fdc9017fc43b0c6a795f97517236a5daa84d90ad41a86d4cffe9c6da7ab127d51eaad1a54ec1f5b71d3ebde07263d25b41f4f4f0d44ede4d29be83cc4abad253928f06b9ac209f59aab27dcb6283359e1c1d5a8cbbe73e6cc9835e91c16f0348118d40d8c984688f92058eb4eab928dbdaf15bc551286ad56464423989ef2ffe72f32f39f394a1e233bd5cea31f59980b052ed3e90688d532056185a2024c65d1f986a75aba973dd8154d0e58209427eb2c9f69177a57ec42dd2c00a6f08c48d52ff017d0501c0a35a387c96b1c68c71fe8da4b2b3ee27d87d8a74f971b45cc5f7aa6731d6d6135f842802433bc4142a055738e0b70a499bfd37734583e8b97d6ec3f2db277e318181019e22c1895a493a70775c352881c497d8dd9b4f8b284f61f4c7143e3ce6c374239d98e865a4549e661ac2875ec946990cde32c005b53f0c18807399d1a3c85c8dc1754107380d0234ae213478c619a69932ae46065f5bfdbe8ea3bbc3b22c0a50ea973ec82ef0846d2cf9e3967f6f3c4e9120ef7937f5edeb65632365eab2e761bac5bbfb1bb2480611abafd969f5c3726230726c38ddc4ccff6dd392779e5a1ea74956e1e1e9df1b86ca4cb8f6b0f5f4cc521c7380364531fb836fdcd1388b92435b72c3da578407edcc2b138a553849e9e19e25c2cd3d8577548059a58495a477bf7f17549864f9ccb458c7a874d0d1a430c388b0602fd62d5aa680eb576e7fd7f6ae30cab0d2f546fb46a62298d7c097fe4988558521b45a3b3bdead6a3a814e0927c224563993fa86cd376b85783857499be94bc81e8e5b52f5e4029178846e6ec2c8a24c9604fc5988bfa326da148708d1c56b5b3b7e4b7bb9dec4587937a3b46ddbe649de51bd5c56a9e31143ff73b0228528462218fea2da02181b2283d1abc63bd944af954f8a370f30b911139e4797ba349b805c3c2e3579ddf4f03b9b71f855c0d1b33b50af60eae7b59f9652ec92f96b43db7492a509ff2b562f1fa3a4666c659092d2fc17d632e1bed5eca14b7e7227511d6163cd45fcb9beea7ac0de5054785a31073da47222a60553af22f1e19b0071ac445dfd613365bf5eaa045a0e46d7299164b69b3e3b2f238b897e4813d80c26dcf57132b83d1f2063fa2fe32089b53225af3a6b920baf74e157c12fb0cb73ec35c66b46def8a75052707c684cac799ed423db534d981a55cdfb06cc28a8012ed98155f8d958e9f8f585a290ac704a714a042e982290a3ca3d48f845c2bd69b856ba4f904234f2e429fdbf35929c317450c4385d41e0d767d57af500050e50c230de8d62018696e90acd1b7c4e64623531ecd5b4092949e6577eee85e8f631f5f5b799aa2f31c07f762b1e311a43feea6c688b5a83c7aaf58aeb688e9347341e8a8f487a627c94a6c84560cc9eec0ee1670629fd75b5e9e7f914929ccfe310e35cafcaa67c214f3ebdae7c6960d8e9340b17712ab4644a6093ea5ab95c35cc293b64cd95a602b6f4372cb398470ac190fe2e0a0f4ad01eb3ca8899c304083a9999864bfa219221a64caa33f41dd2993281bb4648ecf2115478a5b14c1237591ea27444c133c4b05f5cea38b13baadb7cd634f30829619503380774e957af91cabf9f765a01339486838e6641ed54431ba20d570d551a1d4ac393eddb970a376ee9960de94b62daba7858b1352ca68da07c2787bd54ed8c9b076e868c8e6d2a40202f9b6202e092a68da784b1775b73d79fdf95b72dac28f99ff549709339ea0b3c7de6e39bfca05000946865d57004e87c1a82d21523bf9b172ae07465c5bfe594993fd8b559d32c2afb21e0690862f7606b4cb42ff3d0e0f75b7cfcb877ac45c54e7316710a270dc76fdd03add315317c3d7a9c4e4fb126c81e8069f2e0cf92cebce8e863f9866c3d5a026be8d90938e604218a04b5c0997388f90d637173002a2166ddee93b3289a85ddf1ec8d1134336b4b30e28d1f402c11d1891150d3448b8d8f02a1ac2ea3b43f2dabd06b7426a14468570435af8353d63e677fdd77c820eac89b1273b9f34308b0023e06e39b03d4dde6fcd04f4e6b1af5ad9f6016ae6fca4a8a042204982338b11cf63f3ce48f8de6cef05a86c2c5c91ab9ee39eca9647d337d4b44d0b277b9c44d35deb2115d24547298acf7da81b2b958e038d8e34e23bdd788a555bc082b424ebba898a4fd5aa22a0afa9e908ec1c96970c9880ff8e69f10d1c4f54e306031b3748be9258a973efca91a11cec71ece19a5f359029c253533f5abd378ec18e4647ae45539293045b94417163d5e896712619d82f3933b2e608754d9a2fa5f36862b05622688f6ba1d9ef45f18d8184468bb300284e5ddab8e65191aa0f7d2d2906281545b29f1cc79af768f880d0afd084da10c569a7b11ed98422a3722c9c0abd1d1aeb31263b238a42e0deb0de77f4db443395cce73e18e56c51eef80d8915e08a1116903ab3781813558cda47eb3e8fe8961c04476777e5f8c6c6d201b92524e657639528d0301125a12cab42b8a2a9461e5066ae3ae21e1e7047dc4bc2f65524649108de93494765325a852b1356d854f560bdfdff85bbca1ddceb944a4fa375877b16d851499a259776be76586ec39cbe69e11d38d7a7247278b0d338446cca125506264e9176e2e274463a7dae20386ab809eba16f6c3d4d7a244e9e44023080bec9b9614be3a84b08d4d2d062e91f4b5111b586e19a64e75a8ab7a3501de22e541048eec5588a6d96d4546c5b42341fbdd13c00a77aed3e76d4ef53bda6ab9f487a2f720ac1c1654d963077d799ab46e21188181dfcd84c4876a73a6734cc881fb433a1409fac3cc45d5bbdbae464d632fc3d6900f37533505b55cfa175cff2c7658207a9132d4acf457107ae9e2158b46e2a4738ddb8038829e8ccdf3214b080981344ec3f27e1f1ec6d942696ff9e8a5a3a3d7cfde4c307c1ec932ef470b4fcde4581958d80799e770330a6a9d032e4d6ccb40c7bd71d9446d6b41590734eac54e14edd40b226b68da3a839a89dcfeca70f84bf637a7a6e23ea031594053508e293be865ab62b5d8365bd358e5f81ef677c31e10f295a3192f1144acddc031df6b2b6c4a606f7685d2ea525967459d720d247ad6c8f18e560203b092c0737bf8c1f787099ebe997c937389e5d94ef41b3074fbe6ac0dadecec06855d3d8b655e2b39854eda947b1729f4c4f4b87a22ecd81e60c019a24b725f142b430176df6eb36b19521b34646cec052a51508fff73c70ccc1bbb4f69f637b7613c2665e1a84a35095d42322a2017fbae56ba3b5971048fd63385d7fed81ff8df16995115ec7b58d53aff4cbf3df35b55d7f4fced9f1037da4e5ad102e583a7a0c19b627d8365e3667781847e9ec44ff66d9d69109542ffd17a782accc2e367522044cdfc59d0e418400347cd4ab4b3b9112d2a28b3f2b0426e52e0d72c2862333a01ef53e380e54d1ceb10b2f765d72c60ec60ee6b3a63096ba0aaf271425cba37fe209e9e394562ce32befcd0c5d6628a1263c5953d222b599ea4534d4022a4396745c30542a52075aa3714c8a390887e364c0ea35c57adaa502d59462a32807c9ff89b0cbe16e5936a5667996d239512ba5f883fec30300000621f0f3453fae0fc59d78f9306b6266c3c23ccb6ebe2b407bc01e418ca4edbdf79652a624653d071e0734073e595df40c020d96c8481946341b3c4233382246ca80e3862b2c72f6095a74d1038b0c29a8072b770526e9df9990c304b62395bebbdd3ababa0056e424675a50a97a90a1575b814bcf41cf85152323f00dba99824a467a0f524c227394f3a039b9206ea40c9d0b56e4ec13ca1cbd0391948c0cbbe9ec4a6df08288151982402c41007310d1543e522e388246cef7a8023acf24d88cf7e6cd094a1832154de0b9faf091e77ff366b67744ea8793ced3e9a74f35d5a71a1f5c56cff5a9e6dc41ef61f8936bea96eb918a7028a547fb218ed4a328d489cd4c4d9d9dc55486b25cb1a92ce5cefffb1efddfefe8ffbe6f7147f300bf456f6647e83b24f6f0465f824861ace5a8915843582b848503f0c1f54746e6d8d1464b463ab996a359ae235aaef7c35b8f527a147d0d6995962b499b37c2f74cdd92c9d3d1da95e4f0abac96eb8b4cd6d4991600fa3064aa29cf54d655ae6178fbc1a5e76e7dba3fb87ccf6dea7f26afb95a7a926b98e08925fe5c5d60801f8ad74fbe6289ad2491cbf0966b8f7014ec4148454a65f9a60d7622a653914aa04522ea77e20c255d6680df6d9e332b3ab9c4261f47d0af56704819d04fdf6d65229c3642da0c496bb5df620cfdb663b05fc599f993ac3f49288a000236b342452ef920bc261e47ec707f1ef7bf6f530fd29aecf7efb0ddef893cfa79c470c40ef71e7cef63f8fcbfdfe1a038335f87fff73d78923928f2f86cde9b3ebdbbef18ae38d3893314a86f7f47fd11d4b7e24c27beb0c33e06ea1579b4d001b7113db789a1c670c48eea1fc3f5b7e2cc7c7a2a03a7848c1fc8200a1464ff0b3bead3a6628b1a76408205433421c00f2bf2a8a2cd7c424ef229ab02210a34d962c96de687445ca0c916a9ed41abf70325b1ac683bc8a5954b8fe6c4ca9241ad5ea5b4dc6e5f2d4b9fc41fec8db9e276ded702b948af0ab3c1b2c307d21c0a7b39030c41d357504390d3f78a82ece58f7e2288d29028e6d97bed4a34ea3c0fe398314638c99d997830cbcb82ace7618c9d606991557bbb52e9ff74f28e687199a180c38413092c1b795616a9ac2c567b9e5f711a457326dc2f49282babac81495d59d88a38729f887099f3496535cdd11802d32f69eee505a6b272b3be25ac17924b0b89058f482252081492c0cfeb48d7562735899226b54154ba905f2ecc9d868e37a713d6122dc859464d18356154a9c9d5f8d4f8d4f8d450a9a15233841a2ad48513848543693427b7b555a43939d4d23aa48c2ab921d4f8d45009a36bc22003d788512386b705c805ae22a90787c3e16a7cc6e8c1e17a703821e07a70b82953a6040087e659597000120305d3bf767e51ddab35a59e80c4d62c460754b0f0a0024c2a8539dddd51f05a9da57582a9052580a0181f0498b2180104c24fd8f09000c0ac75d22022ce5a27e8bdba571a30a099b5ce8f07d377d2ac7586b485058f4473864021385f44a227f3653fe877634c7f742c0fe8c9e9d36cc1dd65cae5ccc1e0280a4c1bff141072f386f70ce9d3cc487474ea2be2099e5f0305d79e5d16206f399069438307b85bf82bb1d0a094ba3f81ef871f28ddd0cfd002423d86e4fad9dacad9a70f94652cd72f6f8f222b6ce0744940cf38e38c9f09cc59be215bca2e94b215ad0d851d283402819fd78520f0b327efe49d9cb038cc0a8479b3402c0f2e62ed99b54ad885bc0f14d54ea7523812819f17ea3e2fec3afad530c1a5e764bf39813d7a127da06c34c334965acbd75bc76af5e67dbdb9bf7b2b470d07ede4ad1616d9bfdb22fb87ba086948c3f9795d28fc5c68b041fa795d28046d68c38a02a8bb61270a81c0cf03d950ac61280cb9e847f6772439758aec3d487f77f508ebd1861c247a0b14fd3da751f5134b4f074976f1e6496e3cd93f647ff4c949c071aa372be6e853fd5054bd455424124d91a834419e610028d79f19745db80d0086b5d5692e6746d925cf176b9ce0ead16cad7bad4ee79c354e30fd4aadb56eadb5d6edac174a7767bcac5d2897b5de5a2f0575e860fdac77455de7ddcf82357450874075ce3a271d89661c20caf54559fc748045787fb4e3be156598b90069c51588bcbfaaa4cace0354f28a36d03022ed37a9a3ebb4e29c07a8afa3fbaba0389f1be6ec77a1d4a20b2d5291deb0c20a2bb0483bc02bcc9b5e61de3413ca62350fbcb0859167167901134f149ebec2bcf1ec5b1952d98a2c18484e70076c30d85b9f04030c735ed163891a7200c97a628e043420fbdfc7e1b3e660a133fd3cd97b31c69806ba8159821a8d8bc6b5454d163435d0d44053030d163458d4f0d0605153abd9a2268b1a1e9a1a68b0a071cde075b5d61eafdb59abb5b5d6f9d456b724928bd73a43d7396b8946e9f39eced20ad3b7b456b751e7acd3fba0f8beeffbbcdb79f7b35ffdfc7af75eef7efd512f0c89dc87207ac1f77dde57430be57ef6abdfe7dfd7df47bfeffb425c84d5decefb40afe7ec6a6fe77d5dcfd9b56a6fe7dd9eb36fedaaf676b6e7ec5bb5b7f69c5dadf79c9dab3d67df80e97b7bcfd93ea8542a954aa552a9542a954aa552a9542a954aa552a9542a954aa552a9c0920a2ca972a6106afb3ed0770aa35aff2849a3eccbbe463cb97f1473948dc546b266f58f5a3d8e5c8e9a66d860b004ee0b27b2e882bc5272ff08d63fcae9f15699a305c202f193fb45ae7ed1abc72b456c26a2f58b78443557ee1735e9173d11892690395620002148ee17b5e68d0ab95ff4a35115577138b93f9473944dd99428558a56b93f249bf58768fda15a8f7788dc1fb239aa070d6ac0831e267e202104d91fbaf578a3e4fe10ae3fe4133232c7ba537742a15028366f52c8fda196a32a8d1672855eb91f64eb07dd7abc46e47e10ae1f94eb0fa51c2553032255b48858220546f687563dde30727f88d51fc2013199632542a40988d6285c9b3728e47e50cc51150603c960a96ef53861fda09c1ebf2a73ac38541c7ea4f8e4e6cd09b93fac3965d95c7d61fd61ac3f94398a478f113938c2e48918e8403610727f48eb0f797a043247efe90912e2f4d89a3726e47ef0a7519e0b55b91f94f583b31e2f2cf783b47eb0d60fda1c35a5a86090a426c410565490fde0adc77bcbfd20ae1ff4691448f68346e6e84c9c090882606cde9490fbc1208d725b090ec9fd9fadffbbf578a3c8fd1faeffcbf57871723f98721418a588ed85c4163d2ab21f5cf578a1e47e90d50fe2342a24fb3f267374236ee46b92fbbf241fcf579b3708c8fd5fcc512efb64fd5faaff5bf57881f47fad1eed94dcffb91cf5421834d4608b1c5eb0e408d9ffbd7abc60e4fe0fd6ffe5f458658eee427e72bf27c5c3350ae7e6cd08b9dfebf75cfddeab470bebf7623d5e56eef7648e82993265091652dc605382ecf7663dde2f683cb57eaf498f5deef780ccb17b7a32f55af3c606aa73390f27f7773947f96a25ebef663d5a5adf247ae440c49523405c81440f7cc8feeed6e3c5f5773e3ddedcdf1999632b69255dd7e5002077d76a9debeed03708169a0cd1e18b3070500619e47592fb3bd6c8648e2da48534c9fdb7366f4454bf2e4feebf3147754c96baacfedbeaf1eaf478c20541525270d042c80fd97f5f3d5e2f72ff85f5df9c1ebd2a73a43d3d3fb9796392d2289acbf9e47e5b7354af56b7576c466bc9fd16c81ce991234172bf6dcd9bcffdf6077d6a716aa95a7f9df5d75a8f13d75f7daa9139522154884ecd89cd9b9adcf4d53d573dcefe8ad323933992a0a7496dded064140c6e439f27f77b6ce5b255aa2f0fb9df59fddeeaf1e62007e0052f482569f2838b87ecfb837ecfe9b1ca1c33c0e447cacccd9b980e3c9979d2fa9ba7511dd9df40e6988f64dadf3fe6bc81c9fdf4a7512cb40dfd9ed57046e668334f363a99368e0cccf19ba7d8bc79c9fdb4c80cd20ae57eca9a1e396f4814773fee2f7515520071c311536456a620af2df7e3e837a1fbba22b8f4dc6c46f35c0d143804c36f0597d7e6a8ae456b5e2e3c37c60a5cde172e6f2bd317e900973697e9d30c0197b696e9e326b8b4af4c1ff700973696e9b3e880cb8acbf4595a805face0b2d232b5f61644b64fb251aa617590eb15debd96a60c5c5658a6cff203fd981e5cba2c53f7c75564f7b771f22fd5f0205837d95ff46b8ce87c98c8b5cece80e5faa01d206a39727ddab9b0118c99c0a5af327def85cba641035cf60ce8c754a11f93a32fb2e88b3be092d632fd9832e8d3084223085cd215aa6b7d32c06587eb722d47792ed2ffb0c025ce5db2658f75f3c4e8e6723d103c530cca0dff50fba508ac038900062edb03e120ec874103f64a98080834b2027b252c048d193cec95f0974eef23908909af573c2570d9af9969d8c5cf145088d744cb151f3ed7c80a153f4c3c2b5894ae0ce1569208e9f053c5b5826bf909e2bbd2026f48c8820ac54b02fca912ca3a2b3a95f6fdfce01261b992e4c50a94cf88f783d3fd007445f5f9f07e8ee4e9c282793490acbb34cff5a55a6cf5c2dce6c9aacbb35d97876b59679339aad244b446a9747777cf39e7ecee204cfab347d35e229c36bebdddded0dbe091ded351a634b40ca9f0d57057116a80fefb5eccbce95a7ef49f0b0df40cb2f32f47b9576e835942ff67f21acc13fa5b4c2ec52ca17f64f223f304d9bcd1b079c3e5d75db9ef17c94d29256700f29cdf972fad4297c2eac99859336f443fbf00f306f4f30d301510fe7c1358a60adf1311fad044c4e8594c4ec5b461c22343a195478efa3d938a067a06e9bd0d1ef9bdcf3c366f8c4c05842980ef3b5305223c17f5874c0e03993c66f2cea4b2e1c9394b0045df9927f47fa61526bb9fa1ee571e69b393e93b139306e654d06f2a03f56608791c619fc78a92568c41866b7fce39679d3e7bd239e79c73ce39e79c73ce39e7294fecb0ea83cef8cf27fd988691dba83ba5d8eb4129bd12d28fe5f9386c757acbb4714d9f9e322db5e7302a6079cea8fc40409e332a3ff9346f3cfbdbcc9b7eef594e4a9e332a41320979ce72b2ec39b8a4bea340413e987e0daf346fc80097a7130e475dd27368e075749be6dc91226f8b2494b5b45169ad5544429f9c0b245af9446b85ddd6daaff1c11e0cdf28e874169215ddf6026d504d1898fe7c1ff5aeba0c5c7b332bab4c296d22af79e3b9ce2a06289c4386cf82a304b022c36fc151348a17193e063ae0280490e17fc0513ec48a0c87acc8b0922126431b193e65394a24850c9fb61c457a91e1133264f919412ab54a91a1970a65a930ec5c619e0e5a9ccc3982eeeeeeaed5d65b6fbdb5fa0497606f56b7e155081bb021e8a17d0b5aebd65a6badb5d6eae8f9b1c0e0322b93d996b5d67ed6b39dbdd65afb59cf76f65a6beddbcf76f65a6badb5f65a6badb5d65a6badbdf65a6baf0dfca2821f054547f2c9ba55593ffa5423d0a74acbb57e785e1613f4c9b1cb2a4e37f5814e2ac544d11b4642794a7cb1c53e37475532647dc31597de5c56657565653fa4f8b45a2aabd3a7fa97e7d62ead45bbb6af49bbbbbbbb3bcb08babbe76471c1fdbe9b5c28854f4354f8f51b57874c57aed585730812e52853c8f367ada1584ff546ae1f86425029b5569cee439c6eea039d5dcf60a27a36821e326f28f825e5a15748d1599e9e39ca66018a6543b9a2e4f5acba7c72fdeaaab4ab2e29b926c99527d726b9d627365791e47abb2ea78b891d2c97abab4ff5eb903ed55782cb89ab3f824e667b740dca41fd70bc9788eefdefcf39dd41d7512178c3fa15acf5d65a2b8f5ac3cbf2813edd2f1dd6d55beb57bd4aabd75b6ffd5aeb57bd4aabd75beb573db12cd1eab7d65b6badb7d65a6badb5d65aebad7f6badb5ab0e93c901d72ffdaad0fdd7ef42f7d23a64d54a6907bce6eab95777777777f779339d05037da2efeed1d0d4ebdc133da7ebf66e4abbbbbb7b479f6877f76ddbb5bdbbfbb6eddadeddfd7dbbdbbbbbbbdbbbbbbbbbbbbbdbdbbbbb33e37e0f227da2e7780e6b8709e13cbc853e4d0f97fe84d34d7da093521b4c14add11c1eea447d92fdbf281d46a95c218513b974182d32a9e830878d16f6e335c14f562e65e53e45fae47f91dcd995d915edbbc1060cca7376e5073364f83005c90c22ec007b4c6adc40ab71c3b70a116af83b1205152b86d8acccfce0ca82192bb0e743c70a9499336a48518510e3867bc51830cc784192ae5966f43cd99f0db688207b9fc003ddaebb3fbadb5d212ce96e7773703bcfeb6e91db79dfe775f7756f154c85d84189278819404410724446ca4c0d66f400bac18fa0e5feb0db6bee79ba2aa0a2ae7a2d4f9f518f81b62776ab6ed5f386f518b23f9d37eacd74c9b456dead4a258cbb556e9103d9614a129d37ecd7af375f4b5944e506f215e7bc61bf82b4dbdd12f71827305ce0eab5f7e68d124231b061a184226471454817d887a8e1850f515c69c1cc0e57543260e0fb831ce08fb6836f1535c6c09e911b6030891e703864a605f80b62c60cdce539fbc1a941c68f0e3594f861810849602fcfd98f0f2318cfcc008ff2e96d98e123977f6d0dc290125f54d30c4f3c11c80c0b2a6278a6c03ec0f41b0a8fc5052abc5c49a1b2003921c60b134c3a94104306024c4a46c04dd8f0bc2400508b10a70bd36f77f7feb2c0f4dbddddc3a3165012612db99b30e98acf153172896b4f2dd93c1605230725558841ceaf63e0eaca384791e023080e843081430f42b8b91ff3a6e6109c3208baef2ed563f71d2e9ca7b72e9cba5c9f6887eb7cfa443f860b5c76b82e48a32a2b954a0921e99798ccb163c2a449ee2f2529f1d4fa4b324775b6d22cf79752fda5558fd705b9bfd4ead1e5a81a1b56397022e78b27cc20fb4baf1e2f15584e29d65fd2e91194fb63aaccb13b72e4478a4f6eded0268dea664f5eb119adc7398be169d40bd91f03648e5d134dc404c9fd313f6270625af386fe90fb61728eea70295ccc2af7c3cc606a3647f5a8618a1e70cce88105e121fb616e3dde21e47e185c3f8c0f8c9139764b2ca193fb5f6eb994a35a643a566a50e0e48290fd30ab1e2f192c1c98563f4c907e9821304560727a8ccd1bfa82dcffc2648e1d0f1d0f2f4d72ff4b92179e97dabc7989f58bec6596fb5f52fd2fabfe1756ff4babc73b45ee7f71390a033b326091314447090dc8fe97578fd727f7bfc0fa5f727af4aaccf1f6f4fc48f1c9cd1b52cd51379723d9fa49aeb6b07e52ac9f2473d47432032d86f00162031f23643f69d6e31d23f79368fd241e1290395e2697092948ee27fd20e1b4e60d29e5a86b2b49b27e9759bf0baddfa5d6e3b539ca0248823cd101c709104590fd2eb71eaf10703eb97e971f172373bc468ce8e47e97222e392eb17933a970d495c95c5c2eafdcdf62eb6fb9f57885e4fe165c7f4baec7ebcafd2e29474d9f26a4a8e1e6832b980881ec7759f5787b72bf0babdfa585c91caf124a64fa654b93dcdf926a1b46ee6f61f5b7b47a6c7139aa474ac8cd4a115380d18217d9dff2eaf1e260392db1fe161d1cc8fe16242d495a785a6af3664e51658e9787cbc38f149fdcbc61a939eab66eaf98cc51130a123d393d14c1c50f5f907da7e47e165a3f0b4f8f61ee67013247dbd3c31224f7b3fc60c16169cd9b8924f7e39ca36c2ec7926259cd6a3647f5704581b1208a32ca8801d93708b91fe3a6e47eecd32398fbb191395a255609d6c9fdb808ce89cd9b1945eec735ecaae1d72dd7e374948e26319a131e6eb0c50dc87ebcea11b3fa31ce88c91cad10214d727f23d8f83ed5a0f1f34698a3e3e9685dad4f3960fadf721bb53ada8389ea684e46abec5e8c547df2d18f1c059723d628d5d9964db58f824b44e0128696fd61688e0a5f30b42898f6603a8610babda830b79d1d72b2cde5283596e10b8666abf558c23cc9fe250ccdd66349b3ca3c3d3a93ec7367079cec3f528d70b2f32097304d3e0a2eebea4310a8a41ef228356fc214155b08639dcd095c76b4f0d5d11c25139389d1b28c8f0ccd8ad2afab8f82e9871de8de0f0c7110c6421472803a279d6d9e3cc7bcf15170f7e0ce316f3acc018372489b4e92a84cc19769563666e07294aadd2493a4fc8bf7b6de2a13ebc88f42a305be5f47a93016c67ad499e968f96db8948999814b9998cc0de606cac46462def77d39e0190674b9ffcba15ce6c8316f4099dca2a986c3e5282513bb32312f071ce63247fe489a95dbd08442a1d10a7b3ec0f5e98f30a871a85de86835fa91fd5d54b87636d54633cc1bfea18b8b4ba8b6dc46ad516a64920181fef3090748940931064ba5efdf3b9dae4c2cfc29b8acf1390c4e46e67e616ed97f84c344996ad326d563377a95a65a69aa8d783075e1ef41c153a8ecb032b152761b9f2eca31499719be7fdf547354676b916615c66c41c0ddd16a9d32b58f82656468602e656a616c0cec9566e528ef7d46b3f2ae69468c1aa069234f124c4ddac69f9a4cb53e4dd2547b29f87e93f52d88e6f0a3e480bf3c13aac0475e9a95a9e63627222d6fc3658e7753ed8aa61a0d0db81ca54cb5512afbdb3a82acdea8a1056aa394524a6909cbfa43a7238800f812c708a20d1c3800703a89626d61ceeebdf7ded337bd29b771da1787cd7536e754ec40e28b222d893cddfd3a7ae68a54acaa1a731bff1e647db9cd9d5d4abb0707ab7633d78b817921c1ec2b45692e04fac0d043f96c4ed3975f9e99663fab99cd1ce739db4c4dd5104b8f564bd9be16834b249716161ab6e15b29171a01bb0c851c369b0dd71787aeb3b2da32ad568ba3366aa34fe8ad1403f342726961c123510884c3041a323544a0a111a1860c0db13ce5d25939124e365ca5189817924b0b0b1e8942a0cffb5c8e36ba02531b0fd9dfe67ac4e5c521bb9dcd1bde4cdfaebbaeeb28cc3f108555ffd9a5a1166cce6dfc59a6609a3f95cb557f9beaf17e7bb8f4d9befc61bef45e2b7714255b58f04ad563f8ee3b13e507286d4a138d9a2f5966f9b1dc5f64798dc8721a17c16b88a5c79a4571c8baaed1f759492c4b2918a7af4c632d626b24126d20b5bd64fa4eff1b21531c75deaecd51055cd167366c50ad45da67540195c83480bf1b316ff8975e85cdd5225d756ace8b1299a8fa7d2c2c3468984cf56533eb0172495f2dd6d7bce19d4b5ce0d2e6320bdfa45d2f7be4508d14ac08a78d197aa17b5c607fafc7eed29bfe4184d8b181b653838f01b68022455aca8269029ffe863f23914506791e9da1958508c0d0a3aa5136b5a3829d9ed068b99c389aca8b5cbdff71f438a76000092b9880c212f96d946a2c81cb1265d52b3ac02dd8112d583024c2235a1c3992c5132560b29d1a9e60cdce80d1000607d8ba58b9cf75030f4f84da95f2a2091a0669964513a5905c510509922e7080938c523b29243b36d842dc8e8f197652405ef429c6a00598407b64138e3e75eecf39701881dddd85165988409f9c52ca82d8c20a7dc211d202860b5ce2c8d1634973f4c92939f30a49eafcb2524a69534a9b52fbd392b00d0ce3917a7476cfe60dfa3a4846e07e1049386d5cc03eb55fbfbb9bb63f8dd1f0ea6eef96cd662ec0838601b381924768a07bfb05c0913c0a8023b1bb04c19fcbf73ca1a04114b9c451c335435dbaf03b34b4f229cf1d1fb8bce3c396e70e11d78d3c7766e0c96f9a3404812ebb00cae53f153c77664892eb5bd394f5125147d41175c869a30c6db939277d988e0cd4278acb18fdab4ebfcfd11555c944551f660d667dd521b6ea0393dc75a71ea9465a13853dcc65f521f7eb6db8e9cccc25cdd50506788a2c883a688cc0b2f728f67f15a182cbfa82e10256617dea7fd5d7ec5fc1260b5cd61726c00cb8bf16a9495edefdaeefebfe9cd168db5ea8a1cdebc1e4d1565011e345ca406f9084ad46e6e1362b662d52066ab3c10a581076a0438a9481520f84d3868715d481f2efc5afc33d53fdced40bb8d6d6b6a14fb3b768db8957c76ddf9b2000e84ccbd27d77a607f41479da758e11d2d9c23fdba508fc99fe6cb1c4578420e1caa0b5200d0471e083ac0c7ee92d0b7ec5f91e64d5160882ef32d02fe8f7829e8771a9043ea873eea083dfb77ef096c16f25b361200882ff020541d00343f02908822008821f82200882200882200882200882200882200882a00882eaf221fcc9023ce78d92de72f853b04e9fc20f7f1e51429667f8a5bfb2afc2eaeaf17ef87548a36adb801fbaae98f3bc9c97f3725e8ed675b48ed6d1c2f7977b1ec6a5d2f4f043a6e936360cc3f03b670bdb167eefcc0ec3a924872f50daa4c3a7b5704ac9e1cf0e41491a45c9f0a91574672aa053397c8aa443958f19724997e4307c5010170c0f19fe3b6a041919fec951960c1f470e1d1e997fa8448cd84c7a54aa1a0124000008b315000030140c870322a1480ea471b0b53d14800e758a4e7252190be4611004210629438c310000000001001030846a860c0154a5918f3240d0599aabcdfe88c448d6b102e7dcf1d36c40bdd5f58005e8528a4c970419cb0d9d136022b5a65725dd5d10c7642183eea482a541a08eb306fdbe26d14af35bd72e6f696ce96f76afa062ec2e198e81796cfd1e6d121d69e9e044de7e1034522585224a0a86bc12800180efc40736db966991ca9c8d19f2a465c8e4174a1123d48dcf7f22d59dac7afd699b2c4e3b93924884aa2d257ae9eb22afcb17801f7ec3afdf12aacf3a5bd000d4845ac3b042bd1a8a5b19a804be2554ee07f388f3d9e47cbad139696fa5b1222c8107739babc46feae4cfa4db46c6798dd02dfc9e78a69c5b8c09c0f1b039a9735a3aa4468e41cb8afb1364339c2931d4e059a648ab9e82aced95878bcbe0a9c7c60de6c64118afc9d6f41c0520b143ea2a14947f1004c8a7950058d35f43ca3c4d2f7bb87fe62827e62c6791dea8cd8bfc369532136409a76e4cdf759d8d44406b4423330c04a5c4d4c5c7a58e0f201bf8ac0f33b2ccecb23b2845e80136324bb5b936134bdc3907c355c6d2903a407a5625578933e86a6eb970d641dd8a3feac503ffec13d006ced4b53ada1431b4d3f12dbe8b2b7b48231834a8ff96a9370dc739e9468b65151c9785f465c00af98e108831ebb1fafcae22ae0be04373651c95f7f087de59169a3c2480d95d09ea935dbf8411e0f011855630f5048c114ec5980b955c89d7eef840043a7d0486b2d6dd88c4faca7e7f42d006e84a59f513a34eb4302c083736e8bf4f13a6d1d35b4eaf7d38fa9730ee14683559b19137a0aec891b8b7a7c0901687ed3af065308046a0f875856a2e9acc68aa52241ec2904bfffeca174031ffc9588b394c9615de76b68e768b70ce710fb0748ce7cda1fe82c21ca2514aa2f9cc5f83f09848df35de6110aa00216428dcf99119f2a0aa19455db0057b402de314abfec1f73eb5a0b8bd60f11980b087e2803b30a4cf0ef6d39dd996b68ce01f0dd0c62252a98fcf0ea3b2df3080dfc9db52c19b3a3c1cdc1d265caceaa61c86fe0e13f44a14919e7cd18d588baea7ad8f49263a92072407369f1e2100423a9f95cc4520ac0d68e2e16a9943ebed872b313c8c1a5db11606a478cd4ed8b64bd30c0fedd108051f431864796a9ef2565b943bac31f713ee04bbcd81b419c124fece2f6625de91809dbe5db5c2e21c4b3b518c605fd07cec5bf36dc59be9d483f57609d3481b2f41033a51f1c76e4885404198499a06384f24308dc68a38ec44c255a65116108a1642b3d8ae3ae87a8a1c4f5fea75e17a0bd41da41f313ccc7adf251f3ea862d304ad3e66467957f1698220573b1a9b61af76f22aa77d5fad05347a61d7e4bfbadbb5daa3e68788d5544ac1b5a01e9ba7a0b4b6d36cee26445f13a6ec41fcc51cf7766a409ad30b22744b3c31543994197fdc989faae01721b932a224485db54f6dd53a5e5b7c6f64d04b34480771a0b051bbd562838665b2aa76e1cf3e3579b2d5eee016ee2bb4df8043a941859b0c9ac0b81fd2f48bd60273a4dfd8aa091d0162c29d7cf7a15832d750b6c554fc601aad4c1272076db8404487cd1647c000a0357a61c7ac45fd8de4c0f89b5d3553c3e013fe59d9f5b2f463a297c613f3b8eb9ffb6248ffc28be8f88af8fb057d7c65813b0435a9485beb1a124b7263382a5d79b690c3160c38e653da8ac39a8ab9f8b166731038243c0211f4546c1f80e01060523d475f23f77e7d4c64031f9c5358d37b7adb7d73f27d96b6484f4c64e2d66d0bc9ea0c7a26172dac7a6b5a788cc6e168a0ad022aab99cc5db798e2d6ae40f63bcd148a5ac9604c583c5080bace2f91adf31f2d1c83eec8209ed679c8bb6436739cd81c925ad43d4b3e021cb6ec6241fdfc7bbda69b8fdc0464fd2aa2cd6d776021be9fe590beb0f51c77942f799125680edb3a7aeb00c1a77c818ab84b65202b095365c07d3c4a65246c3c5042f35403c941818917f15374cdb70836285f326fc69d0ad79a41319b07dcf62b799e598223e2a41d11356c8c5858f509f31b5014dd60d7865ae6d6f8bf001d6bac8ae75118d44329c855911440f24d5628e7b9d04718fe95b46f250b83194ddcca805cda8b6b0a16fdc0cea4cdcb249001f94c8c7d6e1f0d08bea9e476c1bc35b40addea6f0d93db850612299524e00ae7bdb11bf69031920d5f059987aeb3fc6f2ddd540f4868eaaa0c3e19cd062b3b2635f469bde1faadc4e02f6616c62277f4edb7a9f51b634265cabdd5210dc30eb1706cc9e919e44cbe866eda602bcbb65b347643beb92d65989c4e77e885943f2fcfd49793360f40e4aab1c70a6a132073ce32e10d362b716c9727c3b627adddc2732ba117a7ca757aea16126d2b8b92db0ce860417755e0ec53b780a14ddb0645bd264df379f89e9ca440b3d44a73cbe70dd144652a49443e5f4e9b8b75bbc1975ffd36a0d0f89741a943482301fb869971b279567a03a6dae4d85a393b37c6a3da715732a79d15c375c0d64873ba79dcefb7acd45a24cc912ecbf4ff5830d4c832839342ea6640ff6df625e011a54456122648010a3197c4019fe75c0ff3ac4b459eeb465c23e8d5a86de0360e23fb4b585b8497710b54597416b652b4d6ca719b98c55cf5b260545f694708b006ecbca5347f1066454aa3f4c9b1f005b8c652aaf3595781f598673af45545f75f4951fee46e0dd66c54d2a1b3e803cb6091c792c1781c7f2a30d924f8aa61925f5699526152cdef0c58c00c49589bc6d5511842ef5dc9708374f5212b586556bab283d51eab636c54682c18ce0dd616a078462fbe12493dd8345c2eaaaf5e41b570ac4602add5a421eec6032cb0912fbae557d09b3ff68240df74d2ffba437f20c3a2973df67274ad470d05be7cd5e698d5b1848d3e7287649f50c072a3e080594680a9b5c0e32d460ea2488f6c02c09629cc310bc40ce0109c775544f6556bff058c2aeb64ed48d2d37aa3c8f896c9985f653823ea19ed0161668c8ea80a4d5f4547121fe4d022ec840a5207ac6e0948d3385de19ff3e4b95106e80d9e9a4247f5f40ab95b04f94d699422287c009619a646fd9f235fba4d607be4a5c22a95312820ceb19be4a936a85bab4766c8a381092ba242a558f3b6e0102e379227fe9d3a72941cca9ae3cdfcafa15a11bc00f19150b24247c24ce28be184f3e5bf38c170828c7f7f25f8e9718de382890f6ef821c9086e372dd6ad2388c64b654f5cd5ceeac2b7be5831e1f209c170c784f5960ba48720b661f3cf8a75f6030d4043a3c2a2ecc1ad388594d5c6539fe558ac4112cd48c958ce702875a052da5838ffe308acda0e24eb21b78a1fe443f7325f2e5b5564988eb3ab084abd6f8da1bb4102c7483714d265f03d44d7574a767407ddfa471b3f73e86c0b62d3186e30c40a628a39a2862fadda30b07024f2aa39271a064009d174d031da41433a3f3aad8d0b8e484f98e1ca2d3e1844ae5664c84dbc7b44758b40aabbea4406335861061a68eb36c03c9ae00444fcb547404a2a3a845e528a10ae2eff344022f58d15554a74d7023164345c578d592a590489d89dd1a15d9beedadc04b0b8e577d25dd6ea26f78853e7efa46974d415d1aee11428300651873e122d6e996b9767c226cf12adc5c128ed57ebeed6ca30a76989b48069c756667109f6ee110a0577669a433935361098cc0f386ac10ff3669a3dc2f8681bd7d312228c669acaacb2c5644442da88f8a5ac894cc19f596fd9d820f9a74c5353bb80018ae69d1a6b6ac24c8607b87cfffffdd1f3dda1f51011529ca91de381cd0ca49536a8f2596ffe62a2253ffbfa7e62fa30d0db2034c6f583d19f2462612a6ca644ae40001773a9e5a1a6ade3b77ac0f70126c1f7500f4601b465caaa7e2aee384a3819b19827d854849f7faa1ce86d68a16cab5a2847b7935dd432ccefa88ff844e6c38aa2143eabc627f03e62b0f796b9db13d0534b560afb10d09fb0921a4e84659da994361009a4b9bb46ef67b0db824c4f4feb26ce5b282e594f00592a1b6f26d9e38086bd756c3c0f4659940099b43b50962b15ec1b1ece30a780f5acaff1f644fd25260d050e65a0c672b8b3d983f4a6344c07a41dc88632bc00359c3db27ae8136cf6275df1a1b164b16d56f4fff342af38150673442cbd579bf23f1a64784135d2816115d0b6cd6dd5c1f9698417b61f1eeeed209dfd2862542f095bac5f5516116476fd32f9d5920f293505fdf9a0eb574c242c1afeed1c6992a911051289090cf2049485072d6551ab4d81cf3bbd00e568b3b555fbd60c3556d25795017eccfd7401fbafdacddc5c0262bf4b6588220fb0ef1888c2265a2bc53319af86d67f2d2856fb80fdf1326766ed7e9b7b578e388da1c7e460c11a70d16a1a980371aef98565d474d0ad60901f0144139226d7d7ed819f6acee72114081e19f24354811f1e1902d1b4e5ae6097ef48b21b015d763fef4fea0d54c0d943519f9ed3a386ee8d4f6998bdcdac73a6774af105603e108c732442de23b08f6e614524739dde943642c52d7de412c5c7036d4a4f87f5fdf1c78222c58d8f47a048e2af37467b311bc14048e9e6a350c72187b61b4e801fc6699477032d66c429649e8144a1b6833e5603778180216dd3a5333593fcb6175866a2509d133747437a30e14b1e82ee1faf48edc096578b10802ef60a85223c6e9c5661d4631be47317fa90abc9e1d2b47f194ebc63700c1d25e52fd7be4a1eb0e6adb7e418f1dbe4b45b7a91b654529d3bca2387214ea7653490e46becf04d6f35e75e5236c466ccde9b14f04e290f5554bac550db5a6c0d068b5639db71fde605e445bac7c6c3896894e4d060bc3339cd4cb18164a866f110849b4a31996bd86b8c3b7585bfa7a16298fe42142916fa0c98a8434a7c27655438894c34608f5d47292051fd0efa095ce392ce7376be50dd539d6abc6a096ec9e0b2b483dd4ae9b6d6523bd78546e89c0fd9842745f3f368331b70c54dfd072bac3f9f55a8b94759ca4d727047ec3a68934b8e3c1687d7d05aa1f3a06835e529b480d2f6a98b049748029d89181091ccd6d592757261377176ae36ab70eb01bf9e333a21ffd2bb2bf4c725ba182954063a1ef8478b06a379078dcdc41ac8c2129dfdfdcd0bc86c9d86dd976ef34f881636093dd9f11fbdd01c7ec9eb101fd0471cbfc396f94d913e7a007be4f1ca33ab666e4e985a8115c95c081db8d78a5921ae835783a9b067f1f49a90a209be6de6c1c13e8d86c69c180f28dbd3b58dffad4b88f6bec0440398c20136f03b29f0f17b939f3ed1801931f21577097f09d51c5d9fb7b5045086f2d15241a3ac56cc3608d6ec88835d2ca66abdf46be89ef91755e80adadd193618b7c035c3a495c378fa918e4dd58d3131b86376ee4d5ec07bcfdf408a2277f34ea5d9fb3f0b4f2bb73846e2fc99491dd805913ad1d91c382fc939a81292b8d9bb8f3e672666cfac793ac1ed8afded2231a181bf19a105028b69791daf66e367ef0b8fe73392b16e7278026019c88f52123b8d4716cdd3d0ba72b07d59c85844c76b0d1d0e4da635d94d845e54a33b797cc97d9fd4aba644649cd7194692613f68d080c863a011acc66063bc310550ba4192a703a2b266208feafe0de20ad29134fde2889baca398c196a34aba0aad0c1311438439c6d44400c7426f1a1f6453853ff43a1e82ab233346b02d7e1e960c5bb838259c4141d93eb688c3a38b7fb52aea6bede4d3a60c912e6a9eac2016ed820e1868b21d7fcbb04f4ad6fbdf92f43889d28c6971d74d428a7cda8df5f7a0c9cdb060a50d2d18ca428d1d84e62fd5ebb595ae903761d291f17173d5eb23f1a98874bf163cd7c418901441c2651868ab311de7cfc2629dc234cec5675b0aa5c2480cd1ad8c8488500f8fbd77fa63fdd70626d9c76e5be3905b363a57a7a70aebc9361aad513aa0412a000ed0481e2399cf853b903f64b14c62b9682482776a8040524d5d2abeebcd2286bad0e3a159cb5b2af18e12076b0f645f6a806f7f00ae5f282d6288ecc88baf90027c2f902fc5f9d3878323df58ca1f3ad18206033c85b8a6f95a3d0f23c85af4ee21d336b730af1d000c183a5986f3bac028b392433a6a382c67b5131b7520686e6616d0f79036ea12c460331d23084e530fc204714540a77e92a1856c5e3fb2612b26fbce292cacf8bbc91bc0e0a23ed0f2068690cf1a58a38e830f16a8f8838be51ac940e4103ec2cff27362fed8840cf548d60a39b11dd8940683f1bc5975fffd5a162354be185a820ffaeb7b01aff0d101c2c07a836165713fc30465adbea4c4f478056c1a9e5825b15dba6d8f75476243c42afebfbbd618dc003b707bec6ace13f43cdcf0a4e61e8e9cd3ec81874b5d66cce2bc811b385a97ccce9d4488d871d192b1a78078cdb300016ce087cbd20455d0d2f1da95c4ba57e645f4484ed1b42cd717cafd2bf1c9143d32a3b03d924e581f2ac2cbbc60830816c3c196a821082279581c47f7e514610165fe593445722b6e1b3727060d680fc200cdffde5dd6641e16571c7ac4a9866396def990a3fce48653246f293ca58b59683b772c7776b8c1b79547a1164bc61a3558a65c87165168c370dc2cae40edb97f62926fc7954067841391e40ba843bd12c31eb38b0c3d3a33106762802830c7637ade772d04d070a885343e8ecc1e45dc7070d56ca3c30d2ec023bd7bc30dac04d52c1b542135a902a43eccc6a845ec7840f1c70bb8e391841afcb5d2a47ebca062981e78d3bee080c018dc919828afaf613364ea5cf7e92019b202f0fa54aad6122cbc448289f005064955a93c054aaff908e86c7721833bda318b6afd990b5e688908b102a5a69e0ad02d422e5ac70517304cbef2f8e99adea293f2e65261554ad79a4508713fc5f068dba5c37d010245faa543fb334c6b2f00f313ff895975058e87ed6b68879a1ebdc00a616401c9a0f31f3a559164ba4ad4cc35edcb52d64e16e7aa9e016d011ebe6ec3e52639c3fec6aef0547eeeae37261c46404650f60f76dec10f7d38846b40841a77734db99eea73866c71663495fc80d4f9eeff890140dec5ab738d8abf450f6c900921377302798c1aa7f8e2c67fc60182212e04bcd0a43a030b773b3b8167172516ea490c58a991c4b6b734f644efc068b1a5262229384c1d81b108825450bcf2790a25675c2d3a251a146d77dddd07d0b3748b4dd6f6652142dc4b2d1f5c18cb6459dec91c6856bdf385a8ffa9df4921af747530c6bf39ad0ee093cff99801e85d1fd45507ccc6447da9f2ef261907df889de3ad710f5b6d66c0a50e1e7b68f215e8b58dc6c908a41a760df80c349605834110104901123ffb977e3813e5fe18f3c659dd7742c062589fac0cc0196010a522d594189b43d03404250309745beac98aa7c2b90ba5a744a985830f52381a9545bc5708868092592a6f67547e032c6168073339d5a99a288b2f1e1915ddaa09b8a1b0687a14150e91c46f83a7887ee6080520f842a07a12fb35b505364d500241a2b66df5c903c2867190d745ef2120808d1ec7c85d0d1181efd9dd298f22a68f81fc949e867d55342fadf4cf400df2127f0ce024c06d4d4fcb4b90e582154948cd6eb5d6bc3b9bf981142c8ccd58fa28239efc16a8515e63b4125e24ca395cb56daebf54052715b38c818e550a3c4f59200de7c413246a21901337a9a04805901e6d4e407594adcd9233bcd35e22f0edba606716e93376c017f30e347619743ee76636ca0e92a2818b4ff0391161161134d3c108fdca004f182895b72f1a40bd2ddff73db3ed057b8396a6ac0fb020267ad2642867a94ddff7b1efecf4f760013d9c95f6e60f66c2a21562dd35acc17ad53933d298cde2c7c524ce3071d0849b99cfa426d9a377f89125c85e9182dbb9fcaf978e7aca8a3998887a360df7cd767ada64e6f4fc501f38b4114d9d597ed7ba5f6d182bc1cdbfdf5e102e7c8ea314abd37ec4fe75625429069f51b7bc264387d2921563c2816704ad93f8d0e7c88ff2996b58e6fdb628ff259b61de303175c759074030cde4922792b5552d35b6dc142b09b8f8e9a10c4c98d619bf4e43d35b40bab7a2b2a3ca8261076b83f211c8175362c2f5abe839cd099ed007533f19bd263ed6036019c2bcbda19a4a94baead18efa1e1fb068e41ac03e410fe95fc0906bd5913aeb500819df567b7f998d34616ae8b7206403cc784394433be2a0d0662c598d4ddc5f186471c42b1ccd242dde6b0382aa59a4d543cb3c5e9cb1095cee9551ca959b19b9d04f2c3ae119b8f430137bac9735271ac0910d469432a162677dc475bca248801cc352ca370a2105d863e3a8ddee9ecdc05e9e7df4dae264c97d9a913186863e1b5c6b0de03c54d388fd0074800d80e695827a57e62a8d96b683aad8f176e0d9bd69862af890798218acb4a0c4c350e067ba0833b108ce28b2b18b05d9ac91964cda34d84a113d77cf92531d0a76dd1c1f0d2cc7676ac7ecb1a0c67fe2de123d0d6024dc943196c1231090a67330c4a6dc51e6411575878a295f1ff023729588e107e4c916d575d5759d4db461ec52b03a4bf628fbe9c9e5e7ee556af6a0ff2a3b68e5a73a54e20de1d6e49b964414a8bb2edb0d2d44e0a062c09453990c21593ed13e9098036ab2c2fb94021d0afeac547422421173f3c78efdea931b014a4080f4386ecf489a50a2033e816088a74d1130a5b1dd6785ce558119c5c4fb94b0ebd4011148cf67f570582442382800732db11d9e36030a1c81452a0885b18b62ad80f9234e3df9b10bcc098d11676dd8da02ec3d4b3dfce9b90d10a36274032137820ee25e80c91d63ecdf13dc1b860618ccc6d4d8a109a4f62348719570cfe5ef4707fa88aa446dc4c6c234d15dd6d2c49e34da1c320e7d63a24a07fc2b81137540d3416153b41d61bda30037b4d3aabc15ea90954260eb51e18286beeec682262fb4044f8fb6195154c3d81ef6549a9d9d964659afa3376d3b6720bd1423f09242e89b998432676a6420732bf0559647a24110de11e42ecaf1191e2a35a706884b8aa803533a69d9313faa03bf6bf4ce1ff088ca9af8d24abd7199a216403793c5484e02f8dd6ffe7b66e1fb423e7f2e1183bb8083ece1e0d96ba94ce9b8e4e53771f3af283f210b7e7f0c0f5333bd7608aad80f5c2f356a56258f13b4956ef0901c19f6932dede256711360bc54e16928c70668256b4ef8b20d447e3320a5b87f1b558d3b08563c6a54b171d43d1ba56522384849002b87d52798f200e3888775966857c9d7ec3870aa9297d2bb0bf626215d03f80353e666e9a225322fbe0f995e4907a65cc26b9f878b82a20aa47893a1a75177304d9d3dd2d9bdc1a9bffa2ddfd0dbb5519b42766f03809b66f595f3dcc7f117bf51b6adea38e0ecec6039d5c6f319595b0e1e07e33dea4c6abacbafda78317917f4a4544823fb97bd492ca96d8635714d1a78f638f9a3b21a7e6e30b530a9cea2e15deb62e49d47c9cfca7762a71313e855ec2d918c7239f16e2b97dd56c12d78646352a035d342c0743d6d8279b0aa70a8a69c6d0d7c798332cd5b91586f1df378da320c7a2b1a83f9c90d200c2489c05497983ce8b10bf48ca3beb15087202652f77d6c2cea20c8046a526210e40b2b4cc004b51e314864c1446326638289d48d61df2d65ba0d05bd25a02902c6e4f489619d8499318299d6a1fe27e897d9fb305d4e6652ef0f75c0a4c021b8a51f6b77599801fc51eaf6851279af931f74372304bbc6e20a922e71edd1b3d7bca2c8946bae05ef322d80d60fd41cd118fd030935b82fe6c87a57aa5b7d5e444b9b2c218d14ab6a96094caccb55c08b9050ca4ce1c420c0dca1e1d351655bcd174be40be7fcbc001a0a23bd7a5cb0d3048a342ac245b4ec0a3e3a62a006f6d2c85c0a0ea8189685453d6c4d6908018ac129732b4f7b519372eac969b58216571a50a9879796f35da1614648225da9881bb055895426dc70290ac60781da1e89612c088f214549008dfd788283826fb4154fd2df6fe39180c70d056fd8bba2f6b1d90adb139bfb03af1c4fbdd7781218cc44c1e63788e074d023389382278606dc7b061241acd429641e32b2f57bf4263f2786ac75639618e5f787db7bc4eeba5b23a238cc136d361b090e3b945270d00997bfe564d9a5cc0ab2636a1a2e5ba4ba0bc2e942b31998bb9299cf134a9aa4511315832989930f4aadbb380369c304644d8714bb3610e87e14dd84dd6d18ff56349fe3ff7592df47aa47e0409062f17cc00905e299f24f87c2e147023582183c0e3b800173953a5625014de2038646f525774904e10177a3916a9a61fc7fa0443dc313f90b2f65740f5019884d676302d8e8cc12c7d3dc4ac338bd390a927937b1aebb6861cf21e499d3b67ea12cc32b990306ab34ad4b35751358a840b0eb89724b9f39d542b814c33979e2d6253b1d3f7a9986262f7cd33d2908d0700e3a751556741fd64aac76af302d56323733538ad1f5138aebfba4cbe1648503c92a879215c7276b8e27ab1c1786b8287321e3eb2ef88715de8c361ef0224780c5e977ff0ec820f736d66371d15e59e842b420cf97e077412aee4fb9266d04c2c7fddc8be0d7a84eaa295c6a9e917ee3906193820bdd8d454e300296515c9c8043861badd6c9ec6f41e2ab35b7c283cbd1dca6d5e92a4f7ffeec9d0375d0221b24cb47030d32e6dd04744f01d73b983f123a585f5ccc2c92d4c6ef44dc76312e0abeef6f57b914dee80c2f8b77625f82f5312cce6b0a6304e4e4aa27b2aa121debd2bb812e82615a84856fb65ae33959c335ffe7e3452040caee4ad1b1e70273414acfb6033cb3ac6bd69491acab579f618c6db3461671b042f92e3340a8aa4080d82cf640ca72ff52ea529c27983634b00d203593e644f8be431af2e565db25434cd61efabc120370be0447df07d7ae8914c2126d8a51a3da7640e8c67fda5aff4458876f7807402cb0e2986460857f46ad43a105fc7cbfc11e00e5f4042d0b3b157e47d01cd40be9020ba5e6f38ce67b167f0ae6a38cba984bb1691f5970956e9a87e23182384ed46b384ea18a983e9939fbaa6f1980385ef98853e2966c01a79b634c5b44cafe4960d0bd762bcf389801cd1d93de658ab8ae5da6e2ef339f296a9704e205efc9d5827a0393dc308169a01bf410487bbe09cf1f6502d9c79540265eb743b5f94351dd0d25c26374d5a733f3548a463daf740f0e3b954391af33ade51e1a237d4a3de9fcf0de9dd87abfefdd549bd46d67304109ccf3cdb0a6672661ae1273aa326fc4aa959ec4307603437450fbf6fc8cdd7654376a117ae6bd3c0723822925735f2e09fca248101530202810e9af91df1784eeaf339fe684bdcf15d783991db1172053e8d5f905591f15cba6a46b7a2561fe5f015b0fc1accf8d6e410512e788a653ca0d6a26e6946880990d09c4f9102c2c9b156938ea580f8f309925f5d19a714039f00dc683bc319a88b5b4b158005a23e922bcc5a2c68193df6fe063e2a4a9f53e35cd3265e014c9d882ba68c21ecc8fc93145f3bfafdcc91789e40f863a8ed01868ebc7bd1672018d7bbca2131002bff60528f6fb8e9961cfc7d28f207caf901f14853369ad919c1bb964c7a7b9915f76717a78226d739c2b040b9d6d28508a066c9a40b5ad29a220452f62892c134a33e83a5c6f4157f7f7ce9d14697588190e20813dff9f155b33e9838592da6a53c70b4d03adb87685155da662bdc93b536dd044f781e9171cd99eb0f620e010286edd1672c689f9ee07ff42205b612be62bd6f988ca727196fd12eeaf333971e6817d8b2c0f4c8087c93307c8df38c87301b1acb6944f71f30dad4e027b54c41ee95e3b3c3ee2c38df28732bedcd06fea21afeba69ec0fb30abc633b6e5c8349d7f4a3cc0e19439a1278e4644bdb66071867da4546658c1fcced7d16fc8841821e82bba44314d3cdc31f9827f15c87b7f6b1296bfdaae934349ef39d8404b1060268edd767d43db111178d1985f507851f99d180e010fe2cb53d03ed48892944e660a2cb20c0a641f9c8c3bd3699ccbbc6cdb04f0a9f0d89c30ac6328d32621b00211d901c96edfc14ebfdbcef24371af7f292fee3105c4d4f1b0ffc22438e2f2e28f4d19c5210009f6628b7b7a1b728685c380c319955d3adc752919c3cfe8f597d1ea627a4f1ced37e9a6056bf6c24db3d0edd982e658e8b0158329c7851cbec060b434f5c4d05078cc8ce427a1339389d00367deea825d17d6b10ce41b1672672204b2e286a2d5b3f0b7b1b2c3aab39b20c3f7aa4357b80e888795609b27b5ab72eda9c40364fe1bfbb90cf212a4d64d875060483886547d34d133773c740c1d25c4b40c40a4fa57ec35eb99381ce4cfe5409ba1e0403b4db3f35bf6fa771d0020bcfcf1a073539714593a9ea520ba7c34d6cc050e226d533460dd69ade2eda974251a4a15d9ef20c9893835ce6bc7be3d8a88d57d05d45b90240675e11d66f7befc5baeb897d1138e8cc4a23d90faebe4085e4e7353779afbd06e570cac3cd87e979c371bdd368b75ab33157ba0daeb6c8189647e6d134d5e3502c1ef9e7b036a117662fcf0ff9bdc40b0faccb58189ef3291aebca83b7805359e26e8755706a3aeaad48bc42309579202fb0878c1d5fa88ae6a6b76c8a4064b7ce0edd81cc4499801634a5968cc49b39c24ed6899b54a53ea46ce4dca2371c71a20c733e3523a5f234ee2935209a892ac44e4641312626d39b9ecf5993fcc01e3f68920b3b2f29654c74ccb6743b65495c6df2a001bfcfb229fb682311369e0e24710982241974b184d098d7b02eaa72ae755a1487c39ab2d5ce1db9fa4cfa1299436d0f86054ee7b676bd363e8541db1dfc1f27eeaeb9fa84e487f678a6301ecaead4123171f2cc45f6e7ec4548e85aee4fe5f6bd05df02a2c2d263bbc2e52d50a5ce7d3981f88090ea92e248128249971a828a2c3c1de33ed8a154234e89926150f214ec9c51b7e936394d5ea64a3fb5fbfc51a2a601bb42e3330499619fd4eb736de8a9137a6cc1a917c8ffbf6d516a94524dfc91b1100cb1b179e374dae421eabf60abd094c068cdf9126c076b30879d37523a38b69f4b7ad6f0a6327f7191d9edee09a3b55c83375b8c8f6f77532b478985bbc5bbcfc7f7d301db8be60e96894d3b56aa31362a1e26546acc38302944e3615c7316c8ec5c6a986ab0301374604acb0fdd7c24a7255daed57d1a1f8f25a2b0544d824d9ca6dadaa1edf549510fa0511625722e48bf355a7343097d6d1d1543f3b5da12724884e6db483430c79824e1393fc051f8754c5f8b8f5c75f1d9320aca3635567b930a7e34494c97d97d128d8e0d1ac7cbd0585049fedb86b744cce93d55f422ac19cdf8f441d1135211f82b05cfa65ef8a62b4bb10cf526f91d915a53292d1fac85662c51939d91c8ba5d440d33cca639091a3225df41344ba9dae802500b0004221cfa1cc9478ff0920546c1ba95074aeb9be71498f934dd7f245e525ddb4764a996eb8b0918bd3f0d6c4f8299a154d0cc5cb9470452761cb1d252fefc08fc57b1c91785ca77e3e716cf526991b06a8ccd0631564c75b2a99b06da35c08bb016f6370b13da1a7c89e57f57c815aa0dfb4473805d005581459d114b88f90759a814b012bb2e7719d76ed931d682fe24a61d81c118237d9f741bf5e44e405c39174419d6bba2d0ac3646ed68ae39b8f45a36caa7cb8413b1f3521b68a382d50d8aaa3c063bfe4793120539c7fa3689130a2e24e04c05d72614b4144d48530c853d720269bb986a8c069597bbfbbc4ef0534960823d9e50fda2c90d48707276b6db361566b348e828c64698f5af7dc191236538131a3628db39b9d77ee90f2bc60cf1e6a1127f3fc70939a2bded60c76b232f1156049e33434cc8d3df97a98d51956c66a675edc9d1e00e6cffbd12c2dde7a7874105f4e21ad5973f6a1d360b1adb82a1575dfa7158ef5db657c7b346054ecfdda1c1bd5ee6bf94c29612287b4a9184f88cd19b9d7e77fcabdd3d61d698ae9e0705662739bd5c5dd6f1f5a0b8e0cb8118f74bf4f31bcbea4c0c0777aa33fd6f1c4dad4722f42b809f451494adf3cb0aa74c60f9bc63aaa95556b9ff9cc577a48a937b6d862caa48c6920db0298b7c793eb95722c4bd4c3d1765fc582ed872642da68fc53edf2710224dae5b826942619812be990e36942ab6f990b8e29c14a318c0189dcbb5097002c4b09befae8237b86ffe3b516f49724aa92a01826286a591d89ca629d556e60af8e6d904de5908c143e559bb73a1e46b6e9763addbb92853c1800514b0c642a899e34106107d7824ccf737d5d83a0721744345741c6aa0ec455bc28e61fd4c0ea7202b24afd9793e81f47882996b4008bf44ad47805da7c784de4223a62ab74135194c652eb5cebb030bd8a3e2c3ab9cc2b6680c266ea5f67afe92b8aa9574785064a588aac7a49d5b2dcbe93a02ddc66369871230b86869a3e8a6504f9e3aef24026b0027c2c843909d54bcdde768e53ced31c6a5aa9bc2218372f5ea4121db4bc230d09f1a80e8f7fac0e686e4df6998d73b89a392dfc99eace2788a81224785cdb51aca56a6a5ce20e73d70caa9d8ac801ce54cd0fd12f09e6c575deb96b6346fe05b2c9d3e74c714bfb74a4798eb18222ea64d57be5ad9076b0e65280399dd657f577b46d9da7f4d2976085206a14e06090cbd5664007aeecf811cd7fcbd558ef0dcb03294b7e0c306a8a129586e26b3b5fdd290c3f2edb3ed286522a9660caa050322e52150da81965144388e7ecb17d56fb55b64e6682aa19752c851919641464147a1d731ae8047db5ef91899e89d2122c47a79d498a2b2831b0c16521d26978adb62842c720927da3281522f05452f7cc26ee3809a068c1be73ed44163316b633330bd203aa7dbacd115aad15a502c9fed819dcc0fff18733151c174bfaae7c2b3b01aba9a50ffd925ad7568781cf5a918bb45368e49bb9d44f068f826d863f64320a328e28929a00f0195ccfa7c4c07a900c2f06af753ca5598b36256ba0bf07c0908fe18fd044b02f429bd60f4b11765245147bd50bba524d934ac0fad105e41d292520e0c988fc110e9ff7b01847a963454290f3541fff2480115830b122b30f8e29cd8f8d1ab3945e74967b86ee715c7491253f9546125615c25b496ab831a3a92c19d275ef9e60652e61bfe2c5720592ab964df979e764d3dc6689fc4fbf4233ddeed349a7a0406d1cb2486db6f93e30b17934cf270182790f25ba3d7299e5f008fc498de2f6114939f17c9b6190a210064b8315d6a878a40dbb8726d60eef43aefd818b73b0d519decc8458407da80f332346f1038c10b0901734603a7e8851d1eb88d75cc1d5d99bf999efad16a77723d30da2b5163c0892346993d52a8595c4da6d1b3207bcbe27ba130212ba2e3ff24500c296b3d6023a0eb6affc3387b0e4cb39358f406593fe644b585ff5daaa56577e8d3909ab668ee4e1c56aa3fd3f1a0ad94825340a6f1d0168ab78f56636867a47f8be4e18ce170eece7bdbdb7fc85fc796993019e2cebc75be86547ba6ddf16166a64a034e95eaace59aadd3194b4d24d5a917bbad33696a05aa476280770484d6c6b9c759e2b0bacd2a6baf4a3f199e4f2f3b1f16977ad129187909569c27f519edc3cfa395fed4d8742fee438712004e7b187b3e36a90e60678bf3ffc05c72a663f8ddc0ebea6918a436316a7f2a95aacd3fb7e4fe9494c4b912ef049171f19f9eef291ff858e590f26c3f381edf830aed408acfb7bcd28eb92c90f418c1bcfe805cfb9fb65981738c04793697c8a312fc879bd0c6ad2992c35deda102ce892a2e2a72f691f1017617307719ddb976ebf41bd73a2de3955e72f4ac4d2e0d5f87ec65061d75ca20ef3507ef3f6248a62b082b1638bb80b4fa1dc74ead97fce17c8d58f4e22fd9485042d01244a0f9880f7cfa6de42eda1ab40c1fbfde9e4b3af9a66c0a72b83da81657d706c7a2458c4a301e564007ef0fa8d91faf4d3a8943e327d2f73569f23e5c721292b378a50941255caceb1c3236c929e80684363d698b6e2d4b380fe80afb20853605006b17a1efd196234bd019272f9bb22c40d36c2813cc9cff0bf871dbcebeea487dc2a8bc13218faf7017e904ef10c80c3668744fa0dd491a05771fe524574b4893612c20d9bb5544f1da922d35299a8b68c251939df99ac55417f4cd01aa395531d8e2de69b8c3d277988d7031fc2d9419f3d743d9ff7ff423c3c3251ffeb34f0998c1933cf6a3f73cecead3a4d8420188076d5f0ed7a1697334102234ca627506be6280137f26974ff3e9346e22175cb5fba84359e09a0dffc1a2584f64491075821a85b4e65fcf2d2095c31889612b09ab0025ba7965625d9063c49c60c6986b93423f5494f5636737792f483dec0adbfa8ebce49013170a471ceda139bc9216dcbac87cf0164c3fd966b6026098bb1ec07e400412a4dbf1a826031cd34e634fd4ba9963179d9b0f23d33c778de5241af310698689dc0caf6f53347f62e6aba4910c360074d5e91401372478d3467981167d5981ff34b92a5d57484bdf9ffb48f07ee2a6f751b28f31bcdd543f76a5586074f37237d16d261ad254529f69e9cd0395cb0498f8df800dde30a366ef53ec00ee1b6e2c130c031fdd6f0edf6a7f9719686e6428204ea0dcfa2428dbfed8ba7bc3a1331aba46ca427e9550f103e114967fd7bdd67e1dedb633023d048bceaae3d17adcc627a8a680d736186bbd088d2d0604ef8c106cba77313d77794ff4a23d86ae7090a6ac82e9bfeb08d4016e5e7dc99c3f22395c8aac61842338d6b231645846c3567f7a8f1e0bc1d1e39133d9bd55756c7763c7275432ba38c91b9317e45cfcec53b7b3b7865235659296b4447e8e87b65040c4a992f7ef8adb3dee6c58362f59d6e3934a05bdf94d5b03c0cd3adc684eb8698aa7b6a9331318fc470210e849a202bd56761a015d9942410310ad0f7fbce9fed81bdfc603e1825df69f9cc855fe4f95e623fa3c53accdeb0a239140fbdcddf20d96bdd64d6a387e99ab0ead06891ffb1c68ffcc48ed15385a899da0560bc09e937e463fafb02fa05e1a4ebfdfe0cac982e8ff33f37129ef16936e28a799a5d055dcc73d9dc33d0b5af25150008001a4a2a1b039f7c1fb5967604e5e30517cc1a9614809d8bc294386c7e65775240984938a72026ded120dd8837d792a94a3b709dccba8425769b68ccd007a191918d4942860ec976efa6f486525ee2bbbd39802f48c8a12a58c8ee4bcd20e2cf5e985e0b25f78f05e9110474bc59e8580e33f4accd8cebfb202de02dc9b7af31398ef37c14d7feb1ec042362cdfef917f84c50aba2d973c6ab9267cef18f7dd02a373887908febeeed15896f0b82002f557e0a86eb3d7b9ff8483568a374560e92cf764eb4489242a02b8494b60053854040eb0496d17cc77e2655751651fd8d764767bc90c3e5093403eff182657692a1d1affe2f8f76621c3b67b7e872e469fe9a7864125660726c735a932c643ed17781f4d432343b7f5e5c399f50616baff56f6290c430ed4d64b327ff09443f3300276804dc035ec0ec77de4572b1fb9af42e8dec758e55c8063e9f0387e24a738c1f59b52a1dfbfc5b8fc2ff3a237f55b0f2ae75256bd8c35df241915995153648ded9ae2de762c771c353045766b4b71a0c0e602644c63ca0a65cd4bf55e981871ebd20a9c7816fefb062ad7518da925b7d0355a36510fa465cba2bf2a395c67d386c74a60492b0151aa029d86b6db34448b2aea48c8dff5a5635d4775637bb08e2671f3d671ddb9f564088defa68a7933ec7364ceceee7511466c8a5521fa333d5e89f9708598c68fe019d564503b3b784815da582318693604f223e54575c6bcfbb24543cce598f4d62b0c8209b8d61d186a03c3af996878d4d409f69876833f83fd74b8266a009e9db2da72b79335811fd253b58c56c3e2f2d778d06f912a3e40c3a3b32b55e5dd5a35e5f1d42ee1f2a62e22b402fd1575b525ff43df7e4d05d271e55e371e294a96c529f030df5b7a18f83618a993255cb6e5a62fd5b24e6817c118d9405d2d6b3a2ea72c00e06db9a740a7e6a0194086afe1e97e11a62589aa2d5fd562ba68be1241ae0bf5006674ff7e53a71c8c922224cb1ac21b2753d22a05b9b03265d062b784fd91e439a9c24a0bb24d3c83344646a985fd1fe13eac80808f2cfb61063c96cd6d294499d1bad422639881646eb0796db062883310af834218205d5fcd505a70e72e929b090305eb94c6e51366e00f14a34e21ce3ad1d7f227a1598e8909f7758c9d9e3fbd8df3257513aa3ed6a9d39125ae960a7e548c1280e0f5a752cc990b022863116b333efad824f1c546ecad4c7fa7895f671f563afece933246dc52a5a5cc8488e7ab1ea9a87bff4e1b66100c092a1a3fc4339fc9118cc798e354c77d0db94d876791c03ed990fab932220a7da115ad072b24c407d98f08f309eba7e410092a567e787c003a4e49e3eff57de3403563706925a3e2d76f8d558a8cd143b8fdbc40635b71fe8eb3a2133deef7526897eb576ed0b3758c3e96393ce7c6fa41ba23091c0f46a3dafa1176f642b65c6d0c41b1479cce8f2f0060214e178d9d3b1c23e2aa5f91b4c4989362138757053b1f3f5afc7a9d0f4bcd2a2df2a7ef4da67e64f08de3de7745d1352ae843e2c09641f2453188f5a49ab19f20310bc9129a0c50ab77123cd518a26a42f451e388bf711defa3c01867dfcb001f6bb841869addca4303a3dbb559626d1f5c03a643d0bf4062ca5b688ebe8dcdef0a2ead37330f27e4fb144bbad180d0b59cf65018efdab8e4525ae7a46e296ae4d939fb538606a262cec920b0ecddfe2ba2c12443f4e0acfb8d7fd1c13f497919556d128e15d29b113b85cd3f00515b8cdcaf9ca7bcf4e6ae38d0afd97d4894f3f5feedfd6c7845d978e6660d8f47e52f07f4113c6ea7549e29fc1f7293168d8791e35abd8e7210e635ee8a1d698a8d713389c1ac5687d07dd0b8801a3c8cc78d535c7ffb13a9635274c3d2c65c9f8b9ef6de853efc44315c673f303ff781fc7e5f7dee3bdf7a47a804979dcac31e7e06d611a62c20a510745ec94eef8e375a55e1e442b147098d8251b6cba636353291d07d9a6394eb20eab30ccf970346f4005f3f1595930c3f2edffe865d8b1378a805725662a0ce528ca676aceb8da91da7ec1a4bd2a970e432c880152409db26ff3e1b87fcf7bdff75e6a8f8c32317d6728495da1226f102f3b1b471de038f30f245a9bb3a7e40acd85600d4249b964368fa92f20a2eafd2a566fc7dc90e7c2e3d48371438c33c4c19b0557e1a34848c18c07f945c136d7ff270c904e0ed2711bf9ee9a36f5edb618da83753e09a5aa61eb5516cb897a4a794833db3667252f93b0ea528d59d85c0448a9ee9e79ea26923902cf4240c684ad8ce8703b429acb3a1fc0500381a914ace0a0fad8b8f4acc2a41c2dac0b5b42617dfc736e44cc3cdadc52704b17ed13224e2764f3e5b6c5d1b4b82eeba9d95f5caa9a087a45c9dbf90a8c5c0ead2d0e8b09cea9a3ffb7bfc65e2329be97b0f5ee5cf17df95ff6a9b1c6219c7304f96f6eac7059140f9fdb382cd72871cd9bd8dec2851677a24feb637e3d809c009494bf1a6b9417989a4adba25a3327ac0413de28bc327c162a4cead1e0363c9b96aa9c5d2d378271cfa766b6800bc597284cc30c5867bec221bb0e088f61ec0ca10d168b5e3201e7439b5d65166ab65e3d2e85d6289e1bef0f7f73c369600bbc134d0dd6d996049ee2ddb6c560ac206c067635ae9d32cfbe2d30951b391f9ca67173f9bc64ebf0fe27e1ba58a3d4f99eeff2d269ae0b2c94c3025bfaf8616c2b99498775fea520a2d7f12069c3dff1125b4fae4bf32ba85bad444a51d705c5a31972f29e8b8bccfb268274ab64dd912da20c2ace18794edda75dcd03eb366b04cd37e0f5fc1e5a8f941fabf5cbf5d25cad1735d761a6e576b723046f976fc68ecc86955f19b9298c58887c97dbc9bb437146d5e6be7e7dd57a3a819110a252fa0137a225771280d3acb9d2e45f92fddc10e674c4233c374a8902f44282537b716571ec93402bea9e6f60e3f375f1b01e91bd453277af9bd4adb1bfce2befbdba7f00fae86434d5b3593d3bd5b3af3ada6aabab5a8daad5545f4d95d554ad0657b3c506573da29ae43585c2a99f6f348a26f9d6ec8bbbb38aae074b72afe9856d338992969c2af8f62243ba36b5f753bfb3ab885137d5a0859526a9f30cc5800e397d81d9b757b5f42f5185c2082db8e9f14652631044cba96c0ea14d64a0565ba40e35549a48f6111b49c20f232b9bc8d11cd06b7632ddd2d4fa10ab7cc7636c5fa07539d77be0525cad932a5e609587459ea8c59bfa5f562040a42db8d0b203359c8f8ad1d56ac2aa14044b5908e68911a62caabc2187175d29d79dc651397cd652cebd64d89717436e02e5a285a7c9cb600fd3471c944d2a931ba0660a0ae99374e6f0120f8f27d9836f346436ceccbcf563d72b4a82e7812521b5c729a1a36d4fcfd9b1692dfc7ca814016ff22630857084abb2a32f42f82aac609766e5d327d9296999ec88d6a3529d2d5ce19f88c139226cad416c3215ac37f0f532cbda854f667d3b1233f5c5491655f697d2d94eaa9c17e6435b7db171fcc163c4627b27fe0c53abbb33489622bc10f0e9988808fe54264553e66a18da8b79066d61d71e2b4c271de8098d902b483432ad55a3945531b8055f33decaf6cc3f7aefd5e58109264687fa6e2ef437ee3f6e1973d390d14ec7095a39067e160e714e49cf8dda4d78b0360012add8702f547dcfc49717ecce915e0296d024579293eb2544cfc1b1347c8b1ece5ca317c3a515bec7d78459ceb933241afde4106ef4d9a51e953a8784291fffb4dd2f5490f4cd9561ed141de4417814a8da162ad704f04702a0342c3de8a66e4e34b16d73f621a68179bb14f3c01a74513f56a5171e7bf48ea41e075ecd2a4560985945f838b7163d6b7a580efaf66285ad8e2841abd41b88bef11d5862bfe01db3cb160135675ad3134aaed49bdd3d5dedb792f19931e8727b7ea5ae51667e070ac6baaff0324cd61280b77dc59c0c20c822064e47e69d42f82bea6f34adec727c2590236cefb6e3a03ee7979ad6006f0d1273f3f5b68143c0c5bd3ae74bcff9ad9dc41524b78af9655a9784137c473bf0ba61f83d8e3763891b1de00f78e55a5ea143c52721b8075263fac38c6386b5a95cf584d7f176809900974de17e0c97f48b1896066209e81eda595c191c1588c9462e2a3764fba63647df89ba29971c2f7d6342abb350b8c3c9177a01b17ff07af8026cf3c95478b7a120836408007535839b6d63bb93c6f3fe6ef6eb2442f1236719e3071acf94c356bba543011fbe7fa264fc50ff1661eef1ac10f53f2a7e8c0c1937861b3546dd0ad8df6a67eca217f38822618172d3f502800ecb00a0433068262bea76cc70119ffe82a793b9c869c60d84aed3263357213b9d0a18177542b9fd69c2a1de853e0b1ec524d6fe29cc440d68090d57410c80f243714091d04523cf4e27ee86e849d64ef3e552fc6111b54457d8801c76ed8d5d6d00d7eced9b3c4ed785b077b59573b55fc2ffb62e10933c92b40c00c775c9974e2e0eb2864fe88df5be5a320380ded60f128493073730982e1cca10499c018027510b446eb29d401289d7509460843e0300db98005ccd732842ef02d0f4204934009c276b11e4795e535bf25e354a03402ffda36cae42bcf0dc9adea024f111440d00f7767ebf1457996b7003f6233a2452fe00805bc4f6927a62827688eb7d4c42c8750d00c42ec27346f409dc74f508b9e4c4ee95c6dcd087e808e8eaba13e8eb721f8809462f54bd8cdd08f4e97211c416a3b743bd846e75f408b9886233a21ea33b213d426e5a570f815ed7dc5c2c8ae7e4caa3aef7bbb483ecbd54b2d97f678a5cac54cd32237257ecbbd07dc2b87e2368aff5b9be888e7bf4e4777200fcb6241533368b0eae7d996bae9b0015199b71ab0a89f07f1263b3dca3599a410c1d3e71d419037a033a685b30ce3a4e070b59074cc0e3e848709951154ccf3712b0989043cf643a6f7df9b157f90072834d765048b67a20045739c51c0f80cc478fdb3490cc46cb7f5dcb5ccc0993ea5f1b4160bfdeb78afecd4ff94dba91dd6d4bb9654a32c98206b206580649ee2223f2903d46b2c6883d3a069183a431e20e47d696e4aee691df4991073752d216cef952f636bf6683a6dc66a8d65ad49330523cdae90919281d9049f6648c2625d5ea889823633c9b84097746a883f2a402956478427dced03822281b082bc02a941f7ec8a8410142a8cc0c0a1353ca0082420510194650b2708d01c185456c1e2b8392d4c40ccc4c4cb6e20dab55ad702a153252806e68556037b85116648510f66f9405c96cec606fdc280b22c1175be34659d0149c1e2ccd8db2a0232e449901134be3465994299e8802e6156596643603d5ab545da5dbc718638cbd834629bfbb35d8ddb25b7a4fdfa4942d65abac9472fa26a594f20acb2f3b76475a8384ea5ff5af52a1bae8e5832421cf846ec5a7db6ca6dbaa44613bb8969c2387169338202b9deaee4e65bb777b5c1614e6f7b743b2e2f634622c3fed565da9834236bab1dbbbeb5742b79eaee66aebf6123867a94ef7766f5b234ffd06bbc12859ce7df59beeee7403277b6cf7be01e491c69d56ceabe03c0ce761384f526b0a3589bb1f85319b71955641c3d03034496d5addbd3a478fc2383aaa3eb92a362eccc66d61b82d49a5497cc620ba474ef2560db9fe1d650e15af2b65ecea3723b6e673df6c9f1bad9ee9e41149a8e88daa0be8a8469bad74943003c86c76fa307aa99536a51b9dde25c423af0299cdb6b9d1ca954cbdc2f9d98ba8c808e6020aa2ad62b01d3a25d0e4c8696f6f0b86dfddd2b5f960ddf4f24db5fb25970139c914b7ed683b9a51b952e78d5989e1b172ee6c7146e3571110900b4825792a8ecc399acd80ece0689292a88accac4b6058c1190593aa8480eca1710103013957a5ebe8e87252194ef2d604e8ef883b66083131005541a6200b51cd7f359d38c4e02ac7d59b238bba51f6a4cb0d152bd020c89e6e943de1c105d993a19b2bace946d993186c043d69210cdb37ca9e045dd613204a7358393e47e644e886af1384fba3bac8c54b6c46ab39ec15942484646bd4313d36a3d5602fa22223a1241366f1e38ce93937075191915010908b5663cd1ec5603b74fe7fb6c2f94a5464047be5c8a02021a114684060309d195b5cbf5eaba28e2e16aa31508d5db5a4201126630c003f23a4992a236c7fc8307e4923a36e853b2ef7b04b02e1a020b51a52ad846e31d8be75f092399a590d1a9678e168b06258493845dbc04802ad6a124e829c80522403283eb4191018515e499a3491245b1285894f13b31f4e82e857552b1c59932a9d0c2b0d70b0f44659932931b0db8db2264e70a858bf51d6040847d6c4f58349928cc90e329714d76f9431c9413e91137cfa7dfcab6516b346f0a92cfe1cf2e795204d8c084062cc0690eda78b819ac78868d52d7efa9db17c650e57b710908ac1ea4816f373208ac0ec3a812f2761970b979dd8186c9c407431c70bcbed35cfc0cccccc926d151b3fc2cac41c48d8b0ca78038c0d2b2b876479d081f499d332b1515ea1f228639432ca18e57bcf3943d575e9a0ed335d01628b75363063c321aaeb39c81d996357aff36f84c58eaed5dad5eadf6df8e5f7e083209ccb56ee843afcfc1dc89dca5f2ebf4e8ecb2e2fba883961cd8c4cf33f17b69bd6b5ccd8d8059d90b613d28d246c7882e2841312f7e02b691d952b9ffdf9bba0e69927a4ef94245d9d2b89fb5bc9858d267e1ff28bd8340b40f2927442d2c2cadbb45a6b667ea5eb4027cfc573f15b3c17afc593019d3c999f9f9f2b705401836355d32f0b0076eb77d2eb8eb17b6f0e2915014a95b1b1f41c6329a25ef706ec7693afc73d85cd1863e4188b08ddf8d526b672dda9d6d52676ebbe1f7b84856489b160120ed793b137b41b3129c4af1963e390f8ddd024abded424abd6269692c1210547c551746b0eb7d6702b8dcd97c8539bb8368a5b6d6470eba762d626166b9e1b1a2dc451d934146f6837b41b316c13639b18d35c7e0a26eed0223fadc99d23b923916cba441ef0a8e31113b7be67f2e1b9fda4140ca5d11aac06f6ba1d582685a2b0668c9df3039324ab7e34f994401c2ec9aaf5db3444021b8249b73e980496a97f7353bbf3534529231ba4c8c374e7db7c619344230aaa863b3ff2dcd062abfe7c3a8b3c4a773eea1579a4ee9c3631fa44e4c1017433c5ade0d1addf997ce697c48635b0afd908c8960bc0a353ed54bbf5e6865603bbf54651b7eab796b0e109e94b62c321a50f6fd41a309f59b0e109e9d63f1dc91dfefaa79adc297dfdd318b9d3cdeab5f12259f5dbe453026d629255bfb389b5c0e00062770abbf5656dabcfb56ed5bf51bb95766be5409b58b7eae300baf5439bd8ad8f034800301a46323e5c3df91e0c36f4dbf705736e93a5c7b887048b7099aeb7d90305eee1600a49dd994e718b21352b906ab293a4c03df80892a8a39b3b76b96abc60d9a8e6259c34f6c23d2450cbf9c59e8d68cbb2156d5ac24de8f6c605acb61da98db1b222c26abcf8ddec326330d80c06bbd1840d1906b315569170b6d51091870d441cd125f2b08b5f4cdc965de4c8de272f954a25f9b9d88692577bb05d7b8879378cf022774eb31a30d80d42aebd5ef4e793407f82b15b24d4afd1820db9d6854fbf223b90b07d058bd4dfbe08fdf99de7d51eec8cd900323f5e1228c0994e28b2813420ddaaa61ffea157d3efe04f4d3e26100ce597240af37acf799ec94783ebbd0fc952441e663a13ac481231369d9e3f66374dd9e924a57b394c1dac082c9ab9fd5d8db77d8ca508f7e01a220737441d4d43890d676c1ec99d9d499b62666dc6e60c8b29e28e0ce2cee9fb99cc107eb28a5edcfe2e5563f2397d8d2904556a469c21fbc4b0e6e118c456bf1515568b3aec11b193e963d710ee3123072e2caed795b81b2ebf222bce16441e9e2b2b62b713b1adc60bb636794bb2812c1a6c3863b1e965c624abaf7f10b656f7a2db3358f34c24b8d5bfc40cc3b32905d3a62ceae8f76170c6b81673971b910dbe004905c814518592203346b8a664c9c23221d73ddd286bc106da3fe044b13537ca88927220ca8285a4305e6408e30619b6184386277e84d0d1c288f885099424f9f142c40310d4cced235e2bcc2b601c91ba82e3d8dddd398edddd372d518ce04a37ca5e4a4e4c628dab9cacc78b2468b52988b8d84283b8c0729d7d480c3df2ebafd33c15a00224061051829270e14da6e0ae2341c30c666050a2891588e8f10722779cc975d91016f3bad764433fdc9a1b6543586e689f88b756b5c251592a536665d81044650a229ad028766555d69eac8ab37243fb7ee639f725cab8eeeeeee5663a516207f72f355cdfdc9510bafeaccff9ef64f888ac3882a50a3346e040a12cc165892f5e7784124f1c684ad1a185239860e1599ff3efeeeebe649b39cfca614508ee734c37ca5e526ef83af6055ce58e3ca1031544457c09e3c9f5b72b3fd2dd28cb017643fbbd25ce26171d909045e142c5174eae7ceb27a8e9e10a253308cd10c40d4d8c2061e21a2253c395265698cc7a05fc2a094996641790092904290108057c4c1d254a7ed860454c0b32b0a20b25e8122d9650424b1317866600a340579ea1c58ab66809e20c555224e5878924221f5c3a501682bc5e4dc490e206228e7a7e6c7831850729922c49daa227c9cd400c5bd8100692162f30e9a148ae7c137c263560720510191c6880814a0f5de1b519c11aa822082a5e6a98628917f4d02337b4cc2b74d1e9821461fedd923ed465831559ba28f262062a38f450d795af23615b7cd15ff4172e868bd15dbacb9225bf44c75a51818b2197c8aff26d77d902830bccb0b0822d92c010a2c7b733d7bf30495abdb5aa158eca4e1fe3ba5d5995b5578640824c0d4cb03431549b1dd18230567645c94a66a5e8dadc28bb1285abe44adc5d055cae3333b3d7e5faa6a58910588c102207bacd000871e964425fa877a34cc8e8a26e9409e55063ad0914cd959334b5b757ea3877ddf8dfe017ee08736ee42a4853a3dbbb7d96366ed28ca99563a4dcd63d57d476cb7df226a7773e58fead56dab6c6a6756b26511d1096df4fbebd13ddaeb56df79e1e4d0c96bfddbd51d6bf86aee60873b3e608c7ee6ef7766f49378fa608cbef1dbba34fef76d0bbbddbeb16a3494c5319639c2fb0fc1e9b6060f94d4d587ef776efd20989b9954a3fe96a55ebbce9b5a425d64ca7da095543d90b02b73473cee749435333e79ca0370d4533a36b34352a9be99d98aed6a96674361c4d616ad13a792d7e8b319d74963b5de9b7ba5ab567e2e62fb11f136b8a80eca16077825a6bdddc4fa88af29c23cb4350277b11f76f18ad615353d0899aa49cbb4bb1a9a33b61f951b6c6a66bbc8f898d33da67dcb66d7e0785e5d7f996d830c7956f43c3754e709dbe1374a227bc8bc2f273a5d93443c45a58a2c18f5581813304050aec8c1b655364656c219ac2c30b53846e68bf8a294055c2b041864ddd28933285cbda1b655298b0e184ad37caa474912225881448c982450a91064b2c77a34cca952e6649b4a4dbb4dba1e4c7520d8de56e6c9e1d22107b2ca594a2e69c3ddbbb7ef4badc7167ffc2ead3bc5d973b21cc3bfb9aed9f6dcdf3555e95910dfdf6ab7490501a95c45fa34e73ce69e24fde28776cd7ca57005304e082adcf85eed3fe799452eacd8e4b52adc086aeca721364932e7f61bd2d2db665023be717d64bbb2ed5ab1bd3b51b39e041341ad78e2e83d281ba95d4474749e4ce76e5df741977c91df63e9a48636c0195c5dd1a2d1d4a3b29b65bc4b47eacc1b1c50c867d74a513491475c8977595850dbbc63d1e6595f5c401b871654f687325f823072691151bfc910394c841bca1dfdb45ec5ad48dab4f6badb5d26df29032eaf0e294e3ea73dc9c1cc7711cc7f5ca9f1e3d4a358141a6ddddddbdddddddddbfea84bb5c2ed7aba7df933bb1b76d7e7f3debb24d3e5d258bddbb6b7504de392b9cdf2475aa923b12708feaaf70a86755d34d1cf538ba334d3e5ca55f3581912527a7f9e3af985230469a0574f145344dcffa363fbf324786ab5b6ff717a459169adce19760e40ed7648f6ce18652cca59274bf1b6554c05c2a5c2e8e1b652f107161c0726530cc70f91b8cec5a8fb15158399b31100af36f288b6e9b1ee02f1f1563097a121b0e51d500f0609928b6f839225d8e30d7d0e58f32e8c6a1a8835fe5820d79c8ef50e4118780be673ecf2079e6739460648be3c797859a5fb313d8e7bfb60436b4b739c81be9468e1ff6cc67f40815624aae1b3b5980fad1b44a0559117c3cce4a06cb8143f31d75e6cc19333d0e8a6005df401b12d828b8813bd8e8995f83b55b2cdba34430042224720e21fc2c3a9fc8f6610a377ea0c69ddfc56f0423b7d65a6b0589d0dfc0972c3009ebe00c234864fb9041d03f816cffc5e77a4190080587fa37f09b274a4fb6e444d2c5e6e11c39382a1b0bd0baf1b90f6d8d213ad7040a21d21fd2ff40dfa1f9f19690f81731d2e33f3f103891feb003e9b7c907080bdce3bd8704491115ce0811c516629051c6991eff1f233d0efed4f7c0e7de47dfd21702b91ca802f72089677a806af40c6de012ffe9fef3e7c7c122a52b359ca0ca0b427479f5a810694465fc8019e302333bf4c4fef989b1259be9f4c1bd2f085bf3f265e9e507b11ffbd4288e75f9517f7a1afb1dea8b261f14ae35c101f1a2c022d7823affadc086b116c4822710059a50b8a8d2fb906ffa7eba6882405702db54d3f9171aa129bd2d8121908bfa79d303ea34814862b7d8f480fa3d5df7fc85356421432ae8f4ecc0df7dfcddc44863258b4107eb4b5669015d94913b36eaf35770015d94895c70d872f9b9c25cae5b17d04599d7f15681b9c9bdacb8503648a845faeb0d520d24367e579fd822799220a1cf9f32ea3a30e4cdfb22af2bbb9662c14e97a61f918a4b4121f52b12c588810a570837174543b2b10601ae27c89c1fa68cba22af3ba46b42e4f3b591f2db77deb701d9e2edabd70b5265c68d439420e886a998f377150a1ba68cea07699ecadfb969fb1a227c6b46002259ec359360b296c6f475dfde6d0fc873d255af6481571497a29e8c6dd41109a9152c51ca28054bc5525ef83d20cf0342d13c20146d7af12123f77b5093859df1d67c7c515f486f88a2a55860bb98324a19451e19787db0c113364ad60892c55d17bdf7c0221c43991f7c48541234849aa7fb2e8926758b9fa23e652477e8e54fc13ec545eec87bba2d33364c19255d7e14ad9be0bb6cf8a69f9f77e69ba77b669fa1684f34bb9ff3759ac7fbc9a608ccefde488f3b09b459a4030309d6d3f26e10e0a40734eb161b750bd6ad9864b18f9629a3548cc60b02b227c808409a877b7ebe355958d9a5ef388e4b5e09456b540d35a6b7f8b1dd4723a85b2793d79d4c5eb7859893ec4e26afe32b46b2ba996431980858a07e833648e87e233d5d4a8995174543b578b0f2d20892acd8a30116d6b97eb8f2809ac7047ab57a5cd8d879ceb14ff255ae524f90a88353465785d43c7306492f17ab689799a632e24fc1f853314ed52ea78e2ea7902ea7922eab5c9755409755afcbaa2295910a76f951b4e64919758bff57281aed6e26109c06fb374ca58c5246d7871b2437c22a482a809f971830975f259f3538b2f13f7cef1221d17d2ab0f12b161b4b5dcce92465f2b1edeb649557bb69d460c318ba979b25876c6de9c0c8cb776d771aafc508c789423bdb8a3aeec1210b0e58620f471e2c3d970db9b0c3c9edf74006b1c9c15a5f82aa69ad4902fc4508800464c72ac66eb3886cc8fa218682aece6df7a0ed8798172f5cb8708171e1b265cb16a32d5bb468d152a4454b962c5988b264c182054b4ff4ce0609f3f9192c123d1a1b126011f4c49f6fa4a7935ff760f9e3bffc7a3431ca5cc0721b0c5190d789f08df28b321766b82cd4c59cb06b99b19137315da756b021855d0aa3b1e669797df3a7455a7cdbde36cff7fb905fb3ec5c248bc6684d15965fde90c2bad78d38be84e14a4c60ac3cdbec2ea5437197e1d79b4ab2a47f7ed9145382b9d14be4e2c1141cbbd21461ff769265b88149b06ae17677f794a8a3bb57edb4bdfb854cd05ddefe584ad4e120f8dfa0a823562013524b747ea38d4e4a2e9e5ca70006e0de6896b06c37d30f8ff3f4f145c5eb525e934faf2423cb7fbb0e822bfd72d411af4b96a7924b6e86c025181ae90d8c2ee6741f17967d883cf8572ddc18f986191f32092e4bb9f1794ae4a1fa1d4831a926d670c208e626725975706d72248f093db78ebfc279b973faf81490af0188435b350fc776e8d800431dd60d18b2fe57346cc055ac2b6a879723514e932f191cd567c997942fc9921f92e57f754b7eb5761572eca379f9fad5cad6a09ebf9b6d7ac05ffbe3af7d9a4fce3ea9c01875d4847c6b682c0a05fa3dbde91b92afa1fa1b57e2bca1fa3460583a61b72516295f4b58957c59fac9db552fc7bf2fea980f5ea065ec3e51f0c30f034cd4abd59c72860a6c646b54115c69add44612bbba5176e50830578a70a0b0f546d915221d6cdf28bb3282d39517c83c931b1b3cd083101031f842e342446150e288061a29a821872a6398406603a5f2258bd003b620f5400416206045d01794b08292e249649144996dca93d91219099a10e20627d405257e50628bea46999531281fba98f327d3ddbca8238694f2c651f564dbb66ddb26cd741b75c4b71f19cb1fbbbbbbbbe58ca8237e9b42680902a8ea32ba92648ea3cf1dc8dc7389bdbdfa120acacc94721cf7945659c1187554963bde74dd0d1c02faa1a330cae82e6d35d6126895d836507afbc6c5d2e46a95dcf272b34fe94b3a4f7ace63f6c737368f0ac7646b6060b7b86d9b9cd31d74305dcce94867441ef3a3e3c8167f5558f6eed91e5bcea614e4a8637bff96376e13d4d961c5ee5e8695276ef836cab032bb56624028707ba3ccca0b055dc7ed926394262bbaee83002141847824826445245ad77dbb904d7ee1b6f5f6534a29a5941bdd7e3260939b0c924125b981f27ba31b386475fd87aceef48fa61f0e7292e4b8afe83c4f4a29a59021aba6bf51fa524a29a52c7dd895fec6002a3d09c4c70760e939507e97e8cbaf5270c8ea6e3f3670c85fba4ecdc374dd77dfbc5d2764fe9070824356777e534bb90f87ac8470bf3db3e947ff7ceea35ff74ebf74e93bf715a4efe17c5ac2153287ace44b4f67899f5f075697c10a86ab39e704c33a3bb0ba42ea57e6ecbdf1ad54ad38b0beffbc379d15567e77fbc75ce43de75322d251d04608f152d086e985800308b2367ed09fa6dfdec875931bb9fc0df16e073213e6807bff422fb96445d8657777f76b0281fe64bf31a73bee58c73df7cdcb1f65cacc93d6e844ecad6068c2a51dfdfa71adb5521a37ae5c790385d0aff443136e0585ccdf420a86f6d210e6e53e18d813eaa3502f7b17840d0ca2b3213f02792a4b525630ac92db9e9374f3971f91218f3cff87e3ff741b91d35f9d4b19af772d795e097e4f58af557a6084a700cea1a35ab94e0e2b4707395638efef59d5c4e9edddbb03b913f2772059f277700ec9ea6082140c735cf923b0c73db2833b3fe4b963cb62eae0b84e0e2b07cdb16ddb4ab2b66ddbb65547b7d7838dd9628cf14b8275582823b6adb7ad1d1679db62c7d83e8f28823af524c2a05ec436bddb66a9b6e7756434d795ab5c0a258e03e336bd08a41aeb7c46ab1d89e0b2bd572ceb46b0ae0848d63779fba5e4a24323eb83d20cb65ab7affc1c8fc0fa807bfc18b383010d8a6042aab20641b7e95cbdd16d5d7afa85412e7d8e2beeb3dd9a93c5a2db6fa6103696e4a9ecd7eb7a4eafeb394bddd75f7a6af2f1b8f67a7a5dcf79e70e160bb62307c7faa5dba4dbbcf3dd6969d2e9749bac02bb75a193cc0cba45b1fe82de3cdd67fb87738ab9dedd3dbbb739e7fc0da6cfe9ddf5882a5b6400aad2c412108630aa5283018654458c2a310451018105b01870900202cc48d260c689334756385385e8e76ba5dbd4a9627e3768b0ab2ed6ec95348eaff2662145c36ec18d11d595722a8d3dc08d38e68a7b700f7e79e3eade558d9183ed431aef4a3d188ca6f7212dcd47136fcf1fa62e7320b9de911f7aaf683e4973c3d58d3b3891255fded0a3f9785791c72a0bde41d9219a1ef1861bd040dd18d29d9a8f1fce254091075f27429703f3e55720f688ff23f6889103faa747bd0891877d32f1892e57c6a392acf1bc8f60447da70fe7cbd1b19d9ca8646eb724ad648868000040005315002020100c878462815024ca3351ef3e14000c66903e7c64389687a34990c3288c31c6184388210410400821063144343508fcb224a4773fe2951faff1317e30cba2efeb2596a05b46399417a86ed0414a5f9e45d6cd3738314eacb18120b0d30241efe7cc639990feea0bfaecded02e3c97bd53a7ccc433f56f7b691173dda680b561a43548106cca66d7d88ed1ab3d28640406734ae674fe91a01745c9d4d435c98f81c312602d55d642e9adf0a0c4b18c6a45500a81536f91440fd91d8aafbe6f1aed56300e56bb542d7f0aa2755b04fc733fdf3b7d619274c7aa0f62305150e9b6620c7d7385d0ea1497c5fc5c4876f330f5410923c76ebfecc8419917a7d5b9944829473d9163745911c19ae1bd8325c7b4f0a39b7a3373074a1d048ab6b129719d251f3e69d021142275d3fef03ad3879ac2dc550ba83d7953bf557f59c19a2e30f0c25520e30d1c349b12eb98ad2b5f8d023f4fabfbcf742e11c97266adf61721760518d1241681082903ca83b88b4805a59a7ffe702dfbffe644638e83842670e8a5d1996d980fe86f996709f1ae7ebef1ad252ce73b8b73440412e87d49862fac8623db33d0d76282fdf0489d3a9886d289d07f345e5ec29af9e369a700292436b8953f31aa0725a2288205cf837c177542731b39a0c37b2646be8e394267c03d7e1167657b6e4763756cf52283ac33438a7749c21205062fd1eb32d805a0fbd0e6336d5519eb011d30c19ffc71eacf79c2c1cc7ec1ea7693d374bd5054b2db74d57fa1e27f1ab94a7d8cfe326a91fe7c3d212ddc1aa065bd7c810a6108033d810266a92eadf981388cb8b983119088251f766dd7f197c0f9ee427ea9335cac5f654e6e2f635b112f78458380875ce745c87ab67ffe3c2a26fa251d214dc7900dc0ca71d5572eb403cb43145376d997802e1c51a456b47d2b4a01650f28acb3367f7488369c87b44502d5ba2c4304b40939b2ed270ed31f063d2cdf5686661ec064570b6fd952c770b1f30a72b10c89a542a15258a4664eef4e2143c74a85a7d17f1d46b1f9ac13e110d66f222ad521d3b7187c4380b9704e9bc51629d1514cd18cb64e8bcd78c480ba119697f39b64b67406c5174cb2b8161c420ea18e0935d364876049b2eed07610654667aff67184e1e28ed721ae709e4c3b080d131d545adc6ffddf16118325043c03a0c0a390dace239f43a29d53b11632b1f86f4ce0434f37803f104216fc76b12b7df039941c08a832ccc4b1f10e9e9a9bed036965754615554f4729da5e3678e311f70d055cba4ccfe224dc5f7325572179eabe421b368992937f790d956dd1fc04137a923126ac94c02f0dfde5dd513a0f8813822b43415a615f5890c08f938872f4ea97425b4002bcc09ed9b80238d4755c39c451b39963307e0795955ef831db215b6ceececa9f88bc5b248c2914cf9023a5dd10620f36902dfa0731918244a0ba65e97b9ab1d681422dc0be8528e1d5dbd7f2cab2b1f42cd1b106176b75cb57ec5788eee274b1b672a7c4699d7747cd6e13fbc8956c8ae4d210011c97676e63ccf7a7e9790f9693fec9ba3c118262b59b190c5ae78cd3a152784f3dbc2e182b0cbaf26d7922785e59388966d3ce87fc25cbddd42ba3ed5abd4e36ac792fe5d26b0acab48fb25b47e2d4294d1c4c5ebdc499bc5c2674a9be389b46d73bb4ef4401f5e54e74198e7955ece4b3333e8516ba6568420f799e5fbcbf5eb21f4caf8c9b3a9edba4e73b34812001b8e23018d19a0ac9f19713a204510f6ea99939aa9d5b6f8341bc65c20e66d4b7866be3fcb8f4f84832e363be38c8f086ad728ca79fb5b6ace6111946d000ceaafb7c92950c8f5eddc001f3ee14fd843cf1c35bf2604b80fcb9c7ddbd63874809875d62e11ee1839a8778282abe575b01a469efb4e4345e33ff40658aa76f0430f919f24c4dbcefa78f102a4692267b4f7190a5999b04a1f6b7d5fff33047e1557f60732f82357bdbc4c54176e4ad1a5d5180fac56bfb91ed65e638a03f206738707b5b21691b4aa9f4524c2892f71926fff4e9774181312a03dae3e0d3366eac50e635072f2633b5f3886ce2525ad8279ebcfaca9e318a58732aa17aa5ef00596efea1697462f92cd056309b7243e3dae02891c1c0ce37809570c13bacf10c3b08b8cf875af46c45e1e954875af480995e038d65460ab15fc9474d36a07276d41a7d29fe77b392cdae7c579cbbf05fe936acbdedb79954b4f4bda20962bca3c623aea5e56d9583d3b38c831c40a196c598660d0e72d654f5f57fea562b00003e4c85166093172efe00918838c5d94c74b278d44e7caa12f4e2107439d9199c6f656c3610fdc0b86af60063a3c49752c9cfea991a19ddbce57ed71a7d1ff29fe6137255e93f9ffecd19513ea7594125d1d10ce384d66238d10761e4faad63bd368eb65bd6bda178d8e98ce8280b369004850cff39cb545e66a9f76ce65fe900e328b6515e98e0ebb49d105abeadfcdda143ef9387d538188623b5946e14e8c8e22f691661cd01005c6677668b8b2c1f02c90d3f1cf9029d684d176bf6199fdb48e067955742604fc15055ff6e24e1adbecd008568bb5272f3a4e3e2e435377d8c110101b384dc91d993b3109505a717600da3686895d72ab869bb1a02518225033a931b8a3afc03d28ba64f24b93fe3c465dc69dc4ae31280e6940ba11c1b86ea41056b4f40974f982ce577a5eed32004cdd2d774c0c14ac16dcf8da9f35a60b69a73408682c580693e7c4a6c247fe071851ccf42f466af7041327d028e9bf8f6194c95afe0067bdca6c717bbdfb8246972521a5ff834ecafaf4c84d3999c9d4155bb5847fef5c1c4c47747bd042da97ddec330a4d63a237369b686f5b930dadefbdc33a6ea3ee82b708fbe71cf839116c79e73fc9027f72acac80498e386c5e73fb396f944e4d465da7503d91bc1158e60f1bc5f8f2181a1c4ca2bd77850105ec36e637c100db512486124dfa2e9f923f5eef8393222ce6b1048eda6d216250aecaa4247f001d83b4c159dae6fec549ab19ff27211d728b25059228e8cfbae0dc12f4a923ae5ef55bf75b9c29ff6f4188d1822d002ad2a2dcd29c9f8d6d4b05c285a50f5a27addb86a5ca6d710a8593af829959bde4b7192147ada65fe30e0a4d3b0ea62b3bdc4c9ffec65bf0b33170d07e98db8b7133601bea45c47865908e2472a4c676e57889e24929fbe91832d9208dd70130dac8dd8d96d9dbc736482549083d48832918c98c4ec24181757607061ad671c345567f70df040d44742956fd09409c178cd4225956d7d0f8c70bec12082637f059bb739c6b44a4b622533a8b315ab19b0a481c1e451fe8789e3561eebb4c42e80a871ca9a42451978d1a6e33979ada454263140febb30a5a90380786d39198879017a0cbe781e01c34049f8ba7c68a336d4c359506fef867ef77458b239400aa0660f38826a1b2306e2961f0ac5a04381519aa185349d29bce2059e8d121e45dbd043ed62c1e1c8139023f706dac956343c612b08885f1699006cca690f634249b0b3beae30cf859eaf5549f818d5d630e8570b79d7ee03da1570c29b21d9363aff78ffd3370c00186a9f1f20081d09fb673ba7ec59b120e60b3d5938e81f3d650ad719ac6eba47af48ed836799fce101a2fe494da37d12021e5ddcc8dae7937f71e20052f6fcd809a83652b0729d14f5eec06a0063cd7f0723ef95ce22c855e83a7f98bf01f7daae8ced7aed24f08fc1418631fb7858a9678c24e63c87b2d3b670e5f995b6c034c058aab316a7b152dc7ef3ab1c3704f6dcf12377a1deaa5bb8ad8cf53653aed0474bed1ada24514fc6c364437097901100b180f6ff5c8e17673f2bd1b4866e23906d0287006eaaad06cbc8285e51c91390530ce1ebe49947f82cd754e17fbb9827e40ca8543914f7463db73001ecb12413eed6244afef47a0ab4974e9b16c24df414da14eeab3d8572e2366bfe430f307725cdbf86e246e284d191f497dd414bdcb68f06c40b1980ac892dd0bd2d71d3001f08248870a3b54eb125e4787329755898e4772131d77e33aadcaa0037e916e02abfd2218959711af1cd2a99a096754c2ab2212e4a09bd31fdd046fa7527fe558ec2c4f64d459cfa342514d2d9f2acfc1189146a6f6e7c98497e10330ebe9fbaf97100fa31104d8259229956683b11b2ddd060ef313580301d95558e89eabc3a6e1c9417b5403cc020185d07f38832f6ad784c3e634980c80985e54eaf2f78c4c39887550e178855f45935b1f7523e4619c9d18c11d64458eee97ea404509f652ab3bc1357dd0531d90d7ad558c994d85ac248922b8227a21514d59709c341e02742079e002fb52ca02296d369c599a7ae9ccd2317be74bc981b484ee8d29607621fdb7aca8952fd87bc7bf59035b3d89601ba02fbe5ea53131e5653c0a734f74297e7cbc37dd1dda551ecfba89bbdc505f6ffeeb043f32a77b607658bf0abfd7f15d3cb8a94a392e9676d88f2be4b5614e96afd8ae63f64c70e1ebf921b44db62ec0a534aa5a7f56a3a16c8d9980afe9eaca972a840892c0352b964623854863883f84937c4ca09288cd70535411e3133fcbd3821fabdc85cc4202887ec815b82e3792ef2edd17a7b4c4b4ff0f37da220ac3ac5c2c76a6f65ca2c4c1de7e447b46fd0afad31cd13cfa682b6c915a41b491229db7e6fa92aff56660d7572fa82fe36d4396314f4f6ac185b3c2c12eb0bdc2f08556b282e83137d483cfea6e9fce13feac2b4234dae33aacc103846e93374041687d29ff257507172965ecc43b899bafc7280d4dc52491f498b4c7958908c6d80562ee4736c26da520b704e4fbde45af4db00e7a8cc82a1df3660386dbf55172c0a2103471e1363cf531b312f00bf3b345ef8a16b5935a190ce88581338cabf2b6fa71fff2ea97022b38d63a8a12432bce3bd0a80f0657202625d359af1e39adbda081a0c08ac3820bbcbf3a896314e83eede4046b5fd817416d356386779a236f4d9a9589b0bd4df5f2d378d20baf028b508a385ebc2383db52c9f3acc79941af9906d80f65a4f2cced6fa70b0840a6b4debe3c2da423592b0ef316d5bb623315fa07dca7686b53464bffbc2a67945231bd5d542228aba202e31b42d880cc25d25820b41b56f549c3a6b5e393f9b96c4c8e3d6883192ae10f247314b3de498a5ff041ef4b1f4d58e73030e537a5a0f00ba5113d4f50cf37e1301295f2bdbdd7bf4925405d3862e1f70a2f66b901fd20a790b89b21eda07a0b8032cb0057477eb830446fc26fe246f1e639eaad79c0bd879fb581ec8acbe0bd1b00451b2f402284ae70ddbd4f0c5be09939f71ed5613d88750ad8522f2ba45ab4c61038ab0252567cfb4b977a20a2dfaec62acb73509ab72881cc9739d7ceeb19c7df12a213c011dec372eaac276c6bd5e8fef05944b30dd6b30231ed867f2d6b3336a33762f717212a4e550f514b1b7b250dcc7c1f91cf7ab4149976c5a6e8086171bffc01b0e80b32911777551f93f8cedad4d3da6281a72862a4c2fab3c3c79d09907ff5ed563ca976edf2dabbabbb5987aac2618037a0e5d8ac4912d8fbf526f675dccc8d4c0fdffc3ad0d1c18892218928d179a5040eb274db9259e1bb1b1af501260d81ec5e7a309697478bca1e9fc080f55cb42d7d10ed148de6d3e1424c671db3c0e541067a92d7051fe696302c37f4716b02a035d3bdafd45eb4b930f8ab988485543b4c357d500a55575dd98361a2d085431e13d411007a25fdeacab673ec5e99215a8513210cf3cd2185d8476a54c844fe0b5f1ae80c30267af1ecda189a6ce8a5b33fdee3dc7ffc8cba95af154d211eed720e800bb2b08074fa40d02cf76b7bce47ef27e3c253b8fc369a118d8a86ab767ab47dd5e0d00092bc48ef7f8db45ed3a5dd98050ad0c94e0c116b740949f3aa0ef995a44513c87ba1d372dfcbaf0cf63b4ab80d2e28313af2368800c0ca8689f2f40224ec6b7e37fd4771992abdcbb6d73b80a3df3f91afb91ce00124bbe2507b61e9ae057e1632f471209ab2099fefbec2bdf037e15d2dcf70399d480d9211fa634c2fa3cb22296006fff4036815f85a1a37f626ca88c22784dc85cb00f0fe28b5e33ef747e1bcd44e0cb6a0ad0dd9fed1aa0dfe32f28630080f4d2d98d81ea0fa4c170143c1e0354e9604952aeae828d065769a870f5dcc3d50989abaa2b446b1611c7ea4e942872933191175b7d1aab9dd57c224ed0b4295a54474ff314f9fbcbc0e3e16522e9453369ddfa8785cf08394605711cee26888d89fa37310037bcb87a45f08db95f194ca2e540cd46af88d2b6817b2e372802d2a54ba9e667616c4a1524f203f69df4791affa4643aee22e197637c9b24298ac19614cdd0b53ec2006ae6f13e303d3d75b6fdcfbadea02d88174a180943e3c6de5559d2f1d583bf9191f8ea3ab393f58e0bb336d5d3cfc9c21b66d0b9ad2b11890bd35d331765e2ac4e52f65444de0286bb599adac07c73b4192220625a45ca067b473f20dd0df2f3f8765104a04c3146390962b927db9b7a96434ee7e839e11f7b3e9bb6a94aaaaefab1aa55647537bc570e402d131a6d6ae487a9549be3cb62bb40aae35721c331340d208f290e86e0faf05fc17a5a87f49766ffe4ca4366a6aa9fef72d9cd5959215b13ca2d0e55e18605b69aace6dee0cfca2b94c5f038aa4ebb8a655724ac9819995a4c24b0655277eedd8d88d807bfcd4b51e409fe3c099d9438664756aa3d47b447d93b8f5e7fd91221f4dbae620211c5a592d48af1a1519d0ee49706fe265a310e5d66b3ab0a051038cdf78139c664a87bb4dcbe48ef3f330794c61475fb47b8e72514372504f885d71475ce306901ac98ca4551c26748deb46a7af078bb2d7e32f0f9544b1713ba3d7fd51d329dd618c336a8d93128edd90bc203b229e2ed9ad89ca0449fc172594f4fc820eabf1c51d4308fe293c59505b61acba51fee91790af374b82514240f162b9f04aed4a6282f85cdddea7bdac6f5db375019dac1d741f660751007945474f46e994a15e9446e67bb218eac7f38dae3eb96c58515883490cde80586d0611b592b394d94e5ee9537a3633bd1c9b9e54518558a93be24a2759cb6e299dcd783a118e3ba2ef1728dd89d9434ece5bd491cb6f32bf3c7095011e23a80bf1bd96c7ad42a3efee740bc7f59967193aa84be55096fc158f29024a156555db1e2487eee63fb2add0fc2df77979e4290c8c43e4a06ac7a626eea99ed1d2a8729d6cca019bb5defe429096879e965a430bf2702f3f32e52e13aac398709fc31881bbb42c25717bb296b6876ca63d72b07bbeb7217af5acbb940a5d857d6a485c8ed24da34fd956444ee9146fe8a25f76cbee46964be0b4a6f22c5aca2d1b8be26b9c5b60b2006bffa43ca9fc71706215a1afc6ea70ec8da17a745edb57c20daf464476b04ceafc94f764f62225c196745f2dab09086c6ab45722e7904f03ce85a4d9b5e3446275ca305556a13c3435010177c458b088abc31e91bb579e15ac101258f320a898cd67160c9664eec6cacbd0c6447e219b5ed64a0ecb5da1889c145d3419d6b5caeff3bb2905dc98f3750ffc21a55b4c5d8433333ba232c2b7b9d88a72c679295dbe7f3e786138905d061c572475b8769c95491b911559032dc0bd876e567c1507636fb70103d8afe85e95298aae830b103d3d1049582cad034d9318d3bb69d45a22f2b42e2c68155a319f24607842320a161684bbe3213b7bf32146066ce4e76eb5a33aeccdc2fe0ea878250f5c53a31990204e2b537ecda5f601bae2a6c8a723c696f8bbf0dc338dca6b91da02ef92ce5b0a2b51e999c42bff1e1049edda8900fdef86cd68f4acdecd9f943381c12b26ec7db011fff488e36cde525260ca862889659702e18c0b7d6cbf4018f6a5dbe92f251c0f92d37efc0da3a9ba8372e50d2e2ef817f2aecf68666641cef4c050af8bdbd451a72db14e0c504402da83c087c5b3a81b87e04bdc4b05f800d4c88f43f24512f3b70d979383014e8e875f4a7a158d5d0155a3c7cf81eaca91be8cdea3e817cb2b08791d3ae3d0216c485530f312ab2b85c3baea22999d0fbee2f379762dab7d21bef45002be68d8cf6571d46094908c26ed62e699de759a3a990e51179f6e8556ea2615ddc241a651e023772a194b3d9141db71bbf2fd92b74e0a1d1024ef918026a6020d60a874aba7ae743ac7958aa798a873a5dc9e0585ce6141701663aded382b8bfa6a53c9d9c28bb82409d9e01a53dfae20f93b7551c8fbb0fd6f2b92d5a1b2527fd5bfe14e2cd81adc130bb5df0ad8578d4e715485905706557766c729a06b758c5aff5d8929d2b991167ac97b4526ece570eff6404b7a8b86222d8dc27037c419c735cf00be3e2084bbe7380ba35429e51cbcc7c31b8cb1c7c0ca5c037284f2a4ab1532d926b63f753028bd8079ab338c7612026f96f2c2da7627a6bfcece2cc7e4216bdf4db6bdeec19cb4a963c99728ca3c99c2b2e8084aa08d399db22eddc9bc8062fe81ada8dd496d7070ec7c0ba636016d0e2a25eb2eb64ea968af9da971c8446e6508da65e80b5f31eed2bfa21dcf23e291518c58a2233af2fe00aa4fd12b3c51c9008ab7682d7edd40af20793cd9a35a37c00fac0f3dd760aac7972b6b92237cf208625cff3b6b345000d804ed8bfa6ede3cd369b6f5daaa2ea42f79baa5ebbed90971b15608ecb523e9098a82543794aa8fbc4123ec4254293872c98bd36caae56ff5af0818d36c48fbb5526288401a8b47f075e1f4e9af16f10d97f611759eb0c1bcf8c7a9581362b88b56427d61778b217f68f33ca8ec792ce2ad8d7acba7eaf5b48b29c3a55ba1c61b0d218966caa621a5b640717ee44c9e0a4bb50c89424375b59422a1ed141bd43b076bc6b9daa41c976fd22d12f93bfb901e8eff579ac482a7d1d046e8b4f875d70561bbeb18a2088a97749cae7aedd21a8e56758718576100f1bb6ed9d8d72ca1fe61304f1a0d715aacbb1e70479a52c6424e741d0f2aa786c730c37b6a07116885bcfdd7196db4ed62b11447f0393689e08dfed005f57bced9f1a7fb05597df1a7f253b4f499706212d35b536b4868f25ecd442749306fd55d8f9af2c4826d665152111044040409ce027c3d16a49a65aa6ffdacac38b4985ebe426fa8f5f79dd17dd882a025e8eed9d171fe396331077802edc9fc6e00241e4187d916a6f8024666f7c1787e439ac32f5fbe819a5c26f1d4e541a29823f77ca17b1ae4abf9b3d45b7a6b6bc93056ffca71103c8a06a6e4fc2a4f8a197bcb7be229248d6074fc918ee72f36515f349959754cf10015cb38025ce22dbf0d991c727cc3ca1c0309fce04907a79b1f4972a77db7d7fa99ae3932fdde014982f183b29d6047b3b63c2703f26ad377f9605b88b704246c23f14736ccfe3d72139630e455f9da4811858e0b2856baef967aa157097c3f0b17b890e516aa40da93f00917dba046d91e557fa4def88508dab86b523d39d847fdabecdbe1855e7e0514539a1a12a240157b4af7bcf017010e973c67382cdfcba1fc9419370423b5750a514dde383b7c6c10554ec55971ae8b8372d03223994b2a9448edbe15a6b5c11f17c9488824691eeeb9d2dfe2bc34e09001728783061e36f26d0fc4b7da74919f6cfb8c4016346041e8c4b1ae357baaff400dc70ea7e45fb658c0a6b26d42adbc33ea1a7f845e6636d5f4018e06face0e9a11fee218e0f434d76c4d962f20bfe4aa7d9bcd51fcb7edb0cb1448d120755039f6632fa67a033a73bcc8448343b174a30b00efeb524bac38bf57402247df3706035b9b6b95337230297ddc70911ad37671d8f08e1b1f492e3e8b26024cdb1cf899df3858fc027d4f1ddba5542b7c4eb58b4a50b2eedd22fd66d891f359ba471225007719e6f0eeb23dc3b2ba6677ee773b5c5da2d69943a57249e29658c7b8577bac41b1a8023d665d6c6c00a194a3b2505b8386e15c116eaa1c8ba9e6df62fc72e250fae3213647e909d8579516ca14210011b61f69a825a1faa624b050becd3347d12f97057f27c36c4904dc12435e34b38740ffeb067b005d4b4f633cc6421b3d754530e06a13f037342e0f97d1eff64eaa75f9d76e9e460cd1602fb02cb9997a264f4636e8e22ab5cbe722c2a6686a318f91e08a03fbfa34afd2b2e591b001562881c45373ee7562b0dd274ff371b36f3bdb16bd74951a452d6728510d2c3c2859ee4794c5d718f88e4504e3b749bf95fb8680d0b74ed8aa14fa6f37eea3642e3e8c662aea2aaec1dcdce1b03a48951fe174b2ea4acf3dfeb6afb2cbad17d1c69696cfc45960a9502dc6abac688bc76829bc90ff73253dcd096da0182217074f77d012f71fdc94bf4c06dc7df983b77a7f7fb50873e2d8747ece4ebea7c1bfb5bbf0b111b8130d58ac3483bcf89c8bfb974c69d4ba3884e44489efb6297483c161c3dcc9b0d5d720ace8541da4983a2b737857492bb928a9daa08f117cf2e322dff2309db9e3f29691716379a03a6c83961187e554c7038e4e6c72e60f50ac37642b4e12311d4e3c9ac2e4beb0a8180faa450245329f14aafc97f4280ff425a884551c8c4a6079522622431e104437d096cbdc009c387d4cd958c87a05ad21239fecbc381a2e830eba20150539155cc75037075553280e8465b02e3f9caf28202e14add2fb507680ccf5fc8fd10aef642fba9513f3a3bb921b7ec09a126db952da1f86411bd9e7a92b0d3cf02c559b1f4c7806d7609c05b78778e6975b11385a9f3f625d879c9181adf25332ebbfd5b96b97142dab40db61fea8780ad5d041165e1c1d641b45bab4d2fe746af780336523ec1051fb816bf79c48825df6149bfdd61498643e9fde3029c86796d5c0c9c834db419e5257816c18f94cc028e80687f9e031289753808ef87a571c6de5f0fc87e51e169c600e674ccf32d059e2855858338095b3663ff915660b02f9f1ff59b3a1c599cc292753ed852bcd3f9a4a04509fbec626836b0a68c92420dba43a2fb46d10099f936a8bc829205cac8353c755f46be8982ff3b180f35cbfbfef110f2720f524ffaa3f39f6970b699b781f6c734cd417b75fee8d76a7c1486d54ae422530e6c50240f507cef69962d91b264b18352073bb6f5bcbcaf4e2892ac4b03b6a82dd12ce5c88603a9748c04f8a364deaaabf7690e02a981057b5a50b1607b1ad9cadde19c292b4d6de3487cda0b4adc51d9a77748da318ca7442569bea04c335d294ddda427a0f65aeec8bb16a77f39376c20c845de267c9e3d67aca57611978d24aba77f69e82360e55f2bf9ee48a51b5bfe266bf1adac2deab725ffe5ba59846b5ae89174882e9d0f39d270c78b7371ba0c23992ada5af45a0ee72228f193344402b941c5f1bc29fe3fb8b6cf9b0d0083615e30ea35858a3e85a430dd5112349680bf9d0941325d33e5c5fd7d57a3c4ad46b9a88d9e701ce50d1d2aec23bc613a7ff24eb485b64ad76697f680164cbd5a26a349f09ba570537f652af831c081148ccafd71e943992fff8e71011560adc13cfb9c1b864a51539560881962e18ae89cf7fa6494a811c72555535be2a268d1476ef551d23b28afa4a4b7aaaf67eae81b2102c555d0fc1d03a0384b4a711e0d6b1e7ade9ed060f9f62327f5b6a2ce08c79617865d16eac64297890b74b87125fa4baab718f7386ebea3052cf2bf5aa98c8d8ed2835bfb0b5f7be651662d5aa6678a6bed4654d7cdd8c4de967407d74b0470837c6da70686bbecf306de0a3cda228c0db77d9af7ceb552afcb15749a5d71493d584ece368b3e5a5238b824474e255b041fee314415d4067bb3cb6ccb06fb3207091a351f19b3ae6c1d675f9565aaac3e33c9b877a7e032f0cb5f5d2fa5112bb9193a10261c5cd419a8624502a74232f51513af4e5ae93c37774a61d0b1fd011bb9f5054966d5db20d0a9e61816406aa36490315231027d2a69b8744e95f27d523b6b5cee5095b0ea6ef2b8a28fe732d75b24a964eb71260bc4e3def67fba50c48216774257a61a2d415ef5257742d2c32d67f5e2c616608201bd08f4ad038e753f794b874a36831e2e807e741d9378007042a17ea2a37328f08688a7a966b4e9dce97a6ba763220810406c156ef8a78e31a6898cd18469fbe9856679a353bbd742d934a1a8d6adee3bceb494436d336a84f7e4ab9e028f67091b47a236c47ed40feb248e343b9bc61190bc108c64d30cfac034a9b732c13e51f82e76abb9963596d99755a9cea9fc11a115b213c196a5ed2fbd97d9ca27fe46cbaaf6ba8f4dfaf626339b2c097b7c9e306f1518d65580d9d6011519ce3ceb13d63e3f480319d41b3de2bd6031e7da0b58a38a2da23dd219083e95a878d074e7423f991084d1c3efbcdb2f879c1a333b55bbaaed18c81164424de75836ea06f48a116418f0d6108190dea2c781f6d9d91095a439c0cc8d34e29ecb0905a0bcd60a0fbd3a8d606c2181877914a524e5212c3402352c1e85ea1987e4b3447f1f915afb2929b80dd23386e369cf041cd78722d019feb09ed6be13f605317f82a480efa19aaee7e9854a643daa47a30a7c320a7b53cdc558189d8ef4e3dddbae5e74c89dd51952582aefb5198a9a7a277f877002784bbc1290eb04b297782f008233605af24ae0e4da0e713868d28d80a8f1a744a95ee09cd35cf20da81650f2173413fea5bef7b08519160599e2b4a75488ca8e635ac3578bc79c1d80895342c0676b124f9d6ce926987f11f9e67ab08512f15d660281170916f9bad3d976142e8155215f00b260cceb51a49f63ea0dc920cd65ae13e0321546183a0f473841749cfa59038ae4425aa5e9d211217d6411ea987530b809a147785c3c96833e1ee109fe99ff0d3017aed40ac03db0c149316575aea70d5e561d633d02562793c30a448234b9807ab3460d0d3a45adb14de115cc99cb4b5680cc5d97449322292aa8de25aea233d9ab5ddd2ca27902045165b0a6739ba8eec2ff9f84525922731f51aa352cbbfbbe0ce7fefa60039e8803cc31539fdfb11e4f80227cc84e77df163986e9bfd03e14e838dcff4eabf94ae5a8c791cb85794d3b53b74c78f819a2a660d10845f5722f103d63351aa17887332319840cfb8789131c8da74a52fa7698cf15777462c33065be28029d3e6313e4b95964e384d8dde67126ca79c8c96f06293ff18278c75c8f3605adcf87129fe905f97b90495598cf979b684c1a6089cbf0bbaf71588b126e3842a7ca7268271f2be3079a443b6490a92442ae9922ed2dd7e7feb59b2c088684117f67e1adc6c308119b135d9147e1a2b67954fc3d6439f40f36480702cd9e0c46ab541a1d43ae82c29553385f23c7541362749fbe51c0c8097cc3def335087155f467e4c9596d0baddcb0c4d9e746c84c248e871dbce7461085e5d7e1ad1bd6aed8358a3f9a389581938b6e35e0b45e6aa3ad8f8d96a503a8fbd7ca52b4db04f0732293913165b89cd5a7256cf5dee8772894409e5f517a28dc789b0b5f14894fc828cf08343449046bfa7dfaa97fde905c7ec95b6b46d9d96181efa1577928b478237403834277d46a687cf1371dbb1118bb180c3e035776d0546b81973e5bb956602d1a571e548ae4b8784d0d9da73d0e00195237f96264538bb7e0a4a9e08b73be08540607ab277996911ac6109ff15860ed12dfdc7d8b97bd60fe727b563afa1ae710c1efd1e3cbd344292fa130602e5e0b1437f13aa84e5f1cae1d0c9f9294863efc2c94205882f6c183a99339d56ac2aaa60e10adb6f5077d931ec822eddba8910a214b174c89fab49365cda265bb4b9240227c43bd85bfcfb6f111f7dd2283d58807b59dec00a3151dbcd49f8f5c663568b19c8202830cafabd2079c7fb5ce4d2800ea21d7c6eefc26280171f374a345110a9697a4f0e62765ac13274d772dd67d1494c7c66b3e797dc1ece4455742cfcdba28517693394b40f6641c811d774aa7273ac4e1fa9e94132ade5967712096bf54369659f57376cb02b3cc832710a18e8c6f4840ecdbe9df23eddc7d3223e57cea561de95b499011068c81344cba4db39d5891c25888ec7784d578be01aef1367939340e8ea1f944690ab805a4daba67eead462d385c1f434a8315feef8af83794f320e9600711f08d6c2de7da2c6f35ce3f8efa0a135f7d7279d07e7a01622abb63c92757c11341d3a391cb62a7933a6f918b5034a27ec15e70f85177af8d479e86626636c97680b1ea710e3a0984eb83c18b8ea935106e55c7ad4dd9dbc251a389f262d91ef9ac64f0d29e55d0d89a72b79ed06e9e68c240ff631bfb7c457dbdd029a6803ccd33b8f87ba833d3984d31b00c5473a287866c50a618939bad5a4df2e20fbaeff387df94651332a03865015c1ab6124d0a71f5393efefc0958a18f5c83ad62615ca085175058a6b5a39b49c836adf41aa155f4b10f7574bed4c4fd9a397939a309b0028a3efd1aa4b18aeb94a3108082a85e900676d71c196678993be3eb9362c66d955801e13b6d6159937ca2a1d0a76fda49ac7faa535dfe0a4a61d188f31554012aece70d4e8d0074c76bf7a80a3815a579eb72d73af77c292ed3b6ad7fb61b23ed5c7026336fff68b989b63ce9bf8f3d22a844471e15f14c9923b96f232968fda51853c6b32df0925aa18537e225af19af0266bf1c5f4529a70bdada325389247e5e479dad798aeedac0fe77c3b70d1532bdf73fac1c1c40d776b9b03d62f4ec4921e6402009d210e0aecb9228593ae4f13945eb2a47e38cb64fef85e98c5904f5bdb5dbbcd74066ef2811e6f55ad60ecb30bf198a1777815367efdde85693e2a6f264c6b73c2b734db211f986fb8f5d4bb3a3af351a5ec3930b2868ef41f5e30a75c2f5daae4bacbcad7aac7e7a48476f8592fb308d2c5f56a148b9ba56a94040667b55961d9f005266960da6bd285a52f9be2af2bb28cb52c9810dae0ea9ddfd554b8c6542a45a364a5e3edc3d6c2c9eb61ae668c691e74d2da204596402daeaa9a75b342b6d16911d470a85ae24d9aa6c4a2ef9cfba83eac88dddc81b16c4fe9aaac0340c4d1c6814f88c1b86e777cfb6b34ca500b15ceace7b9694d3869bd27d15ae5b5d7a0878747342c869d7ecb30b5d041fbc67d777b8e466f8cadc835469230434bcb42d34ee576bd8944b6805e30cfb16a65352d7c0a4779526c4235598dfc63316cdb556bbe16341ad83e7f9ca93a2fbe26c335ebb461dea30448e1a0779859f28c9c0c240635b643fcd38c30e0f4e37a0fd3eadd2104749f0c8427eba2624a2c68f2518415a1df350cd8b831d2fa3d9ceddbc1c87864493008267ffb3ded3bc4286bae3b6b0c5702f1e044ba34330a9e7d8d4a5cbe5c30a4b0004f3c8007af6597fc0a95c8d5c2c73be2c0959f08ad1d5bfc2683344eab6c43a8c4392f0f238cf7254ad65b634a378679deedbe56ec52cc48a66344cedf25d57da2c3880918dc8abe83b343ad5e236c983b115cdd0566885c3cfd7ec76ffa6210e383ac1edb19d91dbd420c2fb83f8db1ea6973d6a9c186d92d742591492bc2752c55b24b12bdc69daaa0fe3f78c4892489fb6b158a066fd3472a9c431dd8e46090afd40ded89a2d846c04af17725682244c65ba646488cc19966564c88a5ed0038051fb60ee37830043db00a5fc50117de5dd7a670ad394eed61b4e28214a8af2a5143c2bd9bd571983d551c91610be97a97ab5f37ff47596b399ce21572b0d7e4d2a1a6125e7ac492546c565dea637dfa7fddcac2ae63b606ab28c0f737f9e4957cff9f8be162f44af93934942b991ef6a0d3711d2c2b5749730fc3a62605f9456980892a20ce96aa00d5862a3518a632ed6db64341ed318778e1d5a58cdddd4981b7f99db4bcb409c311b00bfba9570ea39e9a7a36a598d9cc6b3052b678b0d68f4c1d242c99be7bf658cc54d617983784d9560a832376531beed112ffd1cd81001897537652a192220ad2614e249c6d0d78a9a3db249c61bdba49f495a0579f03652c38be598767903191ac0c61e8393b71abca3d1314273b8c59af3a2e6119c694e45dbbddd4ffb1384cc818fcd473bc656336f6c45cb11b42773cf4c354b3913cb4cb96f9ffb571a858a5b0c3360095e75a15e28736730ad88957eee9a8d4ddb6eaf56d1b25ea8240144ebf84f596f3d47e277acb7cdf0364b98d7004b41c8b585b0bb883959e6d928d28af5154fe5208963ccf9eb158a818d4719f4e9f72e01e20830b00d85a4d6572b81bd0a7843312470e835bcebfd8de31188ce76b66d9864cbc53a50802a766de3ffe8102e94106131e86483991357d67a13118aa2c45979d60bd45932cd5c6e2470e3c0e9ac3e9e27891e1f09b4020e378cebd6d3c09984d6fae995984ed9adf948f4c82d0dceb0ec2f630b1a9c28cada5909c7e6917ba8033cedc01d07c814cc20cc4b857e8ef1bb4ccdfb127e149b33dec8583dcd818a6bacf3e7ea00c6df0c3277afdc86125af563f4661e5ef4a1e1d358efa84a55ea2e72b5400d0bbc466821ae7f3409402e5dda40e18d95cbce1a2a6c588314b47facea7049674b87d68a241a58472aa6a1de6907d6406593a9467f54432366cab27ca817de46fe448ded96ed283e47d8baab1d82445865adebb2e36a7d075f56433b388b85c8290a4d6cac473adb42144661be363069cd325be9a11b6bfa330dbaaa8be118bb9e9a54ac6b05feee9d81a4baf95c888a80c40d4b4997fd402936716bb556a0e2e769900bfa471a2c3eeedb0f6f78ad118ac4882a5a18223e6091c32a21834ce5d822ff48bc3f2ca5e67692925ff8355b86c837d721540a78ab657e11d7472c878b8ba5f673255d1d59182ea291e3b3c073c3e2c5f5580b231ef2910fa79ec474efa90d2bc28c1df70be43dd63e6ce633e149550e115987735f45b89012294d0e7454d96a1858d682944afbb4a492daab41f91202e39c00339825c9ec2d11838c7046ed9a664db11ac1fddc94767c01acea316794bcdddc238ec0ef429a58ab820a1745d0cb32d281d0129ddee6d33520b2391c448f576c0b4b36a4014d2705d6008c5d27ed6c0a83f6b0ea7aa8992085423f7b829eb38fcfd3c771d875e9680c1a683f0c9e66a534b73212153096ccebd01a1ef111e437aff9268b88a01651ef900d139ddbb36b31e0560b46183368f1718b10f0a431a90417ed1fbd636364e2e68c57c2c86365cecc7efe92b83c84e3950fa6c37545e18a05a2d822f2f8165f690e778e83132d43867a367da2853c524de2f04722a5dcab45443059948040f26130c583342073afe13787aa940b679832277e998d384af3fc928fb0dceef61c4386b7efcc9e212c29671209e83ae0c1b8cf48275fd76299e5594a6ae8a9d350c5884d835cde54a08603ddf2e5b932a3f043632f931d87bfced2548d4866e5baa0149e029aeac8e87bd45802881abc3eb4a2471cf2e9034e3b96e755f0155fc6938aa8d1c7dc9428eb30ad72cb3aab2313f417a6938e7b8841c7eaea8c4d3a2760ec10b88687f43bcc04c637d6fb5a46c223e2036fba1d048b1ea30cc6ec94d07cbbd702fafffb6d0d92a3f2fa0c6a8c304a281e1740e8a84ba331629ef571421f9593d9c850ec926a07a4085997e2779b21fb04bce3a754fc1d19a448d5843f45ad95d8b19b124f9e65b36192f51f25a9cd493c9a03f5c34ff219542285d41b12816b31248660fea324a71f1ab28e9fbfd140d3e2513a851fa9bbb88ad1ac46547678ba2a4baaebcb2c392b23d5058ae033ca5a753ee718a2bc60698dbb9cee9bf14edb49a6a64483308bab015765c187c4705fd98022680cb10e7e92f215106c7ca8e72bb5145ce87b2566f8dd4b9ace65a7812e47514c5d52aa47053d9c591de11cd95b600b61a22f7f591bdfa85a6455c66c2a8ee484824ecb0409455c39b0d0a396b08363dc3e02fec481ae017d15b7134a1bd4c0e49ad2d910614527c9139346df8062e6577bc8814583c7daf0c9b790b600445e40787dcb4510b173c071a31d5c7697d9ecb950689fe30b894ff8b1d527f933f55695b8351124c7e167401b8be85371807d9a045a112e11a110c029b5220c5d69de31372ce56ae65a61af4e6a0a13193a9dd7beed0f6d1fd16617f014aa6c33af8ce111eaaa84b8d05174d14aca6e9a35a73883e1bbd3d6ae064609708277c6131992e4c730550fef4949967c6aa3c7e559eb2b0f500670bbe5818254f71a68190a0e3131ee9877d1c1bbcd72d1f35dfc244d0c1d0788f274658dc9013cee262909067154af7b00f04e64fb60496a1f0b7fef32f88fa165f785dd05acc3e65d436e023d4b7bd970ed68d75bc6747aab549a90fc14238cbfeea0b1cdc9359aa336606f56b14e0b545d151fa6c52bf8b9d0943927c8a442657c1265d3496134c3fda9c73913da623d0f90ab6c2fc55213d1ac7e6aeaa4a9751d575a5db8404adb624dc89a2560c68b0adb62f128bea6c9c25f801485d941e3dd5f5dca172239c7b6d578e6dd90587442b8fe4e9c7d4dd377e46de719355cb29ab3b979a09ce2c8340792e4d7c92b61d30d1ea6b8df36c47aaf81f9efd26025efacb68bf48a6ef8740dbce56c2d99ba61b4fed8ee6ab5d0a0b5dc55840abdcdc81e96855f4e5b0f52c284671f2fae2e73aba38c0c64ebc828594327188b96a11f84bc51ac601cfa4c6970e6da8a0f861eaa075c6a8e67abb6528e584fa050d13261b4c50ee95508770225e47fc602df49175277dc43d36d33505f50ee104b34b733881498c491184cfe9df0ffb89c6de7dd24106ec11d6fca5981bdb95f9e2ca3b1865c2490cd49b382a7135704959434c2c292e35e7eac81b44054315717a816f22a564d2007087047bb469676194727fa8215b457ed0b48bfb0153c9755bfd8bca2b01d368a3dd2f9f9f0a0ed85cd6fb611230d4d386d69c442a5d539f721c5ea2d9b118fbb7445022e6b068ff9f66ba42bfd59a9fc3685d5b62dfc314545b4818d2318ea97d9816c81580a6ac52b39009cb714d7ed063866bb70e4d73ffd0fbdb919e8439f9b9371dd984e9c7b3cee7c5f2750cadc5e3067ba5ed0f81e7e4a31d9b7cc78b00b9a24eecad1bf8b17ee6277ca7022e32de8d3958ddd8764307896f822627cbefafbc6fd518e129326db76c3fa3c7e3fb45011512d930ba2c82433a162480a49b94d33c1acd7664967fb85821acd05a3370fbffd37d3c8c26c7a2a35faeea2fd36a3d5df6e9640115b3303d89cf3f88b66e308d7402702b9a67687a27dbacb27abaf13f470e3f9a04b2311528e3d8d163b2a192e986032757948d1361855151940a88977243abe301bdd295e3ca8060f9c19e8ca68d05ba3e829ddb0c853d0c6aa40899e396970ce61cd899d09a955162736623e3898de193b2faeb37a312299f249cb99a9f553dddedaedfa60736f8ef8e4b2fe1da213f73c8afec97b9ed4ae0f7ff8553fd2d7f08f83dff3284aef87cc8ba35684d9df5e42e35f212d2ae7da371b846cf85e56f9123e15689f0254f16956561bd572aa09ba86476cde57dfbeff723299c305da13e699520dda9ff39b4713b9f3a7c2eb2458c2af84a4986ea9cc2917146407b0cd4c1c30881c7f7e19136c478868b7669fca895e738550804c3c30d0155eac21613e4b94fb5d79b43e70254eb24fe56ac5e91ba153dbe2f95a9e4c505dc03b9b9b336a9196e92a5af0de6970475ea4dd664d9955c15d793fd1f2d1944af7662aadaf2e83bdb3aab531b1f8a640a6c65f4f774343d19bc3cc98c4619b1f979e53db60524b1e2894ccf0b6c8469503f9ac8e43b4b2f059bf2c26c104268a8e754bff2f50b9abb4043f91f1977f5f8a12539a3bc407403399d2fdfab5fc18f4fa60bf2446fec0b54b7504d065a65b85d07225d7fccc8391e39e498de18efbfa15d00d5c39af5dc82774b812ed3f1bd3ffba1d35f9176aa3e0980c51d744bed70601fc5487bf4507a31bb26f317a632b53ec7487ed8aa16d37c84e55059f3168b22c65fe51cab84d8431bc7272970c1b9380d5d8c22f92ab56a86edbe60cd8327a60316561f485b21fa0005932e2390ddd6097ec4fe7825d4e178244c863fdc5e2c354beeb241d63d3b2b67205e0e1d3cd1608b658883fceec862a8d84519162c3e49483309c4921861c8f99abd88d9e9812a051344bccd479e82affcc386aa109a903dbbc649cbb4673bae9be5fe91d5bcb387f67f9472c5ed280f7358d90bada2fff908e97ab6fd7ab8c5715897cfd50bf2f79fcf89be6962506e6d1f89052fdd30dbd5c201010a3a8b3fe838188fda7a7069307c8e0b192f4c21ffc02d2cb9d7fff93bc14eaee0581edd63318e4262501ec304cfadb61d504804eadd39da39a4a165ae3e3b7a7ab269dd157eaf6aea99187b2b494e945b07aaa920d412f7f456c00faf4a0634cf2ba6918dc2bc89216751e3e03d510707534428aadb7264adbf583cabc56a40fc85fc4161206728a6d0e620e9d6cec754259f6b6963d489eecc277d98917f34961cad101270b13e23d2fbef27bef170808239370e1cdeff7462d1efd33f4969ea3d7f98d51a2f426b367ded143612a48d32ee3e4fef493a2db90bfbba571ee6c1e9d55b5c8e32684cd1d0018179889eae8b568557ace242ce59a700b112f5dd85444a96bc911c5a164826046fd997b3d2d0dfed32f887b4b6d6f19a422893ee36004303b62b0444adf8102a0791ad125e4d0e978e7155e015c4b5f432f7fb1a5cda14dde8d8d1309dc3a5838948a42e20ffdaca6e4156ccbfa851818962f031c0d175e795e683f50a1214c40a40e05be416621add112ead5c3b05d1c48e41eef4f9d91b7440358bc64b5fde11c2ff6278f88a54a0a8a3abd3660d5a8d82aa4a869d6dfd33119fc9cc0c7b8854bb34d5bebd10f1415312ca981e9a331a1ea3e861203b6f6f7f4c37cff11e7d5493564f08d546c3521b351f22365eb7e44dbb83b410e7bc4c940c6f3e2ce358d1b632853655b0eee107f2c4327aff5d4c617c55e70206aa58948f85d99f078738c8d594f304b86cf1f37e5ab00937d53dd70a0d4c1247697245c1d6a4d7ccb8975d30627e28b664b4a8420c29261bc5b08dae18969e9cdad734f1eb41283d84c5283c1b0293e2d1f847610890f3905971961cd8b28d8d46b10a45522ff3d12426333ef2f84423247041f96a4fa8d70ecdaad16da267aef444ab60e1db6c8a00a7707503aca5ba564e770466080539652f969eb4d16ea22062e46db476403fa21f730f684478c80b4871cbca2d9dd5188f24e996a0114821c3ec409d20037b14215764e4182cd74636ca79aaf58c26603e81a9b1a9c9485920af147db2bea91f3b31fea9e18138a0152b9d2c75691501f5468878c470f0718836df0758dfe2f90f0c772ef5d96134b12af448bd3c108aab701f9a9a2319a1155a21313ea8b6766fded5da07454ff0eac2f4ca8d6068ce63c637b89dadefd8ca12c05cf60689548babe5a65567821c1780fe74a4954465caec86bc06b5471516a84a787c582766f0d92ae7ce45e6bd5c5afd72bbbfe59f4a1b2e081a28b7c5c9e0a8519db32190fbe4c34620709fbcc947e2f1071044fb2ea907692b252073e21df03b9b0e0004e4438195343a64c763becebcae18ee42ff430ea435ed2dbd97caa11dad6dcf24d1a28fb9445870b8f5317fa175058b5b5a07dcf14149ce0b4c6f0e4e7b17095c468ea76bfb226b86610d879526c5bce38347e37128d44af0ffdade36ee05da754d422c852522a25105c9d912a6d073aadc18a366d2ec29241582bf73741a83bf962671eec1fe38b38d6be7670afd030bcd3cdaa67f23ac27a94e3eb47bdb9e503a168ccfd267ea0564489962d62abf9b5898c1d693397fa482414c6ca3d4347b9ad0788c0f821b4e76855fd0b741b63e55eb9e025906ca1203cece8bf0480c3d78101e56b3053b1e65434998382fe96cc7cb64fe57b16c8e495751f5e100015ebba243e8cf54c96f6eacd72d532807a60d1cb54fb0b413eb04f79cc6787b223c98730355ea6af81a9c7483769a1123453e69eb849fbe4d801d1a29f1c3895ee965f9ee5d5083012e77a1da0bd92954c654905890c7effcae416772507cdd171a72913d5425f40f7c3044cae27a78d2a97b750e5f7fb12f5336825e5f090d7b8f630ed211c13f0f9c1c00b5de46a7ee46750197f7d97189ac1c4a70f3eb401303635d6a1d1a9be58e7942e65bf6a132077d180abf8a1afce6583ed653720a201e19db3bda0f528d00fc0af6a7f3b46da63e0db0080cdf6e38f9c28000867c6ca45f6e93363d9fc61712c8e09fe6e9f621140084726ce4b28def3b9c886fc8fb98764d743ccefb0a6de6bb22d7405298f595c33a8cf4c4fcb6f658ffa63769298b6b9588fc337dcd6fc4ea655edb5e56e9d59eaf4fb710abdfc6d69d4e9034a2db95bc6caafc3eb2aba235ef0b4955c28f6f637b58039148cc17e4448300544dd5e588c9ef231179353a318765e43c36d08e48cd510a25732f584b746745168317db4659ffb9724389680b8b254ea1a15424b2b1c5da24cb97504f17c64afb058a2907884e73e629e00438e42d5062d8c4c90fee2090acaa85e581d93f46d738b86b2e95c82de7fa1dfc54e49563299525f36fbe5857a1f0a13120c575e4025516d41d5f2020f138dd5058263ae1c4c5407dd165e804677924fe38d9f368d8570df2ef042654d7110a539ba681f0a1f41f236e9895c72b6e6d2ad13f6d197aaa361027528d55abca90e0d82d228fccc0c686e41a62b8d75ff8bf78c015523699499a772ca573191e038be5f5d8ca78910e88c7cf09dd1e4552856c9ffd53d88a4864d4d18818976ded084e32fcbc5b5f15b8f855f7273be900cc0541f4d8e78c63f49840f38e83b689357ef069a6380058a5c5667ef79ecd52ee057ee41cbe505f475a1a82df1834dceeb1e845eea39630640bd0de2da0de985ab48cd528c5ae4222c9169b9da9c4a85af81730e4cb8f7026eace84a50a0610cabaa048bd4bc50434460df64b350f732c4db67aba97c967f592bdd30742fb6c16d46f678445a2a1b1bf9ec5668dffda22874a2b733a0bb721865da7deb7ae7d26b71c07bcff32dc3629ad3760d32f4a0853b2b7c8aa8b1c40b9ae40b0210e3b1a340d678b829fa4da90d551e6497c5ad23f3093c102abd33e5dda76daf873bf594e1ff4a5328524c3b7e4b728dcb8e372f7ee1eafdd97f988e61ebe44d20aab65d72f6707b317004b493982f2da04cab1101fc32e142e1d27d396b7536e6e918c7b7cd3c467accdd0b8eb29aaab044711c69422a121ab6d5ac8a0ddfe58d0fe32ad31aa974a7c6ad4c8483b47dbbd9895551ae8c9f95f2b993042e7def129dd5266523e0ddd1ab9164776c7761c91e530c43c57d6411efbb6f8dcd22b59728bb2c2a89d796efbfa8dd9199c8aeb3ab036e54d6664aa50a52a1fc1c40aca442668646022270a0e31bb79d8724c5565c69911a366a1ae9f6da751b743b10e3190dae7325d34b3734561b771da30f54b2203d463db1ed23e31633adc193902cc90882b2a26c9b66459dc39a62c95654d13138ccf12eee6e8c6aa9a165c4e22d72c3518d013d6b621ae97933513bd534f012a8f74e93b2253f8bfbf392c80fafc7462bd00a0fa2d58c691567ac7689437c5babcfb639fe4882ad7c6ed4ae6595b04a5ed2f0f5fdaf41f9f50e6cde65959d3e101c9ba234d66a8623b5519660a7cee7f0fbd17f2a52a40a340d901b9d7b1c645f0712ae40c52e2bc05aa327bf1bd73855fa3c3e500577f3bb4e96a6f8e814c45d3834731d877410621b3a699d72a05010f7dc914bfc4e06c5159ba8344e8c212d3b1f2ece13ee643a30bccacb5d02f9f15dade99a804187cc3802cb3b65dbd103efbe9acea2a68458defe90f65fc12c273c60215ca228001df0503d96aa9f26935aaf8f15fa977fc78be975f499c3c9654fa6f4928e285310a6a2a99a6a93e134d1dd40dd211d542755c2c102f699d7c00b2f671871444ed398a7d0411718966968f1696782729383715d64c024654792939bfa90b167c32c2dea9067f8383bb69c9a602390e88c24f76f977c992c20b09868962fb9b06b39e2b0af7c66a1e518d79be5e16b4d849b5fdac9186ca194fa179fd7e9e3cad48471a9c11e7530612f172da305819664d4bba944a8b7af6102e2f45cb6e4e759e76500e7fee19b734c12f0ca000140ede2e7076fcfeedd7bf8296eb2d4f5a392593662d3b940644eda137bcfa5a6962f366c61898df6f634ea9f6e4ccac35e24228414175e0f638b426b5d7d1a4f18b083627eff2a654c8edf62c565a228641c66ca17554454f8aaec58e8979043b3911ba6a2348003650e66881774c8bd77f06606ab3a0a06ad8b5fde126716fa60cb752e56a6cd43038971b82862a419432c2a7cfe4d6151cefa51d395ea5d862f3519096309d06932ea23ba36744207ba5c633bb063e0b96a68970e9abb83663e3f5382e354b5c2f0592071375440f38ba084629cbadc8eb2702a219c1833b5ec0d522426f82007b8ebce45a45399a4fac9be06970b89a7d93998b1a10dc92e08edaf265e5dd04f62f7519001036a0ef0471b3f311e9dd96f40353123ff64ce8633a9e90db83cc410b91d01951efc0698ec69bce56cd23f030770328d60dbb279e9a89973b6ba4c3c7ae9282dc197d40526102675e73e5bb6d6592a29e3b689ad68dbfe2a2b3268278796d1f91c086b2460de31e82a7aa5b1b4f3195ac26e108d4140ab3073a46ab552ed8c15e42bcf156964be72ca4f416cb1626df65cc4c90ed8f2539eab57db24be0a40a7c55de107255e2088d47c5bf6da7a86d361c3c85c04200539eece8427a07b855e9733a72672778850491f57569667124e56c2645e7fbf7402d30bd490132f52d489544a70dfb64b7c8ea1b58c6d813e89dd155830836c2d0e0dcd77cc40a0ffe6fe6b56107ac395bf776c48ecefc85852bb5019046e9f21712b6f373294b5c39a6adb4b5c48c19aed45b7fc676156908710b9a3000d94bc83c3b25ec01368888a01671a010d4341e06ff23e63035244ea23b4088ce41dc851df6bfd6bdd3a68866180fbcfda08187a230d1381d4ff67dc155979a02a03468067d1ce8886cb1e9005f1b39f46aa80a2fd9884d3f09d2c90fda0c688d25e4a3d0eae5037330c3b22bdec3cd7d28b9540aa8fc8d649d2647ec2a2e2d1b6b4c3f5c603665844621102f241a6486cb290ad291c78989b64ffa5f30c042fdcd429356cf462c312b8adedf8809dc205d0812b1cd35ea11537bef52eb1b712ebe591099bbdc141cbd24fdbbc149dbe688c9e325552e924894c97d6115fa5d8b4200be08dcf964924f3509bdec1f62e8bbdb154a265e4e710daab000a1475bf6244dbd527575d6a81c1db2a25cc86df94c38b4c569aff4beb140319e4763f310e53ad6692e94060b974a459656a7a0883ce64693f107d910facb9d139baae3b2b00e6869295edef684565d10d43cb512f6b1492399d7a6aa38b1f5393cb0948c251bbe76621d818671ce66456fadfa2741c4f2f53617207f98e14a5204b172c3ed26fdc865f891df9d0610ba3ca88655c2eb2828be4db98addb8c27ff680b1ccc382fc7900e69e8bd209711a2c7ad3ab607b8dbce18e46172c9ebd6039061de0e018a165174b6ce56be30096a3301e2660532f69a894cfac14932fd19528e6b0f239cd5351e0a104e28c6244e0922e92d40e4230557effc566022f2c114812ff1fbe028efad27407c82c4daee821786a8b1eb56d0c7256344c08b25ba3b21bc20eb4263c20f7153452bda0ecd710d42c4ff1c4100b951453e884f96b5d2d718b53758144de8cbbce7968801703c702c179ab7689da740f7bd12824bb4f510e62bc93fa96969b906aa84a65e5637ad6922ea766b6898f039389208eeb9376406fb05bb651b66e61036aaa93083e4cc571227f6f402adbfe699dfed321a8c15e53a6f00fbfa73f2bbdf6486cda5a4580f3ed7e9663b081503892d54c84f394faaab741191420a4b7f4957f6088556191616359bbea35398f4c22268e470c68c96238fa7c1f573c975793b4a0f4f30d5802d2ddcc1cfbb06e2dae701a27a35eb20e8815db2486fdca3b4d8f0d95db1477364a99b4752fde131a528ec5857381f2411e59ed70b91c0bce57da734ec45845d7f4ca1c02a09aef2d4051c4b81c124e15235dd145695af5532c5cf093f4d5ea7d9a3bd58add4075f688ef64e72883723cd3b9c72f00e02ed7151b84f57f76eb7fbd58808016a2894ebddc1685fcb33380845212c7a190b5030312a012eed3a830981b91c824d2c1d48e26a2c29030ac9c36c0940c1f3088f102528e48d6bc0984cbbcef2a4403bbc56945492a4ddad2234a137da547b8444799d5123fe18bb39247aaa5f9e14a64b72ef48326c4d9fb5269a95f7bdbb0e3f6a07980b76ecccd8ff3b3c543f04fafa66905630da15251d6180332357495b8b96db429657e5eaaaaa6a0d2319b22a02715ba057c7d1dc4438d1baa5ccc728b642c0af0280000d6682b3efb5d16cde16d1caecc24576b38c20b264ecff6db74608216413b2b794520657098e08bc084f521dbb5e59bf6412a49b245694be5e5d7f297ce60633c383ca8f0e9230fb1d238aaca98ab0bee3868019d03042f13c7e57406a72ce3dd7ae5db76bc7aedbb5db5f5686e3b2f7667ab680e242c4cc885b742af34630f75af282e52395c46de110bf22c6764ddfe82fa9245e6d854bede6d4557cbaa6c5a09ac09e8e01396932b9c1b0c4e0151c31f78ee388e4824b955586555559559feacb4283e10c66d0426c17482597cc3182fbef390db1267ea28062ee9dfbbe2890f014315a88b942dceb0f9d48700295b961ea437d4c458213b098242ea1a1bbfba99bba1f0ed26f781c2b1843ae21a4da753ba7fc60b7766b0cac9841bd497b107fd7988d434478045cb96f9a1e1b1e16d4f4a617c563c3dea0b9abb828c88751ed575d6b7068cf518e3a45513c29f5d8b181c1e81a5765fa740cf715ca6749e4d952076b70bb7de50a0ee2360f5655f5bdf75ebff7b41f3a5b8ca77a853f0975b6eb76aa2f0d2a68982625b808ce39d93888bdbb5b0446a2abb44ffb58e92a0a9f6c1f76fcc54573acc518e32d86aacc6241617183e89a995ba510b716a36b282d38864f61e10585052fa1819246b10b3142485d298a67e6572765de699b0627e027758210eed376dedc2f84506eaaea36ea931b693a47865764ca63669933819e88cbb1a14eef3949a4a74c6e46e220973228c0eef74dd7a9aa880bb15b0adadadd0ee342eceb770b8f49dc0ec32f6d05387cefddc9e66e85e11dec74e5803c2f6aa747721389af32fb498e7e10b7d1e4698a3c5242dc749072380a03c2e554557b75617876173bd2a08fdfeb7882b89fb677ac81f5dd8f34bdf75cbf29dc7353b5030daeea894b109d7bd3344dcf8919ef593103460749210c58ade9390a56ab2333ee38927aa88c09be5a7a940584736e17b3bed6141052b082d428c66a9a7490dc17f849196030f53c18bcc04561a22d2dd882b28415d4b89b55e8e20f942b3011e388a4e3d04222c718d19afa93440a559288c183245f9838cea02c399dd167a80f354c6b581de0f9131a4ca560f2a34112939999db55f225a131fcb782c6820bada22b5f8fcab0fab0f68bd750a29bdb7486fb840697f8877269a37e24991492c9d38f490d3d653f2635f48fdda63394a80c1f6a6f89cd81dfda53410c98bc9ee59ea702ad99d4a0314a9e1325d8262b937b2632c8e90c95e1db2023ee197309b5850bd35d6c250b62ff7afc6b57192771db7edd5d5615e8037315280497dc8d1444f71ea6692131e9bbde1a2191485465023ea88c3b4c2366dfb44a966599b6635e14466d0e62f1e915d8919b6dc7986ec398ce39c70205743a324dc754a601391bae86cb9c7b0f2144774c9237a488349aee2dda86409a8dd7c87e438bb88d42d3b54816a95c0ac90d9bdb3289339336aec4ed062b42304d4f774c2371e9e20b2e4063321e9c13824bee4438c6bd035ab3345021d407df49311d0eca009f6b9e265015b1fa5c264c7301eb6e0c29f74188aeb1a4736e99c4c902dfe18580da3269e989b1b44e70c9615caaa0c49e9b5af90127cb7542651c1320449d7af71623c4771297f806f5e102bf93a773c1dc15e699ba450dc741178430e192d95f40e105fd62f60f0eb628cd6e035c41b2f089309e2cf1b132375832dd34f1981303e6a43ed36798669a609e20e38b122481c2a4a8e93924c49831c2661615ba2aacddbb224b155b20665d33345db097c3c565dfbdef6e5206244363a84f50b64935350473ef92e14c39de42a9e6ca1d4dd6f09aa02103403b51c289096e709413265a8996e675273270d2026dd2c11392aaa60f54c64994eb053ad9c2c90f60aaee1ba6c27387a039cc2b0016cd14c51286a0854b00d79bef867f8aa0a56b00981327384142c98915a21003c4091a34077522062eb08062329c95db840004c870164a892d2ad1cdfd7ea1e012afdcde5c28409ca4c10710276c50199d9b639a7d75c3d56ccde180043a4123166006a1d94d40252d322c63f4208c2590484214b4c00503b43cb1410e230cab424b515c33352ceb06c8135cc02b34665e07b00105c7f042619a6bf2170aaeb96e803ce1a3a5ed4263745e08c0a040017942091a93e1f44c00b63e4818cc4210984861843d29c3d94b4920d21228ab905568493c0c29f881a644dc465a12d2072e14fa8a62ac608c918ad3731d794704a0e25298ad1263e66090aa449fa949c7744d371195b66fd04e340766d6e182a263c3a626dde427919a502c95449e00df50d4a9c989e6d09f9aac0e4fa88f269b433771a23a10a1b3f3a989fa982c595dd4864d4e54e60995e953da740395e97793ae99a098ac983d49814111b76db24c188caee9236faab889d684924d6493ad973069501791bf4d4da626b3bbb2c2a5dcca056a828e81c46ed7ed9e1221e1e8b51d132e66e52b3373ef62e1b9e79e7bcf8a19bbaebbddb7fb392b68b71874cc1a6ece8284e68b5384fadc9bbadf5b23b2727a5ab493c2914bd5c79471ef063dc99b048b475c541ec5786ee2528873182a8bc675dd1a23f237ec0a2724ac8e08093ec11a23ae7b773fd7b204716f8d11f7aebbdb516660ceb5733ded1418a3e02e8416152206ad9831c35ab8b075d8484bc3b1119c2b156046c8fa4c924505d29bfa49528d2b9cdb6286141fce8e36c45d21d186610ee172738d2cda2d0cef68435c7d8d2a3a0b9722800fa032cace9d59ceb8d249abcdf05901c3be0984868673ce3531d589080549c9baa7406556099571ceb94d4265f4dd4f7b54067b8215cc9802d6000d0096694f3383fa853264406b8ee8187ec5c409aeb9f888aeb9b454c9a66445c1a935ce49274cd61fb558ea172aea0bab3f7117e2da7ecfc90768111d97540a3fca0bab85a5a5a545d42212bd518d16169155a346115844355a7e206af911b55c696911895ab4f891dcb4c9828119bfa28be4baaaa2625595f584ea223454d513d0f0de73cf7567469687ea288328820214a0104513151f4fce3dac99dd63c7153774ccec1e775c0a07471afb45834884dbb9a26f8633faeeae732d178944a216510bbb97c4d4af129b02f551e3476391a8151563864644336af7b02b0385e299cc30894baaf4d0314a6013ba504cfd57ba0c878bb84ae0129f45ca1a5db08f1791892e135d26cba46bbc6812069431a47019931fe5faa421ae288ab687ae591f1f6de7faf068d4f2b8355a46524651ec0c143a487b22d70762f0bdeb8da275911971eab69c5c25ac8f0e332a98ea55af294a1ec1a21599cf628b39a79511d729a1a6a7d4b2e14950192148656c43ccbed33432e2b6b6e36657910511a2a8220b2244b1031d4059c2a467548673ce6d152ab36028106220430a51d8025c9a924c010bb3921b25e32852d798554aaaaaaa1ea7ccea878a25cc0a52520c4a6ee1870a32269cfa43c5184f98d1c2cc8ccc020a6666babbbbbb49dd3ceda7b06fb170129c23de81ff647a6b3b3d71a6d777b3e5cece953b854b72168492705219f7776de64110fef4a61ee2f60b5e1de32f0e4bb4de3af64acb84f09597ef209c263dd41cfd5eda1ea4b90001dd3ae8d6af8bc234fb01ba2573f4d62bedda2a3b964dd835cb6ec37ccbba0d575f3e48e31ccdd1abca1cbede7d796665dda62b6dabee9e6559c77e61180884fdba2c907c866198dcaaaa02d293d269d350cbe1f3e8f42ca225982e414e9a9b1e478f506ab8b447747a382515e216a7b893bd1db7c393877d5feeec7c0ec8bee57e7129d338e5ee0c67cfd9936ec1d8ddd575ae5df32e12de7b0ca515e234e9ba12cc8d97997995d7ed84824b75ac98ee0c21753739e65d2a08bb2b45516cb13b6b01f62aaf10df73e079b2981b5f8738c9328cc8dfa8535306847fcb929bbbbad21e22e7c0bb99e32ccdbdd236c8ef3b75aa7cfe9eb73d5b5ca042fa6d7b0a44df556efb9e2eb552054d48b1620a2ab37b0a28a66e3673bfb9eb10d6cde5501fc110fd5e8611f7dba639fb3dcb1cfd2b830753e61448e6d327f5ef2f0b920387252ee772a8bb99f3ee2869444f0ee44cd2f5689764627e89f9bcce4dec5e1644f9ed5bb7bf2bc175291387a93f5254993f3c683265a6fe44b9322fc66414e23e6773df385ab8f3a3831cb1df992d37b984236d1feb87fa3d5985f85c0ea6975088fbeee494b9bd3fad07a7943ccec4312e0b5d7071646a175b1c99dbd42eb658324357182257f470c7391889bc32c6d8d73208b5f2c31ee961226eabc56a5125c10782306b8fec11780aee913d32d3634e2d883d3c63ca06d99360198665d6935456553dbb3e5e16663d033dc905ca7e6119f69e1d7bf64b330dd360c7f480fdf77e3d519474fd5e3badb7ab703dfe45693aaf9c275cd2280c93d4e5a65b5f78d24120128971fc5a2cc729120e37abd67a523c299eccee3a1f749bae341e29f3d2b2db70bc0ee48c1f4ff1e317be889ceaa4e754e708233cf558bd7aaca48ed35c740060c75b76844200d0b6cfd077683a4277d1365dc20c91aef3c673681b11ad427ac4213792e4c783b4f81bd182d563ac1eabead459a3ae5c9d29d699c12cf4e5b7b62d0f398ae099ac9331c8b1d4c9be51d85d76ea8e314aea80e49324b027b98d679866e30018761b6f6f3055c2fc417cff3bec1acc868d63980d9663355ace55664e5f67fce8efa4ae1989fedebf7ad46fd192b0f445326a1b8f9479499e091fd272a6cc81b253674a8373334a5f8633243bcb0d24e513ec9a49235ae5260abb8b9959ba04614bc2ea5de37b6ec8f4078d4c3c6e64e5ba2ec58698cfdd39e9ceda931bd4f36dbafb36ac6cc31b86e9d8e626741a2c8244db90c64df51324e1b9e9a16e2aa94c9373e335b4cd8759e3377e411c1007c40171401cdf4a13926e38d22fd797d613f284bfe0556e9666bdc66ddad27c9898b6cd4c98c6dc0b749d77492370ccebd6575377d0a1a6f35e448ef51bcfb1400ff40e0fb2ee2aeb204bea5cb125c74539ce923dc462c339b42dceecc675da380eedc64147a6aa0c496e37a43be83534d06d689b0f39706012a783bec109fab5d874d0a76bf09a01a1a6fba4136253b63cc04318e346da0ef7d8b75211d675ae6f474c278dc0316b7c7396933ad73758ddba9cb6c1cd1ddea65d55433e4962f4d1ab6a145bdc454f9224f4247bbd6eed31169196248640dae6c3c4248539ec629aec3cf3e5f42f4bc38189787dd3989b758ca1dc2e69c927d53b33327313c5c1e9a4b062fe445165326f3b8de0c0c6333f40cd9d9eee3c13c2bb4329c4082070be13a1a6113d27f9a43a6964e2792c500ab55d5d1ff63044ea2f9b407503df1acfcd344d30c2264d4827652291655d2da59912abcf5652a4805a73f9a125cf8db3824becde7bd3ddf4961c586b2eee7d9e9b0b36a115e9f78850552064d203f668829f4c0ea389c6f0e10d54a398fca8d90440cf756718099b32ebd7f4a42584383089953aaa711e7c0fc2e7a637b9697acf3df7ae0c677a5a954dbfaa8c02d50d7452f894e69a38294e4a77bb26ce4991c2fa9c1496329d9a4e51ceca70de8ee61d3b76ec70ab3b2c291a17504be7b9b9d9215c0b019d986a5588fdee6e06744fc8f5b663c7da1645a8e96d25e60c67da5faabd2124b053e57c353ba549d7fb0c97f4cf6dc151815ecc1a0668cc4a9f1e724c503ee9667a4caa79df94dede9dc9201085aaaaaaea3aa7aab36c219491cf7ca9994684546906842482056d58c992292e8569acddc25fd60c8faab3f3eeccfd36c4dceaaa4fe4b8541d72a97aa6e96c132277109a7209720644177365256d6ae2cd10415c99dc948cd9bc2788fbfe104ce3325d77fa66533426436d082eed70a9070fd983331ca8139a50f6fe5cea28717fac116e7229933db8a4d721841fe23a486272d331acc9bf32adc7cc0ca2ce99eed19ce170efec7e615677d68721b8d44bb1205af7a16bf6e6024758e112b3c656361e1d6aee6d18d3369e1f9857abce1abca511e166259d0f3f04c13450eeeca424cef43ed34c638cb8d4fd77311137ad02c49e7749080943180211a098d4e3f75a55558c1a82a83f3ba032a9f377b0032be6f5ec5eccea514042f33a26a7c47ebc759705d95fef0c88f54b6ed9ad5f9bfdb8b2107ef523f42bbb7eb321fb8d67667acd321ef8d4a3b6ed641168b320fca8b90489c78e3dfec234d1ad4bdbb6923ca88c750c3ed344c72e917409629d3a754b5e97a41e02691ba9df73dc608478774c7daccba6fb9569db4eecd7b15f9f3a71eeb879c91c3e754cdbf8f01436af5f775c132fd56415e295b31490b8d381d6fae252181f94d0e307209806debde49cbb6a9f658e116fea75be2bc8cae98e7b47b31b0a71e517f1f307a671dc84589ace452ea9c6b28be8ce5fe7dca1dc46d35172d331ddf48e88e18519aa30c64821ce6033b0062e89eb49accb9a7e25019f84821415bb2689ea496005e1afeb495d930416397d7720ea839279800dab8fdd497decbe28893a79660f0660eaa3889dd3d7058873b3a76640e291094f016908adf70e36ad574354d477a659111184055f51d70c023c05a0240f56d683cdf5fe9a070e1095d957819954856d9fd5856130875353233037513a5ead44689a2aabc22a5851d55581aa4a6e552804028164a6291c4d48a97b8720f38096db6041cbad5b9819eb303396a6a3f09afa4f6e3313842f49c419f78b579d0766e693394e4234ae1110ea1748abae8369aa4fd78869e018b3ef12a47a3fbe7f3106b5adfa067f8dae2ad3d2a28db4ad3acb561d0a01c9ec8fb42863be57bf2e4c478633bdd2b28fb0c3efe8fcbb91dce0ab7336e4fd02619ce1c0576fb1dea2b94cd16d389e45dbe0f922cd25c87bfc7b942ed35d8258d5f9a1db7048d38ec164e4929663c91e75183066700e0686540612093a6dab3eb1db34a6559765c36ced495c7ae9891bad65240d8210a35e555b49f8e0dd2baa8277ce39e8d8b9d507a20ec398a9e4a655a8bddba7537a2cb5395e90889bfaf4d035109620c5d332898095b82d13ed53721df7bcb420eab765d210c6887d4120eda527cba88d3b899026751d2d77dca438fb415d47299d3ab8c6dd209945b4486d3badd7e62a6dfbacde299d223a3d271e4257849511377484ac9a68d841aa45c68e71679193ebc977256aa7e9d4c79b4e7d38ae3e7d94e14c30fbc13a1c36ea11d3e8e052f3b44c50587c59226e3a482ad38f131b02c4a22b28bbb076d98f0be79223ae2ab9d310ba39697a10534bbc2bcc3555dfe12bdbdd2db7d174955c2afba1d3e9dc562d72490ba0327c1fba1085b062c58a152b40e8991d7fa6b53881618cf9a93f3d785285177366ea4f154f4c2d9004e18cb9bf80601aede99d5db223add9fa97fda880d89e4a3b8e93232e69c90b71bfcd408ed1abbb0010ad8d1c12d7a56e799999fb714f1276afeb2fc34c965c85197baaefefcdcca7e928ccdcb3e60198a912ead9dd34010830ec121f9c35d6be0d07010c2024615edcbc0d7a570d83a51718c41e5cda4b1e5cdacb2f44f76da6e388f9b92b364d4dbd0d3f8c4bbbafd43c9986b4bbed7caefdfe604a0aaed07152f59aca381144fd018214d4d41f20e060b2531fa2a93f406862927e80a0c524659c0278b3b98981008459707abb16b8ae90bae569a79b83f0830595a93f5740311130f5e78a1fcc20ae01a679d0bdc820b6b60d71a720bc1c4374772f2b882fcef7eec30f93a7fe5c61c58c52be581d5c12bea4c5961443b472bc2489ef1bdc1d7a7ec33b5cd3040249970af0b353809f9d6762da06e711d3829835edf4aca6436d5330a86934f7db485c0ab3dab2889d8de3b4ebea67bf7268ee3834f791d69a8d31267597207dea2db7ea3a4ee1b8dc693a5bdbfa375406beb7ee21d4b77e75c50fca98d8fb17854d198ecb5b23dd692155195519ce8650dd5786398dba8d579a0decf1a3d16b682e2ed789e3f0362c3ad45c5c9ee33aaf5f9a4b10ec3a8e5d877471913cf0cc1a770992e3a2e7b8c88713ec4d8fea0136f7e92de7a15f3d8756e338b41a276937b41c96ebac6cc80d7b55431b49182ebdb7682c5a4e75918cda56f5d0724052b9c43331f92a09cf190f4ae5c89169dd693a5bc45eef9d2bb3afe380b9334d8b08eb3bd3bcc4982dbb7affd223a2fe5cd104f5898bd952b500d5351302ff3e0f50bab70652995d22ba57469607d4941560601c19bdd3be1eacedf0c4e97113655ac7cb647477f33619dddbdb6490e0ece976bad7f17ef1032421223cf414c5a3434d6a33324ddb0e61482d67b14b76c92ab14be64ed91e205689e9554e7357b8c4a3434dbe913939f877e88332a840635e40dc183607ed9db589efaeccd764526ff789ff343786cdc149a770798c0b62bdc7f905a50b1078f71f509e67f6d6e7d73cb37778bee679bb487053f63ae28874611adfd2a2d3e075bdd2f669d7ad5fa1d1f5eb72b2ea990e44af13959643ddc874dad673bac503c4f44ad496f5e9d95f9f0a5972639e4f2433d7a7fe9e8cfbbeee7de53a31b7eb3b9c93ddc87cdad6737b921bcf9c80d8bb6d62da7866df6bfb1b25b75d32af434b6e947c2d73dc762d79766d3121d424b7dd6917eafb0bc8fbf4ed591ddea76ddf0b7ddb25a12773deb3839c7bbf5c486e3b2c715822467ebf9e653fdc73a6d031e7de4353e6d59abe7ef3696fbabfecead91c26779b9e5689d501b4d9b71dde299339eed727eadb8edcdbb6eae9fb6ab7da017269db4ebb50cffea6bfbf4ce2b044dce9b9d7dfab30b09d9ed38f7dce25adbb6c0836f7abc4eab0d3ad5750d3dee49c9bee939a9ee3795f6831b139bd9bf800c954c0d41f2b9430ad706296a6fe5451c6b4428a794dec57e61572bf60d447bc4e512a0ee39a52d65a750b005103c02ded7d737cd2f841fc861db101f0ebc2288aa2b49c905e1485613abed4858d6175c8bed443d7104c6e3c43bf66e6b4c5cc099ba6699a7080b210e91b111e447890640e75d27ff4dc26b9399e2246de468239fdc9be43636efc1dceb9712373d298673eeeefe6cad0e9b9eda48650ef6d6787e7f41b1b33311333df71e87b24f511ffdea249e9dd88f020c2e3c61fdf0832fdc69fb647ac14777861d7d6060909e9903b3ca993487fe720ba66abe8f86fd8e172430a01d29f3e4d64ac0ed3575e9976bbe1fccd5d99ef9516b31fd36f3c940dc176f6531a1d128704c91d7771794856691dafbfdd20711c001a29fbd1594f3066fa0eb9c5496e4478cce4c0d17203bd26f3a2349d2649d3494dd36aef3be4cde9063b323687e953f6636d4a5db3556e94607ab874368ded9dba8d3b0cc90d4a89985a69c7d2326a2789f098cf46a9c647da191dc3a269c7406a1b7b7fdb36ec3b41182389f430b911e1b1addce1199239efd4b769a28e01c1f69d922ef0d6a71fd1354a91485b69a574cd116be58694121df589088f897d23c263860efa3633adcd4d8f1a4965f630fb813d2724b7a5b221d8c47e44d7e050c8444c3c8389f098d441729b99d3b331ac0e98dc8ae099d4af5bd729c3b1aecc4ad337e134a1a6f3699b08e6fb3682f9e63b04724d4aba316c0e93e4238f07d4928b4b61b6abca2dc42dc61149071552a450999a8d51c1575b05b5513b371e21b86a8ca25ea74bf927093d7d6ce72a8de3d23a96baf34d250f89b2027a8b1b363fb9f7b41311ac598bc78ffba96c897ced189749c2972ec427211958443114d55da088240af749f009cb2cb28f0b83738abb5a7a42fd8aefd109ab66c431fd7d694274fa328609e51357c533e1e261278c5454878433a6fe2441c934c0d41f24f83cf79eb65ada5f417af2c63345ed98cdcdcda5659cd87c79872f82ae88248a4a247e83248aee75015707ae86b920641e4a22ed0fd7aad41885c7be9001bae7a6e79e11d41989c257662697f2f5e2d35da3da72db23414246b8e9a4f6d4032ce15a145c99242e6953ec2e771509ea22c3d14265f83a9bc654fdf1118365ea8fcf1547c5a57c4ded228b334c920e16615cd2c125e56292b8a48e9a9e6b1e41d49f1f243ba55cca35aa57d2c63822e9a0a0982e0ac730f049c10c9050810ab25041151d5c616507558e60061f1374d143e9e008538430e5085b98d7d49f238031834ba7ba192e6666485b9048596491c5142497c274313f37d29ee072b3bb5b695cf3dce1a9ec987776104d230d66dde1d94f5c8ea71c418a1186d0450f8f126530638a0da6a0020a2ab881508ee02384293f468802084edc40d248809263ea4f11d430aba93f4668410f94f0b498fa4304267383431063aa144ec422d6dbca3413f2648e3217e1b9815a0124ca0a50246e49d8d9904ac69c4db9447d2794db3a09d72997b6e2f6b914c639885d2fb4f1ccdd775e2340572e6539cab76ec9488411f03ba28724e4921312921bff0989a17336242479a6957d87756e9839a0df30419fb41ceb3a2de976ee57831888a990e136c3110db1539dd9faba26a078c9419cb2c14ca1e2f33245dc76c96221c50a0877094fc3f0cb706c5c99e6090b6743aacb62eb968cdbca2278e60df8f8c68aa064ea0f117ae6b6527e8670655269828a94696130301bc28f301362c98dbf590f3d5404cf901bb71ed2560990fd0db95912869d0d6d7bb445222506b1e995a9c46f58ce7f706e0fd3f01e611a24564b4b5b9722ae16ee8b85a5b168331de37e5d9bd9b81e395eac8800098cb07cf496eb481e61798b1c7da4009630e7874ed104f486452a2b60dbe19293397b21169f1f0a5972137da513bdf0206e2467b91e2ce9b3597ffcb6f37283689dbfc3d3ca810313718727df6cc8e558e70bb164bc232d165298c60a1cde7da1226e2ba58708e0b014293c89f0e32dcd8825a205e9693da41109dd4567a7f50d81ce1a4f90e44086dd6538182b575505bf13ca77fe13a2f33950dfa872b9e750cfe9bbbf1cea3a2fcd866c95460223f0d6abcd6d3c3b58f2087c259120f19b0cc82437ea7df3348de21264e6ecf03451d3736e320b617abc9345f0ccecee98969d8bf0a0bc43e8dba9adafd9a6f2bd22a11b515600e8ca0a78e753999028379d32211bcf8c72d3f7dbfad3aed010b7f3693c97e582a8dc785adb8acce627845ffdc1bf7ee5def64c309d59db19a3ac00cb4940d1e43c099d3ae82e13c2149439f1d6292a523f282a0a04695b9109baf20e2e5012518196875e0196b7b4481214699151e243679151e041a73221fce957143d136117c91cead86d38c2180fad479943dd3abc6ec3502748cbb0cbaa341c9888d475522a5d82ec7c37c2987355a02eddacebab34e569e25f9faaa9d29e842eb70d693ddac6b315d921248b44812f12a57a48889efa050a923dca9ce9d9e755690b5f5d873267faf50abb998acccdfa24379e20fdcb9ae04451d225c87c9fb1763e54d0987b411c9678cc72877fbc9c3e906eadc8b4e91d467229f727ebd33b1b52044ff6e35af8970dd94f72b316d3d20ea14a1756ae28743cbd4f3247eaf60c669e989921bd388190446a82bea5c6dda8cbdcbfeca00b2653a2bc44012b780208217cec428a095f9abcec60d4c514939afad385cfdce2adb8b627ee55a46f7851fa962ab79645f08431ab53549430a90369b93b5c2a5172ab8440794a2b8267b6833c70b908d47b945438a6fe4c69622ac48c4c91d348cec9922bc5906e58c42ca29d2c2dda4e6ed971e3aa54120b2850a62099fab385173387a93f5c78317f8a10c6dcc1f1cb145026f5aa3aacaa2a5dc350a04cc09d5f01277bf666cfaf0012241c70b3efd99b106b3dc4983b6f8a8accea5a69aec2b4230e4ae22e938ea12e921b63daa6538ee8a148941f986511be760c119f2cd5377d4164913a3a6562d71b65056c0a8648d3c97a831d31374c8762f90531aeb40dbbe82319622cae0a634d6f42da4e57dd8677ecbc59499e82056bc1342da7ce539866243a7596c2342ca77e615a8d575abc48632db8449da506f5161fea3b5bb41545ead84358f55245dcb971cf65612f3d88581566b28407b10a97282fb844dd865fa8888c05b567507fe10175ee6125bb9006934fe0abf71967a0e11cf3abf30b0f98860cea7abdbae31dae5787bc43758c77b05e11f1437f92458a6c4fc7503fa263a8b75cd231d489a080deec918ea1aeb32d130b8715c49beb9b9ea17576a8b9549a4b25d941e918ea3759cbc5020a530bbaa565484810e587bd75129060e5fab0e652bd5daabb4f7f07c94c2e181d431d072571922ed8932e98fc255daab34b255d26c077afc03ef30189f301095f0ce6596a24e55266ee171b6c0e1c98887bed6ba61bb816065b58314dfdd9420a38f5670b287eb6a0e27a2e651dfd5e1201c42282079d35321f1733078f0d160b139367883cf5470850cc775700a76fedda5b11179d239098a00447a66a49ef82ec5be6e8758accada7ee5d8d9198b347aa3077c89660aadcf6c8ecab66449010cfdcdc5d8058d3499dd0d4eb1773666e9ac6dcfacaac803df273e9981c89a91189a18e03989f7becd839c7dffddf303a9abb571f88a432ada3ffe063f903494b5e17cf06a708243737416f79c8a6433a5b30ecd66df84505712bf100ddfa7ba9004c13faabfeacb368226dc425eb51bbca580f81340b665ab22b2d7209f210da1ec273526b6ba1a63c4089c98e90b78b23333643d407b5c18e27edb4d71717c46d66864763f3bd1da6493e4c7be9f100ccccd933929713c42dce9717c4de88c0cce7dcebbfa8800849a356a03d628887e0d2ee96667a4ccde64a1cc2dd8abbcb7880739b5019ac8a83a0d00b35fbc03e740dc9e60fe80162248ae2a979668d6b62f25f501063182211ae0f33b9db35a5835a3d33893449b3aa7c86f80e97f87d04350419361e375b8373475c7a59c23fe26aa2730d5f96c42a6c45084dcc7708b5a6b1a8946e75843d0b15cd080000002314000020100c08040391484028921545fa14000c9290447c5c1849c32487610819038c2106800800808088cc6034021689cfcc90ce38b974264166641fb43e00f1ed62fa7fcab88da8891b57fcbbb453d62dcdf9a650b507bdd1b8b9777f2c041d06b29c69623141ed56409666a8723e0b5866ec8fec74715c20671f6f618b0cc3a4b784d09a6fb3a4d74e22ca302d200915036dbf72907bda3676c2a0482f254ad218e02b65151218463bd3a02ec94346802073e0d1fe96116086c373a79cb66afc1f37f9b932cd71f4e59cb7a94e46c1211b0b736b0d95e798f79d3164ecf5172e2a2635cd5cb40dd99006fa052a6ababbe15a6a11747944c2b01c330238b33870963822ca5f690c472d6a214d9cd06beefd7452533b5e2568811bf44af6657819b993b7b560d2bc0a60a20d35d365ba03190de4c2d89fef808d4a1fcbc175e9c0d93244ae427daeed31431c18e5dbf4e2e65de4e6e9288871c7f7898304934375a4c750aebe730694d4aabd9ecee74858f3d5546d5a7130bf6107de35673e683ebb1c58009416e4f2ea722e3596cb30254055c0b0f860de9f124582a756e7c85f2b140b2f70e49e20245fb8507d5c7e8b22e9c0b96831988c7a14dc22ae5d545a2995d51016b05031f81c956f1d65323c0de5001a430bb2fa2bd60bdac7639300b3a5d87324e5783c0997513ee1e0cfa3cace8f3cfae47970580cf70f19d90b7777861cf57f8bfeeeebeeed82238d7c3972e2e6dc21d4771f9f6471c7c4a95be644502460f137545d74795e7552f44d3067d2ec3a3988a210b3477fdfaa464eb3ae45ab44b1fd623980ef5f18e1f2646d50b33f6d6b0e752d7785a78556933af82105c5da70f94517fd682b9cc847039d544e6db3c1cd5a1ca73182185e857a0d492207338a6ddabb889330c27465116a18a922e84fab0e393a82af4c81610ab2a9edb27125952698de6f20072dd6f7c14fad05b036836d3060313142a63375ef04b52ec2641dc8abc0029fb3ad19d8227dd7485cffdeaa5d85b6c04551be023a246662e1d54d4e653d6420876c487e64540c3ecc5b1cb34072093884e1d8fd5b36360f0429d269040e11e9574c68ea1ee61f5932e6e92342c11da11f8dfdc62f276f8f2c952433609eaa354906ffdd59a346c5f2d7ea4d3ac9a547573c20ea02dfa523f4fe5b8a729008b145e57dc799a936be3f63f1be3fd79b343273e645330bbef24084d0bda2c92f769a580616768ba9aed43e7b2cefb0629c8d96fd442684ea658d5dc6552ba9a5ff56f9810cb78e32751d5cc705eee02eb03b5e6026eed4f4b6717599d5a2aee3c9110585fc78206926a3c9eda8d73929a7c4b39e4e0bd580a80e1ade323125badbab7124734c4651b310ec49a91e8e1585be8f37a3f50c9fef7b6ce724d30b6db1f92a7a55a38d75cf040bccba51395a92d5ca5cfc3791d0bdf7981cc7bd8cd5f7412c4fa90c71bba4af0c41ac572204999b62e56bb757ec7db053d5338cabc47635a4dcf07edc8989fd1af106440b4064fdfb6b342c0c933b3fd71153e4e4074fbefc8f08fd64782ad9102be438153bf60c0afc91e496b4c4d68ed3eca301bf9ac2f95d50a256d8bd3682de3686b3712d0321fb9836391cc0f06b530111088d01d2c5f7848ab1e31ff582bdc18f0cba6d71b70962119034fd92fcd0339738d2816b49c712975ec8c0832ec81fd4381ffee3060f018f095080a7b7434602f2dbf74270d3b2f40519b2162b857f644e06368974fbe3a3acb82bfca6fd587b0aaba825cd5c7c407f172d116b8b837c86ea5d640d7dd5f32176bcd45750bd1776c3b5aaa66dee916c5816bf3ca6eeb5f85c099512282529374aad9e301656b940a2cce5d47dcfec8b517d8c62eba77b240c4b6f875a56cafd10ebf6b5bf907d40ff21597d8a74a377904e918ee29c6361c03a12402cbca65ffe25edaaa14d4e3b1207ab19cdfb0e1817069be1962a4939ae85f6928d21f4dc128f9f95c7b98a05417c26cd4b0febbb041504984b4027300cd20c02bd4f74f3ea624e13b57304dd4ce2bcecf5c5d6a2653a9083e51ff59cda24571a23e477d9cc8bbc473ee25e269882b551ea68b1e6e7de266c854a8dfebb7840141ce822761630daeeb32208124440f90370bc896b806776ac789a9a74e10d517091eec33c4d1ae4406e7500594a5a8c199df4691bdff4cc837b6cf0a723e156e027f0541a416c276f8410e0e9099f01b1cf5b3aef51d4cc21091e087e7b779272b9494c34a6205c0c0b200c7933b8b013f3ac587535e91fad20208b04c002d916419e433a1a17b907e0925b24971a6bb7c431a74ef8da3ba513fc98514a7e9f45cf1a8b1bef8a9cb784841bdb05efede3dafcb6aea1abf6840dfd23bd4af06bc8f64a5e0bf9719d2a9151cb05d6afafd439a4d0f32b05f8e6a41a055e2a7875129aa82b9d0a3254741aaaa83fdc14bb79864790a0c57776bf1f89405197b7215d94c383ce0c6f1a369e2e5fb91b920e58143e4000f5e89d07054c2c4e8aa3e9e8224dd7c2aabd77d063616b7a5c2c1b09fcf81d42dbf1c5e5eef00257f41a6c4bd160d845214503dea3845a1dde9dd123ddb77270c41ed4ca515201bbf5d54ca9fa18a2bfd8d424e40a7a9ecaf6de88b83d9faa63a9d034bc064d0ee83f52362b975f0329e9e4a9214b079a4ac5cb62341085374ee1f8a9ba9b02c468fbbd5dbd8826d14fee0ab2949e0519f6760b00b0ec2be64b8b65f1ab6ac1bab9cb793da85ae375d72b4269ecc2c16e0aba8544b00475df7e5caf2b217ccdf722bf451737a528445ac636c922075e061166f589aca113a0f02445246fb6b90ab54d8f585641d1a90b704932c7200ac10f7c020765d12948dcba101bbc66399cadde4c0ee6d432d70d3293352b6a395f716b663c5a625e7457da6fcf0a833a40696391be80ac8a9dacca0ba6fb7d354db13cf358539e65020a31fb35edfbba81c9db5a141584ebdfe8263845716a0a425fdac935e409649b96281185a6feb97d9d6380e4964dfac901c2a79ca11af1e901bf02c858208918a5f2443c9579380781527284ecbbd2de1749152e52bc74258839d5970726c8c093cc07e9722608f02b80dcb9f51d89c20191e7db8b4c512754d60c190a14d987f9d77e3b4509f1b1e92681a97b4662751ac1aaf15e507623fd786f998876d937c07eb13300c440ae29deceda8f4fa1403cf17369bc3329921a94ce460997bd4bd91ec6f2a8275d901008e741fed81fe5357a196ebe801927770904be0f63fc1e8f484df18ae24d93d68d8509d480b60d91ee8be0ed51f51ca18026d9af1667747230d8951b8ff9c4b2ef46d4e951a1cccb95d84907c2f7c4c471d0f6e2e05d0f39cc209d3bd0b58005fa7bab3e26e8c37f0c0b694890338d2ec323e85d2e75a0313ec49031fcbbf5e71da1a3e88c6dc843f9c320d30b0fb6151b35cc982204e9821729fc12a273ff05b90e3fcffe0e75fabc40aa8b234b55d24873320caa064bc5539d108b8e49a347b77f63df7a12902fef4f144cf003f88e970b4f52790b5b51b28f0df397705caf4e344a449b59ed94de08cc1c397a28e96f1fdc971e01d67a6b31bf8e86d93142636bf1b189adb5da801aacfa258d7b029f2e64c0fd21a9d268a6df863e5d35efbd9eeea786d6e4708ee29f0c6dc001b4f7922009d141569c4d55a04208cf154834e49132bd8ae89de18f34c17b24708bc9055f8eb4857e1e42d68e73c1fec60b04ce3ff45f09d0a96239f513cba0189d3fc4c4653baf9391fa398e405ae1dab5ce03bc7af63daf82605cb651eab16fd22f09861fc3a0c975a7a8322e28878480fc49e6ed37d91e76ee91475d75fb1d7eec5508e3c0f528ad0808c47418e97896844feb521c87d0c9e4bd7c33d9585281ac03d7f234e22861a805d82299cc51e211e4097ff0d64109c7d322641bed44a6f6b5b7ee9bfbecf2647a4579dec82b147705ef344c2cb3dbd4d42aada123aa2da010b0b959b0a1c67aca75602e532efcd09db31effa03aa467684aa48dc87374d954e17d793ccbd481080a127fad2691e2e1063cb83e2bbc675074081d5c3b81685974de1959a17a931f26231708f15cff84995cfabbcc31297ed8c3815275b73beb617581a811a6c57a8901132e8960b9c811c9ed67d4a05590a49a703999e866f35de9525d7711544e7f329a219b70c242d50850f316a46c1835c35c0be406c56a8e5fca8825f3e3869af37c817768623f7b9f88303a8eb8b186947a454b5517b69050a54b7bcd06b9f40072a090431477677268705b6e143b76774da395460b8dd77ec0d009a601c3e789dd43495a567d0e8311351375941ad8ddd4c0d7a7683157585dfb6b3091fa38e8fa213517d19bcba00846781dae8c9d97feff452cbccf62e74a6498bb057dc4aa88e41b0d4aa491704b53b59f8b9da65f083eced0823edab6a6ccecb7442c75c900e33184e8a858f2dba3d083fb33e24402f8a4470fe042852a9b9a232b011be8ebcba18b8e2f5c3a49ba60a7a6aec7fbe014ece743c91ef54e01f652fee58edd42975c8f20767b12c97ce61f43ee347992cdc3ed81a6d12ba014153e865e80a14a81882c156cf00036481997038a13c979016720c04519e014ebb7f0126da1d467b0f3cbbdb5c2a8e0e10a8c2cfee90444d68b73f8d6b58c20e59df218dda17a492f43be181039abc44ec92953de937d63a98aa7c50d20b266a807e8d102a493b3e7d63d192c4dff3b2cb88e362494e9c35d2cc774ad55cec2fae0b316f5f66da23397be5d5f0e0b94d684e27e3ac5726054919d187eea9d5b83a766afd816fa1c4a648f082c9b52cf51ab3a68ab1a20bb88aea7c42b61bc55efac14e7ef547ab68666e30d1f62832ec5d0d099e6f390d5b43f4f512dddaa8d0e19244c95c8ef3ef01997d92bb47d88353d23153cbae36ef9121eb780fe4147ccaad9e48781c7cbb05f29addf091db290e8d568938d55b5724e543d8c9e2b9719f82220780794f9cca14bb64ad7060e408e4ce333f81723783c09cdc746d5ada639e75d1de531c0feacd88d9468fb6488c3cb98a39780ba81aa87aa70ad5e43f7069ce428b70347f4fc9fc59b0c6a879f7636cb011daec65497ca44cbb91019ce2cd6038a38382672483488ecc8814a156711f69c13a90bf4a0892cdd8183b8763a29412ee9f2405ba3601f960e9cc09cb5111827694fb321712f78f54b0e1e0bfd0e4d4ea8240f5cb93b43a895c7939a215ebe8c01ffb8b9078c16e852cd7d1edf223ff202a6e59885d7ef2b226c2edf73623fd925ea9764cb55e97900c974944aadea206acbbb09f2cbffb23c3f5b4357b37b4d31a6a99a8a1b742fa1b6fc2f4af5495c0c63f7c7e2564f7b381d91e494a3e2e813c4ba9e7279d104115b09042fbf782d1c05c473220ee1eae45acd054ad5321f6ce894cccb3bfaacc35d228f40e508b4afd95d82c39349259dc3733f92aaff3f51d014a43493eb4b09c9f4838e9afce3db7d3aa5dd17035d779f290b43bdbf836c9492ecbbfd158a4011ddb3b0a020333a2dc48d867a86bf2aa1ebd0283685c38a0e54c5bfa147444056e094036605014702c609c2e01c4247a2c9e08441237241252872111bba2f174b0215aee9ef154a28972059326de5b00cc5e1bcac9cca58c8437773ee41471d58ba7616e16b332a64d64c45ca5f47bce08333be019c6489ffb58f1836d243f62fa8a660037ca9801aa7c167d3b6e22f772be413ee4dada8c51536faa9c87b7758f9e6210b4f2f564ea1fed111a9429f39a5174bd484c6baf2c0852cc1ef3b784c8a771fc33944aa69fb07113f4f063b160ce26540b26bef283f3528ce19e2fd93e2f4de7a679427fcf5308b75c7825595c66fe7d6e223fecfa7b4848e2fe92ac318d7f7a86aaaf58d89e071c230a85851550cfec6adad6084266b10e12140cf278dda32b45908db2f5792d306fcf98b192a17fd3aae37dc94489caffa28a2d4e9d951eb75c27fae7605bf1c96b69889c0ffac773c8bf48bf9497b4ccb85de0d085327cf2cdfd1cfacfe0387cd96e754c2a752802285a7155a506f51f61e4b0937381778fa407388e5d8decd1dd24d8a4aaada3bd5eeb4551c0d5f9a3d1c9648090a569040f80673de2e6eb65cf525cf24c9fabebe258ce423ee1b8e96e961a513dc4a7cdefc0a20e6f3789617bb34627a6b2b6e8c5e58bea8f5684fe5f81a45692910b3e69dbbdb1818d8761d44ba087742777ea2d25d6989bc3c4502750a638a00bf05a7b6b07dba315751a8df00c90ea6e8ec942e6177803df8d9143f069153e2fa9cb700e27f1c03a34e59c795423d36dd0507d123b597d52525abd87a5d9a1219a516ba82a54dabe603db524c4fd7a7664e2e9247d856814c1474a4f2fa655d124f0fcf7bbe8d388a4b8e5274c0aa0eb5ba308d5b81932437840ae0094e48ed4e5d2b843885fd63a2a834c44949244e3da297dcf093cdc0398ff424fad967045042cc4478b72ccf78bf09f1c5dc41f50f80e9a12f19b7df756c1c2e1e5a302ed10799db093a0a310a10850a6210658376dbae5d40bc2f2c0f005c5b2417dce9e71b0dd38c5b683f3f84d3962850ffd7483f0a201e478237291c43e0504d1d070e13f6de1f05d311270ae7dedaeffc2d9f2af0943830b4dfd85c990c69b66f5083408f6dc936875dea972d0bde093c2bfb63aefe613c52a7250e3f210058b9d4b8ec94ce1b0fb8f797e8357493f62ff00c1cc752c8a007daeb9f49916cc89752a5ef733fc87439fac60bd9ed9e74881c6abde46b05fe66b399842e8765e8188448486028b9be92932550b8c9154aaf7154e35d164937df683f94256a54f7671417578923b23a9d191970e3ca7abc310fd67e80b2f7393874c5d5f164c01e74fc966cb2181f5eceacbc61585c5c194c56a4b4681418bb38b5a7855b70829b35670b8d853f9307dbfb0f730844505ae66c3033638ff4d34ff1b7af37e42850da71d9e520c8fde433093a763d77e55563ae5dad1464cf95dbe724b4e43303b5c50ead0f0fb8f6800a9c9de0317fbee8f6b27b02db7e99600f0333bd25bb1a4c7d042fa4d682256fe91e902c9167ad1355f939500b684286e64d5af267565cd7770aeff7eebf2a77cf98892a1e842ac76e3d46926d7a48d74a3c9d15506a3de5077f3432e5530a185e454dec8c307b786483d50c720d9558fd3ca14908b4a132534a10491f9d2a3ef9dc71c3f3f02d3d9028e1b458dfd4f6fdcec063b3852c9599e95250d4835f0754c07b4bdf08aaae708ced35be27775eb5e1e566afd1a071b67a92a33deb6ce9106ccc7d465d368dbba77262e6973a08d62104c6bd98aa8fed7cc5171c7eea8d3ad49d3538e7276095f71ae89ffcf72401326dd15166df58efb521a8c1528a82af8d67c69624180fb9999618017480fef75b8a3e5e14a4d45b33bd0eeb8966d0c8af3d3dd10269507f488ecc7a1cb3078194329937c7ff49c890708915a1f47097e4cd0219e0324c182c79bbde59a0c081b3339bad528d5b28164903ff8db35356b3d07205f824e924f41ba32a340e6cee16bad04df0fc43e1bdf4216d91082c93939a18a3ae8c316a3f655122c6f3f07860dfe9db3a4f3ec9bad2a47acf92bc6fe1272e4824bb19afc9e446c12a78960f661f868e986200205c6fe38a3589284375361eb61c6c10a5061d9d6d27ae710fe725a39a7b1149dce91549ce9b5089b45a8b627dca1081ee9a7fc2b4766e43b4294f474cf4f46d3015c87152ad345be6df1711c3fa11626d22e6a16cf3d2477169ce23dfe6948dfe49306fb0ce0bdce44634b895146701566eb15a023f5fc0a84d0fcdf40cd1f433edd26382ada8a80430de7391b03dab120255d04e93f6c832a94c3b201d697008bc0c98e6c2d2a5e7ab492b5db98dc90364acdf34bebf6123adc71b231c90e38bde48914097a98b44f86861546ac68d15954af2b5a91cf73c5a49caee7844284a8927becc78aea18e5db52a209b9f16d8c7e714673d59384540daad9e85b98177ee46ddda094046cddd5bded423f3f61603a9059204abf36670b411edb600fc5a92679071837bdb933e9a0430efcfda2f6ea2c3c5db1b48609dab3fccde7dc8cdf26d58844b93394b4eed9839bcf746ac57d292558767ae883cf7835ba1b81b64ec9914843de8239211bd66a309a66a5af58072fc50d6dda8ebedfdd52e03cd8c00fa342f3cb4413b85e3749af6efc7c765e691103e37b5c41521ab4e14b8684edbc9ae52882c0e6c49dc5cccf931ccb03d4c814d8b298590b20cfffe5e86a06d835522e3a646f6591876ddd3063246989670c5d016e10e196f2d39b6244d379294acf977c5bedaf902f12123c9370f81d4fcd4c2f1fd5a2f088022c04dd28953e5140540089f4097bac1ced2624ec86d873cada5c233ee9db224a6f4e8b6b2f72f0e8f1338b47a733dcddf9cd853be8991eb199aeea045ee06d86d3d0843cba64d0ab7dcbc35e6589e2c8520eea6954b5f72ff9a8f4a773d5110ba84a44154d138f8ec53fb962326ddb92afcc0b5da0c7b407068b2cd9fe7dd81329b7b278d4266dcc878218c43a9e2e2f6687f2284d78655f9497a3226541d18526c8a6148016449380b746d98d223e4a0ea807a42962bdd569790ccac7053e9ed1e0f1144e4dd120c44f52eb64c6182c8869ab04b8cd247a688e0fde92cf5ae2221a676c570401f1828fe17d4e5990edca0a740827e3a0a25b9bb0a760a143de6ca400800bbb0a0d187c75aaed366b2a44b6f88fc7dcf063f47844d723faf034f058c376226f7d5f005385081639459fc3e265b20039e8e3201ebe2ff7f981ce4a1a0c6ba5ac992ae9e04416659a1e8228c8b44db224a7a276f938b807a3859a1375907e03f0b045f94adfcf16401e638149e91bcfa59cfa8d5bfac86024c0accf73a36df218ec11b8d4a64909b353dcb486263a50b319333aeb2171832c383428c4e413394a923cdd5c52e91f7747e36c954aef4493ee39f5e248d67cdb8ec1b35e052eaae507858ba8cc77e8e3c5dc264d9d57a201db8d61cc1bc8f25c7288d823078cb6b0e29073d8673e785b5af46404eb9a697ed97f2861c5073e36be729bbc40353b122345244d4071043748c21b2c015aa76884c311dec04d47a64272efb0931c6423c53327de253822dcf487027d9d113a804363628a16c5c9a3f552b7c944dc2061499ec393c9cd35f1222c846161f916520134b82d53d1100e0901f2bb2ffa36bb575bb139a52bc8238933e4edc77ddeeb316283ece1d1c1eced34012f96b212dc247551355d14c7854d37c6a647b953b1a9826280ccfbdcf1e4d2d2bf00dd5a2c977432ad1fd1bc0142d708d15893b9c05aa7c0261a54edaceb815c3ebf38f126e8b8cd35ec96e713f23ef4425bcbaa64a04be9dbd8b27f797c47a320f7de165e838691caea10608ff429c372db1faa6be0c400cf038ec8029b85410db7f306e5524da11ca05399412ed0bf53d894da3ec122d0bf0744ff54d0656363815236fde0f756eaa19218b9b8cf75f0cd66c47a2d10469ff82fc65ec252e79723a8220a8eee574751544aadf7ad8655d84c29454364af897d7a6fca7210ad26565ee1493afd21ca370db3687301ff0afcac08dd1b9bb3a6ef30d389d9b00a0cc90fecca19c835d21d4fb35946cc74480ee54a13eba216aff119b0b7a2f9170dabb6fa1807ee33e0eb602a0b3daa0992ec9fd603ea9761c87818d0b402fd87866573c40434eb63736110a3f54cf42d2c5f2798319affd411f0cc69fcbd491b1a8081061a6d7540403ace101b8cebab9346b786c0576352107f2b527fee92ebc6c8aee327398119a52bf3da2bee34730a913650e95e4ba525284f32097af36e614731b8f2c4e80ab10344aafb883e8afe7dcbe90925accb6f4442e938884f07e0b7ddfba0496d279b86cd8e1518b00ce4bad588d900500b6cf0fcd86cd7e3e306365359ade1bf7651491321e066a8cced18f623bfa5f120fec6a45541c7f2e7a9bebdf576c52589895164f708670b5af299c97dddc689d2d045bb67cee12d86394d4f8a987c4725f89e83923efa914657e9f610e6c81bc53f763e6139929945c3e4cf96d86c0126848c0446b441e2b089c8886b349967f610614b5c9b9c9e2bf3ac56a571a307379911dd4828b494345fab5630102fcc59a7407599dd1a478489b0490f4c51b3a1e01c4d7f6272f13d2a038be5fd8e869287fb2289e93fe8625eeccfc0a0defa2a296ef5ed283ab87ee7b82f61737366843ceca7ee2d72ad765dae5dccc5772cc25022b57be6d278481ae057817db97d18c2a78e7d483b4b8c305ff86d852963b8814e894dd416ec24f0343883b6c25ebdb8cfd6f6d031454a6dc4e987181882e6df8afa37f9eb50c49e1accd9e4ea85f086ad290d9013c21962b8a5ff18802e49f33aee41b3ccd8dd597d864a0ce9f7d3af10d5d1d68d0f5b92e09a5367334fba8765a34b59ac7ab47d7640d61ee2ad23bbfecc81f60fa199b4f592ea06ab53f94cb6abf0739b130f85319a18f4981fb39e5fb6e95dbc9d9da4a03cdc49806c5fa9f1561ad70b68aa55f0e07711032e6fb15dbb80fa64848a18d6fb1e7d3f56f06884390c3bc20f7440a92054cb3ab4639b92a97232408038e902a5ef9bb42d8eb7683f9a2a589e58d05e3bb9513b88654e81df4f76e82a36f0eb8a0b438b1dbc2694ccf0dc34788301b3b3707342ee71bc8546ecc53f765388b08b786776c35111d9365703be2a46acb77b36fd40abd0789841f6fba1431860d518637d80a33f7276da0c078014fd2b9c52018b0ae86e6e69287cfd29f1a7b401950c237ca6f20fbcf404da25a6d748a82a8b9669e71e39edc4907f639491151ef2e00f623114fa7d89273d2cdf213f26e0737049abb3342bc1f480ee9c450954f1180640b957a37bb3c849fff250a7d8ddb81abb59a552baf79bccadf5fb160df622dc31a1e35f1e6808b33c1e44cfd6ff4c09fa87a6dcbcd8b2f65456fefe4e16612278fd7573df23d5317fa086597e3dd5f786bbbe59834b77d529816139be00e84ba333ea6e6c6b32a2452a3551bced43278253c9e21b1b7550816e277904b1e809a9b2033e210b27c45227faddcb3f04079aa0de2284246698be000a20bbf47fa8556fd9501598d2cc6c20ff36a0761e48bc198c21b841508173efc8e220ed6af0d50e89b0978cec1e0f60fe74cc34ed1c01005d2cda14862e016bb2d42d85b197474ec0359ebed2694b159be23eb40efd0b3892efa107884ecb26f0a6d8e8172741b779de49db5cf73557000b426e38fd4679190343a82d6e68768e64cee1f0dd7632ffabe2218daba85266bfbf6f3061c549626ee7b3400a361d459397b46778e3dddce515270ea747a7c14c4d1f42745b044728541ea48259bbe8141e4a2740fd6c0ea19ee97ed3d7b8c8da74e57e9f287ef8a1f0a8f96cfc2f1327ea359dd6aae2f6e4089d9b32e2d540f5dc3240850b3cee89489e8b0a1008daa5f6a577a5651d3e67f674fb372a957faded88c72ce9a4f6c49b8204c62cdc606292e250cfec82476d1a2a2baf166ebd157eb4ff180b5cf77bd3728226cdf8c9454543d9c49b5bcbc46f51b8f0be3c645469815f8ccdc486eced68d832f153f8f960b9dc6f7c45be01222784ed5ac27c9a3c6f2a4bc31282c187409ce268245b71a8755d2f5723eaf41ffe8f3db772f9fa2bfa3ec446852536d534c84961288e6c12fc7406db0f9768f8af4b2098ccd2bce20ab030df0d261a242919e80a3c028961d4283ff13a6af7cb0ae083aec88897d47ba90ce8042cc785ef0105d3e702b295b0966b11f8a0ed9e262883ea6e57213f661eef0a0734f43deef0b270cfae00682731f394ddce5b59dba9a22933ed14bdb331fa64fb5485660d25b73f548e3dc86043117bd1969535deebf3fa92861f1627b4cca8b21a1e4e75ef188821ac8e6a89a7e1d851cc64007f13bcecb3bca3374c35a13d031861b7b5a7eb7fdc5b3aac3c2b64753b45fab55941a980c48c811d27ea1867a95795afd070d26ea001c105b8c0c3a15f209a4c2c4d629993aef5dcd8858caade77c3a7cd89402588c3502b2a43578516e0506d451e14757bcb829582317652a1ac2d04cae13d5bd974be80695a24599a3562795fddd6aecd06a536b6e791c994d1b3fc21d99229925f2290075354bf4ac036e8cacd9fb9353fa80cbbec50571926c2ab5d68f5635d42212e5280ff02fbff40ba3bc7634614855e05d5de1ba8a433a3fb1e3c4385d3ab6a67eaac3d316051495e3824641cc719c95b450a645771f5da71cc1054aabff0d9c04113711831da7edffc4c39644ad94e4930b6c1a165f2fd4fa66c2789f430dc0b716888df45072ef2c3a96dbcfd219ce248c3036a19468aaac25a9372d59fe4d6b3f07140e9d158b0ef1da5720da29b801888159789dd5b5768974b84ca118224931191d2d2a2b4630597a73601ce82e57b8fe9da21c5693ab133a0adb3b0986f85efcb052cb08ba510b3c5097fe4b56821d373c386b427e0e60921f4c8de0d5d11d72ecc0afe8307e74b237eafeb30e6f8853c816be4cdc4ee0e176220e1558173cb7441fcacd4a0fe0af08cec863a5a6044a44a05cfef37b6193dd1f16531bc550d2c613ba17cb73c126d6a120f7a767e28f0c8082bca028b198badcd818479343e7a43fc10d71857fa78f70136cfd798a714a6a50cbc8baf2f21b0f534be2b1423623406b828cefd84a94b213c553c276583ea874c61a2701c9828ccfd9388fadec3a64fc2f6eabb100a5def4744ceaccc08bb0def7aaa3bda686d0f6c98a1492fefe1df69c1a0878bbbdf2e437ae13230a951a8ed96be2da5f51628efcc1a5fc07277fc93147c57823b2ca9ac5d768964e9981966e5e31b1f2fd06f16e47e72dff106b7d2e52e7102726edee6ebed6ae9c98fce1cab81c421fd60699472f2ae121f1e37fdfd5e58fe1e9ca5e333dac78a24e42d1125832040a3c8b8d87308eca0f7575c9a557baf0d6452c49d1e66e7031bbc055a590a3ec99cc2ee89523922534c07449cfaf9dfb099335fd06640c3bd121022024ac51053afcccf55424b1080d680e4b7de825639125ba901967d653e71cf18b0808f00975bc8ff0a1d3e12ea9f58aa9f04d585c7dea6ef092c76d5a765c6015b0e49b12e56eb40b68440b068060c0a9766bd7c4758d0436cd2c9c5c80d46863f9b2be23a3bfce1fd78a93429ac92c16bb1a2cecddd6159845ea052a39b1fbc9a2e4256d154bb534b0f18902e399897569cac25bb632e2e2972b119bcdc162d19d46d63801644f8652090aae3012f77b7e79faa9a41210edb408488882b1fada18775a3529bf5056c00562fae7f98e3be9afca7225257b7178c6db674c7024a50dad56417889b3620d2ed42188faf7c7e1fbcde89e9a55b2f195ef27484b272b53c3a8372ecc7defb193667020a2ac4ba3652d5902cf4e9ad6fdb2bbaead01be3ade86b1e9d70607a2d3984d09c8cdf12b916a8365d1bf7caa9be750a9ec8a2bb73c6fc01526bc05584fe883420e3fb27ce0e83f905eb1bb5a57dc5a2302751b5418beae25bd6282bc366ca26c63db2aa3fd63b863b6674e6c9f1e4dd25d0dc3718861207d387fa6dc45c82a158afbac86c912ee482a7b5177570267b3b80a0990131dbc50db229b7ba7196d7c6a576ffa9ac572d08456e7d3cd8179910a08f1533d16b6d80be12fc691a76b74df0d1189592601a32c093e335a5fedafab0eb68646fa7b2aa8ff8a8d68e4de66a76007d77dd9baa23666dac88c82f90e81742371bf0a4b84193e44b41782080bb4dc2c65a497c42fd6f8bfa1d53a6008bc3d1b809181a9f50a01e4185094b8c4b60ea29f4258549c38b8806ca6ee860b28007c04c693e4cb9cf0989fceea020c9c787a4e7db77e892ae7c9c8f7b77016d1f5c868769b8b483f04cf8f359300af4e3b4b8128e07e6fa87873f6aab46c2801117f3f3810510168d3e9c14393ff8755e1cdd9275b09d6cd981909a42e34a253afe33380ce7a82d3bef7a508b39a765d212576573b81ea3e15f1dc4c957ae44d098731b6098836486c2c44131f65ed3a81b63c8a94552cb8afe6966922a33634c68de31adf507dfb3fd1f245e33e7c5aa80745ea2e004806917aef67745ae2093cbdcffeea50adc74c9dedc18c91dc0b3de52d76d1e4a55fb0fb45502cc64eafd10bc97c67430565179f5e2ef4add78c025665961dbb73cfdf3e2c39a6e519c6fad018e607f8eec747fb3e066a1bcfc568c6bcbf13b68eb53a0f78ecb05f6ef1fc9865fdc9a57c38200a4ad3d959952f40db21061cadd01314e1a42e828545682ac0740f4973cd1dadd75e01b8e21dc2ae55f01d56b3f9e6787221bc62a359e751cba1bb19ebf30000622c28f726d90afc016af860ccd4a5775c69eb411efb64642efb915e10f1b80b080cd7dc929a4b6515952cf0fa36e0c09e996a8b3ec10bd817e0eb7e5b28db57ff082aaf2891bd2acd1d7dd2a454e83db89fa137cf8c2857b4c9dc344ec5558c30c226abe3806d29177cc671be62fd364265ceded46d5b981921b76fb7bf320ef5074f5f55bbe3864bd650d3dbe329b57101a5475b5cc25cbfe258ba5e231371b1fce9af62a07ed15983947804051478ff1649786706029ce300a142684d2bea8f42c554d78b17765bf5a2aadebb03a343669bf51fd6fd5227f01ea39a2268bdd069836e9a993e55f7144266dbe86e9de2742fb349e57bda72cb34619fec1b941af219530775dc1b8d981170de9f50e54a1dbfda88aeaa9ace0d04a0e0330150b85bc2e8d130379155bbcc76d2b5a787162cd9abe1ddf4be4da9d17f905f316f00ca4ed0ebfcb91dc34896d92bb795ef69a910287ffe9e2a0749c5597094b692698a9e5f4862232f096eb62b185adefa8e27731934e9f033901b55c69859afdcf40dbd6deaf3b19688da3d8339d6fdf216254bc353fbc3b87f3f834abeb4421751c8ad443788f50fcf462fccfcb431e377a1d99d057f98ff27e337ebca745415dfd86af8ebd0693b00bbf94a568eedf19674bd4cad059fabbf631fe038efb5f490103e74166feb0287fd9ab9da1e03d09f9df59abb2e7c3a4a1e269dda7c32da1a3657374c41ed86330123085e82e37b06df69f969e53829840605cf0711d87e04276b3d03fdc9ec6b5bc718d1f800ef88b70caaed3f71c6131af58da87d9f9b6632bcc70ff2c084875f1d6c9dcda96d33a8f4f7980c0ee8571cfbad3b054d75980e5d945bf3ef3bc868ef6f5cb4d540b6408ac3b207232683d9e0a8d784bf2a311c4224958e13641ada83370a794510720fe306dfdcbd35a5d75abacc203d9ff06aff88b9ffb83c4d408da2cfdf8c0e3f127fda6cfe50e0d13dc896a9f6a414738231425381664cf5405d9522628ddbae1a7c991cdb0c5864b30eba96093a56f9422495d5cafe8395b9a289b4db0c8925de51e1fbd830acc2458a6849fed108192f0a336505d158bfdf35a97c30e92fea83cfaa1eee41e8f71047894e5066b5e9a845929d6a31491d0373ea557dc09c019d0580132dcff5e5eca4d942a692aaaff5fa4e47ef0d7bc54b10c26b4a68e61e9834675d14446f6b2de14be2ccb407b62a7578dfeb44f51eb032b453a945c4fda4243cdff920e71c6cd7181cfa82a8615c9e7d9fbbee3ff6525d6f1399de9da57080470226ada52fc1f06d4dd9e4b6343f4e561c1bb76ead704a1db96f883b6c6a4ff14194a3a163fdb5d310915edde52804b32aee29f7d0c5923a7ebc93fd6cedc6ba39b0ebd7b53118466f8ce8eebeffaf3f6ad62d794c74ec9a4fe1dda0d5d3dcc057ca64c506753c4486e24fb2a9b89daea405c11a3e2559a31b7a05b3e4c3886161154b1e490f4422eaf810a21af0339d75c084b9060cf2cbaf4bc66007739fc5c8845595f802f3ad3826c4925a6f21af0100f83302c06dbee76e83ad311ad37e1461e0cbd8bd1fc4aa95c830170143ef592cdc720d29765508097808b726e138a1c8d9137b13c5526e9715e3c7fb19e0d5ee31b7ba95b378a5dabbc3921597ba1a0e5634b6ebd0303879293eb3ebd521fd9e8267e67834edfb57f066f81fa278f2488bce81fdb00488a95e83c62a42ab3da7de1f7726b788a7d43efb8730f06de25d31bbd7fc9fde9838e04e2346eaf7281fa37cd55da187b9f023460c411d8ce03d81d1db051d0b8327d01ed063e0eea0b51b5ef7dbb0900bc9e9a1ed0d93cd20193755b2558a051b8804dddb9eca16024f09f29f1a41abbd4df6d25f4c6ebdc346c809946c15643c61d4e00f83194b3c54f1fcf71442bc9248d37b886f0a481f3b9a4a295b6e597f328d9e27240345d407bd5bd8cde5a5a9843157103e4a6d2373b9eb2dfa870066bcefaaad9a189c572aee2038e39642960044aba4eb43e22a445bd4928359894c8ae490e6bf0753b83e75ce1424313ec261bca6d879570c770fe146091fd7e16abdcc1e4347d58911aa6c51c422a27fce4db4621e2b95f5dbb32c4735248ddeb887f8efadfdb6fda10bc36bfc66f531cb4c8bc0c9502d8afae953cd632f658e85285133246d424f87cab3c9e25278333ca03a6078ec0d109dc92899f4d3b98b222630a24b0bb1eb77bca8821ce500494d42b46a6e5fc74da5a436a6aab36d71f7807e999bfa8c8566db6c62646e5c6bee8c17001e0d2226809fa4f91d7f8c78f0ab6e6e0361165ccc186be190cbf16c2a14f7815e133420c9f68471632bf4c56d2e773676cdde75ca2ff51e4968ac881bf58d6d36cb343ce339c2d6ba2143818c1fd4da8581b60b076d0742e541264c2fb2411091a8a559fe962072bf2eb5d40b9b88f59c8da4ea6f80a138282c64ee80dab0403909cb08e2cfc2fab5d0f58dc3e13c52ba893084ce366a0f38ad70d795983cea7b4795866c7c6c9c1d79ce54e10f20dccfc7ce3511d6f5a252183ddbe9299ab7d7a332f87ad2ea19eefb240b2d7281fc72609e4f0079861fb29db98c4fd4330b761380a7b667003145efdac3a23ea73ff3db2af0e3a7df1223d76990e59462e8b5890b34f8927fbf4d4caca29967b98e44a613d26581fc7421181d989422be9b7ffba0f7412c4e863370b4146ec36fc0e3cdf155d586cb83e56d0608f275e24ed4ea97cd16d16b3734f3f1dda88427bc083ddffddf37e88939d170e687c233a9b2b46241cb566d50d791a0b6a020a11f538eeae9beb0d420707823aa9e20af5a74029894ed1646b1f17e85b846115e5c5474fe0988143d31d75095204490c145dc2658b76d2bfac4ab8435180a7f26deddc6b53875a4e4f26136ee7568620c4c22edf031f83503b3f6e4ffbacd054d3cfaa0a219bd0a5c89427086983dfd00d21f09d495f2b470549a02c4f0102cc1d5eb7d9b4585ec2027925963c9a5fe8c4473dce315ca5d1b01a664f6d942cad8ed3040435895fdefb732f6648bd0159f4d09a2890a2613e55638fc46e9260568054c825c7aad592da1f7959e3ae089d1faf8ae9c393b026a16959a429eaee0246817c53eefccd642928adacf5f4a5428106ab5cc25059fa4a14004dfdd1856c2a9c8b3f4f224af1149f5ae69a588e3d01a2a1902d691d87db9476cfaeb40b07dd43a7eb7596ff2f79f24e55ff5b44c5eaf8355cc0942ddcf5ebf1ab17af72526ee663ba26e851e695a4de9aae0fc93432186c055e48bc8c473adc4fcee7b1adc382c43c97bce5480700f465bd7f3774ffb8ad0e8dad97e23efc3364dde9008504df4727d494f448c7fde3640bcaede2647f9b0b5d003704ec3b4e3e24bb671815c16ecfc7b7bc841663354a801b919f8d6f8e35d2c7e4bcce6de7725be4d9265991180ce9cad13e844adcc1c4b1d62c848b5b3e010368e9526296af6fbbf6614e44ebe003167dc318f5c9d623472e6f6bd213e0ff21eb6c54bd8d9d759caf5389cba06d72aea7e4efeaedd848a097b006b7487a064c6292b4ef2670d2563431fc5eef228570c05c86a7f1f6fd338095b07bdc0cb7a925029be257fc9678c1de81f525e804cc418ddbcbfa98c90601c914bad3458dededba14f1b55c98e234623519c7c08b5b64fbb6e9558990cd5e6876223f36684a19c025f27d7603c2a1b9894676407c581bd99c136f044f3db8b142f6de81d2461434dc15990d4e7c400c42de43257196f2e6749101275cc42e1366ed8517ad404e14d4a6d9e52551439100e1b0df72570958d55d301042944b909bcfb25e0e0021b8dd268d7679793483c76facca2017ed218dbd42687bd2a4eb1ae8b84445a4eca24e104d24a2441a8f33a6e549477979963b8f2a9a0926448113ba2063c552ad9462946be49cc263b9343b9b291dc6639f0f11cbe30a7c6b50df15873e64662a9ca3da4e57e9981cf5f64df26bad6f93cc4cb3c294b08f063e52b6b94dd830cef311b4f0f78890cd272509bc90976cdc363ab53d60956d5cb452e0fc8dfc31b1f75e6fb3e403853cc2dd1e69dfef14f971952f2d98ccda89be8a1c52b6a35d8f7785acafa1e846b75e4646a9d108fedd3887a470f602a1f903fa20d0c40150a76c8a39d0c8e5ab8cb60ed27fd75ea4c49d283c142fdc79f55b1b5a113a254ffdcb0c118a5fa9fd986568818b25e7163915bbe9fd16498c75ab007cad31fb4c774cb92692651f965ce4bb3483c4e7a3deb31b42621f50745dedac893a9a33af5070a8d3e5babd787d90cf3eae173bb41f925960be83b8ae4fed96e3c49bb63d8ac9996bf2a4a44237cd07fa88072806ffffc3f6681475ff28358dbfe912f66013cb6f9c206bb3d0091fd700bf2fbedbc755b22d3f0de823ffb87d2bd4b60699d8aff75b3efc20a4b2c90430ff3c88b24c4480db640d36050011cb89a4dcc3f5fb53e8f5f5e22de938c7afe5131aebdc479d0501a98f2fec15ac14f551c272018fa0f16eeab76e8d1f927b158f9182816a3e1b337bfb425bdfeb67eaeed0b323af5014105ffe99b9885a43da9602244785fc3ae84ac54d900e14414fc79f71bb2e64dc13df0d804d24c327601f71a6720c1b954c72c885c1899df5e45f2443ece704d9bd12f8b0a73cc063948b1c34eb9e36f37b2ffd6572f92228a16c2b5229442e8278ae4507aa4205eee4424367c8e3b65c78a901b6091d69f945604145e48c72ed7e8d74272008fd32a1092b0f47d09a9991de8476450f506a7364bd951a532ca0d29b16bfbc636570e8dfb160e50f9770c4ab77fc8b77e873b77f33b46c7023760caab99dac982c3b5e4b94b45b201f1b4502a2e70a0327a8fd99ff9ecd294a84ca3f6514c09ab012aac12f657ab4cd194766a1bd20aae80ad3425f0cb10fdb1d5fecdf7729b8bab1845a5e3871713c9e8b711a689eceb2445cbe62e901e7bb8e2737baf455598cd50cdadf72a83e42e03d66fc48270994572274688a6a296b4bf8a0311b999a99bf7e1acfad14618048153916c1cb680b8a06852147e481ad935807eba6434d9c576a5f38b1b3d007b632623866ccb887c779ad2972d6e6588e28e7e7aff18d3db8bf739eafb6875935df76c1bc62af600782724929e80a18755673178e6ebe6e3edd80b398263d66938b7fe7e38cbac763a68717c7d946c750045912e17138d7a8039ace4661b8132402b740ff4b26fc05121b3f76ccb23d2c9d2d384d806f180677514d2e174f3d423d9b1da42e3af5748d1c4dd4a53dd77b9e500710b06520e009aeca3c9e1ac8f2bfac36434705a6e500057193a7bd118873366c7b87798d2d35df21548f47f433093e6bc5382b44f45fffbf719777d81aee5bc8ca2764c0eaae48c5c4a9e1d0361bf8c766b3aa3f08518679c72b1f77df913d64793615582a8bbcb62ac17b7ae7b57d00ea6530794b62131c5908a43d2aa912e892bf7c910fbd207eaa1a52393603c2a2e57a06d523c8a67ff4629cfe7315f9825eb1a3bc9059730928b9ed49d1a2ddb1a17a37578b680f1841d5b402508ff8d717833fc5136f9df038f587cf314ed0d5238ccf974b1360868f264f8d0b2f5c3af158945c6277fd74ad6d928bdb21656f83fa5310d7f8d9a0b1b341225aab7784be53f40ba137df01f1154919fddff6aece407a13a60f06260b513a7a6488750504cb01cad601158c934c016fa38c2c49b0c655ab7b2767f46df26fbb26d2c35ff7aa633d4f06da944bdee7ca0175441c3295ff731b56eb6eeae4fbb2ebeb8666172bf289532dd5450bb82f2558e559bfaea240bd433b2904c02bb34641d96d23df0209a4e2dc9f50669314820f8bd12a087881d1ddb7836c0ab76b5f35a55566bbf35067cfcd5a0d4ccf715b0e9ec66a6fd1da5020f62f92074d110b79c51b96cdbce806a2a7c188b5b4ea5a75ee9b2290f6e602a296b54ca060e97793f8826c8044bb7401c7ba187926652c8085a2ac4198d7d291ab47e91d5ee2a86933e60911312b2c99d30b88a5b72c53c458231e1990ea1618ec50ae85bbeee6e860864a99c4259d5c37668c6d7c23abad52118daf76cd8a07cef69c15352b375832c6671b2b8c60c8e956ccac325ce98ed694005b76d46e55cabf672e6bdea9c82b4deb13013e762b8124bda9c582794370e083f879f6c013748b56619c4dff15068c1351ed784816c329f17382c243a1fcaf3f36140267ec6e5b18cf484fec7b3de644a236498317dcace6830f3b309b29d8708c8c4c6704871e3a2f6864d77bc230dd637b5ed6080763bffb8c84d602bbce379e955fec801b8750eadf631eb2b37cd03032d7f7220775ba0330f437068537b109bff4a072ab3ee7ed7082eedbb99f5d8b705f9cb135cb3c6d2acfd06261a34623a816d6dc5883a3e785d435a87ee0f88397952b116a09b8beb2e85023c4101cd03a195b2c332cbb04f11884b392a6f0a76c641f1367bcd5c42d9833f3d3d036c4457d98d3032d1ee883af5e0dafaab737549c425b1203baee5c19dde80207535d6b2db902fb724755d53fb76cf475d643acd4ec79304774057938f3a1cce43cf15b452e56cf87e5a858cf9174eed76542f6aeb69d422e283b746cb4db3ed42df2777a3d33b403bf0b9c8c89118bc52dcf95f12b6b4ebb12a6a00d07f4db32f2f5e1efff31e4a770e5d5e06189e1b5e8dc63f5dda9756af1812905dce40d3a98f9c2e0fbaf80038166479c1348af9d61749fe1da0b11a33c12fad60525aed695807aaec962bdac9e9fb34e87dcd51e261e99e0ee6dd6cbe416bcd11937b86b4eee55e180d02585bb6328cfd80a419473f2d24a529215d3cecfa04d7b69083c2471700de173b69d9519e78397d7d01b6cc876b4e6aee42995976d9b9c6f64e46eb4a575c61532f0dd1bca135df0478987ed3f962ff6a457662d91ac6b987fbcd36a62800d5309e999af7c6be0b9193a4bf448f251025c99fbda7f10ffd06f02b04ce79909da4c344357a22db8db9a091a8931051ba68286ebebd5332a33fcab3c9d5ce4d63160f332d9c01c6ed35d5aeece4666c6835c72b93d8f7549d4abe9ad31f2cc0ae82e9887aea2b4f21f688e24a4915bd53e489a5028212b38b9cd54feedf0946107430078cc92d81bae23684ea5be70713fa0293df4321700c7f0ae858c7cf1087bdbe371d558799eb46b67288b369dbe7e52ab1e131fdbc3c8e81461bc7613776ef48c7c7a4ed5c81e29d2bc9c273bdc005bcfce3a73108751b4d9a554f852395c72b4050546705b050cc1367c19b9db3fdc124545865514c5ae6a82cda10a7cf174fbff4b4d696dacb55497b5b795579443e08b79d36d4cef438fd85d458d6ce80431837b07c2d439dd429410e3fcb16f9cc07700dd6e4ae2d3dc083228a3bc0061c2752d93e8c7a38f12e9e1fed3443fc6084e331feb05d628618426a2f93c918736199c48394d5fd3b1fb3952a2cd991b3456849bbe6c5e4ce6b7cd5e01fc9bba4d771c0012a29e89c48b0bb8863e6400e988e261a75b42a0c43a78e228d19fc20d884209d939a34e15f80ef4c63ca7b6c8b558c388dc71f3bb01403a0c793b7b19995218aecd5095e9aaf24fc8ed69c527146bfe2f4604b07f2b362e262af66bb7bfdc6b66caad3b81a519346ac85cb8821ced3f3c2195b782bf51dc93ec608649605b19609df8e16500d8a278db39ab526dfd482cabdd8b4a5965979538b0b69af3c6305f89a97c1bb47283c1154c3e1497baad54615d621fe92f612632a7eacb1dfac845b36881564c4224a7593f5bcae8f00a7ba497cd3f2f2be3ef3869ccc33a7c447dd897c47f0914ff574f4a23de0d59b3d2f9f2a2da3a2524a9b47183371af84ac1872f99a866449d3139e2f9e8bfd625d6eae1fd586c81104cca5cd05e937e0a856bfafb03c170488e9c1500a2862e90de4c67aaa64fd2a89e25ba2def321e9db8af634b20e5d6af61a083ccd008b27484d08332705401a3ed30759f124dfdfda00c5693381b5d20b8227a6e5b9815f81320c23891a646d9e0f4b30b57adbe2a5e250780e556eada8ffe4270e2c5a15c59ef7f99fd0de386ba6c928a1b75dec72c5c5e4d349b1a0921c6d7f49c9d5319f7a20879f9d3e509c38e4b466b1133b4edc1f4e9c62114208486a8fe42b9ea80bd3308652e81b2fc4a54ab27362d08d50ec2ee617803dc931134f623f7d5163c6fb944c560e97649af62da4b693e11bddd9915ca6fc2e0b422e68703b270c677765de3c9b328e8df68d8222ade1ac8f4c05b48a13ff9cf1cfc8a62e7bf9be8656e212818302da628717d922b875ecb9127bc97a738da98bea78abde4a9d42aabaefe09c64969cb4ec887c6320ffd6f23f980a0d07e587779a8ec02a0b7aa2550ae0d03065d3274c2f06e07f4e570e63e6ababaa112aea02eafac7613b396638696b267a3ad49525fc5dc092f1eb3673c9aa54ff5445e2344bb2beb668d29dacbb6cc2b54db1732c5583d5967576447436e07a0bd79412ecf80cc4fcad156d9a578563e2bf48e99bff33336b520f43d51804b5ba50e1d5836d83e3953d568653e941b8993e3bc9013cdd6f2ef00670f3d901ac5ac764a2b00752e957675dd82fece0b4a6059fbfc767e18312db2849dad620d802b62b0268cbd2ea260bea5317f4202a8b448fdcaf7dc0a013da0c107c141eb800fc1cad7b94f452316714cf7cb7fb27452d7f63a912f44a8ad0948dcf08dd3a75b15b8b53c4e609ec947dea6ae91b940faf58aa27257d9a731d7b02f1cd72a9c3a56a8104c3725d071a00bba9d7facfa3c44de00dc51294e6bd83449d7ffbb539710e2b9de5d9c6c460c0f889b9db7486d7757962da6b9e1065b6486cba89137be4dc627003517068a682c9416a099c0c046642e67806af051ed0c4efa054dcded960c8edc480a45114cad9f33abbe5921dd11e24fbe69a2dd1c2d3ab7a5ed1946671b9bf7a4dd6ca1ba8bc0a860ef16d88e8e860d0ca8145971e674f29e432c43dc06586e0cb16806d5d50dbc702d425ef3c879f9aea77f1d845ccb37b306636a2631307535d1759ebc4f140fbc3024acf907997c918e6dc566cab70ad1841d422bd41200418ac651e5ce0544853abea68b7b9ef2d693eed532669e490d22fcea8656f4f917154c331d1f6ba6ae6474f3460f3ec3b1d52a76d105efadb5d0cb0a74f57da96876285d5a133cf9b5cb19c6f12f0770778c84521b93a44cc328c570ab1bc6af5d29f9bd9ec26afa61444552fdc6b5176ca9e05545225ca00dbf1e15d5b3c0345131de5a92ca056e9bca8775ac958577e8e46c1c9cef3f56cb0e7b8dabe338287f5ab938aced6e0fcb5abc2e8f4f8ad11811a7ec1222f169aeda8a60cf8660582e48a8152d36e615330be0970c306b10c6db9980f98ffdf5718b2e5ed72ae2421d195af48962f253b2d2fe9ad43b61821c8119c543e35aeb6f059a1557cfd88404be43b79cacddc89ef44b655ecaceec3de6a661d641e3a360749d05ac5d7fea077edccf653ec24ea2ce4fe468db9259f4bc3f02ccf4aaf1bd8e8d02f64022286ecd4211bcfe19bd043cbecbcccfac3ec99a001c4da336732c83daafcfe7d8b2c40d0c9976b1c4085e4a05cb343be749746832ef0742cbed697aa098daa7e7d4e3333c7c5d11d3405b19c317dd53b2a230e4474a9238bae925f5ebe7c2b6c43a219ad412e8bedd3701ddd42b4e0286fdded90c81268b7964a49cb3586070bdebc8ada54dcf0607dbfd681a263d1aece8ab64d86f67fded0296b8e39dbb963cc982d12a869ba103879c0667b33daa8b3b2f174a947b04ffeca659237557804db943a8bfbfd38603e8163e7d7626444583b398e7bf4eba822e81da8de7411c175c12b32214ca25691df194082505b922788c1e4f9956224038a8568586fb2ae2b58b1ebdb3b3b90b1df8432f33181f7a247d00afaf9b0061e9be90a96615c75a7d408544e7a697e96b8396b440a3409c3ac5f815070a58c942635bbcc09ace934763b686e38c0bd63a0cc5d71e65764f681d2a6dcf2cf44e5ca1187195c9a1b3603665da1cb20fd65ebbb0a9fc7524bb66ca9275daf480e81e0a9417fa8fed583b88dcebd79e6a55993da52512d188ec9bc48ea64824b368fa9a53917e6e46db7ad95844f79d93fbe39f87a182298be4eea057e0ef310d4cc59b8ad2e1156efe06862c77be5d3a2a7116d2b264d5f0a9108dc06ee1943b705e8594e9d987cd5e9d8bac9cb6e1d5aadc594cfe18ebb0149c35e50fd464a20f599576b5b69d737d97184e07d655011565c034083058d5745d974c945559a4eda3bb486201d301543b75508de8bb15b94a8d052614c05d650ec73b72bfe7c815c2cd1a0d5b2e62b0be7c2d334e7ca59b51582f963cc271e9c159e9e068c40c76e97fe1878260dd6a0d987cc0d615733c9a107b5e1ae2c14aa1ce0ff0e13e0b5d9ff0df9ad36e1e76a56b03db6df0d8a7b5f2f346ccf109c7d81930d09bda03f9f4d500600ac0c657b03d9828e1a1c8e33210545eb52de2ab170b0339f53346cef1e4e67f0b368a7adc7468ae9813895d6caa749ae5d6dda58511a210bdb55a4752fc344a837b4550d82744bfae5a77efa734773c1867b06808495f2d5edb0f154637022ce2a6035dba022f7dd6759bc9b618277a7c3fda12e59719f34e62ac7371b410b3d484879909cd84fb9bb535cf86489cb82a942eb24e45c478d3ec08e3e3ec9ad21b3677fa0bd0ee838ed9da6e8b5ae77e9b20802f02a186f6da7010a58c9ad78972c7ea1a2a1401a7eb530a5a67fb1fe61689b056c938344e5e412ee54d387a4a9ce028c5c70595e315e67f4d8ce04ae1a17748d9690cf033c0ed83bc07b1462dfb9670e1c127a5c9c0f45a21ebb3d5f091984f74a09b8d2991bf8c8ceb71ce886de39a01a6f44bfe6223d2d6a1297c64c6a03e1e6f031eaf6617dfb1a71843c703b6d4c3581652a22cb96154fdc02ba092c1511dbfd9812f27e6e2f86808ff806a5042910b88aaa0fa305702dac36e0bacb8f3a3f7ff6e779893da63fbd473bce1a7adc14bec8c654198c031e5bc325077780610e8ff15d03c2f445cb4e28f2e4f14cbc61f089eca06f15d9d731431534ea7351d6f06faa004709b58528f66da4cbcd84ae3ae28f3e704bc4e65977506b0b5a1b9f8b32ea655cb58b2889b0538a597f851d86167afd190760b1f6998b70ea8e5fc2556ba500e542c43986371ce2d954348ea357b086ce0bc8f0d19dcb53cecbd712ddc9b93b54f97c38f7ab74a3b5d068807d68ea08938a163f1931f42830671f66bd11315830456b4475b0f1d3b544e64334c00531696f32ecce5b7d94afe9d0cec49ebf7dbdc6462e79e159208ce2f0ec325e5027c4559b7227b14c39285f3fb4ae00147bb94607f79a6a87ccacc602ef2dcb6c41d8e7f7d085ac0cf6ba3d021477a368bf456f6f99711b9fbf38b8505b88c31efe7c50129fd762e89f450d3d5dc828eb983dd479cbcee42c3d6ab49f615c542c13604e5ac66076c946622593ca15802f1479dc505e12f6387d6a4e6ef2a20af66a8f35b5faa611a8a16ad5af53bd6909cd16db10e09ea16b0783eb99de0d034eb2c4c180cd13bc7b31491a591086bab0c3d22479313ba2de14b74d42ef00e46a2dc933094b4296dad5ce55a13f55ccb9a39bbcc30ce8ee64ecb2bee9d98475c4b565c9ced2fcaa2d3882ee979c8e542e8ee61404d4a24f86fe2c8d04083bdc3a5c3952cd652262f3ba89bd9ee2c6d8fe553c9cbf41e3bb25609bbec3d57f506a4983224ae68c46566fd080aa98bda58d8c5f62e7d7d6e5204aee7f6ed7105923c1766f156eb7757fb7be72f4136a17e9b6139fe6388e5aab54c0f1d8967fa0c22a0568402762907ff4f83199abf5081ce8629418a0f10eb46670b6415a40e962c5d8894048ec10e4e737ee5efb3cf7b95723358fd9c00d206224fc65a00177cd4c44eff313dbdcef919d4debb552597107c732340d941658d5419d444eac0a6f075ac41864acbb4c20c65367d031615f14d3f1022fcf340077fcfc864d44f399eff56f20d9aee0e303fafc475ed46701de6413ad038c74e65cd1578c19538fe2f15c53a5a278e0abc4ea17aeaa33d40aa6319f156eac94f8636d899354962b2f27ee3c364ea28b08448bb1a10d69a6e1a0e664f9d18a57a982aaa3709c05e58cc4716a1ac8d0d700b08b3fad3b0fe76b5ea24e82475c9b78a1cb71d9aac445124bd8b5a2d4b4f2acbb3f9e7bc9513707f23042713c8b03381ca2f73ec8d38b20ed819a48725d41fee5d4b4d59766beba591d91208661c77905df2a875884495ff572b5bd18e448bd9f848625350430ab3c8b7c5515e4aa54d01a69bc0d5896ae349e2dbb9b8ef4663f5b0865e202ba5ca0bd26c035286ce02e0ab29ac527f17ca8861603d5495f44afa078180022c5c8f3cb43ff7a6dfd732acabbcb11ff89e26893434dac2e3ffff65d860a80e645ae363300e5aa2d5fdae19c1b4be5e3560f22ccc8442eba8ec11e6134f52cc000d4e477ac50370107addc7796d36fd227bf0d5dcc73774af4a8707e9b980ead92106984476177e4a15129fbb965e25fc70092914f76cf1cba55734082b4801839ca2992a1a03da6f97f4541f4b7a74fa64efa619917bb3f9c4f511fee570ab9ea28a794b2c827f9a91f9d0f1eb449160ebf005f0a3aed152c9879c2f1dae8a9e3f7d89e69f4cd2dc8f22622822b500d3914238a4635ef50f2c67e3c58b39db2291ec37eb9915b2dcbfe3bf13a236a81e1a4a88f92957b22b4b2fd980b9cad6cf03f345451d428d13e59a71f4791b1b0f02668b723a5aab6a214e589fa272ab46f9bfd09df6bf148d45f016cc32be58549996bfab00999fd95b53de2ab8ea189573eddecf4d2c3e918f4ea4c4682c998b2f307a04e5a56a2c39cef5d205894b64c224dc08f47ac9de6484786b33122926dd607d64e5e3dc3787c161d439bcdc73633edd1672698e4651ddbdbae16e928a7e315351fa68b640c27a968ca1d4e114804673fa2cce1c0ab8716f523d03b8a2a92eb4474f731e2f9516c6d8de1904a64b0db0b3d2990fc5c7f547dc17b2d6b0061cb8c6e2c73bdbfbd2d7f8734ff389a0e2ee4da1565a44b83975e9aa12c7835109cfe70019c6b0163d76740faad2218419a6734d6e53dd4baa6d3de7824b5717ec4237132946776d07e9498c9bb4e91268cbd0cf32a65262d48a598bcfbe67e04611a18294f4c42c15a010614e474ef8c049f5ed3e1ec2f45cdfc71a783eb684eba22cf128e6d4735cc5931ccdd7a77494a5fcea86944ede2bcb2418df16b7f37d7a013cb10789a7650d99947a085c71c009c0da7d01d008d7904926a09ca22cd7347379949644392d706dfe0511669a2a3aa2bb01d942bc26a088d607bfd1f50a682e7b23e8798bd04b9284cde4760fe3f3e514229086b67a86250cf6cf747cf830ed6be8d31f4e94d3caad31601a9dcad4a4c048423705d0514fcf2208a4339ce80841cf6dacbe2b46114d609a498d6a72fc4ba8ebdeee3cd25da4c7461e0a39d50c2184a76559d824a82b13901094731a6fdaa660abd8d6b627f5ef100228875a6b0d2574d9c6e68ec509558740e81cd126828fc2140acd9bcb904faa7a345cea251ba643a1d27fc5d7caa6d3fa7a833d651631fbfbe5e27b1853a1c6d0184218592f3e5a342f7fd317c9c5aa9453be7f2a631946e6baccc299c042cc573c488b6479b4ef1cb9f4072f376e7a0f6822b1909748fc967a8e1f67e74584c97a744811f506dfb143d1b648b6ad7687a1ab8591d3be7ec15ae32d80a9b524ab9ad989d24aeb9e3f0c084aec5754f6ee502ffe766d972b1c6a0150028ff6272f2e87f67f9308713af313ca44e64426aa9118446993862bcdca4704570c1127c9f81803db0ded84a71b040e96c9e01de5ba4a0c2b865a41ab0cca14666d302509c29119aa82db0c4433e6fdac82ebc4966dfc04e768805eb10c18dd8c359f60ee39f7eabe0ac427cf951522f9e913c8f937b1a8056e9379f89c94cc1c23af703f66ff671b6c3c810af032a8964f0d82b5e386c7e85d286ca41d28c963ca6140db925dceaade275219b01e95e910e59b88a46a767112e2c59c0f2e52e7333244ff9b210cfedaf05051e66f97dcbf65cdf15d9227ce4c3bbe2c746eab6fa31b791390e1bbeb8cfc26efcd87db0a77a0cfc011b67f2cbc9023365877a719d1f071fcf4e142b9600a39a904c586504378becf5221105535f78211efbe4b29d849095f9c86368b70c518e40e58b82f528860c49f753add5c747e1db2b8cb389c64425838ee383e5c3b316644755c66d33e1193663b12704c0b1a56dc67bb57896c14b9015b924f69fe5ce1fc834713bfa285b6e757b3a921bbd85ec7d4024b98db59f397f5c7c15c9a3fc0a4ce2a4012415df0718b401dc37f85398fb9becf19a9bc23c7f0b975fd0811178bdcd8d96b9bcea3428174753bc72eccce5a4e1038d73f95407ec9d0663d6b2993308e586025b1d685af387a60e7dbee4ba069b6dc40d7abec66b64545af1b4e01226eb604eab70520d6c578f63886eb82312f5de88d93d0561f3d03bf609e3fb085abc05e71cd7108e22aa44c767c07835d7aa01fde678c5dfc41d8d114690857273276a9167a7da69b4f08e2e854e90eccac27aa4cfc9cde64db6e34f019c30ca91829786083d2b045917d14f09a9989e719719eac5fa007912f86ae1565c88cfb9a7970ed37718d67f5086b85e41aea6429c01a228571892d1d67d2e94bfbd15773c02e34332e3a6f28afaf0a61948db4df6d0754b86a58dcf87754673a63a008397d62b80803842d2dbd3da98824363d3e08c08fc35c16c118d3e6f19b0b3f0707b2b1ab3a61a4c9c87b2d4924f022aea485722380cdbabf49ae288ec1f2ce5007edba7a9db415bce0aa2489030a004419ad7b4b6156b6316c8bf6c277a6947b19b6a1cebf8ba61835c46fca5ac0565bb521c56681b4eb3ee6b7e3381b0f0bdcec7ed2da03d02fa322208cb698f79a0441f472c75cc4d9efceed63a70c00eed29c59e72d8ec7b008ac305dca73219524b5031aab7223103bd062b9d770297c1626a2627ece7051ca2e72d09f5078177b827de3956216163705a7ca2eed6b57517849e1ad22d7148a657dd132e989eb56ea7c3aef3c2659a9520656b3c906719b259bfee1d2e45494a4a2fe840598ff1a3e4c785747ea7be543c8fa443a77a86b2e01efaafd78afa00102fbae38aab8ff4ea64fb29717297f964925f33766ac743ec06ac81b67ae9e16428da1d92e3efd8a4a56c494dc0132061ea2a57b5506899a8dcb84840e07dbf0baff86a2f9ff07bcd485e4d06bb3a6ee4ace05384ac8f55229361fbd669cccbc53930edc033a176782604d60e24930704e03fad9946d038c87d6b87ad5dde0dc4ca71b257c0f01749fd5fb560fe5830650ca890e95fdaeb128e00d0b84b8044e061cc287c75e9f53b1b543988b77cf8b40b2a34745c8958c4846f592435bde4622c80184756c6142f7d3c93c5c858ebf5ccaecd76e7a7447744e1d293888146b623b28a09c46a240241d73bd6da2edfee493e0f2943b63320cc7002cc808afbfa8ed62efcbf6528063ba1d7f8ffe39698c5bdfe9bdcaff44c14c5079d23ccf1eb042eb3cc9305350667d9c02b1f27a3b5b1ad8a151580e554f62c5f878a2a84d1fc3340ddf12dd2e174294ec049d953a340c8388101c1d2281e172e4c862fe70a5190d9512f1c0a49e78880dfd8ca5880343f7257f0d18e3b5230c1c099814e75d271cdece81dc5ede9dbfc0d827481ee18c4fc096dba618b3ac6a752ce0edd37bb3b2d2b3b953d66d0139ee3ec50fb0bb9705448fb3bf2f9f9ecef3844d0bfe585c2181c847bc69a3e8e58bf006709a16c4c8913205fbacd1b854044194c9b46d884d135255f62aa910bd7e76513922f9268e843c00f28789e1df5bd286b12a328897c8e0257987dd1ac8bf95955722b0c56bf9dbd46e90bb2e3f55f97b6197bb5280e282b8a8bdf3b2f13b8723b8287fa5a9439e4b12baafcc60f554c431aea22387d3051ca4411113fa6e71e590332072c53be0ee189a9a7363b6d760b0a5015664373cbf5a4ac39f9ca2123594f9d1ac8ca9d411bc09a9e9756019bd8f7a73199dee3c798de5f84ac567baf5b2938cb0663ce8ebbbd06c093cf6a594e13d3946541c333a1211d075c537d6c7cd2996301075e8c1f432b0f167f270345f7a0017f10bf40c41d4bd0d43a96e6f723df0c27624c10ba98a8254889c65475d60bc7d0d9f2dac805c5b7d5667f474e03be1612a8d7cb58d087d09506e9d14d6653d50c49645107609e0ef852592dc707343a1e2807c37500d30a44b15ae7fe3ee989c5201713fc6d7763f36b92f13aca169047f83b142a828898424fa6a3d012911d9714e71abf20685329e2a38b106324c418c8b9be544adc6515963aba107cdaa162d8875aa4e55b8f945b7007dc19a2e9693bfa6dd50f7a857b2362bf8dd896c4d99227c57a06c3147e3f0b0cb599b807904e700d73528678fe210b0faafd2ac25a9e03a375a7e54f57a5c639810a816c108d3a3f90b4e5285ea2e15810302eeb76d178c1ffcf02e8fc38a290816bede55d84cfaaadb46bb3aeb778b2a46e629327a0c4940f40d37f60d2672587942fbcf66b94cb46e385bc238d3f7c1e9d12a9cca7757d1e0c49b4cc1255bcae2a09db531bcad3a9ae86ee1a9222511fb8dec1f301504039e1d4060d940a22cb2038e0c3696a13dc3d3e62c420961bdf0a635d89feaa22a0347f3d939c55ec04eaae3aa48ef55a6514724441d15204e911141b1f0872b0cd6f9d0d8570c2f845eabeab205d7c112e3157499f78f7e85af5340982f065a141b76dccbe7a4c19f3f37d48324f2058796c7244c5124c34590c3aa767838f61740d297ca2f4325e595a367df581f20050d87ab4e2827e0e8c8671639837caa29daa8dac8af5dd33f053a12144eee0e1ec943b7837581ce42fdd63ca3e01205db0149cf91075aa7305f6c366409d4ec68ed768b82a385c8c057562059348fff2c934f77372630568369bc031014503c42f9e3e674f0a49467b0d8707022224256ad7ee86ebb574886fc87e6cfe2b31faf42896e88008c31df265e731d47a5511262137dd7047f2b1d0e1ec0ea99857b82254ad869e252f6745317387c09c9a7edae374aacb63ae527578778f74f212368d2c9000023250bda2d26d5db3815521f76ab710aa6cc96e610eb6781140512e030b4732070bb3eac2e8a7f0e3456035604a451f4e5f1a80701d54b2cf7395b5d2da291a27080013cff07edb7fb2c4bdaab1af453f5290d421be02a56a296d04d07733b00422287352251c9ae6b2704cb6b921807d5992dbda3ff726bc9b05c1c97fac5862520ae275d7519367d4370d77681a46f3cfb96a6e93da8603c731db2aa63589437077af4c40645e066710562be37e43280359cc657f194d82c99c2ae7b07ad68598ad3f520e0e2ef11ef7fab7196e127b3eca230f8f2d3844c8d86fe653eda38f90e62ed0aba93c901a5860efa355267c4edd61454b27a0c0f915ce6cdbfbe9f281c48aee414227d5e5c34e1952fcfbacbf461a08e77d3706aa1a49a86d4e55cb32fa3172d6b7210a888a1fec766ef7e1a3bef3b7bb801b9679e49adb68d7538749968dc5a208c8729837710680b425db9943d4c281f5d4969ee8bf56201e5c270abc93626cb6e3f53a05c4ac4bee05a388e351e95346b6171cd24b3c2c5f53580540949b33e47f81f8fc6d75950ace1cf23af2e32e6bc57a259c3fd6e92e1f800ee743177f209186ce5503b2e8c60515d2adca9d867b71c173ff2fe3728e536b4caab42e89ba6dd3b2c3a8de73ede825662fa2131955372b785a2a923056fe13533a859b1d8c7d89b8944d20d10f91ea47c8d490eaf19158e7785cc0fb5bceccc3274c1028a6d1fffe91aff1c9c1dcb150247a9ab1515583643403d3a28b87b3000c01a42802b9421a18a06f28f0a633a453f71d834254af448a2c21812d8877e4417794cd4689a062cba0bb1b9bd33da743a7752789dfe522499ecfdea942910a67a8c27d50b64f0313582eecebd19b0a5ee9f533111323c1c10dbe177f77145cc8efaccb01778fe5513dadc6b53adaa8f87e1b8fe01d2573bfe913197652d3229a14badd5be527f8356019dc3f8077f121ec5d6a593b3d36039fd8f87b2170420900c71538261a24b04b5b76ee163715082bd970751fd801f44075254492f73ac4b8a6476992fb3b498149904adca1e602c47f0a0cc8a87ec080453e3f160683725aff0889faee541ad03644191c6eec22b1f2019b25c8b584fa9d86300a1be0ec8f70e02ec9520ee58ae90eaa1a9005949a86e688b1e7a009b50316afa8501318592920304b280acf00a44eb640858fc4cfa2840c6dbb27a8e7100add988fcf992cd8b854f439f2d09c8729899e0cc634335103cdfaff5912ce65df7e1398828abb963b4270013486d8201037fad086303c3c6021e4ceeb34ef187c10b34ab0920f14f61d4bceaf08fbfe5cf6e0390fd7ac2f3a372ddefc03127c8fadd64f8f3d2903d4b3113b477cd5e73f31a4c145119e1d0f8b4b80c56bbc48030f5e4e7960061ff985e58e19bd60dfe0ab737de1da00d6b4c78ea74d009fa11e1c55a00b7ac756f707ca38ef68aa528fea847e8bd7ad4412e636626b49df4f5c217ce6ffda16a4e5e261540eb3690ff488198774202db20e8c6fe4516794649d7182c98753de5f78a5be35d3814cfc6dbfbcc7de282969759e9ffaa13f69665ee04fb3c0e8313991db42409bbfe0330fc5e7d667fd776861c87e64b21f7a3b4ebacc1009883f0a3ea147de141f2170b9b513650f879adfbf6b954a9bc00ab10e705d4136ea0c04b65edd09aadf09dfb1b38826f018af4a41d6d54b78207f72ab90a0b60ea40dc9225f8d069888709b76efb5bf9e2851418e87d92004b296f9705429fe27cdc69d391f4971d4565b69d1a079d888f67ce4339657297a8d94c317b3bcf2128bc332eefcdfe03b246cc1f9083a8914b3e6c881ad4a5049ca25f32907bf1a8d85673460cd972c954fba7bb4affc3dac2b2e2f4f54d5276525e3bce3e90481b2e99dea32f5c6f8d3b5727e293164fd70d45679539e778a551042143cb09755c1636a23c2229f01380b9d29399aeed97fd899517591ea614812eac14ab22eb7f67781655fbf034917586ac2b53dd44b19b44327239d56eef5c11928f6c264ba516234d48f0ebecf2929b62d19635947c481bb41cf0857f1afa0c8c846b459cf65f21e3cef5db890a41ef463474d7234cc53ba0858df86d687c9d6aef44bf02fa34ab321eee7b78a07e0c4b496c15b1d5eb6d439ca4c4e53e805127031dca5c0548f5fea4e1ea159c2705c53382a857015ac2e214d88e991824fc7d664d38430f6e464b3e7dc4c1915944982f0c979a726a1835f8f4122a882fbaaf1f0e87ec3c47298a6b07b122640d4ea495884233c93bfc845969a2d98e25c4ed41a463dd341acd741013399f3d2c2063f101497300eb081c07bac4928f05b43ebc96eb58882f31a2bb48053a07923f54b035e4789ca3e28c3909ba7b470b5d7c135f03b60071eb13da3aab94c48e55fac6e330a6cfe51e6ea8d3b555bb174272cdc664df1a604651f9c9f117136991d99b2da1f4777e313d3e60f463b66a76cd2885045dcece769aacb85381a8795199c956a335273d2de5849abc6450bf17b80aeb2714978a7aa37807f71177e89082e088464cf3baa0415bd79bc31f6273b58c717a271cec3ffa530fa3204ac9a277c7eb7952ca8621a9aa36d304d1c04765c48576982e19899741981188b71cb87d68dcdb32a70b471ab8b1111772bea083eecb97b15f4ef968bf571459b43ab331bb8eedb4c851df5d83aa7209517cdb3831bb75df3192c97024532e3fd88464edaa9fb420905672cc4e32e1d0f8b4936d52a2915312bfff645b25d412f113292592cec852622ae9ea1a3bb479ba25225ea4ac34b86610380ffde76cd5eb6c931fd29cb895189a1714db2a3304c95abc555c94778c96d95a1ecba6bc8954294718e8262a708a6d4e55343459036829ca4cd4fea742324cd2dbfb8e3c21a148b6b828e91153a2ba9ffa041ef1b4b8d35f69a0ad38290824b9e99e359a946ad87a366091aea8841767fde421885a8d94ef1f3bfc2e8bffdf08597a72dca9e8424051f1be71b7e80fbd0737c8064b5c53c4ad17033f69cd903dcf8190eea76f1bf75f3bc17f21906661ba107bd306b3ef0819bdd661a8c67adec4eac73c8e342523d9c5234a25792487b1a11d7fa5e86509c7426e3476ede4ca8e750916de4f7ad052c4c52d560f2285541f54df0a76d662d1a81ab53d51f428e03681317d2d33edb0d04f10d2ce4cf708026c7018b1bbe4976e6911ca8d47bf7f4b2a7cc60d8f906865d28336e2b9ea9d6bf43543f5a11f7d447898577dce68969718c53da335c2181f3f582eed9bba43623511ff735e688c2f95b255eafbdb78311fd3fd22cd669d2a111a65bb32db8d18825605b1b9148ed669776ec498c00c6e76b215011a7c3451d2e88b03d7e0ce899ad4a22426155c8694cf7ca980a7533341dc7488868c41a2fb3f82661e528bffe460b7b038db90b94e5b41d05da8cbdfbb2cbd08b123d8e70b9c1046ea91256bdc2b9872d28cc463c3786d9ed7efd612cc78fa1a558db950667853c9e2573b9135f1ddc45477e3324dbbf910ac6e91c500a9b5460c88730813b2376beff4140d53411ff4cfca3865dae5f3df45ec49c9342c31e4fa8b3a490919594f411c7771d4ba917ac25dd348b191ce0f7bc0456ff8344adc3dd419800481156028796dcc841dd1d1af568507622af2f74e27691d3f600c8db7ef9383413a127b26cf527480d30338131d9e97bba8b1524780409221aaa4ca0c61ae96bd0f1af919e9636c68a147f7bd2e7fff89dba37020c4fa4c2afcde444732245e82d92b7060a12c30b2ed9b8cbba7988ee27c48429e7b89ffca3bea72cfba9b64cd39f1f86800df753da2890204117267484a1107647b6d295080ff1253d8894d5fffa07d961c292ee2fbac19017d3d7b38671eb174ac01d52491db6caa53bf7fd058e8f86f1a8b0b117e4a35281c2ecc9300f16d5f330637309c4379829aa8e03db23c96c8701cccf1c4f97c557b3b66738acf188b7f437c2f0f806cda1b6f9242a104633a5cf8b069292b828ef064b2c989a62675c66f787942ab01b30bd6c649c774b871a7d542dbe1b2ad75bd8ff12fc4bcbaabaf355aade1ad22b9a2258eabd80577313a5ded3324126cba391de2106655ba1bef4129a96fa02a6e9cbe597871d7cb2611f00d2c2d11797e5688425217c8c7c7a0cf4e1c1de6371545aeee4cda6a3968b48cd2ea25717bc9f2b9a1f5d3b7568772c9bab2e9dbc3bc868bb61e47cc8aa85d43b18fe862460befd6cb455113a90c7deab803d449aee4e0560122d834897cdf115a8a7f5b0079f10bbb43177ecffff28d8ff11cb5996a56c97cc25baaa30a9bcb190d75ae7d6b0160ebe482781f8fdb68f41d0bc7f7975a35fec0d1d0b3bf774978ee7252f2a3a6339901e44fd61e64a8eae7366da11696943eb90f2504902a5cc0d725ac93681aa999ee1352a75453c8a797fae99755075bb4edf5328769eec00ccb757f6aeaade2bd97c0ffded33393583a1b074b1ece2015a5629485e508c694d075a20f0d8df49c20b5f850c5b6363fe3dd64a3adf708f99974c6cb6b89277aa9119492218dbd3f34504fe915c80c6729882c3af11c8e1d7086eda8b2f5a3ce95447060bdc2cb4edd94d0135b1fab797d6a4dc7b6fb9b79432c9c204de04f6039b938c989d4e65accece4e271cd30908cc69088c20dbd2384eb54dea0f1a89e8574cc3d0b1193704b4e928c1bece8b2317dda41483be8ef8b7494a4cb7bcb0ebbaee5fe7c5a5d8267fc73301a496ebb0676fba92bc2712d31077a79549eadb1389e989690d9319b029b65be050b6d1f17ddf0782b5a6a395a7e4ae2629bbb55aad565a3785b1484d5ae837a5bb5d17aa107727040345d7755dd7f97ebcbbd6769fae0bb2ac3d91987470365e3c988461e2f3eae115799ed7c48713a08d85d74447131e2f21ddd9d9d2384e3bba25e6a08d8c648ec61b96806c1eafb3a463abf6445a2a598093824c424c36e64c8005c0a6351c0c19b8c43880dc2159c057102617774d18a925a66d4fa4a5271dd2521222d069c96ead9c9e909ca076cb82d750b7f3a2d1753b3baf1a0510d2f3c82e8090be64f6bce2654b115110532238a1983f43d8cefeac41e8f924de9b5b4702be7c68fa6a41d37717a9fe802675c4ee82d99e04f43d2d38a987007cdd10005b9dd20e7c402339a9edae731080734fd10037b4bfb5a1dd79cc0681b5aa6d10b88cebce2070186a838055330222709ffd4105b67bf0eeef8f650027ad185b2b8acef96bb6e1541c143db8bac1503ae1d0917083c98c0730465678c0b045c92e0aa2a6ec682cc67809d38c279958bccc0e134a944f01c286a525a50a342d2577014d47adf41926d4a85244230d143469b478d9457ea374008d8c981d5450ca4a2913b40a1403146c041d4b84d428a59a04f1190ca06d13c9d44cba12858752c8d7f0983a14290f400b038586a789c173f01f6612a532c74c53ea50ce3148e50c275c58f0b102121f1960a2a2ec1c3c942fca8d86830053e5973202204d01b4496606c7ad70e34bd02c863051599cf8d845574a0d680d985201da9392861b1a0aa50f165c9c2913f01a4193618400203dacc8503e608621d80a25045a226dc84f0c24255429001a0568be44c9fc61cb086594924bc9f9acd2762693144c342ac7b24389bdf7deab71f4d4b6841642a2bac40093a3858b0589c99a6a8308dac4018d122d8859a3bd1073c1a7f41b5c8a145ad374d2b132c14c28370200dadce2a48692b62464058ef4a56c52fa911909a0602469d161640d14a829169a4a1bda5c53a59400c75d91b1717810977201ab09d09874792a5b943de45096d034a699c587f284202ca0790a66ca4cc380462b3a725402a9e9a114a1ac6200b7c1b3cc324ec4f31a19d0a6132aa509e599f2469594d6c297e33fbc09091a6d86612a59342f2e87d1a59c62802831ed899300a6f4525229435a5269694f44a58d7200b41f8e6331040806a21b98109d8082b3b239ae090ddb8757d04ba8b41db85e8013027b676fdbe64dbb1a72b42752d2d0d6604f2424a13d73071c067a5600d4d1484950bb87ee0fee1e01020cf0d22e7ad8d0bd8ebabaa3e8ba7b3d51df77d163e3be0b79748e02e8ed69db386edb0ab0c3b66da17e0237f0ed1271efbddddf7b7f670d488001e8690500b65a39da458f1675008e92a6ef353ca06662fa881134b9b3a381889a96235374a1c9a9b4ed052a801bf80e809e17dcc0774bd70f0102c0024ac25e7ff799806df3f1d93734c1a61504eaa108b8efe9761db1d9fad6824037973bb077dff083ea9c5323e19e484944f61c0038e7f46c3040264675669290ed3b02fa019484fbfb4b8092b84f2652128fed280264fd1eca037eee4c6ec27ff3eabd5f39ee418ab3b96ef5dc5b4095eee52a5733b03d782b55b21bc8f7b75005b6fe951592da26dcb6e73cd89ef398bc278ee3dce6b9954dad75aa1b22ee6b08dffee6499b627b9e6bb375aeaac47d881027ac3721abd6361bd8cedbb66d8ebab6e7b60c568fe9be77a21291d8ce39d578a0967025adede95e29a9252a911222edca80a6a7d4bed7efad7fbbcf4e6e82f47db7bc7da802ef9cb98fa4b9831a7a4e3e62fb4c548988ac073afbde4da9ed9f5ff5a4c3f6e7f93f7f9eec383bffcaa5a94e7e0fe40bdb5c55ca6f7348aac0fb3e0e49bb39fb9e939b70cfc97bf29c2a148be6e0100305a422727802fbf955affafc53cca1f3756604746602a82a8b20fe1c8c452c3ee8ca694dbc3fbcbdd72f13f4f7de733c5ee83f2b06ae6f6d7a02530227fdc2d4448a05f00b0d1d095df71363862439c6e44861068a6e6a77af859ad0b83d91be1cb500cee92edf152767dec09938381367e680361820c383eacc2f3736e8f9027356774ab54ee15367d69c5384b57e0d2927e665c476b4daca43e71dddaac5eeeedb93de799d9b8a53d2ba65376bed17a04e8cf2e58594b67b227d61318ad0c388468bb122f644f2c2e465c926f557175c833d7fe701d5525ac5ddd29b0b87ba7634f0f2c2ae7b22797161db9063933b355078223456f102341ef1c2e2450f629331327059b20244d3e88389580392170b19c61d80acc0e80543051d6884e922635cd2c5c518652a880c941714a044a528629393126c485364f4122488148842567041abc18504282e2f461c3f8c4a66c418c094906504428a5846498cdd305ea1e1255341151e2252912875c2d8b4a584978c2db01f8230010d171d8aa4441ca8c8a0082161a98d2c6230e343cc824354c1d0cb45d048d3f2236ed12282153565c4885fb608c9616481494a92f8420de38d21367e8845744049e14582092318a95894548b17900f6a78187574116f5c11d13801699223091522638b1760b420ea206aa18699281993a81146246b782823d2f065fc81458527a0273dac404432c3f8829071851de20f0b2b284712b2ccc41eb2c0f80104d3191e617288129da66cc1e1f542099011510886f14b8f310537c434364422334ec012632cb1f810a5114fd8c1062de3accae8c29293252fd891a323f18c0be2548ef1071466084d81021ab340b1106fe8411c32e6f5c3654cb232be68dac1e435021231880c45808c568c462415441a8d970857648c53aeb81089a6c290196b5ec419506514194ebad8308ed15e111bda0b22b6b04349d1ab850d3041a30c568074b0d282c99428a54c0f30630c5122192a4f964659921824e21822a20a41c6a91d2f9f2231081b6393a051053900893e7268215e998295c102c687a8510995a025119684039235449c0419a3768c4e45e20c36441f824618aa008d265469214299129fca740163246a4c81ca58b4242625892c201143644890f16887962291c9468ca01d548066a0d262ec316554c60530e353548d8ab8c3120c493c901821320e05e16187382b12876c8c6a826a980214634a0b1a53228e32a30f9833515aa88c282c79494a82445c81c89a2063901d291451b1212e095a9202348e20a58578648a46999106dd811173e82e0a4895578c2631054ec6d80d496a32868c3f2f6c72e78d766c9184a71b9bdc993b61adf569a8d61d1ace5a06222c913d3941c558ed89e4e46593fa6bf80fd015bd690d1007e345784529a52c168bb25ec50a499b50af5c9362a00a3118f6dcfd65594bd76cbd233ff22cc7f22ccf7ea87ed0f40f9afeb12feb71debb9e1792383bc4ed3c1cd78dab45aa686dedc554ad168db55a5996655996659a5e2367929c193a13db06d813c98c14d36ec09e4866882ad1be76ba481c9bee223d24e9c65d1762989be8c2ea3c1f9c6077ef95b4bb87921ef684248e7598eacc0b56ffe5f7663824f17d0a533dbdacd7df8564773bfd9396b079ecea42fc2cbbb54af5f457219843d0730a72050f18926efffb3c5c1fffb8892ee4f1bfef7fb910dcb6861c995ccb3322352dfddfa75d2142b8eba3b3cec6bbf76e9bb7bde7d7cb32bfde09ea6006bdcd75cb6b39a53946f3d0262b0529cd313741b3905fa75e9e19b9531a33e2bc6aea6ec469776a4453cd309de598e719cdf5bf8fdeb07028f510aee9dce384f6a8de84a48a96ce324a69ae6dd0f33c2fcb72ec731a9168548ddc1e550cec1311799dd7ca324a434a9d52cff95d7b2dea22696c7b947a96f908ef55b4bc6b64eddb237b74e4d1d8beadd6f58cbc5785248d6deebbd7599665f7de3cdb9fe7795e96b1fc021a78c338b6b5d5ab9f429e76e168170e85611b0cc330fca3f5cd20dd2e86611a86e119fec1b15db9b721d9736fadd607ff50582d61671687300cc3311cc3318cf18f8f70d676ff86853f6f2edb731dc6528538c43fb808fec1309fb98f759fd650a5d9592d61896635039a769f7d7b2efee9b93b6f8f7fa825ba57cd26bb9df5ca657b6e877ff00f8ee19f15360e002516a5b58fcea0743877dfe6e73446b96be39fd3d9a65fc84335fdebb48a5df7e0a4ae8e45bf8fd2d8478736a63694d2989ba08fa9d06713f2609ce76ca80de1014e8890a4fac37f2dcdc0e59e86a45b2e14f1bdfff61c801ea5f46dcce9aceb58973ace8d4d419f870b49ffb20778d3e7e0c1f026242da53277a7b50d62d7dcdfe79a1b538a29fd2e75d1988ff0cec6e57fa2522ad3d1ad56ebab5963aa5b5fabb52d95650ebc0dfc9e077bdf73807148656ee2f3422af311db5fc067bbe3388ea3b210ea0ab0b29e56ee453cb67328894c398edbbe87f2e08e524ad2df3a8f6df7c7a0c738dbb9bc07e7aaebbc2351e0b4ebe2c11fc2b67e671dd6efa0f750abf1db74a40a4caaa0ef22bb1dfd5f07fed6037f4b391bdb640fcd39c5ea6dc8631f3f5e71dafe46c3d57f35d4e117aebc48c7edceddfadb0ec08dddfb6d7bd0c5fd896ab1ffb8891cdfac2afc8a41fd8cad05792c89f7b5dfe5b722be56dcfd0672b8fb6fa7e2f0c1b0e362dbebbaae9b55efa064e36df3db0733332bf354c6a88c4f99a30d6e7f9a6af65cf3ad55090fd4df7c76ffb9fcafcbabac56d5f4fbee7f1f4fde56dbb63dbddf6ae539b909f02f7993ff2624e9cd20dd6ebebf711cb7794cdce649edde93f7e439794ffb83794cd373c2b1d8d49018298c631b17c1138b74e21c82ae6e6e8a31fdec9a7bbaebea702e8da1747d11531dfbbaa2c97f1df7e93ef0f0e1860626078e81b9457c1fb8f9a4aaee2ba5aaae07a84d766ad4b4eea7d8a853d5e77903ffc2ee068195565cbf6e1b073314e1bd777feb7ec5f6cd71dd25b7df6a1448f18f8fd825dec7c7c70705b5ee1e8af09e87f3eade7c5bb155e06dc39ae4396ddbe63de8799f626ecff3debef776c5de5c24eed9f7737920bd2bf675a9c09b0bf18fabba54ce9404addf77dd83aeac72a5985bf5f867e680b5af0a49f0e96f2ad5a7985b15aa9e533df7aab0fbfb2bf609ea7903f0bdcfb5627b2e15addd85b4e215a0532c359a5b22da966779766fadb5371aebaa77431267db30c7b24cc8de9e0bb71f546773daebc9b3eca9c6510e05909298362c01c531aa7329dd2c893108ba603ec2d26a7f7c840d796c7a83ea38ed15a5c3e1f6e3234ed40f2a875f5134fdbacdee0707038a36e421ee946a49943051627ab27349d75a4dd7744de350ab2551c24489e9290bd5a75a25c7b2cc496b9c568ef83a2f256ff39cb4c669e588af8383f6ad715a39e2eb645916aa69258df3b524ba966539a66b24ade95aad7e0d046badafa5b30c0a890da9f76088a3f513fca00b87e48a0dfef510bf9834d9f26ebea0681eefb74dfad15191249404c78492e0280930c4b3aaa42aa94c2ee8390f23234a82c70f4aa27bf736ff4149805ffff5c4dfdb9c7b35e9ee0545fb6ee5bcd5d97593bec910cfa80ef7648a6cd28f2ae9464276fd1c3152bbbef3a024c814a1251c45f5232fc4301fb1911e6c243d32ba7885f7df1786a476a35aa2865509ab407493876e6eb69b9b9bcfb19b3c7473936359e8e6e626cf68ec6f68ec5bac9f543fd9e99064dde8677dc7d26f635b5996651b91f60e853466b697b027121a28b013412b4bfb6bedaf2fcbc54372df7d08db3187f175bffae3b69b31a9f78a13b034eb310c3f4b639afeb9b16685e40aec22edc6fa57249e6116eb4f501bfc2ad56bd63fb7fd8a5cb17ef53636e1ca6e3636fab242d2c646bf5d85dfdf57b9f00fce00b8bf90e4de7b11f4bb8bad9ad9eaf10affac56b015a6ad56188667abd50ac7561a67956aa5672d81f10ffec13ff847e597889a1ffb007b22a971b179c8fbf643d8dedd36ad7347dabd3ff7b4f7da7b9db5f73aff899afd5d3ce0d79db3e7e1fcd8bf876eef83ba3519c2e6f11efc993d003fff09aaf19338a4b1ad337e958aae32ce2bfd64cecebffa6e159276e757851407bbc2af0bc9bb8559e644178a28866318866978867126a239e3d5df9c73be7161ea30fcd3d244b5238346094d0d0d0d0dec0c53ad33b0d64a6aaefee4ea895a679e6dda3d68fda7ffccfed3e737a7bbcd4236fca06edf807d8ff33c8ff4defb0b32a075faf55f202355bce714db7f94b270c61807934ea814cc19535aa768060041003317000028100a06c4426114c418a02ee50114800c709c3c6040281fcc02318aa2208881100681100601000601000086186510f0da0700017826e9a2a86812509e269e84961e292fc620e98b930952504bd0a04e8136a2cb3f24c87efdf8f59cd5ef0791af69f05714d1ce80cc74a5348484e4351dcaaaa3583b4551a91b6c88038271a01a094fcf89a5514484780dba9110df281b4735b9535e652c3255887d99098a106bd2b601a52f4d9fab22786235cd8f2097f1779e12e1a6c5064dbc2879472402e829ae85dd421846883bc078d274274193761a2d72b65d17488610257e593f8fcb9e107cdb48c82895df40f7901ce7b09c2714a2081fdabb670b4ca28476821950390ee8f3151c2ba404a6c3124ab4e702e512760f853abd3b027c8e49e8c6e1af8dee9d970a86fc0cdd6473e286444336d325d0e9e55975560517f9cc270fc4904ef6586423f2dfc67154804003b6b77fbdcc688eed273d76246e7ea456d2c7858de115ca12f029a4227d7cc05121c3808a00750987eacf088eecd1fd3fb2b7c2c8de7521994c0e66a75ca9c9a8b3c270d0445eee03cc7921b85d5cb5d8984310bfcdb0c3502516cb03dd3544d4b1c0c65edfba039d7f5476509f74b0523ad15240d38a9f76a3216533e9e7dbe92e28ed039bf8434853ae26278ed0afb39f662b4081119d24da4d9ceee9804a8a323079ab250968086ed7eb062cf3f4fd1b7894f5030b3b90cc2bd38054ff5cfdd9ad662768c8d478d997e10f168aa557aee41a7294cdb3b848a7b1e1c20b4ebe55d6a80b6cc4a5546674f912a54bde9176e108d4085d90f6d988f43ca15da4e4531889905e23e1d1ce109cfb2893eecec040e93814cd04ecd4f4ba0b0f4570deb3c0e61aca945e21adb79fb9cabe802e1c93d0482653e31d0d551af4403382e392b91b49d4790d39150cc9efc27a9ef86dd1f75ecc4c332a1bc4ac514cb59f5f79b962e0ca1c382a50a83c124c51d2c02f686ca3462151a2d9e9dd3a586de995d60081566b219506c9d299aea29cd1e3d02e7202eac88bbea6199da1b7fd0284bea4f1b8580a123a1c6addb602cd392f431304a0b8b6b480e626433f3b2e55bc63bac8591e93ecdf1c74998ab1abccfab6fa94ca675e7521f24e9065fa6aa11648e4d4bb8ce33200c5ea6e9b61f9582a4902aabf14628847ec15125a0f39d0debdd86e9cac25d0cea865e3ecd892af6026f6dd8534a0604cebb1e1a71cb72eeec72284f3da86e2e082e426d23a1752b0817920d258e611092ac5c099046f1411e409642a6c511bcc990180f0a4107208502a81853054ee7bcc98c7d03bbacf15f339be4da8db85898beea1b87f5ccffc3f9e01fb132adefe2b726073ec5fd1764561fe94f370d5432dae90311cb6cc2a6e07f394e6277424ad1832b6fa37ffd26f846fba45f324688796a50d3ac11e22ba8ef688db13bd2bd84e65a981e13a4aa44a220b568a05e15a9412c24216aece91ff5dd8640b281e0907b9a1d353f79aa76d854cc3024c62208e809e242fa89547c9a3eac1fc13173d45270e72cdcc42476bcd1edc5afc588f9b29d394d1ef43b3acfd6aac2acc44c563d6b1ce050012a9754bd723d0dec434258588767ca8314292f63850922a4be7ce533c4c83dc03a331e64088ded919425939312a482c6f2e96b8d63830406540c3f173243f85cf201bf43981e417761bc6ff11248cd0fc21d5dd005a28b98c1abdd0f35dd1488a30dbceff4a9496c0cb6ebaf6b54b3a0513f4cdef71d440b6ce92ad0c4491758f4cab6c998da1261dbd42ee2590c55b96e40701062c684f3f1ed729d87e17de7d76c5f195571939e40e4b7e983988d58ffffce57d0ba1d662569b947ada94aad0814225e822363b2137a74b3ad423b2d1bb13ec5de3e737fc0cb910771413348e3d438d7a58856ad4385d08d4a5809424a8af234fc31f8b6b0cc423bf601f0a7c6ec0592422209068fcf8fbe900ad44cd9de786051ca0241846a27bca80f0478aa789bd815fefcb5db39408772faf9bcc61a1fd846d4da20cc1f50651338d33ab990398455d39d9a3c515895ec4936c8f2e846619542c738d83b611d0dc8848bc2ba08dc2602346a82032cba97ebb78c43409f53030b7966514f6d051bbc631814ee8ade49417d9b255522c1968a548509d54ea67a30c318f24890641b0936158dad959d55f0fe26df4c8064473c8b4f5430ce4e4f9ac5c60fd3f06e5e9e72164341cbaa4f2168c86e10efa5c0f6035752cebdf795876bf66461dba06903c9efab87830368526052ac4b4fc8710393b1eee42a6092d78410985adb01570b0109052ba7516518409d6678a539673523e3223238bd45a416b3ed7804dcc064cf80c435de0a19b6778c3b5419780e81481444a46efdce5fd645f2791f02a2928bfafac61e6c0e1c230465c40044593f083081d0be53723197560da52d8d5d50d44fcbc5f25f2902bd736e76a7912b40b42294db32db0ae52d98be2d68f58fed1058a2a9ee042118909edff0a2e5680ec69704892a48a95e29a4997b1f547e6f4e5ebcc8df316f4d1714da67bf36829064cfe49921738b15b8b7cd7af8b808438008e08133a7d26a02d02576da21f782fcf38234359fd990b274780ad4f9e4c0ac3d28c0aac37def374b10b4865cecd064a2ce24dba1015a30e15a6c3f0e561bb25ef91be81dd49520a427fc7f42b82608ba18139648915897a2d79db3223012712a76712bbc311498908bf2ac0bec57aec60340028ea1a4118d966a67fe191b8837e05e6b89e752f92a5baf71887118c64c8b21200dce07b975637a7f602c71d601adb16561079763ec84f2e7dcb8f776de603a8cd6fc143366d1287206e5522843150dd1f782bf6449156497c2f0f1d412ea9a5e6bbc5055309379ad27c21a280569d8449ee74ce30555e936efbf243fb141f65fffb756349924a0e126c2afb416d86a430f9a402b199d184ca0acd9733e98e64dca76740b1d49ca68d3009072ba9cfb8dca4e491307f04341d9589be9f3652757b31886115572c99fea052123be1b3a3503521b5dc907cbd0fbe5d1d3eee05bc23413b50531c8130d8554408b60821df6b9378d53764bd4a2a26f569422f9bea67276f03838f72c5f815fe71bbe59f0261de50d6ab1f7b112993bb4857f1503341055018b3d8c1e389ee5ab98121daccfd17086f2ef51113785c1a1e4cacc43b180d43f020398691b1c997096db6441f02dde55fcdf55a81379dda61e032301c927db45f71a737e1023fdc81e506fb9ebc60df7b56f4007c728a4320ce0ee980a33ba01b792a9acfd125e0730886909d3658f1b86bc91e0b369437026a232cc3e2091f0932d2ac2686ba95ea7cf2baa36f3ed1cdb2561685a00fedbac8a5969bb09b03c938a01bdd3b982557b81e32766a3573e505671900d1794564b9f956ec5f4519f462ce96b079e85e4762293300f54c3a4e941393c4eb9c3288104534ffc3935b36fee5c9b19f128e241118bbce884e87c6f717e21dcea34adab0aa026c282af6e016ebd812c42e7820d9b25176fc81b14b3c2b09ab0f5766a24d623b2f546973b5e47f68829b6a93cafd040fd58d42483f0336b0be9a7dbc8747ca4eaac629f0bfa2113cf383242e63de732e2eaca52017ca38508716c664df9cd04eb2fdf5594ff286b9f7e05a9626ed5d3437ef5be55f9589702ba27fabc464a774a590540a7ee67a5087db1c13d78cd6a83c731b9af44a03ed8922f5071ff56d49703a6f97e7fb5e9b78116a12efd5be15dba43a4dc19242f5cfa2094a91342e36dd937d7764f0804617037b9568b33e874a86f0bec3c9401bea77aebbfcd4b21f24fa63b44fe578af34c0ad5cd967d41c92046921758903d9c337623eca6a906246bbb350b2128326fcacce04fd3b1f3111b27149c634e1bcef3b8c0ee6b4fcd42263e2f0cbdccd4dcdbf76a7f48a4d2befca9f80438c295a154763e7533105ebbc43641358901801039d4d683964ec2fdc4c92a9e110e0c40300c989d1030305ea88a73d8a4f7317e0e0ab57a065e3d21fd29ad7fa857b921e8081a4138de539be78082ddd3099489066319837e438a1fd043757efc7d9d8ea3c174af88a6b5d9b17f989836f1c05e8bbf419d30d449b04860f8f622779627c1d410fcb3c8ad836071c2d40d0cdc962d145fc67f7861529c79c3e1f0ab98bbb5284dc173e0382d611daed5c1331892ba359218bfa79320614cf4094cc6b95d15d1b7d63aeb465f610671337d2ce73f4ed62b044b9f22127863d5a944f6eb4e6f8290fafbf3ba114ae66ebd0938e761a9cef8ae8c8762f88c07207f9dc648f8ec76fe56b016d725b93d87b7fa08e0a63518f9c8f7f4028711fbd4ce348878cb72ec7a4fbe145785efeedf17ea8680a4b7a4fe4ae44dc57edfa6ed24e1675d0aeb705085aa9c8348e0d6a1f872f7baba4b7c0fdd54e92f0e0460b9137af812db963aa66496a6022b8afb27f301464a43c4640805b56b7c28e68f1ee5a30e0f99b3fe650049018cc892c0ae440f432601ba656fa631a945cd27167807f8f72667f5557af1b8154f4441d04e49d1243cd0e522a6a870f64eb974368f6eb03a8bc7e12d074cdf2acbb02c310e06e18eaff1e9689614583d3af8583e1b3f510c32663e3c28cc5d2b3db279981b5874c13c9df6ef34f1ba22653c9497f86f4cb4765d3d34c15c0e76440212ef639964f24a74b50eaa6f49f387ac8f19eb7c9f5a4b860c30163109863637a01912100d37d8efb522b218ab1a4b40ed3e49d38b2e4bb1b70a68db46893a81c1b27986ca01ebbeacac32c1923282ddb8132043aa7a92a7f0d1e53cac4cc7d18717519a4f870b87a71f1a4020fb91348d1470400183f137aa136210e94485780a9d34ebebfe949593f26cf9fa4d844ff071bc49ced4f65cabc59a77a4a26ed02165684f2f1989bc171faf1bf7668a3007074e76cab381eb9a8893e006545794a61a8a837a5b72a3f6cf2d23c0d28b1caa83201293facc4ac206c1d540e222e0c72d03a02fbdfab874f776f88e31a82ddc5cb6a2b60f2843d10c8c29ee880e9aeae980c0fef2928ec0b04e7b2e218d5723756f4822145b1fb2702fb10502e17773b09d69eb5cfb81fe40088198b828caeccd5cf84c2942678935b503e5f2380c48e9dab48b133e45bac571c4037caf60c25bc159a91793787620af5ea9fdcf409040a3e3e89e579813ee1dfca16c6dd8a936a0b8cb6ef322c96dcf8589fde754386a6da9540a76f762b4cab053de4eb7439e044b58982d973ff94638929c19701e73e108f330d01ff853f2b27375835aaf0c59d98920a9093ae295d64cd926bfb4fcb21d582b998f108125228cf99243809a2780e02e761720b9a884b90fbc9ce62e15d80247f4e978088a93e6c958cdc3b0bf77b05a4761c8ddc62183dcdde97800420dc23a4975ade96bf666c03f0615d0a37ed306a7c753034ab7101f2b0f32a41c53f0c1f025b64c4d26c8fb2b51a359be722de8efc6369aaac3cc9a2e956345bc36cedaf2588b38809d21046c40edba23a17b4377e08eaaf2f4498f54566ef108683e7bc70f9e3b793e36693a1987968b5c4b9505349ed4517581dd5c463f62952ca83876900f9740400f1451cbca5d9bb9ff8901bdafeef1dd731db3478f77fe6e3fb40ae87c22daa164f8b6d89798d0139fa34918338144f3ea3c9345ed0a745a22eb14b169ceecd59422a0270414228a0a5e5ed03b13c36decf077f01be17a9deede82bb832e1dfe3c6bd5458c289b313600ffa2ca1a9f6e04ea1ed30582646f9b395fa4aafb5e8b81fd0327b93e96f0045eecd0196fea459cebf4d467cb71bf4b6e7199d86494e8c8400be1b4829badb731300bc7c0c93c7f34efb27f402760b9abdb4be614319fbc4e7e1791703aef64541577b561a40c1d8811de213660b3f003657853d16bb511425c37133e32a52921f098b586e858d4bc29436666887c4adf36ea5864d54be436414184328e7ae108befa60ea63559220850b649205d491b96d8f1e7f82d187e5877948a0ccec8d922c47ef64a7b889c8d340417230574bd22dc2e05ad031a368af4f663b0506b15ce77f459337d4caef1db838a1d7f2e6e1ebc37dfbde2c80705f44ef84fd890376427df7d091926e60fefcbc49cb4684dce9d1701f347499c26258bee3dcebd0b89029d81d500ae82138399e0062a57c6f4fb2a192fca95f72cf4a1687f52a54ab624e3f927311d151ab3fd05b46c70f8e1c138050564e241b04173250d47a0afa8150826ad852f1fd39b13c712ec5f0be1975f3a7c2154d16eb123b814ddf97ba2e2ff2067fe444924e41f5fca7fa30b52c1a032c917ee1456acfdebcaf308bdef96a3e853e6da4e7b7dbe78f1ac64ac5421afdd66ed1150a415fb3a1308fda3e8be9598b81705267545b995c5bfd235dd6f0574256d1694018e36362202f5944c12e497bb52aa9a41fe864908aa10d361bfc8044a4fe4d6926965ad7270f81dfc91d1b227575b01b5143e99d0fd75aad032f5b73bba59c8ab253f7e0c248c55dfc6a453dea14cf9a58805e28d38db66bc71ae535f8ee4e4ed5d1a4722ad54e8fa3501bd9f65464cddf9100ab63998ecc9e31d0f71f0c34294be6af01068f6b847b87c9cff1b1614777aa13e781d125f0b950c3377942319281aac2b6a244af8d783818ec8c0dfeb39c4a5e3a3ecdf84db1ebb82421c37ba4606404ae8ef3d79a0609059e15f3bc81ff0733284551279ac526dd7f1205d491e31e72e6115817e10babb0872a687780d8ceca29af4fcf03995f7dfff4902b06e3fd2a7f33bbba34de54e07df0053d21272dd30564a0429c40ba5e4e6f058041e545356bf1fb08bbeb448c0d5e72acf397d20a20e58de1828c43117a6a1a76650408772617f6f80a335dd91ef35b36b7d4a7850c119dd35e3a44e82a263803883353c22a66a997e2c499081610126cbbc0926199172d1fa8c418c444f49fa34789a00268a07f80ea15f8349e8268a0e25e7f9a2d09491b03109515eaa03019ac5d16586cb8753863d4db39bb302228ccc21934dd4898dcd784e799d3954aecb5c5ae54a3984ad86884e90c7898b2ae200f9b6ece9b5987400ea6fe87668424014b869dfd9c0f702c8ec3236d307602e5a5db9d144809bb0afe59ec3d7c6834971535cdc23ed4968694ae38dc706e30768832036f24407cc2ed028d9a4a239989af520bd27e705e65145cf3d162c4cf40b87de7efbe39b923804988bac28a62a254383bd49abb4a028d6e59154e88ed6159261809c1c532a98e8050269230e474924d099097e05a9ab58dd9f0ae6d934a3c82e85a83978c34c618584688ccb2489432acf66d82c3f00babc6cea986f12e20fc81b01d1c4a50fbd5beea0e8b55f6b38d46f22b98564dadaa90ed714c6e5798b526a706559aa8cc654ad20a031bb7c561fb2fe463e26c28b74df4ff63aaf1719423c3a4e75c88470a0d79c0f912627b1156bd76fa88ec663d271a9ed6f76735e3c1f72b2b3f5b39f94d7fc883d657b22d6e047d6d673b6e7b40aa328c7317a9bb57d1a17e865c20a6d7e876b29d992bb0676e8afbfd51bd18eff5cdf840b0ec2190fa5a9978f12e2fb6f6cc0d0380ee957bbaf4081867bde912cb605c0b13edd275f07d6299813280b488b7f5c0755f7086e4e0f392443e62909d84c7be2954a33330914bd49dda421bb449316f7db1d243771429c716834c83277bed5b8d14827b97198874c531eb57492d9a007c1d0af86ffb20bd30c69f178e2c6b1d3da05a0d2514e267d3abddae1dd26c42708a117380f0731c080b1e41699d9f9bf0bf50fcd058b332b61d9e737e1a1ed7963d3b18f22b9ee68ffbacdc668bb24e141c29c60309335fe574a221c404544bb7e0cd29ccc546f6dd926b68fd75386457daefc7bf1ca77e34bf2a03871f4759f01ce90aeafc80b18d951fd9886205e2ab0584363f06e6a150fe84273f8b626ee3dde3ff806d02a1e4ce4ddfff0c4235b1a247f73730d7a483546a7a931e0038f850b58c4a391a2811822e663a61153b77eb174296b94641ec0bf8d7f348310a790cfb28941f7e8e4f809ff9054c99ccd57f4f0e597150f90f6edc87fe28e4c6b3c348d7725d22dd5dc72b8c6f78324a76d456b0a5fae401427ffba067d14d0886983ab9981782f70a943782690a010531d46741e071aa24f2f803985fad1d370916f56544384e3600b953d33ea3e517b6660446f6c9a2ea81cfffb40aa6f51f9bb75212c3fdd9a68460e9c4912d6d3578ca70b6ac088cff36131ad0b61acc106e98b28049a8e3a5b3952910288f53803969150dcd2d766816580af48e23ea6e5d30cf8892b3bfb87a6a39f6e069f77291af54843dfd3470c6790cc47b59912be0102e56054eb570d907ab5745aacfac1374f16cb4a5be1a5b4057c6aefe4c96ecb6b307b0872bd96961d3bc82cc1903a86e2a7be0fc355cac55394ce9f896019140e9c09bdd99c2a5e19aa83af2e240d35a7da31b292a4ca27f54d7388601e5df4fcb8680c39097322e3b047260ddbf4f7264955426011b6c640a3c0a2af2db9e704445b5139d5302087d000660d8a06148563d37fd3192bbeb535e13aaccd1e651069b6bcdeea4bb0e736e769de9d54541f8a09b79df6b43dbc712e44385fb7a1771a002c3154763f059b65bbc4d3d9b13d445b88bd7552e37c4737819bb9c4b73aa004251ff7bf29a702d78c88326dbb9a05730461bfeb92b50bedd644c9fd42da04fe22200dc3b3e33d6ae7ea370720aac5b2a3423d9a4dc8cd53b0bcf0d566093827ed4126fe0ff23f1e58c167a11d7a7d9d09c291b80a7b15af4c8d65b0bfe78333f45951d0295bf726afdf92a265b0654e79f41d8471cf6923eb88d8ef208c11483ba7f186b828f091cc63de744d0206cbb6dfaa4861c8dc4f6058c7280968409468b5f682dc0416dfb38300ba451c200c71992b4b488630a6de955ed4ae9669e32070fda340060028d3352608e2c66e73a54088dbe9fce3535303b990483a4c66863dcffac37d427b34d280ae9e8287faa3f3c2c86a98c0098e4fc54fadc86045733d285cfc300b4e417e48c9672643be02a0172ae0e290ab9575f498f04342107ce4cb021c1fdba849b00d7c1f074f38bc1625e928ec680f8fa5e14a0d9745855fff67069aeccbe50a9a941123eec37ece01066536551e5d623184e90785060d02544f108ed1fd3f8c79703ba7b1d58f74dfde544249dda3236c00daa900f8968163764905aee590fdc8c1b90bc1451abbb1b565eae302ad08b70b9c1f99566c84db3a7643b7fce0b3667f7e0c3068f54f2937070845e58539b2affb87e65c3619bd6be223238629d968dfff426ffafa32f7170c5d3f5a8bc1d1f613827ffc60d4be1ff3c5d02c97dce3a32d576fcb9f2a1735b60b378dc11127fe3fb791b1a39c548ca580240417da0e328e5b86e4390a2c3837ff0f2a0099c0f3a436a5d96e4567fd2a1a8c2ee61707b2777407df2796ac39652f0404f512ddb7ff18d90c68245ea00813acbd3605e58847e74ce798c4fdb27f99c8841e1ce861467658d1e5ba7b0b9feb9b8bdae5620f4768fc7767070056ac6f91d4e5929f5ef205b13bddb84e459323663860b5d4b6ef6561ce634a0648b4b825d8cf7e7d0dc3dcc7e91d5a4ca4e04276520bb7a8d3bf5ef1c1ff3ba058418813a1202daa8131287e8604c249fb64a824043338050b2823c8e150fdfdea2b57a041e590d4a26e5e481e24dd1903c3831466d9b9f30434e1a228709997cd600c169e6ebc169c7616bdbc7a6d75b290bb68cd558c4d96b2ba85bb7decc5443b406dfa9e343b3df9415c3ae7962a0279ed02502b528a6784b7bf3ab3cd679f85710bc3759ce3890b7c428be6c025739f2a26100fc85cccf2ff6fee2776d049bd1af26ef1981d5e9437863bd8a1ccc313752835dc08732e9a449ad662b866aa12bc2d8cbbb1d4a6c23365c2b42f726197f8bc1327c8e1577f6076aae6116ae90d613a5102dafa86835fdc0dc39bb88f936458956fdc9f5553e1399521bde9ea1d3eb2f2fdef8fa9c7c8022ed8cb551db729c7d85d8c1df9a900643cb0ba8793bd550f18bcbc60acd872dbcee7555559bc884eaba66f5f607e7f34db49b5acc15a800835fefe8c972178995372ba3468ae800299fd9f105158abd5764eaa28ebb045b1f77b9ed9c5eaf7e8eccf150c315ea6e22a06f15722c9e1a32a8ebebafea44d089796bffa3e7b64e72828dd64df19420c9914f480b92899c4023c625366ff7237dc54c2fc6a3c29f406829278f4f6d79aaee9d981a37c64151045e43028cf65fa8f9d1935c4bbefc40b2e1220f923f4e7cb5a8eeca3447e7f66fcc49c829efd5d950aa3f031b15d11965d6083e7ec54191f2d3b258c41192ce69923f2bfb29766ba8f60a2955d80aae6069ec229e3cc6330829b12c3f609156cc741550f76065348c11b6c71d0140d23251db1a452057587de7d1ba7425850f37b64ff8567e570ca2d4c5a12a57e76b0e21c645926296c2e17ea118eef02ba19a346cbc3a01866bc6c5d85321cdbb4fe1dd638b753df5128d56de759008cd735ba1730a22e71b4ed543a0dac0f0a4a9a95a9bd10076edc79976bda6fe3e5aac1cf55b208472a541819ca0248962c2813325824cb5436b5b9e6fcd29a411724c15262fcad9cfd023014b3fc6ca140d9a20a519bbed3956b83409e666d47a025d2874c70699b31579fc22d0d41690fc2f9d44e9331dbeeda988387945b98be54a5c83611e862309b6bce579621feb1985bc171b66afe05c120c2d4ab89a159b1899234470f7a2553a6988fa838649aa20faa576424a8164239315c9ad6a10f6eb0264b0c79ac73ea57d76a1d05f1a2c6128b86a7aaceaecb8045270f3320306435cc7edc3b06cf3edbb8c9d7840006c1112a0a0138eff0961b947345d3e40232121d41b9c324a24f3ece5363b34b05339ba0e76cb36d6136a797a428451e135da703ba095cfea09c4b76d500d968013c671803c416ac7e707857f2b9a5c3014b1f6f202fce5415194badae2915e2b0680b8ebd2d7064e6c68b9619b45bbabccdb5178ba0f2a5c71d73bf702aa85b9d1233ca00cc7f392a20114ba78d18f1c133d8a5ca47c8bbe2cc5eaefd08c369526ebf450d053a44a80ed6bc29309f9732a64ecc539393fdf9ab72942426f37bdd23a68f0aea42428ea43316e47dab5f72fda6556107d925ee243190f4f3428570be0d0236b14cc8b09101f8807dc59b2747b8eff3644eb31ea52387c2e0b9646ae997a71ee20b5848908964f6a11f0315ecf628f115eb8c384122e7d69e668cefbac1fac91910823561a23ed79c14559ed56c88daf45be0931f66814a7889efd86ce81f27c0df14749b8f2a2d146c07ad6153886c0eb35338a27f8a251af2901009a5a08d87b2079237f64763115c67b59d29c8b8140096dddfba93646c7afc970a892c922a6b3a771c4e2f2c856c6a1d88f05305749eff1b96197b7f7fa6b89bbeaaa32f8e358b19be9cef5559fe84ae140243630f9372d7dbde57bdd789f77d8505de09ce5ff28e7cafce4e08104be7bda7bcd2934fac029ad0ae27a36792eef34e0a36d8ab1a8ed10270d818a391216afbf9490e066189e20a3c67c1f7740f693ab9656134262cd3d660886e234b65219417585b7eef68c5833beaf35f724474b040167f664e30c8a2a4aa347cdf8bf0d46a0b82a48170643f0ebf7d2f70bef84efa4afcdf2bd8217500dd1d37a7d68222e0469ac0067f7fb1e02ddd955f7b5286f5ed0f9045d92907fcd9507b5286ceaa93465432d20cf751a812cd59bc95446d75e18888b7deb7fef865bf46fd2f5fb6bd52fb62022d9dcde7a3ab6438672c8b4dc57dfffbaebb8efe542f45826dfb07f071135a3b0075721247014c4de1276e4b2e12960b99d7b92b987600984ccec7a8e09bb3036507da185301d904a9a12bfc6e263454ee5c8c6ebac49c28317c9d7476c01dc973b1b73a13ea58b932ffe5c1d052449b0dac67fd4c577fa5b7747da72409c66c0aa9d9a46b37616e89c7b7232510c308acccf02fb2d883f47d5d7157e0fa91c9dde39dcec57982a6da1c61681828e697b83c142ed401c3c66d489a625ee444a1b144a35586afa8af5d95e62938699d11ab1bc442140e449b91ce754978f98c34127b5991ecb3ecd09190e94c132a8d55454056523d59a62430c061bb2f8682966d69530e5104fdc7eae311db92f6d093cc267fc5c429e4d7c687c1d8159438c979fe3f8f635615027d5a5425c30c0e9e2ca48c22b58cadfd7bb69f7428a586c9ed47c09652f42a19f04edc13de539b9b444b3697d8006fe9efade1242b893430316a926411e37ee7e9e61c96f50dc02e8f8cd5045e53da19b538b05c22dcb53321f9da4ed5660b7eba88ef95e03b8b1a5157b574aa6c9d4376c16358500c6c8f474ee57063e8cfddaa6947488eb494bb9d02cbc9d73a2fa06152284b084b17a3d71e20931a8dfe17f6a906c04c27d27584fb06491ed79f6ddf89fdb2c903b2953dd3cf8fc03ee001ef81135e5e9c1e605d98177de3f19b95949c3f3ce82a1cb3c7ad3c09d901d5aa2cda22cd5e8228ec8f8386f98d29a7e3ad8ce41004d7194951671d1d81c03b360f7da2b3767e40525d1e7c86239d5209d68f5cd25aff0df48108408a28ecd73ba66bfc3a0e8a7cd40503c883be065dc1f835107b047abf84552c624b135db15c2953be5dcb0a8150b98f7869c4e63468874d87a8764244e5457730027f845d16bb040831a112bdb690200dae2965ef2039a55119f6fe477005419347c6259aa89619941b3757ce9347beb91ce4e4820128ffe9e4cd57086195c200f6cf2a0c9c09d5e9bc57b67bc1ec4ef03f676ef98c40d051ac77ff312a7dbbe645568bee4400108751d235f9d93ad65d24d6598a6aeb002a5d39ec0b3c16e82ccc5958b32066717e31ce02fac2b785eb45eb827351154c1e8c77d79a534270ae35e1380e6e96978ad2949d4690a5d5c698a952f29cd65153723a5f5c78e42e511a50949f2b2526d1f06b283616357918de57c2295d69caad237249edb017732fd2177f8a1ed204ab0e0f51043a20c7af165dff4b885603c56f9b32c96a6f2c6a6dbab3f8cf5daab41298fa70a369cc17ad2d3a178b0bcab978235df276195bb05e70b7c0e505a9f8d283b68ec692dd8936bdfe93e3a9eea2eb429905fe0265aa5e5f32399959b4b4e068618b8b1cf85228d7d4c26145722acaa899e3e358fa4523e3c21ced25558e803c8484176baa06924d8ace24ed4dfae3bf062ace634409faae8d5d294a5b0764e9ca612c00ff6213d225f4726c3495eeadc4161df54bda6b78ec4a645b1c798193a163ede66535d837f47323c66ce62ba246321b77d84e29caed466469bd612e10678123a584df2ed5344aed1dc61638e84adbe3ded897482ee442ec02d0170df3972237bac55f2c3a8897786e7f91c3627981bf40bd80d34562d7a5c7b6bce05c2c2e1cffa2f754e95763b2e8b64507b744ed0217a12ec6efc2c35dc29b932aba74bcd6a12b09b9e180505ad73017f35aa42f4e2eae4cf0746e94c28547a704157758b0d2ba61b1789c85d4f4d257dbc8a27dc1c9c2164d6ec0b56e16ae8bf68be19a6aa43420e044958621945f75ec52090d795f62389d9c503a6c8a9e5c1e2c14324db690444cd1bf74849d79efc1b6b752b8c05e77b9e1082ead6db32e72174c9bb4a1df5debcb1a257637daa2f6627621ba887641fe0b8fee92bd26dea2eec2664dbef3daa1080db314efba587859b45f70b25068813385d8886981a3a544a2452e6a74915846293c281b9baaeb7cd7b24476908bf10b5158e47f91c35dda3b27d948897f8bbb0b50cd3d11f03a67982a3ab9570f4ae2ddfcc328dd6e25bec858dd12bfb18ec9d525c5ff0e89883786b17b19d72c6b7a8a78320c7bc2b67fbde8ddb784686816646dd14154e2b9fd45755c50559622dea590b3847446bb68c34ac9d15861d1c1595a75002c00759177ff5284a35ffcca626a51698fa6dd85a8b82550b6a8c0a5eb46d805921077903b0cb6d19638dcf282dd176f5c94e25de785bd2e4865955ee2a68a2cad5da6051e0b9416272d2c5a2458ccb6e0c8c2f7d14b9b5a2f173952a5f9e2aec12cc9cde11829f535df5fc4a75b7aead6115c52396c8b398b3416272cee62d1868b1428211fa6724e145b28916e0eb91875ac142bad03531ae7382dc06d22d5ed0ff56fa32c88e6c263a6647523f6622a5e6983b40e46e9d689b1f0da458ece141ab66e553bd8d4509450e2704096ae1be645ae645037556309efad43a4c4ef4a77e1519d8823aba4d9e16128a997d651cde875f7ecaefa19c7ca4ad390439e32c868448c2a144ec1344493cc0da3f9ba7be76e888b59e0515b8e26198b71efc6093ab2c6fce41321cc86108dc7238ef2e7517f31f2250efab790ae15c4550721422cef0e734452fd1afaae447cb0f0a54393599343e1628706b4e7dc5fe2e32f7ffe34639c281d943b208c92a583fc352c2f301d86b041d63dadec0ed16938550631fd811e3accb01255db8d3ef8658b9a654ff40990c548451650229d7128a5a32a9a10b2eecb839decdc54d99c4d0ce52460c1b3fabc14bb96de2efee05a8eb315040f189f9023560f8d5af14526ce5ef45fe8deebe146da2efaca1bea82ed8fb09a708339502699a9801df55ffa3e6a6d5bfb4971ab7b5582c5245b5d33383aeff402ca9977256752bfa2c222408a79f7493207cb0065c393566e2abf7fa192cd2ae757b41d18550d6bef99cdc3cdecfae85a48b16690597abaf7bef1804a0cd2f5582448bc245db0502542dcb081a1d0d8b6cdc6fd7b81173c4cfeb51595cd71be169d720b18c89c89a857806a1d204a64d4a9fa0ad871afe5d192deadf8fff0e9e713b00c596e40d4c18c54ae870be02e25906d217e9fdd76e8de18b9451ad9d1a31e2f880446b299ca150c4df874862c83713dc940038976822e03eb8ceeb84407ac2bbe25220fc541ae2d74b7898b380cbb08e554ddb0e0b20ee1b2a1a6f27fa72748dbb8bfe28093228cd283dcf76604374ee1019e1aaa2d3f26c4a2475d5172e0dda19cfb21ae424727f37028966305d5c532671e7269db5c14c8cfdce7af17fe7a4dfe6ba678e847b4f062c87c6e780833ac670fa7f4443b434ce406a52794f9bd12b25e56837234b7c234e8f2dc5f2cda01395af70295d8a528e701ee494f8a73bc9480a0df0a110873a544f45fc91b28cb48c6ddce50c6042c7403aa595a775d4052b24a075a8b90d2b1ba579648b51525556a44c9ae51e9ed989b69829408362e490bc5acd5796f9aabe36e1c113f376bd13827c09c11604e5000ec1a1b7694f5e573eb851a5c76fc7fe492110dcc3e2b229290bdf796724b296592290c0761071e070f3b0dcb326cd65a9dd0140f74a74e9d52ea17e5d6ddb7b717b5254a2f844a20ccbe37ad01b05a200967ea47320153acebd5daa53470311a50477a4a86ce30ccc5eb724ebffdb67da99b1b8f52adf57b74aef825c6e7d4c7627c6644493e4197cef4bd5d9706e46bda4a52dbb6ceba127c20a418c4e65729679cb2e4e3ee4e2566eded1ea546b28cf3a79c73cae98ec5bdb95b3d3d793e4e67c477e20a982849b1aee65e4cfddcfe78a3fc9bdcaac6dfa9200e73ce39dd4beeeef7b5dbb513a084bfdab0e4a552c94bb3b198b6fba2e97ad3f5a54abd4c2190d3cca7132d9d9e30b6e49e220c9d2cc148ca549af60520bceec10b7fb5ddf3764f068b1bdf9f3ece8d23c8dab39d295a3b44b3bb5815c310f9df8d9491be8f05a840b5ebb14e3efd6ccad6e29556eb9933aa74442cbdbe22eb187a827bf07b78868f5908fd5558810508b1e65e5b58336fdc9bfe8ea9cc0c6ecdb89f1f331d73a7d8c709e1095ee33f1f66426f2421b2b9854a0794f0e502dc731f4e1031113a290942f2e37264e7022fd48f1370400bd90a2c2cc0074e0270703f55114ae2389c30c2d263d25d4edd078570b01479d6e970cfe3977e96646989fd79a59d77de39a5ece6c525acb937b149de3ae59c37b85f17cd17125de031ff9b52e2aa7573e3a1cd39e77c38e15f29756e949de516bbd82db10fbbb8f1c02e1b8b13e0335e71b0145dd1a595cdef981da10ca9c8dd9ae12867f128a483807b55a8b8678a52e4c4508908212540d7c7cf7ee091ed239117bef854c8c6c30139b85f1bbd009959c49a67da9cd87bf2c4714a29219c104a539769381e3f2bfd9652723f27e20be4f84beac3ee23924b78c9952c718b31b610310c6e3cb0163046d20e84c520190f992c177e0b1a768107fc1eace3dcc360777dec3e225716e29e3f045a70cfbf5a8b7d466584ca8d5ba8c1fd6a7c7f89b7ca1939383f2d880a995ca171f423b9111a5d7848c530a43e2dc9dce09a5e88962bfd2aaba9fed6a580b8f3b3894d98615a9e13cbb2cc64c22f3efae57ecef5a67f23b9765b57ea3e984b7f4d5d75adb419c95b2744cb1a36312cafa7f0ba5413892d574c1d934958e15b228eb2f5e9c603d65a61b51984db43883f215b9775b6c26be30161cdbe3bf897962bfcab7633c3df78f4cf6e0c6466f8f02daeddc96499fdd76b38980cdb5a667d71a8eba682b83a7211cd7c387fa2dca6fd3e0b32576e9d36383079c6e47953b15c80d75c3faf0ceb7cd0af8f53adc595fe6029c83a4685157a07fc153a15647e70bf3e6a4016b9889166d87225f5c345a1fb63537ad1a75d57b5140cf3fde9dbaedf3bda9452cae37ac74066a64fffc2fe57f280e3388e6b130fbf828445853ee186467593bb218478045b6c916552ca96f16794d1c1f5bce194518843c741d69e453ae10b10fad5b662c892bb15c3911272b760b092abd72cc1be287fee960c41dbd46676c15a2f8c016dd5a44a1fafa1da845b0fffecf2e75b0b27c52f3f3cfb17798091dc19c7339823bbf9b39bb963e2e5724a166bd4e4c60313a2695d866138778f2ddb3a2debb7da6fddccbda540b3869bc389d7b5454b869f7ccadd8a61cb9453daffa20a0a324934a35a6f3d30fc412dd7ae2b2c522e85eb319c5d1d7d6d664affba47316acb8558ab2568c16094e77b0b06a23c1f8341a8ceacfabdb36a5fb71e13e7603f2be6ff715c0891734e72bd8387c31cecebf7dc9e020ca43c1f7b308eb23ff6d70f6ce66abbc656af71c16ded1d449c47f785c11c7f293714e84b084d7001e61c37203db71ed857fcf203da9f5966cf99fdea39939fa5d045f9e587d4d19919eae8e48afda84f751aab92b5d3d4917b7d8c477f6a17e535f56bae6a61ccd55215a34c17b7ba176dfe657c70fd3f95bfc755cc38de32862cc61863e65d47f71a29a3e71846182674431760eeee8ede1bc83cc75fca7871bbbb6fc0238c2bb383fbc11d8f010a523af7833b19dfb8270303adc70b2d0bd8a343e6d269bb74184bf4bd93ed544606574e4add4895edfd5036d1a3832b4938e8808a0e947c218506b3e9b5ee4f76fb5abaf07cbb01c172dd7ad4cf3ea3f42b0f7a31aae3fa696673e9d334d8d3255d2871c5d7b6a590655be1b6f1b058db7c58096b8039a6ec9a525104edceafae996578fb99492011eec50b3291b1e27e30498e47bc2789cc95eb1d630d5b246d412567262d33839a4badc73d4943e35062ea361916dc0fd250b54bc35f6fadddb66dc32fa5cfd97e7e69fbf91bed3e2239dbb0ef2deb846819c357c5ddc9a758f3f845469f462ae8fae57ec1cb354dd3e26b1f7ffb49448876d5aeaf25c03bd348097163542770ee35152ece38ce15f7eba28a638422eb98ecd24869e07edecbd72e8a83c1fa29d46a7d6badc964faeb8db8f618f65b97b268246b9d102d67f5bdfb244eb4b06a30d6c0c9c07f8ac0305ee331b056868c5a268bacd29f2f7f7672c69fb0c7bd8913875c46a2943c08e92ca43011a245f11fff711fffc95ee43dee037b604f4f8651b29fcd31f64cec4c236a7dbb0696e053fb4a417e7db9fda07fe1cc3eb4794affe1b808cc138e50bf81c81f74082c02f345bb2230cfcf99446096981265ed354360aacafdfcab929f2230475c3103b28f3635bedf47b491df3f816813bf61bee1dbd8ef8740b421e1fbbf1f12451b114ca5ef6f21dad8f8d6be4778540c97efd4f743a16873bfdf8b36dcdff8fe17a20d08df0f83a20dde68bc773033efbdcccfae0666bd7c8da79d08312fc2777f758f5954e667be76246096cf27e1b36e04cc1aa1fb98df3a1b7eea5238f5f4bd97d161cc1201ff083fa3bb815924c8f8fa21742c9867ddf8d60f4299c6a36856366e7c8d3775ac1b98a784156bfb1bfff2d80be629adfe61302b84377d0dcc2363c5bafee53998473df6313a160cea6b7ca9c6971e8579e28a35e34d6f3b560dcc8363c53a7d8dd2632f3b5609f31860c5cafe06867960562cec5f1e06f3a0562c9897efd2b16454cc13c28a55ffe51df3d4150be6fd23099807ae58a8aff132300f5db14a7fe327e67159b164bce941e8583398e765c59a0fe3619e98158b7bd3a75eeb5829cc83ad582e14f398562ced6fbc0ce6b959b1e8bffced5832b08cac46c03ca9150be6e377986766c502e14df6bbc70f3b560ce6f115eb7e8d978165642502e639c08a65fa1b986531eb3eebf42c9767a13ec6f3c0d58dc798c766c5b2ff82592fcf03571d66c167f9b3e2b3e6cbff8e0583593c7005f337308b3eeb7a567d968d8e15e36b60160c66c9781608cf9af1ac109e7b1eb87ac1acec59dab3b6679968741828ca2174dc8c4e8538d30f42f7429ce997d1c1a038d38fea6a9ce98fd1a9e24cbf4bc7429cd18933fdb7834271a6df54ea6ee24cffd6b51067fab50eeef4639ded70e24cffd5c19f38d34f3b48d47d9ce9979d0f2f8a33fd18b84620064288f508ea3fbb4af6973dff4a6798add65b0a31fe887fe19c4b9b1d34cabdfd9062fb11fdbff8b4b36b0352b3eca14ea652c2a3c601a9380a10662d88c80092ece56e0165c959c31a4cd0c86b3e082b84104238e78f39711cc733e044f6a7d0bb1cfa1852913f69f7d197f002d95edd276374c728d08da37ee3442be590f8c5efff213f87fe65942305a292a151e79fc12d0538450ce22f31a4629432bafd10058d7322864654200a1a473ff561ca0c518a0a70a50a2429a862c909829821490e62922c5186acb954d1fdfe633c9a1ea8f0f08229f6b2167f8c7b5b9210a4a0fec7bc8dd184a4c1081252f490408b180011f46465594b92d092fca025c1e124c30f92f4f416b5d6b7f6062b81a22d49f820035b0825ad6c962bad1e64908a525345dec7b492c0209772b79254c9dfabb4286a3df2b9378751e8d0840c9cf822c91335785165e0a4709caa032a151428509e1cc9dfd716011117bed291e1d7d48bd036f796f009e1a2f729278e3fc63de83164ff8bbfeabde7fed5ff226577d9a136ace57eefdd2d1eac64f85a9c40d0a039d74bf7e09542e25edf434c19360e58a37418628526c01413b36bc59f7c2230d3d98d430459d65a966a7261de3a53d521288790bba5c350cea6b6752f3ff057ca4a19f54d6ab2843787ddf745965f3dd3ad87e70d57c7306c6258d6fa39d2c2818b5aa5910d521e704c382ea584470bc090bffb422b87a2d6cf1329217f89ef82119d3cdfc814da73f69c3d63c4d1c6dbb081008fd1dd6374cfe9776fc707c88ec3c899d4644f1b6546ea89169228ad1d8e524eb01c8ae4e0071770c1032dac705275a8b49054914a22f50408b95b3f4159cbddfa4132a5dd3de763aac9f58f113fb9fd527e0a8a2b7f3eb4bda3775c5fcdf3876020bb60b691e77f6f23cfb791fd119073ae978a811ca0e80079fe01b27f87917ba33f62186164af42a53a22c278c4fdae7bf4d8f2d9d2ba610b08217cfaf4e5d3f72af58a9e99df6da3801ba8f40ced5246dc19b9b34720c3382343a12286b819fe0b90083bd0baa1a808c97bfce7ba28ce7ddcc77bdaa38989d15454ae8f68d3eef06f50eee35d8c95e8f4929794f2f26f292fe90e4302f82af830ba06a6ffb4ad12637f0d61376c5b85b5e2355b9a8bd1695ddf993276dc4f0d90b61fcf7b6af5ada75b8809cd900988209251ad44518a6260bc07e53d9bcfcf7b481f8872c3502e2177ab6788fc5ebc5ccb549340b02caf4bdb89fe5a8fd72091df412525b8f0211c8a900828d4dd70474345182f9a36b8c7540638ceaf9cc968b972b77a94e40f12913ae20ea592f63a4705f468204230b6f4e8eccf05d49225776b274b6e0fe46ed920946377e30a2b348e88658c2fe59c31c628a39431c6088491f40e284f00d436ecdc488f30f18a12c545a98a978b99ded745530c99fc53335c9865b8b8b0062dae056a105e4056dc8357dcab2fb383eb3f36b89f6bc9ae93c5e75a327cc7e2593cc96b8252345c68ff83401e8dca3d4f2743aac5bdf35fe6bf8c3845c385118909ac5a8544300a248243d0877b7efdbd2e8cb2f269b41f2a532d62988d0747835bdfbbac15ea94c63da8923e2e8fc7f51efc1bf8345e432904eab2102d7b2a7f7617beba4a5381d71375e7d2bfaaacb2d6aa5d89bdcce495d5f499ad5916371edae974fa1e9d4ff8c5e5734e5ffff4f55dde964a6f32b99c6eb77d6f2523d9d4352097b62c53a8e031624a0c2876a86143dd79c20650ec781f7373b786bcc8df5f726b41578905cf0c66c0b2fc10450d5eabd71a92a2354445861be4d0099ab83890352dc63d29535fdcbe280ea728c65de051dfbd6b1cf27de3f18d437e4a06f7eb229c04784d7de95dc718230ade7576ec4edc475ab2afb7e4cc847d4ec4bab3b689786d88c523a571e6d41df98312d6d02ba6b0628bfc5d5f3d1caecc0d79d0383d462ee60d35386104100c48435d5411450e46f6da68030d50a26841915273b79ab0828af676683dc1a4e5c4031e92d61357783dde0ead212286807c904e629c6f24c71863bc20dc22eb1838db7f62dcc6a2a6acd656ce7be84d8e5cca059cfbb8e0fa8b20eb18ad6bae7a45e9332f61292c2e0bd1e626c69befc64aeacacdb97ee6ef26fbeb71fce604afc13e439a6147e21ef6f15f682d17c0bca762349eca3d9a4ce50eafa9f29a0fa6ae807fcdcbaf540baefdce5f5bb9726166a1012d38404892fb3892d61159f2e7b190458edf80d692a3ccb58e30caf14f682b37ee7361efc16eb49b68e3dd64ea80a8519fbf50fb28f0655ec4f0077175cfd38e886829f1733a9dde7b4eaee4747224a779ff74f29ecf95dc93e974baa7bf8ec4747279ece2f22709828c3fe10feefc17e367fce9ef09ee54176cc22e2080803f192e170a0bd1f28d813fcde5dbe5e24fbafb44c18ac312489984dcad259cd84aa592fbb84fa9e43dae642b69a5d256facd9168a5cd54c21ffce0ce97aecb974effdd477de9afa3f007776860538c18f873c142b40d7f5a2efde6d8ba0fce570a94d06992d4c4a809511640ee569323315e10366c0dfa051b6b7f75f7e5fdd073ae4bbb5e839aa6699af6d86326ec3ffbf7697cf67465167fdb5f6c53fabbe1538c0b77c96ea5f7eb744117dcee9df02dbd6fdbdffbdb9fba8b3fed4db8b45d1a16a2e50cb33e3e9c266d0f4cb860428549949ccadd628284c9913c80dcad248e2eafd7e557bd2ec7e4fcdeb4eaf217feaed7326ce38275f80c2e39beef157f2754ecb884bd6873df3fc3d96738fb52863fd3677fab7413fe36edb1100d63f87aed3fecb50c63d87ddcc77de405a4256bf9e59328ca04c8dd4a6227b790b0d24262a8850416f9d9bcbcc6eccf0eebe0bb3d7d06c2675133bd8d9e534bde53c23971bebc5fdc536ef3f1d2fd577a8a37fae2165a68a185f689784ee93190e9653feba5d2c3f7b717ad944eed29fee253ba61215ae929b51ffcc15f7cdb2587b85ad7b2894bf805ab4e319c52b72fa517f751f30cf933b6b7dcbf3c16a2611ad039ce5ff007775a7879c19f631a3804cc59adc6184bd6fdb1b7ddfc3ca38d3ec328195885c21d67626095e9db4d5bf6dff6fe5fe93dc66a3ffe57c242b45cdda7d6cf62215ac6b0ad58c5d663b4d87d62f76db8fa68c1c8a6fdeb2b1fa6734b616ba1b4614d42ec3e30c785596badfb9426085a960c2d29824f3fcb1e661df6b1ab4f3bcd7eec6686e1f836c7852126f7200d423bc60f77344126b3c69fcd8d24776e238ee4f8d508278a0cb9324ce370cb23fe854a5571bfcfef351f2a468c8ad0e76b37765ffd6aebc72d488d9d74af894838bbcf6236880c023ffef5d716640b02bf5504175bd788e57c08654c9ed953801f1f152f19287d8c3e964516d951152b572c06e1cf1fd8538cd2d750f0ec1b90f8d755ebcffa1352a95dce7c20f16bfc315fea671ed5bdf8b53ead52485125fec545bebeda707dcd22c79f449c5c4ea78bda508045f9aab6cb396d4060ad77fb41bfcef9827dfd46c1f3f59967add3b818d5093e566841c80b477e947896e19b464415cd5610b48fbe6f4060114782c4bfeaf6a35e5b2190f813e3ea12769ca5221350940cff4a1e824a66eaa7dd3b5ca86fff83f9b3f9caf6b16c719c5b90ae487c22432ecf347ad74feb55374065034c72ce7c93bde3c708d7c3dad10d85f9d15fcabf9cce395f7631d908851128cba4964959ed5f1af6b3d259259428b8bc64adf4730e94ab0247a69b3ac18ddf9e333f95822bbfe5c3de61af8c76d85b8ae10f760ad75318a1845bace022c78f5954c9f0a914196e4049b691bb25c4966c3fab90c2bfa80bb5af0f3bed6b6b6dbbcfbeb40f938970797b22326b9f1dc9508330545cd8c3a47526ec6b97fdd5f5d3aef4a62e2697b6b728c08fdd67a477b85044e66e1cf21b4f08bf20f4e995031fceed077c4a65fcbe82d08734ee413c5327b8434c197e7d9269e04886417091e1fbe741e0d36834b81b76f4613f4eccf931428612c320f01dd3b8d79f9445c6b95b4114e597f945641e62caf2877c16627042dad5b79d96a1853526d378cd9cdf1a8411862086f28edc2d207eb2105984b08286e6bb71d0a7d7534a535450da3326cb4cd338fa4fe0ad202ef2fcceba7bf921fffa1eb2e1f7f780f8a588ccf0879872e3972130d32f2273ff1053ee7eec8d64b9a5e00fbf08ccd47635876222304f771effe816fa47208e1dc226fa1d0af951bed38f147f3ebb08cc8e6b934cfe1594afa735482543b93e955aadf772dcbfca53a952182143ac8346caca8db143c10d5790d01051d1048674767e80845a4b91cece0f50901050f5a31b95caf39e4ebc44ded0a313feab26fc7777fcc715e0bfbff9cfb379b7d23b321c5a43094075d0015001d000bc07f50eede177d7f74af82f47efd846f82f87f7dccc7fb76ffc97c3cbf6b95be150ef283dfc177a87e943f82f47d3e89786e91a6da3b9ff72e493f7f9c45d2b8fd33beec31d31649c60c28e02dcd8e02f470d01740c4000395439008083260709335e4a26478c08b8fb1c366ac0bcd0c89163060811e522a343b9b8b8b8b8b8bc8b4bf7c51c6a8df776e3c8dea59b4f29a594d2ff72a03aed5d3afad7755dd775fd9703d56defd25def5f6badb5fe9703d595dea5ab6fdbb66ddbb6adfd2f07aa33bd4b671ffb2f47638d35d6586328ec4fa7d3e9743afd9743466733aa8b815dba13bea6d2a60559f1400f98d0420816dce4d0624a500072b73a90c52ff95089e873ce3967762d41df5e369bb43d255e7e849127fe324fc15f80c89f3f7167df50b041d84b26eec52c6ab267f694734687132b492c771a47ccde53e2fae3c44cee7c92881cdf769ffcc971c8bfc3c89fc4d1a871f8bf00e98ce3d70b10f9f429ce9938d7273e23f98a8d54b1dc24ceb5bc8eb773e34344454647568492b4e8f8ce0f9010529c21aa45d7883b7a2b1e1216d59027f4411cd08f513dba5638a4c7e2ed7837afe27662adf55e8efbf73c3f5ac51f6f6f9d1f20a0a020a1dcdd6d0529b7272569d1a293bbbbbb8f8ebabbbbbb5b080e2569c1928484c50a5277f7ea06a962811fe1df5cab0908d5a14bc4157d4cca5f27e51514c292e1c3a40ab564e83a4242fe33571089a8165d23eee8ad784879762b0702028af16517577eb4136d9254583ca4b7c21d5d3fba95bbcf79aff26e6ae9c24b68dcc9ab00801109f05fd5f1df1d8000fefb1c80ffbc3c2b00febb997234ff7d09ff7924bc705dd7f523fce7c57c8bf05fcd95fb5c3d55ae58be0ac365fbd97e9e2a5b2f63df7337638da9eef739e3b2682361dbc46aef890be1bb38a5bf5602e0af5e1df8bbdc00f0c7bd00f0f70150615973e0af5e00e0ef7238f0c73d0dfede2b017f1e09f853bde05f67f057af87bfcba5f0c7bd0cfe7e8418ac254984213cd40dfdd08d211bf853e52904b14c2ce471f85305459b891467fceb0cfcd5fb8fe46524b7126da84ae579ff5c097fdc8d3fb1d6cbfdf69fb7e11cf98b3fd72a1a45f84035e80a71434fe4ada4ce9c3a5367ea4c9da9335792a8d67b39eedff354b9932b99146dfa9249974cba64d225933e555c4da16853ebbd1cf7ef79febe9a482a95e7fd73dcbd1329534d767045816ac51e7becb1afb614df66adab8d037ed67df56b2d190e61f1a0153d0a0000b49f1cbf035772b7a414651272b7a41c65c9d336f547eef40efb53888898183a424888a01c8172c8de11f7abb93d935b0f9b2dbeac348ef8f5a773e4f0bc7f8ebb577a475c8fc9fd322b99955aefe5b87fcf53c5cc4a8e3fd106275ef5e7ab2cc811059be351e388ef2571bf9a6bfe96683f485d83de25ad98d610c28e314008dd914829e7ece1baae5a81300ccb321f4adab66d5ba9a4e4de7b3a0581d262c0181f23c6d6036ef01bd5ada223ada2a0cc75ada20d38aa8acc2be24acddd9a52a535458ad61429d95f6b4d19ca9c7b307044b44cd1001619e001cf1041b8942950542950d4a0dce56e1db12567a62c3a4eccfc67060cf75e0ae97e3312e06386e421f583fbfdb7e45025c78df1b7bd963753293a51d5133e46c7e53c245d38d1240b18c000450b23205c45831427dc7b529ec8fe34aa2aa5496da2446299e18728280e464a49420a9396949d2860b06a57ff7a9d86283009110e8694486281121ff2775f88c1a1e001a2c19fc8e033b8975f7a342740cea351e98022d860dfed912b73b7a2f8207bd13d8a17d9dd3dcf7b18da71342a1d48a274313bcc719e47437390e124f27e3c1f8925c31863627c7a3638921a70288282ca152a26e8220358f2105d8211f440072024a208c1950a04a4b3822f669002288e84f04952c5108da4b3032753a0ccd0821b6a0f40348909532c61840e3154d1e4081ea2982217110125be5862882a415ab8604591245192a40719ae10e206da82ecf50ca1d2baa58d5cd18b527c6d085ad2a48a1fd8b0040e2bba43a6f489a34cf137e594a22c9f46e5a4876ccadd724243feee4f26190580f84719e905dd8fe338ad5176424a4bd65a0b2794d108231f06e0a0071a76c001092c8c7478e2034e8e702fdf6365f9345e0373cbc90c591ab59cb8c2092af9bb3fd43aa2a7b5e4a825b4a525440227a27060085e317ac431ca1865e43899b2e27e7de4afc2516b8e823b1e6fc8b2a8efd952942aa2126bdb0b2d4564f101220a287a5636872850448982033e6c315d1407e352ca2a02252168d203253b456c8049fd81a2832cf157250f93033b38e0c091234d0071a4091ee860a150e1021930a8d284e882c281268ca612b6882b886c4db95b4d3cf101d6239d40d981a2c3b45ba0c0802de1350c45e1ed78ac1b73b786a8781fd38410f97b5564d96a6da5d65a6b4190ed55adb551f8100511289e19450f2e3c10aab5e2f024e9890fb6dc2d266a7004f460b834778b8929cf440874b8417a1f136305f97b150a301fb2273d4e5c49e20b15f8c0e709952755586b6f94ec08029e347942e4d2e48bef24b532008b2e4080031b1c5141b2aa373ce9c125778b891f2e1ffa8b123001c60aacf0020a113d5d6ca96fadcd62adb581a80a91153272b79898618601026badb5a7265c7a4e3832c4153198218730926a20424264c48c2fb81d19ec643b56ec84f083095a86ae54d92128a113a864ce9664b5646866040000a008431500002810080684229158349ca8e9643e14000e8490487456198aa330884110848c310619600020c4001010111a1232290ef28d1b04fdaa45568de73bc2acf63e74168ee2eb80e3a45a7a0acf7268cb4160f2fbc2e6e7c678ca0ca7022ee5dff04d60b1ba38ab3ee956e42dafeef6bc1e9b46db8148c15aef3aa2a1eb0cb1e79a00580e081354b4fc8d4b565d70e3767554be04cea780c0d65fae2aaf93f5402d2daa15040935c57137f1cadb7191b4cf75a0d9f3123ee35988a2ec0c12e50ebc3c441ed16228e31237e4d04b54319ec528d6d8053676ecc7ead1cc28b654dd9ee27051796e95d92a0ab77083c212c49e300e9813a6e1d58425d431618efc797a62e946ec1a9ce9ee700d13a9d516742c448e4f62454cf9e81ccf6b9bc1233ec94951954f55308b281a418cee0bffa8b36fd08bea486d7ede55411342ef4fa970502c959579378ec7d295742cedc4f052ed35bfc1a445ec1969537736309d6168fa7a95a6411c8d96064d5136302d415d533d3b43d1a6658753a085694ab7138c941cbc3da38af0c5c4a3004c4f7d9bac8780dfc8b1f81f7916c6e93fe53c2eeb003a1622744e02a605287f9a8331d2b2e15546e5770a5fe119b335a2f4988a4f1b3f6f2af730c653556dfabf163add7ffbf335ae7bcd87ab9457cce43ac701755746c9556b3e2f949cf60cfa2ec680c6bb823769a1ca899f5d8c05d40ea5ab84050badbbf8edce18a0ed285d252db1d0bac7ef2ec6036aa1d4848165a159cb760dc948103ad997005df7e300d98937e21ccc2a7bb9d319ceef2442149c9aa7855999ed4e0e0cc7ad074c31b9daec3ecae707052f488efafdca0602d4bdbe3ac0a3e247aa63f85245fee67ab122b7ecafc2260784cc740e318debae31b2a4be0f4f9209ee0a85da79559cbed8c2a99384f67e000aeff3da74936756ef86568007cf05dad47e69ca83f36786410e8a2bec4c5928261bc064e38e136e5f60b7297b559a9af4d6747088cd59f6c90d4074ef1f8532129d8ff167a44ca10b5342d5b331a0e1418a73ca9d243dc8ea2c73fe068b31ac8ca530ad5ccf082d440acf4c60ab0c3e80673a67008c43315fae2eadc9ed3b5c4a04792f7d85af013e8b54747841ebc167f2daeca2fae78677589f0e1407125ac7d445ef5e76649d8e7a3694fca2b5c82f4f0e66b3ef469072e517516504a5078bd16c5d2a919677a9e9d4ac2fba03081129b9e7b52a212dc8985ff66ffd7ad0b8c5576b4101c9862cf9db690cd518ef24438915286cbb84d88c9a2af6590fb39f4b66f1f9cb20c7b3fc51879b770ce5fda1906a1f3e40f2d9608cce710834dc6d3b8e8c2ae023f507674d1bb0d8834838e7b39a996d8aa0db3f126395cb4411e8ce1e8f5676d2c077660ab9084859ab0e140f67a5048f496612810bd60b0fd6ad11647c7df67ff9c5d78b010ab384ba7a11f477c1b939fee0c6c6e49cddee8065e1733f91fa8e09119acaf3f11c4556349e59800e75095d6c6cef81763cac0352e47e768c15e56c79e8ed0cf891859659d020760f598694853a81d08362908847e4a67003968a0e793b040e0e5f0670b10387bae08e8837c28f75c19cd108cf4455e14aa01812f2351853a95fd0da6299cb5387b2f82f300b45faeb9dc0723a027b831f6167087ce4a8130ae7aa90037307022c5de3988589fa8165508ed72bd443f1c242d083b3d95007fcb36290154e4033ab74b22171d9db0038770736dcc830061242364edab55146edb9b2cf7f5ff06a2d1e9b37ca54e041dfc9552e3bcc52dd3090495c8be2318dd582779c90f0083933a87ae2a4c73e78c9713abc9759b61df7c7dd481aa2a6722258cbdd662a6c8bb797761914d8309c96f52ea08c8c5a83bb3d9137d526af94b43b1c4f49b385fabf45596e571f1038be3886094a12d00d02df166d625709b62dac48761793b0626ae5857a17e7dabffe759d69cb736bfbc7dd0a7a27538be05a8cc54bfc9c36f39e21c90a4a736a8684159486d0196a4b144265d0d0a95226bc47d3aa7608926928343e243d355abf02180e105a98e9c468c0bbcd9b2f1378d679f312036f9e5cabe507ee495082ea218dd1eaeda00b6595deedb2039daa75f62a0f2a96403b336a38d768d52361bd67dac38b71ca4fed5543d08a24c24f5cb2f2b5e9005cf4d4ec2dca7e62f481eedd53ba094c63f6c1f803f0e876dbc44a765f06cab7e00d712d609edebd6e12d8f8be03a8a2287e5ffceaa5f0dfcb25077163119eea04db95653c8610bcb4d7220d86d33cb8978420b16e17adc49b8d8f15520a9a45c0e240302150bcc839584a16aa2136531a4a0acd8f9900a44955085c3814134779a5de2716667a48d3c46c2627410c87b50deb41d0d7ff105aa19e2c945e041237dd55b15243f3128ec3ac2f6e5d89ae70871688b655bca3ffd77870d567262110dca38ad8263721dfb9f3756cde8bae3a0d123c28ee6e704dca8627b16e7daba5d3f2b0cd69f121da207f01aed7dcc20ce8c8d842a5456c7522d7577cadfa27398a00df67e6c1eca7f780fef8694de67bd09fcc3f2d353f2269a641adcb4129e9a0061ef1867a8c833a786117149532884870fff9c4940e42c20f14a042728075e5651fde0620398747eae28ce6f16f602ca8eb493dba070dcdde71649c3b819ce8cb20dd3919be1738d91a65a0dc2f3439839dafe9fb5c46c43b72d192e125f4be1b5712ccd2368fdb23d766f910c454c719ebfba398af41a20f064622f55548f864e2a8ef625207016bab21d649065d0a98f47ec8cffa32fccffafa83873c8c77500f3bf4dcd32255e505144cc44d02fe99ceb406e0a3ca12234c10196ef32fc62806513afd7fa286f914e6fb4177a62386098daeffefda685ccce27ec7eca9d35a78a8021c446cb6383ee15b88f938c255dcdf28135afdea30ca6cc8b4a2b85b21ca0f2788d8c867f49e4303c33cfae8fb01e7b9e71797774b83ab8e462dfa533e42b49d8c63236a73ba62a1c6bd56f766d330b5469a6a55afbf4772f20b64e03b0f9821f100a9df10dbd0058c21a85128fc8147431495f4f941a5465b9df37aacce9d56643af50da6104495b81111859e80d7dfa072ea3de844662488f08fdd271416aa6451b617edd91f42d4384d407027959469709268d88bb9367504cfe443573bc9a032be91bb40c7213b5fa1811c6ea595c1ad974b1a5182b100cd402d04761b8122ea2f90749f3fb4aabf91579b61ead2d172004e56ae6ee32effa6a4fd9bc6b4825dfe8dc764062b52e15e229071a56fdb5c2b34acfa331be3c5e4ef6f104a7091be00ca9dc18004e6ddfab758527060b42b4151f56f00934170705ece40d58acd17489ddc19fb6db6a000e0542dc61165e3e7feab7fd2cb0e76431b4ecdbdade147b8301ab29a3c8c2801ba7556c00c3f0ead906b9c675e20033b0213c4e9b13e00f93793145afe9486c46bd4433bd00872b84a748a449bcfa148d75a008e8a0e20dbba278a5f7aebabca2a740ea06398f3e3ea2595995c59f436198bd3bedead812051264aef1b94e399ab09bd74111382a96b4c8cfe84006994c918d082a8807e1058f0c2c076a473b843ce82098e644fce370c0bd058045493834a0d5e1d5c606107eb366505e70d33c59dac2b0950c7ddaa84f90306ebe268047db8010fcc5c3a62d35d9675521e93651a63f6d5df0108f4fa47c3822ea38c823a08ab72d447f88cc1d5f1099727e3dd923392e1801b5a9248294103eeb305096946ff98c417ab5b7945f099820ba74dcb763b843e107e428c1689759f20e18cd36cb22d275253efa2de39e8e2960cc7eb6be44f8bc39443f0a8acadaecef8772ba4537955f9d9bf6de97463c9f63f8ce438fa1ea2718eb0c01dbdb28fae4758002890b875305cbcb767c4552099751d23984002a6c007e183df7b73b5a362475f24b20d8a995b75ce38b91a1c93cb3325d95992fd26811c11b17c084d18c116164d8f5b9c5e18fe350fc25f3bee0b573bc89f414a58b312eb9d7a2580b3ff8f8f4ca0c2bbd02b50a2934f6a18cc3d6fda28ad1a7158b24964ee10c699ea6612e53892f312a1ccf9f538e0f8d80f50fdeb5fa7feda87863c086f362cf0c61092e85fc59447bb15b8e1c287b60b33658fe4ad5d6481440f563fea1228a730e21d5730254ae764e00e2c814b60073e2af00efa3ab87ec38dc1b4ffe0dcd9fbd3896b0cd60eaec7cf7eeb6bbf1223bca51a84830dfb5641cf0f8311d6731e060350ab2a25bf612adea969b29c345d61da23725afa2289cf2233c252cefb0000da4ee51437acb84a4e1a76ce502b32780621a04224c550130a2212a5e48550e9673c0918a01c180730a8f852590077d91e040b50ed414ad82bde4acbb6fd00219a0caf41375053a0e58642d1c9fdc91632c5d8430f6b1004dabe962ad2026e4a431970b2c0c96c22b5edb65aac33a1dfbe500e28a6bd7d7857210f201c748e62d33bb7d6fe8d933d7f66d918324bf12636e3e1e64de822c89407160d2a8cf70e0da967a665dfd138eb870ec5dcd4029e7f8efe29ca013a869534430fba12b1d67b4c3386a5329a34a01c1abbc0f538312dee7a913b70dc9ed1a936eaebef09a2cea4cb9fbd9563fe3b4aea56e468f4056b13f038563aa66684b9d8d880283e8334dbe556cbf4d9c719ec59cb88b37d08f65c86ecb3cc99c31a0db52cfb11d57cf0354e031a80ca53973329fd5e8b11c8dbf69bfbcb197dfb4c0b30a3852a374ef784152f432c079fabff7d0f7ad62b7d8a125c082d29d5829980056a54428283edd8d363f33d596901b3d3d4d3e57eeeec7cb18b0ea59cb64156a0760fee6d4d730ad478797c0e46382f355806bb8644d5f60871e15e97ce9e30066a51b00635352670d078077d0d0c98e8acc0f6ac0b878dc350ea6505f7326fb1b6e902f249a34eae5d92b09e53e9d80c5442b2b10d0fbcaf6d08bdfc6758acdc1e808b3a5f62544be554f7555b3453df085d0d33a5992f042dd1539072a6b86eab9559872eaa609792392908bbeda0a0da44d2b000acead73ee85806c18bf337635b0516959b9b6d2c7e5f1fa338ceb6814a192c84da4ad1baf919fefa70af5a8508b1f08b1eb68f20e935232f1582c5c500ce24cf177dd371377f3fa736e603af38810c17c16f8a117ceb1cfe9bf9c8eccde4f565bcfa2daeba39622ff3dea629221cd2a297e98b7bec150db81afb88bdcc6f8a0fe635a4eb65bab1f1ffd2b07a3de64580335d1ec78911153d3a6ea82315296d7e5439a8daf95c93fe5228a4309c734ae1c0e49d607bc8a53309f9b3dd10312160500f1718a9043d433edaa8f20f5e3469e4dfae7f5cc171f278867120908514d6323cd1be8c2fcc91d07ca927f76399af3cd8601e21e6c537c1f9c92ad3a6c0cf0a89f78267e4241bc8c6c9bdc4a7f54079d6926b5ced9c2ddba59bdbcbecaf71f5912fbb45fbf3c35e50a168fa0b9e490700bd4af0de6c322ed4f321be928c0b6cb3cbd42bc0b5d373788168bc52a950e32da0b1d9c19a0ca5a42d916ce1ff7a3da046ed8183102ab6f390e2ec52c5f3d541e669f42ebd9be8c87e3c8420852472b63251c9d0815b38a5bedb51b4924190b979c3944f06092a0a9412baaefb7cb9c265abe36d1c6b4a27385e5620a98f026cdc4a42595a6d0486490c0e80ca693470e01b9d5c15b4f9e9ba261a9612a10c570f7d7ad498cb125b3ec995b5c13f69927d55c4410b900ef94a59263a961d0176d94ba4a328e2faa9b57423332b6fdd390d230369c54819cfa3c918367738693c63b3089215c033afe712cf6673c238f2dcf270ba4f139d8f01d2f19d0ddc8378d2bd1262c95a8e304196e000e6dca384750aa9e1aa0bcd70a45e9d9ad6aeb43ec8cb7169577faf7dbf190a1dad27c6987c594dd94c641504e8716ad89c61c0831d0d1d141a9e4da8802e9a82d616f97f60fbcac64fc3554b41624523d130a3927ab473366d3ebc586c50f8ae54cfd68049e6e69f02298ede846d336124d044073a2101776d94d71f902e16be6e8a34ba69f9780b9bc55cdbc7bc7fd57967531636748b618367ecb4b0ed236077fd2d53b021d32d3622be0e531ea4993d384675e1193780088a50d189836fedc1c0f4c2232bed7a8f7556f9f859f85a42c2bdf4ccadb22537b5ec8b215c59d0b0ebdad653cf83804833d78990f0b38727ed915b8a23294fafe1aa01ef403833eccdb8be766c48443e44ba16490d5863bb9400d1bfa905eb1f2652c78d5a10a264e737f84deaebd0f9652f7e6a175348fc13c8d5c08ac3e3b0d9dba0db590cfb7724b2c81068784935b33fbf5bb597c155a077eb4c1713975137869cb10d97f95310921bc372a0a14194d7a110c490d7a5dee9fb2fe7fdd393e9c70e0b1c525792852f25b6215d206a1070e965da995d8710c9e475d58417b992ad2712bb7ef030455a8573f5a7b6fb0abae17ab486514757348168171ef3c0b3739ecb9262d0975ffd4dee85db3a1e5a95d5aa4e234eee3424aa0c0251a4659c5649a8ce09765f3de4b98c81694523a2e89478341004791f4a8a3ebadbe2a74518bad0e3deb11f96481adbe9a6021dd6f482947dc8c9415b92ed9a5de5c532a8dc62c9e8bf0158b540b1b722a55572190503a925dd92a3cb048221ce2590f4bea8d4e1ff47417bead64e929e5d5d96ee17419869e1c0f006b52ba11c2dd7b6621f8010ae3828b04dda3a55876f6961b354f8988487858159263ec065d8c8cbac4fc732081bf991eb7bd18a28785fcc544b02a5d799e740553dda79e44d2d14662cee8e20d1a23c1c854d5807a5af1764552a2e9ac5a8b465aa360ad331bb5b05cc409ae6c3bbb617658443eaca284f00b5372945ad1e8fcaa323915f9f9f96c08e39d94a6f7ca950c140d3a6d693bdbd5c3bbfeb1fb62f5b44c8671b7882e2b4dd6f7c6a512c32eaf2f3ed00b45994c431cf283f692500658170662047832941f14ea60280536ed0c9546a018002ecec6ad33f178e389081a6b54e3c1ff41755e96ca1344af430b8144a1aca652c20f176e06ca9d35603c83df2c4608f8aa75152e29c6b25c109718e2c29ecc2a4039c6fb8ab80047bfb025c4707f10226cc2562c680fcc737eeb34216812f8ec89c769f7d797cfb5cb171bbb61aae0cb754441ac9a906cd91a904a253e59147c8aa2878ca1138bb9400aea5c19a8087f1fa2a364e20caf405a3485168c8dec93434138f388a0a79d7d028f9a937386b8085dba0014735dcde11a218d325988c8c837f621068d84a101c468c413fa8aec027f4bec14f8de20e5b8ad052baba456805199ff3b93d6be708a2be53ae5f1119ca78bfc2eb469dcedafe8a627863473b736abbabaa278c271db1f64545225d827da7f0c969039d23b303c3e854fbad401523b388e63967742defb6e514603c3fd95a5a3a4543c653baa76d24a1f22586f46b5bf2e175fe0671d504fd8e0b6abba921ae28ede9178a794acaf7d79029342e31644ebce88091a72329c8557f80948ad10ab8dca02a53e24c6c052be08c4bb825c02250c2cc3fcbdb8692989a26d03147c93094a3009f7130cdf13ac5d2615e3818ce08d6feb5a9bfaf813793620421949c46d431f760ee4caa09526b0df681249ddd3ee158ac6c144ef324b2b00a2c78bed17389aa3b78d3c515b1dd605a9606a72a3e3029d710c6d5688d39c50e5f6d3dbdea5fc815962f2d39ca63170efae3d05a07583062835dc9f8bc31eb8d9b0c40c27b93a14754baa0d7cb6343bd5240852bb764e34625b22cb2b16a3a6a24ddb67db394d71607071aa4fda8fc5dcb257678c50639134486eff0ae0acc9eab4ab8949d73a6fea91067fa35ff0760899861c3c4d3433a081ad2297a65c9c194c70f84478a8e2e2dbcd94e05c72b566831f845c58f5e153b13d9478f83a0be1505b5deddc0385f3b41e0391036459f5bf2c62bdc83245950c87c2a40ceafa2946098231b741ec61466c94228c89d248675b738c59da1403fa28009818bdccc093b5b8dbdc2caf24e95282022d1b08d87f10243cc9185b26db87200144db4c44d9a7e935a45d31bce08689a52782c0235c7ac71abdc5f01c952cb8873c5d101dde96a84644a06c4e6d7b25baa0eafffa186e687d3ef1dde2edaa4f1620054bb0ce69230f12fa134f1bc2639171323f23e56de7dc55d3442ad04c4694b83815b6cb7d90ab070b39403dbd8ba4ebd0fad3929483ba10e5a98f7764f470004f318a3fc0b6b52ee86ec15a2e72fef8431da04895f664febc8e92f72e532682c7513fa5023480a83b5a0782f65fdf13076f689680fb199423dd803277d07e4b97ee65217e964f03b8fdf88d41a8f601908405ebb37ef34d3c257c6edfb0896b4ae7d52a51122d13ee8573defa27424a9880c2895f426189b6358d5c702ed7e2cca98e351f20c2caa560c044804346807fb42569032704879dc64595d39eb289e7138dc03ec3f42872c8005f20eb2816b9ec8ff4cac3ba3304c7693f14c717f35a9f03f2743fe6af9fe5fac159e93a1605de17824f1a592967a04651ca3b794ac00ece368532835b6a1c02755c827fe228f38afe9f86e444119e5ab17cd56b28270126f69d92636ef3a9525e8988186a8db32ab092b51f0bed7b1961fc01697a638afbb5c8e6b95dad76ece74fc7cddbccb092a47723b3fe7dc4059794713192783d884225768ca10cae73c2a2b0445ccbb76a5f3d89434cda8c220c30b0ec13e6a06da79bf1912c88f0882ef751132c1ec35740cf94fcd2d8b57ae3c72511f9cf1811e07c71ac765f95192a68cf90c4ddd64f9f19063b4f384b71368ff634c1c369d73f978a31b519dab41942c891de3e881e2465750be4f928e083cdfda1d21c2761ba0aec0e3aed7749d89379d7dacd18f91c2dd431f5b89bd3d9988a64ac4bbca1e435daa23e8489595337df71ddb01058d43c5fbbc0f59715f1fa14702471520adbc2294b1971008f2022e05bc1350c0bf91df07f0e4f9e98c540baf79829466c57ab138cb67cf00ea496d920bffd3d84e23fbb4d4e27a974a4676b8568e041270e4e62078768e3094e21172ac82b961899e02d95f89ffeac38a6b038e086e1e560075eafa1fe6f5b1fa6ea476b19bd90f1b855f58ba54574078ef11ee086e9081f066914c89dacd89e0f0a31b092c5544b911643c23f9237b7f13d7876621e85875b6b10ad64b37b28d042f927c09ae6e956d1f473171a2e9a5b34aa0f065a949ccaa44f876c06f257cdb6507bf7c204f5d342e5d11d8acd0f281ff99b542408992e8efae94c875773b0e4fcda5855a793b42e493964a1b2947b5c909d23cda17976923e1d4ed8d2f56556172e2fd1511653bad48934cab98ee85adf32dd0e44c35d8c8978d2ba747ceecc6afa615810884bb7c7a8bbd29b06b24327ec998278d6d8da08c9c140d7a045d11c87d350266cb7fb9a1ec281549bf346c55c80b6b42651e083522aa65b03a819dac3af28e5b761fc5fe816087ae5964d2294e9bec1ae6cccf9df5bb60a72cf37bba7214d466cd26f9820530d59f69f44ae92dbb16279333c7d3151df27a74481870ba829af128dee05cb48461677739e3e53274463c2f17a6b6350289e0855aea802d75ff68daeab7a22dd17c59f704fc2d18af9fae04f7f44ce86e4fd67ce5bc666e0e1ae6acaba5f5ab2f0fbe4f2ea321e92060512d342a5c6a53d515dac4a50242c15f907f6e505a9b4393b29a7c61f35f5c3e7b4e3f33738118800d5f3983091b790fab66a69c1e567bcf022db081e12938c9fa9c20d3e6d43444fccfb95243b7d31d27cef52b3511ab675a19c3a1f18ca60a7eddb82b4dfaeea70f1b53146685f517ddc40cfd765e4a759db572cc349c26c2eeb0bdb8d14ba1cd0d850f7da49f2d920ddb0f5e9618a205c822a47496c6016a8d8129a7160550055e54b3c68b1585db4c7a253ca7df9537e0f0992439fdc58435fe78a1929824eccfae2dd8e55b15b212a944f9aa9b63a107ec0858b42867ac4fcbd9821524796ba37f9090b36e2e752bc10b543fd486361b10bdfd63089277dd0b705cc5995c84cc7edc1ca8f01ed8aacc10b5d68643fa203aadc2ed70ac6ab17efc48947386c0e5a2246e51653f4760f367a72df6e3d47c7972a3ccefac7d88410ac86d1678195e654f137d7e7b01b69a8c26f652ea5efcf0ddeb40dc8b184528d8b9ba9a1ef7a2a53bc36d875e5a5ddf743312a368a431853ca77f683c7ea34745c6ccf5a2a2c3d05db2a16a61dc1addecc641c2f4014a48e91f7316991f8fddd2428d1f64be37e52305575f806f8bf4b3382c2f014c5144dee4624285849ef8e409dc18a045c6daac93e988b8d1b67548dde89740b28b8ee584d0b159cc1778169371397df4ba319e2835c54789ff55245da44cadf7e244ab68fbd07463822c86864819f4fa01d7e6a27f13a2904a7950868c632a1398e80f689ab505775826fb7944dacef57b48af8a44fdfc610067889380bf68ae03ecbf847efc22cfbc56f4566dfc856e991fb6e910586ff752399276ad200708928d60a5a0a1713caa8d0b70f43650e040bf08768eaae420b5634245745d0009141789257a3ef65559bc773eef0dc2c16ac23aa88b5cd300d0a6dc322291c1cdf9d883fb6d519b713335915a5c44577dc0f1b3a86eab47b31201ef6f6973618f5c0fbe946106132da33b04079663491e555b85dad31cea0056941bf87075a4c4562484b9eeca3d68d6927f6974a2038008b43cf21c0de584300e390b61af490b3901e69a3e1c11e7b7b40b443b84ca364b04818b5957983977b5b58dbadf530e0ae36263291f7e10edfc61a9850b249c79b75ca9a2c0f5b70e86d12c4cd2eee85a10f6151eda44afce8007173a04e8c8bbc447a08261ae1eb352bda43cb82e26c2b50234b7118c149003bbbf6793e4c3e9c74b70ab4d1cd80afd92933402e915580a32df678cf1e464826d99afae72261b1bfca3f72c71da67ae9f6f99df719f6680da21a7537d54b189587af0a1d1476143fc080472738944d9f296999198631157a78399fa402e30e71f17cde64b79462b85180baad89b8293ab8febe1dbaaa5b5796c418d99307eeb9834ecd3140270e2ccc69d7ba51e8b55b436013d0a7262f76793df474c93213d54e943ae664529971bced357118235b45ccb7e47de29c70136109b78b0872926fd89e0dbb880de73094c21016f2d5690587f7dd10ff06867a9cb64a938477ddcb3c9c90f45554650ec76780cff7ec2ae860f9dfe2a9ce390cb79f48a8e1bf438b43ab145fba5e30620888f4c9e0430d0ffbb97fcb0d0e10e516a086b591bac592e0e8c5624829dbaeada862a93971626c1731764769eee1845f205b2d7eb8a228d193ac417edefb713adee3e4099823ac45cdf9798449145b96478afb1e99606f67ebf174ff36e7d891a64c37120b43974bafd7a749bc42151aa131f0aad2bcc72ecaebfa05f8b5b430bc7aacda77727937ee3a5ab81e88880096c2289bbff2b505044fa46e8c520cc0470a2c234b21d65f0988bff1d28022e5eeee34ac36958d2d92473d797247e1c56f2825d26d6d9f7144439842c528a8e29108402a8f1d3665b985b9d7eef1b0f19aabd38e60aaf988437618aad5889a0dd8c155bd829a5849e8cfeac81887bdef20bfd59fbd9c25ac2ad7dc752b1bdae66ef67b248e8ace230cababe5ab3aeeca4c656aff1c16099b72a431e8416c0e770e32ea19422ff94558531d1b2b811a544582ee2f33083f4636daf1e44f721624a5c63a45e825b328df121f4519595c41da0e09c92b363324b7172053c9546d0ba59b17c937ce5ae24a848dea0b0c9b354212ea9341524392f23c2f2071ebca6ad0cde53e643b3aeca184eaa0abb36edbaaf76fc27316bfff78d1c5270cc194f1c064d2650ac3f47dc31f9e525ac0cfe03f5628e00dc89a6453768b705086a0c5ef478eb54d685446a521b2201118cb2b57b19f648135920c48c4c56e9c8bc2f1be5cd68d158f406d658668737db246c1eef157020ebfe0e9bedde19438d7800cef511a3ec4984b69475c154323ca78148cb62977c16e147031291b5c92ec00afdcbf818eca3c0eb0d2ad76e142131d8b34f77d023329bca00717bd6212cdb7943d2599a0fca125306dc4f6b7a0c0e8c4c910abf58bf9e3919ff1990d20ee01f979b979f9d56c82136d26a4264d1f8beb5a8655edfb4d96bbe5ee9c2251759615e1294617edee5168353232b8502ee5ab68dc00d6c5f1357eb7fdb35cd1c7ee323e5e7de8836428f3ea4b19e4b1279202367bbed7f8fc93a4cb3376c1563993e8ffb349e4387cbe632899cacf9ea1213ec03ea3825845f75c499254e5f0ef7272ae64c3c3cbfe65f3eb037533793fa85e551145610666c8e15448492cd332c3dd0b300bd84dc306f6f4c34e82a3bdfc8fa4ba43cd41fb7c326814e023d8b323f66e0a766f548565c7fc0fb5fff9df85daa8c6672556e5ed85efb7246d96752e40bf52da7855046fdefbe7f3d99a655b030647ab24331032f1b6dcfb14f03e57a9247865261c67d5852769607c9b77aa1061761a869eef591a0a7d2facc59e3b6dcb57e3b2176196946fc2bcd94586faf7a64efcd1477a94445dba3061e9837402c4b02587976dc063780f3e560f5c721d8d5350d235f5845dc984e91457e736d605782819a07bb53f494d520bbfd96e0808d4582a6fd58cc2025ef21d67591e8d950442dc161e206d3794af4670a9201226406390887828ef72c461a28c3bce8f3092ee3dd38399562bd7d533372ac248ded9cd2cf264cdb11063c9b8d1fca8cf6b139b8845d439896ab485097000d88c4614a70ec7cb8fee0ab6dc6930f38ca16439f681aaa40ff136c4592d55df501394859d9171c6422b1f12f938bcf36ac4000632e28b2f42d440b7e0d7bbb98b1b90b2d390167be0281ac8b79aebb11e6d77c6c5b1c45bcf1dd7b4b7b963480df94c3939a9d78a281a93415b0ad73603a435e325f2f0a3b20a04b666aeea8ec4ee04ecc3b36263769ba7bd34f4a2892c334ecff18b3eed4cbfa6b800d9c1105a6c78350a6bdea1e2596046f35f4cb507f721b880fae432585d28bdfecff05a75e257924c2c3991f385388cae244da3cd44a1a66261e78bd94f22592bd9de4e63b654596f9c80eb09fe3263710528827220f8f40696801b9fde21c47bd1fe4c11c89895ce6ad10cdd4ab804802d76e9d9ec6dc75effb048a87b42c30a59c05fbc1d43ba5d1a6eb449447866b3b00b9aac6224b953382791d1e7ce235f3b324c1ce813a20bf16da04da9ff94942d0ccd0b9abb3d3c3e9abbb4638171ec3c12dfee1d6584121ab21d9447eba1bd5f8472fc66ea0adeb211575cc6bbeb421ab5ad859db019b5d1ca92e367290d473182fd4280539c8661ea7a3375dc89eb14ef1d05391a622d13c7127b4f6174a087e5b84c2bea1d1065aee63ac62cc399be3f0629273d0d05a4e1f5b3c7e47443b36040dbb2161002a5b0ceb5350cd9e4bc76604e9158182a93c30f92faf8e92073f71da56b307368fb9dd6b85c4ec233aa8a4e445609f3295b308e20cf007b846f7d0eb05379198ac50b34ddf3fa1e400fbd276a9e2e935a37793b9ad182515ba8744dedd39833a219ec73ef878ae0444a5dbd8261eb12ad55926deb680dc32c8e9ed81b6468f7f8122595c3f97687c32862219faacda155425c4c9ea797b98652f1c2c6b218556273130ddfee536d6793248f9c8354f061aee34dc45b4d71fd343ed6176bad6e2bdd692a987960af3c728aaf084277b4a93c8bdfd4491dc9793ab305ac8ca444bb3ca8ab179ce4173205230b972b240a5608925c1ee650ed004724889c30f071b2d144f2f4eeca10808883c6152ba20f5e9ada2fe015fdf9a5678d84760965fc363dfc2e92ac69f3522e8cfa6768782efc32fe9c020085f165b9cd4b3b10bb53d4b765d6f4d685735bd474efed431cd1417ff4a76253d2df5d0f0148a14db37973f6281b90b7ead7c076d8db351bde765f7f5a4429a1b0c70441793c1ceccd9f4e4276b2aaa5f4d83e168d75176a4bc67f5c2cbf8c365a309076643c8107b6fcfbe12c66e7a0a4d448fcb78e32a640d715bb0aab8a1c4cbe6d4579bbb4581dc35edabc18c5413c4a47e613a0b051c2f96a6110be6792bb2cb2d63292a3d937f544d1433fc3dd1ed1cc75c9e5608ac7b517303bc3268f5fbeb28d70b6e6f5edd3aa0712a3572dc906ade5b55b0d3ed5391b7b081eba3f9f664c7e45fe2d3f8fc92778dabf42d846189d37eabe1ff388256b622b5b71a62ff95ede0a4a5e298ce163d5edfe04301a98c16f0552632b6794c391e006e0ad3d256072caf9eb04450a69729a39f3df2b5af221623d528e01f4f098e71848424823ada4db62dd7eac3462de20c630f8b1ad99eee008e7fff9ecba0a657bb0f61561185a89f8ce6bce219a004acbd5f948aab1a0d9056eb811c041fe76c212a76d6145cf1e4cfe7ffc6803b48743be4166f718e5bc8de77725af0eb710c65130b293901c31c6df22ee96c005e08491ddf011afd2166ff9b7133fc9e311f2de577788b5b58d0852d766cd6989e10be73c46bd9984dfe84d811453caa12d988c35e922baa00271b2e259b425e0c61b1b589d5129cd55c58946ee1eaf9ca6cdd665ff87e2aab2d1487a962fd73207f1f48b9844d4c01bbaf3d09c0bbcf32baaeab0a2c01c28d0421961f92194f2dc54c771b387f63b0299d1fcee4b73ce3658d5126b11128be281d0e772582772cf374d13b13fc14b5ee8b0915a78ddd859d501324e25101da8296b601fa7e10cae4cc516ddc9ba9c9bc3268374fb41b4c288c6aa813674ca32274a340454a6a801c43446bca38a76fd5839e97dc3bba3ecf8522da3b521f29043db208cc3d78bc46e183ca70dad8b96352453dc697d18bb6f8f66e3fdfd48b15f4ad3a98c3620eedd52416d6f8e57bd07fff1bebc9a71e2c5d585b2f09b93a71fd5f84e939045a0b9413416bc1631cc4acfb70a42eb1eebe85e90da1525f0af7fdbe1fddcf407ea90ef68195f1bb71b2ef8e71f5c17c75fba1d0b8d4cf92ed286314b61f093b597f10cac102010fb4a2d41334a2ef0129a5b321f09f780f5ce93d904c09412f61458733274deea7b7fc69958dfe787cd3e55ca3a9ab8a8405b7e63d4c99cc0579f0620498ec2d42caedc5c301c92a3bcc2408865edaabeb86683d9e19a20bbd5bb21ed4002d8528c7b56432b4dabd663a0a36eb0dea12310b2895d94218793d3137642e4dcbb6ee4f2c979661417e0c016fe487faaf215a0fb63bf7abb4ca30f7bd270e366ced1c6a5f341b4c0d0ab94aa7fb196557b2606715ed93ccecc329d080f56a450eecd194d601cc2ba0a40e0cee7a646bda7fcee66f5ee7f8113da37cf21d0f392253890fca3de764505b5f2252b7416ab605045181a9ba5346811fecde741fa64893310e23758ef19380f7f23ee9b2292c64af4b8061dcd09eda60764e5526b8b98573190c4bf5e3c4c5d55df6e38948dce934c0c494d37efb7fb23c27369072482de7670055bfd70479f388c0f92216435f88b59df4e454bb066b8f1ce65c8231d6705cf2eee4ab4bbcbd4b945f6579e34f70ec74ef8a8f11185844d7536d15c2e0b9065e51e85ebb048f3e419294c7bd8191f56e97088539e845e3f2a5a04135a8f27f88410813441f1ead18b9a519b8248620e298694e212d52eb0f708d0554a5c1546e040f0f115b1e3ef9f9cb96c7ddf5eca02b7c13e7793bc0a8909431274164ef8c56d282be1f09f53b260fa9fab84de8299d0237713aa1121d2d9f4ed2ed743334014a76087d322d11d499d6ba5cd8f4cd108b722df2c2df1a84aeb5609de5ba91d114c0642660c05a7c38632d799488efa0d7ea210a209286950c5f2c67e0a08604dd0d9b0ba0e6f3bada018f9a540dec7ba9d56c3d32723a942c95c10651223afef7622e6a1d10556ec41aabc4255416a0c190b4f931dd0cea55c4a2e70763ce409b446f00642cc65acae25929edbf0c0eac57867836e2fc77bf1f28e17e9469371597ebde1e256bf4aee51bdcf623021a178d2d9b2524d120b8609cba1828dc2fc982c07f7d09977dd90bcc0976ba6be6eea566f5e5815875393a79eb0cdfb685bc3ee4e74f499a0d6068228eb2db28062b84398c5f109c79e939bbc6424a6f6145c730f7eb56bca29ce197640aaee7b42d5059c5852a3bc686a6355c58c92e63196683a310198388440947a2a144cb7d5ce29b6ac780fbc03c6f6536067d4fb874bb76d97d8906934f06a5000dcff1ec4074f1eef0d9f9f7b70f18c54d206f3a7861968fe95a74a08c8601f0e99c3d8e14af146456e5d00f4c5272ab172ab30c110902ddbcd12c667aff8fd12da0c185661eb27e2b1ed36809213f29a85d8123152a8cc3f33bc9d687fcb9ead53855e41d27d7f9902234ce8be3f9afa21d03202bb0b6c7f89e3125af729247f435cbeb2594d52cc7e9e84e9fecd6f491bbc86fc78922db45a805d0d868f54b82c04134211625790d61d0e722baea68ef7971bdd8e2b1e3479d1ee2373deef0682ac6aac48dac6ffbdad9da5a1b55c76212ff29423c91749839a60ba757271f0db39cd1dfeb14d3081933e0888b331c9c2f494e8cb6f1a26f0b2e18b6a522d67edcb13aa9bf47fa945bad6b679c1bcb959bf8e8a83ed4dbe30fcb9a20a81dd73ca83ea84bd7d743fb6e5d730dbf20e53ffdbd8bc46658ccf4507021c20c28507f2f66cd7a71453762d1c8e4bf0c0f07403fe02f4bc78b2f392ebd345c19f0e7e3df90b418a325406cbb50c09231b63c22faec64dcf4624df45a2a7af87a82aac87a17e95bf0a65b2a596d32795080f88fd05feda4f2c2040350baaedf31316bc7859ef8acec0320acb2fd52fc9018bb6416f4f766cdf34afdb92fc618c6748fea510a417fafa5e9595a1c39b439bdfdc9d200487cb143cb645303af1b262fcb40a030f052666a0761b7961705f8f1f3536199c855299ceda259bb570f4535719856a681bfba5ae915b0ce4590304135d86a3c809fe5400c65466c8204b9f6f35e0fda7a356ab8b65979d3e6280aba808735a1b387a5b9072801543092fbb1b020db2a48aa507d0ec7a26fe87665e655a7b46400d89c754030f141eada0d5846e577318bd2f8acbfc621de2604c9bc6dc3c30037907c2341b4f0dff8cb523b927c9bec9e38d8280b537fbae845ca434cabdf90ac5c79fb41dfac6d074641e692fa3196b4351c9e79916c2e18d17af1d25a1f9e548400d4cadc5be0de338790f1346e5533d351298d19d005e9e9d5400ff353e92863993a689586edc5889be7d202046bdbc203f8e867d2adbc1b6d0bb8933cfac25c7ea26a640ae2c50cdfb48bba23f2af4e6cd9fd4b982b7571d27835201d397d360ab8d473156c404b2234b7053b7f3b7322e60488708a6a2690079b6429d26e61f12f7848737bf0c3281df1fabbd0f1abac6ecd5af700d6d3370b4f2a4e5d51bbd51eacd4cf4c3b4dc9352bf6ed4bbeca14458fdbf895454e90cc5bf7584d29b944a3574ac71a6eca67137c8ca90bb272bf7120c2c7b37236272814bb642d63750e4f61e2941649b09099f2bf51106c5c10de4519455e88d9482906d04768b37a3bb6c969acd7f6ae64bb53bdb6e9dd250f07586fd00dd79a9c6a7d919980a0aab28c8ed4bb88c4313154cdb95625848f4a9569ccf9034d8c05c0114171f8fc48e86f59e6e76fb876c5ceadcd99d2e9b50e535dc222ac6146ac2f6e01f24e7b73e0b7c4fd89a56830be5288898b7cbb32bb793a002444b302638f03e12452e77b8f1d6ad09a4de7612fc6313018be7fb43f14a47b3e3fedfb949e993285f2ee425741b7106872781f74f1ec07ec203c764e6f5941dccdc3814b9ea0b52327058c594dfd54bf81afe9100e51d9d3183b04913db5a5d206a13773426ae793247a015d8d077c10d90ed59283fe2c1ed2061d4cb841ea9955e8631341e17698aff4daa19888f73c550139ae1b42c3e4c8b2d600b28b99808053578f4aaa0ab8a2843050dff42a3f98698e6ff91064f43a5759276aabb9dd16eae946feaeaae9fe69d9b3136c67aaf0b711a0a10ab5fa488b09c57f7a48862e08274084b427c35f44a10f77136f5f0f185e57d018d81fdeedf13ff89d3872204cffd80713aa107081afe5e59d1cfe1dee32fc7c61d4a8d947a39a7363300c6cc8680560a1b928400e5aa978dea1af43d04e176140c75082f75defdd5366f71b4946dbc518d0e7bb0ca6dca5b2dda6cec65ce84ab15ba4fcbd4b686fc1428c8e16babad1aa692e77c5ad094a4e96f4673c6bceb590c3c43e6991c2cc9d048751a7ce22fbfde92940683c50a9983f618d06692a4b85adf89cdef5b7c8e73a3fe3400a0680495699a14ad2492f9f52f1f1698c21c51a8b3322c0844ebf285af8e527bfb3ad51bd087d0fc5633c1596862e73919d91551ff84ad4b8d9a2f48d552fcd9e69c719fdeb300770c52513c1d64a90d50024084d4d311f26e347ce74c897e9b47218117f732649dbc05d1ad709b5f1ef436c4f532295b2ca4adb7471f8eed94dfcab403d76a8e40d5a6473f045420e5e05229002d469826d691127ca3719328121958e42e43caac76dc9d8cb448d2348cc97c24928be74fa9895037043f69e5d1663bdef449fef5067fa662ede8a2a28eece2fe8544cd798c17786e8676fbe9a41827be5866cb16f8c65ca3d70f813e1683d008deb74e6aed71d92bf4f705f7f805c8c6146d50730be7f95154eb41c6adca6fe335d4a400ce90cbe999b9251997fb4a07186755c16565f21915eaadd2d73fd71a0b0f19f3d959b47fdbd5fce0a0121acb218c76477bd03da71128eb81faf36a58e8d2024d2b1f0079724279065764d5c325a3dcc31d6d18e4c61eda45bc445afa3e3874b17e56ec474d15f822483b72dcc0497640250d882653d4619e491e45087eb07eedcd2a776f17d28ce418d2950dab41a46a44215fa259c9c6ea791f70abfb8315a57e8d21135cb527d5cbb0b92646dfd6898031e6a2b359c67c0de56d3d08622da33e9853413bd8e1f7c2c6dc2334a80ba2ae38a85d46225e5bdefc3076187f6a83461cad3e81a4a3294a7f972171497a30c723363a1531eca8b5a211f08245087ac3f06c6775286381a3f0848324109c74f2b3b6cb5311a98432c3a9a74c333212c4f4c786a38d14b9e6159922bec19e5dc21ad2d5409e6e6a3f04cad0f81416c1b9615c4b0cc77d4971a4d91c10951b286c88ea67e270e68517c9ed8a7e76647efd4ccf043821f092fecc81a659041111f698d595eb3a17356ea391301cd62bc6196c5681c9cc88d52c5619db3f77482b50cfc161985f88887ea967db4c707f823245c9ca215de2a51f9bb74382ea8660dc890fc6d67618563c89b29fc024395ce4fa4fb3df3a6070b63d89b8c23fee086b16cb75f2c716be4a9c508f6c6aabc4dd4360c738a7dc686bc81d58ca2267cb8ac91589d084548e6e2d6e8ae30e236f2b4e27c8171eb71b5d58135b6f642a1db3c107640a4949b7bdb581278dec7ded66d96b2127c14169c4929c34f66084e13c920616dc74d9b542263e689e60dff6560b4b0c2b38a80cc27f962b2c3a2a0c0f9bb28ec4869eab8d65c5b77a13f6510574b590028a670ddb1cf975620604f2de589f3e2f0dd94170e489120d28918979e15802c2b925e6d80716b82ee0f146ce217812892224fe00da679de556d7ef46e4fc7791f7ec45290fa91e51602ab1b01d38602c68371f6f951940f9b3d3357ee17f63f965505f6666f70b70b515532b012d9d394a954f893953cff393400598bb2ea951394b9f39ea62c751272a0d902cabc36d10add8686f33fb087b6b2001239c8927aec33b7d1b208f64deefd976fa57b4d2b72e330ca5dc1a842576c10fd4414119b06ff69e2e1581659c80c2aab8d5b019144714fe3dde9c4014384c37d6ae49c878475bd62da1ca125a3ce86e73060bd288ba40d7e42c587c16d6cb5053b1b7848b14dc3fef9dc789dc34640c6aaa7b22b603354d2be2b069ad17d75a5626765498e6865e368643b46cce6bbca05c29c0442c72e781b63324f0b9c81ea85b00112d8e79380dfca7d4919f6c062889613d47ff744b0ab54ad20aa4c27ebbdc00210a3d94e2b1be8b2f8a0ff06849a3705baf61a0d73588a63624dbf0f936e2c340d08c9d8cbb381a6608f836807b7e213e6500cc40d0af1fc768405454f5f8875250e70b8ee71cb489f0b888dee18c2a3a8f378c24b608f8de9bcf14a6fc9aecfaf220680ff90b8a27b71d9bd8709bc95df834b4d0cfa25709fbc3ce7157786071042f824ad11762482b6190df91c1c102362c4862029ffebc95d6558f7482ad6afffc9c3668cc50ee24080675a52452ba4c1842809fac924e52f598c51597d26d7f7b608942000ee960509dce987b59903ffd7417352669cb8a03fd0e608de3f6884838ed8d9e977a9d5508fa5cc30ed8172ff42e0ee6d8fb89eabce26194a13d74b3ff6f090985f5c0e381c0d196d9d58b24e38e6cc475336cdd310e199b203305f0576e5d9edb676636e266adc618a303bcda6f5ee4524608f262dc9827dc24751cf1bf3b1f0fbebadb8bfa195a2824bc0fa1b23db0f15e7c910d7ea69503253fbaffe02af1ee28879c6765db2e1dda7023e9b761a93ebcab68025675c5e46a2dd26b0adc25b689b049dc943721308d9d13bb5f78bb532606776adad13b3c722b736b183b0559c9eb7d2891c4d325954eb5adf1dc0e52e8f03f87297c1010759ae2d0c1c3bcf45eca463a0993de51adf7d64a36f731159cbe86a064ae2f2a18e926bc3c6ae8de02a1535d292a6365fffa827d70c084740f7b68c55e329429cfb9004bc6a848102a67dfbd24db8915a0b676cf64f1676ff4554b8d4f64748ed58d931755a68631dcbfb22e908c977d8b0e03ce83460034672c256e64d224aaade7af29b27da424adf82cc153b221983782a3c3f0524469e0535e6b82e82cd2c778f09ab799e95991ae6b1ec44e70f4124aec1c9f9de55a438862acbb7e580dae716c928c2c57237ae440c5086f1fa6853f6671530ed2ed4b6a1b3086b3a2026746b8e2dd2413f034d1bc09b0151cdef3d401af480d318a7f6e954f949d819424d145850a98911cea743cd193900830147323ba1f5d9e51e738f24041a57b45f80e987d695769d8097c17a0f7e14e966db55facb616b928a60ce4353303be0769c42da652ac3ceb391524b83348101895487cd61932bffb8642aac8ec5805c4c9d9b68296a015720288f54b8b91891e9d6e85cc1823a8b61bb33cc36ed55921f2dbfbc3b4f86894ac909c98b04423d8e743bd365eb9d14d40528ba47210908a53963257bd9f005ef3e956af410c6817a47b7fe4ec651e510a78e36028856865a4930fee0a5c1622647856e5360156b33ed56586971d2738ace119fab672ae03064dcda26396dcaab6411477788ee1cf50b503ec15825e2035510821c6171d23197ae4617720a7caf1a838f1888f0717ad0d5c4f9030e3ab3bbd4a4a0fca6e698c554c71419c760093d2d32e0f37994908374d9d52b8beeccc63e70f7ef5576d69ea77b6cd67abd592e746d85c533dae98844119ccb315a5babefc876e162ea42b9cc5ee142ddc9ed02786bffc71059551ae5326568b81cac73a9b727142ea8ccd28a203b97fa88301a9ac4b47dd9489e58f788ac8f6606278fb4334ac0dbf267bee406900efcfa93f60377bce8cd663397f3fec09c4758fa4f5dd0f035a253f74278efe54dd6aba7f0c9a4be641e273ec1617f4a07434271b840ae1decb9b4749c1682e1985e0a55242f921640d928ce121355285ee3d9c72e22dc5a68660c330d4509140ee0c43171e375b04e7e80697f4bfb48e102fc85290e997394e8b3c139ab00158ef8052dbdf33a005f48eb5558c45bf1733bbb6bee975da68d676c09720e0efc8e39a04011123a8e0cecd8600a09a2384558a31daf63b98e167aff913bb8b61f93ebbbf90bc5b4fe9a132ed41dea758275f75f9384b3a29989e0de6256c36b6161f1cc4f67d329f2b1010acd54c28e02f80b6e4d8a052700a5205a4bbe92e3fa423b834876f9221e9a32c90b783b31fa3c0c4d3bd9e9311460d70dd222cac959f81e5bf16363ba54eb44ce887ba4f25a5b7558c21268ec2278e6788086d76256fae7cbadebf63efd69392afae2b3c8983e04334819d651e2dd2c4c2e7240120fd91eeb1bc712eaa386e228a41198533fd437114b02c106e61c5b594a0d3d80646cc60c8dc75d012565251181e491553cdebd818ab3ba7b4339901cf9c37534c5181b3b240754cec7e38705ed2f63fd900a329ba1c98011d2a16c1674e62f9b41ffc63084fec2c835dc4e957ca5933343822c7c6dfc35024ad014c72706ea6d5192329f3d596ea197406bb4d0cc791bc0bd2dcc465e0454d43230cdd0ad2081d511b205d90dce68079d123e153cf81f0c8a6513413984b21e7f51ee99ca2f1951703a8090f2149df25ab85c07a2fe6267470c4b1b3a4e1c8424ae8021f263210a2d1f6ffcad8e5bc993f9ae98263883c5f08ba395b530087882a4ecea30dbe72e99aec7e7250c71b01880cf50fb2e3467dc7a39444bc8871b2276a2bdca389fd22aa67a9f99ba4c5286bcdc25d6738d27e47ee746472ff38328113d983d6424da11f272f020f0e7ba0a310cba6b33f4c4076d9d2f83b617ee90fc8dcb0ec2c35965858f8ceb2f265f1b467dd16fca66d8d8f0ec5472753d1305fd4003cade8be986eb23ba6f72210562bb15bb4041a3724f1e553dcf34c9900c5d1c386d20f975f2a1ef9a610d3076ee6c47337089531c2cef4c565d64c63306c9d543de9463ce855cb5389cccf03a3cfd4838c9170ed6282f0ba8f4575920a25f2b4cd4fee418282f963d413fad67c8c022bd21c051683e473f66e87de59930e5e28fbe75a9eeda2f444f215361b5fb76df028e24456021e42f697859c315ede1137a3b4c818e725aaa75355474f053fd9049769301ca30b99ea963f892e0fca3eff176fa1c96f116365c2529ff475c0f8ebde0210000185991ac4a2aaf82b6b8974b93cd13b54fd9d8159f5db4757970c7de3e83ef14e1db6f2e1a4e149bdee7c9f9185664342c3ea09b57cdc69fa724fed357c014d780b3e908e931503175f36dc1d34f78d75289a6974b3fee614bd308df755b625ac5d4dc95b7e4a30b7dd34eadb999a5d2acfac4b73ca7acdee244a802083caf7cb50c18c59bd387542b14835055453b1d47996510f9f7c5cc595028cd6727c5e8db1692d5ff6a5d4200226a328fb6dcfc72e7646fa665c46a6f886e06261ba782aab904b258c7c6bd9601668a0580f65aec3586ae5e9760d8dda4cb71502615e6492a5a0906fd2a1c79b912174d37e90ae65e1692abbf3c9e747a8bcaf78d764254e416a8223049975d50652544c84b8ed9266d8e5589c2a4ecb4c5987cdfba3399aa989bd4c3ca80f954c35d5484a27e53ce7793248bb0be14d9c273a9162ee58326f6cf8bb9aeb59747e3ae72f1c86a625365972928713896c3564af0fe14c28f696feb9d51defa155bad2578be409768434ab5bbc209766719ceb7ac86ee6578e7c9a7ca3260f7ef2c912104f25c67311615dc942acbaa325970a4e09526095edf6a6ba34b01d1c7e3c9382e048d0c2d76a5c30553995aa6c1f61dfa43e5a4e02817752453560210211a3fc7738b250cc1e99fce4d8929a16419ab827e4f372b4f6c6d61e50a9a010ef924bbd2a59c76a8385612f6a48990a79c04b78ea7952680a165674189656b1e1aed7646d786b4d0d274dee2c2c4b885ff533abe287265e1f2c0bfc60bf0eea95f34ccae2525b1bfd93724ec4bb861e5fedf1d0c5dc49050645bf937142f742cf98f50cbedb04f3c9d48ea97268ca6529f2e21559e5dc14c5d7017122a282e5cc0ee5c28a13df83f12193ca271cf832a734a390933e3a377315cb042d34d73591398dbc5c15eb605b37bc614705c0d3bc9d2e388b52943f6ec17f25484c90520d96e576c9ae34e36e582aa0681ef6e1b45d89a28827396b4bc86df8166fa9f7fbe710f3b85143b31327d8ad0ca235ef0047d62b6eb312c3351a4192ed130b35a4b89f1f8b7b2ce0f929052309bd081c45a3445cd19b391dafc327c4ef2fb9d858e34072287f21902892c2d57b61fe3ac5283deef802fa8dcd0e20777b45200e511cade9d5ca491ca95426169221d966d5388efb26b1cb5c40bf74ba0d57175215c67852e44bbd814b51fb7426bd971b8e54afb0021b723ebf1a91c0865820edc1c42a771d2251f9fea00aa90218bd248fd63b499d249b049ecb8080b1d8313eff97221dd6db3f732f8d012561dc10e5b1b492b5963c7cd771907006da199c40d5d8dad18ee71e73a237b0e90fcd26f6b608247e08adf855b02555a76ff94c1b7bd733781d17baba2961be18c9e3a9157f911f4f7a2d0eb594d8a201054ce871d1b802c62d8e39e25c3b8d705e49f74d6ddb9f2cfe3433454e6eba7707a12f6757af8af11c9741b74cc754fd199c9d40053db77468d9631ab52d82cc70eb8cfd521ab603b02752c005305b15cbd2b4e0a1ac9c821fdc8847445cf3f80c07937d208c09d7b96cec7f8c64887e10a9623de13470521996af907505ec601557a22b3788a3191d58fd3efcdcb8d96799acfeaa31ca2e4570008d69b648e7f859412147a50551332a50336c551c0d79a3abac4d8aa76c196b07f43fdbd18a10a50b559e0d9b6fbdbd189386cf929aaf698e429929e661914792dd244edd7f3440f71d67d0c41b505b9bf2acd9ed8d45ec7d139cdf168f9551f254542e16d36f2280612685fa988870c808c7d763ef7f7e70585bea82b614bcfea20c5564e4c9c2d18a569d969b9598cc2ee04350c03b6d15ae334836d5aabec9df0e81c376a4cff431c04440b3833dde960a393f457ade1a4d9e182483ae49cfef4eac1cc11e16a93ae3481e4cf1d604d5286c2831062a228f7b18443ae5faf03d84e8c27d192817caf245d3b7b93c9372a6c2b432db2f3a6e3e64c5100b2aecc2b7a893e2508ec18d26271f3eaf0257ddb4d496ab74a694ba891cff7c9eefad24f30ff40ec17e823c014589684a002f62b00a70722ddc6b9ea97b1934ea819af520563f9c02f3ab039d44c44f4cfc8fea6b601a92347140ea383989124eeb09e9683ded4644bdf6f0b396e205828434fecf62c8e505f1c0b209d11d6ec20981a932622711af1911190fc926073d1fca3ac839ba550513f8315a03026f4cf8fd2d1a1edff265950dd09031f9cc3500a0682e317ee1a08f3442ee0d83ffc2fab3339b22f3b86fa524d52ca5def6a9b98c4256d5870b7124cb499d8096e5249c191565eaeb4f00e550431d72371c953fe773b0ff756b97a7c29db699faadfb44704ca395b8556b27b24de6f2c93edf3956599487e3dc8c325e84314cce76e4dcd521803c55e0aad88efd5b315533744689d8d15980a23152b66acd1f70693eb74164a7f968494e623d872c8a47d447ce01c0e1b5f50b254f535606b3e89c69ca605d4be54536bb5d0b2f5a63b7e9463c1a9b57ce92723d8a4e0f3960bd8015e5c99a45a9d85d2b4b2e6b2c780f54f72cb0de3a650bef72c7b500036a92cc1af75acb9f1985f8806bd61e30af41795c0a2d6e8c66dc5f962fc97a8172697256a468cd82548a9d6487673415e1b71be1d0e7daa6f1aa95a24629e49cf3b9500f4bda04f0ce78540e31447c3af6431e0dcdadb08ab697a56d48e5364a3b2fec05c55a88f593ffd5781d64857eac55338eda0385b01612184ea670c7232c4966694328950dc0f96de832d308ede5c16acf0bbf5f3126b9d92d77a182fba1944a2d18de4eb742e902fde9de0e695600250289175248e587e82f030ce22e1a53b28155d30a323ddf4fb5c45e1458a2c0e32fc573ca952f775a94bbbb02e862e0b17b8498a8b69e45e50e67adfd855d08bd30f0690d63426d4f545368d58a7c0b349d31bca33e784a0a0c5cc2c5641d4d216c6069562bfa28fabc25b3aa162f4a7816e301a594d578d063ac85b7e8b746b12e8f280c9c8dc2d32bb0ebfe5113dd59b71c7810e726ef85c19378c3f97b73ee7f8e3c2fa759738a484aba02c113f5849be4e80f52f6cbdeb996489bb71c0276501f90bff65cdab219a5009492a9796284a17b748a43ea9b4c814e2bb6e2c01269a208b88587fda6f03872bceb21d2277566c22da4866613604bb7b6d1ce9126e143eb44fbd3854deac207149ade2683fb899ea3da6577a8ebd20cca56269d4434009106bf06823a1721d748cfcad3b2143e9569a1d332cefa44036276a18769458d00f84bf65ff3b501a0397b2793413517ba2153356fb2ede4006f2900a2031ea70ce68ff600ab2d54f6757cf3472d932375dd1aa2946b703fcb8b3cb004e99d209a8399b6a9ea78b68bbe360bc9f74791d7b17113811b8075a99fd39d76b4b292a05efcf9bf8c6938644b07f3004dd1842f88992e5fb672d4ee590d36a7df37d358cf7b49935ddf74a1462d36a84e84a25176e2864dd5cfee00d58a4a69417f4773dd5661fe420b84c6b8870b5d2f8cfb2e6a6bd47b3475a43c8851430821f3733f3f9d517d8b1d7d4c8701571670f2bb7e9427e13305ac2ef0a044a650bf8aff6064aa52c4e05ed0e7b8c009178f5e94cf0612d66ba4103fe20f5b8965bd9f33df07ab73c0cfee0c9fa4902d18c3f7e01efba62c662b304922d588862da61b4197bf642b821b11a4ff0dfa6825302a9605a4795b738cc213d099452a859c044046723fa5ba75b778d97eaecd569ec371a37e6db149a733d13cc0036f2947723daca66721f5af4733d110259e78629a043c2d7425434215e80a5642c1377e59c7d2bb384d02e2b789a713d1f5f5a4018ec06eea7a1260ec020293fcc684ccba896f8a00ff663cce64e601f817e9c66803bdd912ce436deef12b460a9d4771d3b6952a838a542becf38f9d8a513ebf3d6910835d76b60d598cc343d01524a68a633607555382d0aeb190f5ed778a2c241a201306063ed8252553716dfd071dc7dd484a3888e99ec99c4ded8b38f09513b57f0afac740ea5c11f1bac4157b32de7b249c5144705412e16120d11b04cc04cb8e5e8453a0bc1718dd3100029d89e3fe36c5206ae7b7f43ab49f006164894834506d2a6bf13df2e9108fd2165061b25cc59eff7f62cfb5b088e8ee110ea04350a13211a81af2caaaf535215dff6c0fdb13ddd9d4c27f36a0ede39d7862ef264647988c7c80fa437f4229c752b49d45acc59626b98fcf3cb2d2ae7e5274e1a2fbd56db3a4b65cfab8b4de7fb516dfdc0b25a123f49ce23e9baf2e8a7192ccc490bb96b128990995aa840ac5fb79ca534217c0c5c3e469e6496f9e7e78d96c632d4b5dddf5748255e9b5f9f21984fb3be0629f799e2a7d1573258fec1f023f55675254a7a832119b0d910917a37c1ff6c11a934a154c5c225a72454923950c79d22a2506a295cd6173ba78ec5cbbbbd7859e64208317a22e824f982044e350a4c6a5255927c97abd9a16a647fe9a1421072c7d431500caa8b7e7633c746b27d08b80975f644a44c4d6ba33b854562c2bcba20e720bb462a6f5702197e01db911e4240c4cae4678c56062876e9fbab5cd64a7dede4e0b64f6dd490fdb724c85a0791725f253371e8dd21e0df6bfa7aeebd90b02175630256963bfaa3c8708752478c64652249bf191c3db3e6166b6d471cfb02c3bb8a1ef67ebfc76a321b6837e7ba8f4c15d70b5c3ebaa36a1e46051e49a576cad6989599150feffc1983f80cbbb232c0d0aa7b84557049d66fc3d6cc260b096040f2e1b38e280427cc3b8c5a5e2dce744e21e369cca03d80ab61c352c52e4504ed0d45fb0f6e20a170d47a99acbf2c88965ac5c341648fb68b0b84e1361b128578b3e30f7abf50b4a2507021b83113d8c2019d3257d187c3dc49014ec11872165c06cec904a79b9e928cafc0cad714604d8096b29e09371091854832ebe00849778d463262d80d842089af396a05ea3182c5c5896ce41729c10511ca97aa4f0f553853d6aaea3c49a82b92e2b0857109dc0f7fd39267ad2e50c63bba11bbc3c7afb983036b62da82758f958975e8a8125d2d7a06cd3e9444e9de3d18e319846d4f44621136c677c878c22eaef3404e251ff2843e81aa8da8661e53a064a815885859873a26d553a19c9cce49617e702135b1ad9a72a74b048eed06b15c634a09852a709c228c21a98ab079df11d7258c926b31c5c2987ce639342161c2eb7ba85e7a13b95287e38cdd212085ae409c8db357b3a40efd4bee4d4199b2f58470bcdaac6ee9f6dbd8f9aeb09ed08addcaa17aab864dafa33efcd0751e314a1bb6a8c96087e54f8a7557a3734117296606649d4c904e4996b267c753cdf9c245bd5189c740291906c3d84508fe135ecbb051150df4c31a35e6cfe064a0672fae101c07f97a627b10b7c7bb2e361d9d36b662acc7b7a0ca7671aaace663c9a384c9a97c02e3ca09268a76188a72bf33daddc771d7a9d272081706d820a6533d7b6aeabc4d6f5e078cb2bca03443779fe9a96ecb454e2ecb44d8d8a4a9bb0dd932eb7b8921b6c0e24efbf7460f179505a255d980686ab9f76601d34fc2ad994f0511425de2705e0598512d0acd726048a18f4a1937ee70117645ef04d2b62cfa17268aaba3d8b5378158e388ae863200e31641604688f136216f6ac4064029c1969107610b0805abedc49d03dc17ae0451e19540eeca14bf70f6475906f77bacc1822b9e961c030d417facdd46c5ffe8d5aa6526a89e0e6d57bb3852b4830ec5979d4f41846339523ea085ed91073cbcb39fdb09e4b845eed5574398b1ee52fe035b81a1bdfaaf680dd743eb6f7b44ff5aca4208717fb27feef63f67c1fa6333632803e72a2a5536fa62bd1c280d3e6299dfdd173bfad642a0372d28bd50a963792ec0731a37b976a74b79bb2a3ae2fbb0f87fbbe5eeaaaaa365dd2e39f0a2d9e23261cc31d4ee35850c3c9fef43270a205c22ec319a315c2b4bd1eafa3383c2a471eb7804cb27f790f040e7f33e8044d88455c3444e198893cd22ff26339e2b9fec2b2934ffdd4e9bfd43bf34a351b9063e3910531b62fdef78da8f2def1069881a86d04688e24ebd9f1fea1605d4ce010a0f09355c8094d5a60354af9cef5f125f50ea4cc4cd67c88d8a873dc8d7b65d91fc314ebfa2ccc3c999abdf14e8f270c806cbd30aca4c7549f59f8452fd7f7739ecf3dd56e1af197daa485f0128f6eb01bfaad5be9ff45aeb252dc994a44c52ca460310030d03cc1c638c3146ebca5459659575341a8d46a314aa03543601151cf50c9823818bc1bdf056c01c9d80e39373735a16084469e8a598c58b589d0448f60830682dcb2b90ce69592010a5ef8a5b8635574352486511a9494d6a52939a94524ac991999999a75ff31a8d46a3d1e800558d2a64493c1d2bd32fae06091ccba3b8449d8ec9254a914245e573bd448fbbb88b75b9642e77e14b634dfb4b442f4d4a29a594ddddddedeeeeee73ce39e7fcffff7f9821a00a91acd300565452745846a8a32357e3c0ad40caf9b9e958550a51a3782543b10e0cbeab512b1cb044dea87befbdf7d65a6bad7cd2d4a8ea8d9b95da4b8864b9cb9c960502511a0ab9d9a8181b151b151b151b151bd52f524a29a5d4a4e671fbffff8f35d68ddb3827e3a90d58923013f18ecab91a0ed3b8e99eb3e202cb245578963db81a483550659a5c4ce9a5463063b179c0bce15a4ce084969139220ab8d0647e468ea8022f3ad608672339220b8440284c4a3e24cd115d6085a6ac3001e5448573441880b1127ae1e284162caea901c0a32f6e00460c7caa2afa317caa64a8bba6938102cbb554548666a410e10340bca2e9961f4cf4306fea2daa968a5654232bdfb43c2783e973329aca4d4bc4aa0d8e06b0d0420b536215d578f55f559b96c6aacc571a4da6aa362d1bcaa1d5a685e908d568dc8399c869f141d900608755d14d8b0582a1b761c0842116a980559b96ea8a30d4745654f3ee2bfa9856d7db34c0f14a68070b02a4485f4684e22617c2e7867ba11e966cf89239e06f488d579e4a1cc986a14b0f137d362d0f8301e34fa88725b24cb162a28c867126fb618da098c572f990504fc7a2232857c331c62c97cc32dd781c8d575ee6c8b2a01265e6682fbca2cd94b581680db98c5c23289211d4f58ca04c9d11d4c91a418da0d87261be445605b9d01d97e5c29c3167cc1973c69c3167cc193b3b3b3b3b3b3b6728b64c6c99d832b16562cb64993893856650cbc4211d2c8ef65e3c138da0308623a89772c1982d1799e2c899bf602cfd85632c13c622cb74e3a98474c864efc6ff73fa4654e1d3c7045580ecd18126b361ac09f5b0443e0aa9c07ad4d980a11c2c918f9825d24be43e0a01b11e855b498e52d9e956971d2f233b2326b4d11448b3b2890aa540678042169da07723baea02ee36ad88a6699aa6cd4ebf2cf99078b64d76da7f767777b7d75a6badff345e291b1cf2796090b27861d1a245f52aa26831484f38a17a1517918517f1c50b86efc58be7c4ca52bdbf92f39f27c0d7b17cc6e34d8b5644d3344dd3b625b66ddb3cdbd6b1327c83dc7bafe75ed9feddddddedeeeeee73ce39e7fc7fbe5a6c704c8d8bca55241031cd8bca55425a68658595c020d5c0a85c4504002062c4183118be18319e33db8663d4bdf7de7b6badb5d66a32999c80f1a677ac8cf74f27e77bd738ca9ef33b56e61dce6d896ddbb6ed06b9f792dc7ba76cff58f221e11a9999e9b394524a29bbbbbbdbdddddde79c73cef9ffbfb2c13135312a7729546ce22040b887a31c8363e11d6e5ed3e9de7befbdb5d65a6be51d575f7f95cce71d2bf3afc61b3701542e642d119f625540a6bda9699af63ce7355fc7ca387c72ce25b6ce666d99ed379f31f305e95899eb9e05a2f49a6f3265fbf38965c0a7123e7df894e113f329caf6cf303333738c31c618a594524ad9dddddd93c4d3b13e0033f8e44cbc82134bc0248a10e158e6f36c34ad5502c14b4da113ca5a6badb5f1bacc9c2cff737e89ed61adb59f542a954aa53224af542a956e907befbd9e1c1c65fba4b1ba1abf42adb5d6fa1c65fb74777777924ee632994c26936900d52c0044c9000e0902a407e6289cc1b1d8800d47a9b95931a04a5d4270c70cf8724d275466adb5d6dab8dd7befbdd7c6bfc911018374a4d65a6badf3339d9765599665b687b5d65a70347a23241c655f576306b9f7de7be79c1c65333333b3e74aa532d7bbfeffff3f070ad5c368d8971ac11718037c01aee084a32f09c7928365aa34af65029d282a94b166adb5d6dab86ddbb66d39a68b8971314ec220dd3c2aea50510a2a525979b5d65a6bcd30804fa7d3e9743ad91ed65a6be706927838cacdd5700a695c226e718b5bdce2e6eece5176adb5d62aa594524aebca5cf32a954aa552e9698e082783214130471f10176366b55c403be8cbb39ad4acb5d65a5b22029397c8ea58fe7c80414a83a3ec97f174ac69add41ecbcc69592010ed4b44fdbd79552bc3515a57a37b586badb5ddddcd919939ffff9a8afd65b795d9628c31c64822914826c85a6bad524a29a5eceeee6e777777dfb66ddbb618638c31a254524a29a5eceeeeee767777f7ffffffdf3a9e6a83e37d36381e759b49ffe1f3c7e7d37f2a1313500a152728110585e14341790ea872adb5d6fa03660f6659f6384a4fa7fde7cfc827c848f0e9e958dbb6dd7befbdb74a596595555659656d67ef5899ee39e79c734a29a59432de7befbd1189eeeeee767777f7ffffff97524a2965777777cb39e79c73feffffbf94524a297b7e4965e2de66429e31560da84a718262c28a949892c2f0a5a438e720bbe8645f78efbdf7b6d7f775d65a6bfc61ed446152321d7e483c1d7f142625f343e2e9f8ec4b36f4741c8549c98701eeeeee73ce39e79cdbb66d9b268572dc4ce0eeeeeeffffffaf699aa669d65a6badd5a454eeeeee1effffff7fce39e79c3f53542a504c5891e2e0a3f439326e2f6e9b09e0e328db7fbeb5d65a7b62adb5f6ffffffe79c734e4dd3344d43a9fe9fddddddfda43a31c104941218a429293a844a13d835048bc88205c3c782c5731c7d90a304e20e18a4578959b40983b4450b1961909ed03c5c44172e183e172e9ed32faec6939aa6691f9873ce39e7cbcbcbcb0b648e72ce09e78a1529550aada475d296f4c57efd2577e02a2e858aeaef76527d5d51d16abeab7ab345e5e2c54a15b2027857c411e128e658e0a85dbf8cb8d93f23cd8ccac56dc0202500c9c74beea3c477380c30448306c34783c67334d406741766d15c20d72f2f1d83e9a99e563d15917c02839400319f0294544f45d42e18a428340b4fc50040a051956c5a60c7caf0977c483c2c928525326461798ed49c0cf7af8134eda5890f18a4284c2840a0caa9a490292aa7a242fa388927270cdfc9c973a445a1fa8ed74d4dd3344dd3e2bd11896f99ef251f127f0fe7e5e958efcfd3b17cb2b5dbb66ddb3603c506874f4d01aaf97c72a7d3e9743a210183340547d9f379c7cafca36000ad88a6699af61d2bca920f89a73b5677ffffff3f5ff192978af928d5bcd55459815a912224a59a2aa2a86190d222aaa9a222e48ad7c5f05dd773e29d0d47cee108de008394fe07d107d65a6b2dc3cc00630d2412895443942f6077776f01e61aa94924fa640b41004144059726785084121cf0408a0437faf8f1738711e6eeeeeee3591e600bdded0326081a58c70a608e803a7ad8019421130253041810f02004071e88a064370e39a04196987814087104971d28cdb6ddeeeeeed666b4eeee9648604d248613b07b7777378964c4eb26d5d0811322965075fc70c30882d801c6d2e0ee3a042145229148a477c407605cf03ce082080c4b0da8c0881f3c20437a28497777f7eeee6ef71d1a0032448766a1bb3484091a9e076028b284157a8079628823cc1f44783cfe008e2578a45860830e70402205304d10c900d4a142088e7829c950821f4610831c848019820f6688818811a26d3a4326a16734a94109320029b2821e8af0f1044c852e444087113b8404610225d80005421c01e220c4901cf80b347430430d8818210607267a604e2d2243667044bbfc706b9bd4241289449a39b8bbbb7b7777f76575b7bbe3a00819c8e18722f8b00124d827025d5c0e8260041d37f0e841071a4c120f3f80e0043eb870030c1036e898370cf141c38b81e9c04a123db05e20031322b0c1cb0f2570c23259a12058261a585849c5106df1989b81e9049888ce3002868e213c4c3f60b8305f681788002112c4fa589613c161c8b692c484a103064a60434882c6b510798c0cd002231eaf5a20879301dd9bae0897c1d3022a0704776a79d8023891c361f8389ce7d8703220fd971ab9bbbbbb87484e4324abdae0f0d27777777757d5c6b25e8524907e6028794a9844131386cfc4e4392ff55ee901f14e2f7b43bcfb7678252703d2d47cffff0ebbfe5526b32ccbb24c8e972326262626a6a777b4327c83dc7befbd51c618638c319ba552a9542a953421524a09964aa552a914658c724619638c314629a59452a652a997e214c7ea78bc73efbdf7de6ad54ce55a2b3333335b5588044711de8024768c31c618a3ccb2cc3b1e99e9eeee6e676666e69496524a29e5ffffff333333738c31c6187ddbb66ddbb6cb7cf9f2e5cb976fdc549c980d8eb7791a37474fdddd1d661aabf2c02630483f1b2c61ae4f44ad081882307332207590e3e7038560909ac08b02047d80d0061551850a864f858ae7c0919301e99b73cec7a718bbfda5de73648f6c7f1426259f972fa59452caeeeeee767777f7391a8d46a3d16804fd331a9f9e4eb56aa6728db5564d0533ceb28c756c384a97524a29a5ec8e73ce39e7fcff98ffa884103a339a010480800273190000c300104581404fc39295f514000a285a5a426a321a2e402c1288c2d04a10622814008000600820c018431442845600a08f028fdd0ac4c5c28144524a73736928e067260a2597ccdd4543ed74a629d6dedfde9ab57a1038856633486bff4249bdf112b795e93595b115870fa9172108882b27dfaacb1edd72ae51ac48faa10ffaf48ceca10a676fcfdcede587d6342b55a58a5a90e9490100fcb7094fb5b9a81a735c8505f1bec76212819606827817400c9dc8c8d0c1522f0dfe3c71d3512e7baa5b00e007971cdfe4311a58d4564c7b48842617323d60f12000416e947eeb13171d7cf3d185b5be25b3c8e6b05502214c63bca39196590c7f95c8b79cdd902eefcdc757d402e294841201f59a59cae005bc1c16e0480ab87af8c87a5610f11c1a6bf9fe9ca6f747b4c1adb558823ac08c83833b6c00bf09a2f5d67e22e46e695e0e8791cce27ed37c12a999af8e00fa2f99b99437b1e4209a45b86e14ee5b2236a7fe7ac419d0b4deb21c4e06a6193a0af40bb9cd8b95a50984119b0947bed91d57ccd74ed4ba9bb28ef7dc23eb9a8d15f42beff8362f630b8f4a715c24e5495c3f04610248340011f109d1c9a9ac00ad994ff162f3d2ba1798ef913ac4e4f155104ddc2728228b88b568659128c621ba8e22cc65d59b2b955648b8ef32652dc464296e4c1c4403887c3addb44463221fadf40ff45914cca64909f62b6e8da8854ca5bbef0e61adb991c64e79d9b1611c599d051a02e11b9a8c455a7982a274b2d9a90baf906b3a14a9d1a53002df2ad18e5e7266170079a7b9e6c91017bb1738ac34d102dde0f38431f78e8138ab85c9ac0c916fc4d2ede386943f0865321fb31b2e452cb09759e7b1eb098ad4f49458f5c07a794b615831ac4b497d6bfe2928de9a0ed57cc4abdea14e5581d7462f36055777f46ba9d11fc0aba07feb3326d9edb996f7289cb511a82d7ace5954d6c4a2c78e6c0770f5436996154c2d37b3340e19d5f8e0d7989606cdea126932bf5308e484d508a9ce71ce8a62dca1f00b155904b747d30917d35c8b4e44f440aaa5c3d5d69b522cee380293d40018a8f446831f71e333ef7d9636a28715b433078f2d168761486b279e8ff2b4385d6ee9d008dcfca35fc67bc00a87eb9691c9d5f3963366e4d8fb030bbee283129798118b3e7bbf6d350a6bfb07b7158203294626ce00463fd3037ffd2322372d7a8ed8abf7a6be30fcc7aea42b5f0e65f0139be552a5f915a8f6933005c43c6c32f8a04a4bd11da10446f21225bb1428e067220a9297ccdd45a3763ad314abe13f80548186bfdb37c25cc8c8eab039beec879287c80098d027c9e54a84c208b101ebf938de58447d25fca4bb6a7cec7846eb85b2a7098b698cadc14b027ed7a3267eab117f512ebde8ffdcf5d09327d63c794db5a15e92e5d2406aba4fd10db07a1d5efce376e6483d7327c6ebd1e5f7a52fad946a9260618f9d7e3923ff85f50a09818a74543732533aae50071dbfb2a6f4b0269ab06ece48d2e6f3bf350e137d2713220b17a3640239515822f1555085496582cb01e074f6e5ef29cd8301d3481f3bf28658517a5163c91046608c45b11a582430c6f48a33cf67e8c6b5e24609eda8ac18eb254db0d615a4ecfa8426f346b07b0c9cf6689ac20417231e78e6ec8af9f4615268f623104e8908108668492dabfc9426fceececd753ed99dcca19bd4f4270a35a87521217c734e40ed240b5846649bb4e18847bf5d6150bc885328888584f6bf0f4a05779cbb0ad43e0b4480221541687dd6bf410dcd2698fb05994cceec913d433ca2b74ec569af02539cbf07c3ea2942fe3f15bce75500167958184a6912714b9a5c63172cde0318af4f83b6dce7fcfeb7a0f0599ca464096f602681c38e51476f728b03e29cd092259908e80de299e00197b14e18bce37380948b41ccc0d1b0af7df1b0076acd01b791a506a0ce61f4969458b16a541b6cb9b190ac52b42dada9910fff31a5c411f5529d02b44ddb470f6d4fdb7d5b0bcc721f710517a353865cc7aa43fbf8ccfb55c4ce41d19484a897d1a866d30df2f6002a402715a2fd0917280a5d686009af996c0ce1f71915c665dd913acb5301da43b0f44284592d0d0cf229664d861a41c5b9cd31dbb42ff75604262fd41c2dc71ca16978114087882b3081f6f831bfa7c1761164c4e611698025994220920676f5a08f5447a206e4ea79777a6639bd63f0c882c4ea12a2ca1d9849e0b063c0680a419d9ef8c4c8130bcd6630644afdededdcb8380a72b2fcc429e0a94b54a06c64f5001503aa6081f2556ad61ffba781934148ca33a11ccb7d20d72dd5258da478754c63bea0da50662df6847fc5654d4cfb96f0845773646ff2648b6d2f2779c6ba10be6680308a2daeb82e7f30a191573f01d7662a7ad2009239a22de07b88c3b67104745363e5109f80c41deed540833624261511deb9da1bc0910242ee98027017cd207431ff5c375933fc207c465a0529f6ba72157af0a1b865227b29ba63cbde548850438ace78e185668be80d2eb02a3890d98a5ca27b3721b9b9b89188d72c65d42958ca627294d6508a9f4acfdb2a9fd9ada4a4bcf2b0c5b1a841e05b92f8f3582ed70ed820e7087fd89f93513c1bdde2a71d1053cad44ca09d755684530e531e2a844e895c0e4b2ca66f1af7addaad4ef5afd2530aa003070e95a5b0583a686cea114efc4c75f3a8aadb2aaf11798521f4c0641ee59b1a056dc44a03176820269d9802bb4bd25e30946c5d6609d6117354bd14f3082ee0a25064a031af49c6a9c7c0bd93e002d97315d98756c19d31601cba7f7563513cdc688926c2b86c45b4b4ca7be9e70ea1b9bab5df14a5ecdc21c7b5bfd6fa9a89abcb667f9f0eedfb09d8a54fb8a7e8654a52d4d20b5b9e5031b569eb896d12ee12284a4d7a828e00d6458c7930e980788f7848f40200767f3e1e63c6e183ba2f0ab9ce4248a80e74b83c46eabebb4c3dfd8008136d909f27af1df01e7c863c44ae11aae84743f85c3800e876a956c1edb5c8721c31347bb1cdc4a1d80cbff216af190b91049ccefbd81ddd8b9d3498b3a3cf82045a7b18784972c639b131916e4d92f7e68a174c6333916ed8f883a842abcfc6c4291008130441ca3e8b15de335cc60a019c0ac1c499ffc295e84a7f692d42e818bb5b9c06b9fcc12068ade27fd3a9707a8d077b390970d9e212cdd3fbac54dd447537e71094130f78be730fe174b01fab64bfa1cf9b7a5a51ea9b811373cba434a876ce118ea031db255eca8e59c5eb221faf8eacc2f461509fabbd221a2a1d3becd311be753b82cb0a8fe896e698b17c081fa3a1fca7a6fdc36b4f4756f2e8d45aebd72d3cf6060ada88cc793714f9c183db6604ff325d421855774cb4c1ea03e61f1bf9617712890ec385ff437712480d011d4d456ab2929054b20faf1da96985e43ee44fba893ca4f5f67898afbf5e93e466719d44bd35581b8a88353a00e9b069f1da0bdf2ae87085f47862368e8d1d6f3ccb703c8607bf9c074c55053e2e084d590b1405ff5ea04a8d9919ad96f4c9a21860198bf05ccc6cbb035dd27296d0e6d6e8c3bceedabcdc3df32bcf9d520514796be0dff85f8734c48d85c7ae9a42bd39fad03c13a2be073b3488e9e22a9632e9a8e091e72df7c7e0ae5eaa11a18fd683fc6625de8d08847ca0c78915170c43ef033d83e755b595b3dab4317a4253e580e27e3c5dd8fd095e9b415c7d9ef09c6a1ffe68ae50ddec3974e49f654110343a4912599204bcc2bca3531bc8f74123ddac9ddfd782343c67611e27e00fb2811fcd8f815fff4515e8430e78774a479f59ba7801df6e481fb04dff0309073fa671630ce99944262a9b463c2df635d1815712363b130865c63bb68c8939dfd0daa0a6f9e26f1f0c5cd6702c4cc09213190b7f803a188faa62c105550d7c502eddfacfe1660c60fac98aef2657dd4c1fbfabc206ee7bf2a6f694bd48c914bd526393de6de2216e71102d6835586e221cc5646852048e9b17c32d03295dc1136620312c38a019c897057f390369b4e087cb5969900d3880c9913bfa2eddfa83f8943e73a2c3d58669b2cece3121e713fc2a4fb06d80450e4cd9d580af4bcbd718f48289dcd8f7815e944e9395e323277572c76db0a4091c5f79821043201de86c8a22a118c65fb164aa199b901492c42ebbdbb822977b5c6b75c68cad5acb4afe6a2d543762ceadb1a02f0a9f69c8e398b1850557fe5a09600b299fb026f916c18553560253fa0904bbea781fb2e464482bf0d74a10bd38138ebfe3f8da522f7e3135084a0b8d65f319754fd4a5dc73d56b29e48f15787a503f3fde48bd30c1b926f55507d68869bca8c5488df18e16236aa627a2b1b5a4a273bc29c02d90431034bfa5738364245e9e405cc34136c613e4ebee7a48cc9fbb52e852a82b01d6994aa0f858733df9db0fbf92a6d217b66e6e080a7fc5b76b1a380531ba2c68d08841c1040d8ad086a21e0781236fbf87f2fe9421d11f444bc37f8b005439eb7ce9d550cdba371fe3319ff55443b491e9a7ff79a893e541b3383385f0f3594a5f227fc0fe5486f0ddafd35fe05e3f8272c7f97afa432ca714e20914289ac437a6aaff9cf6b2d4665a90389bbfcfc386e6ce81b9d663bddedaed5bfa8148490f8268906a757c33a1410fc2e72550c94be39cb71993a9a60caf08faac9ed5c3e2056006d16dcb20a4b10aa6b7f47774c03ca7e8754a768a50aaa39a7d8f956dc250854c227b087ad2320e6446f1e246a2d00c33f0430ffe016c526ad8b64b14282d4f410877aa3a4faeffa1e95a618164205ce629b6b50359bb5e4f37b322dfb212e5cb1c442bab8a728aeb2ee709484c3fe8f9918ce2949990b98866aa2c365515ab0d53850c2aaae0c2792abf559a8af10e93c4859034170b13d9caba92b5faf39a2ee5f3e5b236945e05ce0cbabb3fd9894c795b1046adf3243a08c97777afbf06f6f559e584c226e36f5c0153b5311284b70002e1e5bf703802d94878e9c20daf6c48e0570c84038e5759080d9c78f0cca4b0927e032c19375b64b609e8c5dcc982bd09841b45608a546453cd226166179127c248409ffefe32928e7bc912eb411ac9d262f1ac883e342b421ca6c2fcf246e9c108cd1681ee5acada6f68355263fef1ed19593a7b6c83ab01db1e3e06c6de4f50c30ca676a5efc08510206c05280c644dbdb071ed701c04b1962866dc932fd3ae2f4d3f848af059b0091879e2812dcca4fb508b6491253e5474d49d5e0375ef93f1265f9e9973793a89bbb3b1e8902dc2199de2a1b7a931968507be69120638848834b9bf9d258f2a7e022a46401052efc8b1d24331ba000f7b92dd965657c7ea853f2d7edf6632a0b5e5e7d20cd9be3608ca5bb3ee675d9792a9a35cffbaced2f9ab1b49b22b3bc45604a5074859d8983289347baf7a2dac117b44cf245fa5291a4244f2058fa8a4910698c8810170dfc438ec3a54b08c8a6f46a4ff3e7a8de6b6fe7d14b98812e2f51ba3e0b7f08a2390f17886a0f37f6d8d23d319b6f622d5613b23af590eb498be2ec89d2b6ccbfdccb41941c4ab187589f048e7cbf7880079ac9294651f187b56a0b69ec77760dd671a653b8abef65980250d8bfe596477d5c13fda34ddf96e2e816e7cb45e14d6376c13ce2d4686069037e4d95e8485dd47d89e5c90e6289234f10e4afc815d623bcb16decb2d9093805cf628ecc5a6626d6e027e1cfe03a4ec475bdacc7ea2a8a72820da8d726cb1a492873154455854c580316ae82b9af4b5dcd85e6e6324f378c3b52d9beb9e61c566c7f9b597b7369e20eeb8f8c6783166565fd1925fc2ab19f981cf8e5426f0274e9d1cb613ba90f8143e8bed06d99c5119235a79931e0cf1cd7aec3c3568d5cf7cc7da6786056f1763e2d23182c6285d74fa2d2716bb351366d0af9605b7025e66508b8d0b4cd65dc025eb11f2058783e2b9bbb11c66d2dae70438ae2142c128e9860f999d838199de462a882bc5d493afed965b37713f171d127381587fb7317cf5dcc0a6663ab4b4cd84ca599c4dcef8b75dc5af49d88fda5b711f505486be7e78e1fc935e6d7181859a7892192bb0042b8dfa45584c99b94422f332b2dd38598c4bb8c3e5b8d41569c800ce35d6e6d322b41df1b426cf6dc391fc599553e2c6ec641236a42e586cbc265fc611f52be75daa4bdb7be6817470f140495ed6642352112fb3f9c314bfdf64219dd3aa16b8f74af0cd5063ee6e9312523be4d3155175c779d19b3d129d46bd0ad527f13f8c8bdb36aa67c850cfc6e646e454cc7a40b7ac8f861a52e2bdcf86d1889ef58617c7bb908d35ddacc4d496f98e511d5447313b3321a46390161b4d8420c65641505c604d0c924f342a1505258b7595dc96aa70e890203680f1d755f655f95fff86cab2d65e517ea3fa8d61780aa2ae2062b1fb4f93e1c96b0b257958e1f9cd9ed14d49503e6fead88415018749e609e8f94d21baedad99e0d7f331aecd369df85406845b343feac0b9b77fe840eb24be0d26cd5881cd80fb146c551353a0c0cb4bec3ed59155d0aa188be21d06d7ee0eac731adf3ac65c5274ab090e4204180d47dd5c9be5dd6a2f655afbfcade9d0fdf012cb2c8bf54c51c82dc008358b26367c0b62428c4a655ebdd49df71185fba34212303df5a8ef3a1e827ccd500b2744495b51aeac29b700616598a0c8b2a65169627e13385060a0a0e61c92a0da16f07700a572c02c001f8868f614eacc3a89a01219afb8cdc55fd2c833b0a07c20bc5b01a5e2ec073f0c6fe79f3ca005cfdae070c801ce4d74775ba48b24576ae59abb449ec377f3a045cf8bbb609e84234783c83de5a9734a9e8909ae6e45c3951e31b097742212c4d8023f057511224de1912303efc7178edd957884a5d533720d1df4116464fd9a2b2f287489defb95416cba4832b3d6cbccb358f19e91e6a7438733cfe5dbfe722302c66759aa3106891a93cfe0434d952454483611f2c6404a94a643404e874c3d22967ce6470b0dac0f107b7f238a56a9fd90952c61fd2913279a50653c2a9a842e1fe30b20d7e2e458a4656c7a958c8a3391337056ed83a576e01893fba8454461a25256fd003b86d48f1153f01cfdf819bc08abe48f624ddb414c142284d0b0d78cf8257a03892f54edfe86598097e0c3bc49a105d89b2f50718006734996028ec43420aa357b74e31841fa344a8c9886636cb05d38364203ea2fca9083abe14a1b0eaf53ad1a7bad22a1a93c0117bb25f2a0d9890bfb47fda2bf2c3ad9a20ad8fc80592a906c6520d719eb87c86b7b059679f7036268defb32d21528eeb77ab0cdebe2d9bd4a5b38d71c80deaa4ecfe3a0b8265216a66296cd2a52c9ace47353c87305258d2ce161836494816d5f881f50845660a389e100439469fe45a827ae5a214110f5aeab432d146b2862e30bc5b24a365bae0071d24479e73d42d2d49cdc066b50cafe3d18648cc02688cd20ad784f356a929c7aba573a6e4703aaede74e2d5a083e08396df58348cb7b103820816e998394a211c51e4acb8d96d8a451858fcfe4f8e62787638d72742c073d17c48eb98e1210f9568232d20ec2d148120c1bade898ebcf7ad356d5ae207a26b58a31ba65f760ad725e85bb31d7442983a6331c0a5bece0471d674c8f847991469521d81cb75891846124a4bc26a2b460e24b932580bc2831e95f12743fe07523c9f3de289f9040a7d1afef1f1613d19dae594cb3a7270e4d873361042ecc296c060599c31030476bdf9227cc50064a6085f6005cc0321f7d4780f604a4dc47d94d18e217f2b91df4902ece20aab7230c5f8ddfdba16d2f9ce0ed40a0970abd1db5e14c8800a1ab7ae0119c6c1e7bd85181ad8cab191691e920de662832edb00628f0f8e0fb1af43d685378d66714f881916e4165df81adcb9153927e64adab5b9dabae485d35cad955a6525e15d5f42a52b0afd28b98a69feeef3706f6ab5d81679d2e50ce2206ba98a5812682d4914de06ebd047ab344dbeda6576e7040dda6faa436d39e4f1ec8ce7975006f01de9dd93c6ae98de996d96e8a09c59732457a05c7166f3c444b694af9a33f3eda1b64efa2ad79bd610acd0b7e4d27cf5dbb00cfc5738af6dcdfd5a699a9e7260ae02fe97669f8b10a4f3ce26e38107c896862f797cd48419006b0032d0c451f42c2b283685297dd02afda3c0e6ffd6953b9ed74435e6e27ccd26f92d8ed2831373b3a6cb98e8465d51114ea74e47490f99b43b1e0392090317670e6a883a0dcd3f9f460d9cc591a78f6a7afda1a96e71ea3b5aed669a5f7d34b605aa89fc67baec593358384ea9b4142bd984d797fca6f39b0bb63a48a97ddc935923588cdc6c6a87029f29db6074839b5f8da647ecad43d343a2f7a8106f59fcc0b980d01ef34625b86fad5ca6386863576d9fa9fc6a6d6cfe7442b09286bdf66f85498fb65fd4c30b54c920aa6721b38149be0ac3e06eb901fec3c9130ad4bb2cb21826b26d1d8821f1237c53c24544275c80f211c727b3f525c48de14049f0444afa79bced7f0836b7d1964fd8554e8a278be9e605a59f9ef950873c104c7804b354e2b549f343915c88ba9b3fe954af301593649662580c810820c263bf1c34403572258dba6e2cbd8c9d2a3e5aadc90b3ad84b60819900c22d38659b43c9cf3c1154c160aeb4906cc900483228c55a0eaa9e2a8522a08605071f877122549723ab32b74c734f367edf1e61673b297375a1ba8b19fb42dcfb4f95258dfc61c1223dc4e89440d4fdf2e054aa6578df08d58f9e26fd265fcd1505a012a8173829ecbf57051ce2a765ce73f605c8038dccb320b250757e5f90386790259cabe47bfd0605d5d2111f2850449af4b376d93e756f4ec681a33acaef8bd0abe476b72626bb2ac0759be3d76c5575b820d52cacb4b94970b9f8dc7670bba319e4e92b32efd19086e86b9e13b43f1691c55e1775aa6d1a649f0b451c640b4f840e29f0ec894d84045930c4cd4bb00ba388616fa6b83d634282c45782c0b2a6e1feeecc92da1130b79eb42e7b738152106ddd94417f7d537d1052256b959eccef5286e272fec910a46f5b1ffb4859d1d84dea14123ebf839e7d23e3514068dcd3f3d42821450065b5713b05df8b4f6b055c90947913b4514c313c32e8d7426358ef25061741b575b052db0c802a71d7461ca104f348177c8d8c26ce06d63673b3160480fdd90535f8b168d4417cf3bc702ea5f0875c238b41948bd022b5c872ac82c42741ee3b7b62d5f6806902c87c6828a01ecbb965884fa1c3104a914d536f9222964b7310401ece7a3f4d088e692df6c64053e838a59940a39a25a5d524c7861abf26a90e827f7dfc198f4b8b42fee069aaa04fc96a12faa2cdc4d8d2b7d86575cc3a017a9535367b1a5ae682d1b600c78954c6c330a2b362b8ed0f0d3b07b16ecd616fe4a76a65d458e7ce6e17f1c974669e0aff556b0d2a3d14634ef87b45725e9f799155fc21e695317d2d7e7b7f40c503354442c4e5c4c4c54449448dc9ccba5eda92c874fc9d8f944ccb54f58e7fc3ca0a1cfd9c18ab9604c4c5e5a41b237e95994140b083b31bd32b35281efab8365268331e155f825111ee0e347d253fef230e1448d591bd75ccfb84e88823d579e269353e95c6023e85df8a0555c8234154c874d375d98b404a59faed70128fa699e099456d18062e76e18af07be2fa5c534ac0458902b1d9eac3b1a026810b9678cc0a8c3665f85f24f6f0384751a06c4b653a144f6acd5b455e0d57174fb0064cfd213299e9285e44b8d138ef340a1fcf78ed391a4c804adf28bba8a38a057bce44bce8b30c5403bc62a3c266d0eaf8c875f32d557a1438b521b4fe7c104fbfc12021fa41c650803c3c0d22e54157f1e1aac8b24c67eb84d8e6b7981cd10bda68caa066c38c1a7fabc429f78177cfa80a645349293057b0271000e74b4d990f94ebaf6b1449450ca201f36027c22e5ea32ca916126452687033408b7809701164b59a2b021340425c9adc9a354c3a3325258ffa54967b1f7e40ef9b94315a5efef43dcc47d5fc665d8b287d862e5154840c80834067389aa054df4c28d66d64937c8440dfe1def44ea101a1005d623349b8239356e588523485ab623d0be31eb6d57d930245ca6db3386df8cff2cc05ed29719302b3cdb404fa521559caeea19ecb82ff4fb8b00d3bb2212e6f1e4572d73e7b7e81ee598d8d04b89a55728a1987512b6352641e0e0c01f479207057703311f1cb88f08f424c0e6283037837edb8548a43a845e78beeabdbfc066ab470806085efd61183aec8be68b01be596fda94668c3ae0bc790cd9843d2018c913f79d5f8f7692875442e84988aa38fc93f657d90f94d359e1e8f85e69356040e13c5c49c8f59a6775b91ec84b69e0f4d123ba4b54187330319f9b577571052a77cb7a84706b450fb81c13e6215248b33e45020552b25eb7c6b5069f9d6611636ad489c0594e2726425caccf8441d0c77350102a81d74847607fff1df391dffe97b32082aa08d78b61e0d5e300a1da03044de6ff41c1ac28af801b8cea6c50b35843cd340d797268a0e99b21025f96ab03b892cbbe4496acb0680043aa83ae245b0fb5682629db5c756ea3cabe6a0db9439d96102bec6d89e3fca16d2485744f87d60080f9f2794301402d4b7b953b8db7e12193f34d07f6092cbbc3cc7fbf58b65603422d732f220319095f7cc8dc81e6ddb736892b991e7bbe658ee97f417915e25baf3d085381dd3919719a3a21806b7e61535fdd39738330c11a9ae61a885ff826986b40f558f8b36ca6084e242460822246ca702e1541b0cb6045976ce3041dadd894736101d6c889baa2b83367488be1cd609f483366293b130fbce09ca28ba5f4eb0c25ecf17f7fe5cebfb610d25fddabde6f61f6c4ef7d4af3d54633a1b20c543064e50fa1d7f1a59b09b48160a7ef88bdf3786345f08d4cc71ed5b7ef8fedc9ef1121ab85bf218f2c60803750b2cfe817cdb4062cf07332d8b1e3b5239af5f7e131d3f03703561b0f14bde76fd19708aabef350ab81c0372ae37b3525c19b1708fa6b1e946a830cded6028ece6ec3997c8c3dc1f4eacc80bdf320edd4a66780eb7a99c7d04560e00c766475d06de43f91172a638af578386bb5b9dbb7bde53850b48a1e0688467078d51eaf2fee2eb7ee76a7793ff39098089188128bed5ab557bbf40c9d92de65f1298d7d3a0be6a999f37c72201eb9fbe2ef8802633ab16fa5470f892e3f648d82c1d407bd7079e7ca8372d90a32d089b5f66fb4d3693686f554f75bc5a693a3ab1a10489b27c59db3397749bb6e66a784f02e6508433770e4ba8824237c2f6954fec9bcdc27c8e7d595546f9fc278904b8a54f00c2baafac472bff49c3b5681a026dec329e13a2cd3ded032a9fb58ac249cecbdb6d91024322bf910ad3f65b5b8286d67aade82c2515615e22a17942ba688cc9edaba2494f7a546075b26838768175f18c1ac22574bee45f3b12f7defaf2f15d8d6d7be7df5f57295e206e160196616c447ebcf58432edfa7e3955ed59c72e52eedcc0ad311bd4cbd6f9a3eb36c4a49c1e9698ba2aa07912d49e2cf75ba1cd085ab528350e49154147e38286f06468ea6cd06215a3235bfb8d61c4088f7b5403e1f815d4a97abe0f1ff85bdb4237ee25e9cfe957fd2c04a147c28e4f597fb725e70382db6043c35fa0c83519a4791cfaec6af8e6c31200eb013aae3373ee1be59879731fc718e169ace667abd90e15dc4aaac1a3d8ff71b1c82bea8ecd2d48c915e819e00870e3a076247454347898ad48de863d0d400bb77a6c666352b95737085f520559a15b2fc954c7567db2eaa053ff540c828596563302bf38ef8a20310928599041617b29092acd1fcc81a1e052cd5b1b97a886e697b6a32569539eb6a2fcf40fd7a58d79fcf56184a8f412186378b2a1a2571118bc97eed8a769aac1c4d84ce53754331806d839855903d7e244c634f98db042970b161a3558ef497e119b7781633c363efe0bd6b0974609dae1aa97f4d8ae90bdc8ce6d29375428f6f716ce58446a9a6e71c8a81c3f51259027511c931db3a49dbc7a1b9123f5dcc350478aa2775f2e7d96845fdc53b2de862aab9b59f1ad27aa9118d1c35808acdc04fa74e96a79f0e445b816cc49477a37e2638daf3952398341db933ec689ec39c6846a85fe7032144331b4800af81d6953e489c24abe3fb0e64664e039b8c95c454e44ed7cb10422ab9f5e0368400570a3b5a9fd2a6609c587adef8a01b9fd2a63dbaf86d624985619021940e617801382c6c3c565b84299af977b5f18508d961317bb1a477b87061634933cd7ac6553ac840257904ae7f04c2d4e9fe7bcf01d1eac7a29c6fbb9018a1d9f91220111c0180ed611ddd21d349361f42be85b120ef0a021fe2f56a62a7e03086fcc6e06a5a390d7341298966bde5a141081d6d427067cefdac6ce50d510c394c8b10b3282b99296aed335e4c4723c21390aa1aa6f56a18e459c37c700d63e5354c3f4718565846eb6b449fbadd441c04c2f352b6d15eb021d0a60531082b3dcc0de4715faeece2f945080596c037dc409e15ab988cc3da9ceac056ec91582c76dc148838f951b057a2f3ae924b2399ae0fdd2f9c0afb61d9864291199241efbb6d0d994132bc2809543325e92f973079ca4f996cde7d2bc634875331192440af7bf87ef0911c5a664f3194072368b645a6628b3b997b97535ad54298aa4ec874b085dae8827d0ada23a8e4a84e0181df0d4c3775a19c21c454aaea33c3eed2318388ed5d8a499332bba6849a40ba81772a6e33e3146b55afde9bcf252f30f1f9d4c1b6a8c0f1ca5e440e775f3ab4b3d299d6f48d24483ac4581974a0b80cf42d628683598c6a443c62f51412e90c1979abf0934f4c335e4e732a8531090f042e95be61abab454c49d2e967d5f682a6126d17cb6ed18a017361d6de64d000f61cb0d247c8e3326090c6f6d5fe233bb85a95e5985041d3742cf874e5aa08c4e121f9d58a4a734b997f45053cdef89045d436de4fd3a2cd182fc8b2058cd47338ef1354f6b63d507220afa2d9f3e09df9daae501985e145632216d66f3b5b29d838e7b00a8c2cfc4fd979ae2d3754109dfa58e77b902c36b4c6b6caebbc77ca64eb1e8ebc0f6c2533db0a82a9d17d92682d3c96c082c15c16ab21f03862117e8b4ad2d535318abda1b80d05ca85fe926ea157da7582349c67fa92a2fa68d53a68dd624765fccfd24558650bcb95827fc1828ea5e029454380a73aa927772adf84c084a09d168071c637ad5e65ac0dd23c8350316d28f51426cfa6fea64a8eff6ce0ce469b34c234121bf42523d85f43be49f34ce81522ad21131971bc1a18d86873534ffd02b37dd02d93f3a63bf902676e6c542d134b04dffc41e976fc6927995420def4691c2212bc0519a897679598f6b104a05c4bdc11669889845c189d951ca2004cbcdd2bc0f5ccc70705cbf13044a330d5c291af3061d3fee40ec9f8b7999bbb78f705f4f6972ee8efac2db0e7c8eb7d188bbbd6a502d633bf1d0486561e4c4f7e06c501252d6a79439fe9df316bee702198934ce295c4af8844cd42d99ad426ee2f9cb526e1f0b8163b7edf86a57f89c3cf69e15084c4391325864207251c9640854e797afb2c0f5169bff5d085e92228b6c741cd662268289935a99ce004ec25061223b356122928c13ac84422cd6eca898bc3ad8d056f1fc49c4c1f086ba5021e2cd93edc1ff88771509c7cf811d30f29bd2f745da586576509689bbed8ae2b4a7f08f540b9c2489b3270bdd44d050dcc8f90d08aea0734ead8a04ea672036942262561f0660b01d83b6e404584fe6f9bd9dab8eddba5d2e5ff7c8766284f781eb05965a6d6c556aa29e1dc5e4bb5d11c5ea8306091fd156b3b9f1a6c9fb3c4dff443e9baae1a32bbd42c67dc01c79940d299aef3bea9b13c84a54a6dc9484a843ad9201318d1f4709e3ed831910fd38340260a9a26109322e327138de0afd01f99e46e6c70516a7d85b2e0536a2e799303574cb20515e5361c92435cac5f6f0bce0895e3499f787c329de5703c748c9dabe8cfd8771ab3b47e504ae0e7b9b25187e5e3fe6d236b8abec44ad45762e8fa2eb0838396ac4f17f99aebd98a73d15b77aec9569fabac1874a3ced22946a23b9159f36b99f9907e5010f7de7ff06a032e7d628342d6162fc93bc60cab85ad7a58d42cb3c42fbcf17618a5b5a013e1153f7d12fab664847323675781863a60a1fb8614705e8a405b435f423db728003308012699557dcfabbacd54acf5ce64ae513095ba95a21fa5d180004d36050937560ba21f2c034a35e1b17eea188bd362ff72141b126002a98896cf17e2ca95fc567b6499b4f1346efefa7cce27c5e70aafac98c49a846daf009018bf5242ff53622f2a5dff2a91bf9560ff957594c5d0426999880e4fbf327bb0b4ab99486fd7a3a70a7f8e8e9bdd5aed6687d92bc160c2b1c5374a77f3fa3e763f14f12acb43149456d64714149d2a250ab0e272b68f0e2a1a2a0aaae2c0872720b7f92b9138852b0fac3be6b23c9f82a08bab22aa816fd9491cc399b28505cc115d30b8ff960997c9726b2cf2384e775c96535647a52c89e8ca9e63ec83d6dba26a82386d5651802442733da650733871ee4717598af2c45888fbe69ae47d3964c3ad7f42181ad51850849f26cbecff415892748ef5e8d7dc4735707989ad6677118b1db7c3c2a16715d4bf9ea712499ba934f0b3871c914afcefe3af49b9c4031be9fdbb6a88888506fa351afa845d9619dcabaf85b22d85bc0532c420a07b576a8eb59cb31f69716dbf0d38f3d6770264fec63b7f66749f667785e696b523996640476922a4a7054da49b40845226c14d26462bda9e149b1dc5046769ba50b226844426a6789a1f140d8786584b1f9d436b60b00f1cd57861f9c6eccd0d0b3f4e9e86024231c44ed32c6e31506160379250d2cefc9434a52759a0d865af150fcbc80d58056e44eeda0970f44d8530da60d01abc6638782638f48108ede1cb678fb832f56123d81c7635b954ed51a5a711b8e4b0df249d7a7a49dd6f9e3447e3ebc75143bf47659096549a34017176f4efd44b422f5577052d04464913a1cdfd246e8d5f06e24f3ce07f372eb6a6ac84927a06f435677e290ac22a14cbb8dccf04e8e34c49fcf74d62e38106a620fe0b174923e79ca561bea52e08c230135f1f0294dcd6d65d7bf67c7c05d55e69e822192e44c62256339fc780db220a9db730332ed37fde069820c397583a4a3d699b97f1082e8a5931be128d3d34dd039e01c01013f53cabfb6453401c675d58cb955d1b15449c81f02e805ee177f23078c0096389fb17e5fc2ab800c82cac886433c8fc8d50e1d0a9c7c549866cdf5d8d26ed8a12cdf5aa547626fe788cf92c6d2538bd9a0155bddf3e07557afb615fad2b30024d0a5718149ccb69099689fa5216af6ecad7778f2ea9158d60221edb982ea3783bf30e4266404b8b58d5738df23f96d2f9f60e2e07ed4668af82e6fc91eda2595a2fc9f8e30314948963961b760c7ab05902868516b8fcae88c8aa406c0838e7a4e6feeb94366b26fbd116ed463b0d380206303c40797fdaf65f53b5ea85635299d472d1e5461c1c1801433434fab52e8365d96dfef9b8eb5afcaa5a94d0ca1cc631e967581c88d8545f41934d641418696b9ec2a8d9bc57a99aeb83658a96c1b358d1f7e7434b00abe821679456db5e071495e87f7b1da2dc0c0b504c5b09d0705254c14aa8486deef3878bee00adaddb2aa51b82a4e5ae9259e750a26db27dde9598e7fa29a1722cfc1c90e33aae35aeb9cd12c5c9cb4415f15080517913007c18ce04056b618950c612381176d84e7400c60b256d223812ff7b86491f2bd3e43e1d08e82a8b04b5dca55b1701fec83f87fd7552dbaf47ed2236b8b3d3bb92b279070426389bc24b8c0f678d830d5490b58f36342a2d37b9621dbfc2f03b9ed0d6ce39acd33d82860eb12a9e49f09058bd8906bae951897f0c49fcf1099d37350d921b7a4bc2e5eebd513ad5640b6c85016ae8343052801c911b71d38dad87e26e1f7b9518498d81f68b1916c515d0340da8eb0a5a1ac5d43129ef873253668f16c96198ee731853a55804f0a5e0588ea3e3c082f44636f454863c527a4b882589dcb469a794520aff02eb02d802648f1e3dbaa67b6c5e51ca1086e194d8f539e7559e5d0f3363a597aabc9454a163ef6192a597dbecdf1208c5e4f5e411bd0479e9bf1e34fb7776517736f3fc7a51b784b592a7144a8178024de2a35084b0515043f44e668372e142c9f865f75dd4b4fcd2f757cdaa889a1988d4e45003e4839a995ffa1b4ee4749d9ef622bd06e5516e7ee96f6c24044969222368b01072921036ca8b8e9a2cfa5717cab201f1e0034c33426aefbd81f44a73ea90e52ef69086071a1b341bbc5a735cee87397b364fd7b2287a8fc56b051060dbfb73602d9ec2ab1714c17e31dc163eea92d11e30daca2e14882fa2355b128f3ce1e61dc4d210e1601b9724e7ac69e915dbb6ed6d47d4fc682978a4ca45e38175d18c70efc5d845b372d1a040737ef1a2b2f0c8126cb7dbdeb6ddea9bcf5ddc82f46e0714305b7424fa17fd884e76d0512e213a42727ee96f6ce1f15b8ef616eeefc1201400445fc47d24fabc92d5f76a4f0400556e02af01f1ea9d659d164e6ec1bec8a5eebd18bbe46e87a6695a07616d98bd37d705810541b90affea12d2220691b95aa84bc80df9f3e22bd7aa909956921f642788ce477109d9e1f3f97c4020971024425e5f04f9f0c810bcb50f6018266d6979f8d6df988bf1cc0a96d15cbebdb21bc3598b699aafe86deb6daff60ad7755ce7ad78f8079441207c2dc8c33fa90f88af80fa076610c4d782a0fecd7c205f014361e8ee7cebc33b0b4538654d706ecc8569cdbc6c60ee39d3b92d37a573573c74d2199923af181219964d5916eb6257f6b431589697b5a938df32a0f115fbf707fd38634defbc37be76eb6d6f5cd7791e8f7f403df78eafed1f50077d6028cc6188af0dc150c8575021ce80a884afd85f80498989687232e3c4436304400dbe821249058c631dcbb08e7c0535e20c84b586c7e771c4d78efb43da9fea65bc7aadedbfe60b223de81a5f00c31ad09ff4a0977befbdbd4fbda8155c2dd60e2d1c5666c8206bedd0c281d5baa175ceb0a3089c19ba9bfa31050c5a6bcd850c5bc7a8f0b72bc31130deb66ddbb6e970e13c4f1d4c68a5a0831351b82e0c78141e1aa4f164bc1f1fb93876003b7ab9efbdf7da7ab74f288fdb1fddcf87bcb7f10542fa86be51ff6fd4fec958a2c1e447e3fec6fc67f4d45631791ae305b5dab06003f3d3f09e6964114b3ebe902f953edff1ca17288df69346a4927851f71bf19f31fa1847238b0f3f7a6ff49ff77e1cfb457da11269a441f435465b6d5c0fc0e8ab8deb473466944ec49288493b40797fc9c8e2e3f33ab632ca2843a5c47bdf289aa6f9bb699adfbb9e6fdca66986fef32251e83fa1282cddb8a88bbaa8efdb402507ff5be0fbbc02f81bed2f3bd9b71e349678f5ef58ded3a6263afa257ee1d90559dbd69232bdfeeabd6851e7d1a2923fbaf5368b591b2ff7d1083841100445600804436f3df9e31385be51140a8542a150280482200882a048347a3e0482200882a068f4f8100882200882a291fb100882200882a2f1e34320088220088a46900f8120088220281abb0f81200882201896f60896beb1fb45c040c9843fd0b0409a435e501e6508eb97fcea1af2c22ffd8dab05b943b7fefa0cb31becbe5c192633a9adf04c933bf48b5530cf217320732073c8db53b9bd752fde2d6d4c8ad7dff17a6cb75bb561c2e66f02fa6e3547fd597b35fb7befbdf966f012404b2f3378c960f5afc7320a76ce0188d029c0b31b1a141d09d335d5c71ebf2c46b795cacb5d91416c2bd247af3edf7b2dfedc2e76b3b8de8be19747dc1ad0d5fb7553e164cd7b46ee8b5cf7637e89632f8c83e81da76c7fbde59cafbc66bcf7d72396a5df7631acf31763a0a8329aa0a2068b9d1a329c288189188870f950450ffdea7211f93d5602d6620457183aac77edb0b8868830c4fca5bff10426d500604463c68949894883e1434a4aad5a6bad49d055b2d65a89866c77e0276a4d49d15e8fd563ee80ed80835fbd4763fbca92da2a9ae77c1e535b25fb3a961b48704d15cd73e30706a8640cf2df3c8d06eccbdf365c2a37a0b14b0f645fbf045d45f30adcbd4b1680fe56a241e3e0d7d19a5f1bab06e6cdd98710f875d0877bbc8edb9bd6b2122e23604af4d0ebc85e3adf84737180de94c41485090785c52433e190605945fee8fad4679aa6699aa6dc8cc562b1582c562813b1884c914ad412a6614e28e3a879a39a6226d3ec6294140a8b4966c231c5be55f8ed8d9a62a7f3d43acd9c5e279b53cc09e67486329c62554830920e29f5a492444272519704ab365838c5aaecddbb287aef23a82afad467cacdb6b48b620937e3665c7b0d678e6ad63e2995bd9b945825144739aa9956333553c3df4a0b65bb773194856628d3cc50f6ad3079bfd5886b9c77299465530ca764f47651f43e949962a16c94528d52a35469941aa544163e9d3825efddbb287a2fb23049f2e8a52916eba58832c5be56e23c097677efa2f7b6344a61f25bfdb55c9e64f0ef2cd67279829d66bee7cb135a9e5eff96279bd37962d9ecf737c520e8a6699a2a3a2af0db18927468f060ce005fb1a0f7aad6b4be16ebfdd9a33b4a5d902f09465a82c4843d00896ff9d7df407924184822c14ee7e9dcbefe5a4e79958f2f4f32bffbd2e37fffa9869a23f4d79f7ad80342fefad35911e8bef4dd97279b7f7d798af9a7f35ffb4f301707e8f7de3f1cb9ce0ee00199d2d57ee9a798b2d219566ccb7a2a7a13659e3ba6b3c4198fa26ea037a317c32eecabd801ace7e36ea57b7317e39c354d674deb6ddb9bdb36c7759de7793acfe3e1fcf301f10f08d4fbf781fd03c150280c45a2121313513c3999b14791678f25de648f225fb11f658f65ff767f76b5b1692dffe8dbab30b9f7de3bb53de700f6a5d2923ffaf55a258e52aa7fbdc81aa54eb1cc81bdabf426e657d79023168b5f5d36adef81405fc10744f287683df9432f3bd94b27ab393e6f7d6745cd51c35bdf5d610f30f1d677391747c85bef993885c507e9c45befa5708a0f00fc075ba5447571887878ab8b23f4d677294e1979ab63060ddfb3e8ad1747fbdd6ff4a16ceb6c47b0f7aac7791ebed6f3b8cfd57ee30c74ff96f0abdab09e0402f21fee3ddecb9ee6b963e73dedb923e7bd0ff7d1fcf78ddc1f8df8c825ad0f44881021e2ddedc35a7bef6ba6872f1af14817afd6be705e4a586befc55ba762243c5288cc88144666f7e7e0ddac77cdbbdab8d9c937336bedc53c5a72ce9a862912c3b66d9b6bc9745de7798a2029728473fef914d1d94572fa8bc50bc2238b30721a8901668487911d1f8f10c41246b85ab858a98c50e16a3e4704181cc759b1c51ebe5430020216373357dc1021c44debc88d102d6e50d88d0b881b1b256e6e6e5e26bfba6e92dc1c39c5fef5f8c42cbcc2aa3486cdd885559cb3a669bd695a6fdbdedab3edcd715de779b8aef33c8f877b1e0fe79fb3ca2a3ae3e1696c8ffd63a1f7bc2fe955a532940563d918fb62cd99bd386ba0be7ddd63e957dc176512d8fed7b268f3f1ef5afc5173001159224b44f2c5194e64893217c7b67fc69bc7ebb82fe419a9fef55525dc0953ac71d14a648a525ca412b5843391f5f130527dabcfe6e368280b73c29cd08a30e7e2007d6845784598236a09d33087a3a038c3d1124f0455259485b25016cab8d9ec83f95eb0a63ff48bf958fa9bf964be3394711cbea3cfcfe573f952f860fef7a5f0a9f0b97c32dfcbe7a275480cd3fcadb4d65a637d9edfea5b7dab6ff5adbed5b7ba1c097f618dcf788ccb78ca7338ace3d1c19c4e6ec36d780d47f2b9cdc5017a5ec35ddc86a33c87bfb8cda7b5d6fa7486df0b47390e8ff194e7f017b7e168b571fd8cca519c628aa1388a4f9ca31ce5284739cad1dbb57426d6d24ed5add2eea573e9521cd52d8d24e576b81d2e8caee5733b1707e8b9303831b89dcea533b99d341571b38e47a7ea5e3a97cee476b819374bd3344dd374e4e1a7f374723314374bd3344dd3344dd3344db91937e366dc8c9b71336e76592c168ba565b0964d0dd3335adb68163733eda0f0d0cc53c368185d8396f95ad7a07b68186da36334cc89a599259d99a6699aa6a93e754bcfe897b6d1311a469ffa1435b38667e31154154d82a5699aa6699aa6699aa6fa449dfac479c3fad4a73ef5a94f7d5e1435e998645853a1a84c33141325658a99527d9e5af804734292559c09c784634a620a91e5a8d45114b7cc21100000005000a317000020180c0a84511ea630e448b70714000b497048627440369b88a2521048420c0832c8186200418000028c31ca0cd56d04016411abb87a9634166096cef6a5eacd762848f6a043f4d1a7110669d46b1c6fcdfebe8c0bd49681e380e4af07899911e8cea7368314ef568f635d6b0dcde5e80c3752f4fcad4f12b955a65617cc34b49a4e9e636a700b7a8abfad9558f29400fd1f89fc64cff1ef428372210fd806888a522a8ee2ae21349c822a486213de242148790125876e72d500e5d6d04c38ced3ab2ad68a489cb00dbf34978cc9f2097ffb54f9a51fce192984346c5fe4b1c3e45c2ddc1a60d72fe67d9da6347193222676daa8aab49545450bbbe74990d7775dcea500168a91871ebe8e0811ed04d7a25537b1f9a4042cef9e50bc2d8e9d09a511a2448e3b4c55fb2bc266e418b6fe486a7c29cde5dd43aac5c563a343a9842881886f902a162d620c739072d1ca1bd5e86ea4745c0b788b09ed156c0c4e095d83aa749188beec438a3ac9989843b0a42168f8cd0465c1e8d9d32080fc48f4e2c9ae58c168cfdbeb1f6d73742f9b175754ed2729d6ed0546025233ce3b7e3f41ea3291bdd5fc545a6e3ff1b09f643c8e797d8c57be66d438f1f5ccd50304b4f693fcd5dcd7223b0f8a86a4f3a37c065fa951b432800fd6d73cf2d3a9962211b1387bb2d6ca85c9a72ca6832a5b1a3f7332da2f0aa3dfba416403bdf39cc5f5e193c7ef9dfaeecb57eddfbae00c41b41f8131c4fff0af4d688ee7b215258646f75176771ce013006b5338e64a202604fa1fcf32082f31552b0f3d9714f8a3f34f97bc0d0d707d2ec6e62f597f7ccc554bd57137d3e81503b3d5f8a97a0c85667f88a06636831292c67a3defe29bccdf2eedbb4b8a6e46ca5e501f9c143c30dc93ba117f49992890e4e3607f936a6dc7a3708673f3c2abdcecc3f6bc4da5085bf4a3a02170823e39354ff9dc87dc4f8735d256370262de829571ee42a68141ae0dfa3099e8a76a32792313ba122815c76d70d23d81c70afd5f497da389dfc643c1d6219cbeb7717c5efffa5628ed3dd8387eab6cc6d1d87cd4a12ad3583eb3701842efa536d4cafe4dfbd02b84f390685e1906926a07b16a4eef87efe458984f1ef1602b408e28cc22e8858076404c01452edcf8b5f1cb72c9f1a48a2cc25d4753d208f1e0aaf6347e216d7011a8ca7118909af53832b8b6841479929e988786679a7be0c093cf7a6efe3d03b19eb1a228fa00f3a3f1f6cb5c1136a870cf9ea296ffdd3c54f506b45cbe6303a6bf0073fcd0ae3f22e2f66bacbd0d6b9f42d5f6db4db55cd1aafe7cc3547dd8f8e4cf9a3986af7c289f10e52eb84a955b848b2b6a5b559c8414dd28758389c3688c37433609c97ed349303a3542c8b734183e381cec5027fd0838a2d8912077052134096a67c45486ec8bd9552a50bc1f944e4d86a81b5f03e65664673b2cac1f8f0ec5c3a1d6330b759e13e1d49c412ca92572e84b69ae7122a0a0da4b75d7e59a97fa06f5dd8a13869776495cb339e8446085f4b1380e5fafcfdd6113814e3c6c1b0dc14d6409f673562a9bcd93fe5a584ab7e72526f992f1fa152742e4e783e77be21551806d0abb0e68ac140facb0fc24fa959e05baccd59a69aebe99ff944b5e9d0d75182c899ef741db249abc0052e9d2b18c21836218124080136f0a043a9a9f4f0201d2f005e382f2298a3cd93190960084153e2d513d760cbda1148802cb8e042c64eb50a176fc13e15b86326247d50ceee4939895b272a0f9861994826357c64e3bb6bc482bdd711113fd08b5a716d9d1f386d0462054a4b269462db0633bb34d083279b42b6112c25615cb40a8127a268a95076684d81d84801bf86562e7b2651f75171a5811c48ef7e2458d6121ea4853aa21a3800822c7c9c8c2825d6187eb2b19d48248116900185e3c7e03221364d2f975f0380955b4fe212d4507df868481476b3c04dd94bb8747e8599c1453cc4bc3ab1f80b2d04111f2bbce2f5b82d954f76797344fe586a628b9b8c2c09030f10cb0a45fe1b789c555b06cbf0a2d4c9eba4a9c837563ab91db0b173e8d8e161bcd06468446b16e85cde514347a36ee06f96584ba2a0abbda0cbdb40ea70620cac374d3b221473d9e7dd922a69131d26388d50b480c40a2c1c4c3022ffb64f58c490c2e59699a9d018e1be0add1ec7b376ae17fb7c6bfd75df64f11811f7247fe058d7326d9df3766944813f4f98190ea85bcd36ba77d5635ca9efa89d63d1a84f69f54fd00903bda372bb5c83f15d39eb99f3f20cbf9b7e95ffdf8a47d2b4b4b92dcf7ec73cc1b97d09eefa28854b245475a48225f6da3bd571b123776e124ed3d18551cedcfcb3b21ca09a7b7d4a48a953ff6014793b89b3c49d8bc5b5e20b060ecd65bea870fcff011dff3c00585734cd1b0bbd6182994f6eda9ad02462fe26e120ebf9b23f9d1d74fce6bbac6585ef1917d75c85278e23e9b5b44b600a041b1dafe771001a93157dbc934dd2b974295ce20a4a536e7df1cf1d81e8e63089ae4f3b2ed43271e768b0d511e8604023471c4b1c5ec15125d082620bfd4616b56dbff4f45a1bbfd6fda71def9d4108ca915a8392c911692ea4a575dcaa3bda15d6503306c1882b0ba5ba5c2705cb9c62c19f73a02a88489ac915d7b191a303d341c8a0d1558f58c9218d63633e0ba6a08dabf61aa3087da146d05a040b506727980522a34c8eca43073a8e8ae0519a848f2a9a08cc96d79eb16b3db727c803bd44729f8cda8d846b5a28785c51f961673005ccce318d93e0384adc8b9da4edfc2e8ac7542028dd6a70b75df5dbc1bf061902ca50319438332a302983fcc710ebd4202b70eac8e42c9a8ae52135e43270c0e621ed5028b1c81865c81835c817f92d355aa0941c67a7bd97b986d9040d34530b99e8ad74094f0f6f5b3117983873109e144328ec84f4264cc37d952142e1ee69a9935fccb28be8a8ff03054e43c1af1513f0c659a071a3efa87411323fc4340a093cab2041fd4c30c962c913478452aab61c78a87a17b095aaae422296a24d8a4423e8cbe9be3362e2593b02232c2ffc3c8c8dc640b1349f612920616b6310f109a113b812b1ec65d12552d06e0a978e9a432e878e19fff131fbfabdacce0c8c3d8910f3b93683a2298f26ac3a1b8fc234d370b68741b3188924194a13944aa46a623c744cc35a07da4e6c27aad09bb732e451d9b834ad35d9cb939028e986b3844dd24771744cce5c4820ed110cc4c9280bf3d7526b2d3fec1e2211b3b3f31d9db04bfbf62c444b9fe8a6fe0ee823a1f49d033df16a0e3460f9d8f5a0365f31cfae34ff05fc03279893400a4e7ac2694cb96c8bc8dcb7ea50bfc20049d438f9a1fefdcbed9f11c62a7494eb5afe9723f7c3e28edef5432167ee90d93e4850594d9b9c446957ad4f9ecad0b0dac6fb4a993d28a5a4ebba09116002aa8e9208773508e70b93b36c29d440e2a8ee744cbc60db84eb170bb2cc4b16d19f787456e0c50b9cae380d2a35fc2e5cb7d77bc9b21fa015bfd8c939e98db7446f3dd6992dcb7efd52d63fefe91be8eb33c430e6022b54dee677f9e98de258be9273f41a06dddac6f76a3d666c978caf4e2098c39d90205848502d73e1059ac1ccd628f5900cc4c004591a79150810deebb8848916a7dc93408d0de70515d1d08ca9406a249d3ae4bc6a646a725f58e62b3198cb6d0a9c3089b1382e324a74a5d17a78e15064eda406481fd51c492a15c8895929888152d09b5578b96ccd046910d50284a35520c29bc64da489b78c8f9a18d192b08d37a9e8714dd0e364b76151ff8b4f07c99a8a161c2925da0b723962c9e4457f9291457ca849783024eeb4857f12891a24b762f01762b3cbda290fa3f05a1d2bfdee1a80a1a9c9e6ac0f4b46969e38f15699c8c402391559849b5409301026d2335553d9c9ab877a3c3ab70ad1f68b748683684e026a3a3238c9c32754de68adea529b67ca78d85201df428ba7fb52fc32562ee64f4be57362ee326a36eb9d86461167a999b6076ab04cead25b90b60c23f3a93587e51c764f4434acaa55c461a40ea33bdc56e0eb00c27a106605ba73dc8b783d8042ec51f1e970657a3311b3acfd1cc3bda26d62ccdbd60b3c9dbdea51759a1bd3134e39b537a2ae6aad0bb834cd558bd26c3b921a57b73c948b006f64c85d7d6837487e708faf1d4a5fbd65d17acafdda9d3bb552df15ea4d1160005a8eb20876d94a207e1e2abb5697c08a17a999b61f6e568db55785f8571c518de7471b8290bf197b6c4628314571ef6a08effc055d5c1c0b698bdf55689d7e62230c1264614ff6ef19dad050e28f6bb142a51174cf58437ac138fc0aeb28f93e2775928d6b9270ed0ddb7c4aea4d84eedc28158377779ad4d98ab63b1399981fd66850c94de9d20a506ebe12ee784ef655a23d2e4f2413d928178a48dd6e73227ce3a7e428ea343872a5a998ccb147caea18d2e73def1704e75beed289c1096c340c32b8606f3184cf63c8f0aa090a044ff17369fea927a99cc6c64e050611be5f755318cebc5d55436cf8fa75d264d150da2259ccd74bee5329dddccc5b051bd4c7a36e7b37419148aa65590fc04f03f5dd0443f58d0747fc92143a25ee6b597bda4c42832c54f92766bdb651ab551614313a6d28e2343c42fd3f973279e72e6e8991ba56044177cc0d1146e28976137fa11a69f7b99630b0b123925a0003e7445c48776158e0b3eb9ccfbed38fa4d2fc4b65a87bdb944744309496bb165265d1204b98ced78c8714c842d7754caeacc0401da426a14bd88226dbfe00f554d557ed2cca8906ea8c099495bc71a7564ba82cc74979893431b908d4356509b539fa9208eec58fee2b6148f8ccd5be47d6a4666aec30dda524336c0ef5f2bb2e3e2fa88039c146504219b8f88c90067a2bd530e0290a7b81b30590f32e1f1a893913694e54e6931b4032cd3cba80dde5a680332cb43468167c831ec8666a2f769800b45c9f3373a8ea7a242913f4035401f5ec8a277466e04c80a1d9f5e9357c798bc39664b2b08d39c220417323b4cb346d565d89a935185097e39494c1886a3369b64939e374e182e51b2baf265a35a63b69376c96d1df64de91bd82c5d48b0ffdfc4d8530efc6db135ba2a69d130f6e1793dcd6d2e80486e56340e23acb696f029415f739f91d03907317bd5cb254685279bee8fd0979504b96009f29440cc47d9226553ba2d0189076236790b965d0c215e06f4c830b799253a98a11bae0eb00bd52635c59163c81c2f81ee6d99a220865aa967b400d8b3563d55f82386e753ba51e4f848ea0132a44f6274f8b25738ad762b1b7c1c0dd00d65d99f0f88467d23041f63444a862fad4b7fd30916a0a757d6c372152bdae487ba9aafa3a368116affae5e2344151ed0f4e0655f3dd1fbbbd60744f0e8688f9dfe0fd52dc233d39e62517a9e190180d7fc9d618ee6fd28bdc952d378ec4da37f898aaf5c284035f8c2985d87d84d52e20deed3ee3060ebdf24dcda5d6b3867c8f4300692b5a3229f4670f8a24b245e8458bdcc69da8504410ccfd5b9d74f21d2a387fc5087dc08da501b2f4c54bac7f91448b4ab789d79bac579606edc3c2a9b4d6397983e719beee9340274c12d457034ea2cf0366921c204ca107765320b0c5103e6531cfccc5d7e200d9bcedcafd29549929b9f4a4222ccbb28d89abf8ee19be4ac54a849b171e55dd21cc3bd98f451c45ea10c9f55539116a3a884e950958f626feb40e281b9af55c082fa2d2c6d018cd22e448d9f493a55174f5a3b1d15324414545f32081ed68d3fba60fc64c83f60c56e369da2e2667c02796d660847d412a5e8ec925d998d7f8d2fa4e6f2a3e492a094cdcd962332291981755fcd144546b82395b34a98eef6ca9c041f3540748eae4bd6dec25fbb53c0e9c0110d3a0fe82e73489f0589ca9e1259e59e15ae261555b60cebb70dd62f29ffce75adad405b0204a0417f475fa3f88595b8a41bd230daed245e14da0788678f91083737b478895136eb685d885829e99a1ef145b9c80c6de13092ec566dca23ed4880954d2032eeab2a83288b808b0b8238d4892a9a4a4d1e623e18178be4bae23eb0e203388a9d9a807d56505508b5f64137a2c7da6534e824eca627124f43cd608a0aae6fce7a51d3e2c62b1a6fcef0cbbb612db31910398214605d531fcbd536373a0ef877b24db39b7614edd836d8b8625a201b0dd0a7cf24f0c656dd9f29449f0a3444dd9b79d240fbad56e9a247a6fee27f67b7195e2ceed6a39f70e518d1441bfed45aa4d830350139e321aac1d6fc8a47c38145437b0d301175bc1662aef039280aaba268804ebe64ec7570057f22625c323ce9f748900a9aa095040e70a1aa015273c6df6cfa8b92edc0485653bee0e968d292d1c762563a8586e4ada6a3c3f57c1a11688e9e9f17c77efa573979536a96e19f893b754b4a9df3f33f16e8af55ca1bbf58842633bad1ac52d97b4763eb9137f0a82969859a73fb8c6e56215c0378931f774cc28ba5bc0e71d7940eb42ee9aacc6238b46079e68ad01c4cf55f7807b440a05c385dac1f8183d039e6b40f5c383de1ccc49c4d606aa06e27d13dc4d1dac25d5613cb736b9ce58ef1f4b8452d0f08efb63d0683f1302d3c34ee8f17cc90c4bdc735d9958ee141cfe31166221ca08250e18c6554986074db594784cac555090ba347b170ac6da82061f408ae53a32a0bd6974e9707beeac94bb4f3b7bdbbb6485002cc77434ebb86666f20b62bcc7a12675ddf4e0f24ae2b05215a022c85896601b5ca47b4683298fc6b7799c40c36d827f95579716c8804f434026cb81897b239c5a4bf838e1621d2808413dfaee2e2e79f9a1a147240c2895defe2fadf4b498992d8624cf47416523e5e7a6240040209257ebb8b085f3e1a2102227c2cb1cba190f2f52848016904239178b1f1ec08fb9711dc2f044446bc071da483a3be4a5ad17515b17ea0a1e66ec94b6280845f0b9ee18801a2ff00bad70f4558cf1961afc60d1bf85de508dcc54db14d586cc940bcdae525a713d04e0bc2f536388b63b0855c5e07f52d4176550bda0df9a5fab8be5c88e6de3820e91a64383515d5016cec387ff53743950d2ea7c09fe93e3e4ad6a0158f7d1f7321336822b4d5b054fd96d02ff2371ddd3721f2949fd5e8cf21e8b2a61df9afaeabee279a311de568d93600dd0cc25946f7b30ddcbd73a228a0fbc1eeb87b33813b5572aa773416ddb100f35fae493c905f69792750a56fd999bfa4f5328b21fd274c9fd6fc004aba5303db7238474bd2a79ba81fcfb259917c1074d04f224cdca29370175f1b04fe58ccbbfa68daaa4a084538c76c309370200561b24a513328cc5e27b34ae560f0a6b5f71723d67515acb6058279952ca814fba4106f7770dbc4501109a740e4e646c7743cfcb7da35dc8377ebd26a2b550d80eb3d78d28c8e12681829eeafb4a9dbd9f7b648fad8a6cd27b16b8c1c1e4fef53215ba2b67aba46971c769caf7b668ebd831b1fbc3a0ded81f562cb1a74932d1bf080966881e024d4d553f732bc454d0a69e14a12f0074439d6a88f78f3079a1f782ba0e1eca07d19026a8027d6cb93eb364dd66bf3c2e5b0505d3faa3b8a4ace496e1c2b831653741e34008d2457ca3f9f973629ef5dd45335898b97330ebe77ee9ba89637af6978b802f6b1182f43c6456b38ea699429f40a68cd6878fbb7fe2f58f6d10f2cac735e2a909dac7a47c7001956050944784b5c5296f7122203fd66aff50748f7c5f3327368d375d3b13f90e348cca3f242b9e751aa8c552f2bb3209d880367ed4bc00a23b829dbaf2576c34b3c75b1ad04464e35d841a076fd8b149aa1cc17cdb0bec85540f6a67c889a4fae77778969872940e9784023210f069a7c6aaf632a8e6a39ebe809e0466ad3b7bd6980dca4f155b32bde8f53d76dd79417585abf5b85c5d0a94fec5d0486388b9ece76645341c7bc913785eb4e0dab7302b52259677801a4bf2a88af4dbdc06aab9a9b0b73dbd18f725bc19489a557c2129a5c81cf3323f9952c950d6353e37e062d489822428c883891914be90988e1deb55b574e90595d043d015cac5ab36ac5caa0fde92660256ab4a850a24cc91c6802a02855a6548992199e511210d3b55b572e5d8671330162b872e3ca85cb3073282c5db6544995674f717e941bc98936de648a524e71aed8238ebe58559b22428f2f70a8a291abb69298e3a451b16d2fb43cc5b61a04219b24cba263d048d92cd52d8355b48adab7716b6055ec3639b553700bcd6d45b114535d710303d680d6964799c0b932ebabdbfc976fd1205364b209fbb91cfb79c5090dc9ea228c1745d5c89643599557dc4d6c020c83454aff8884f9a1a4ecb3c72b8ea2deea660c3f16ee558588de11c9ffcc0a55806724afb8db75459a99f6cce0bf2b0129afb83864bff57c877b7d5f112e8abe0c5622c15934fb0f713358302e530496c4d8c22391c6bd071cfa7e86959c9d74655786dbb18aade94d552143666c1e06a8e385381cb0c2747354c9194c02f192548aa8a19f6025e47246e0e33a509d0dcea44f48c7744750ebd2d2a2c3d71ea294863ba96e3907bfb171905e93e734804ba029babe8751d11c382400c95b0eb41c2b6eaaec99b90a94450320ee91bc0d608de000719c32753bab6aad1a441cb8ab0862d408aa0f6e0248f63b76de5ef66e2cb6583fa2ddaae408d0b18cb577eb5a96ef35b2b21374a745b6e23be707c2f21d21c44013a425cf8249bafd598f33d1f636b65f2a969bcb6df0a789d8750c737a4eee477d73050fb92a8aed182d1d88b765cf726eaa928b854fd2669a4155dfd461bffa5b11d761edae4e23bab481865c8a2aefa255112f7f9b7df40c4aa3de958f7ed1b21e9d1bd7ef91c9f71e3c204fc0fecfea380f016d6dc93adce2a57deb9bb9de91ca8f9cdffbb14bef0b006fcbb959b45e8ac2ade947a0526f53be397bb24760f26f9404d4c27f74c001a79093bde76d79e60bf1f5731929a571a11ab50c30505c0be0c01c23f2e51d60df4880d05b73266c71f3cb88757d43065c29b859c1acf7c0f5e0b022eb9c06b6b64ccc3a219245b021e5b784a4805760d249c45ada2dfe10e71af3cfd7ddd1b06b2c7db152e9b88b48861ee60a5c746612028832249d44d80205e8e701bdfe8257f527f457155835acaea8d9ca548acd31b80fe66fa7baac9b074c8f076a2327979dc9a24fec3b664469fd0c63ea7301329f3b2a0a1b402f6c219ab42e0609a104af5f98ca32f4472d0ff5feddc512830194d4c6e1db34b6401c3dd9e18c37350c5df6cd1b016db871b81995ee50e6c170998a60b8463c8236f5f5d941e0b206b243b1a0481becba2bd95389bcc6e5d88e6f57de76732cd4d732acd7da7996ccf180bc9f9797af8eb5fa401ad0c2e6e01fcbcf6faac18ec46f03a742e1c979d8723895f399509e50a7162391b9dd0a25e2cea3e86fb77a89943ea845941575728bc8c47535fcf71cdb643e6a1ca85df1aa8b364f23e3ca3064a2d171a656262a7f7f5fb9fe8b304b18e3c0406476bfc8e4b61e8942b5adc455fcb268b141262ab0419e36af00f79278a3482432d5959fd87dd82b5a3c7535cab75e8057f940c4e19a553fd3ce4f451f096ada7d337f1985131df8aea12cdcc9645563ecdee3b82a21f3904e060d54dbe15c7a2498f84a04f2b8f76f49997e74341e68732c7e3b611a8cdbfedb771ae587f90994c3ee2da89c075178382a5970895294b1049ad077fd5bf44e41b421250bece2ef0b29ea6044dc8c3e1968403aa814d506831201098156fb6baedc703e3240e36613d015f01a922528ae2ba6d8d331e9b1d6f6915bf85b40f66f25bbf6af236b6302146d8ef6b929826148ae8d8b6cab23012afc85413e608945e39dab35f9fa4c1904b72d3e14a08b9afbd72d80d6a529000bab5ac15912d9eafc4bd8ac416dc6f6619909f2990bd91691a9c4ec25d92a317a455615066f4c930d3219988c03d23cb270c513a374e8d6ff9f15e397c797fe52c5ae0c52d75f806eca3b6d016997b26867cc9515e012b06203818d66002f136cac2363cbd0a21b2d6fd84db389f2cbc95e659ae104bf9b8c5810a2ba096171ac1d9a0238767014e65d62dce35078f12948d4eeb9c1862a212abbe7a711222dec75316e5bf1efafb12f4d67498cb5e579759b2b2052618698d3c8f8f5f4852bd3340d2d74f7c007129ddd3376e32e1da0fb12504dc6f0c5dc22587dcdd8a5cc65aa0b8c763681f6b5059403335840b0ee55988556a9f7cfab6eff03d8de83027d29bb469e791f008daf6a11328888123384d3f508787d60b41fe51b66aa66387254fbcaeed9592401c95bac0a1fcc37bd36e15b85d1c6f349bf15811fa48273a311b2186e581cccbe3e3266de22e8f0a2dd70af7af72d9e2a2c82c88a6a25342a4523a6afe7180c12867aed614651739caac6274b18a792c3da7d670c610cf32663bcd4c9ef734307c4f3471e09c78d5767aa840f1a445de46d012b0b37fdbdd9decc6c0a456fb63d25b6100f636a59565418fc3c60ebf8a4c41acf70768b7410ca4a01997da4b850dccba6e6fb688cd1f3af0371dba3c3f5cf222c43a7148b5e98c780d4b83eee0812a9cae3f487bffbd1595a0970dcb65de371a66cbab1d8e8a99806c81b1af0fe63e73def44ce4d54f9af0279136a7bc851b9949d2a074ae46efbf09cb7c3d21892f73937cd454bbecb5e951c5b69e152c8f28e0a79121a58fe2abbbed048a4a296407561b189516ffaf1c4f9fc232a6c4ab34aa55017a443888973a44ab693fbd5acd93cf5a2613e5ac00e9524debc365ffa778a661f1529b1fc4e47a1786968f5aec975db8350159daf701b89d5c88dcacc460938a220dd924195b472cc17bf58a8abd79cbece8ba7bf566e414f44211ba2ba4d8e29410b30402531cac6d7437b7895467eb45b2b93b6a609830380bf05ee32e6d1d2d4765dd876e1d1c3bcf4446cba1f7d2625c414b85a636382695488848c13349069bc157cd6401c32203f8b32edf656989affc7c72d1c7370c33f43b93a9083830ad506fd9f623a4aa1405670d760ada0104a0f656038057916cde7e8ef8b4d4a67f4df9b2a3b5bba605a85743ba30b67cacc11b6850b557123b5a5f426f6a2d1ab26549defe133e6cbb4e92940b3bc12bdfe8854cc8d653d3895fbca1ceec317f3f939969f8d109648fb94349e156f75a37b4b5c10535032ea83ea2cb1129b8324137432d6173c4e95867c246fc6df128217d3624794bff72990c24b50c93339ee4f4f5c6a1f272675ffd0b56117bd73a555d62ecdfecafb415116f875870ccd40de4501610d59baf5abd97f5341735ba548c9ba56e1d75fe12a7f4f4de625f446f4cf79dce1b3e15212529761e60cd3135c9f5fbdb2532733f5ad8d12d5c740a8b916be21a2d376674f50e72929c37b003ef068d257feb6224f71d35ac4c1d50ba5df6ea44ebe3efe84d7f2320f5b28dde35ba3625eb08ff00df89907e44ef3fd3234a7b042d36c65e87a7a2165ef7f73ba127db001cba63737914dcfa2f591e2d584ec623333e07b0e62573e0f6dcbcde9045874e86f18cdfde76f2b4d3d2ac78749b48873b233c97d2e9e18128af2ef938c190104c08eb09c85f828d45519485c29027ed232b822ac6d6c6c8c01bb5ab8b5bcdc70c7b941ac6377dc7420580967c4a18b330f14db814fad94291b677f9b0ab240b9b8bd869ecd67b62c3d4ad302b5500fd763f23bc1aa03ac61303d34d0da1588b190d48ceb871edb93a37bbcee5da8591c36417ba8d92072d4ffd8b6a9f4ce3ba5ed62c4436c0f9f19532b4c111bececb940803b87d0323407b5083ce5b40ce5a2e210028bc0e9f07a9060388af87174f2d23e59b7aba3ea57a0fed2fca712e44f358d5473c462f18745d7f310200d3bef2cb892c8fa4aaba65626e9ccfb0277131cc0ff32c2aacbd2e2a5bd856780bb59e511d30c815eb54a0ebd206aadfb976a1e691ef90497f075f1a8d4d051ae86397200d1da9bab1acab51ae266fed4a3ab0bcf221bd049b96d8f1f4f7c125806763800443c4d95e80030d00a633fe2c7a6dc147c4a129a9ae113ecdcb17a5b2e5f8d4b3b63ab5250e2e9c161aab09dd38856f7e847f081aa3e60bc0117b109b6da9a02fe3b2644f108e728985e0f1db31fbd26e3dff7a9e6aa8b60fc237e7455f63782e8b6f691ce50dd2ebf796e5c5e0acb710c4ba208376a42b3a81f9a6cc84fce2fb8c72e0173d3fd40b80df10e79d0f1b9831bb570b3512c34c817dfe91d151dce0659ed03d956c5e96bcab96f468706f44791ed3bb0bfe583af935f528b60fe1f53a4c6bc37e02a204d33d6437ac3e94e3119fc22ba43d5f6b846b369d12d4082afcf4d0a38d31197f2da1b2dc421b639229e2e3b6c08c2c424c727708749e561556249d5b9f8d130e50e0adb2fa492438693aae7ea41e18d88f3c701366a2ca93a173f0aeff354fcccc246b5786f411f3486a09c1d94863c9abb370abedca4ebd11c62ac7e4bd93e3afd46928e1722da836464b9483200880e09d316c4bc59f6e43b53db37834de4e9b65caef8e1a860e6f82df57d6a1a49d0e822e0e214920a368d25d3e4b9d661af8ac7f642f49107c904c5ef6a846815f70ed1fb9dddb50c19f65b5ceecf24c6ed815e96f9e2d17a188dd389943816f2384d76917a317987357d2a6a377b906ca69bf2bd7ecdce769fe6d37b3e17fff2913a712f007664bd9cab2b1084bb6996a2833acb94e45fabbd735fa5b75a3683bba093f0d774775879880de0250b5e9ca7e9d7f84a8ea0ea7e504e7a52dc4ddc8f9c91f702b5842ce9c355cb83dbea91a684be99ac588d794a7e73afcc52cc4a5a777af824e67bc560cc8d29f040ff93ba2d7e7e18feff315aa031e88571cc835069b5ef0a74de0a923bb48a6f84bcbaa82bc4c7a9014100354e3d2645557d341f1c8b88706dd68a465f9d498d5919ad0e1a7526c9fc30278fa9bceddc83c24a7420af1a5c498505c426c58a77b1e41fb833ef7e48fe018174f4336c87f417677d01e5b7e76b904d91e12692308be8b9ee9b2ce178ce7112e8fc3e90664196c78a18ce15cdcc8954da4b0e4c7f43a8ce691f8bee70e498254ea63992752e5ea392c6735b454ac4f03bd63ab9904e7cb5fbe8861137e881f962013cd2025a026e645c5096514d1b18ba1a5e19982581529938b91660c5c1ba3e806bb4671ebc11f8a78f67d21d783dccdf45aa7773d3d8aca6cd71a7ef500000000020909e9c3ac80bd3c63f9620516feeb2319522a302a6666666372192924864f7e6ca1d910611060a06d95a6ca5aa84f22177166710c247b564d156ca1f903b0c81429f1c0a8542213aa50ba212a07a40f580ea81f5a084fb4a4ebaff7b366f865cb96b9b12144a2517a728b870219be08188afa0851d86a882103f90c1dcc28f4c058bc607ac22b0925002678a8d138525e0e40881e3ec80079c1a179c1b161d899383c3c4eef2d320aee7b8768053436f74b8777ba811e427fd861133364878cc8da813b14b3927a575525aabb557b5f6ba30ec5e18762fc6d9c538cb346dc3403495b671b92503d930e6883ba24d64459c389323caf06c083fbaa878224c1422aa785a48f460d920a1f3c306891ad8026fc040191cd005b6c0d5c379409e4e10d6863730467729238cee524e3929add5da6aaf0bc32e7631ce324dcbb46dcbf9030a8944a3118914c2752b422e42226eb480df7085d546718b2f64d422f4e7538b1a8623dc17e1c73e98df0b3776b7a22badf83c05c01df37e3a707ef897d5122b883146f7d07e3a96c84129a5b5e2b4b011b4269690a2144db0144d9009126cdb963313291091728c463a48202820578a261289440a0961e2861ceda7a309950b190a44b621462e1bac10e901003e380170410a019476299a60299a20c77a810b25112d9bc13d696189d5095c802bd8a1649341432c91e304a42c2c410423b4889a082d21850b68092bf8f009414b268108b614f0a0e50022d38102cc041426b84c508104980a05170a4660872041b5010fb4072a983825904d4891026fa2e78505c40834eb052c993df7d3c19a81080d228e56c651f180c3038f1d1d88a38a2fa042f691a39079f458e1b1c223070b3c7ee0d1038f1cdb7e3a78dc9052cec963070f2478f4b8c27d31895c75949882125bd8568804e080eb781c70e1c25bde5242a9e4ee51092c58b8c3d38f285731ba5c29c108d989acc48c122e56091e9488914ac0142127d10a41125ab869a207781364954b49e0ec2eff0aacb5d5da04dc400953b801c40e2d48c1c4ead8d696b2a8cbef396022df26b610e4f2f420f320dfdc5041083927d7969e5c6f342147917be49b151e6e469083181f4d26172e361bdcda9ce58a1531e07b415260450718acf819c32cc68bd127142e8cf14fe647d72334c8877f221fcee0fffeddb83462cc8f1f238684d19fd43a95fd8f454782a17e6fcdf67bda91f1d6124f3252ee6d2edb0ac462d51d93b371f8e6ac55eb5476b589a6ed37715b2db1ade00bc7f19b68420571b3a3de541c4882993beeede4eafed89452c0d697630334a9e294846c9ffe1db98f227fd8f42bfd483148b11829e6ee1493524a8acd39e7a418a594524ab10ae32f3a395426c6b4766a66e60aaa28adf265538afdc59c084cd3af23345c5fffe4aaac4dbfd2187235df9633e46a47786d701f8b6ec569878c01b9daf0499c312a9f6a4a293ded902f20571b85fef5f403ad98ade4ca5f8848212218e884ec980b8956fe22448b482b6a72b911fffb2a261837e23f7a151e15347959482bc4495f1243b8d08f904e346d2c2c3e3fe5d721b491b293908f6732c527fd8d986637847cbc53fccd897772c7359332d0875e92fece900ffde871120ad1db8f688a4f227d88a437872623ed6116d21ab141fee871903fd2358af0af81e130faab6bdc1fb53656284744744a228f3ec4f21723d8f2d3e7b71b7fc1f217f7631ed19ddd59a4bbb5455dd095d20f69d127b53a0bb3e348d317715d48a783dd0de57ca0b5e77fbadbdd566867c7d7425a3b96ead7fa58b374ba19556a67d547bd64fffae4caa408ff92b84275d98875d3c15de2c58f1115448ededa11ea5589eefbe45f87effb7484bff27270b34e3b327ccf62d84d033bcb3d67a7255536d06fde4a118e7f722b2c6f52c4fd22644ec95b3611e3b0e24ecea5a1899435e6089d25a14badeb807b7de2ca1312b2ff090999e52fa294ab6dba41966f2a22fb7c4975d415c64fd264831cdf25b6537361b470c99b4a3533032326663b3d01e3f4c4e909b86b0b2eace23af7d1850b9389058b137883f59cad3d891dbc32731d57a8c4133f791ac2f7c2933bbefdfa38d09f563f3fe940e7c8c9db518fc047791f1fbe8fff30cd4ee8c9899cc577eee4ed281fc55bb8e478223f3e96d1203958c5beae6b76626d7cf78faea30da9e2b102b9b08a9d1d1d9d13286176126dcc4e3c7b7622e1ae27736486b7df9fbcfdf4c87c94f74f65cfec84d2f9f4d2558fd8e01f1f07fb2b3ab8d6c1ca9f9a086739ebe4ed89425bb864aa758c26ee37b88994529ac439e7bc619a504a29a526b5d65a6b35999cbff84b4e4e8c89313b3b333350055536344e37b9cbd90d984644d473ea133a42c356d92f8b41f5bbe19954b16150c0b50a7489774a02f762ec629c659ab665dab6e5fcf9802028241abd9010fc4a2e8888f623994821ef4baf0717c22cba6752ca39e7a494525a6badd55dfc85951361628cce0e949951c14009216dde0bef47dce78ebfa2c78e3f030ef185d7e87862c78effa2c8ee3e861d25cc135728e2e950c2cbeede8e1d1d3e69a1b04cb02bd40a4c3a90303283a1fdbd527722bac33ebb285ac630adbdd432b8e1bc8f01f9e97862e5d108b2e56311c0c77e6cec4370b67cfc4e205131cc2400b7fc1c33b0537ca3e0979aee4835845ebe7c397aa93bd1eb8c92c9ac3d76827d76b5fc0cfbf711d83e63dc04303de5631ce841affde7a347f2cbc746f2dfd7fec38d641d03fbfbf7b1fffcc5eed319e0deb407e9163e644dcbd81ed328db678d12c249aed3369de9907f2f3da3214493748aefd06b8fe9ee69a9537ce3d73e6635e00fe90e6edcd9d834dcc7fe62dce560460386b10aec5c4397fdfd2ec537d61d08b67c6d5f2da309fb4c77daa7784adc52eaebca29b2943972ec4c0676bde6198cebaf488cec6116e3a33b15dde52f7117ed3f1c06e59cb37d35caf5180d97ee66c01aae7dbf24ca878f397163632f35ada471d96b1ab701b83f1f331ae2be1a6612808f3df681d6063d487399f6f93f5c7e8dcb72b7e98a619f83cad6fe721dbc2fe55fee94842c65f6252e332e8b7175676363ff1e3f06f775e5a0b339f0de4ea98970df00dcf0471bbe84116d3e5cbef7fca5436b2bca2577a5ae96627d0a601187e0d7de72526a77b5190c59259d72cacb6245c9a7c4d9ca3aa5fb94ee3ea7bc2c56ab80020205040a08d248abc156a733794d49cb768746328c3e8a34f0211fbf04fa4c06c4915ec4d11d427aed3fa40fe92fe943d273c42309191ddf91919be4391988e5a09090b8b3f75e18f14822847b9b9403d2448434976911f736b6b3bf981fbfe4218e15afed2cd167a38fef38914403a08fef3c9e0236903d8927437e0af87cb4931bfd87a31b44fa8c9491268824ba2ff7889b9f894a1fce45dc7b2f8048fa4513887bfb43e2de7b21bf3d0a65224d4488562dfb4c6fcc697e939d856535e3e88beb700ea4e6e68c82dc59d79999d32ece606c9f8db3166b997ed1e4ffbbf35abd55037d8a826c76bb289ee077a25db5e5b014f96dd752d38d9d56ecdcdc2eb773be59602c569426765addaf9bcdf02cd5f8ba58b810a1146733c059ebae548cded61c095b10c80ff8ce754cbef31d679962122d9e297ee73830feb2bf739892ef3cc6651af09dcf30e03baf59c0776e1375e24e6cb9eac577be229951e6002faa5e882e2d220c55411b02c09cd3d31189613fd37e4f663ff58380ce0fd026da00af85ddbab3b94477b9e400dd95be01ba7b130374678a6f6d5680ee7229063d5d6ca24b8c4b8c4b4c4e4ecebc71e1c264fa2f95727eb12693af6a4c7c172e4ca6ff5229e71d6b732e95fe4da6ac31ecef878326d2c55fac1431fa10e9e3cb9648a2011ab08a5dfafcf1650f211f5ff2f0640869819ec48d1ec4d19d5bf890479fbf54b2a3d24873b3c63c10273789fb70ef19a0f39d90ef11974bfa4553887b3bee12f763bf0fe19a0043e73e762689fec3edd0b0a1da234d84e8d6aae5e7b206716f5f2857fe226a2cfbfc9a46b39d370903236162d8112606198384c980bf90d6e65c2a3d6b67bab8c4b8c4b8c4b8c4b8c4c4696d9e363067dac09c690373e2c7177f415574c64ff1adcdb9547aaa8a2f3697e20cdda9317e8aefc285c9f45f2ae54c7756d6c6d4d418afa9315e53636a4ccd09f27bed2f8cf5974eb276849255736274a13126fab4993b4faa249c99330e558feeec48e94edc8f439d20d798ad715d8dd9f1b32eef9769ddc1af18bc9c3f7600f7595dd8802ad10654b936a08ad7138fcd2d9061704e2975801baeebf14d2489413ff9f40919aef892587231bf1ad3b266cad576ced6601b9b48d29976609b6757b84e097c146697f80b593375767c5ce3b4922fe02d8da329de104de4cb1a7f8161fc143fc6cae8ae846b446aa4c629c89da9b3353be28f38c76239c8c9d2e1d3a79fe1cefff9e8fc9b0592e1ce4fdfb39739b8b9ed452eed0d6630b69c2d5ba6e5a85c9d64bba53ed4564583acfdfc6c3ec6fecdbfe6432de330877156b5a5aae2b81b8431880ba18c36be771d0abc97513ee4ce735aa6a456626fa17cc85dac163ce4aeb25aac726759dbab8b74123aadac48625bbce48ba39ceb6ceb3cda5bd1e46f1f7b1b497cfbdb8b056be8127f7572f3d65c8e6b40aa285548c8a975e239b54e3d281589746a9d7a32cd7f6a9d7a50aa48924fad53cf088aa07e0c5a9c536b046688d0cda927941362857450aa104ea847e847e8e6d4f3e2c347eeec2ac4c117719f1f71a0d0cdc68313fa187f017a89e198d04d24e1465cfc245f947db7f184cc84c47021321b272674a32377f2257493bb91972d71841811bac191c3082476b4eccebebc9c7a7c47b5721981c9260672efc34c50f5c0c18e517e68f88e30301918071f621884d8c312bfb84fa7826191b35f39fa1b47b7bd7d4a956249ad22c9765fe6b762a86bb53c1146d5295534d5877ac5ce962f85eac78f7d2146b920a3c09f7b8f549144d4923f5a459220229ed14a2491f69f75d9f29f5d6df92816e42b63fc24bf24a2a2c8daa3a2c89d95d9123e2eed882679134db264f35e908f0a42869f836c29714bb41349e0e720a59d6892f83bdc12ed44937c944da6385b7ec675a5201a90f22d8eecb1a5fdb125902d836cf9f7464c0d5de298a6e1db5295db557659b18369903f52cad40f1f29eb27d522a7fc7c3e9f5af948d0e783f1a754291a0e929fade6af9f94eb929f6249b1a458522c5295851f2f4d58f1fc78db36f85bdeb69aeba7c46db709fa8debf256a981b73fb54e3cf8f3d6a15a368c41db83502bf9b381e87cd07f3ea09a37fd79d08b40a04f95bf9d7a4e3da79e538fdc62a5c2dd7d9b339b9fe153cfa9677b9c65f84fadec4f3c19aa056b189f36fc1b6a25d370b6a1549bf6d65f7c5ed35d0ad67efb0f97398a1fe353cfa9e7d473eac9c1f103e7474ce6ee3ea7365f8b2916ac524383af5dafc5b8c59852c5540b0ddfa286e18b78a675107fc6619d6249b1a45854f408ebd0525963add15ff417fd454ffdf0204cadb4400c4bad30ec255b4ca75cdba6584a9906892248143fa230220a1c3e5a9aaba8a52855ad55a5c6a975e241b55ca7d68907b562fffda3dfa154d6daca89d8ef52f2d3ef6678bce45fdd996cb6763fbb57fb8f76b5bf595fdabd984e91fbd2a58c49fb4395d9174a65dda254184a95a3162f67ddf7b7af71a69b6dafcfba33a54891162f339cb56dbabbb4767d76bd88dc157b4cffbafa7287a79e53cfa94766bf0144952b69103e747cd4f890d905d84f878f554e2b0709abda35b5823362eb71c6985a5da9558ca2687a55ff4bcab5ed5379a55cbb5e4fdf2fed2996148b5bd514b60da66652ab7db17f2b2bd952efcbf5efcd308530b552357c41f8b2521489eb353f6a14f95ad52e8af3bd51a5868d942ab592fa61636f634f9952a556a00cf263aa855e18c329162883f634c6b9e92ea6569bde7fba4bb9b4f85894005653aad4ca6a8aa4563bb5dab4bf1bfc7be7578a6527f0a2f7339d5fe5a7543683215333fbc619a59c12ab9f5aa9dcc5d225e3e69c74c29f326652a7549cf36c7fc7b595c5bf368a7cf854ca807e5d74663230cfeee4bedfdd20db1fa75c291628438a05c230fffa944aa65629966d27e700c8c65bf43427c746c07e3aa0e0d950ec80e206143df6dd10a5dada8d8e030952b98c83d96bdcf697836fb3cf9cff87932f72fdf51befbd37564aa9fdf8271e7b434fbf246a6f69157d0d89ac16a90d6994f8f8ebdb9ab74a0d1bbbfea9154978ea4354cbeeb24f89a1b7b1ebcd9ec247adec2eb3a18759fc2e45a7c44deb5b7f91bf7efc1a350afdd0d7ef32946a67a69b5d7597856a167a58eda561d8cdd023f8e167d755bffea965ffc40365a86f51aa5aeb772855875289be6a94faa1df44f0baea67a2ef4c36d9c3d1487729b233d9ececb5ec843e8ad5a2cfa8bd7ee3663815c13fb564f68ddcdb1857fa35947d493cf14018ead3ecc4d24df5a9154df5b9099a6fb1bdde428bb3b797ee4e3d500610484bd941ade1dfafd53ead269b0d33f833b6afd37e957267367bd32d7cc833b2af7fffc3656e33d9c75f3b8c67cf19ce3af54019f0df3fb5ee45a936462f4af765f5a907c250f5d428da4d54b92edae1bef7de7b134239698590d60bc267af0b2176710621ceb44de2f79ab6e5f7220e246a6e76449956901d23706e6a8cc8e95163c40c54bdf73127fad3a2bb9473523929add5daabdaebc2b0efbdf7de7bef092e4f58edd6b59f0e2a806c2a7a50c1041545c8f144032727270fd644172e200b16303b819eb39fc452e9e4866772f23604c20621844ddc111beacbc7a1beac3a3a395046ebd91f7ee74eec479df5627429a59c7352f9b7e2c8c99c9c9d9d991989a2b9682e9a8be6a2b9682e9a8be6c2626ce19223cc604418ee30a49430e69c1306a5945218b5d65a2b0cd40f727276766666503fc8d66a2725f1a3c47d2c1c5f57266ba8b6eb2e7becc29b7bf6efea52aeccfa7ffc2fc63ff2bffe9f98e94ef4eff3aeede89df4a177dd81fe5dfcd9e3c7b67719d9e31c462e8d3a2263f837aebbfe7d0448bf7d499c00d62d7cc8993fe634edb3cfae47b6f7c78f7dc68d6c7f7d36b269d41119fff5d7c575354a7c62d267afe9273dd628a4df34cae871cab571cab5495a8efebdf48c06ff7ca62548a7f8ce6ab8357cb4739d8ded8fff62eec28e37c7fe7a7cfd332da3093fa6bbec537ce3ccf5931a8585ec1fafb739bf8be087590c7fadcbda675cfe8dbb5a06037544ce749772618d6914fb97bddee5ff32bfaef78ceb70def133ede76f59029006ffeb2f9665fc99dbb64ed3d75f9f4386dfb9ae860a7544f6cf6264d606ea88dca55c1beb77556c0ad77540b59f6abf7f365e4fc347500b42434343434343434343434343434343434343434343434343434343434343434343434383319e30aeee44ba1a2f7beaeebef6f9cbe1ed73af9e939be13a7886eb6cd41d9b62c79e2f9ac2883d3f837fa7c0b1ef97a61062cfcfa668d9f345f3f3a6bb1017fdf4d2cffca49fba1bbdf5fba09f1f19dbdf93fb1ad653bbff3e02f93f5f122770b5f674fee542a1df1e04d2239f9f7f473e8f7f7b1037f2d131f0df073dbe250ee23afcf5e6ed43ba850f79d332f25f8d92ffa3514a7f27d76db954d22f44a7f8163d49cb914ef19dfd26d2339b98bbf37ea6f6f8ef86b5f6d1dd36afcf2f89120b793a0fcfc39bc87cdd7d4e4a373bf41f6e7b1097853e9fef4a271f4d638d82fdc5349eef042700d9f7e7b66d9ca6b3b7fcf53f20ac51e6df7b6bbcecd0877437e33dd636fc20eef31ba77db8b835aecbdadeee6e8fb71a2f281fe439636cecfef51a87f241c6d77576966d0c8336fb7540a6c64b741d156ac6454692ce64b3bb143943fac009aaed45922ee5da29550e94ead483526d94cc89e7d423456ab5a3a3c72ac5026198a9d54ecda456a4b80fc70b3fa601abe8a4eac6917bb57def7142a17f94d9a7a5d989c41877e24e6c7b12f7cdbfbd0eda675fb3111bf26f8f43d63868da7ea6ddfebdb42d03ff7d2c06beda59ef054ca36c90637dfb25fe764db9f6d4eec4f6b72155ae287d10e3db608cee2ea59473ce3929a594d26a22ff6e281ed8a8513cb026f2e37bd444488ffac4232c89f6871b1d28a7c45ee6744005a5a297a452ceb773fe35274f45c286ab35556666c72272fc48f266bd9172e248d54a6a5553ab4a298c53a65cf2636a85fecb64a458200c7165b5ad2a9a260d727cb99a41dc68175c0e5f18e44ebec8177f61636c8c7cb99151ae184b626d8e4842ad11b626925c1b9b1d57a756b0942ac592525921ec8b85b12f56080b1349ea436c5a18940be06313c36272fd872346e64686bb932f520809236fe0889149b1a45aec4b24e9e48b9d912f3156081b6371c8171b9362c1746ae54aa95e522c5d0e2a16bec8255f522c37f7e6fabbce840e73721e22dbc938cda262902bcb4ffed666d40b2aebfa1e35a70289243b91246bb5786cd63af5e8ba239a6cea4db5a93bea4d24a90faf596f50435cf3d2178a885cffedce776c502fc870ef78106f398f5c8924f27d65332167777547279274d566efb0f60b68a2a3c78e48c28a244f07138cd8feb587ef54d6a9e7c4036138b54e3d16c24b5bdde5d039d49db69def9c7a54d5f10afea25c407324a1a995c4224a25a5281664fade0bf44ba22a9ae8caa652ffed21ffb15ab06489a21f423821945fab8cf9959b9f52d539ebcf79c15aab5d49b1a456957b105a972d2585524e6da54b8b1d32fdbf9a4a4ebed387a5e0de8721ac75d60a21a498ea6eb276cebaa33256204721a41ba7691542f8e09e2815e45ead5eb37dfe450d9151eccfb9ed3f6a85cab696cece5e53497c69c192e70cd7d9f602aeb3a94699a756c65d193ff9e30b6b9beaa8444eb55639653424000000d315000030140e08c422912409c230489a0f14000f838c46684a1a4a63d2248851904190186208318480800880ccc8680402c87402043226935a1c63b71af33020f40354d93c5348f0726e4e7f8c8bb6b277470b86677d0e102b1f955aafd9404eaed633f0f286e0d50da317ca159569d6b3ca3a5ddd6e72dffe489868cd7e39274a8a511adea84be4baef77076f3fdd46a1e71be372fabf340cda0f463d55d57a37d4f41efa773086d6d8e0242a5dad2e831f961f3785b1de86a8ecabeb5cec0f862e4095a281034ff6c5035afcfd0b2385d78c0fdc302e93c3789545c9690083f3da1b461438ab61c4ca1a6c332766dcc170a7c8f1779b51300b3d6a84710b441ad57831a34219c6b0622ba3d2d2d86f9a3d5455b61084384ed571d427d85daa8650e3c9cd7c356604a83c8faabb94f22beadca83ac491adb98a32819e7cae26d3cdffdef6aa9f3111bff5cca76c7f6cfd6372596710ef6e680fb4d565544c05de92a241710969703fd289d34da18f9aadb89cadec91c3eaf53f3f95ba6d37dc2a87d5eb3f7e2a74f74a972887d54d3dea1027dee981a9b31bb203c4508bf85f298755f795e4703dfc0cd04488dad31ea46e9aa5c36ad87a05f515e5a883b2ac268160c802efa9772f6007330b1c560bce54d07511350c77b9de0c7a367b72a44acd0aca5124d49e7d3f4d2c8ea80ff2e9aad723d926ed72c7214a1ed6adb5373a179da2e5bc0e8de2c087d0559d50eb52a83f43f841a1446801e260c6d49ed11372e2f5975e018748579cf6602ccfb374a5c496de5adf230fbde3c7f04af5b0790f643ccebef37635731b526a40b1303c0fe495bd8197ed4c4edc0152fa052746916e7302aa305c1ab9ae0440d667d4164a95a5ffc94f37f585c6d11e84569f77925e165e67fdc473bbf408da4a304d5f16e789f5f8912945f438fb562a30b936201876614c8a4d912566ee21e54a263770b380b61864ff4f4b25cd617d8c0961e22e86d617714422a4ceba8e83a62a6e0e42747bde25f304e02514f9c6e77b8f389dfadf2be64dccedced31d55ddcd8ede59f066c7241f92296e605a72d2e93a1d61948dc1982fe37444bcec471ea9e107e3377c5a4fafa814287d0e8e3a7079941ee6b0360d0fe1ea9e766a04b1445827a1917ff1f97ed97219351a057968e6272d82fcb776f6b97d6e89f2877d98e700d9fafe75516bb36bab4c99853326e2a132049c07c1bcc5bbe94c5e6b103d01ab15925bc48315d04bdce26e3d8d2513e9c9424c1515392edeed2f3af55e7fac74f0065e33c86c7e69196283820f6f3099212f5fb20cf0804c66b5a6ff9b2bd24711eb289cf125d42d0090612418db00228f8caabde12937d78529b5dde181e2b0ad6015fac79c0f1e22c828fbe28953dd1c980ac654ad923ac6f8d94ffa6f8e091e8ac71fafe4a9d10722585bfb0e11b23332b6d7f01af61cb0366d5a9ae1ac1a8bad60c9df6ffbcd0943728f1488c3fdae74dd1b4a8c81cce54a66bcf54d0b9320834d043df7a8ba5a22704355f8726c1a8ec5633efdac0e2c4c8ce8b3aa79622a558b76f66efcd1b86f87cb9f6301c94ce26f8e8dabaa3c5c6898fd53f8556cc5869f36eac59bb0692a3484848af68b09b21406a987ff2090766854e93214a4feacd5d3fb396e66082b9d1637f3d932ee76efab21657736b6f6dd1b420d9073a57d468f0d11f66a9be3097b9253db1bdea4b1efaf5201f480255d11075d2ed3024aa7dd298e15e5aa669d508e7e65f3ce28c618e11ad39d148fd498a38e1446d006d9b4bab896f4abdae179bf3533124e2a43b73aa7d2b8242a7a520e3d428ed7893b6d3dbb10f6ae7e1705bef92395b01d46dbbc78294fd086fe61f1e71580f338eaf820f9f17f8298a01d23dc15eeef2d4fc121d1ea9971b9f903c64069a7f9636606bdda5c1876987b5d07d5993fec6fad8efe5361feb03c840d152167021c703d8a3d6850784d2afcc1a802cfe450a1d57310cf113ec4514fbd71b42db87f447d95abdafaa15390f9c3af5007dc762dba5fed8545d99ce7f70f363102b4d45fb023f2e7fbd12c16387222ccf12e293afd2a7ecf7cc1b12e9cb0c451f4c096f8920f7eb055e5a0588da895aa70f577abcf1ede1c3d4e19307f28e1c7bdbb7000a892011fafa685b7b5a2f9a3935da5c9324f96f9c3eb67ac77550fc163f116d1c0f5e441e60fc66cce8247f63dcf35a6f3bf2d28d06d993f0eecea7f14a926c6c8de7e1df4d7279abe31e14aaad558fbdcc9830dadf923ea15ecfec55aef46abbb0efa9805a4dbcf9447a898aefef807708b0ada48cb4625c65604ec3be016b2ecc029a76dc339ab81e2b2afaa91f6951a5b6efe6879770aa7c3875cc967feb0f86ec47260cc1fd32ec7300869172870b8994d2d676be60f752d7f4082ee9e0595ce76d75c646356b6cf7eaadeaebb334f3d608a2cdafc817a3e2f71f307c73922a1e61ff74ff4de26ebc74850b632f366fe9849093fdf3c3edd917e7dc06ffeb0029fd8be8df67ed160b288ee33423b066777b95e2ba3a4534ca58124cc4bd7e426162b4ebdcd1f9c1c53285abeef3056e39eab38a98b53d6c9783faecd1f0371f008cf3802ff311e81f3d17672c52a9a3fca33b752bf173a45b16f24c0e68ee704905e3a6ce5263fc3cf5569e8346ad20a63b7dc6ebe880fb2465833c834440e7d74144143f75f94863f47efb01cc03dc872159ad0d3e8d61a65417a3bfc824feb9a8dfd6a2011a23f6d9f301da7c9d16aa06f443ea88470c3b3bfb5ea9c086d844451e552c8d572924d8f7c1dad34cf402a4f86f035eca4f79aeb505d046ee6b1d493781325e7672059eb4cabb5ce0ec029dd81f40ca4b9b7d3687bee36015d76d7d07e644a7f0710a3f67997a05274ebc9630a728e3fcd1fed8973b5a1b71e40c5b537692a8e221221fd852a8cbc322d897eafba85cea5886e957c4f9088d7525eeea0c4d967fa32f57b9708275bd3002fe4b0254632f047a92329803b87ce442a5d60a93cdc7af7a628575e3e7f7de8810e07e3953c213dd2b7c142b0dd5a6c02a67ea6531682205ad315ff68131dc7563ffddc526f532c69815b53e006d104d36662e9246b4d1007fe49369e4c7ad6838c7b81a4d51e6bd0748487294a88a78b24291fd01b6d1682ee647deb7791dcd1e1288199d5039d0fb96fbda2621db8dcbbe4c028ba0bc2815d6bbbee5e63b68f976b602c63a4b1da4137d9c34b33f076348e12a960a89c27df01d40541d5004ebe9f196f0c32f36d18f8080ede9177c0e639faeb759a64d5a0cd575d2ef0bf61f0469686af8abf3ae00214c1aee3cf03a48b22080083e4152be81125da0ed21b5ac3e72f60f5c3b762caa51d0beda1297a9ce62cdc2c0d372541aa7da34df7afaf45f96c06df91336cb8d73cf2614e98d511418dc8b2428115e9b077cb75c6f3ea604315913a7f8bfc6f13f7f416fe29d71600a2e8e9f1a38fbc4a7da83e5e3f544c0ff0d0f5145501d0c18be879013d8e3f69e0df9f18efad41db949c5a2b7330d49e7e53149d6a3d55b0193020d97960e635ea80b76cb03d442d1f4954f634a20c938101f0bbed4164eba14a09a151a1a838bedb27610f224a2201ea4b35704c67eb32f3600cc098e5ef92dc9ac5cc72d22f43c5fd258bcaff592007dba73b8fbd550f66a3cfe453f9fa0a84523c4add0a8ccaae9f31357c26e4c3a1fe0e120836d713be11976d9bf64cc1daada0b813fe891cecfac7f2e1a9c9f6c7ad38c43a336ff8b1c6eef42e1bb95fc5f2c00c58bbe5d19bf86d3e7a2a30a44813a87bf417a58a9447ed250a11f74f3d9eeaeab0170413fefe1157f7e838e40fd72c0b05c08ce3d123d25e20561dea37c98f61aee8d45f2f194ce822d0ab40f45efd2a62f470061133af12a4f8719fa3c72223ce6b9f1a787a38ef2f681b64a44d77ebfc25e297ad9e104b900f4b449a575e2b7440f3a362e7f17b1ddc4cbbb288c2ee8b1ea17d8b1397f5b7b0776db9304e20a26227e367a84a80057d19bd5a5a0c8573f4e9227f8a3ca1c7988419aa37cb1e9b440d972a61628bd1c30a1cc6b726607ebdaf0e40e5db085d2da60e1dae15d19f250c23e717aa48ade8256f4e18b8ff520a98e104f38478f536c1355d0e216268d51bfe644286876a6d33429d1e260590655584b9d8c515890cb70abb1af57d104a87a877ca9b40ad474791cadf9a213e7b575848c88cdd61a0ad21bab02027c5927fdeb228ca439ab87f5232bcb0ba6a81ec0dc98222d0ebe4e127e29651973461237e32d8e3b07aee78c49206441c5d94c446b56ca4c29690ca1c313d880669e8160cef073d08d6473b4b54d9b40355a25e218e84517739adf89c2dee86baed63e254f6556a3021255134e7aaee5c65d6b1972b1831d3b1bbfdfdb459cede9e1389e62232341f890e2a5db2c867273190ddbe6fc5753f8b1b7a35bb676d82f362111b8e3931207c161924ba3d6ffc2d3ca9a150688a48144b6b70fac8f43c37464450d5e4659fc426c3c570df8c85ba5bf92ec5bb98ee10fb41a28d29b15626ea6fd6b335019bf5fda26e41a2f72e606b0ff783c8dda823192a2a6cd5fa214fe91273cbf2af0ca4e92689214217859885ae4a44a027cd02dc17454d16cdad8f011724135d357246e9a0a7493fca8325deb8b44d286cc9fc2469942b0ce8677c995cd2f0d5b6fc1e309f72c122138a55fd1bc6d2aebe54b29536e2499984a4a391a6fa648ca6c226d6926b008ce1d0edbef3be5c717b294b49c987e523c662941a7339569bab712208773c7b1cab356a221ea31202072758b5135afa27b6c9b0ebfe8a41b0cd4876c88f81f86438918c5236424941f3e98e79c477b687e4ebc32987181878db875cc6e64b1673d3c937689345d2468b3a0867431aed43b2b190892ea691b54179ce0e6126069798b7029d6c334610046c46a20796d0549080b0e14caddefdd4524ac382fc0b56f6cc0663a0bf547556c8bb1fff9b6502b3e5866fff9fb753d86333b6ca25bde126b75e4aa6d78aedc3f60819fcd59b47b08e17527e696dfb54164577a9660bae02013a350d8672b7b861aa0e50ebf1df44a41af8c9d25e13671c68740a76d65bd22244a2c356949b4fe06ea141c7c7af195f53d7b5ac2302d4a2368c3940972c9a0a84b5041fabdba0c3568356ddf02ddc99c7a08d314fdb3b97d69264a12f1d2a31f1b8cb83c6cee42f5d7778afae527a78b791565bfe80f6fc78a85971b485ef484c54bb16fb7eb83140cffbe2c4209463c06fd8da6a522c4d898e2da2c5f4691cf3993d4c18c898bfb77d87e7eabc935651889fd04c24a86b5e5f93f8b612eb9dbabc465fede0dce4e9877121fb34b546a05252ab89af16e8cde9e02640bd944aa8dd42528fab92acc47c48d2fabd1971c543192e4a0ba43656a3a2c0f5bf980c8c76e0d03d0975041fda3fbab3bf6ed4b4434272b605ca0dffed0132bc63cd1d3e5b622b5027caa0bd083228fae777b3d0f87e65f23d8657b92d682bf85aaaf988624335d6e3004774e650492f002dd82b969f1ac49c6a226ee7fa471fc8101c51dc83efabbe26166bb7d4ceea0944fa8e6e335560ff535a445377b1ea1fb7825ca8861fea0f79ba97526bab11da9303111effc9d2e6ed7666e2d523352301e5b3dd6db5886e149ef71d8227cb7265faf340176faa8b1925ce7e8edc84af97caedc59a38a6b0081f368597bfae6f61006159821fadde272186962d8a0dd6a80f64483f2014358230ee1d2bc685a23942139214220592b02d6a7d30ab770b699993f061042398079d29c3b7a48638d95d84662dc1d69509ecd111c384b5b218ccde9ba454f413a7d0ce05c42d7f52ee1a89e67d39dbf2413812ac3ff29b1d2aaaa19d6f6859e9e1e4eb09984d51ef271d0e875429dd560d8b53917a1ae2133d4733ab8f617fe57fd5fd65f4186e3b9b71f35b50943bccdd9e2ca1f74b2f29c9022e7f949ccf6522dc489af159d25ee70f74c9dc968fc94442317e0600a505e7593312f0cfbab48b6c9ae9aab9bbfe69935e37d2a7c66c08527fad4b1bcd3efe08cebfcd82e3ced00681467a7fccb44fe5ba236d0fac72ae7c04ad6dc0df30e2f08c547a8f80500a692b09bbd87b72cc6cbb644786800aa11bcaf2744c270d6261964a1b6391ff70e16fb82316e82a59549a1dadfc122f3bcb64faed0774a03e226ca68ab1d5649e45774057858eabf81ed5e3db1cf27dbf47cadf9bde93c07cf910bb506e7aca719d0712ad7af4cc81943e1b2c76c785488473b0aaab086404cbf323be62d57594e5e11816ba1d1ae09a96587cdad3f0881af4c7ffa08ec4bc6be0f3343e562ca5ebb56a951098ba3f73ce8a868ff965a0bfa8a9f4d12fb5dd61f7c5389e90e3dbf354b8f5fe56457154a816f27d6338196fb67a0a0089b24d5a1e2c554f459541b5a2c1ccf888c58f57ae5da5cc9095162908e6ac55eeb784d77037f2a36e0c570a1bb775858d4a3790d69dc900f1ca516819ecd13b32d1425937661ab9c8868c6beb434a6b450dfa83e1003011656f9b737a2c47a43ff97af96943b9033bd2c7ca657a4f879dbef63fe8a5964fb29a60c076e5b99b2a7f3e18351f612826297c66981546451daf71dae1110f21d13b3983d3bbfa6089c0431889112ae46b89edc9153f6000837b0f1cde5749b7103edb826958eb3fcc2c88ab6e41629d1e39c5ad1c3faf8bf511b17b24441fa67d3f4784419cc57422d5ba933f1e347df97181e0f5a7503a700097af9c8e34ad47fda28a3217231a8acd872bbcce697942001de22ec8df755db943f53f9844bc305cb40b1ffd7b065c0fcd1043f2e75ca633b5e523360a6dd886fede6f47a8db9806aff066a3f273512199b78b1ec5253a547f335c03f45f807ebd8bca1160f4db30a776bed02c86d9d1682785771f9c4d31769456ba32b3b2a8bc6e627522bcfaea1d9c196ce10541f86506af600b5f1bfd3bd8c9ce280e779a74283d491d73916c0af65af5b00e59ce69a94271d37d77ac431af9798493c093496cac0f44942c866a5303c67b7a74f7aadfabb4e99c963b7b7ca0910775ca3ec028c10856e1a94b7bd11b0fcf67e4b82cec6c11e435aef2fb5ec8960639523b370feb7294be4ecc0ca5f991d56033f24aa24c7b838d8d1d23373eb20410af49879b97dccab4fcc64d9bc0d1e978201b5275ff7360f164e3b14ce24ae30e60b5d8418a1f1a07c258411e805f8ceb5b31d35a8e9be08cc7c99727dbc64db3c0e6c56416e526fc4e33e60a5bcf9eea4eeca2d60dea9c419e3db6a6009e2a596b83bea47e18a1a93bc7b89aa707674e85622f3babf83369ba6396ab8e1c9bdc51d254aafae818d4fb87f2dff3b1fba52f43516feeeae935e4e62b3b9829b6ede09c40ad315f9c02182e0efe8f96a6d61a0cbdc9c5cd1c2cc1a07154ad677dcd023f55cbfc008c58561cbda0bd41190a5454015e260b92d3bc4b8112a0ab1856a592536a334736ec4587db86d89fa88285e6111287670104aae68b0795cccf4f35ad33318a5697d53153627c23bf7f59e3bde5b1915d04f3f03fe1d1a8ed362e175ca5a9e690a75210815883ebdff733ddc891f5d15aa2946de5460e4eabbba559ce1909b905e4dc238a1b39429c037f145ed1220bdfb89173a7795122b5fea948e55319a129af4d8af77603ea99c89a975280ac7af74425293ee9f9be218c576c6cd6fce649c41c8c4d32bc782c5489026d4595baf2a6e7491184095524f3763db6e5b37217ef883a5def2dd3a8a27d79e95a35933c8e64d92e283e03d0d3dd1bf2306b3695c66d3f6b5d1b9e636c4742f9769259d6c4b5655501cb578e865010b29dde2eafd65ee306d2bce0d973341db60868367454baf2e9a36397d286df9fab6987cb19529f04db7220dbd37685a435370b61136c66199d980592c9681ead640045ae90cbedf7cc2119281e9bdcf54dbee0c09a5a9c093b2b884d8ec754e6c2707099a36aeefdcd7176190b857fdd00b6d4d0cabc26affa194a77bc3657d0ceb43579908eb743397f1cf3b9d6e4b500cba6b226bffb502a5f11afb71b485d29e3f31c90531c5382cd142c93530ec80592768727753e9e19f70ab45478a5fd69366f0626b89ec967653e6b1132c792610875e85a24da3df432fb9b6dc590a8c62064105b8dd57826a3b5a48363f6940788e68959330f97713e604b0b642608cdf10f25392b65382487e6c65ce2ca2861c41b2b53ff3be0bcce589729f6a22df2110778fee5408e74ee6acb0da59ac410186ee75bfe71015d3358e6af3ff299982867ac1f1fc0cfc76cd1b8169ee3d9431b61ee299e9b32c27ddd96d194da1b31d42888c405b3985c5ed9ce2550c721ec00e2f50c67309ac20e7e8a851f54dec51f4d1a84a788a439b841d33ae0ecb5de7a56acef60f56a402119ef63e54800b87c335dd21e943275bae0301ec1d4617a9e784b79e7739cefad7e04934f35e6ae5fbe00312d98fa34e8334691d040b1fe365bdd66d959cad93f66770ca66f9dd19d42271585848ca0c458e2bae9c697b953977e180d37288a9907d30e24bc98e9fd11c4a04148470570f4986ab365d625334b37a9da9fa1dd5dc64bd2e5be94ff9f4b84120f521f6959e6a410842f868e8d9681ed103f445a8e2d105e5baa9ec47d2dc9e9bab4995f12431f6e0890678b5235530f853e7b19b9582c57853e11d99f62b36db16e73f171b9b5f96eafc3b1e1ce727daee2f8353956a246db59c6f8989b6dad62269899633382a6e50aadfbda1644b189ebb3084056000fb6b6ff02f048a97f887e19583b5a9a8ebc3e7554a3aafad014f4586bd16a445ba2dc78957f74813e058e00ad80b3db515c38c9d88f152026fd803eb845357ef58053957a534ce70fafb5ab6187b17c21e44229d947832f68a3b645d7be06f479e78a140d477d88d08cdc8a944385331f62152e39c07ebed4540ce542477fc59970855edb77668d05358b4eed680df3d6c901d099bc0640167b1a27d6d0aedf27ab80ab1f79a470e659c4960e7d940939f481672deb0894b7abd8818a4ac440f6deb4180985a6259aa1cfcc6733fb7e6d2f8948f72874ad0ede2cfa08247b5e2db9ff8b431f052c8e33ceebbe1438fce175e0180e88a4396ef82a8dbb18609c674ed60ff8aa1efaece7acec15a1f243bf52b287ca03f56ebda010ec2ba8044c7b063999f458582f00ee20fac371db12d66522b2a6bad53aef64a564947a0ce6647e30dc583738060e647f452461238880af5f98b51823f89aaa20710cacf796fb7988538af4d91ca2d2875b17b18c39b54bbc329c8c6adbcef32ac6efda766d2fdb903eb9ccfa35c775793dd24b10a0a4e805fb9e647a8abfa6e56f9c22c6bbfc2e96906e934bca0dc501067bd8e1b79f57ffd506a2aea42b97576b01a15b4a651e3fdb81738ff6a5b3164372331f64660369dd35af50473011fc0fef525cefe38dbe093d8bec4343e88a07f70c89d7ea3dde0c1367682cdeff68963c94d86f6afb2eaddb1c86e4ffca7bd18629ff786df7f373336f62d477a9307070f60a3fa0d76d6b274e62d7b2d53cd7084b42cd3f8ba70f07a6992e425349fb98adbb54758b5d531c772465d7330b391965699bf185a0af8dcf4f2d7e1742b1f4c22d448ddd6f7e27d4b38bc75a33fcc04b30978ea27b7360f11fdd325f6b5151eaab4a4f39bf298d4bcdc74a13f3065eaa7a9705eac0000a6077b85426ae5c845361beb1fc34f6fde15ed874a27c0e60aff91f5d386ecf1c59aff40467e6e5344ff3ab0cbdcab39a2fd129808e27b2d84b8fc4b16b7414bf5a69de7b612c5a1255d3c485530cf6fb7244358ba4ee4ba1b9f01ffc74d7cf2a420b82d959b2a61cd1636af063d97970b4c2e9282f4d5ae8017fced13a9b8b616c03077aee42f89cf52ca5a42c31a9f1c6b0c1eda0427c3c720e9b22ab6dbcd816459ba863466665401944ffe40b71f0785e06448a6d1d49ff4844d8f19ed45d67257e383471c7136b2be599979651611deec0d6f9c717b98e935c86b72b666e69ab4ba7262e82acaad70861928a16aab895b0731300767cb40f8258992043a53348b1b8279a1af4689525989827d8bd277203deb3a57df3dbc4689e27811312937f4d3fc277fb246a9a1af1d552282d3507b17a066d6447dd97f21c196526b73faf2a4f3b6e9a65c788933aa1580c97129a0ed8df3850432aabb871b78ee2bcc6dab3d1a9370e370527b1df846b3f8388aa4300b9e0d602cac73dccf5254b8a4e1159eaad0026dead431195fab0638be7f6b5e0409b0e9e17d76b6f8c91acad0f35dbbd209628f9d1d87c86a55b12dba6b6f9f573fc6c976e0c23dec7c3e478bee7432f95d706facea248923a9f418b0ab1641fee600751c0b01eb22312c961dc87e9921cb41a5fc0bf59b049ffd2e8c98904eb33a2853e8b768d1e25bcd777404bd65332accc07a435796901cf474033d4e35fedbb6097f0be47d56e3bfbd7b74702d42bdc08483be3e165c22cd85b284fc1a992fd632368fb719813a2576c48701666a953abfb1ec8738e086a4ec49fc77f46900890a614d59eb17cacec2f100848b3e720b05362e9bc7a1e3ffa9f65c0662eb13988106243925c304b440d90f4c73abed64fc79b3185931a12ec7810025b9300699c18679ddd401fd0bd354b1b077bdd3002d2dac0943423f91eff679758bd0860569e1bc7007d5f5bcb905cbc8b7712c1ab7ff5baf210c93a8d986691584f271ecabaa217799321793956772c88539e0e054987ace04edc8b74057cb6500c7a214cb7cd4bbf766507822dcbb6323a81fb660fb02cb482d3f2a59790555704a72c2fe7cbd1a168aa9b0720c83b1681b255be62cdb83be8173289ce3f932847d418160e7f1a0003f4e7ab65422cc9da534d3dc68db691641bb1aa2e1ca05625bb55214442e04f77f99eab1884a98f63c3865ed3b515a8f58049365d31a2eac85d30ac0e78b4fc6900d673374077408b3205cf1af6e041dca2aec5f30efdec5b364a3a9dcbc6be22982af8570fe0ebe353845cb444a531f9fa7284e796389a0feb0cbc25d23d9b7287bbf8aa9e896711937305a79c90d1da058ebe97b2e0d1a53455de67e1ae8ea80ffa882acc7df30425bfd9aedd0cd1288d58a90020a2ad0b71a97eb8f866886e50cb1aee9ea7d0461ba35e8b197a3140b819c7a89ada423022403ec3a6d244489fae5e9ac9b4490817d980ba2d868d95bc6c4262d0f84abc1b073cd585855d2e78d16bfad50bc10948551f01c0a36c75852cbd7777ca561f443b37da73bd8a90a45b1d369ba828b218167e6fa9c9aa2593d29346c6d9398e8733b733b1646df73dec420d30f76432144b827989f659eadc24a74465ec99de0c3e7dff5d3516c37c4c58ab8d4425ba6b772d8caf0771202b3b3321a5d7cabcdd756f1d7634837f4543e599ca2b59183232ad1334ab0feb7a1ca3df15d0c77d7133f4dda032a4c75d2d131e557136a0c24eeaf45da0c33a0bb0e1c230782f5529ac4d5bf2121e38dc7b77f1d0e4f31cfbcb52d7ef907f3bb34ff3c2565e7e03191565088fcf6d3d8c3d19900424a272c53b2d7b05ffd124b596b3b25a7c1177977edf03a23d3740636976cb18cafa91af52d900fd833fbe14d9e558af12cb7652117641932b6ff034215bcfb90f7929109b8671967af77f78949345cae55af831c4bfe15587737a25e0cce376e7359ef0814a85908992b176495acaedd35a9d2beff23bf3c751e7d380cc264aec5bd263011ff284a9b8e2777b6139caca56cc02165dc0063b12272a0f00a27ebf7edabc6468cf8a1481490d4c66c03996c3e43512772327dec77094af6f9432ac197e36daef253c0d4148516f6cced5c5333e3b31360311ed7ac218b01ed0b25faf7a6ec2f17a99f0955783e72c366c74483d3940ac4a66d399ccc79609788d1b19a532f3282b3423c02ada5cdb4712697d6bd072a462df4d34031c5c55d639de7687bbab10d990d5a98a1524d6f8c599ae83bae39808f613f0c2a70ee0d1853c1b6fbebd66e1a2c715116905478753429315de19c889dd9643efdfaf20e1556a2c6c60e6cfde067eb97a41f56ba07c7094ad953a174ce38ce27217ef07e345220249836a7cc53cf42adcd5a3003c2ba12cf8b2f35bfb30a5dd7a7f887d8eeea6af6b6dfd257fd77010ea3ff958392071f647f9e88ac08e982bf6ea76101369037bb8ae10493206006ef90a3dca6ba65cc4cc1e39d558ad60b6236ace1d94616e24d2a1092dfd44778e7c9a2171f1efd6165fdb5b565644ff54b6a55126fd6039b5cfbef9543eb68e3a5a646c84b2c7955b01caf6a6ad123bc37c5ff8bc880b17221a119228619d893b71a7dc9ba438c316bdcea0085bc6be21f1a23c0cc9ea04949a9f3eb4ff10ebc817d8a1cfdaca08306af90eba246d45e85b2dedfdce3703bbe86fade58e3d75a88acacb229579572f28771f1b89ce52654d452359a120ab729c68380a5e7036d2f3349c3e328e8218a19411e3b1ce5a717d44602391cfa4bcfcdb6d5222a7afe096910c2151ed083c32a3088981ad7619d97f20987b5e84e6b8bd971e85f4951113178491679638ca9f06fe0108c6565dc3c8b74b6e2f4dfb7ff6a612625d2ec2729dc1971372c992880d92911ec5bef5d04f39f2ad8bc909f4c310e45f178a77186f95598397374800f5dfb711fafaff5eff1b441b057b83db5e275bcb6e5af3bba2fec3710faa8e5872386f1346efbd6bff43888168a9544c710d5aff5dadbfdcf0f1383050ef3e7e25d5937590b5111b989545de44db158663ce483f4e99f22b4588ec04716c86cf993bb8651acf194f13e4a93e7a30a874cc3c99f2dbda09ec640a1bdbc53174e1f2f2de7b55f980cba9d3087b80b8d8bd88122ebff369546c3188393a4424149c3f0865b98586322b670d6e48164db57348ba044654eb5d551f82bbf8638fc45ac48ca6500b2e921a51719d95b6e75274185b4515eae2f9a9729f39977a7d001874c527ccac6bf4ac45494c6843010b75384561d9a9911dbdf467b5991d973d79a91f6775a2ab20c0fec834e3036950dae5179eff1e11ea5814c1d74dfd0c6938370ec4edbcea6f4789723ce29535c40a220076543ea41d2811e6bb8afdb146b16d17abf803b914dd53f3975813709f490a9379570c5cd0f18bd5db4d6839ec4b867f03fe83495f7a7364a6b9dce261516a2dd482175d41a5ca71e7ea5288e94a8e1a5e77057a7b2d23c62f962e23e286e49a10225ec41b868ec5df0d1f6dc0319b12a1668a241ff9066ce9ee75917c26db1d94e69e64cea467a3c2de6d0127020ed45b2239b0e011e0bdba8eceda1a82341293b12d3f926d63fa9937cc0cca62a511311b3d4932c2bd8cca9cec76e7f9a95674adfd6e3c065e8f40e4ea43176fee5c0a414476fd71a5dd88fecb0475c444aeec184ac3f58c3884bc5c7d910c6e2a98ff98308f32f024201c8de5c252b042db7106e1f96b415cd27598190df0c18d5cd84e28105894cc1e92112bed970e84af72c96786c5181b02b0d912c12b777df605df58e4f2ece32b3fe94113758383da4774e3f328bf6f2b8abd8b31cc332e86fe44f3f79020f0982fb82a738c5790d32f320c806a533d5b019931da407a0bbbf580b4ee8c2997b09f499c86b154ac4b384bf3b742fb611190fc3265a87ca5b5a4a89fa294c56817f0847d32827382e26f4dc463e4394b47f459d1b7c388b74a9daec843eb0d823f61bd966f7018d696542289f7f38907386dc21ed87ded8db6233469de37c0dcdabc2eb6192ad035cbf0ae505c6944606bc774152523593eec734aeb290955eeaaf106b4ef461d5e500d3d493235e0ffd642d55fff13b9c72e0a50b581c03fa85f750b897ef0becf981336fb6536d5dd18450ac90d20f4c22e87b748d475860c959e373b25976dac4fcac31de7b1adcd4a52bf8883580495520acc8df4b986a52dac384176658d8f66b8df1a1e2ba14aa78508cac15bbe9d5202f2df912d58dc28c48f6e617c8b274150657f815888a48db2edbd94f8560e7df58e65d6664bbc40332e94f4ee0b60475f0cdcd72d6aed185374aa69adc097a5b5325213378df2ccd1ff7ccfa55b10e0279022181c284ddc8827f407e4aae10fc8a7d80fe84b63413f20fadfb64bc148d28c55a6c314a40dd6a623e37049124b579be69b244d5a6d1a7d92b460b569c55806c0aa4d7aa7240913e5e42c7095da1474254964529b04fd31b62489296ad31242e24bd277416d2a14f316c7ae6d9ba45b92240b6c938007f84b9294a24d1b019fec8039a09541c23249b310b219141c90360dc9492279b48945278993a34d647692888d36913456e133da4451ac857dd1265a9a5bec4a9b186430f0296d226e9f409e499ba80c8ac62a69890fbe21abe858b323e3d752239f902c9021efbc6cd6405a868acf7eefa34cf5c6368f0cb6f8914817e46c8ae601856a225375e6645da15eada18eb329ffc5f6e8214cde40867676316cf4039f82ca31bda97d1d7e7bdcb3f3b2bc791be742150e9c5ea8e608d3c5a77561567d338e9ae93756d334966a5827fa5ef6ae405b0b888e103a5a7ceb2fb491d8ad7d054434be14ba26cf46525d01454c4149ae253aa056d773505566a3752b209a3768217f837059400b5503fa6423ad1c6c22592aa40a3e3652ede4f6d99a0232bd0436151bd9c580e2633ff6f7119a029af581f68b41c88557d342e9bf6a43b0a64a4d85b038195640684a9003d6411eac804e8c20983a2107c19a4e87201e891c6fc19acefe40a088249008d6d40aa9db7ccca1d595936e538700a3ae269709545d4dec98e7ba9a50db797535f98db74c01d56aaef79024d7d584183e7a7b42d2de3da41564909d7137b0a6747e34564037fb47c9004e16503d0580c91e6ef193499fb0eba1f79629a023989b29202b31405d4dc280b3ba9a38e2024c01b1d0ba34e0907ca8a18bc15751f60b3c60c59f988d9ba21539405ae4018179464d821b62683707e008ed7bceb5f1b863376768208cbf38f9713042dfa61605480cbf0118f53d75536e41082bbbf907838331891a3c1cd7e4ce3d8659737ceefb89e9663dfe05d5bf2a7d0d6a115acc816f7818856b392518bef6cd8f49cbdda25f9a9577f1d354c31d81be97bd436ffccf7b04c32b9db580787943ab43651c784b0b65e5502f25d0018877284400b7c5d0501d8ff181b0d093ee8caa1c4679a16ac24770c261eaf2db7d091b3b141dae268e5ce77878647873cc82b71f1b710d7b153fe9580de908b6d1c3fd9581d93cc50fc3956505acdcdb9bcd350c6969d6086a61ba147a475517e64fad2f027fe37f18ac3649e25712e8cdbeb96d7971a0bfe15411e7e9db6eec1b58dc80b339a2693037ac62cb5589a76c5672e4330ffe0adb022c904163be703285f9bf7ff86fc9e0033f7c5de838935a61d0134b62765a9635ae07820e670982dd32db1956abe6cb1156e83858bacb4d55fd770b17cd7c3b5c9a891d6dde322ed8e5a43f82a404c7fe09e8a7c0b70e96afd87e39e706b050fce9374dc2e433259a44e1fbcac8ea23a654dac8b701692d8330959292ae9056689e4b66d91b0fa0275508e6899bc41088321656ebdf35586e0213a1c94fa6a08ded13712dec6222b459e6cdd896ebaf05958e94319444ddee341fa6cbef2bf19ca9f12798b0d86ec6225975e58634f654658dbe5ba7b321beb259145405eb1d1bbfca523e8c10327fd7149065522d9d9bb282a5bfdff2383a9acd82b29f9deb54ccaeea84f80d91232c16e28e406022dd21eff55a86f7dbad79c3b7b24f023c8e6c96ed26562492223303772453a198cbd4b4954c4397f2e54292131028a84a65d5fae4cd21e7c2f53619a5008ca24693c697ba79ca9f4e56e96b383048035218aac0ac2d34fe4e9d6214665539671a55d9b03159bfa695639dffde03dacd0ce6cfb0f44016254519e97329499c0aa8ab91d9958ffafe4c1b2051b2209a340adb11d2e61514d45e55c9504bd376fe4a1f649aa00f787cf72f435ffb481c763e88672bf88e84d5aa29dc733c26c7ffef85c748626065440825d1f568268518a5cae2f34a7fadfee919445ef3dc03e0969f7640bbb20a6a103809e8537bcee3d2cc11340cedb225334bb371e5c2f33f54602d9df5665245718cdb347fd7fc6bd55b72113c016bd892ca42643a53f988b05561070bb1238ae8005534a2a0d11e916e28f25f28d29c62793874f737981dcb6cee4421f2e64279e24eb8ae60577a04aea8289b673cf0232125ad271c2d1f099765ff7dfe91c02a1e448726c68e9a0ed5c19c5873f33d25b0816e134ad54b7375446380ee0b5979a73c1c1c1ed674da58e150ee97e0602b2c9eec63bbce4bf8d59b5af0915600d62f96234d19d3fefc3ca2481c50e62844a96d05b962273a13c8ae6cd43d9dc5b1d1f55a946dd842100faecea3244b0b449ef222d7b5074f7629bf5b275a18978ac216294e28fbd849a87326db720cc5eb4a783a3e099a0946533b37379070aba8b87a3568492ee36759c25ce87692a11aaa8e7400ffdc3d282651303561bde9bf836609478ad012859be2146e47b1f89cdb2bc2827efe846ab156b3b9098a244447d08f35b37dab01503aa9cda93752d8eb327d1adcae4337d6385a86c0e62e8ee4ebc7a62201642471e537bd5f306efc5e0c4462245f2cc24a8276a266ad9215f3b41bd24130033216bb8426fb1cc72e0063fb6429085de33baea3dc9a3ba2282273f7ee0ab39b784be03650394ec2a8b6dd89822588cee51f66f6c8a32d1eadf737a8f0a0909afa23c1ae4da290ccf34963a771dabb2c49d182c63e0c798723a24e81f34555486d2910e140202991759ed9665fe2f00d36fa0a7c4fc87e90f58d38bdab6967e84c4ae7ed4821ea668561cfbec3894a99dbcc80e81a11792c649e617a5df6d4ace39b34a68fd9acb64396009dca91f89d3981ccd35b1e8cc57117d63f9c0977b43533add1fa6c16ab31334f582a6d828db5ba1582e4330db3d00b9bf0a5568bb589046390663f3446b99b080cb175fd2a5557265d8600cf989581410cb4b3130024f5af78d7559088a107168ffaa0c65972860eb8d48b0c0ba21a13741720151147945088e01fbc8bb8fff4ceff36db7a6f06cd623c7785cb9ec7ff32184051728d804c74eef81914043d0207912d30276786deddb47e47b860c1d587132f126b5ddf1fa23c20a329962cc855d136b25b6b13f338fe9d2ffb0247e0de1f7ba1caeee04af43090e5cef038aa762963c5c6c997a54fb1bbe734d5747995df4932350c3484123e6b19845b7e1d989207a1bd4592d2eff6d19f2d8b4c4205b78cdc7df1850e5e7e027b6bac3b8c8f187119e26ea58f45c5471297473d78a66909a4878c1cb0cb4dcdf9edff412ba8519912e0fcedde5451549aec7ef3c49e950ae3d74f7180a9e362c7b898246ca4246bacda30d6e673ee648ca3d4dbd5aa21b3a25a6a6bfb2c391a896241294516d384f62483979634d67b6b1d341e55958e96c1016bd0e93273d2bc58ac13d68af5f70700e16c1122fc30cfc93203a0f897f0feadf499ba34358047098c00751cae0be29bce441ca8e350e172d4b967601edc8b3c21220ab0166b4acef415a2b4de39a648a3504df4d3d1f29e3adf66c051324f49020133c22716bae8fef8abbb652aff067d5100f48d6419d72cfc3c4a81cbc07ee3b7109c122a5ee11b64df9b2baaf40ec7b0195898e5c0f42ff430b1826f55f0cfc80805b3be7eb5c30820c26b3cb354ed5bf0fc6331b56b75d708d2a48d3940a25b14c3e8e8dbf1a8de98de63bdb7d54d5e7511062f83a63e3696438ba6269785c957a6e7ac593af8df85f16c8057324cb37b804d2e12088942ba4e95002d87f895c723293fbc3a535594fa30daf6a62224517a9129d199c1dcaf0b5820a7043d5e02898fcc1258bf882c040cd6aab178452c8fb0b63799e28a5466c22d683c66f618d1a2870d7f2c237d24fcdaa7b21e677a3cfce96a83e25a2c795c0932b36933551940ce18fd5a0163daf95991a7593382b5bda3dd7f69327845c6e79222a35c46533a01de9e0c52f32b235404b7e1e876a0178394c8551d3536c393c5e54a6db1848d2ce10c264f123b1553010a702f4fabc5a4203833f0ce952adf0dd51019547526c74931176d36e2ad1cd10aa0a114adf6e88aa7c2ecdbb365334cd14ac4f9901a1142fb66cae7d0a5dd43d28690c6ad91b7b44329ec5c4313c013110f8bee0159173abd80ae31b99436f29d352cfd5b154861dff759c6374ea3e6a5ac9a0f0a47eff3f3ace9e3371c1f3d4c6f4c9cf6c9beb58723d6a397f10ca49d211e7197424548118e73b1561602e4e6a96eac71794f0dadadf9722919448a6cca244b0f85408bb2f156cd05a8e4e323276c65063c09fb7735ec2d910091b392473be816cfa41305d3252cfc9fe3ed9e038b1338d58f1a54923fd189121d4f948a04573b97a68b65c209356ae0e2e038735d160a1e09593cb44b3c02f6a9186b185c57130cd483c3fc925b451b47510e32e5fea49f2aa5ab79a99439abd16de7bb2e70f9083d2e45329c9c3b98a7095352223e898f15e94844210dd800507814b17e483deb75001253a10224be753b019348c1e44f842be779d4cdf2909e2aed7cb95c3cb942f01d617259330a229009138fa2fc36ebd7f43ce05d4e2fe2265caf8ae8b25721a8946ce7528c766a6f0a294eb70ad18b611f60270e3f0c22c1184868c09949aa0f2f30e8ec05113ee0ed091ff1028f90bb910c159126a9b0388b9d99a3c652cd1c659d0d91a6a9f28ea2ce8ca8a6545a5ca59d2e47cda582b94a3a19220d53e19d659d19314da9669cf2cecd7153a9b19a5652413e9d03be4b62d18774edee2e1f830b6ba26445a95612d90efccfa2ad144643c8fa4a3ee60563ffbdf5095ab08569e70fc5d0141962e2f89087f4cde9d9596541e2aa8bd83a35b391b5cd7d4607172a18890b56081b18e9641d67b4654cc8377a01085de7f94579cd6626bc016578889c08c184d37d1e2b4867fe8731fa3fed0578ffc11ba8fdd75cad745352283d488a51e358043bbfac2f319896b3a0216e3e07b696e237d8785ec0fe72f0f9316d8cedac7de63f61d573a0a7f94f567309a63a56923f1a1bbcc075123ed1eda064a3b1ee0ded845332e0f1c1a50154d2d3471cfe52edfd5640cb16a8ba0a409cd8391bb315a7650ebffbd520937f20bdeef8cb8a373f48c91e3341113aec9de680c2e6de6fd4c378106d0c716e65516c675649b899bbb8fd2bcdbcacd407e52210a3d911f97a9477b0a26f4ff1a5b1acf48afba1935abdb052bdf1e79dcd8482b3033da3546efee8ffb409a906ecac9c10457a08ddc6abdf48c69ab2039b4384cca79a86a547dc27467795ba07e985af851261866a9544e4afa9ba1194381b3a134af7b558567413af36a66f9d8969ccbc01b8b5484a68c4182876cc07e0359fb877a7cb01917a32f82de8c57d1053011ae92a6048df8ffe44242f97cd7c29bc173df8cd8b8ef5bd543dbc870c74c3a3275f52e09c863f119bd6e6d35b938d1eed0a51cb9cb395aa63f7ca4f3d88fcf422f1537b5bc95e011079ed4ee88e039607c9bf875bfcb3a03786fc54a796a2f3d81604e2070b24901d0ebeae68d81ee60e94386456e588b4eaddb315914dbb1f99fa6184034cbb5c40a80b8063e0c4fb6a2cd34c8a31b6555761495f631d87685c4ad66926a134b4dc0ac480e94c126f08fcfc75ecc200c1d7826b388ef8bad1494b7a8be91444e935c0f1f7e9f5b0a9a0d0ccea93d12de8f9562cc10346000cebdb3c1de11fe1b798c7e5c5ef655b1b89af1f7d6c23d53006f0871886e37dfbe5d1bd08d7a0edcebf8c8a79226723e752a6bacc1a84bdfc5e99c3050ed76b4385ac8db3ec1c2e92870b464146b18897c215c4b4406ea1432c4198294ecb6bab2197f88d6744c80135661f32d17c67b94c4b2da4c28e687975cb9264bf274e571521c099a3a8bd3db36592a2cd399e898e39fba16631aa59f281a81c06e678bff810ed6b2f7709e42bd4a871e4c5e07605e77586cc2c8b0cb55b072054138e1860c4af1fcba9f0a0c4ce4e8ec9a26bfca5d9c768d39c1005dbaa68d11210655a2dd04c6a10dd624c7037a5966e5094bb0bfe19c5132463b7c722e1a90047c1ab04e0910bb15200ce703ac10762aac336801bc834d50d676451260c1e7ed1f53aa51044e5c4994684dfc08ad1774102f9a3aae5c309955d6a4ebbdc5d8d9b8469074cc66e1948ef5b5574a2b0d081144b298fd9656a9ba397f2257d85d20def3bfd1a407acd62b8242d975a1d43fa76209f31b1690f3382cc6af063c221e630768612751cca1c87e2704accefd5afcace9acab87d927b14aceee0e3704dae6504c5ac2d52bd122e4388c7b71f2e4aa6e0e6f831b5c6588f092d7ad4393ada6942ac15e2a136a615efaeb539f74db0673084148a1647f5b72d29e1925ed908c47913e82a3fb58090b3f9e3a345052918c2fa4ff08c643e2b4d18304d5b76cbee280059168c54628dcab0913a43d51ea4bd5d4619387f27a5030410b799d9b8511e34b2ed19f9e944817d9cadb35d18e6025804c79aad2bb8f77e3146239e9e2d5bae9bb07f741f736d6e36866cbd9f83f9d5315a638120af2663fbb5567cdbe4a04cec5a9453d58ad87ee703837760644dd099f3aeef702e6cc5898183fbe6611c1790c7dbe7306932460af5bd16b347b553ede11ab015952c240f300e1f5d08bfd835a95ebdd2584ed122cc94581f611b1f03696ff1d18f6b46d277351d4572d589add308682c27da25df41c260b8cdfaa3ba1cc8b46fbc6bb5adf499872e05459f549721e5889519863d572ba888fcf6c31e5383d660f79b4f879c061dd488be5bbca0fca643967690739b42155a04fb34468d608f5dc600d2eaddd38b3d5189a359ccec8cec4792a388a9d4c869c8c97108909d72852109d05e1ae450799fac8b54920accb3bb2a3e119d5f4cae465cd12422496ce0bb1d58d4c07882bae65ee751b2acdc48793d0b9fc92044c5362ee50b392bd5b250991126597f272d86b9c0296979b6e01beb96a7c2cf2776119754a327fa4ce252f7844538ad8c00ee4c0a6ee112f24de37177b58bb35400f527ab35433a3188a4d0119bda245935e7134e7693e09922490a59661e430cc4cddae33395820ccba59fb9f1a72b46250f886176044aa029b141f458596976c6a135b7862e0049e076e40baaff9e5edf64d181b35c18da58fb1b69a09cbfeac7710a5e024719e08ec906559f8ba25b507299dc953ce19178db5425117c0f41becf53db8c1db17485600a7cc51139cd7b569b00416c068ea0fa815f1135220e5e6d6ac44dd562da75f005ade2100746b845a63f941a970ac748bd712188db30e172270e81b7ebb780f020eafc123a23e9a563b56d439dcde9553cb189476ff3b2482cb5e102b430772556546a0c326a70c49eec62105c9a94b9d3945350bb7da018a201d05f0bb0609d9635db94bf495a8b243f282ee55af18c223767d65bd4085b3fffb749b1053fff1111957d52f64a96f04d3d481134c1037c393b7d8a32b2b3bfebc4a32670b8415a2b4375e2131a767222e2052d6a3b6775e57b8ce6f9c3129d49fccd9778a2c21977d97d6feca7dbb8eb6aa50a6b144c94f5eb741670acc8951a85b27705da0492b52f3513bde92d54ad569c4a7972ed9930f77cdc3ca2bb8f178e943432d7a62d2d81503189107cb0679390c93856f585bc12da31910ed5caafef5545a4697fb0447422b01669180c252a97645bc510dc436c68354551a68bbbaae00654674729e551552fa91a7537d9591dc5c1e0162c78336065a07ec5d3b01bdeb370dbbad7fcdb2fe969213a305a03ea8cff0fedf006f70fc26cb15ae7f3a7580e1273674dd8dbbca4aac70dd230cdaa2a06fdc8b99dae0b6e06a41be54420e6bcf92f3815e4b9487be952caf2f6656c3481c8f5e1484879d9420ce6e3fa5476af3b2f38b9ccd63510c82020c56e8e4566944695c5b2bf6165c3166f20c0afff8f21cda1bbbcc16ce97404b9edb0623e80d3ee24eac3d7cfc67a517bfefaadac88d085ab7b41aeac4dac101b48d1e54f535ed63d23d02295d0a2867b664cfc041a650c7ce06488c6365c2d0b132f98b7d1afea7236b4b99f946063d2c41ab1809c26f29db0ac817670ab444496fb2ae2de03e4ba218d73ca8a4d4963481d19a8834c9c9bb2dfd1851f7c3663e9e285bd68b0bdb4d4986b7296678b3dcccdfa2d3a30281ab159e7f219903b26763bbada2e50107469e1f1021042b4a845eaaf2035b922b3c3ca9d2ad622ad7dfe2f836437a3c1ccabd9c9d64659b46d1804bddd652076b6b3c3b56002993e41167f6e68d3559fc7c38c03dddca20a0497af51110b6bb807087eb72e8837276f30b886b8b8a6ebe29a0d5036e8ac603c4f5de9cd8cb1c379270265af93cd58cd3166f89caa228f9d18395734fe3f59225f0e3618b02eb593b1ce8598d06e2b88a0d6c3d3124c7909aadfe962cfef1bb199d1cf93297a9f2604aa7df9538c2ad8812343d79f22df0c7a59fd90a75895c7628f81f9f19fc0b35594aa5f60957dbd6550155463f100ffef08793908aa0281ad9c07ae84e0a1f00d9f7c40367c9f7846db7eb6e4208ec1d5ce5cc75ef6873120336485a8c6638758f1d7427c69a778f6d20c9b9967303f73e18f4b32d311fa0e5bd004d8f90158b50a446446966825695d0a64485489c752623b0b9140ac13ced1ff884b2e2da14f22f6b1c5890ad01dfa7fe83a8f61c0eb46fd78ee12758a8371f69a05d5857b01022131ceb096a7d09873ac656cada598907ffc5a0b739c252918973cb73c584827fc25add60f81017975bf880a856a00a5621eae82c323a2189e7642274f5a1199923291f050216fc0753e5a631cf014c81db08651b9b3d0b79d06ab0cc604f73993771d400ebbdb730afec9e431915dd07cda6a7116972be45a16c7d764419aea37bccc9b718c4cec03e8accaa569aa546580eb100cee87a6b3dc1822a034e28654c3e07114f9a49aa4cc306e6564a587c6f77b1ce5d049f125605fb0f7b08b15c6e9c50624d79c403b11cc14f0d10f336096bedaedd6a377999c200f761af2dbb516e50a0e29f8874e1788fc70af39e9bbec94900fa06a6f60985364f8eadb35f70b94e4359619f07f709f725c7342d71c22db851ac80361727deea8286c143fb40e2a64ec21538b2a81270490d017393c4b1562eb19e71a0419cbaa338db580231928cdabf338770e454705eb00ae31a773284dd11f81a69a4e093809884cba18a5478ccaef246311b66f8d3469b2fdd1657bbc287c571fcfa4b135d6668613daeb4a829a3444b8dd5ba7a820ce353e911712032abd9fe8c23e8395c3d83ba4780fafb2b8334bb64282daa9f6eee202c1f5d6b89a7aad1867b328347048647a8eac6ea1ed73f144701589b9ce5283d50416bdd659f6693fb3ebe8ece48346d3096df8ef1a0794ea03ae8b44be0f581030ea8c73c34d0017dfa55c4e3fff1aa4025c321ffdd571e800571d7005bb55f3c36d5cc1d020b69825b1311acfb81e926b166e93d25298d8409a67d8e237141019191919998eb5b8a5339c2ed9dba0befddf6e42a49429ce0fcc0f940f4436e8ee1a238e10c167e0ffd77813eb775b9c57e8d4b26ddbf7ca37dad796f8f676af6cfaf277edc2ae0e85e97e53debefb694ddf970b5bd669f3fcfa7f1c6fbed6ffdbde7c1afe7f8a559dda2ec5eeaa373df9909f6e8b737629df146f73ced6cd395955e539552d6f81a9faffafffc79fff9fd4e3ff6720594f04110491188d2d39d408a1c4931e150c507262c2270b9a7a4493f380501332a64a1c14b4d085441d81869890ae46869d2664d82001470f5d231d40a0b4a418a0c4804c045db3df522cf25ecbb6a06136db91825934a3e5322ea2411121ef97ae98379ecd763983c5c61dcb59e39e6d9c83526e9c4b5a9462b1989b02a448ef582e4b0b17e93d05889271d3b6929e6dd9d364391a6dc7645b0b17c5b266651694d8c625de50643bcf4c5d436e598e3603db4078517adb5095f78b9625dbaf5c166d4fd945b18d69baa2de78635d161411f48ee98a3a4b6b17d1b6ae7560d2725044d05ba62bea9d95d494f4ce5ab828b6cb9c162e2ab72c97350548516c6be122d99ee566e3a6ed0ef49eed572eab648a5244d341d14149b6f18612db3928b28d77101dcb9539d8c6456178305d940d5579db5035ee716ba5b197f7abd61b377e0581a74c19b3b4f614bd673a17456edd789477148d0330fb9c134d9659575679e711eb71d441cc9edc18e328bcc7ad7338368ee351deb10d2b47586cd430580cc74a5d941ec771d4fa0914deb18d3518f7eb8954dea4eed5504f484d3e2949ddab031085072b7550e51e7351a4cec9135e4c1705db390a0f2a6f1c05d339e1bd724e9ef0c8bc7312b287d963bc756e36c3a40ee7da77dc2f9d54deaf4de69cd4e045bdf6f3643a274f9cd4e0bd74af46c2bc52f3623aa87143953a274f78301d89799af73b973837e0890879eb2d02dee37ea283126cbff6932cad5d442ac536b9754fa6ec2252f74484d796e9b47691de319d08a54e6b1761115e78933aacfd5b84175e673b54b8b2c34aa983f2fe229cd3d2c109109ed61ab3b4469d0e4e804cd1c109105e94de7ff45b789a09ef6061f7d84142de3b4ad851c28e128a452d5ab264d951c28e12300f0c182d5a8e76948031e6a1cc3b4630739614297a13d1503c0dde5a564bd250c84cd99e8d248d94d1682c328d4ca6bbe874971d5a78ccba01351679b28d65b9516b3421d37c91c5cb5b8f5a639157ee986e3461d4ca3478c3605e328e1c4c281c1b0b0dbc9c030f478eb9b108f3cba209b5f7de7bef1e3e80670f7bd838da146da6d8684195a30999e64713c616b09850630f5878f871512bcbe7dc6842d9439608a60841133c72bf0ed8aec8fb8c3ff67afd266b44ca1dfb1a2f6ac2d815bdd03525d70b8b722cca60e68d7fd4d241ba4baef90d4593c458d224a18330144d13bcd7ed38c124b1c60206068a982f5e9032ddab2c835fa818e30db531365bc098068c05066cb6606281f16039b208f55e5095a5690655dd2507bd760c7614ebca8147ee2d9926436192fb85d30a9271c54cdb42d383e9c1d6790b950e2a92c52d6597926b4b514848484848880697d6b111cc5e071479850985b3709615a6c64a9966dc40ef5e0acc28bc71a6c86bc36878e5f0cc10cd836d4cc32fd3e48db1168f2c8261423d9712b68124c728bc99223aa81d85f739f372369906cac6666745b903c3842a93207b58a10826ff6f11d24181897d369112f35e3aa8c7a22c4d93c6079b45dea86b475ebec22cc1ecb030a16860f2c8050f4c06c29b0b1e189e8e06266f281a185ed6c133c1bc88c85fb8fe6617869975972b390886c5972e305cf0605f14af5cc945af1bb574f0f0ebc83458eb46ad2fb09d1526de39ff9616fa8bfe2245ce5ac77838033b2f42b08507458bc143086621c072db1f28a22b89bc77509832360e979391a361a16db1b1c7ad27ba22bbcd68c46c993d56791e315be3720b7e954de81aad69e46e7bccbd78b2db1e778d3d93d58e6aecd9eda623bf266f195fca26749006f33579ebb2091ab9ff9b4e733d4dfef23b59f36e39cdf54f93793562a4e0652830ef36a32163cca4ae8602ccda86a261d1b42c19288731068c9769346429f1d3b6c8e4a0b4142f1b39281b9ede3857a361b16d1a165a0f1928dbb6de341a6c342d3c3d625ca306cebb2bb60faf4706cafb9bb0c9345a27d36821a40d4c5e15262deb9ecbccfb374903b7a3148d331bb79566360eb76774a5128e3db367744f66360e5d94a218219ec6ed990d25346ed5b605b0182c330b72b68d77a6d135a11e359d8e4c33939bc9bb828d63e372b83db39770ec0af6ccc65590c3919bc9e172250c99469758328d2e5bf81b3d6e111ab774d04ca9b96672650be3962035a1049850e3169a905962a1b1df9237c3c68dad77d982aeb169bb1cc0f3a8b1350d8b0c4a482647e3464eaae4ed38c1a4b1f3b661a346c3068d8c9351e3860d1a161a16991a376ccca02143068d1a376cd8a861036ecfc06d199c0c21db78bbe9baec7cc8d966b3e53157dbb65c145efe4c532b5f90c53694fe0213e2e951470efa221d6d92375298e53dcb9adc26a983a283d26bc7d850c81db34b1d94d78e31a384dc31bb0372c7e83a786dd3c53cd9d65f682ffe4643ed294ced856e1c65bb2c69b971c7c65d8e9a2b97b1c048add9eb80aac11514a4d168341a8db683e84c1bb57859379bd1769eed3860e65dee28453aeb6694c476b99562bbd43dd121ef27e58ee9ac53c245299a953b5644062249994dee524b06ba619b6d728f38ae1c6ce31d248f5d646c399d1ba718b9646abdac9d14b5a35e166edbd84132141d94621bb7a194ba19bdcb5d63d7d8590725a69bd1ba19253576b9976ae89670b88dd3157184db82d3f237a4c915dba479bb8d5d705af214a6b983649c161d14d3d235e4962163a67b1c574d8bd4416930a6cc8c9cae1dcdd83399de5026d76cc3603474145ea621b367323b889e91938969d9808be570598b57db32725c5d683c9396abed985c8c1a074aae174de79a16544d8b17d3aa69c5b470b20d15d392d5b4a0682557c9556251c6602557c905e3800985e3fa269e30a1705c5cbb2b9ebc9a6aecf22503799181c6293290de5c635730d3c0726aa62161a40e6accbb304c5831d3905a740d592ac945a56e4782a0723f9419cbd1724d392369bb2b4ca898164cf79295a569661cd7d82503c1368e4b3bc18332c7b2071e892f6042c5b4625a19c88416625932d04c8e6941c5608869f1489c733b2b665fa030cb1d23f78d2e5c3c12ea49a6217790dc83ae214b2d3c7277c93424b971e4c661810343ce641287e3e2911b968f8c1b4aeb4a5c3bd2248d24b79a83be88f4a206968990a368580526d05d74102e827dd13578c3c07cf90206cccfb8f1334a6e6c195be9864e864e4973e91a72cf48da14990673ed38608e2dd4c6ad049878c3b66c438d5bb02c1dde922783db78eb29de926763e3adbb3c116d6b289e078d8df158bce1723376cebd7836725225de356a8c357457a62135169986dce4bf175f436e4d8e3c5c4e773d8d4c4eaae4cdd0e92f4f43ee5b2e4b83f91d726389502cba69de8c9cfe62232755f26ae834164f9335167f43925b5bf139a48c2d93b301a7d35f34d7df907bf7c5246b3172505162e41c94eeb2f3c1cc9b346b7b347531b532d78e62e4d652a8a396aecc5162c6dd153ba49834debfced15ee4ce0ad3dcbb71ebf840d17ac8743a2821deb8f52b93a0895d140fcba2b9605a34d7d63b4ad16bebad346ead7ba203de4ff41e754a349a2e4a116cef9c30b14cbdc70d05cb320322075e9ef530c25e1bd6850b49ce66b3596ee783f9da50301c7be5c82dcb45e16118f9246c0a98139906d6858435c1956b622477d85d41eadd048e07f549e4683b2b4ca84f82b741d048061a7759be742ef3c8dcf3765dcc9d06b8cc306d1c334ddebd4c43ea8299e6035c68b20d55da641d3bd364a030a0f07621305f7bd37694a2195237a364b6695b69b669ba273a90fb094c47ea946633ddeb9a714729da81c07c6d2dcbe15e3a33d3e8bd13c28ce9907a19e8955f2fd8eb058319c93419295823d3048530db9107b5f7ebdcae9869f41e47721c3150de2003953be75cc27e0a5227ef5c6a1f28211e4d005d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d3b2d765aecb4d869b1d362a7c54e8b9d163b2d765aecb4f840165ebc78f1e2c58b172f5ebc78f1e2c58b172f5ebc78f1e2c58b172f5ebc78f1e225ef3860fe7e1f34b8785aeb9996bfd17bc7017317458ed132e38a9971c5ccb8b86262366c0683c1605c5d32d7a6a14507692eae2f5f647091315cba46cbe0828ae1e2e9cd25834b06174fef2c834bd7689da6c1f56ac1a6a8b55ec2dc0171002ff26e09136a17c4aea84d50d3a6b96bb56d1bcdf2b6710c182ca6bc95bb84d588c0366dcf605c682f36f932f38ec98d7993316a39b32ccb72ef8ab45c9969b08ec665ee8a99260aae09a3dca50e8aed1b39592dc96cb7011396f788733561e852841ce5a55f47cc5ec804c3d3e1fd04a8d8c2ebd2029be960b05dca62c874bbac6920e3d1741b5623021bb7328d1eaf641addc26f72bf78af1949bec818f36623634c9224c9d92d678bd9664cde3164b0d8b629da64d968e5da912c86775598365a992653d1c3683345cb36294b32e3e92f4f24cbbd789a8bd9a6d1b6ac76448ba1e5b2e0e15d8ebc7f59c1c31ba6793a0b9d793a0b0d054f83f9b2dbc0987b1ecee51dd350d84c0992b736f18c86983cd31a6bcc7be5c64c9373ce39e79c73ce39e79cb396728b99448d2676171aae2f3b2a740b5c390b18305ab4e0e227b1a3c2843271ed730c56982fcaa217ed8865f6d2d968c9f03779ef110b0f26d4288309a30c5a3f98f87bc85df2ce09332607dba26b663b4612bcd99eed76e4e92fb83684acc16a24cccbdfcc7690fc25d368ed457b79a2e7e95aad06a5bbd462516230dd935c394a4c0f31fb1b3bb2ccd284512beb9df3952dde582ce6297819c6c5cbb02e7fe384596efd60428dc5728b3616758d966ecc3425960c8219f93a682c79b1d886ed9c308b6eecc032c7ad613d64a0226040f04898161eb97597d90cd35eba7654db35dd65e78349cb39a827594c5e2ce75c2c0745a3a5e4426e584e77c9bd5e07396a26304d0755be30026c8a3653b4d5ec75fcc6b91a7c83396e289acf1b69c4b01958c67d2c37e6d7672f665c5f9c30b31e63b19d370c0605dba406fa2e309c8598bd8e2aae6c000c2f8a4cb7fb1bbd6fec7a30a160bcd9d6e40ce68349dbba8b6c93b21dd35dc8976edcca55f0f60e07134a072f5fe165bca146187879eb1873b4214c281aac2b775c99503465699a356ad0f0b09090774090ba68a375f5811cb4c0c283e9b209de98046fd441bda3cebb206abcd815b739440a6a36408159f965099b020b0d06368506a3c1e09c6328614269301a4c690193dcaf5283d160f0788587f7ce02269406c39b6dc900172e5cb870e1c2850b172e5cb870e1c2850b172e5cb870e1c2850b172e5cb870e1c2850b172e5cb8d0f0581c8b99266b270173dc5fd48e5964d167a0cccbfb738e21db7a4b89cd28916dbd9564ba462996b11ef3586a4d9a238fdcb391f6821a8b1a0a22248fdc339206cbbb24f72c46ea764a984172f1460e3cbc2f6042d9a035deba38c292c805db878f5d43b37615e76cddac5cd4d1f8dfd9374e6a77b70f1f3b88d39fd0eeb6381d6539502a2284d7e309d93d36159af6963dd7940785a43edfbbf6b607d722419723fdf8d122f550f9bbb220a42d1bfce143971011f5b47d7d43570a6df9d43ac51a3db9c21f42c41e675f22223abb141111fababea1cb5f8ebedcf7aedde5e9214ab1431f151722bd2cdbfafa136fd9d745b2f2971ba1bc23bd6b6ff930470e489078a488887c2f8bf228951df2971bad6cba84f6d74dddb6f7963418f223bdb74a45aa4a1cc222794a8b5856a9edc13789aba6fced46685f1295c437149e5455fceca8aff5f9ba90e8f676c8b6284f0f1155d9a0dbdbe0eb43d73e74892e57817688bed76d5327956581af9b52759fabf2f529755f629277ede9303d7bfba366481f0acf0db64ddb81422292a893558bf8cb51fe76a1af0bd7226d47d7ee56a0d47b5a5315982e2122129e546bfa94b649c0f8c741fbfba642217b7a8113757220dbee0edc2b3ff7cb83efe6eecadb77af7dc86e16c9ffdffc17dfc4f16e8b931375b22ad0d75f8ea62a97bac9717374f80f3f7f8672768076b8d34e904f8f8f130fcfcfd0cf0dcedbddf44d55beb6fda5eafbe867ce0ca778cbb383a373b34eb12d30e8f2e08c911d7439d2ff0ffdbf1096ff0f0af38ff3ff203889e1ff9ddebc71e51f654f5f47d9d5ed52e99b0ad37698e3c4f313e4b32394b3c3c375827a4e1fb4a7c74748a707ddf497b7af0b24ba39ee4b64a3ce1e3c73def4094793376fe8f8ffae0281e9ea6343cb9018c5b2ea0e4e0f0f8ece0d10bde969fb02fdf8a840fe12856807ee2a94f756e5ff5fe3ff69fe014083bf59638aaa1ee553f9c9d6fcff0923fc7fd39b353ef8ff1e7565db546aed4e2cdbf63aca9edde85dbb0be4b9e991976551de93aada773d5239ca7bd2cbaa4b50de833c9648dabe6e4fea286f9f864c50de914e27479c088d3a08e9924eec442546555ced496b91a1b0453a1a0a5ba4ffef799e9d7fd7d75ffeba4444c2feba55ae8fb77cf8b24177c8d725fde5ef92a7357de2aedb8f80e00032a678024801b2e8801259a0e8d124f38a520621b305c144954d040879dd420138a47040cb0531528c0c20b755e35121062080b821418d156a2cf104028c44b88012093e36f0faff0cfe5fcbffd27f06f2ffbe376750bdfc2995e26b4eefed0bcc7157367dcfaeaaec69f3ff3b76ffdf7fd408190a5b24b43fa1690be46d1bb4086f798fa6c7d9975cb5af2b0f9e3ed7ededd39ad6f0f410b70d4f0f91a68390babee0f9f2a19ba24197231111ad290f9ebe2aaef616e53de83b9d087d4e84a80cd2f3971bf527deebc44e74e21b0a51dfdb55950f7d2e51250a89277fb9d153eab4b242a83aba1649f2ae44f6f44db55d8a45d7def67725b242fa13efa1dd25fadee053da99544e4453a9145d531f15171af1ff1dbc893bf26e8b83aa2911c883b383c373c33aade94d57f9e9a27d7d4a5d37f8f2deffeb589f5295771052f725b255dcc88329fe1e2684fde8033fec491b867d0c2667e018b8e419835e5f192d80e5b224478df1d3c8389f1f2b1981e087f1203f3fc65867248c613863ac5f20649c312ccf48c2f885619f710d47e7d78b46b6f198f3b885478cb30c779171ec493c66dd3186ca18e792499ec938bfc68c3f90317e65ac04d3c058e7f201a486c5c03330962935c6825f19e3ac7d388fb2984fa6e11f252675681f1896f3b8a36539e39a18201cc2b8331b40fef1f301f0a869463263fda40af80afcf94dd37cfc78c4198700977987712673d618f7e01c5c625ace39bf84e00c721e33d6d138331b2506b876bb9159c064b68147acf1e75ede323c7e4e5fbf7f5800fa730fc01f240259e3171e61b886750b3997441a0b699cf3b8332d4683498c613ae34e0e1d9c65af32c33026c2394ba15f3896472d85759988b1bec1b159c6250ce720d9826c41ae40bf7e1c835f39e3da68ea31dbc839e3171e9d704c079e9119933846d04c0ec06b16cb1858d260192bc125c63ae31123e10af250c69167199649ac71c679966123d6a4c638086b4c8363988631e6812dc8320dc3e58833c64418bf66641c1e3326473c946758670bb0d6398f79c44339e31b598663b81c33c69808579065308dc772c418076d5c6357f6d03b48ac710c8f35702c46346b9ab1000360c439bf32ac63534667868471c619637cf3b01f3e53180c8669fdbd64c597269666b8620726dc0a9d2556707d522e8a57328305ba12cec4f7662822865e8e4d92c40a28304672166c41c40a1c3a4333d4c819e2317008b2a2a6232827c340566030807e610800b4c3789c5f0a2cb8f965c9365c35b0365b67b7038b8d0872fc362dc7a6717b2c329afc8facf27bc4fad7ffffff0f801fff9ff4cff4afc1ffd3bc6976fe72d4f7ca925d4081620c56962f99ec45ce7405319826b50c4dc90a89aea479c94aa1911683471a8c03daab6bda24bb60b9507cc5c8b0d86853ab406887a26c89868e3631acb2cf0cc964c4af1e0e28fa306264c3caa36c3452638222571626896c398258e5f186be79a2b8c38a628e5e964c4c91144dc48a4ad1468c898673a138446658bab212147bbc31223f2b262ca66b64d438820956e568d3373d565e0a10db6520abf4828518794606b1c186460d7a530f5732481ad91019062f0fc61d6ce86a013310b9b2000a3959b5d308091028ce884e2f60d57862b010451b405632d8d04b56c6d0414588e80a64436056456a4b4aa499a321b218126d09da6301451aa30d90ec4524a3f692cd8e741fd45094954816004b2892da24f14bc94b46f278ed784066c4580625d24b06b351338ae91891c468e070607063c6aea44192848195acc481f5d47a828af460b411768324d24031da98c10e028bc164630ea9c128140493333a47ced08995a71e3ae251a394cd880559094132f32969461da38ed70dc55d8cd188dc415a10d331e288d9d1155c157172b076d237a32643d07d9002bbf2b043135b7ae0e1061a48880285ca8d72eae7ef030f3ad86089c9929e9100201109f5d060700100f6180124c288a0cb0b901f17e86ed88061a900171b6a50720484a80219daec05812286d0218b0d341860062c3130a1c92007e70517c27cc105b0031184e0081f6b0585d4e9070f192c4b95ada018145d109085680888066e262b613866845080071d4d82240045861c11e08411a8dcb87e8ce061871ba2302d0501d5c08d1668628ba51f3e8062b0970f5386f8a1002ba450420832108000282441f2834706349c828c82ecc5086687207f19bd642b482e1c45d640ce40ec099a13d90299895c84e621478d505847590189a36623d3c83218679341deb20d9b638c3c2365395696190623f38835c6afafc5e819cd80e22880e268e4b5db18d685955943912469300ca2b01a67d81969d068c0e145427134129b21c35103ab18e360ec405b307b5fb4724829f492691e356424058aa59622ce03ab58908e8104b42a8a64982249bb918122edd531a018ab1123c3789039e4152d99990d16ae46138a31b9989cbeb1e594356c61aec81da510ac878ed13d4a1a8afac84ece4bf6caa1a867af1ba3cd6c47e39136dac886903b601cbc6ebc642f281a8e868bd588cd8071a0c1b87addd03d5c9149142f801a85db77410523112de6651bb1bed142c65e6dc62bc39860333024a44c0cfc9a6972a469adb386e952c76438460d6302bbc5f46436d80b86356cf41973465cdad03356b11c240ec5183958d95ee34c6974355671a5f3ed0f13861728ba58a0092592203e2da9b2755404c44710bb8a20043919983125aca9832448c22ce1c40572a0a0d3020b415ca842034c48e0082178b02107078315882f0a6edbc508c04cf1841348041145840f3ce860832448880cc961018d1945101185871d4480e2ab0007bbe68851c5069c088b61c23041093c68a231c3a6010944a0014708a1001f50386104df071c30254152848925225001235a4092220a26969000124730a0061a4a90823502301a78e2080614f14356b1a3458e6c35301dc0a20a259020620820105045001df57de041135391231e4435b61a134b2811c30b55b23afa41008a0c39e24114a3367e07b0606289094480882180f00101564ec86a1280223e781005f9ecd4dc6ce387e900161b98801211408288217c4080952a270820eb0a5f130f80e4e07c9102231ac4c4a002c79609256cc0a4530001945045a5432c8c0e238341a620a3a0c461bc212320db8079f28ed6c138b31bbd43ef1939320e3c03bba16de01a230d3c2326e376d3e618538b61d66ed06ccc70c86c3158f982e5d78b2435d0ffdff8ff0bde9441e0ffdd16a7ab40feae693bcce9287ba62b31caeb4dd9145326c2ff63f0a66c839a4db3774753774db79bee37dd3caa5adef2e0b979baffffe6ffa1b0b29729cb668c8bffdf7e5ad31e9cda35db478f4de3a3c75ed3a70e8c8a69c51260c6b2fcff6f3bb1db4d777fab804d7070709a8a20fdeb464c686dfbfbf2614efbfea8f3ef7813d6058c6b4d5fb7a37bbfecbaddcea2bb86a69f2d91f500f6030c8647d7fef2edee22264c45d7fe3e26acc7bb2d4e8e0983bdbaf8ff1d7c9fd6ae6e2776f73355ddddb24e2d7fdddd9f56de7657e54e9dd8beffaffbffdcffef19dc0193dcf2ff433bfbc76e5be2b91b1a121a0a1a021afa19f219ea19e219da19d2191a1212120a120212fa11f211ea11e211da11d2111a0a120a0a0a020afa09f209ea09e209da09d2091a0212020a020202fa01f201ea01e201da01d2011afa11fa09fa01faf9f9f1f9e9f9e1f9d9f9d1f919f211f209f201f2f9f1f1f1e9f1e1f1d9f1d1f119ea11ea09ea01eaf9e9f1e9e9e9e1e9d9e9d1e919e211e209e201e2f9e1f1e1e9e1e1e1d9e1d1e119da11da09da01daf9d9f1d9e9d9e1d9d9d9d1d919d211d209d201d2f9d1f1d1e9d1e1d1d9d1d1d1a1d2715b1c2171cd79854ebd65cf264d321b1a190d940d6587b0b78dcc4616c2de7befffcff1ff16fc7f05ff3fce904f3611b9c18fe431490c48dcffdb78734cc1ff6fa2df6f13c96c7ebf4df43a75756fd9afe60d3ea5eddeaf5357697e9b08ed6aca9d5ceec3878f9cdb83e7cb85e6f88413db26830cf6cb37daa3ce74e5c3ffc73133ca40d4892a97dabfbeb2487e9bef95ddbf1a9a216fa7562211d1caa6ef30c96fa35d55f9392af9fffde6b8f3db4d5f22706f37edc17713b9e84a6481db89dd2f917d89475ab66d8fa6d8b6658bcc91f68f83a3c1983a0b537ff9ff9adda3c7dea1d98f6ff87f236feadfffeb7853e7d0f6a796ab9b6ff6dd516bda06ddcdbe1bed69ab9423e4c4f37302f1d387ff0ca13a423abdf300090de9a03a3b3b3b3c5ca70bfd0cf9f8a067cf395f97d8e6b4ffbfe4cd0c86dbe20053f56d5920ff7ff3ff63b41366768099b5fcf6b1796c1f7bedaa6faaafff1ff49f9bfc3f076f6623b7c57989429f0ece0ecece8ddbdf2a604e0f8fd0d98780e8d0100fd079f69d1b217be20089c1377daa6a5f377dea6d0efbd4f2132787f8ae442031a70bd960ceffc778daffcffe5ff6ffb1ff2fff1f06cb22f326c6e2df541dbafbf7f2df8c3771ceffdfdec45afe552ec50a7bfbffb57f52081e62e2a3ffa7f12696fa7fdc9b18f8ff3ea83abaa66d77d7d46d715056987376a99aeda6347bedeaeeb13b70a36a4c09180f30721c125948c9e22c32b1308e30721c154b2124711699783495e7b6259edb802802857216999e30b7ed78e930c99075f0038b3b316ee0079ee01fb8c43f50897f6005fe81bd2a5694f807f69a9608f00f24e21f58c23f90887fe0f01f88c53f70cbc83f70e307f682fe813ffe8135ff401ef3c075afe9467bcfd7ca1772aaac8b660102ae2d29e06a380205171a7042c18108cc938d1710225093570ab03d2440c4620b0afba6dbc0751aa66801c258eab530802bbda65e8f058cd5b494c28be311b6b094ad247c95a564c594c38bcb9856539afeb7b7f62fc9aa84efad80afa8245dcd986223ccaf69e9871767a2f2e2382bfc63927a7199a215169e42a5090c29523878716d65624969ea59998115e5c7d4e3c58b33b08abd2a38acaef0cf4a29eb7f4958c5fdfb9f8c4c717c7961c556d352111224ef551182dc81eca57045ca55560a54ac86575264ce842c0a9161c2840973fe60acfdebf5ac4cb99262017923b98ccd2a05a3959e955eaf4ad352149ae3acfdfbb992b20126462e430ab6caf1c3583d237a557eb094fdeba5d0b4d41b39a68235c586f18591cbd8ae7eaeb0c6287eb0b0a4c89c8ffc86b172fcae7abd5e12c65854f6ef7f41186bffa448011ab98c0d4f993225c94a4a2f856252909f55052367aa60e432344c2c2bdbd5d516b69a8181fc66586dd9c8f1c35272fc20a079179a3375a1b98c2dabf8f43f5ed392959e959e95ded60fce0af2eb55c152f60f08cd7b56b26a88614ad6eff7bf620a3f3885ad14f6ef4ad35291e6582068ee4473999b968215e457fc1f075acf6029362d5d917916c6da3f2932ff5f92d5ae6205ef1fb6b26565868d1c3f9ce3d76b4ac2980ad6fefd8fe986e632362baba6a5aecc7112bec2585394602b2cc56aff984acd654c2baba6ff2565159558fdaf69a9d7eb5949418acc715633ac6ce819ae1fab07642e73d35957fbf7bf5f13184b375e7cabca30733cfe92ac663af0abc0cc10a092203ffcfb9f9ec1f2c33fcc23f3a6a5255e685afae0b6b44216f2012984fc32a3ca5698df0f98377dd3d20a99372d0d473efe800c807916ad23ccab306f5afa402fe568be55e508f3aacc97306fda624b57292a09f26bc2fb97642523b3a524c8af696949e64d4b3e643efe807c301fc2bc89c909e6382a6a336a24c0860f627a0360bcce22130698e36c50220cbe00e6b89d2b2cc3b3c80401cc7113d091227816996ec01cf7d4811e3b67914905cc714e4060396791890ae638262e9edba868b500e00bcc71376a1b64398b4c4830c7f15ee8a2c259640a01e6b8a52d5c40e12c3271618e5be2035042c81c0744154094e02c325d9039ce01583c6971169968648efb01022015679169cc1c27044307136791e9c41ce7e4b98d081848049c45261d9edbb69eb8549d451c5cbf9fff31e5303781c69f9914e457fc85b1c5ff86fe378379d1042fdeb4d4dbaad26b02e37f3a7e49e34ff74bfadf0cd7cf490848484ea617e6dacabcdabfa65e951957517e4c1e785e9c71b585c3ca0aff9a9618f01ce31f13abff312de0b98cedaad8d4b4b4d56b5a32e279af8a95053cef352d5979be85f16fab0adebf2a4cae945cd9acae9af05515261d9ecb5c319182f10f1769e022d60c1b617e4a8a4cc5e7668edf55d3920ecf9948f91fd3d3f32b2bd86adcda3f9ce3b7b5ffb77f49ffdb6a5abac0f3ada3e74ac5aba6251ae6bd26308aff63ea792e53f4e9352d0d3ddfc255b6f6af0afe55c1e0b992e21096dfade45b495656c51f06bfa4203fae9f2c895112253cf48f8554307e13b5ed51549223a55725ba3de9b150b14eaa9b1ce1490542ea6e215198527121fb6e95139df4dd8120a46e6fb79bee8e578862e285529d03777c867680393b3e3a3c423c404e3f3f3a3b271ff2b9697bfaae6cebb4a67cbb3cb8bb4a4459e1c97755dba58e58944589ee0dd409fe9f52e166d72d05862b7e74215f37b147b691f38fc340298d5b904350560f6c6c7cfcf0b16ba8d094e675ea468892da24af5337b2f7deab07216c2a34f5f527b4fba24edebe1ab0a1069285271f3df6de31643ce2a9fc8eb2ebae7a87c26e3a39f1bf893aca064fdedb95b8d1be89d6d489c6efe83abe0f85fd7df9ff3f4f8f0e4f139fcdc30788d8844ac123d6403f3c483d7eeb00ed2099688fafa178c5ffebdfe63902b1ec78a01f1e26ddc78f2db477db07f8e57d27f03c75a874ce21ff55c02d95a22630cbff77a9f4e54f7ddd42b675dae899c1cacf74af4c803d3817dec3ffbf6b777bdb23be2ecb234544f423e8f227b78aab1d5da7585465d9d3476c83e8ca7d42e28ab67c6a48a4e2422a2ee4e921fa6698f1e986dc2774f9d44f07ea11e2e1c911ea3cbcfbf41f3488c749a847c7e786bf1cdd2940c13f4f0ff18710f1032affbf04c8aa45e891f0dc00ed2b9bba6d5f42fbcbd7fef2736585a0455c22a2b3a3ac90eeaeecd0ed49c27383933592be2af1c8ff9ba0045d9080f5c1fffb78b389f9ff6cdb41d84f6b5aa5aeec46795737fb6ef74d813b7572223aa541f7ff3193e9c115b7c5397f7076707a6e6e4c0f94fe757a3ee0a95af976bbb0e52e914da57adbf340c8031c1e6c37a5e24736ced3caaa6eba7996deb5a7e7cadb597ad72eace2c3fe16e92a307d5a894ebd5da27476291fda7ff0971b09d9d7250ad93668475722fbba2b7bfe50ea71f6a5a6183b6a1ac4c18e098c305ad92478122c59c1080e7ce870d4c2085f601c87211c44d0a121820400a08b231d7441336306089c23b061870a370820e88b600f0e485f48e28a191d924840c5050b7880049290ed260b6a7e30c1169ca6628b2c0ba0143949628126285d1fe880154d26b844b6ed6b27a24eb1aaca735323b7ed43b507953aca1e795ad396755776b8e4fff1ff7efcf1cb2f50190d4c8dfdcc31a964a2e4e1596468953ee86dcbcf9490ec3fda00898fc56438db4d83efae02c6623159df35ee0dbaf21b3727a7472a874d7170dc9345737288dce1fb06699abc6b97ea4dbb079562b198ec5dbbd4d1d1144f02fae1413299b8f826adef4da9fab6b1c961df6d23645ba7a68d83f6977876aabeab5495e84474b7cba7f6cad301da41fa1184c20357b2e4b0c30d2e40a0c7910720404302358ce0880dd47c3ce100070051f1c141f3013d705201a327d2060ea433a4107245ad898e4fc7c7b3a4e3d3f1ed2cb9dde55ded49aaca3bddf448ef435ca0cf7d09994b4dfc7f77da3f7725faa4a27ebb075de246bb0ae46bdf1db85f9728dce8ca77dade54f5a8a01d1c1f1c9d9b275605f3ff22f8ff10bcb9940504c512178b564559f1bf58fc5c7c5dfc118a5f4209ffb28ffdff9350fc58b168552c9650fc2f1649285e61930914ffcf3aad455e971b49df742d0242aaf2351d7254a50e87bceef2604fe9694ddb77896fe876215fdf930f85ac1022a2b3a3ec29c5d343fce16bfb908a0b5b95bfeceba3e2c21f3da8b8f04cdd356d5faaeeeb2e07fee0e921f6687b8f8a0b57a192ca9794a0ed3d9788c867e407da87c3b47d5d22a1cba77ae01b92b8fc7bf6b665cffdb2ebde4ee946fb7bf62155df6eba7b5069f3f8f95ad6f7437bd04dd7d469b71d55536291dbe2b83959fc3ffef28ff2a2758a5da356265d25a23d78ba46829270b82d0ebaf697aaf35092c3ffebf6d5d7f637f509d9d6c977f6a19b7376292529a05daaed6e4feabd1d72baa99088c85d7b14fb1211b9fd5cb9ca8b804649acd35aa4655f8eaefc88ca93a85cd8b248dc2ade733b072c92954dddb62ffdff1556045d1eecf9fcbf2d1b7437cbbe419707375177db2ed5db8d16e97561faaec4f6ff65bc996489ffdf2fdf1bedac10b7c5417bd0e5c195e8b63839392a2722727d5dc85b2724518f838393c1db559b97f7f669bf2c928de36e95739578aafcdcc1379dda4f6b4adcbde5bb3311a95daaabbeffdf0015ff4d84fa9bb65328efad5bc57bbd3bf9dc2a3e745dae0a715dae9e47b0fc396c7d432797f8f257c82ee92b8b44c977fed001da41eac1be3a403b4842b675e2e931a2c23379d3480eb7c571d5f425be5dc8bafca986866d3b083e725b032d0d7eff1affe32c2bf17fc6ff19ff67fc9ff17fd619ff67fcaff13f89ff4b52931a631e42444910b5c0c35514284d86b8f867855d38048121a51d43388472608743e2929745f20e896ddbdfb508da5574e5c19589cb6bd9b63d52552e2449d4c9df2543213100fd69e549687f8d86bd1bb1eccaa66eaaaa6f2a4c8dbc276fdf9515d25156c85ae4edae93531297134157e210a7242f3109ba3211d2ab7a87c2a3288643f65d928476343d53e2122222a1545f5997f72428febf8b06fe3f034ffcff8ff675b7cd99befc7533e831c50a51f9cb87bc29d5d1db76a99ef4a6544729d511dafb791297bc29d51110139b92377fb8de559a62852cf1ff15e04281ff9fc0ff2bf1ff49fcbf04fe3f02ff8fc4ff43e0ff1ff0ff0ef8ff06fcff96ff3fe2ff1950c4ff13f1ff43fcff0284f87f05fc7f10ff0fc4ff27e0ff7ff87f1ffebf87ffe7e1ff77f87f1dfe3f87ffc7e1ff6ff87f04fc7f96ffb7e1ff6bf8ff03fc1be0ff0bf0ff33fc3f1602c0f0ff2ffcbf0bff3f80ff6fe1ff59f8ff15aefc7f0aff6fe5ffabfcffd6ffa32080ff37a10412a84cf97f29ff9ff5ff5857ff6ff5ff45119efc7f0855ff4ff5ff53ff2ff5ffc4ff7fffdffdff76b8febff0ff55a8ff4fff3ff8ff4ffffdffd1ff3f65f8ff9bd29b3b41b7c539dd5438e463fc7f904e578ecaa53ada797e78867a4ecf908ed04f4f4ff741877a767a86826e8452ddc9e6e14af575bfe97689c177db6cc03b424404f4c3c364af3cf86ed7edea76d3dd33644d1d13febfed43769fe9db85c1376df9ff03b98e91ff0e42ea1237fbbe2e3fdbfed4dfb5c8ffe30fdecc99e27f670747e7e606c7a0129394e4ff8bdecc414a81bced287bde08a57a8edb5fde9e39379de8245d89393e3c3843383a52371d654f1c0de0f0f81b2cd8a7b37fecb5abc1ede3c7ebd4551faab259c5eceee07aa11d338244446e1f56bd3e1f20a460db51de9176513d4bea136be4ffc90ddeac01c26d71d4f425d610a1e242973ff9da3ef4f5eee4ab7ad3964d5b956581556fdaf2a1afca87a2eceba6aa8fbb68fa12876bdacfb41dfa5cfee456f5289edb4af1971b2509fd00f58a1c09115de2cb5ff7c7136be489555dfee443bb4be42f477f00fdf0209de9907d5db7b728ca7d8090fab9b22b552a74fb5b55c4db97aafb00118742feba5d98be2e7f7a5361aafa5cfe04f4c3c3a4ea558967eae494a23ef78955df61dacfdeba3a403b48552d4fcfd4a9afdde7b65d2864817e7890822ec7c0013c4b3a3d433c433f3f3b3a3d433cbd224755277fea4684fd2df2baa911d7ede7c9eb2df1e5eb53ba042d52d57629f6ec4944443c2555e542facb7b2b2457c0840a7401eef1f378404d98f0c1058ee0810589070f4cb1c31061b82d8e8e90d8db1e7cbb0a3a6ad0d9c1d1b969bb931311781375b26a939c1d110ed8e5eca30e8a2cf11d4992c448d1ced9e1e0805dcee621446cd2618190655560f0ed4296558bb012130028b4efda73865ca865c01a87bc14f0ba68ff1dfceb20bd23f84464d70ef4c343cc6136e0e7ba6eda43c8c8a7af2c12b4af4fe992976593822e475242eac02a7e2408ce390205ff3ee149651ea1e53791cb8476aa7488dbe2dc084f2a1628acf245b54570184730001311b5c39ee4ba6c2be44c5d5e6444028c50c10825238e78f140fe5f03450031e4428c0507aeb04255f9f9baacd0f7721fe65ad3a7b4655bf6fdc755fce30d4875a9f4497852fd632adc8efee3297c580ab777a77f1c05146f8f3ad3f71f7779f7edaecbbb8b3580a6beaab6139dfce30ce0279cc072650822efae4c80697bba40e292a130e5aa10aa21efed4bdaaea22b47ea4b5ca23a6c894bd095e8d493aa88454f6b8aaa2cd27b521d25a16b3fdd6ed4f2ae0a795a53975585bcc37e9ebc4e74d293d63e4c2264aa23190a5ba4b63b75b52ba1fd4d5d76d88ddeeebabc29dea2c137655ad9742da2aa5c088f94f0dc400811289ddbcd80af53ecdefde56d1712d7be592644d61ec52a0d79d7f408ab847697097fb9d1cb22e1b148ba14477285fd2d8264ed2daaa64121c137657a9d90ac2db1e85db990e2540d2ea4eab08713d02068f87f0cfce30bfc07a124881e204800c407fe9734f8ff1cffbcbf4dedfc6daaf7b7a92a493930a031742306ff468cf237a205fe2645fb9bd48ebf4931f99b54087f9372e16f523efc4daacbdfa66c345c0c3e6fc610e4cd1894bc194393376300e1cd18aebc19830b6fc6b0c38d66d319dfa623e36d3a17bc4d67c7db7482feff5686f1c59b6162bc19e68237c3dce01042c79b42f0785308a618db6dc908fea654fe4d89c6df946efea6d4e36f4a47fea6f4c10d1913033e6f6220c99b1848dfc440096f62008bcc7633f4b69b216fbb497adb8d07371a32626c3466dcb0d5fcde56437c5b0d95b7d560795b8d106fab59e26d355abcad068cb7ed64bc6da77bdb0ee76d3b206fdb2579dbcee96d3baab7ed4e78db8e86b7ed18f0b65d06deb6fb42b32d0d79db12076f5b4adfb644fcff191b3a7fdb31fadb8eef6f3b537fdbd9fadbce0168dc646c48b4bc0d8904de86e4026f4392c5db9090e06d49c6b725a1f1b624366f9349e16d3246bc4d66026f93b1a206800a70333370ff5f93f1b5c771ab40275381b9450e6f6eb1e5cd2d9c78730b2cdee402bfc985cc9b5cd4bcc9058f37b9587a930baa37b938e14d2e6678938b20dee4c2016f7211c59b5c80e04d2ec078b30bd99b5de078b30ba137bb50f26617e79b5d58bdd90501deec628837bbd0c09b5d9ce0cd12ccbc5902a0374ba0c19b2500be5982286f96a084374bf0c2ffcfd0f819372345fccd8806fe6684eb6f464cf0b723e6df8e60f0ff34197fc3fca2e3cd2f3a6f7e01f2e697a437bfb06f7e19a114fa8fa1f2a690006f0a0df026518a1835f236bb0d89e26f433ef0b72127f81b91f16f4462fc8dc8ccdf88d0fc8d08d0df88f0f81b91257f23d2ff4644f8372254ff4f8bb9191df99b11077f337afa9b11f16f46597f334261c4b327a6d0610a1e88fce39ceeca222122c2482af8c74dba954ddf145dd9b3b7c38db2c1b70b5bdc421e71971d8a22809148c10341e001ffffe380d90fff7fe4cd1cb4f8efb1d1545843a3cffed4f277fbf0b15be2a975d4d044b13e37c5a971f7931adfb671693078b26d68aa7a94af0ae80b9e2defaeafaae56b0ac4d1b12e19bc894313cfb2ad13260e57fe3f293781c3193c5f2eecf5a4d0969f6e6ac45b32c4bcc183582c26739b84c4623119d0b7a6b8037ca4c19b0810fa6db3a64e2c125cb4d927cc03d3985974e02f37c259d9744d776f5961939fefed2e11d1af69f7be64e3fc54e2b9791ba7af6cdb958c760fbeef4a64859c15b2c1caf7ee53bfee84aedc09ed2e115df9d48aaedddd6fafda2fbb0eb7aaa6afbb7bcb776ffbd47edfee4eedde9124a48dc3f79aeea113bb37ced39a0ad9734db79bb62d3fb79ba25d8abb1b5d39da51ceaa407677291edc7d6aefbda6fc05b2dbe553e77e5d36e8f2760bd5de0a59773bb1db4dddbef62720dfacabf2eda62a70577121ce134edf364f6b0adc36bd659d7a8b127707bae9f075b9da5f27bedfeea6c1fd66b0bee97657de852a6fbbb00787ecd04d859b6f37ddc2fea66b7a6eb49f44946d873df836f9fd9a7e5dc82ef96d37dd6e6ae3a22d3bb516d938dcdd374ee976d13565f7cadb40b653fab2eb665ffe72b4ed4c1ba7a7edbb7bf0655fb79f2bfb76d74d9bfc7e4d38dd6d7bf06537bb6ea774074fde7bea5bd95fcbbb7aee0ebca952dfb5139d747765cf967db9aab2e766df335d8942217bee0edce8cadfeef2e01eba9b68e37494a89e4a1b676af852f5b5dd4d8e8c9208212272ab7a94cfa7aa7daaa9c9afa3ec49f46b52d5746af7a96da36e94f720bf619f88dbed52e913df2bcbbadbe56d1cb4a7ea70c83bca9e3bf8a26a4f9db6cd463777f9b9d7224defaee970c8d5b64b25e95515a1fd4d8169906d7bfce5465d057235e552bc9745822ee13dad69f06591a02bc6a101ff78cb3f3ee21f33e01f1bf18f8bf8c744fce321fef102feb1967f2cc43f56c03f0ee21f03f18f13f08f7ff8c73efce31efe310fff78877facc33fcee11fe38011f08fb3fc631bfe710dfff800ff98867f6c807f5c807f3cc33fc6f28f65f8c704f8c731fcff88b76088326140fadf6fb73d754adfb5a3a9151868a0dd7d5ad3a8b307851011111151d93bcaefb7d13575da2fbb0af9477a41e7717a4b5453eec49e1ddd4e2cdb0eb79017c60fbabc07ca7b70bf6b1f72a1e7f9cbd17d33002eff9f03b2d9f5e7fadefea4aafc9c19800727959316ba6e864214f35a68a125f2660b416e8452fdffe84d16befcffcaae32ff0f65b2d05f75bae95237aedbd7f688f0dca03bf1252fab2e717bfab6bdaaed44256e6af4ff3bfe1f091456c892eb7b4df7d0457b5f93982b18f91fa64427fddfe84d15bc0872552ec5b6c321afbf5caaab3da913555e2514128df8cb8daaba066e475921531d893b64f2badc88ca5d76c8b63d164911216def9d2b915d57decaa6e8ebf6a7d468ed465c55e5b9dd75fbc9b6bd2ab67ddd6ee40e852d922b04755d6e24aae5c2b6bf9c69286c915e8e0e99a0a991cad3b6bffc889045579e14743952cf25bee706532c12d5692d62c404e5e961d2d1b46dbb5492a1f0dc80ed492f55779f58236f5f82a6464e3da9abc3b4556295d0b6a7eab0f7212f5547d2cf95135db788ca5f56a9e59d83a7357d5bfe2e795a5374edbddc03c3f08f5fa0b9f08f07805bd832abf8fc9f6b77ddee43d71e7572a0afa7edbba6c1930b6f725c216f6e7111df93d8be2e962d293751adb0bda9a262dbe10d9aba6de6651b180b0d4e10811d0c70144c647d74e3e9b181028eaa96e8f2debe2f744212276cf01f02fcc4cd2ce7e001c407795300c095150ad9d3842caa093858c02afce32bff3885374be86296c0c5ca3fae82b7fe310afff8847f2c807f6cc23f2e018ff08fb5fe31957f3ce51f4bf9c759ff180b5ffd632b1ce51f8bf08fa1fce327ff38847f0cc23faefac754ff78ea1f4bfd63e23f7edd7fdcfe6327ff78f88fd97fbcfe63218efac750ff38fdc7c17ffcf48f9dfe71ffc7e83f3eff31f01ff37ffcfbc73edce41f7bf08f9bfe7107ff98837fbcc13f66c24bff98c93f56fac74bfe7112eefde324ff18c93f3ef28f8dfc630d02f08f8bfc63a47f4ce41f0ff9c747ffd8e81f0bf9c745ff98f78f83fc6320fff8c73ff6f18f7bfc631e4dfc63a22ae6084dfc7f97ca7102f27308a8e7f8741e2720da03e423d477fa0f10bfb9b9b959fb90cd7804d46d71805a5ed47815f0f77389fcecc0b7dd5a41ff6fc19b5a36fe9ff726952e542cf0fbededee77ed6d4b3cb72bb57fbfbd26d93835bb37f8940a773b78a6c1299aedbabde5ead9d1bd51d022022c2e5cd157d6c8e5b1287109da9f561e1452d535405394b884ca11151cffcfa2c425bb07df2397fb5894f8761fda57228b125d73ca00aa80bbedc3fdae3c6db9d4ee2bbbdd35e5efca0a51552e04a7aa476d1625babb07dfedc4ee1f5ae4e4fda2fe9f45894b7a9b129d60328ac75f8efa7c6f777d2c4a74d10e42dab2c197c87defc903f09f9984429b7d57a835dd6e159f52b990b77cb857a2d30eeae9d949dd2a37865391281f0b78e4c0438bac09030c10a2072684364cf1b1a23568c0076888109130b7b851819a076a5d35ced4805a0fb5146a52b52135eea386a3c665d46c9026a0f12f53448086830cb411682a2d8946e332362b1dda0c188e76c56c8b19a762c680590f3319665858330ec2ac57a569966426e52725c8cd8cf752909263c667ccb8f8c1591790292153a1d8b464828c6fe1ac2d2b38cb4ad2d50f16d301645cc6ccba6ab282b3ac5091696d612bac2d8c85af8232fe53ec40c6654cc99271199b5571ff7a556e645c87acc8cb5828f69a9684318ea754c153aaf492b27a49b8842b3c05ab041494887122a8fce0ab1192ac7ef09556d3d216c90d10e34d6058c5b88c8c11b08d1c3f2d80229ed2048655f17f4c52625cc66625e5a7c834458ccb9856584d388d71191b16095bd82a6b0b6761ac992a5b55c85fd352044a7e7514e30188f11faba018955e154cc50a003129c5fd7bc5c0288b5b78ff66c85faf8a923355517219db959e09f2c30b280d50b2505e15cb19b02625ef59c94a520e29adf4ae5451c14a6febf7c3a0e4bd2a417e354adeb382a7ec9face4bdde952b2a29807111c0b88ccd2a0b0a1897b9692a528abfe2ff8a567a54aea62c00c673804d09f2eba5a08545650518270196b57f3d2b3f582a6c068c631581f120b09f5e0c2c865711f289970daf07bcbe9029bcaa40bd92aa60ab2a58cafe5911bdb88c0de32958fb97956465d5b4a485e478ff2e78f1db8b33dd5e5ce6042417c999b8ae72fcb69282fc9a964020f90f2467fa81e43234ccab2b9b959e0982adb6941483fc78454860d3920d925f152179909ae22bd5f856950c8cbb1a185f4bc014ed8bb1839187a920d39e663f03426693852006c68b88318b5258ee940f58d2b01b58970cc6eb86e64d4b5abcf856952e997f31f23099372d31bdb8e42a46deb4d49340e65c3211236f5ac2217fc85c88fcc5ad469945e6380bd8f8ab495f803c8b4c0bc859276060ab51cd712860e1461744735c081948a271169968c81c37e5e8c6d624735b026cf820b645739c8d98060439c1174841ce22d30d9ae340c8a2d7e32c32c1a039eea5a3047416994ed01cc781076fce59642a6a8ef342735c142444f4ce2293169ae3bc7051939c45a62934c77d70050146417585a2b3c8d46a8e8b81935574169996d01c67a40916cf66a40916ef2c32cd32b7390181e5e88c1c27054f08ca0349b29ece22136ee4b8150040053d8b4c34cd7116e492ceb3c8f41a39ae9d31c3ef2c32fda0396ec74b87c937e2040180d4596442a239ae4700aa886791c9c8c871193c80a63d8b4c3fc68db96de70acb308491e33a103605388b4cc291e38688c263006791c9045902402cac9c450adc4042ca5964b222731c1045a0507423c7158500060ace62982ca8a4ed2e87a920061d4308a1992199491200531300304824160e47a3e168a2098a50d20714000681a8727a3e96c8b2388b511842c61943080000002002200233330a08dbc0354e9e167f4c04447859086ee29f1a7e35064e827fe0c582b2e13808ca12a95e8cf215c2837c9a08fc7487a46e4ca356d06a651d9a39a985f82fb0763d554699c73facbfcfb48f7db6a32ce8fe3ab8296ac14dfbd98db262e26b4261f1550d7447f0165f623f072f75d1d53779d96df841c67e1cafa5e0f7ca60b1e0919f92678e050e440a4a3634a1f102fdfa4b94977b99e401ca29d2425dc1fcde01fd57879b06d3c5fae75124a122feaa0f0f15ba8d588d645650499980e1e9784d127aeea6710cfb2b9721a426ecff406486997057e87a07ab8fe03022c6a63a51a6527acd2fd0ec759f15d5e6fe40cb7980216382bb9ada44cc98d8fb2b5b160236c1df3bf282fa342cf83b4d7e7625056827d71021e9e681c18829b7486dce579adfe37beef7d672e93a3afdf5f5604b98877c1d74b34cb66bcb942c62a9bf21fa9d9540fb7a34799c58fc03a3e8d2a3d9687113f99c842d58f3c34c513fdb22792ed2e030f97c88e32205c6e1ee0fc6265ccaae1d856e5b693734e13f2db34794d102da68c78259c57cb9bfb23f0ec5066101afcda12f1819cc78cba8ec6b6ea74368bc0b4987b8ee58c85808d7bc9781b598c105c06e49ab777f9b1a2cf20cdb114a54ab78b3dec2df9c2cbba8860e179b569a52a4385173b83837e6746ef0b99c33fe7a454c114eb9dc8a99425369fff47dd680e797c9b352b2fc70694983bf79b87ca1813e908ff88b26bc06618311350965c70a09eed637a4ec08945683bec67fbe14facec362fa68c3333a9aeab73ef122e8c49097bf70b4b89af98e52f7de95ebb313aedb1a74d8230babf9ba0069fc66c2dbd78fb31eef2d06ef265984685b94e4b9d80d63be4cb6ff5b2f2c1e07b7573bede9cc8c1fb137ea1fe129e823caa7936c8ca40e0877795ff45e28bd3a2d3d27c13e7e57cf1576421f5ff0fa9268adc3db3dfbe9573f3778fccf4e61d7e42ff0997d48f633eb7d878197cae0eae553f7ff155a079767a72a57054fff5f03602a8a1f15d22fecbb4dec3e65bcbace2e11feab69c562a3f87d5d7c2eeb8232df6a7c5b0ebd971af85d8e8ce37c94e7dfdf561a3b02cc89c643b95a1f62fb3d4a37136d4c51c379e13922f1f1dfd5d8647701acb65ad1175de897e897e3ca156fd6f238cb35b51ea5f77e84bfa2e020ac9568d55c7c22d93f1ce8883ad1f5cfbc1942398da588b292201c5f9ae87795997a0f3fed1d0e3bf8c4d84a6cfc75e012241ec60379e9d52dabcd95cc0687a69fc2028015be696038768b58394ade98714168b416be55130953d033c9e72c5df738c3931a197947005c3e1cda579d3eba4d071409b2e0ac6f04bc2997a634c8f885019ae01e32b6babe71df4992903759832a7758fd2530df91c49ebebe2401f383266e0a8dafe4dc3befaa238293f65ddfe0102c634c25cd90b75188541cad6061028e31520f9f1156dcd0027d1a3da1f1ee7287bb87b82f3ab60b883b41713db3a9765c92c5d541cec37e790a73df13775eb4dd8ea3480d31ac04f90bf37d4f751b159a13ab8765ecf1f962827d9922fae4044c95e8c71eae299a42dd971b3c9b41fa2be215522b2b3642fb517f320d7622065050ef2888c257d5eb22be014b658dfa2450eae31b72963fd1831da654fecb0ea3e26763039e7bd44913c126f906d72ff4e78628460665ec406cdd696c3063bdbd27fc74f0a882a010ee5d824a638896f90f1c97d2ac38a2dbfc1c279fdb49f4980abc6912466033885b125c6a0ac6e15c740dcb4084f1a21a2787fec2874fdf46fee73c6813e8029897af217dad8f48cc28662a4f77456dcf80e402f5a0ab85d550816dd7a6ed6713e07ae09e930bc7d478d73c6b18663a84fa611004dad96e12b27fb486cd7c143c809109fb4c8b8caae03c523f01813678d2f31dd5ec45910611cf0aaf34b849dbf2e30df5c24c38731c3ae2002b91739f8b7c612a1143b5ec27fad920e16a6e1bf3a72dc863d6fc104c64bf004557a449aaee03ccda795ba0ee623880771d32aeaa84e2d0034884115134d4b993b65db96d8922748e8dd3dbd5c2ba98575a55d1189f3a9d83e2d2be330189e3fce2b14118daf242de748fbec7d39d2b268659c4980b9d1bbc34c6f7ad18af5d6fe6aacc5efbf0d041010f72f9b8b1591aaba3b49f9821ef6098f47958e2349e05af5570e44602490973a0a172c5c7ac0ccbf98cc1dcb353ae793927858f56543a0a13108fd7ee7bb7946b2913eb15a385c7ebe1c25ee109fa16527ccadc252bf648594c9e532ba95f929f4b7d7d005d7461fc52c7a30e8c11cb3fba733b4bc37b3ee1d0f8d7249f01d7cd6f50319774415ad07fffb2dbacf62390aefd941a30f1b443d4080d44ccd6f20f7c94317041498d2476f56f1b781b5f8265a079ee67034777d98b521b236ea87cc0996d306b63e98687453e439586e28477c5e394483f27ad2832de3bb30355aaa7df3f40f70947c3bd9d83b58d387d790f3842d03c446ec2faad033a769025684591fdbb76e761ab51eee01a85e4bc2e3f43e87b97feb347411f6c7935765f7bf4327d2d9b4610399dfc2fa6c934c320302ec845ad32dd11a12cec74efbacb7e86ff6fe798ba9799318e476471f594a0e1888e37a34396ea3013c73e7d35ffaa966239cc91d3d401e70f401fbfbe31951b414d91ae5f9df8fcf6ed6238919a4013a629cbd1a8ef6f51ba2105eb11b57ee0711a0c85ae52fe4fd1fee796693f2851e3f41f3aeea5fbc685cf695e25202ba8f877d8f8835c1a6259a2352ba259e8fd468ff8e5bf102b44c21ad8c218b8810f4022fc406dbcee50255a4c17a5666c451f4c7fd8b6e85866b619a5e7dc6e17acf87876bf0457098a119cb0e9c58780896acf76113643dccf9b01913d4c2f35923fcf325cc609853e8020801e43851396e094c6f9e00cd3dd045f3e0f68453ec6404c18c63f1a1a0ebb8af9314e3bc70789190ba97214216cbf46b4a256aad0eb53920f0937a80a937e371f87997477a07201eeb70ad446f3388f9b2af6ba4d7adf825d1bb6d6008e6bc75e0e0de3d9969c685322125043efe805760b4119306a73d4310caccbac960b242d9406381de993b4d2a54b0b207ddc64ee76ab1473999e916a34a20baf8d599a53e70b64437d66333fd3f72266c6adcc0fc6df94dacbf0981db0733d1b9665477b3ab838dd6b808f3c32c3d6524dd6e4058af918c6d9f34abf557ae351fa94bcb1de392e281a5dd2ab1fe655e09d483e36c77db21128d1e5551e1568b28f5dfd747c1c88163eed3c9eab2c8a7119233573f7ee83023f1a6673516feb6a278ea2e30e0e1390288f82e68428d3bc061d37594d6a7c9ac2eca933fb07286208320f6b3e49e505f2021774dd736a0b32786619ed8f2fdc7a74b8682bf80768f8eed3e3b3750eb192b6d720287bbb68ba013e0613d38e41c332b6776d98d01d5f584f6ce8b523eaf2fb0012e0fc91c8880356123a392f2718330845714c2cffd80cd0d0176bef917a33495bd69211d8319776d137f73deb85b431c18f17079d711efcfa1f59b4c8ca700721ee596b91c83f0fadf3c8a1e4aa84e349517126456c605f132809a19729ab16fafc3cf103aec6963829e61f7578deec0981d76f30dd7335b92be079a6347ca052cd3e3da7d017b399d6ef3c47aab787e653cac9b7fadcadc9e7cfb7976a657424cfeeecb49a981599f189136e323d955aaf01125bc6caa8d7cb7661b781cdedd78c8095fdb3cf18bcceaef9098b93ab974720677f8afef85abec66503fbd2d76c25bbaf737cd3a6979b78d92f2cf13cfb35f455e4efcf8471ebe1cdf39ac2a1c3fbfbfb956913d1d9b42f4db70fa939a75765638aa56e84811adb7bccc2bf400ee152b604892d82e9536f99f8fe0fe14cc6ac072a3a31cb8a8106ad3f03dc590258ae8116474583eea0e930c680409eb09736f8a16549a03a3d0a9d8c42a4d8f23aac3cc6cef3ae5594a2a2ee427d8120ac875aacfc35edf086432dda0c25d3fdec7496093f546a1dd67ad47459dde952857693cde526fc598f9b35794b5c3a2b228e42a555997ca23c6a31471f6465e489633409eb40b2393372c318e4e2e33e4f3c92d0933cecb8c3cde1800f81a9413eaa90f8a1e21974f035b59a4f10cc6e93a8bca805975bf0dc7b7732702621474d5dd2d19e14ce8b49f90e54e68ff0b215aeb40fb0e83fc76cc26b775f19a12283418a44649c12d16a868564e966b749541351de9ca01dcb0a3e07ab3c779b747eb121d002b5b4521dbb8ba85ab2ff01b8670681f35de08a48aed702040b6914269a696f371dde53e2303e3a1785c6a942514a5bdd188a7438ea11e0cd143da184d793a79578aa899ec112d1515ecd06932281ef9cc3a5fb7582ed0b751419076857f5bc612307572c31136bec4364acf27c61682f9b4f2af750e384dd5462e45315f042447f89a91a54be32da6991fbf593928694a1bbfeb3a3cf80f3ddb1b771417e33937d908ead597b072c4dc2ca62fe27f23d87e2043e38bce717c84d0a246b71de438547bb40675a409c8d582aecbde2f4e54a8a71f07ca82322a3c7a94e43698e1ebc5e3cc15cb1b978e59d9605310b807ca9b541e8bb3ae12d8d35a8743b828035885cc87fbd10b0d5d39224b1fd179badfc4e9d88f2e6872039473618c73501a0744627981f0e83311bed1b2f4a2fb7fc8f63b84bb27dab4feef4f16ba97f3782563ee7a5a96fb427668b0f43ece7417188923df6aad2143535a4bea8f9eb99654ebc443e05af3b1a91d53e5896212702439ac623ef823cf5af60f2b573f00a26357eb7c94eb070df7c38c4e1db56a942cac35a42bb502e518a3d3f57088b122326497a05e5e8b56b37e908b2946019dcb512fec8e5e4600b1a94a78b508988b2c90c47307f421c197a7cc9c3169489663013b68006b33250b650607e4f906cdf4c5b27f0f24d902426bcc1b1048690200f4bf108388c507577cb8bb03f4408d510fc1e21041200412b45f8a00fa8a7077ae58179ee80ba0e46a056d6975adf1737b7f33ab981bdce975e90e33645b39c97d669ceedba2c32ebe49e76decb8e1f87c8aba77b1504120e1616dd49525c1cc65e652b35de4a93c17b49dce2e0a0871b06417601cfca1b193e373954a7625ebaadb3641ea462837fbf5e67af310eff44ceb961a93788ca36691693504dfe31d3572640ee33f3a59cdc0c3db816c605289b82e80708daf85fa90aa1a23410b0d3ff9fda2de3f29d9610c08c108082e024f1633536a77c3d227275ca5f53c81acbce015076c5032118748c8134c2508007b0d70d407a3cc5384266301d3a1884ebf9ee9261bf412538732eb9f4ceff7399c2dea97fe72cf573e9b3fecedb8942a97fdf7f4aa1b6e2065fe723cedd62c7ca71f2bc3959d4206b6daa2d2d7b9b37efea45522e1345e7da8e725d8d8fd2a77c0861cfa3b220107997b94ec7f5cf7666f69a54853f0d52e423114fdc51c242a1110a9b259fbf80b8657f32c4d6c7c0dce5ef2e5ccf8bacf8a3df0031464147011f74659f394e3b7f2df6de38b71c3a70fa53cd3b67967f92ce00de4340ce69a11caac3a6deb0baa6c1f4bf15b707aa220900ea5df5f86242b3ef76e46d754fd5cffef619b6329acdb1d122bffd4e98bd2daf9c6f436962a74cb775d2cbb0f0c480e53e0e5a7319c61797d962c7dae5402699ba5be0591bab7eecaeb76139dbd9968071a00f1ec3c33110d8b972702fe4512865912e4a2f486cf2a8b15dd1c036d59801097b3b1a4a8e8ebefa4aa0088cdc9241831c7a105a2b6f70c832b6e1455be9617f9c1f53e2cb972363ec65a5ca97d73971ddb36dd4cded584add87e3e01ca14e8bf9ebd18c0c3d2f8eae29ca5a8c8c22d3bfa11d5882e08cbd7fec1672360fd6dda5ff4ce75ae2cd69805c3f93c52321666d160778984c96473d3648d692ff6928b187441b8a689eb6b9118e26bb34734242291f10fd1b371b23e0f40f0446e065829541819d4b5bc1fc0309a8d1b5008ef29b4e7816fc769c02d5f12d10564d46b9cdcb315c5ce63836415c262d62882e8bd2d09abfe70e465ea9002295628e1b4e1eecfd427093743588ba571468e19277e2c865d0cca5145291a4cc46008474ff6914602cbb71f1a9a3c52161c53f81d1f8af3591ddaa3c060f9ce1c5bb9af867bbf4ede0df27f88efe9b4b88af492a027c9562c808f646d105184e4f9127c9c5a5e252e75d0ebfc4809bcc649e43951518b24063f4002e02a2628830cc028501ccdf6b54c3bc888e3e191933e128230158362d5cd3501b412705387c84b87c31ad6e2e3c7c14d23c3f19aefc5bf86ee872f277b9a07a0375df3f1855c50fa99b6fe02f90d5467fdf3e5f755ce96dd2b70da2cf083a2a5a11b23ae9192c72ae0cca2b13aa49e798fcc1568610cf5dbaf1024571953742d18ed74fae1f29bd630418cf02f82bdfc92e7e8e0cfb94d4b10f0f369786722b1abd9b2863e5426e9e9d6ac32c023f63837a58f289e734a97a6b49a48b70d0e70c77de03771b3e67ce7902dd31c82a6d53c60969fe6b7ceee4c1b7d7e94758eb9ad97215370101c368db656079547bd1ee3836f7daf65cb0129aef8d3ca6d32b3360b179b511df67a597b83677f0d5a4a1e50ed433e5ce670be40f9952eceb8639b03463853860e43b6bd97004d92609512061204f904806ea02901efa770ab04c65d8dc17af0ce6476119205f374ac8df47a5df038a07ce6e3208b5f60aa00f3651d009e539d3ae7acd3504e881db2149d48f003850551d05b04af4c602924872cf015a62106987578b3ec980ffcc4320c3d0cc9bcae9eb66c1c2c6689ced23b56f55cd799ee2d9cf7ae5947bb20477d151f9b251f081a9b41f82f249db2b61c778835028f85824229234cd47c3e009bb89821fb934f53b61805907ae6f14db4fc22bf1dac1843474c805549a5605c28fa6097ddfc340dd3f06e314381c9cf1f4bdf55f46c1cb1f9acbe9c6eb77281298ffd84326a43694e079e71baf04fc5fa7ebaeec60093097fb1415bca6c3236e0730c94e4a6bd2522e5948ac2b98ba2c96f5b705ae244af457f5facb496cdd185a28a7f5f2072ea34086688b24ba16092c4bd75b1dc61b5784d53a1ec8a84d44b68748a389dd19ed58c8faf92f9ffa49fcc408c2524c291d57ab44a330b64d2bb3c25e82430824bc740c8ac2c21f7dac4ff53ddffbd03a8fe4a07a9d4c80f583c0cb254d15146e0547172a868042757c3baf3b42dcc54ba4c52fee21378e04835fc2072674acf34a8a8bfccc56f3eda8ddda0d7ef1f517a264731876c5653cea668f64fdd0b7f121d1977028fa2ec555b471c25c5cc9e16b261550acc690c6e481f4163f0d768b83d96bff955843a3f7c2efb56d88ae1c12c9c21872aab3f07e189b3ea0cbafc860e8b1c77b2eab5bea96393f881ed6e82bdd9ec31e4d4f8237bcf8389bff0a672ed8c22c9baf59c8fb1831580eef859b6c50afb457f623039c044be61702289b469da80462ab6736af5231229cb1881d43f5d47c83728000a465e7a838b35009fdd3154864eed796075caf65dc3e8e60f2bb2ce3b31cbffbe9c9f04bff6d4806b4479a0103b4a24520ce6225d162b1f94449fed164bf6580b02e6abf3373cf35cba46e4ca554731d5b1083df1d6bee440e0b19a9da631cf3580f80fa9a73edd5bf12b554df9bfb7ee065ade8ff60567ccd28d377cecd3b0bcaa4e229e4837a7bfab427116aabcd4aad9047c7f78f89479f570e151b40316b1a39070f37e5fd817c3e788d09843dac1b8b97c7af0e35356c3913fd1bf78a91ff34cd1f80388cfd20ccd648dea9e32ccaf352bdb1dc8b1539d4b49644c43f377c73bcc46d5c2c63eeb927f1f7ef74dad9bfbdd8084ba5853211dd666bfb65a2cfb631ef3623c0642d2330e3d47eb537e0858c0a58b1ecb6c1891344965609f9c7f8f652661b356d7bcc4dfc9871ad2bc7ec04854a293d0e407ee777155d61471bba6d4ff5696c7009416fa621934cb55b603b8965d2799e6b0743712e899899f8318f85ef369134c31ca2730a75001a9828ef44f7e591966bae98f5d3a8011336c24c4d7489e67a824ec20a832bc729ee937125dc8a4f30cf19240d631ee5c656523696741d0e90c8e82a61341f2a63e733f7f7bc6800f350e00048e24539e17da5f9924560368b2f2c7ca45bbc1d65d462fe1653b05857a45b56982e65ddbb8c44a25eac642e4b864fd95bc567e8cb05e06aba78124c61b09f31fe46cc115e8c0e2d273a95ef448f7f919d405094c26d7541c7a24ba675730d12bfa50a9ae37e0fb3c64d81dfe1cfdf96a90224e32f1b691968549486690879e2d0b72120f22566bb7dc1fb6c9900560fa66207af1d5cb9501dfbc728e5081e9e5a7193d8c3d88969197db3ef94d5b542b7f5e39b5c5cea90c29e4877b0d16d0601aaa0d2281ad73d3b2fd84ee82cd1a8b816882f458f22baeaaa5a46f41d564d42172df831bb750155194d523ff8ce001bd4407b83a4331a7318c6a77d57a533119694d9b968e012b1615d7dff2c8089f948a447a98459b9f94496241a66fe2f815840da99fdc6c394eab6c760c54ff5ed1cfd80c62bec1748315367002d525b2c9556cb66c5c52333e06dd3ab9199d34349faaf34a2351ac0f7c0e50b09b21cc274b6e22f0a06a47240a47a0ac07f558733d4481b79bd53e2112a8d5096d7a469d1a743403d0f9fb654f3f1b08f826a9fa6e33048ac962bc4b0e1ef520ff0bb797ab2b94e51906273e970b7ed6c424ad954bbf01f283fc8428be4fe998f1eac8f3b0c8d44763c318e2c9774cd486fa6f313018affa909636f7e76e4fd29b94e3695dea1574fd00ca7486cb5a1e40de63940221b59a2c45f051e7c69c41663833a4bcb68d6e81af277df77be2f3b241c3efa4bd7953cc45b63bb3929bec242d8521dfb9d65269b1cc940c709ddbe373fd78063150130425f736eec99d49959289001a164ba69450f41e203816cd55c2e31d8d47b6e315b1484760990c7e2a74e761cac82930a3bc467c73950d5aa354b47800e8648506048cb4bc36d1a2806b187c2dad3f814ef07ffffb942173f328db23182cae43d751547c936ede74962e87d8e51a37df44fba4dfee8cbb9f7fa386df5a4350737dbda965c3c12136d1f9ed1549478f4a85df65b0ebd2a21fe973aa20348b11738e86d59807f1874f49cc9ffe3a18d9506336b64543fa5b1e07b20505edbd05c51d9573d4d8e35b025630fd256f90b6a74e6af09b37f02ca94ff107fe9fc8f843dc80ed735a24bc91f2aacb5f798a833846f497461fd55229fda22df6f69fea8e9c8824bb71879bc461f5f48419fdf0db612b246d8311158eb6456d50b43d2d9c7838cbff56ff1561e3eceae3ff32f86eb5f8e5337bc5e40e7c40e3900f9c8137fe2ab330b44bffd1e87ce13f7f74a1cae916c126c5197861226e013b98ff4fa8f69202e376ff7fba63a776df00fb109dfd93b404d45cdead115ade6cef80f2cafda012e33b5d5f04339206246a65f0dda93051be3c729dda39fd91f17bde1d71c37e2d58d73820523f618d272366d08b48ec9a9723b5f62bd517958af3bcd374366dd1181d67ff973e4cfbcf9ad3f079c4fd80f7d7c20878580f1064d887b67806a4279bc0f736fd0ff7ef254b08911dcd3f300866ee0afbf01e7c78d056c99d4defd6fe4c8697f20e8cb01eb22c6c9c81702557c0735987a199dd028639db8f9303e492f65f3e0e70fee9711fb5f7443c6d309b2e65fb30221d6c955ac8ba0f784be8b8a438260eeb23dc4f80d8ee614c06f673b8c2d0ba409335250d9fbe94f008ff3aaae3c288e70d1d296033e9d9715509ea639f4654340b3f626e664601bdd4c705b4c16b6775dde0db25cfa4a05919ebdfa8201e47591a7ef4c0df96ce56eb333af3645f2b620a1d1b506c14af9a20e0901704b214fe98eedcd0c3a25aace57e71e221dbb75eaa035044993e4263c243f92112ee04622b945ceff541d45237e1ab61e87221990a9a1c156f3c49b9e5e9c45e2a86cee1f8dbd6cd41d3c07254b35d95a09b9eebaac6c2c8d26aa4fc9055c81c636810ee0a6933e5e33b70cd07908a7d4b04dab7d7f29ceccd8bbef3d1bb343a6f2bc32fb9b519ea0ab5831f25f20d0e153345d8a05d939bbae3c719f2d28344f82be9ed938283af48858b5eefc5d266dbaf055224728df5dda9d4b1e076f01569fb7d5bf020cfda10b8dd5ef4a38aeaf8c817ef59daf1997effc2ad9479fc93eddd0434d4fadb3936a6a0bc7d421d6b436582d655739d3c35adebfb1be7e8023e78ee2d922697b9caadd639dd915b9c07a7974cc20c814dd9cbdd91a372fc1af608ae45e73e81c4f010f9b68983072fdd58afc7ad00a81edef431a35f9f5b283d0a503422c3e2330c686480c628bde346a5a5c4a7e7b9732841bd9e49679ca0f792477001ead200a6bebe5e53c7af69e8eb9d7f6d56d46ae8e99d205327e38156496f1dd96568b0bc111711433bba1d51f5ebc94429b1e04f7737f1244892b432a06e90026a7258bf1e9feadb1e066597bf4860132fd5113ead3dc54bea6cf843722239a6dc4351720c0835dce80f86687446ea1a479e101e41a3850a83c1883479c5b9899407a2921f7b02b28adedd9fde15f51a931560320239e44b2a2224c1834b76914a3b08389b5290aa566d3659b5afaacc8cdfd19fbf2fec6357a0b5c06fe5964dd8a473d2379bbaff03474c0958884d45399ce6671dd378157afda05f02a237b5008a2c76c8caa412bfe9fdc76e8e908aa839f2f4c6d2e803d9e01a6070ef5c51dd3a6571687a91beadc44c2d2ce7d1284e436a9d8f99491f70ab696b97feffc5c6582f671de37b557206bce25681ff6d3ab0775e5ad95ee302b3adf89aac10ff37c77db5d01da231f170e37bad828b9f92eff591a619b4fbcfca7e734b6cd4fd8d0bda66f82ecf631d882e091370264e7d31ccc7cde9f464be8683ed922f8e3c6be8a08969fc8819622e5cdc1b7287a85249a6ebacd99db5804a664095618546d087a217db99118ab1593ece59c59656a329f1d74ea9773fad8e5a00c88b5e8729ad33837972b57fe543bf81c2fc93d382f5c0f8f0bcde318c8d963b319731f9b35f2d960319956a99cfee42c6b07a5411350488671bed51bc993a081c5a031a9182175809610060db4af4fe004b74dc5749d5e0ec4990519054a180b1280d2e881d21d9e618e123ea1486125055ab528f174a98032e7a9ab941f706c1e1d8ca063d2dd342deb86f06c58f6a846c1469146053c1fc67be32c42f71c4b06bae5f7100b77f5e3846e806013649b5f1d24e77c504ba9ddf42c6571b0f24125b06ada9b927f87ad311ceb64a0f774401a79bb3ed629390f0988412a014e848ae5120205d4fd617f3bd668f2ee347930df7e142a2d5c7085e7d629f25546101c24fa8521f04dd739da48bfb44a2a6d0c76131084c5e885e99434ff6e5e89fef9566e2b4086bd60d5c79ec4cb885250c63c54c754c4228b798042cb687f68a2949496f5351584b2ea3a69598778e6357c27dc71f6fddef26897f9d4305f641dbc360ca10802f106052034cb106c6814c86d2bb7e03f412dbe085176a330a70f537565a4ad75dfe1f091445b8b0ef6ca79a0bc37d7e37458f66a18aadf21a405c0503064722232fb9b98c48b96e638c90dd86e2b181b120bf1aef42c166a3afb95b77982b4d1480a3c734594b1acc2a60eaadc6546c77e31b10fafdec1139104787f87fa3970ae9c3175c69def505147807eb70e35b316c63b0acb18477989ea205fd0ecc46be036dc450e8340f201edfcde23bac64eb82cedb2d0f498e443f0f51d0c4b70062f8a6fbd9abce2a9f9eee7c6c6f8437ee1571b41af2ab5716fd044f1065f807dcfbeb5d05cdf8002b2d263c2550583e0dc49f34c679cce6559b3a37c35db1ccc5db87d8e5119ee3886dd39abbe384f73bae8d0384c6130856c0aadd5852f18f6041688aa84f558f41e78180b24c8a07449e9e3908b51340e461961424cdd04649ebd75c2623e241b260dbbc5e1b7eb7ab1b2d443ba72012b5caf70a0e90477322b151291558ed71e65b0b2483cf36b5c7012d0c8202abb60888ee18e15a4911e5fb6544b24a0c5ddf35ace38e6b57a5eb225dac0cd43e0c445b81a36d5aae7004a1dd82672af0a0820f1267aaafbbf2dd671adb6fcceecfc2cda896037a7706c2448eafad6f53aa38022adaa4085a6ef7dc7a513f0ee696813f1e0db0b62b5306c050deb4cfff52fdeae1d54b52b5147be7807b42ea2be13c470a5b091bbbdc9ae04744d707bad5ce0c6d1e266604ccd41a6edb2c7d1e35397535cc8610aa69b4eec4c8974938239fd13f1e4ee6a87469e3bf05b5f6778cbd602818e8d92e247a8568c813b173defd57afe356ca4ad9be06a7146287d4d1c85329e08ba05ba132d143941e48bfb31fb0bfa38664ccb121d7bfab68a5f69ecc391f072c66b6034fb5b60db4272c020b82f03c5a2aea65b3c445a5f4770a757280492d00ad1824da73e74f6b463c654b61064fd47c3e535f0c17280e7c92cd1f7fbe5630685e981728aa5098a9bee672dc8f904ded48b6a6956d95ea15445e1270827a3c704f966a81316016a72a1e097eff99ec94d4f69de5e1a96823daa24b77d0d5c01d996f971f862dda6ffb8784b578a8578d29acfcf1e238cd07e686dec75d7949f713e024dd508c3382eba03a28ef64adba40bea06de57f222ef1cddeadf91043ad944f0c38d1cffe113b98a92c1817c55220db51a70e4df293b39abbf541ce699922ba01169f2c2508cd6c2e961e857540d23dc0fa500821c03d8182ab48626503f1ef624b09ea9ecd2f7a7f72e2f4177dd75cd5401d2d2fbf972cf23b06178dfab52d5ced0e13633ae77e37f6840f23106a413fa74fd2e2a7913867b3582f959f55d800675a1091a31eb397fa44dd3e3d97af56f480284d7a67ccc9a49ff8b844114facefc0e23ac701b661aa7bdee5055c2cca40faca7be9dcfd05c4799dcd501e116df58684c3a9ba009163d02637c3338899d22568b517c511771b44ef0276f0a7fa086f8c3f6e2efe18e3f238afc79b392f6114ca803d33be72c5592d7987ad899813fef5572cdb1ffb2859a3adff93a83d27566318cd06ab6a81a32ac4f07ecd2c478f6a915bd72b8286c08ea13e3ed2f9aa12c0831f18c7548069fbd44a82b1338bda08a94305d695160e6fba539ec4364f8c61a12bd24f67af35237c1495dad1bb9da7900f7dd923b148d1c2cf089958f0c258635359a649d4795a150cd00e4cd9f687b04bf6d9679bcd71984b38fa96e88e71da3d548f792c8b126896e40ed41d0fffd82b9550ee5e72b5db129937fa6106c67c93a9b086cddcdf96d97dde6690b427a5c9e010ba0cac01cca264c120c74adb8e22e853b29addc70f9037ab9c601eac55c2c89eacd5028b0d70ef447bed2fd62ca0fac7d0b3e0d9d3aa5acecc9c764634a02c485e2ec082e6a70fd1b2e8c8bd586224e88f05c9198f51cd1a2c82d2d5b8216017f55ce484ab638395f53038220c88c9b0510ceac01a64fe1b012eb76a302e95821189c7aab11f599929e0a929461a89bbf3305aceae4ca48879abb1d8c79440cb1089f0ecc97ac44bc2191c0250919f5ee4e9918533ff6103f1be5f7a99bcbe2140b3df94df8c18c51f8aaf44291a84e3a4f73dc8924dec6069a9d2c55121359ebb0ce04fa4e27f92ca01201a9356c7ac8121dda5d1ec43b7b9a79553c727d3653238fa83635dbcb4ac9e02d15fa7a5c11882bf1db7899cf92de1d060c79b74638c08f0844fc8914cf07f252eaa42b416b3466c471261c950550fd8630def36db983710e95a75eedb9f54664faebaffc06d4d4424be5f7ce1dffd337da0dd0e7ff333a306f8277235d91ac9e80e1d13c7a38961bfa9f1948b60f6a58f19076030661a26920543f3436a43db5c560ca9778e16bc22bf54acafe1a160e30e2b87daf5e05df7e56c94635e1a54c011157a3856559661bb7d0a52ec5d91d8c837da5f22aa25080b5f56848ea36b2d709869b8bfb1aac407b9b996fdbc6075acc34bc1204179d4b49eeedb978dfc39b78c50181b82a13eeff634e7dcc63615b8301f641d72c0410f8e8ebe70362fdd1e11027252fce955977401c4520a9c90d6c8f7e6e912083c7f9f2717a36563c795f648c2018b07cd457cc1e35da7911f09463facae3a086e72fe2989238277641f967c5705a8cbebc06add17f50e45394391b2286109866ac1a1357da4dd752605406a7999603864360b7d226e794de82ab8671fb76eb8e3a3e8455b89a4ecad42413a0c60868f551b630be53aa47a70ee80020271d31568c747319105244b74ef417808006b61193cceef6c987eb74ed43c04bc6c2fdda0b5ea009831f232765b03d5b95854649116ee540cbeca6b05a16ff8451260412a204bcfb3fd0d00a3f6828df4176523f0dba5eaf174b453e13cc708e08b412d47a7aa5e3e2563f64113b7eb93d874c1e5846dfc44a48ec2b8d40f303c7caea091ac442b88f626a6710d9cdd81316c4a0a706d806e66f0e417317a4423fe2d7fdcc92d0135a06fe33b11dd79a03f1e81d64abfd6f229894ce66f89c437bcf7b192f1caabf09179c4ff74514b1ee3fe805201265c98ce63b550e9bcc71b10d966c2210255d34ceeb85053505cef2a2abdf63bc2e63a5c3439df9379daaa48752e4dc750b92f656779ab31850dd4ff25b121b188f93bc5455feaa0bc039aadad733da6a3d1c5c3f56dc8d5789ce55ec2a4ac3f8e7b970a6e593f417732cc64bea050f5cca8d291b2681745c498bad8a06793d81ac5f3cfc14a194c1d870d5f66961ca7757b982aec1f2ade15c391960e1f1b52f1ddf507da0a68f3399dc366fbf6f45961871132e84bf4ec2732751b18c53dabd2c43b3f1120fadc26f2aa396b1fbc5da3faf287438b5bd10526ad4e6ff595f14ed6a924df359231105454073e2440e9a73078ee74a00a019e7819f8428e09c11f42b5d20e03b5f011d7c807c937427e2542f700273f864ad535472a89887cc0016cee82f5a8c792fa1f06b925f803e96c003cf5499470af4da6f131115d0cbed26979d66d3672fb6b1550bbd6a86800c0b5533f72ee84d0c98427842a692f1832d1330a8679492cf9fa3bf05a1d8a015e97e1875f86b184b73bbca8c5c808b284a89243b2fbce69d538ad9956e7d91fa36092ebf8168a85d75c62030dede2eade3210d98e84a0918095d03c1895256eb754771c6f27b0667e6714dee0136c38966f4691244ed12de3bb96d68d61236922e6029b846c4dfd42c0e03245c7c089c25e72cbb223a8782a2233376bd6920275c8185d969b7db21371f5e9c381decb41049ebc36cec092a6639d0d000f9f31da4ff609d4e2ddf0828d5d787808d47f49c38b79d88503d2629f10a29da835a2c358dd53f321beb124694f122bfedc29882f080d674c37563a5cb38f4a35d6448c2c7c69282d6a4ed2873369f7411acab9f81544559c1d05d189107d53c1b9b416d6e3185d2db55b530949f12492b1ccb9053c9ce2b05e48ce4c10a569404c81aed7038a9a517d6e84d33a810f5b9c7ce097b4eb09268b7b2058928c4380f5c45fd0ec239873aa57bff6e9e8c8d6fbcd2c30a1739a48486eefb529b471528342855901c6b28a4627ce1683a2f2e4601c21cbf27318d919a0dc63e33702124268f6f6ad8e868ca9e50d31d34f4fc1f3d35495aa4a4e5d33df5855b9f987fb2d13c65a01054cae648cf318d0e3430daefef4f035241173c9313a9c1fe3acb527b27b9b19c3fc9c874ac537f298189b837a5613c5f38f2a7961d0e7bab4a5eabeb57453e2260e5f576688dd53d1b51a7ed48993bddc27793e5d72097e5530e368f87b87ad9c876234e1b6c95000e739e9d0548e9418d8d0d04f314362f2caa9f79d394fe894f9306b911d6fbeddaa555f55cbe449fcfaadbb7d8c5ca743e2116a629bb23023d53827bea587f7ca6325aff82b84d7e17b7c991732569f4d9525772710521e4ca2294b56733d8f7ad6c3b2cbe580ecd5786ce9ebff99ae5fe83a409a063dc7f0739c7a4c4aa0beb11eaecc9d8ddecb0374be065a5d582306ed57402c8cd4534899a591f58a47c20206f39b79261b3717be06933d040d524cb1a4f729d598964604f2408160bd2fdb6a43778ac20471236e1ee85e719fc6fde1fa3caa257e944b4141e020107370c9b845a33ba69197b5d3ddb5bc46e4c6c14674034cb3efbed378cfc71e09494bf383442a9f5cfb8fef84802f3d7dbac5bc535d146d1dbafeb3498687e6915abff2240ef38b377d8ecc82e13441b304e793564ce3ca950c42eb4372db4ef43e689c45d3d43fb5b4c977ec6ea38b00a1b3dffb32ac284d433ef0ec9bdd82475f22500aec2f12f3deae663f3bb0b139ac7c9b15f012dc152e23bc64ec5af47d05cd45ce1252e48e771b69fa3a84471317c73ef831fdf8b08bb12c8d281cff4687a93f462070a6f111247b63f83508f1836d63628b719f5ca5b367481483fcedb60bf53272b8001788aeb7d1874c2110468055571cd8d2734e8e172c76c5f7191452eb10ab7e778f383246ea965788ada3aa36e59b2381cd239c332fbf248c18a4e7a8325e61acf12f3f0218b8c2eb19adac18906962b212c9f9906592b0acd5c17ff72d061dbe4869e44776f9483a0abb4f662d98e439b1608d07bb84a2654c99204019bf327ce96e77e5cebf20a71e6d80082f4138f1d8a0f780fa3a29deba003e26af9f5b6347678184db58bdb0542681448062bbdc63bc41aff86008c7e2bcaeb1a4f88e304b1745e213055cd02200f83071ac060a72bfdf3e557b5d0a2a293e0221f8e56c43171753d83708fd48dcc71db1c8997fcfe537185c95c93b08733f4a8781f3a927d7104f102b6ee1a2d4fd2eaae984824e1ff25018e7062e4a7a8d7e434bfc0abe92d1be4ece4a08b58028fc93097cba8870c4d42930847cc030d0fb4209a5509ec3cc0d0f49aa010bbf522149c3e571259b51ebf91d149695f3639e90c95569a3d3d6cddb2557c5eda793ca7317ed4c829b4e00c9083a84202ba00004f1f4160d9bc9ad8cf7fdc9b07daa19b1e016deb2c607aa9f76f3ee349dd3211b95a8572a72d62064ebda1bc3cfc7c7f7eaa89a0971d381d6b235743ad1bb69cb980682c42abd3d6de926351e9a54319d24d1e562673af25df888120ac7aeef79a7aa1d89fac164b044d671e8cd36d529fbfee550d30d6807cbed7a8ae6cd3c8d760111196c28db5219999fa257ea21adb574dafc51524a4ea1fe913d91195f2fe0c9932bdc1c2f19a40d23c97178bc834fe50154e36deeda996edee80e56368dd8284486c4127eba881cd1120db59659e5e89d992489c4c6bf0a0e83a692bb1ed28f86582d30ba427016bd4a545d78b4a80b07d2c02f713535cd34017639dfd997932e744068d24ff51657a43b8cd0c6671dd18e4bcad8b1a6047d07672d83c0d80ec9e77e7c49ff959dac9409fe0c6ab74a8d08fae46d3376f989a02eff1fb7caff39bec6a79c1345dafd7657c2eec484b88c8e10f22b55ef831aea0ca869a8e1cb3031eabfe1a2ff06afff8c4fbf9107248fff4d42efc182b1d716341b60564f0d05ce1ec23aef4875361c13c8d03932918cec828705061e807b7fdc5097cf6552809282aabd2ae2462c83ae81172d67a80fc7a2abf666c4a07a287b05cf360c17b4df8461a48197598dcd9211c97cb0bedfdf4995d3da620dd2d1d741740d80073d71c5f5cf8eba64148d9c3f24c902b87fe5ad76308383cb743753970a0bcf3778d492dd39d150c148f90e9f01b7951599d90af288c613e29bcf3319167bdbbc4e1de4004c1f2e54cfb16b240fdc4f2ab25d6151cd67a477f28004031bfb3a7cac4b5339716aec6a42d61007b2281e0c4a8ac0eb555f7de90c45c9d76e2037525d2b50e4dbcf3fba6b5deb2ae4b93eefbcdece26a1ad72dcb1aca749d9bb9e37bb38c4b16e2ee34d728db5acbbe4e59568756f8b95eb7fb9eda59a915f3f8447eb7a05c679440b5dbbd9a094884a0a5ba0adc0db19fdad2e4f0b66799f72ae6e1bec04ed859cb27035b9fcdf4383d8d42d1c18403a59d7b858be97b513878fd4785c4f6b25eea6f6261bb7ed630afc1097d23ba357f48634e6dfc482029adeb4f3476688069d499063c1ca89d69e0417fa2f1da4440b233677e067c1bac5569d32e627debd534793efaee79fdc20efbc22b4c932a5b4bfe5f842d3d14c492509985e108a3a5f25a6fc1533b9c0e699a548fe067fb75c19c27109972eca426554af0161587ed2f71e9a082de3b6f327a4f7e35c4074f41cf66668dc647d13196ecba9b32ec78683c50460f54f4c2e8cc566930083058dcaab49e3b6a2aef5c48f115a434354180aa8174f3d405c505405a4ae47eca68e8df3942138a1398b7cefdd1ad0608508bce21dc3af13371693bb1489389578ac512258aa3916495c7eeb524ae4730cb9d4115d50024840bd09d73cd3bf289d2af63ac61462040ca9ac4a3326b2aa49199964ebae5ea4b6ff1732f0988bff9bd7785b3dbeeed80139cd78231eae821fa82083f3d27e4644d1a0e136e664e5fa98013ecd3f965c03b974e9d4d604394f766269edbaa60ee9fc9df8f6b043e4e60970706b371497cc9d0cd1d9a7413e9258693f7b18cf7060abdaf4b281805b4babe26f3139f94928e6bfb8f2f24378f3c30a0b072ba37c68a8b5644c0c667f86e6dabffefc4a626a8e3662cd562de508c584834a4b82a914d16e7e3e3e78f568bd30f5b632c8b64ca4038af80d31b276430628c20a7d95b7b663a5bbd47df5baabaa7f18a78be8e3f69261af39b63f64e04432f40851a3fe1647c2d6e823d3136b9e5c09aa47cb659e34a8c7bdf5f560025192a30f38af1eb079a09ff1e1d03f9dcaa0ac32ba8032cacf4540dd1f5b13187420f0df0aec8cb27b642326e90cbd756f96a62cbf5627cbfd9d32ecb283033e2b42bf0ea31ab9c29ab29271499f65690351740e4888de29404c7674ea306ecc524ab81cd114db79a9fd05456772c61b39d09b1eb1159045a314b055e281d08483484817abab54c1df738831769550af1f1904bb19e6cf6b2684799736e621bf5788a3b0469e80ea1656262492b339a35f8010b7454a9cd1c5db78f19daeedfce0b937a478e48e44c1db55b1ab83c8d4ca0316c50b6995b1824cf15666aa961366193cd15631dcde4fa05964a7672a4fa8e716d43c3e3d1fc783fb409539f842e3a2445bcabc6aee77d07d76abbeda9dd304cdb2340cd27a1ad6f294a59ce858e62d965f95766878ef4fda593005930ae8609f95ef96312e1a7162b53882f3b62042400df5a6c39ead3ddbfbee11fd1d12df5eba6e4985322e8cf85a801c6b88063be4b2c150c3753381ea3a4e834e83941394c674abb7f5e985e53bdff1e2d4d786abab596a01ffa61e4db3f50e07ee3cf43183b26dec1f63b2de8fc7572cfe2bb95620d261fdd48878ddf1efb122759a61d7abef3cb48ac1f22496ffbcb4d810f66f3f757ac0916098075c0ee110e1353c2de8134bcc063505a47916a0792ac124a94e779c276e319256bc1143c239da3078d939d2935f5dbe43501e0e8746f673c6702ef3228efc863bacdb29c250da1b97fd73f12a65df8ce74cb709d95b0353665af97a2af9952d2e464772e78b8f88afd605017cdf3d3a1e267e4c3bae5d1f749b49840cdb00eba3c3cd42ac30788476c2a9b8c0862520c257c72b5f6172054f329f48ecf8d1fdc2637030f3ddc98295aac885a3fd7f8f1dd14cd693b48765be3a5e9d6756ccdad8a343c6e529c0d6ef14e34937897b7a5d0006fa415a4dd6c622175eb9b6de7d601d2cabf486e6e26153f3d42f4e19834b77c127d4ab117a853720580032b5cc6567099a5cdb9a8bc26b3f7f0642dc565560fc634db91ff46e107dbe99525473fa1f40623fe1e5c6d82cbec3dfb64b0712341c8e04c42c272c7e3320b25788fee268e301d9165f6fabdcfe8ee2ebdc32a4868b917ad476687f65793fdc204d8d12cb871fae9ca2710da075110ec2ed7883866c031a55102562388289e625c8e5882f7de95ad715283d1213390163462df4251052abb9af264bf453c22220b77e20f160534052173edebbf0cf495c6ca69b784d022f94ab60b93423da09418f17281ed2a9a05cc4544d74eb9ef80f1678a8b4b2f50380a9a1f1d5d108abdd839f2ec2120ba23e8d9b6374dfd1c4465c291a2adacddcd6e848d30bfe806c97100701ec918d6f2dd2846426638706ac50dcd48a44196b905ffce64219fbca6e719440ed18febd3cd6345f7ddf401a411381c9b672ba4cdeb8185b4458133145cc3f612120ca1f18f0bb8c44167783843b02679b983ebb1f83a39f34673fa472e046e6248b7ff80c1505362433effe573cb4b1f23f6a27abf599b2b7fbb49b7ba201c1fe228cf65e11a62cdd1b42a2d0fec3798e0e4e1bb03f05f08640fb470b92dc3f8b55f324843076ca02ce3c31878b8d990368a45546410cafb1110f8e439c32174aafb2d955f87cca4d84850be18d51c60edec020e7dc3e53cf1f32a4242412526b402dd476be504a073440bbb86d2d33fa5fc690057016f34ba19dd1423d37bd608e8b4851c1d5a8f4e25b001dcbf61d52d508f266785a2b5f1e9493a250d91956e4f1531098960696595363767b1e4921ccbed05c8e7f10ecbbc544740b73640fc8aff14ad761076e056b872ce99d04bb55802bc097e60d7186146ea13d19c392b5c1ede459d13abdd87f01b72496cadfc3f0ca2548e034b959853110e1b6a125cfb3ef314d8a315658ef0a04738c919ba54172af320147b8a81528ba5d6c3518fffd3fa7d1513914314618e755f05c7ff19f38dbeb0d94ede75b449ba593d35d2bf5d6d416f8e8fe3255fca5932480cabe10235a15a0b3cfab75ad1f5caf6eefb5987cdc2cc0171c38e415435681c40ebda7dbc137626ffeb327faf2caca894bd6c6b6c47a8740b35ead81ab710263d686ac872e86f05b34ee274be8d1ebf17c57e2400684e01fb90a105b5eb7fb328b4890d90474a5db4f0dca553d15175d1298c7901c1145a403e01a4129b1ad64b3d5917a754d7fc7a19b1341e42090cf6cd34546b54786270b46944223fbf4873a15b043007bc26a4009b9ff7f9720bbc325fe9a2080569a38d755a4a4ff349c1869bdfc0a4b7c0ee0adca870cb0458db57f0c53f624b76b691c2c3ddc08212f9e115beeb5fce555214338b94a4d041e91c064418970843a85218e62064ecc5fb21befa7e013ccd7e44e8dcb234b43b364407ce201c5704da3df6d55a09a3faf69801e0c3249d26769577892778c5ec9ff1f2234cb806fe0cd46dca9de4ca6bc0bb405b8d8ba21c24c93ae8a21c3ed76ba048b54e6d2cb3f8b6a87d972c878278b3f6eae2e5d78198555a6e2040ce9534c819c4939f4005abc9c86aa4aa2e16307187cb4276ed07e6c1b86a6ee85dbab10a8a0415ef0b3f634243cced2880db289759ed1b8a6465f0593603ae157abcace77019f271c1e9d82c40bc31c04a4bb2de5d8b2fc4e552737dca760303306c2241d021cf0db389c918149407863e04e75de362f59cc12a0b2e90d452e19b98083843d80340968a60f0bcb5cb553d07951fdd6468e05bcc609d0452cd79130950bc5c6aa2fe190bdc4fec1fae8cbc3d43f80326daa3375b1b8533871300ac2b11dfcfa0f600dc38263ff36ead41bac5f11575aaa8e7471759087e672e15c915e4c78a4022aaff2082f6a3f97f581158c49a4992d458296b8730ca6866267419417a4c87e7a6739825e50f6db90357d0f72221447d22bf6e2afb56a3ba6788c6d9684b6090b1e9dd708f9745afa5e9ddc4babe1e8768bc6a6eaa1a9fc2c3fad85d177a9eead834ea27274f88eefcad727408eeef144369624b64368d224a81020b4d5e84897e89fbb4ca320989ea9fb350256f5b85bfffc649b400b572a7bd4ecddcf1fba7b14e195cf726eef8deace36e3aeb2ce3f5cab06e9bbee33bd98cc3ace26a3ad72cdb1a65b9c6b2a50eb17f3626cfaacabd4e00256d224bf1ab2fd6712d116be3cc2c6a0ceed2f9cb1193c1c1267aa8320893ff2875d42f5df66adee6ffe1ce3655b3523b9150efca6147aa111b6c72f3603137ccb168fa5e2e7a7bba33567d41275ed7b1949b060ba1815ce92feb87a4c9886e5eb9c07710ff13d318773d7d6dfb0c451d6c2a6e413824df4676211a461f70f55c4640a782d49584db127db6148a32e37cdb1055297e3897b70983d5b739abade843952b01ddaa647e2d77bc7ccb41b2a410963631447fdaba87965b7a30a6e76848ac6c6744fd7146127000c217c813f5395c83aac1532b15b4406e6c42939faa2f0e72399fd4dd167c6b08cdf738b06995d10918ab34ef854d8a6f541c6437f41917059cf1048acbc7c8541048ac481d00f32a0c40027982d7d94149b11a065003d4000bf21d155b810e16e03b67922d6ea9345bca1d4d2cd94936916f423d8a32900f22da5fc03f101be212fc07cca816710889d1dcf95c1668d3de03c4a6370c000cb40c9607abbb262fd76ba80545cf10b9ecdfd1386319ce6510f93bb45de9e71c2191ee87c57a5eb19ed7be0fbbb9cc89f5bceaef6b817698bfd4da65aae107a61a8a30d500f3e42dc6f3e42db6c397511e87e8a63b46791cc2b11765f43e7155d70e5f2fcaa811887f729028963dfbeac73ba1f8b01cb4efe358bd0fdbe1ebe2d7107e55177eb99740e05e12238cd244001f1881f8c7d583a406130d69303932c5091522410132c50086c7bcaed35d6732623dcf65a2014853590e0d4166a0c10c1798a18a8bade75efa00185f78c0bdd401f71207dc4b5db897bc702f75e119e5d15464bbce9c1148371230eb6c0462f1da7187b7ded73bbc3bbcde065f87cf22f5e86dbf06ada6322c6aaf56da420e186ed42142b0b8bbd79001379e7801158126242224282af43889002f009144c5c9a436c6d9f44213d30b312617f230b940074e890226173e930b31288058712f4dc0bd34857b4902ee2529dce4c210930b2fa508b897a280e225012f55fc45881704bc00f152ce4c2d14b1e2c42fd300ca704fa52ebe998e38873797b2191543cfd3b6f734e9ddbcfdfac5af7afc6d3dd2d2f4986ba5f96f0d7b9e87b7572badb6f73c166e58a04114a9ce7ed8d6f667cca4a56958ad2d930a2bd0a06b8d0e3d095f936eba43f7034d9b29d1fc219c3f1c7fbbaade3f9b241da7b66f94716d5e1b06cd2e68272836636244fa1926667503ccac76c2e88cc37d2d1612e968c1dfb1b4e7f57d32661bdeb19ce5d6c5af1ba4038bb9979e702f39e130502188bb9b88fc9852d0c31d481a2908b9fb6a1ea9222629486a4195d211a4395c84208c288288214a420411840b7777e2a6d308fa26ce1b15690901ee25204a3fb87b0c8ccedcea080998f5ea68c4b9a7be4adfb0ce5cd7a110c45d7534f1ce659d541c330ef393b7d4fb8d34cda9ae9da950290593093270ff3e3a6b53ffacfe0d933893f97569322109f7d9cd18eae798e0c3ec4cb8319950633201887393355931e42904cbec627872c4a010254c42106012b2673751b34399841060053795502be1c8548214530931f7b2874232bbfa75a24c25ac4c25b830bbd408da32b6f533e85deb8da0adeb46d06622c10712acbbd3e02612763a4fa4307376f9272dc78460c3ddf6299a4b6a0aa28516e9eb4987cad67c919c42ee1ec36f4d5f9c9b9a82003101d1c37f3001d94167eef64648f493b7db3b99e59613d308584c23944c23849b863731263389a0040f3bd3720750dbd1144215fda5d616090dfc3d37cd939c4b5ef64756df0fbfce1e5893a4a057fb4b9269995ed0b8e15429f08f44918eda053e2527a502e4ccf3cd5b7205f183e4830fb1830526972c26170eb83b6741ac359d63799f06521e4e8b220577f87ab235fdf98a47772f7253a9072e9052d2622af9602a0dc0699b8e3794b6dbc87dfdb4d8b633c4b786336d4f6d6768a79db78675edaf112ae39c5fffb5e15714867d2e419a31ed475cfb72074a621ed8e5a9bf754969361e4effcce704f98f824491ead4afafe37f705aa8da28d068b7fe8cc3fa60c6e1fd7913e7c62f7176ad9e95fb785eae9f9d16cf8eb733d4f2e9baef7635ddf4b62777f1bca1aa17be3515baae9ffdd0ece2977ef90081c6470cbe8c4b6d8dc94927de93d23230e407559cbbb735b9dccdaebd9942f901ccfed41f6afc61c56ae60f1a77227218e2871bee4e67c6447e5841d394b4fd10ddb919f821c3c5f2e8630b0c06ee467c481f5becbcd10793a33e5e36a5e9f1b795810abe551c5ad2185f504523a422435c208526c70438120bf6c3f6c36ef5f7c3c6df2e3e7a8084bbe73d68b3d0679d6a8f702627dea89b4ce7d765fda9af1d2b9d3f93cc2367eb1208bf367eed4b7566d7ee6b81402bca4aa1ebdaf8f5237dd90ceadfd1faf5c5566b3be617ca7f6b41f779c0b96746c51e20fcaa7d79292df61903fdbe5407e7c741bbf47dd2935f3fd9fa5f38e682d5afffa08de779b0b02abeedc9b8e7414ac2f0ab3e0da43f74c33f18c7f43bb9aefc1ba499d2746eefc4c623d2ab69b8dde4208c2989a053b4f243002c988fbbd71f7a51b44e6affaaff15eb689d039e1cb800c34109846e6a60b0b98de838f19ef35a2ca3b386af116d72e0937ace229b8e19f7dcd4685d04a422f979ce9a1b186c56ce4893c9bd113eba56639aa63e5b675b66726efd55c43093fc371a27d0e434a73595cd4e13604e8e46ce8bed7cdaf779c7c0ccd722ed99dcb79a29bf0feb59cb1c9b5cfdfb244969b5ef9b93db1a8bf36573ce6636efbb2f06bf3643fbc5a0ba2e06f3cd276ffaf3efadad4803f787211eb5bd9406fe3867d7ea9f5ddafea317ad08a6366d66c5a9b108daadedb563fefd55145b381f621a13fb0c33e9bcffb5fdb20934b9adad383f560ce71b2bfd7cf18f58eb528710a77689279ecd8daf0de74c2e75ed24c242f369a2b635706ed7e4669e2ffb8cc3b2e38905bdead493cb8f9adc4feefb60938bd976e2ad8d68928e307a723ac493a440a83d77498ad7c26cac27b7e3ca542c414b45b10ce7d3622420e9d3ba1fe90b7cf233785d38a6eb3ff8240cc4b1df76e7e217ce8f43fe2dda1e51a43a21e0b8f1026da45a97b99cd9707ec52f23f020f1a078787838c1838547123c383c66c0430612c3ccd94d24338686395134cc8ec41345c38499b39b1265480c66004367c75333067f68df3fc2610c58a28c6a4c8ef8c95b4cef4c8570785df99ddcc8adedcf8f4fdbb71f9f164ba5421919582383a44626894a4686ca6a686a6e7e65234ba57e53911c7f7b64cab303c68e1562268c1677af4304755c607651e6ecda233cfe90093860a326a51346ab02491801864a0f1de81002007dbc808dfc00201f186aeed87b28b1c21d327029bd0079a150e47041c345032e4db8e0e0620097191701b8985cb6e021c490123da30826df165494a850134438a0844469a634960250a2437825a212571a52e28344bad02598200189e5520410dc004cbe1889462102838d9283513a1d9d51a22f9fcd0d9ceec0af20d12844312095e1140da77118f9402a508e9028910fe2a58054a0bc9028911f2e860c005281b28753222da02142131ecc396c9c44897c57e4f103900a143a9c123162d4e20f900a941b122522de209701528152235122b32cc403201528964489003941076a2015283d244a04047d08a120e84308f5c2815e6821501acb5ea9494f694727a75562e25ebac1f31eb447f9b5f8e0a5a057856699d2746456ab991a1daa2edbd74bed16cb118e15c061061c59e008011c5ac4c0a0660cccd4a025330e67d7a546199524c61b0370ff4d2f9e3a70ccb9e98bbfd375e3d1bf91e50d2fdcfd041ff206166f4031e48d258c18f2860fee3e657622f5b4fdd01369b9413a51b39ba8d9a166f7602eb18e32a7ce9c1148b74692ffde32bf1ee202163c37b4b84102378270830777d79993b5a00d51b4a1fe19253d526b6f97f82b7e6db3e167d213456be4d1b6ad7946998e9f4b2f3d08418ecf439885a08473b38b736deefbb0c96959a969e0a539278432ea5bb204413cc397540c8ca7edecda18b018d2c60edce99c5d5b69ed5f0468b531ebb658d2f0abd7b99788b89752f844b17ce5af19779dcc51d7d51cc4868efb6a8d15cc6ee3d7ece20c453ff85648145bb36b6f2d68e3d78b960665674afed04bd7b028526d7786ea6ffc9a5dbbf7c34adee35e32b99786780985991524919f079ab78d4714a94ed78136fffdd99303cca4a8400b155471e7f4e7f9240633dee01f4d58cc883e948f8922f0570c7a46f46b2513626968200d2f8d561a9e021fd814d864f56dde279ae8275a117ea28921879f6825f889b6f213ed27890a46a60c13055b78b36b33922f77f8ea817f140205dcfde543b21c2142cd1034706e8fb6da6eaa5f369fbced79bb746672e20c52a0c9d9e838c3c49931363ace80640718d13e3891cc1ddc9da80243d0b8e24ec3dd7032299aa6b4b7796b2f3f591a6192d2707752c9bb0ec8ddc7dd84990f3943c875e6869cd1c2dbbcefcc181ce9e7ade7dbbccdc8c30c2cee3e00338adc8c9619d3dda70d387376dfecda6be9f8f99b5b537a54a9fb3439c109644a22c884e0527a2979fe6d4b25f712a9e4442a2219a211b4b94c0044195866b7f5d7b94bec953181329c28c3e67ba266879a5dfeb00c2177af9591a40c19dc678769b589aa3a73f937492bf56ee0ec36a5d526eadab1b6b4ebd6826c654bbfddf9499c856e22499630916e1c7bf0d21a16c516dd74878e4f03b5d76db9892449f5006d68f31fb9e7b1455bcaf0bd145c92fa4cc6418603f40c8b9a4e54cdf38d68e8ee4e4611bdb5b5f1ccf0cf67a131ca3156700090600d5fa2e70c8bf333f9b5897af0e23b27a75f6b23b36b271701f7412b56171635bddbe6a7fddcde88a5ed0fcf8b32ca9aa88d45180b67672ab4b5fdb138f00066d644e57207164e75e59d59ab9952eff06a965745dc841bf32fb66215717d1ab86d4d4f91921fd7524791329f166be28abb47913239238c77133dc06c3847142958fbdb75acae8be1605a8d090430d103133338777ba35acc57fbfbc1ccba97b0b2c45e224689389ccb1fa638f049fdba9c95fed6d78a22dd1be321256a4af42881448900283144091118b00603c66000e9cec29932703232322819d5ac41a4e037a1cc141703337fdb5c9b393bf36fd04c7133c5c5a86082668a853365e03c8f1b710e3f3af5be4fdb65cbf6f54e9159ad66e6921bd3026410d4752c560c0cce0816659c33cf081655d74db9800024c1471263245145123f8eafb69f11dddfaed494840090d0638a145414291c49f39e97c290a002891faebea634248e9814c087fba50aa0420147286095803850179325c51b552dc5091895b829013455eca892844f9132515b2c6fa2b606a81256c1f129527679041064dc74440a8ea002da4d47bc4b7aeb1140a6235ea248b92d233a60c4678410e7be9889aaae89fa3e979bd2cabae41345aaf34d5a169146115fa0ee17412be224022230112d0c9105cf64f6fed1cd7f84671368727f9b5d5a7789f19e957e86e1f42dd79bb803cf1043d02184a06c5f6f14291cbd54883584c04208219f2265eeb8a248e14a3cf11e31d6b44667a5b496102804a18320a608c2678a9459ed444591c2ed12cffaa3ddf396693be38912c9b2da8902371de9ac4f69a03db2938a1e78d3c04b539f75a89061a2b2b9984cda2cccd362546e10a0c59d032969045271524d525a7ea1c9c5e03af1e69eb330b386002b31130284b8fafb3329cabe18029200a1c5dd67d7ee12df686de28bd2b45681584297401419310131c4dd7edf0f79b873fa072c991a71d30f4b3867fa21f6321cdbd65f597a3553b258ac1818164b14a94ed7b1f40d36359d311c9c112c62e1d8704e0f63f400811e98b83b27bbd1f19b292e66df07f108a4530413520de361851b16e7de886e51a4a8fab79cdaee9b939b0a37116c5e38a7f56f3a82b66fa6b8fab210d36625ceb42d8a78db786c2ad4bca82951c3f16969c6a1e9881ee17034428947e943099a4ad2cec2b47d3410f41eda8af6c93b30e52d280dcc2509a45374bbb496fa8dc7cf296ede2889778abb51a0c9a5b8d5cca533c4b335bbef9b290e4655f4cd8c27ea8b89e13898898259157df365a0256f7b8aa2853239dbef8b7766f76dfdf59b290e48a768ceeea521262968a46d9e9b6afbdd2839f126cb89fafec36f7efabf87cbdd0e7a70da4e5c2fb54fdb46ba65da21871d5c481b904f9036903326acc584b57077eec88f581f79f1266a5afbdb918def116d5b17db6b44f7d3f6b6df875fdc4d1469c6f326fe7e911c65f39be9f1bb2d0e35513c78c8845d4c7706ae431cf70dd3adc27db6faab06d2299a3771e33dbf6fa6b88df110d0ecbe6fa6b89be9ecf3d465fe3b545df8a7ba62a62b33454a14299bf6b869d4b2696bac22051545cae42a1d453a5beecee3a6f1c6ddb9a9696d1ce29c368958c42277e7fec3a9e96c737a8a942852664bbc7177ff0fc515dc9dab4d4d9b88466e84e11577f78bf1de463ed49f22dd3a36352b9f2d52cdb2a9593dc161c570c220d64d69af95b151f9b062264ac646e50383033e118d4de93a5cf19549071a921b0844c4a3c38fe5c3fd5a6c4df609e7ec14450a0211915e8000218795156248a3ca10166e18a2830ef808320b811a4106a0658bc9041a19205dc8b62ce08a2d261a1377afde7f4843d188b8bb69b603772d4eb3b87bf53616f5ec8a7b12fedafb19e93329eeb76d41bb35157f27f466322e8a74b6c2ccc338d0700fb1882205432ddc370da57027c2370d49770f8bdc1db43af40965dc0b431c12f9c3f56b719dc5ddf45bb8f756aa3ce9eefff9e3f887e1ff0ceef5b7edef0bd19b6e5d77e0eed5dae1f5d5707731dc7d6b2b5e3bd67ac5dd697da252f12ade4492ac456eaa3875862ac41ddca2f148e2381ccca23d500b378152b83b58c5b509dcee7a674a7aafa9cc04d25e5319e8e3ee26b8099471770daee0aedf8657c687bbcbec38c14d3234dcb549f685bbeff0caac54ebdd6421c4207b916db755ebc93c936c67e23d690ec907340937c2d2bc97e0291bcb0c4e3af5577c3dbcaff5aad16773f71af7638c35d670273156c91c7975a766e54a0e44a61c84dcddcec9821c84685cdb6998a608b9fb1409b82fc024250ef7d20a4a2a709d39d70109851f381f2498a4c0e03a73f8f6618a8206a7afa579e7092a24a0005314213a73fb6d10122ec65adf686dded627c58443ccfd351561f98fb028e2a17d7399d39a5d5b1f0777b751202eb45368eab7fb963867bfa6356ec73567f6a7ded6e6afa86a8de4328723672e65f3338db95d3a430bf399927a46f77d30bf50bd4fc2385dffc8566cf30b513ad21003cd7a710e375b73b72677b1cc48ee995c8d4eee2b3d42e7b77dd515bfe68dd4e168e78bdbc84dcddff462f0bae6a5b3529908abbfa9cd9b923f549f68fcb375b953bf86ebe589d52056c60460a340f7e2799fc4f3da71be51c6b5fd77d6feca7032dcea68e2fa237d4daede194ad7875d3cb56827fdbe49a77e5d7e9956ab67178b747edfd4af513a0cf1579a7fcc99dcf795f8003fccc962e1d04d77262a0b4d140ba7eb42f16138a3a5c1480af4336ac3fc39670f73d67573be68c91183f87edfc7336598dca533c4736b911ca9ede7d4dbde72eaa1dbb6d5963bd8eba276dfff232bb6c87f2744b36be9efe8dba54018c75e4c9cfb906a9defdc7ffbfce1e7997f2cf7b5401870bf3f6e5dea50e96c4d6eb6b411887fe6d4689066a0028fe38695cd86efee5e7fa457cfb9f1fd59a6b737babd5116ee97be88b1acf2e84b757e74f881799122b3c43fdad8de74e879b0b0272d4d537dbb749c18ef6aa74ed58fefca8912ef3cef15e4820df110793c4d5a43413198e7e598720890028b0d1f76ec05e6b2e2ee3b7cd5db22cbd80e5f39688757a4373c84f3f33069dd62baa106eeee997c88f8ec2acd712fa9514a8374534a817b0905ee7e4218029819003e40183bd0810e8ac6a0e2120259a8832a6a56de181a01d0064e14d002a0253141e905a53b4a14ca074a16282551c2a51b924ec9a6344b9448697e420e884274430202890ef1068989261c406588441aa288f91d31bf21ae2091aa14313f238682182209128592046908188a9068255128954455300941c5450aa204520efc0d072ad1259810817f09480af001154ea31065f198d303b80f4e89ecd00a50074805ca754ac40144e61803a402a5a775c485e725bf11ed6962043e4dc77b916afc22f55eff9115a947fe1b8922bda5175e1b5eeb918c68c005acecb064b4b6be0d6dc523b844a436e3bdaded6b3f685166b5c6e4d3f698e9fc232c737dc5af9c9db73996c16bbb4e3696596707264d32de34ffb6349794e692de70858965c57d7641428021c887c050e44360d8f12130b8dc4190051613905d0aea89fa232ca3f33394284a4d70afb1084edbfe725f9ae96c4e1263114a1012b879b1a63d4148e0e8fcfcb45aa6230dbc2fbbe114a9bdd11827394988a48494c20c4c4bd4d099dbb6172d0d4d4b64c81081a92b721b4e26552fcd5844500a4118a59e920e4c454a4a34a0440b931214648c8f7e3c7a25519894fc30bba9033ed1a7ba9934cc9ce9d4769cf55fcf0daa6e5edbfcb027eece694dda3d436c4572fcc8b1944d3af7cf260ac326f79176ebfcf6690f5eab7fe3d7fcbe6f2e89a9612e9947660df33ff42eb61a66da3049bbbdfde29218d26e1850a4a067c39cfbc58c7b261224f333be338bdabaccdff74dcece9b6ca26248bb6166ea26662adaf19639f58974cc7af6f962d2eefc9b8a74e23dbfffd0fbbe6f668b7111d2ee29d272677b5464fe27d26f5bb11ce77f385b5b1eb6efc3688e68690fa781748a260dcae43e8793ea176525ae136bb135b9efcbf3fb26b547b3be28d2f2d2f1f6b43d45bb6f39493adee8d6fa67b594d9e8381fb423bdb73af5edb62677a9ccd21add18cbe6a768334b9b14e7e7612ea193ab99a9a9b1c177d6709e4d3d965ad3f95026f77df3330afae8e74b51fa716dbb26877f766d88533424333ff932d76f3afb3c9bb926a753ef8f6051a53934c784040df7892a1501d4c425c75d5a344bdcc5c688bb0b4783cbc9c5c4a901a45394122a31d983a64b726e5dea50fb3be95ca201172cdcc50a77a922f50277e770aea2d593bb01f3a402cdddcbacc212e7f0eb2b268205911c4e448e9c880049e18b530a4ff8fcda3a32e2a714eacd9e82703add713a5171fff2d3762e4312e77a3a9d4c163015a95a93cb339cc919b638fd3490927a880e4e43be380d897d3f8e18fc3c6f74dc74dbcf250a79b86b2328141e7042a1e784c20aee59a7c44834c80d9d4e184f27b47032a1042713843001e86402cab96fa6be99e2483aceaffb80748af449c8074e42721042c49dfb6ee2b6a01549dbcf8ab9dba5256c514214a71268dc3fbc6715f10ef13c91c0c689040f9c487877ff38bae9ce577b126f3d49981e840f233c81748a4e41b0b897f3b64e41685c7d1dc44797a72032dc09c8167707f285be2d204fb83b5769ce090815969f80dcb80b0199ced19cd3087db83b57ef575775d9117ce8698493085bb85f2a02e9271106e0da9e4230e21402024e2174a7105038bd6439bd30e0258797ee06cdeee37439bbef9b29ee46c7ef9b5a5332e39cdf48d39891a6fbe4a2c5fde482e5e462e5e4e2e38e65f435a59d5ca69f4a7cb8d353690b77f753c9a629d9e43ead967f8794c5a269ea93834491eae0d8704e75d513098d13e90acc94af7e51b8494f242a27d294caaaae2a8a5487c5c2e93a568c4dcdca67a26c6a5627ff623d2fd564f990b983000377f7fb64ca4d10b80802151c04211b8413dc9d7b4d6346791cd2d515c3019fe88150c30fe0f841173f58e20731d31f2df8830c9f37d995753a755f631a989aa922b3235d84dafae3ec9ebced9c1c5347ee3595d5fe8f9c3f4cf0e30d3fc0f043e607aa0f3dfac8a20f22dcbd0837f920083ec843a4ddb6a989a2b3bbbdd1946d515fdede28cabc7372fb534f8ba55e53192ac5d54a8b1469e9983a724834125d33ad976e4d4724322cca90804f6afabbd228e2570cc4bda63973fa600977728a22b513d36a321f7cfafa6005e7e6c62f3e6ac02281a274709eecfb2306eaba580ddf1e68e9811a3db0f500d5833df0d8c3893d647b98c0033edc9de3befdda9b31f3daf9bd11dd5df7cd10c34cd518f3c5a86082be6f3f2c76833e98f97ddf7793fdc5f36594f69ad2c8f067fdd16e1ea871df08f36009f22b0f98b87b6aff2d259b3c70d9ac252affd10e48e0783651d3ab22bebd13a33c0eed6b816e9046b1846c14c8288f4313f5a28cb28cf2386494c7217d73c91245afba8cf2386494c7a1ea32cae390511e87728025074fcc1c30c90109075a5c1bf97060858b140707c041085bb2b8e39dda71b5b66c39e10668dca08afdb0fb724eab355bfa06b61dde1b14b93b683595dd608558cf6bce6c36e0c3066ab8bbd369b2c1176e032a1ee21dda3a6db0b1a8670de8a8c1951ad06a90538313f468811e5be851c5452b6bcdee7b5146613d42aef0ce4bad2cb766f77d3335248addf7cdd4ecbe1d7e33c58ddf4cfd2e6536ef4de79c7a3f0c488f196870070db0d0800334b0b9fb0eef0e6f78ab9ddf4c09c57a5ea138633d2f1ad03903246650c40c98c8000f1958e13bd3bda9e71d39c28d198734b4b14996a0114865dc833a93fb4debb42cd64dbcd8abf4338bc502e289b9785cb1211ea1a02121afa8053451e54a554e14cb4727d6caf18678843c18104fcce515b58048d8e10b7c22f089b4d0570ca4f5b33cdbd7ebe51850712e06305a1471b677f011e23bb6b8a38a7377082d69dd51fbd71d4068b78da71d5a383bbe70e7b01d4ab8b35c1355ad6707a98e39ea38a30e2b751cd5317db7260c82e8f0838e2ae890820e1ee8d0a163005a68a0c50a4845d28a74d21fab583e8a7bcea276aafbbed9c976664ab7625ad57adf4c71227d30e31e2d2fbc20072f98e3054dbcc007f581174f4eff6c56ea52688e13cc01813988980387395a70f7df364391edccd4f74dd4a7bfd9e94a7f48b633539dce4c715fd7c53e0ac4e9fa17cbf2cbe1867b75695aeddcf825c715f7fddae62e878ffb95c3fddaf1b7ddf815471c53b8bbcfb098fa2c1447d10669ec9f06703c41deb87a310887cd1d8e1b7f634b0cde6f5ce16232b64794f6326dc7376a6fc0682cce5d62d42e651ad36a6f6c8c5b2ec0c2c5c04c980baab8732eb8712e46ff879ad65c0004e3ed86961c37ae4c376ca9cf648e1b37ad166cf13d6b98a8055bb848730b8840e2d5fe765dec3f872cb8010bb66081110b6068c38d36bc70eedb18e72fe67bf0e217cc44655cfb7b13c998ef83b1a268b94ab56de30536d460630a367cd6e0c11a1358a3b646933592ac20062b506205495440870aacb80c73e6d7d98a73ebb20033e6cbbc61e61f59917e398b8179d944694a9ba2f8298ee3c0fd13a56f97929fc912df50d668e2d8ccdf97f69bf7dfe852ef45199d7adf57a309357650a3ab238d24d238401a28a4408c145c200552a440280535a0600d143000053214bc80861c685c71e7c69c9d89efbc36456bfafbea2d45ba75b9937f36b39f7771d7dda0ae8b7d73ce6aeb9ea939b952f6799782dee752dfff666ace6e88dbe5b45db13e4d713a3f89edb619d4745ebc33535cc6df87fa9a112effd1f79f7bbeef52347cd010001a259cf1052783386e1ac7cd8edb97d666896ff347bb6950a284337a3ae50c22ce28722e161434a4c33d289bf40c11ba30c3026610b93bf72385d9d0cae6d348d4f74d4de74ddc20b5f1e821fd3904b51dbdfff00459dc7f4e50c57dde643f643ac1949999fa26a2f6a51b167bb98284bc9f16904b8767c72b6a01d5b0b8afc5a49745057adaaf18e82b1eabcdcfb2f16896e6016abd8a5c3d3c4342de8bc74950ec864537ddc1019f48b37c624d5e3c3f42ae211d18cf8ef70a72c574787e7e8274bca21610ce6ae6c9d617eb4c948daac461e1804fe455eb55eb99c08412b0c044c60ec860a3d2dadf5a757415c5afdd5ccab8980b33f5df6a6d9181c9f8716e0c26c6d0c144021fdc9dd3b7866f326be98ca2f4b766a52d4a82202360c3ddb9dabf46e033821332e0262c9fbb7319873ad44e14772928022c44503385c0072150400882c0819b40b0843f79db37361bbe4dcd2a85f3f3808ad1343613664e3d6d54a99ed893d9fd482f57eba5785f4b777e708698eab7373a8a81841850c44822c600c2e8230c39c208230c2ac2e0210c29ee1ea39281c998e46677e4875c5c059aa98b5f21fe40054c1ff0a91f7881cd232630bc00c301ee3ee5ab5f94cfe4573b85c0500286104efc8ac7d4ade1547e3275a324486d0df64504bea8eedc1742b8da5f0fdc3cb0820742e8c017ce8dbf63448a430b93b5252d4d3f6d3fac03288e03b5b6bcd8e20503bc10f2c288172374f1471756f8d3766b4a94f9af272a145f6f3b2fa581d4ea1bcdb9353bbae98e8ed90f9bff1a66ee6b81b43d32e79ca19d7ff1edb6e6114ec7ba10b2811b6ce0041be000151b5062033c6c80897b7784bbb98cf5bc765ce0e6a67c5f94d9612dd2f90f0b454a7bd9bc78c67a5ebf3f831783934ecd451b6370c10517567021c491237acac0718172af5bb8e1bec5105bd09cdb4288bb06bad080147e44033d1a40659c81383280c58e4732e083bbefd71998c1c01f18780137677784ab372b55595d5d17bbbd130c18000304d0620e2dc8e08e7037e594af1828caec8e709d9bb4f8b4d871e76ea24865586c32bbdabf709047165ab268411659dc3dff912c0c90852a0b162ea0e5026878ed5fe38b7476f98fcc2e165f563fbb4c17705de06481362c80c5dd6f62edef0cf19cdd3cc24d6efc6dab6b76b57f59e0658122578070c50657eab89225d6f352b5667744d7dc1de1623daf39bb6abd235cb5de113d65e0ae58f12b54ae7c3ce01cce1915c379850977afb89194918932e21999f5da99ad13a5f3effde274b97460ad1adc54812ca60ad85c94d1fc9956e0c6f5162cb288659eb36beb6b4dc9a99f60f10416427fe78d8e464158007109b5e6156a5c61c5ddbf562bcbf80a9b735730b90288bbabac70a3be1556fc265e2baa707afced3259e15353b3b262883bc5bb8a3cb415676b0b776efc5d4595af42c8bd0a20eed75e2af2e0c1424515e7666ca8f89cdbd78e938a39bb36538006eece229a282738319aa63e23ce21de145882a300cdfd090598506088bbe70fb5952cee56aee83f3259b1b9e36d8589bbfbb4e282b693e579f949ed69ead375319aa6341c5ed7046e485a6b4d60883badb5a6d082c5a7b0e2ad296ceeee37688a39cb2529012c5f25009a24f0659cb18ee591228f7ddf248514bf2da549514aa172770efc91b26e6f248a56965fe82b06595fe2804f747b2711388a004c1476b83b4773098274e29df5ed8d64a5de180fdda0cc23478e1ce1a828d22836f084fb17a3324521e4ce91f469531b918daf754bf650a280717751b44ea2f8197d1814190a18a0383d310277ff71d313e51352b85bfea398a9bb0e5b8fd4df84995f0c0c26e89b1ddedea5e03743db07fb60b386f904c9092d9ca0c289264c4eec6072e2e50490c98922fdbca1cc7ddf72aa99e2625433f5e97c5f8c0e4cd03753dc87bfd6fec24c105063dbf1b11105820011eece852d56ec35a509bda63492476b9a79ba2ec66255d76b2a938d256dbf0e3f53a94ce667928094664569d8eb1ebc41b7a7ebba4e935809a7e466464513ca6492c868c21a9a5a695db7c1175f7b223dfaaebbd626b5aa334a94d0ccc856aa50a652529384d675f92faa26090d8d4a4543a3449664e686aa405ad7e9faafbdfdb3ae6375dd8fb85e9abb8ea6298de2e81a3c5d66cf13c011958d8e30c4ccb0e8cdae9dcdb00833e38956c6881102c0d00033034a0623458ec420336360d8996e232fac6470c1a3a18511834906b0ca9ea732b2a95991e06b9400641e0c0b37cf93618519802200185f5021e34d5b2052dfb3a959a5a02a720a77e982c96633d9c210232868164e58619c056082114865a288f311210228e10512f6cf5808a25b00a28219615544844c5f040710420b2f34362eb8d8706dbf50b2a9599154decd4ae5adde888a326f762d4d539ab76d3fbd062862580306a41fe97d89610d1a684b5221240eb89012dc8c1cfcd17239e280e30d17b8d10216b4c1c61a2b50811a689c61c609b294618212903106094680450421008118617c008c2f3cd0010e78e1d285cb06b870c9c2871079e143a0cc10e3b244096ec60df468b9077af01bbafb8d3c7580b6a9f644aa33a71f88fb4be5401c48b4150e3879015f641efd3ce32eb6741147577fe35917f3b4812534b0a381211980b98718608281544be7a445d1efeb12c3bcef13512c7b5e94d18d5f55c43ecf8385d928909e42e27c9f8c968a3a360aa4ff7b367ef1601c2369c6af171b5c66048bdc5fa4b8bff044b1a1be28962ff717228dc3c5f685e700eeab97224550887edb6bc3df717f7952450b458c8541a2d8727f81e997a15b86ee2f06a8f645a8babf04b5dcfde54503e4373f36aa1d5fcddc68ce4e6458cc11c5f2755334c7157678fd1db4bd78d3dadf4b973c6dbf9eafd48f5f9b34145f7f9ecc8bcf4b139b0c918ae837d8baf8a5b39aa93436b6aff7418b891e88fecf6e5597bd4fdc5f789c47a4a0bd34f063a2b6b3ff11a9056d2d0b70bb2df717263d74a4ba74a283fb0b8fbfecd0d8e818b9bfe4c8ac6eefe4a5c84bcbfd85c9ed9d3479b961674ababfb0aacda528e4fe62038efbcb92ce350b077c22d5514cd7e5274badab68a1e82a5a286558a7d8a86e685c990add6a75dd2aceb959a9ca9bf2f646343665b5d5f51af1fd3ae2bb9a29ad30712fc0e7f75115ad8a668a688a6a8a6c8a9214b9bfcc7053d475aaa3ae7b91c1fda5c84b0c9a84bd9e14c02b6a01656c3dd2698a3eec16cb11894ac7c0dc17c7d2fd65ba3b90171862444ebcfa6349d2d1e8abeb66a52ac12762d51731965d17eb7ec563658918cbbc2dfea6f93569697a3553b2623851ac0016dbaff7c3a080434b1b37f41ce106038290461232f04162104637ecef6b3fac7eace7555dd5351da08603a468c096115238352046801c20aa988080261ce05144c0fd08ab03137a380c37f8112726a45cf12588702d41c45f1290c214054b9b40f39f13e8270698f147f45e3b97ac260df3be28336d8861de17b5d800038f00144244372ce08a93b290b090b2a8628804747342620bb74a1951107ca3d4edda4dea9b127c226dc996b6249d5d72b40ac841ac020a98b1583738fb616ff34e001d4d5809705551a30af5f4e988248e7081c788974be08947c2084dba9d88f0c1fdb736a273d692088230745d4f06e117e967678c0a12244810122ecd99dc7e6d67eb34841009147112e2e71404111720cc50c304159c20a8f8e02f2060891fd0d0031076782720683fe0e1a71f70ae0f5bfcbef5818afbc0c4dd56efe9364f363ddc676743e2fe7bce8c372de7a53135fd1fde2849afeb73b9cb7097b9dcb249dbd9cac04be7d519e72c969abe8c8a2d4effc677c9ede30f77ff11c344fab02c44f3d3cc535353535353534343434343434343434333333333333333333333b35aad56abd56ab55aa9542a954aa552a954322b9995cc4a6625b39259c9ac6456322b999512254a942851a244891225373737373737373737374992244992244992244992d8d8d8d8d8d8d8d8d8d8d4d4d4d4d4d4d4d4d4d4d0d0d0d0d0d0d0d0d0d0ccccccccccccccccccccac56abd56ab55aad562a954aa552a954323232323232323232322a254a942851a2448912254a6e6e6e6e6e6e6e6e6e6e9224499224499224499224b1b1b1b1b1b1b1b1b1b1a9a9a9a9a9a9a9a9a9a9a1a1a1a1a1a1a1a1a1a19999999999999999999959ad56abd56ab55aad542a954aa552a954322a2537496c6a686656aad1758093912d3f12d02201b3c6f971b8e5e0d7db9d2a96184a0d8b9fe3eed2c7c6f7569ae3eee28321fcd22e7cb8f4c0dd658f1bfdc12f77171eb8bbecc0dd75407505797866ced4d119bff46de51204716be76d95517d9f079c7b6e8d92ba944dd4dfa8d81269b9830b0eb6cca8b8bbdcc0ddc506ee2e35f0d3ac480f779719b8bbc8c0dd250f3ca6ecf0ec04e9bc78bca1a0a1211e8fe7e7c94e109057d402ca5dd7ca38671ea08c73fe9b9235fe76e1804f7453bafedad9e5d1094d3b63596b727f7a2ddc5d52e07ea0c03d06c6c5cf576a169db99bccd39a92fbd26b479b416dab1e35ad4dece3eeb28506dcb5bb4b06dc05035af8ecdafa74d39e6a3151d64a543535abfa7893b70c561a9b1a1baa2bf8372bd593fa361bdeac5425d5a4ac03c9f65001288ef02327f48afbb5e5cccadcdda602a76fcbe9638128769d47ead54c79b352951feb66a52a4318d24f5e05c17993cd235b6788edf859676e5bd9cd4ae5b96071858ebb8b1562ce3c2016c5560e1e709721e790430e399ca65421650f87cdaed5da02b9bb5061e5262516c50a8f92072591dcb61e9ab3d793b65b5de7ee4201172b2f2dc410c2131e421251889c7070c0019ab8eff0eaecf0555dd63b153d29418e13943b8ca8b019d162606a1e0987540396f896f1386920eac1dd4f4fdc383df1e227740fe9c02283159c62688c785f4a1372f79a52d534e735cdd93adb9efaffda990add20fcf242f1b547862a80e1b86b6a270b4796c6900e9cd3fae2f9b289a2b96ccd8c7beeeb4933ae4d5dea3b73890f30399d2949d259d62347b4a5b5cf999c266fb0a55e94511c5e5b6d2ab56d7f53d5ea9cdae14da55e53590ac45a5330eb1dde54fd276f3b556d6a674aa6b6edb7b6622ac5c38ff4a66caa0b2123ee20480e5d4c5220adc958cf8b6eba03de2764a9647b343a4c7431d4e3431566e420996246135d0bc47d5f664d960db3d3dcc4f9713002f14f0dff681b059a81376ce15e47279ca4c08917b39b117052c5dd9770f7189028400c62b834351ebdcb141290220251b840e1eef284d74eae2d6edb8a74670c64043e0d76df88c65ee7afb77aab74df87b5eadf3c4fef1724a71ca12656b8fb08da9a24a0c9104f3e97f761f55f94d1fbe44599ddf98f2acd81e1576dcdf0cfa9c78513cf142b51a4200f1793fd0c8b7bdb0c857662b26bff3d41a0cd429a3639ed9870da2161a7b4e33a7be8c0e13ea53e0a3ec54f39327f4d655eadd4fbf1697bbf3ee57039435a69b4b2e48107107e706a916448baf5683713ee48671c7aa3a522380206426023a194e26388f6c1ca0921e8a30a0a394cf2b098683ce2f181e5af58673ce20122e2d1c1b5849156ecf9a3a16de3a1b96cd15cb670785d40b8bbfce0e283bb4b0fee2e3cb83b0e117e020b46ee4e3ae1f870850a0b08a510469624ee4ebaa18928414b24400262b87b49666dc038a8a301337077121bb25509a42c600739dc9d84040d6088c921e064e1eea50ba85103d10e8f1203777f4980132ea2ec612a52e4eea51f9e1bee40c208123d707717159450c3064e3c21c60adc5d84281ec007898d0e084cdc9d64070f98f0e10f27ea48e2ee2f11f846808276860e2f70f7521b3648e818a03882dc9d7446095a07d8f999ea7e4437add77d564a82b2440b12095c6e4b50ced39dc0dd4954909a387534359c4c8a14b34a5b16ee0e4a221043bde5982e0d505db71cfd15ebc4f4574cebfd592b141fa6452d528d35f5794d7334dd748747bb5c434ff0ebf64633c9103ebb5ba5b36b73396d7f5f94d1d9c5b38bc918a306920f156dd8c094a026a806494d0b3a73345b368d183fd412c168aa384d8dd694366b0cccb6fd6bea4fa4475fa67f9bb36b91ac1ce0ab9915cd5fba65e427950d1cbfaa8bfaec8b776e186ab2c4c6e70991d0e9480a3a73175bed9d90cc00891aeeb3abd71a4d547eb284e9d6a986237e5c3c87113921e9e8e160240f03784f6016e09c1542e21ffd0f896327ee73770e06a75f5334f7b23e01ed0cffa466701f71eeb194bc4f74e69064fc281bbc135b3b53b286d5ed8d4e3504399287cf6e6e1a03e32e434776d8b6f7682ea94b0e53a4b8447177c1c1b52c8685981887c1c37d763a6f4463271826eeb9fbcde8272338685a036978f1780444c403cb3b3a2358448e6011ae256ca27032ee116594846a3151d76db0cc9ef6689e25a9476aed79d913c78c35cb277fa54f63699bb1d5ffe1967d059f68046d177b5ba434162b068685033e110bc78673baaebe0dcbba8e55af75b29239628d6051d7a98eeaef30d6d30a7970a715522b902bf8b45600c205e0cad358007c5c9300e0e304002c27005071e76ea2c5af1300280086b8ad693b65a40a58dcfd454bab05aaa2a8843169f7a99c740ad18c000000040163110030482c180c86e321a96c502a5f0114000265b06eb8481c4ac334cb19648c31c600010000810180116d9201d601715d0a771fd7881dee8e68047a3db4ccec3c9bbbe61b5d462ff0302fdee18b6ab007a1cd31682ea471015aeb39994546a6a60db54209b15787d85a03727a1d64ebb4d542824596a40d742f75916c81666051a2f07d6160ce443526ba86d50593883ea0e1f1069a6d5f1ee6cea21ffa86c6d50db16ecf3c3c9e1d70d84f04ec69d97e0d4dbb37f000ed8b84c16afbaae01366a734a9559b9142e3501cce703d844f9c3a86b6cdf6bd54d0b15b07decb067ee0a73a7e57d8480e9320578b043fe6d60a6d665efb0f7a92e840cb610862e45042115789a03163f09634589260209fb7965d4205f59b012a738465e8dcdc16a542f00227f2ba8dedc4b265432bf20cd869842623a91827d194dc073f43a3cd9728ac6a5dd45d2ce2c01e84a0472207404a0f80305952cbad69a80921da4a09be952a37c85749ddb3d4642d3e75d999a7ae06c8b19a3e68ce0802e85813c3ea75f76139529430126684b42259c4be5cb06d2af91a5f3a09bb2694fe1a4e413c0dced208596037b07816896ed4b2b8048cadd8348690cb3bac580e4c0696cc5cc2cd7516928089e536c62c72518795c85e783258e4e05592adbea592feead8ffde1ded6d27f7532e2a98c91e936ad94b39101eb72e1b1d3823be5ee2ffd97ad42fbd31751fc42aff3f81568a90af3c117e7dda4529a5a4d438db6024f583b072ba6db5ae5217e0214ccc7f4c7fe8d429c4dd95f43424cf441dfe5fbc62882b0c635047b16671764d7df3f75a42f0b88725c240bd6759154a54589aa1b415027c55e861c13e1793571deb49609a8792f417c63e2bc8194f7cd668e1654f12bc856e4641e5dc085e9c804a0ea9762672d90e801066e2bde816af37b03f48da1dc8f473390a4e224c267454621b762de4c83281496da09bcbaccac132615aa6b6b458e6d07deefd10d39b32528fc1898d70e3e44646380c75ecc4ca4a63a6ba5dcf1ab74d79fe00afde4290a8ea7613ab88ffeab5c2392f3de2bf147859fc93826ed0280440f2642d67825353631b443f370ed6836bce1623c448d80b78d479071231a6832b7b10b38b232d20cb75b06c76d5b0f3734d2e0981aaa143d5d8a68574110f560d180d1906e50473fd545aeb2f42d2ef69549203c8e69c1be9cbef3288b0eca6e3d74c7b592d250151c06165b366fed8fc3c6d460015ff08f5c27c5e1c67594b453e6357017ef5940202f2afc863afcf924a805d133fe8bd11f5dab5b44e8d9c1624703e0743a2932eb9b3f692703b877ac672c1cd9ee19b830a81e7d688a6151dd6074c4c7f598daa9d7e053ea9d39738ff3f60f4f16b31efb8e76c037767f0615168d4773dabf8bf27067c92365b49e067ede7d892a091a945c1ecf083878ecba096cb90a19b16bfd890ac28c63ca012abd66d4f115682034b3a840e6f5d5674bea8bf2ccb9dc1f31ebc3642f5d0239ac0f1fdbf7f08e754ec4797ae81057d80b698780555d01ee6790168a60b7a6423e7999bc70222b8d7c679f00a576326ba2484c83d7725db2a6027aca55c10f430779d342ed253aa1b57ad2c72e461cf711b6d91cf2ad24ecb986028e629013640991d0b94a3fd0601b90dd7a7ee4a61b2b472dee36024d3472824dc351550dd2ed03535b6be47b0ca9a73368a0500e7a075eb9da5f00b87da2d681275f602c60b8c294690614ec5e43fe8985c1966c6fe86dd8799229be291c1cddcdafd8b77ab4d1dedca66a0292a389b445c43337eba8fb9c624ef6cdac60218302a3f09733a5d784353782ed24f5f3a598993f831fcd1027a15090f5ed2966b6c5159a9107d585c7018d377466992fbf527fe0e350e6aa52f5ab92d161a5b46f3313e5bc6b0427a7d2b51b9247d83b4dc748ea99e86da3bcb674dd6a4686e38867cd84139a2d511337ba6e8037c2bec8bfa176126defce3428b799c1305ee30de88718920f399a734e9249b5270debf2d849b63e9f08b1afb698465d8eff009bc021e14136eb686922be341547313a3b7211b2b0591bd2fbb1d554a86abb671d0241273bb712eacf7ec4efda8f581314fe7a5f4658afa703f4ad8a42f34461f03dce4ebe63679ec9b68a08c484d95cb5b6a62a26b1852724f173ed457f51139bc2c654af16f53b136cbe77ac2c29ebde738fdca87d66cd83327e43686449364a43a4d55d45f92f01445cbf62229daa85c6e72758b3b0e3a67c027b203bcddd8cda788694585d90d1da915e5d6536d21659be33d64ffb07242944667a9848701f130126bc1c1f52aca9a03c0b7a799b2ed7b7d5cb5dd3e6ab3e9057eccbfa99e0fcfe723138a8a1fc5d54e36ee3ca547452d654810e39d1b295b35d112f37be3b7bd435c6339b98729c1efd8862245e56ae4ff8089a0f0803570f42fc6b23bcc90f8788c087b961f520b11086caad5273b3ff408717b6551d5dc634d2a34c88aac970a3ffdba9b561affb47aa4dd447999498dcb7617dfdbd1194d3d0204fa7fff2bd2efa633f2c9b52bfca12029df1e1cc13cecb54771fca3138359a1f14b2f6f6fde29bcabeaf8712e849cad4b795fd456b361995021afdd1c30e00a46a30c16401e8eaa17622450401230b8e7637286b9ef0d8b6015e73182c96e5de27ff85d5880625258f7697e0c71a18fcb702ef7c12425e35bad21f85d7c109acb5d85648969a161ce947f0eeb5b9f1adfd3161f106ecf72768f4c1d209bed5e78308284f0c75c29e8fd17310c4f1426437a2ae0cdbb54f560d9b0a37644379429f4c832412da0b65f9ec9c12af6ff58caed32b38fc6b88da07158c7edceaec864d5a35f7c3619e28df63e4fd1fdc1fcb9b7357bdfc4eae860ad34a98465937bda985fc1e1cf8b83f997787d4e67ef14f7656c9adfcbd079fbd803630df4c6d1ffeb08cdd7a0cfd46ff491c776e9ca328cdf5ce54616e730085f5b99d8b47cbd48e7eda1139d3d07aaf251153af16abe6ee8036826ce9dffd7378fa3c1b85e1a5008ffeaa189b13c8312cc3c80caf61e776d39da6e386bf62a97810417f593c4fd1517d7897814af57b8f9cd4335e8b7cd781b5f361bc6fc0a56d2d80a94fe1730cad033c507580e7686507226f437aacd71b483bf1ef457f63b3c6453439b8da3e7f6cc838fb05986c2ce48b2b0e73dabebff4c8b6ba47ddbf8bbc24d142e536ee086f60c76381707d80fbc005e71735103d0dbe934916eabf84e10a5364befcb338d4e0623f92900778a9c7e67fe03924d8a96cea8460fb5649ab0a2d52e5d92fb06d4f9d5e5e8d85f683725e06555e0cf868ea6c1bbfab1b3edba20426ce82fe754c371022a208ad142a17a40a8cb5395d342da842cc47c6e104555d2b4f09462c2989ca687cbf7ebd843e73d75e2ca8045e0bae9410df8e9196af8d970da30fe6d34df3505d7d66ad1e0e168c50273374d4867748b9933ca69cce0bff0b6e6f63fbc7a2013b3db3d21773c53c8c30b71e95e96b10df7176bb7ba161f87e4bd224b5dd1d07235bce8b5b4d67c1eeb0cc29bfe4f73f5550a0ef45e888ab51cdbda3655e6e871a4ca6282b7b9d198669e1c27ed427adde10b038e1c62788a0a4529a6b88bf63847e4c5d6d26efebdb326722dea76a2144f0cdd7e83e1984948b95e4a4968f118276cadf8dd53cb763577ef8e1faab7a62cd98230820cebcfccbba1d18f5490a7b5a51cf943fcbcd356e722a2b90a11012f83016c237ba714b72705f6934274cceb8c2228ea7decb86ae0d841ce68e8243e7542846ecd28f19113c8a1ea619608d2fcd0091576b6f98dcf9229e7b7c4c7feb5f5d555e139bec2bc471ccd69c8fbe599a32f6dadb6755312c692fe8005b05947a557edad01705fee015aac77d05690219701339d1df4fef4dad1b8d279d2842ac9e5212cbf0b7e1baa99dec6fe7880a5c66db0b030084493c3d72319f34079dfaea2c776a06d4be834c81e9b691489cf593865fc46a87e723dec18d185f48bb6cfef32a3751e4a1e71b759e07c40e43601eee2da76be15a5eae63995b757fb2db124ce40a0834e75da01df0c03787a6132a60755be7fd7520794c9c56a6574afcc981c2b13e2323595f181188dc4861f855c2b23d8e8bc31396a4342ffbf0b07d7b3093032c96136ba534c3a5f706633ebee371e1ee3fea6fc5d722ef00bd93a21d2002c5e4da3c7f0b6841ea4cfd2c3e4bfea5262522f855eff5754514a567c4eb829b639b22d35cd18757d5f90c4fc33306ed2cdf1c02c96ab230833c4ee7accb0015aee2564cc19f795db4ca65eb055414a21f8504a997e4beb52d7da949b57f55b62075f8a56e13a73e981da5cc7e59256744969e6832eb2a910222a54b8d3d0efe05014ff1a8a71978bee69aad5dff4e129fb4fc08ef0d52e69e9838c915bc41f934b8b332e9d9ae3c7e04e2b11f10b5f59f49d538de3083959ba4dfd0512e50334429de39dac9d9fd2d531b61bc19b4487ddd0552c30d100a19c81621c9a009430a780990e1005269463d00ca1888112ec3480a930a280857600c52c1461d0024e8131154c046a51ba882f37d99000585cf7b0f9851004249863202681080113ec0884a120c280053901c428186120210e0131164c08442047c01807110124c831604621040109e61888492042c0043b026128883060414e00310a4618488843408c05130211c81130c641440009720c9851b203ec124e2d9f71eb7fdbb8369867fb83adcf6b93ad41bbda5f6acde8ae0417b1604bec0116d322110c5b8c8fa0f1959ad61002b9078bc791e9a0929d4b80d98ea11134b9bcc69a4520f260c9d8651caeb22309b0d86e30622d17d5588b70081e5b19938c2395ef20311c9b0c46a2f9859ad71104c113cbc790f96435c19db452046168ed071a67470dd498bd16580f03b48204f60390b77852d60f28620e0026171b4299a18ed18653d9f5b7c1daa2446f29e03fc0ab2f68b9c3000ae61998d12b0f7cd832b590a144188f5bbe6ae322e9b4b643d32b90be6e49ca49e3c21bc4d08cba8165607c5e1eff32ee45777196ad02bb340e8e84bbde98a249b5b7226dbe129ddce767bd45e3fc0c02ec3075df6812e09a4e8890ebc999fb3ff1af6c76280e4a83456e058398fea77b39b13105a7ea5cd2b4843bae1331b559fc69c65264d5ede1b4778dec510938dd5cb0405832e4e72ef245588d331cdd59af055ad0d2b81c4f432b2ef725b3eae54d4cbf9ab86e611f15c431e4a894d3407affda93d7f2b7801217ac0076d01d9e447b5a603a07ea58ce460a876f48728059b0d7ec90cfd86f1f3d0fef5f169bcbecef6480e0235be25f00dba3acb54d33c55bba02e296190494bd2b4e629814cf43c5163f4bd7b5eed23e3fefeb2f910afd1543ead22329a4dfa922054a79085c341ccec7b71641d80267cb6adca8a162fa382c875dd7fbda7cf664e801faf3a4858cd42ff79e82f56f7cadcdfebe2b23668d434fdf63bb117a5cd0156e5e13e4b9e528f907dcb038721e20812198fb3c42b534124fad538f1bd553d21edf44a21e8aeb166cb03445c19da892c07e79a1181d6943212fb51ed8d468dc4717959622a4bdddabcee5095ed17704951521660c24de5ba3d24d3defaa4816fb8b7cabfe77233001763bc2083ab3cec58038acbf3f4b5dfca6d33351aa89b096f9387e0823e6f3d1a303543cb9dcf4e1f916c24765e115f21c2ef828b007f5b6ef517e5e51fc50ec4dbb7192a3d949e683e9f08f68235441f162f3c1c3fef4a039b56dde48f8837cd03ccd501a5726d6afe2d67ec5552ef1da46cf37a12c94046063875ca148113b4f83e87b7bdaa694c2e9810b75b946bff61e9eb588e0d84b95bb98d84d2b93c76f11c8c29a794aee0ed89dfd4656dc79f29f4f80d43ccc6233c512d5ca9971d0546674352b674815140379daebc2d7f1d6cf2e1ae580397af923cf8a461a6a7f5d68fe95db202b0ab9b79c4b297fb2bf0b959f689534f283141783e3fb00a786a80b0265c418d0c31fee1c8a75f3314ce8a768af166acf235d37c15587db42f801c7da159e49598492b17ed395299df1f1316f7ae02ae2fc3d22998dc6a0cde532461fa4a8587fa9da8163750ecb21f88a371468dbab2c82f092d88ba1c14c2663e38f47f9f2a96c3c063932df90e58702ce6ad1fbfc363533f3a2c7ac4027aff847341bd5a361be048065b1aae672c2dd31aa6be94df9bb19e51dfdfed5c273e2658defa87a648718dec5331ce0aa0ade69b4abbffbc7fca390e004e608d50b6c5bf2598f22f8564671b0348bd10f071e36912cf09d7e01ec924679924eab312de666d0f7b3960b2ef19104b9234ab62a71272659a61bbea334ac47b9988d1d6d15748d33e8694d87ea3c964cf2be836df9210c67885c007c4aa48b8f05c35ce3a139f55e5ca21eb69e20a23f1fdbccf4d05b9f53f643a7d72cfb656324fa46d9ddd1a79e2fc37b0920a07189105ff73874e9edf1950effbea6012af7934542df2af40623f9afb92470874aca5a90d1fa675ab9265dd8d29ad2c0ece8fa5693bb56c6ba9adc098cdd9e93939e6df36ac9cedf7f9d24dae3229f94f0217332f4344667c4cbbe882f22d583ecb3fb057009d1ea7dfcf46582a78b0931d033ff9377569373f7a9bccf6330e27cd91fb62d59837ce53ee4600f7ee499c676951d7a8054fd2bd0e258a821b91a94cdd2ce18829dd8fbb8922e9e00253746a334bfbf928499bc4a85a1134a4a3c0e7112ca8c59353e6e2c2902674e7967be04b9e839e749cef2f3a7058b99d8136daf63a3bf5c62c532781c12d07982fda6b6dc5bdce1bcbab69a43fb865cbcdcccd26531036ac416b8fe13343cd58cae05f30cb38f1f851adbc5f58ce039c5be6301b9891bbcd36856d3d275ff08457a0aee6364c1325a8971da3ceb945f19a8ba6a2bd4f39effbf29999f2808da70288599c7e6f4e4dd98c86d5de80e458c6a0397501fbd6a904023f3da0fa4a12e97ffcfa23d18b44d41bf83e707ef5feeb1c6cfe901d66736dfd759e0cda8e981a27e3e677c7987797e51f5dc25da38a3f19bffa79d72986cee1ae33ea96628cb68be1463f5b6b246bde74e9e1ddff8af8f380bcde331eac399d9907dfabcdb65eb33b62e88ce389eb80e62b7427ff1ab4e59ba9ba125f9b4f12c9b7e2185c34ca386bd045921b3e61839d492acd453af81cc0e15ee478112d766395b5d2ba6f6e557e385ce37ca3f6b71cfc695a6e6f50eab6a4b2ff08536c241944fcc17926119f903337763303efec07c6136df17ce7e2c94324ecc1d84e939e8df59b70414ec20f938fe4a5bd75816148794b71a740225805936a4514dbf58037041404294f3efed081279bdd2aaecc7a6b8a7bc6c4c0223af98dcb1d29464f99ed8c9ba878c96b71124803dbf81063383bd6527e23b0bbdfe1f5b82650e96859e78267e9c28d84517084622c4256686baeea03bc73a77252e726e027e04860e4fd2d9eeff320ea96dbfb8132080df37b7ad314b6160bc95bf1f4f1cbf3850b17769077809e9e4d596d73f94003391b4403c66044dd510f9b6e05868a73356c5ccd5ac0ce58a295358b32ef9bdcb4a96a08284984853cc4e4806d786466aca5b1e59b77550776c7fa5aa38f965bec136a87e2c23892b71c0e809bc7f2cfe43267fcfd500f73f5929b4901e976288f2c12ecd99a148c708b0d8d1eaeb52c57068046e108ba192587a8c48101d71f0784dfb9646b821147791f8718cdc251e9ed58664ee8ed4c95e891c1a8e10937226ee5cdeeecf2b2ef7fcd494b6c3b2b80fa2e35b5ec41d38085d621dce91269527b74de93a00e7a6d31d50b3451c48ad6fca7d1bb0f5356c83ce5b176c4aed33c4e31319ec6ee87b52706d8ef3f642ff9376cbb98d38772fff907bcf50deb883cb8377d0022844a365d0a807a9b5dced904658ab441f1b8334fb62c4550ec6836a7a38f4c4360d54d46708a5089b4551fdb54084ec268764363648bcda75b6c8dfafc707fd784a2bfbbcbec603a256a60d0b4a4774de02307a936ca48e3ff04322f7c1bfe648c08b8c7f81cc4a18a7a011ee10acb1d22f3c5dd0c40eea63650dc50481cdc3a30b959a5f5cdb33d3d171e109812f1e46bd5fe247fcc987345eebd845769cd72ec684996c8934228a64c1851cd320703e58006832400c4d29fb2904ee7e68f7f9c5f373cb757d4f0b217ad9c033113ec7c3b5c1648faaef050ff89853621dc882aa06b386349218071765b4e1efa77264adc03c0879b3e244579b1f4fc35687730a45dd4a54a788e66ab1f2ae8c10b668c8f86f1110aaa7e6698933eb8185ad6c9b0bd5f0f0be45cb46d7bb09290e3e4dcdbf71ec7215bbf6377240374269dc6f64eed06b5fd6f1ab69e8fc67d2f2c13ebfb459110b1448c5e43824e5377e50353c0ee84139123579db504e3cc12694895d27d764198e85035acdd6ff875d33bffbe846bd71e97507ef779bd3452558c3fed6bf337cacd065b0aca2033a30ba60c123430105730d143c41dfe1197d300665ce9f50e1a3541a04683f313043a24f77d45ca9dd2c50392968a0cdfd41e403531de6d7214cfe3b07984f2afd81d3c56a1fa4c82b17b0afcd4813b2d0c29a6dee9a8045fc0d1ede0fa14801f18c82a37feed100df62034b83cb03fb37793672a93d3287e01859ad1e1606cd46a2a9d6556adc2edb6b4894c8e9d22bccc83e1160a42b635c541b5e9ca41ebc76451ce1a9f745510cbf458c36e13f2f628a4b1941b971bc608c16d0f49befc8e5478534741814648a7684c7d7b94fefd9885239e258230bff24c6c25cf90919062653021b9f893bc5ce0b1270cba3cc57334827ae517e220f0705937641f97cacedfcbe41d84d783f6bc9aea9f598295070847ab3ab97f5cf2f5aa761aed04ea6413d77a2ce2a20738780587980ecf0e81887b51dc624f04ffe5d44f8a3dbea766b40f45e6df48ad5e61d412ab5b9faf5e5b9e48990e31c01c614bf00549a9c81c76603d6039ff807a73f8ea4daa3f3897a3f351a314e8819c518ae4a0e05da88ba2f82d159f0b50336782b8d5a72edbe98eea012d15828d503baafe0d985b1bd81ed75a1916567270c91106347f0026ffcb7ba4e253c37ab53201ebf523cfa8bbd5eadca86c446bb2238cf21695000668e9e8e075e61ba792695d42ebd224aab9c53f8a9cbc0708c9d323638ba663f11d64c81efa19107fe8a4cf9dda19a97932398e2865b7e2b7153bfdd5bb83590eedb93af66d2e56faacb89be90111a216561f7cd1315d063bfcc50ad92970cbcf6348e1e4b959e5b38da5222fc3132877697082fa106857d4c78d9c3b13e9d6488130176e36bf6897887d39e4b79307ce80573263002ab3d395c678b98b8f1042b013b2176df28124f01ee4ae7a7c4946696c747398d128bf242b3f8af217fa60712de080fc094c1fccc18da20d0f01856d82b33029cdd6fb334f0621f0396c3b757c0d1841979d01f8af8b3db269208324856db2411310c2c7c5f7922a31bb6f15f38f25041dea25f656bcecfac736ff2a3acbc2a5725dc266cf557a67978edebe6d3b960ac35548ddedf457c0fe2cda358e567027f3b811fdfdd8e835731a7be455190d88aac37c2e89947ee4845e6223e715a2e6d28c10181bb3ac46ab331cfcc24ffaa627ba53f14ce3e6c8c32442f7fc646520e341a85f3ed5f17ae451a435e0067092de0d5ba40570cca89984b19e08cf3a2e7c4bbe2028ac608ec92894d593922e27e194eef1d411466511011c6992224b3899a81c5603cf8c5930e394617891e84ccc9a3e01fc7f1f3bac582a0edb81efa1e0d0c413e13ee0d3941080446290b057f567c949bf3652eb9de47878b54d19e4c1ade488b861a2cd30223eec3ad513cb918e5182c8609f286cc71f5ffe14d3c960907f25c7ff1dfa991837a6347e3dc27cf63046c7089903cd6eca79a9d4f7b5a8f77fa2c4c4366618fd118572823ee2ecde7b96013e789fecb2cdbcac1e26199c964fb5d2a7f7d402fe5357a7f27b8aec44a2050569d6d67bc902866e13f8296b452d32332ca1c4e1bcff931701df01c4bf04163f57a44bc2f1c1145f0c43eea84880c2400ed4b5c070609d941c4d9119c0dc2d52ff3d8219a74ddb20d203d8dde229324112622e69360557b112fff6ac5aed0ee4f90789c0fade7066b6f05ac7d846939621e15d40101bb7c4d573ddee2099d327213b63fe6e44e7c3a03a2b0e43f48b8c75919540396234d952e8b8989a4f064e2cd89aac305b9a0638c820174041f2f8f77ff0e1ae30ac4a05f05ad61e4b1c6a68646c7845326aa0056a1fda9311202f49a05188a0fc1d12b5077fe0f01e40bcce95cd26abeefa3a82ba9cfb066d34a47113da123dc2e19e061b8b95058e97cfa5e4295dfd21394b01d6472069d5e81bab24bb497e5f7bef6f54b1eea2f584d5b70c13e72ea40b073ffbc024a1eea5f4e8849bd23af147b1ce75f03f4259d3d319a619962ec7af87e219d8f4639e04464f733b7f7f5ed2584dc90047bd588eb10cd4666e1f05b775de6e1612897247d3a9956bc1c37e0e5a5b6ebea2501a0f31b1da0ea21e24ac7a0d11aafa037f68a76a91c02bba82416c34e983a30b293fb0feaa7068e17d72e01173fc4bf820e539fec0de8f1968417819cd94d1174ece2bb82c4e65ca763336bbe164674de2ba7de8227384977e7bae6789922e60ec99a8f6b1ef8b2566a3d2cb40d74f61762d23fa74be795063e32a1355c65ac1742e749e07a7b7dc1a066337c5dc204bed77faeaf60ea59944f35f31a3edb4302c3038be4b4e4436fd844b0765754f555549938cf06598c3a9925281c9054b3a4b79f85b1612d73b5c962662ae83c563f59c6e85187f86ff4515e72772531dfc05575607f782c6d304bc85e451fa7cee27179f8c4324ae818c1b9c1b1c1819c67077c367ac2409b74c08d0fd828de7a275a4a88c03454c619a0d33bf6cd9463f4d4a5b186382233907f76ed006007761eb1f25988accb686fff47a356b539fa426d315e78105b031fc49b97939db7e8778910c8802d13fe1e65be4674db4c24c491c5c4fa6130a326a0705747da290f1c075a3369f72928b8c7a7238d5180f2b3bbf0f2e2cccbe1229bf61eeda82dd0a7ed3ba3fdde52dbf1ef0dce652650459b8ef6664df2d27cd91ef1809d479c02f81f8ed087539913e4ce715ac4c7e957b83276f7271c9233dcb665c138753ab89ba8d43af82d6f0df934cabbafbe5cd903f899deb49638a49a9ee466dcd8caa27e0a1de2da9711c03ed3f20552245e92ea22aa84782770bc9f8993571bc23848137bd577b3ac22ffa2ae284802288c1be93b444f4f54ac93b3fd57a85cdfb3df0179d8e5b88fe48be81c1f42510ceff280d7f1780b137704052bfce4575436c01bc117df40a303de8fb4c77fd73b04fc3d83ae24d405327864982d3f3e263c6d3cd4b515bd0e771ad82264a7d6228f83ba33d3d3cb57d9704e55414dbbfce31b61c752be40d55f720a26907c696dc76d4954f25315bca3f01c7cc8cbda633e44f9f7a2ec5c0f1fc4dfb1d9c439e468c18310665391593e3a8c132557bd1d1d7ff3929d0bfdf94e19fec0cfc0e24d6570b251b70ecaf6770121c0bdf7c7436bb82b2a806134af536036f271bb612e6e400614926495c75d03c9a5b7f882e5280c2284cc47c11e5dcea53f36ccc8c688c701ddbc25664aa4b991a4e939702c4243ce9baa8d9a20ba4d32dd99f44af32996b365b0efe8d7d8d800af8e3d194fb326f89316e9258f337eff4f4ebab40112a8636739bbefd7da284d6698a191eba2f74f4305c31444b3e0679fd17ba2d5797c01a988e4959dbfbb25e5f6ed1c7d311a58ca5c3737599f77f3696df7197fa490016c1d2d4d725fb53a93e7926240c2b0f9f0acb4d9643390ef9b7abdd017120bb97e2e26173d6c36c2c1d84b0da939783b9b06cdae55b38e9fed9b81e374ee3c9acda077a0a6e401825ad6d58614d93bc6febe11ffc10c189846ec19f11b6dbc8531f33c16b9ba66e3ab9ba6441f578c3d963cd0289ca19f15c4370deceeb55a9989deffe93d80fb6548f58905ebbad8b73b0b06700c2346a6b759157c6fd637b70b926b5700a6116f120208840299a9a027e77f595048fa92aa36b301fd536f4bf7ba0a93ac202ef4da397d3f48899673ea28d9c38b8033799fd675be583ad7705c72b47f1fab4db9092d6baaebda609e424c41717cecfe79ae81f4f9164ddf32d4cc56ad98e3c7b2412aa63e4fec4c63d8582ded7d10c6d6b15d1626f87ce4b14fd6ae7d4b9117a6ea965aa1bd6a7e2a9e37108c66d924e9184603220135c15a3e6d6465028834088468adb3442c2129cf90d18065bb0dd2bf30a073baef7b977d8bc0c5993ca2d02e642e6d4d11c1ebddc5b2ee88e21f1cb80e214ace498ad989fb91c47aeb9f30fb20420141bba842de4ba835886ead22c88ea86eedaf7345e9cd9a028f98200a0817e9bc6a0e894499034221b44364add106c38d95502a8c4171e673fca13aad7c1c0945e77f807a0075637460554580054e7196c270795ca173cb0ba2412b5de835c49ac0571690e223790304c142621caaee88d8094ae59ea7bf9ca9965430a6ebb8229c5e29704c064b8d7e7f2cc1b4b7aeaa70770c3cfeec77567275bc70cf4283d90f0f278da16c7c3263729a2e5d7c9420c4e2a96e018e0c90962012283656dec8703b20eaea5a494504e138b65af82c8cf148bbe89014409c0fb7c63153eb49e27770f59f64f76af0ce1a26591b3a57b010630a101db9b2e4c28ad506e5d7bdfb38841c27d2b84e790061570390f596b923296732e07cba1b7be19c8cf254754c1baa6dfa21848dece2d1586f52b80769632f53bcd27f8aa7181d1ce61b94547785b16be0b932c1b50ab3991316b8e789c00d1dbfd6d2d7a14cba13cbc9e7d2f9f2c17e334f6639bfeadb8b14461736747db3e7357ada0bad7c178c730d19eedbe3f83fc747f9ab94235bc27b6c6b917c2f3976fa73f76024ec93de16ccbba81ed09cdff78732bf7c858f172b74516898bf89987e1e12e83d73c8af51f4b0432f9050fddaa082ee5cda2ffd093ae23604a3b273bea82fa986caca3326371e734e9d0bd5f000604c27dc4ce6b3fa5ecff652b8d58812913e06b169ca869c36474dd8f188199b0d653f5fa6a35a962e9746491635f6ad0319d9c3984065c4283516a7751872773737f9cc74600758d2554b7a6cf8cc956fcdc738d79a1e344a63980e6e1398c3e3074ae085c2d782f547c75347b1dfdff5c8880761d3d2994bbee3b6c8fc447d8d86d8563fb284cac69bf7bf4ced1b0fa1159ed7544461dcb2fe6a93fe1f102bdef2dea07d2da1524e0819120e0546c84a9fccd162dd2f1c6433eb80991814d20a36875846c6b431c7e8ce184004efa8a445a486b1399a91899e6f6c4bf4cb953431e6131e297d2f2b66f24837845f3f3f48815ff7e577170231dfa0c638971d89cf2256265d8041a01dbccb9f767232063a51beb5d8ae18300d5815bdb6eb9314c87dce2c933acb3e9dabea78a45d7414511735e23db91e25e82893fb89a52654b12865410e6edfe5633fe74be6b3f6e6a367351c6dee40ba6bd90d26ae90ceb405184a03940b76f07c0583871d0a64aaaa440c0b039f1e34bba03e040febfc57e6a06db11ea015195473a934d13d946d9439434c6fd96c2d734563022f5668ad17ff7d1782196d066f1de9f7b7c17e2736409c7422b1dc2b69a0e4c68e0a023d327f86fa4418b243cfcc411d00016dcc474818652c0b2315c0e98a349073f83ea22f41a868fe65130beeef853eeefa6eb54f3b32d016c041c6639aaf87899098bb9e427c488d0631c4fa9855562f36edce9646945601883cdeaaa62b54f9e2d094a83ac72fe8fdc9933860946607e33eb330b66a01eb054458209a8a51098fec79593d288d233064e781a26f2804d0374302b894caf38718a2e12802a6cc6ceac890efc7c738bc7f415996c07120aab208445e6fd4da70807ee4b07b60077489fea6c7a041d972b4a100cf08b15521485b326432366c10bfc842d840a43a2aa4d36428862ceb4fb52f2f6803866132dea64abc5d6bf7844b2082a7e00c1e32df2b65b99a4e7d872b08f4aef3ba9721e1feac5755e9e60a766759a2576b28b03f414c4bc900a4277d64afe731ee4c139ef7fecefe795ec8e8ecfcb9b5bbd8d75db20279ddd04cd83961338fe1e8915f215dd1d3f1055d97d817d44947495557d7ae854d445c0d6ac3377a3134c37be09e1016b7d3e9426d6f451e54959e8830ca3e123e4340a6d7f4280032464b66a0f0b14da041b6eab281b52a2257a488d25aee39b24459d239ef8e2c1e3c130f0f3f043f60fcd7edc34d260619c02c74c88a50e089c4b0e78f79ab5ea4e21975d6a7da2b4247afa097340306adf6a5203ba47b8c7699da916e4751800b10daadbed95651a6b9fd1d4051bc1959254d9e709149b497c331f2437db835b8af9ef1ae4e4d38b9ed930cc7c7f58fa0a01d4fd08d4783d140c1604f64e839b4d731b7ea07d2e4a6ecd60fee8ea2f3bbe3f77c45e17f2e59bf3e26d645402a9cddabc2c925fe41584e1d50ae91e7af60d9988b0118fda43a92a86eb4810d440b7349bb15e47d8566830183633b08d12eef517237860ac666c634541f38c753231d66fa1ba5fdd2bebfca779b1969915bc87fdf381cca6d5349b2c5bf3b808a427136ca7ba020fd9ef64c26273086d4ef78d0c6612d4f50e96ddaacd8a3a7a2c35ce2c870cae8ef36cc0aec502782266905dcfc61a8bf0a54e900b36af07218033f7dc57ca89dac413273f562b70fe78689a111cb62e3cc26617853ea2cad494b1cc57110159676e2062c709c1492484907441720e34d2d2fc0feb35a8c8093a9746ec6f5a06c3e1344692e48d8f3670480fbdaa0207cec92bb80e45135b482fe30ef7bf88a3c535e90fbe03117f92300eb94cc47e06479bdfb950ca5f5147403dbc27248046f4b9f9137e26ae4f621c26139c47390215b37d82bf2d396490f93f51e7bf16daadf3cd9186303274072d1a144b1c9b813e05eb0fd764cef7bd67fab23a28add1da7058a49d08e9f93a8620186e2b3b7bc7826935d27173995110ddb920b463230ca70795e81373483be2d2741f0522949580dc3424fa770a73d2b9aaab4f32ea17f46c0a5cdf04e2214aa1a9bdb1fca3fc555118e53c776215419fa99f1489709031f1dc45b4650bc83b00f9884f4f7b9f45b43304809234fa2758e8816c19748514a863e43cf840643257d7e83c6bf7bc3364aa079f64b2cbe1dde4f8ef747010209539b745425bd00614417301b62da99bf507381920312d21539ea1a93ea17a306fbc850fb7bf7854eb7e17c61148e4c2496e59ca1e5d32c39b54f67f9c3a1420e734efb8b50770aa33849034de983a191f92c3ea755e6f2cd2880301c1d27285346746346371e257b6291dd53a6f62e8c7c71b12f196b3e33b44f3ae556b7f9fba1af5b8c4a731e9efbf475efe2f2fd1bd4ea0b17e8df6f927ec21ed19dd556b0677cb590b728230be62d5e874a68dd51dee8f0c962bae1b3f4c0adb68d48e05f7fca3d1ee765689641c039be478820835eb20bc41ad07a47343091c30f9db71f3e3bad8ae67829187b4f752845ebc3f624750d116b86d45e3b06dbebc5cc04ae3f276f14d985f4f888d371cfce18ff8a455f1ce05e72c379392e840b5ff23a852d169784642caac7fcfbad97cd762147153c4734736842cf7684f1319ea265fbb94e4c632c712bed04a2c18bcfe9cd9f79ccb222aca302d524cf939ea1e8b1f43ae3d36dbc249754c89cb0f909c0e3b28cfc340e1f76c4d32468d2776c4193360100c1d89e871d4b1043b9732f02931ebd96340aef35528dc21e15289065379be993e4ca152469d172ef8ca5ed5c6d9a0e2ae166610ba1a43033bc56a8770980a3b85576ac0a6f0293ad47f6d08cbe2446fb0eabd7b6934138f5606d8e604f2ef538fac22d238c00ef42f66a216ffcdde54d95468cdeb2c279603c5f602a1349076c6cb99e898e652e3c2c2a6c3948c61ceb8264a245d7b33d3966a5d26a1bee861ecb1d79bccc0573f967ba773f131a04cac547a1035ae19028c50defc10761921758a2494687b0015b51b6c417b31d118a0039c39e3db810aa6302307d24d9ef06a2041fa4fd42e6fc3017a98f05c2d700d28cbbf58d20972b1abaa68e056d4ae4f9346373ea4cd5794738aad8c750bbb986c041e2b51a434ee99ba2af25879326ac5f4dc857c369aaad3af751ce35d32820093f7fa5bcdb8d84f2a6eec2967bad98f551b0711a5d3e46cdf1093d8806e708ebca0982366dd886f7f52946c9fd67f8c32fff3269eb8aea541d0462f3e28fdd4d6f06948a83bfc8b5c452152309f3d262acb466f342d435e7aa6c6100847256bf4af74458e435b6f85170dfe76c94dbe4c97fad119e443c10f21343079981baa8114fc30084330dc0161579c5b5112273aecf72b7fc570fb3c89804c3ed140ed7103ee751c6ab5b18d3f3c714ae30082c23a0f0b231af9b229ba384cb7fcbb37edddf7a43c1eb212a018f0d9865228b62debfd2806106c095be7e67ba8e4ac5f8dfa6b41d7ae50e49b046cd8066cc3b27a0fbf51297d27c97f9a9a9f5b349d0212029aaddd4c7dabe3beeb6ba9e113b8a8496d4491442f0975dc70f0e26bce8f040d78489014ce4d472a7b92f462795135577a3f6ae3d07a8106c09f2fcb78bba36f15b2fb55bb93389728e9553728c4cb6669237e88a5dc1c67b90a37a311d02c2d64b9722521c16aef577f2cb9c1085c1e6de308bb8007b3ccfc7f6213dea7780d36176416a03e1993ed21b311dc8f59e8bca3f035dcb98d2f6713470f5150e0d46668138b63a7a41b68b196113de70e5839e6df80055de84834af4630039bbf4029ba06c48e13ec969ff2124552d573c698a37349ec51a859a2e5a1043feedf709cf51b1c7493c3edc1401084799e429fd147ab6671907fae73cf2e79e1d9c6f306f61742d30b5d41ca65120b9dc937f577d82d403c47c3fb78fc09c469f6ee04fbd697bf08697c806d868847bc71c45df061344d67091930473ee8bafc383db02630b47d4b98520a8305c50b9643ec4e64bf4e1790f02f47ac83289989f5b5473f7c5b28cb1aec658745d0c31541ef4ba7b68d7707128e6c3bcfee3da23804c3f465866649a46fff4071c6ea01e11ca6954901e1de9492c8c3545e69beb8853767c8a15ba1bde11424e23678f9fe1257481fc9a25f009a64a0b30ab02f923081a64a6388670846e4adf0e4fe8fa9c3674f1398c7c73ea5661760049c924ebe0c00e510766e27e3e3925040fa24065b18bf942e5a3c4a3c3f8c1194507aa0a5ef76c3bdced528626e230e85e2b09e11b1f9405c5e447450bc4117a02f964741f41820463c90c238d5768dcbd42a2a98cff7226deacedd1699ca2197ac959e81b93ef5dccd785ea014bc773fc54eae2f841b7c23ea39b4d8254f1d6fdd847582a4be6a8841f9672003fe2ce8e8a1c3f57d10c517e5e3ef3a6b667c11b01200a7287d6413dbd1aa60356db1b04684dcc5cdc4e035043a135ddf2ae82aad3cfcf34475f3f3fbb75b8a436ad0d079fbece00dca0242d22a6372ea3bcd9c1cc0d866375bad855e53bb48a8e015971f2d54952373b6ad98d9d98d55febabf505fd9f4e3f52d11cbabdd2266b6dd740b2dc20da6772d3f51a001da44644a027d51aa6af96098a2ff703285f0dba9d9314cda1d45354a14e5ca6c6bfc36cfaacb8f967d8141a5e32975802e32dcdb6af38825bc901fc21a59d7194005dbeaf0f0e393d0ce97e07dfce512ee655b45bac7670df2e54fe5e212e4568c6ce2e7caa508e63bcc2be1252805e4a4e53bb3bdc945c1b319951649cf95322fc297a51a8f779abd2fe085cfe02bc77082e303546929cb20122ca1740a56a78880ddf56db95e34e3c055818960bdaeafd67b4ce4dd13f452addbfff4b9b308dc871e6d45c81df80f9c44e88ec8761c844be3a5d137bf07311f50e0370c958e2c41be9dabc838f6c762af6bd98994f04cc8722ae4583a27eede8e1162db3534221c1b5194a5136bf807fc904c489e4848e80a3f23e6b11943d3e1dce3faa0495a823c032494f1449bdc72657d710a41494bb911dc58f6b391aa13821a48290d1ac4ef1f66964438cf783baf1ec29029835187416c6cb34e5be9a4c6c02aadcf74543d9dd56befd0bc488d0c61a78e9e1dd95752604b369d9730efceb294fbc28b612b02a7cc138b3a0ad10e1257c004ce9c0a5d205da9fdf41c43b49d95999957a11d172e0d6851434f8f14673b9ee0386e20d4e6aaf01ff2c44f237e55ead3155b0548b1e25b782af13d0ed29eb76a28fd6ee3fd2007895a4d066205c9695da4932fa29adcfd27707c1e7c250e08bfa536b857db88b24146ee3815edf3446acf38751562916bc4949691b315f28438cabaa3afbe27a3602dc33f62e17bca61fd6fbdefce265fbeab47b18523b720c7e3a67689977eb10479639bd9267c8588940fbe5204698a73b7ffb78ccfacd12868e0a0a7a53cc2dd0b9163f4ea787123ab725446bf211a565dc713a9a165b4c48d72caf13931854ad64c5585ed4d078cc2a43262e1f8b9944a60192b98539014205251c8e7ec720f65557e0fb0e87e81d1ab890732e2f0b4bd2fe7e42918b19cbdf360c3bd4ec54abade9ae6bef93fb0c8dcd7707ea86da60b470721bd7167d2d6a7263ce80deb3c1af02345690466811410c1f636c924b86087dc9373b2639ef6c7830e90bd80687311105295d4e5a738ae2a3280271e91f6a4cbb2185e438ad340cc853c643918c063311eca6f00937967f6d944cf2ab248d83470dbcff913535152958372c57eee3c59ef157d0b182af391336c7c5e7b3fcea1d5b7dff87f097a6bb7856fe5e9bf6c997e6d59256ddab4f342df861b323c636e95483fea4b355928e64cc81e4d3a80c9725c31adb5457ef40b462b8671b28416d1700399fbc0b2f1606c07c47662c72f2183dd3e2e437c75b48f5657bf78b5ec27087bbc164b21abca4a31387c7c6dbb2427b71f8d67ba4ffa14cfe8fe25faf910c02f55d63da87ca7f698a07053b94ba4ed85f7def589b8eb5078400aa7466413ec856e94bce50c00feb8013b920cfcc0de4e68db852ae29dde9012bf301673c45f00560ed71f98822ea1d82fac91da771682266192aa03e6fd260ed12f848ed1108161ae32254e549acb29ad5004b20e8264889442d4254fbd74f139f0a91dc8aef323df5d28a8921d152bdf2f8fa28653e1c1bb5d21f473cb72967cd255fbf1336bea340fc0139fb71302292dd25b41869e83ddafca7902e2fd98a7b1accf935e635a2a9871daeb7fcf08b677b5a7ec0e7a4d0837300cc5388ce2062213c350c537da80012fa729e9a05dd9fde0165c66e6822caa72876088b1d263f143e3fda395fb3558e4e5c00518303ebb62e06f92d3331282ae9c5de94e7c28484ab60ad772716c8c0b7576ae5770830e97b1d3e334bf7931ffeca8a490a9dee78034723d1d84c4eb89786379acf871f5a6188fb4528d9b216363ea99a2e4dd89df5bf6af3e065454f1b50d8ee4ced8eaf77005d167fbdbe843eaf0eddc5f8ab726dcebff930aa9262fd4492879299b6165d831622d73d31bbf4f81191f05c41f2316fd1318c19c2b8e2f532463c22ad6e8b80c7bf1434d2074639f90e33988c3ca1f9c1a0fde3ef49ba703a60ac46ca0235d44bccab1210404dcf072dc9b89013f4061e94108b5ed3fd6d4841b74e76ece128ef926001effd368bd510d80ed1c7f3e34e15c00f30e136e9d3ce0b1c1688d73af7cbab3a55c6e37be4bce1e8f2b5e576fe91974fef7be2720e2d46af870d970656857a4018aaec1e37c6e027ef68e56304ffb5cefa7521a3228cc5220579aa6f5d66865e7596b20621816cec17a823a3355e7a9edc0fbd1659a66c9ab7db7ba5d926ac0bdef58fe439bbe93ac17373cbc1233990f3c85eaa18f92cf0f7aa23bc7f63e7fc3764d653d1ed0271d6accbdae9415f4f5a530ed3d0a7467684bcf7ebbdacc2bf48e4f3929c142f98a1856fe6732f7ed99473582522faba22fdab0f88a36dfa3ea33e8a47fc2e96ead8abd7a4b45d418d3b0baa43c44446bb0ab7b69ff86b4257783809afe29952ff7ddc8f901921c4d853fa479ffdd9dd05203fc0f58327b583c96437a8e4bb303f80d2db995d2769fc3b810e808a93ca9ca67e7fdfac7e84fe20eb5183bf34830d18f99c8130bbd9fcf8cc78eacdb249a3e82fcf081a612acff9e72fc41ce4be678680acfaf34f1c9036510e3af0474767b651b9659b3f81a5e5301bf92b7d9167658fe443235d762afb94e72ce02b5e01c11e31ac7b78f6be2e4ee7fe1159803a7e7b3223afbce8db8754be1fac228b510045e927f08cbca16c85b9932bf3d8425f0d7098e17e6bc65511bd95e102324c5116456e18406e80abfb6dc725418cd5ccfedb589909022b1b4e0161c0fe8aaefe4c6963b37109045c6c4e77d74606c8b05fb7b6b5a13a30ce3754417ce1af0112e74c063615b12599cb58066373cd58d06eccadb66218f68af1d8cef4ff0d153fc4edbb0482615fe83d67792312c5aa75e1b4e54528581c80a4e79b3ec41e76c0212cdac2e2c3197744177ce216efa5480c0f78bd555c53ce4c0dbd0fe71566a8898bfacb412cc32331e90e5e2e367280c417f8b109732790a825574148ba9333589763cc4f9c9488facfe3f41ef8f4f9b8e88afad437aef3cb0ba0413e706c42a6c2da3efa175ee4b0ab087f4ec1edf2fe1741d883ab5c30990022fcc2a6214594577d48d0f0a247d6f1f608e798d80a8b1a1c478653d76d8165cde6deea56542e9b3bd3ee83a7b6fd5ace5849a3f79e44e56765774600665f7afc2553d501a39e7bf753f26297aa295d45064bd35083a74686db30305fb0737a343285cd7968e962f4ef63fb320ff19e24d4a0c2388bd104f8f3a35d1398021ea3ef3f11861081bdd96f8a32e31d0068e75f7d384c6f80004ea982b199f6c79c47c55b8013b5614a09385ed28ce2c8088537b169d69a206b7e0326d058dfc8b16cfa4bc42d3d1b1000f91a408087a21eceebef8bfcb4bfe4e0e7053803aafc1169a5f9833337be0ea825c46a9c1124858e9d167d12cd037487efaed45e97e062b51ce765e4bd46b1d7548d36d19b5da47666dca7bdfed478a2026396133136404f44bbb2ae2ad7df3e6030ef6bb58bfd88307363158d659c539907e40a635822879c2558036758c3b4ccb13f4827392ca0e1ecfea1c41c62202ee0c15e73b44bca4ea34240556e36d1062581130d2f5b80f71438d78c43142206dc9e8c3a519995ef192eca3b642e4ef501a088d8c51252c3bcfeb5f0714e60865f9f7676e2038c268f6f07f41d720cf6a365970dec9a2934a730cd6832e73e7ff0916698ec5f201b3f34f52a8ddfae86e1bc59081fd5f75a314f0fb1edf35a105b1feb3f7dfa1ea642b27ddb6468bcadccc137d864706bbad65f4d324d9f7da5a94b3d0b86453a3d77cc964bac507792e4270e066d4683f8aac41b1a14bda827bd60a8962492207bc48743cc8f4e137dc5b66eb5f66da1c1bd49b8cfb8ce7db8ea560f4caf68858162cbaaf7bad3f86f8a2ef4077b17cde4e317ef74f066a498b1682903a15ed4af4b0b23365ccf92e3e1b422e85f8186e9fb15d1ff78f8b0cf73b662cf8afef09da449961eb4c6c1900c59aa204a91486efa4cd0462bbc11709ca7a153767d4771e1d1554fcfef6fc75b5facd644f8e4e21e8136bad277696d9e9cb56448c5b3bbc710d0212283be41df7b88ff0340f8e8da124c89dc68f631a6a1bf2a3aa49f3049dc51c1a0140244d05030ca558110e58ca865be41e285fd5359c9d045e730e915c5da9eef22073219f17acc190fad52b4860cc72cbc7cf7e020bd1f4ba209601b4c2de79204fc8b1e2e43078ac85aa8ba3446a5b45bd22dfa3854565da3ff6af1795c24e7172d349bb9b2670f41296419bd436a43692366f99b545e2dbae5bdbe1fe9601ae206a0b53464948c78ba4b191f6f36271d3981eb7022d9ed56265403e11d367275df058118710d591b70ba55fd668631ce630573c905864ec1cf2028eb65b1ab23e67b16b3898bc22600f51e19c8534943ec16abf0dbd8c5822b4e7fce6445a0c94301d980d1842848ec47323757196adfae4745455b53c4babf57f02bcd266d3d0ef95f4545d0b74bbc227ee5b306933fe60f8bfed10522b659ee43d84ec49cd920febf99c399622f638aafe78af7217d05c9f1bbf46d272e56d67709445233a864671c169c0ecf0810fd168f33a1b24f384701f91e05b23df27a4596fb8ce04db02f949823dd56ba5f846f83da2d8d139cbaec5ae051d1b47a20e80f2d79d0261572bbb713d89ea2de90a046034cdb8e4e50db8ed32e92a974942bf9677bf1ae471ab2bcd963945f3b6369f610bdd1a121a7092560f0c3d964b1a8bdb8a52cfdb0d68d17805540ca6dec0dd304758cdcb0d859f7f28b5919099b78059283898a27e8e84cab17e377ff70bf41063a91ef17c2c59eddf5d0993109912d93b45efc2ac3355d771a88e167f353efec6056e427c4f770fc5ed043ab436a7855011a87b49a085abba05cd6e18420283ea69b4b96ddffa3bf7d682dbe683a10825e8ede742cbbdf79e7cdaeb3532659aa5a32a9dd17055f6ac95f4bb14aaabfeaa32fbeea0265f07a2f6ad29491a2115d79b4b013baa139792d37f05bf245fb8097daebd54a7d91718c79047d18cf10c6f708603e177d5473684502eed76b907561c95442890009d7e0cbb538fa3ac3051edf1f0660705adf12582a3afee815de734093d761a5ce69c4b03844457e449fefd7ed989eaa94b6e5942a63c0b45e59f6ce3cf664bfa18843ec7d736368a609a445ab970cea583ba1dcadbbcabcb583ccd0976dc508431f0f4b48c920538f9ed81f976854a5410c7b4dc11d6902e1b6a5ffbb655a41066d3fd6d5a72051de12ce95c258b82dff3d5b8053083b03ad696d2f55035f35cc7bf777a2e7126bab4e5c63b210292057fa80162b0fdcdf458fb81ef45fb703976b15d65d42bdc3eba638e66d96a1ce972f48df801b0db1fce2f340f1ec252bc3e8be55b004ea7d300ec6e8b8fc0bdd925286923d50033ae4639bd132cd76db58474def4783611d3a6e5342907def762e25cb3ea0a60ed8f8a794d7d000718095cdbd53a56d83e99b874dd47a16663c1d6fbb3ce042400c38fb8bb5dd268f05c0db0701a39e9fa3958d3ad1700933fc11cb6b63e8f5faaf67578dea089332fd447e0649a062d11a9dbe8ed151f6b5c38035cf24f24f6077cbe0792a299fcd27140e6ba23c0a00bc4e9ddb3fff001f43156d263de18f1bbba62c473a4be9c5a1ef82a657d9609108bb5b9f3b36877973b919129379a8883cf6a6f303e6066202e83c0926ebb881e6732486ee92617ba0bf39d9a2e4bc9e1cb8059bfd6b6aeb360fa5b4b478e85be1c8c803e99ac0c91739da3e213d77b182eaeb63290d5c778763a743f326ee2454a9e134fe8f7bff12abaf4a9b752adfd800fd7708a753fa3b67541b349409230c3bbb4678d77a6ebfa621f063625f69d2fd23e8ad50797552d4f76bf02ef3f6f4eac0cc10bfa7e30a1f7e6cf2e9e8963860514722ddf8eb43c534082b2f37a59e130b2c7f3bcb29b74dc87be4cdb7fc4d06c8a083dac12f84f0bace8bd17a37548da980feb6cb74260b87fad25d0730b61741b22c0fa67552ae462e85ae56cc3e79591e91b89d859276b4da502783595c640c31071d4883e095fb9c987191062b1b5379aefa40ddc680e921a11750d19d80d752cf09af541a46b14391bee95b5cfd7f02ad0f70470f0ecce71230b0783d144e3a04588c03ab6a8f1c272661bceafc81cf399147b1db2b75a97d5c6c59ca5dc6cc178e3792e7682d2f9896621c3835a9b087a6601d3014ccfaddf4cf773e6c1d4f3bfe9b63154e7a7db9ae78c3cf4d3bc51a86e26b6ba89f024291d0a2e40c46a69f324edf951ab8cb305e634b1a89486942f9c04b572c2e6733d9f389852edf3ff1e6f970c378b51898ecb5c4c07796e6abdfad9a570e96c1efaabf9b765dd7f96aa949e8b535df9c8cc562ed46efd0ea6061d4c2522735d3b31e5b5f4bcfc90d4b37dedab239a52a3d373139ec9c90f670c755740bfdcf52fe0196f47d7a3b6188f02408c92902fb8cc0f4ead6ab461f9e47ab2d61b14000ccc38d992117b86403f9b01213c2ba7e3072d3673d71e5e85f0c472e5846c3d760263867f6019bdd3d7e754d077626f4f6a6cc2653abd7945b1e0c345a92026bc70db9cd2049e0cc9add02b1078d5bb607b4309adac63140235cf4b647fdf8874c5681bf6dc4a5c2fef27d5d731871878a076e4d0357afb335788f3f811b98a0dce7e82ca10adbbdf6c3cde9150e6d864934f5b8d0839fa1761ee91c0bea6b4ac5792011ea3280938c29a3f054f34033c224ca52284667959aab7f15dafcf5195c94c06cdcd98d5c9e9f734755ae453811413d3efe15776ba3d3c06e51b04719818678fe58b06dbde751f39fba893f3764f2664ed4c77b12a73625bb6c2beb0344edb14aac2b4752521d786c259845302f83703dccbf7f08c33fc9f1617611b39fdc11e29e178236cf8578cc448f1cdae16713faac94e2273b012f206636171b97dabb042c39a1a84783e8ff6b4f2feff8633f6a14afb3d5b1df37157ffec851fcc7c87a3fb95354d6a9324c8336feaf03d82be3f3ecd2af3647650283026f8f72a71dc746327fd1318fdcd7a0e2410d13a6ad370fe885af3bb60b3efe1bf25c7a8e88070000d961c0525843133c8310ef850504e4804e872535275478ea591f97410f2a058eb3c7ea36a43d3632ee03dcd75a3bd067a76999452600951938a4a510fbe6e8256f4b0a7bdcef39d961c75f0fef4e43ee908edd76f875f06aeba9a8e613007e48bcdecd74a64e3d00bedcd18f446775e032acc35d597957f00a26ebae0153624799c897d45797d54f8f6f09781cb872fad3cc1fc373df32d7469ef54a34cea2feedae55b307e8722e950568de190107d28df8d7a7f610be123044d11a143f48880c0775ac3ab4915c49d5cbf12824fe08335e9f2020b74be81f90b8b0e2193340779726f40e78e54f0d7d3d9e31859fb47195b25c16cd8c5112b6d4fc76f777602e7b1c2a2a4d054bbdb1179d905a18665c4970064945d79ecb1f3cda5ca66dc1d68c78a1814bc63b4ff88637728fa2088193320c3d248f0363b4afe673c321d35466dd5306892cf7a21a0434fd04f84756366686abae7d2e4afd7b208f0df2489a8af75e8aa9e86bbb6f03a34c8c0068f826af348dd4edff00a77b5a3ba0bdfde452104619ad8a6d7d361b9071bef471621c557b48c11ed9df552d07be9d8ee3eb607a9f8cdac9f2e81b840c1acd6d49f851b435a7ad2c841f61f20b4ecfafa8dfa83d01ff1e9834bf7130977ca3678c0f9dc1f9a5408adb6eb311dc72f736da085d2bf54cd2793cc0612f5f3a6c0a95e506932f4b49b55bfb22c17917c5b238f65112f671d857ed30ea59563c165c9f16ab4034898cfcd8244015843654e8a9494becfd86834d7977ab59b6c7be050f6c23b7b08b35231b315b8a01152f39fddae3c0923cd1c5c88015509222c9915a9029fa2784b701e6f6589273f00ca86fcc4dc242411773ef18f9973e9224d6646914b61ca5701745d80b6138f8c38471e1efc0b3df920e210496b4e5c8a1a5a2a58059fc87e1571654fc44328856c3be99b50bd2bdeb80a276fb2f7c31afa27c1fb9b8a179b022874e74c5f51c38c0fa971c261cc28bd2f17207b60da632a643383be1d4ce80f620556dfde8d06f1d40170f5aceb587a6c75baf3c2fcf084250a6e8991eb61baee81cfb28c01b275dde53bb5aa85196a8143f31507dbd8795d8f440edb38d2796e33910dff8ef82fc95dbed846ace595d10de7e74d97f6c347bfe84e85a7087948cdee317e4c0ac7958cd024a6e0902cbb86c2425fb63c8c82e9aa38cb3a051006239296b203fb5cffeaab423e93109002b32975e78d80c419f85415c505497dd12f53beced721b19b6b4e7b83a65379e9d883f945a50a4a15a8b6a727291bff32a72018a58dd68940c95dfc948a330e3ba9f15b21839a8b42a0d26b4383c626d8b5bf9393badf8701b2e769f5ac13eb0e731e8bbace15a17935ca544ee9c00aa41cedf3382a9bfd41a55c1fd8244068416971d06a10f2c128cd9af93a54812cac629e05c0c1e1a3f616bedcdde4b898b2606f2d38c65c9026c6a0d1cb6962adfd74bb9e6e2237e80dfa60b231574e1c2f4540162075a95146fe56148143a4ff1123bdcc4d555dc14ba662d93664159a475bdb6ff969f8e91c5f79800693a36a79cf2a37ab2a0acfde02b19bd482cef23680d875943c0ea2960706c870de123d50b497ad8bd38b8abd4144ad775338c4f8c2ba273453f1996d16371d89736291a0e8eb1751356b8d9a9ce665d9b71f0cf20b5fde43c9db7732884001101d22132d7198c91427791e08daf6e0354a85ed8e81b97938302205b94c35ff48c3d55d4ece36f57673d61c35b1f7fa86baca1923d2daa9ff558515e42a65fff7b5b894efd459311cef3b1c404a1e4428c21d120aa2a1ef2268254050e4e8f83cd37fc3db41d313b31b9ad2a04a87f50984e1d9ab38fa7710e1549e726fafcc56e1562d2084d6da2707c44cdbece65a6d74f3a12e6290b720194d8a78faec9aef113d337e9259b374afefec49078073fe808f355b063f229e77c0abfb169e216ce764361d8c4fda3fac60498872800438604e34e8723bd5ab8b09a245157e094f8386f5a3df43b32dcc2cb54f898f55eece733576eeb3c9825230b05fe25754e6570cb318e18d89a8c0bef3648fe5b91af28e69a27df1d07fcccbb9635fbf80393f2e346a600ab4f569b07d56092c68250991c7304e668da3752f2e90ad68ceca7899c14ff7e2beb5f518c606f0f0168eadbbdab86f0e802eebee0ef416ed7426d1bb95251ed29f9e04dfdb4943c3eb9cdeacba2c0bd097b2c0516e17d749ec1f60ca8127ca20e6cb0cfedc30b5648c521ff63718235799c8cfed35eab06ddb3ff9256aab506dee5e9a264fb5e4c6f7238f39009cd93c98dbd8c15dcbb46f7589d3a0620ed0c9ae2cf0e7d9e85c502392a7d9e53d2a3e2f2c74fadde381ccd8f5b7cfcb48ac8e2790e5926c12ff40b58c29c8867327c76b8a562d8361cde795aa4cefd7ffd2f723bc2d6a59675cba7cf7388ed7fa343275c62267ffbca17c5edb4bdd2296f103f7c74d52b42fa4774689bbe2581e9d2064edd971055790037107cbc1a506290a6378af5705358b5443dacfb78190637ce5778747003965b8a77d117f7f5932503d8605688a8f750d293a2cefe4dba5e33a39981f9c5dbaa65066a744b58d393155362e5b7b4bf275367e37f40480f7677ed46799735afffe2059f8aae2627422e0cbcbbd71d185d2a57532c869206501a9f0f7815f39b1003beae33609cf367c64c457cbd172b12f1391fb14526d6aa946a870e282551482d07002d14d1ab54dcd19a077a0e1c54909f201d70328887b498db33d4f8e0e0122c228019de4e3f801d8208797a85a307c3ed02bb090664faae32abb7d5b4fa891b68a1d0e131c3cfcb69ce03d987f2b9125d5f79b31d67fb7153bacad3f83311ebf5b0e2838dba2d6dd7c63f98069e320d9900fdd52190d05fc809780b55ecbf6398aed403b5c8956d560803cd56f9bb5e3a02fa7bfddbeae72c23ab00834551ac9803e205829d0cf253438bde91f02e8d4fc5a4b95880eae0de82411aa83ec788a6419d3aa91b3d0bfe62d06546765012386d874dc4fe0647ca086976d0fe0c87ce1b33385436697608c2e9f3d972d74df317b5f85c6a0d2e329e85b74523f11f8030b3db7fcefc2ccc9ab3d32910bf12916b4b2fb8e052756898c4e8644686cab17813d1a53034b3f2e1c306353c59bd680200330f7449685de69c606a55bc58a7de17e66a683eb14940077d8da5cc0b0c9ca47681825ac67f9b5e62554a190b1a73d78d32c7ce9268556fd1055341a8410120acc375aa3099ec6e1c33a6fd8e3b342254a4ed221c9765f14496421cd016544264d71936a56cfdc0831599f3a06200df8f52f0da6866fecbcb61540d6f385e14ca6df18d2b9183df44080e82d57c618c7d60eea0f44b2a9022d213a9b53876a7529f5b431d5752eeeb7acb7948346bedec476fba61cfe3e1fe7a9a482fabe98d228941cb028038cb76b3bca684d7a51f73ba268449a579d3062c6d2479c544f38941c40c88d17359220cdb83f562f57b8a5556a0cab201f35cfb2e5ec879839789e626b3e410f4edd757d337cd79945e97b0e930dd342a2acc5ad0c734d1549d26f3033a1c616b4b8fcef594a3ff050d71cbd6e4d219676d4a5a99ef17c15da4081940ee1be3011a8937e6718c4f5b064050183434d1aa64c62fafb35e8b8daba579b23fc2720682f4da21ea507f29f4dba11794396c684be901d4232879cec03677fc799086b3a7991819e971b522173ef316645da062f224a960471152d8ed66561afaea6923462627fdc12a88f11814b31cd1b9cd067ba34a982b9ed48864b3465c96a20d39615b54c3dfd38503e08511f49de99d7716191d48c7f73e2a5778bca875cc4524bdcba2d4390316fa5750118e6913831e2432053055470680971101ed0a417edda0027523cff5db50a423a8ab5a209da38fffd51573eeac48ff90e1bdd527d038cddb017eb4bfe193ea81ff5d3da922e2801e46159696c633227483ec87bed6cc14c7c90d28548cc75d89142f0c898faf1fa31f02a3f61392dedba7dd44070937c8d0164b799cdce201bbff2332793ef96a7d84ae27c0bbe8feba5412c0815978bc68872d6be056b2e1f8efabc2f2a10848657070d4ed13105d0604f075dab9861409b4dca58544be6728625bab9163d90e45b29fbc939a8a20e10fad2ae9db1a97b0b90203ab7356451187486311f8abd167baba4495437288b62c6b22c34dc6513fb8eed1a1b2bc9bf08b5015ce9b01f80f4560fa4c8a7ae14ec10c259ee192e6e5131d28dc13a3a650a61c42bc9168df4a355f29be4435f74aec5d2cec7c5d5615f3a8562c0f994247fb78b38c1824223ec33ada5017d50640a46f79c60a57bcf0885c7c6208594efe9a5a3ac69b05aedcced98e5efa062eb95d53ed60685cdf432c0a17df642a2e1d500f1f2701c0dfc7bd9f26046188ff105d683cc4d7392130ce955e09497196637231ee0af2c4c5e70bd230907c7422b0175add718e4fa5d3ca75197af2ffd73e80ed90fe72f174ee807d73d4536e58382747229fe1e250fcc0ac5f2d42c6e8a921a0b11aa8cc571e1aacdd0f85c4c65dd337051f5bcfdc33613e3b3792ec281706124468f53f5cc71625542279ff46e2e2479087a38468dbca09409e1de853a2f11d850ee525b583902e0c2b510b8264bc5cb96b0852ad42aa6aeab8b7bb768aaa04a423890e4aaaf422de3c81e3f1ed49eb98154d14b82792c37ac5a891f8a89c546c908f3c58cbc3f9a044070daa9b8d1267533ec0bf3d6b6d259ea2f21f5bdcfbc24422aff1a8d179353e175da733da365e609331353f6942edd7848b647f83cc0a84a4fba27702b6c1bda9f659af72c02eb2c7ffc37292ab3714d701bbebb7860840dd7fdd25ae271077e04fa05b730e9e0fb67ea6684e4da6cc3f25c3cf4e2f1ee715a708ca31d322ca8348c2937629f73d71acc6850917aaac42447b9bfddfb44a6d2d81bc7676d81b075f12e7ffe19c38e93fd8711d4963b0dc838f0666f69a4807da245e5c42912f73753c76fbe7e46f206e1c39307df0c6304f433e9309c31eebd429847b1cbd9969c32f9ac65fb5ed520f0c17fb07531a5e1240e776bf6577e69f390ef8af1884e5b5bdf1a0a1b91c7ac97fd372b374ed46c17fdf4828e3a7816ebdf0fbb3deb19e6ffb5f7acb73eec0cf4a46924fd58e2d0366bb898ab0c3e087243904af9ebc2fd18fcffa740182f126b0811cbd7a344463f53dcc9a550541461d70917ef26fc56310763487260e719720e342919f4b261b8bca45f5dd5e0dd09f6727f16c77dedccf41833ef1ff97bf3ecedcfb639ab038613a3bfeca5ff3e605a9e9ea8d6c51e1783fad4a63cf816eee877d7dac997f2de97de33d84f0085889b4f29a8bf15b84f761d41343e8743c991f52d2f9b53f5933eedfa743508be6694f27d39b5a9efef2a2bef7ba066619f17466a57073d5fa0e136455e3ca73987a6ecc0e3dbbe6ea7c65615827aa1173688e8ffd73b7a22332c976e832223473f12c1e15ce23e0c1e6cd68f3e9f2cb731145d7ec942d1e0027c85ca6dea681a5546e28ed4c355bd80442e357da127d0a4ee56962afd1463c7764a018b8a4354d0cafd516ba1377e9c4fbbbfcad29994d587071eca013cacf80fa87f85e785aaba410b48c5325641d35273ffeab85c8402d28cddd645711ed0fcddb8b19aefc1668fe8d7a27e1e37203d1a460fe93db27a1983a0dea6ee8d02a579b5c6634670709cb766c57ceac3250a3f40aa2dd30e1065358140347e2e3a5cf9043a6918ca4026534994bfddb59b388a0bd37ea18c3bd6ae849156ac5686b64cb024439b315f8c77895783edabbf0d731b3d8f4e2b2278c68e387b1552c615e29221f523cd03ea8472e0c61798608765f5ddd94c7570484a056676f91ca653a5ce2639497d704ffb113dd0508ac0f9307f17dacac261981500f635d8f65878908a658d71e06c0e9305b0abd1090b6ba1998d460afa291c29465a95c52b6c82686b93a5f59b6874cafe1f99aa63de9582825292bf3a388158dabc6754e0474356e3d2b43001e18245970048302ca787b987f7adc2a281fe09b184ffe3eff166b0a3e7ac92eedafd3e6c232cad073874aab767e9d8d90792c36cabfae04cd1e45f969e30591f4a422b0beed21620a5dbac3d9f308ce0224812cacd688306b89cdf182c028495093f5b68f19eaaeafe222321d8ac42ff6ef45c254aab1a6d84f7ea63034dd4b14d0952a314ec5901abf8b52934d03721185634fe02a72278c83f482acd95ede861ffcee883668fb6308526c3642517717a11b85189acb230640382d632bcbd8e4527a88b4259d84fd1a9ae718d942b8f3544727b06ab0819ce45cb8197fc24cf32611585d81dc69fc2c12ece9629a12c852cd92751749578c8628b125db254794f01008b7d295e7cef982678017211cd5898e6e180da214117094e8e79dc2d261e50b7c034eb95e0bc50f0b1b65f442d16fbf54cc9ba5373276b231b4ae24cd14f445044c4cdf191eea3f448cb7abf7ef80e009d8c405d80a41d93b301de3a5822691f0a197d33114bdf2e301e87629fc1e73eecf90f2828c69cb116a8dc5f81ed1f98d185c273dec76025b37704c4122988c8704f002612ee7dbcfa8502bba9c085f0a4e88f21422b8507da2770a1613487e4294613b40502198b57ad6c3299b7a67d44a292c9465440ba2b63e995114334d106f3b6abb24b888869c4059af039be5cce8f96b1c5cd675d094aee6b163eb257981a3faf0476c1d6969562b06570427953da87cd70e7718f11b8cc4e66f81a9b2f0fabd70c75531ff1ea99d4a59d3291117e1681e1c2b8515fb4bc63d0ec552781c5a5b6178558089a221b3fa42299484a187e325764908fd7186ff987ec1ba75ebda1f250ee5306bc14c60fb15afe75d18baf92d7a064c90a07c4b0224fb3b6fbf67dc7a3061d42c34114c4c10d7e5ffb573e5cea073c3b6c5be8b43e6024fca84ab5c2f4800e85602afe912dcfedcf122492c8acb47bc1f5a4c174fb3551ebb146cfe3519ebec4637dd388d1d307a231f860a24d9761e4f0764c9161562a1c8eda2303df0aa74d07e80c0754e5c2b2d2ef6487a018444e12f8763f7342ccc7a8b1fbea3cb4479c0b900a40302832288e5ed8232436c0bd4a9e71f0bf83e16ed2a684c6a454f0ad23deca8074c139077d436841ca1ce7e44027560ad979d8db67ac2366c57a2c781ae906c7b5b7ee5eb8dac1ae9cb57d9abfd6b63dfd5a8327fa20aeda325ccb354b0cf25cf8cf8f2e320c63329e33c26ddac700bbe98654c7cd25af9a94be667998ba6f626a35647ff80e3fe5b6d702151cbd3c3144104ca34e6f0ff5b081ed251b7d67357a735163b642364236059d75152b2836e687f41d62f04c6fb692c246b13403ba88cbd41a3f4308bc5bd1c0e68e0adc9fd40c122873070ea7c9181a7f19fd07ab3cdb5b0796dcd1ddd265a4a23c9122f293feb7512e4ba438a918fbe5b976d77a45c732e9ce2f962e3c2dac588c38f598c14f619e1cf6179f6ed2d2977a5e17f7ada23fbfb375f566af3251839d04744306e0b91fdd314b37858601954fb45b0eb828ab022e4070f650c30253ce63d4485b7f33616a3cf7167caf4d3ed4ac1200a292371c3ede245c33aecfc45b262ef3fb690f0f83bf6bcfe0f7bc693d7730ac772d1183857d735b5f804e26e0ac1d2be0ce451001f6263b975e2762816f95744d727c93678504af018af4eed7563052c45817193d06185e6f1e7e88ee733eda72f4ef52d88c485edcf2292902d2e44df747a91222ae6c55cc9bd4a09a718cd15a9d7c1120f983acce860b554308b0ab973b8bc8656f460192189f1fe4c5d3151c6942162d8914f9f992c20b4fad8963e4e865429ec28fea66811625ffcae6600bacde039d99d667058fd3694e80057a4362684ae073ca7e5bd701d88470ea09b3799ae3f3b9e5fb074b2ae00e3891ba6bdd589841c7dfbfb7d71f50330473a180a43d9414d49760d55be905a0946fdd7737e7d0917d7adf6c7273ddd84f8c92698e28ae161099d475aa447e41d1e9d31cfce7e208eda71a8f24947bf6fc48a361f6c0f8ffe812311c37a62badc0770502fa49ce13341686266eada22a48309b09326081f9ffbe74cc13a502060d4d8676f628beb46b149e3c88cd0392ae46ac69fc662a32db79f3d42b8da3b85eccc41dde1c89c99147aa6cf68f13cb3cd5fcaf0640173858cee5960e4d21f31d3824e46d74ffd14ab348583e9abcdaeb7e9a8c717351b42af45c0bedef0d68758b88fc429811beec40aed7b212b2bcb1e9da09afbbcde752635eb706a5e4f377a59af00850b9595b81762bedcc2d625c9bcbe64435430afd1356238d3193beb8c79389a2e27d9ce4774c43d3d989a25cf1ca080543fc293e90f1ac2c09b7e5be5494ebbf3d2a0c41c6f804ea07725a0c1a743a5d0110de366bf4300d094ffbb8b5e0b04e9bf58da6ef37b2473355d2d195ee2a8fc1ca743eec2fd05e536456ef165d6807d58bfbf840dfe687d5098ed7079e0694f0fddaba8ecacc7419e37f9a3a17cd6fbbd94dcb078b6e8639c35309d806e02de347f889b7fe183d8b4f752db9798d81e0b8c75bd6ccd69af839d5f74114ebb4973391282b66561373057b3c263da61136fef639ca76188dc4916ec5a2b658bd753e031f3ad4d19fea266068ca9db303a31e525f1a67f81ce90297fe9aeab1a915b308dc6eba8b88d45e1d7f16b74fbe70cc20c58fff024851abbd9dc055f7c3c3024accc6973b3c3725698ab0308da4d0bae49e2d1606ea4ba468e3c983ec94223e3d8c08279188af0f7d4f293aa384e34150efbdccc28dadc7a32ba7f6bd8fc1415fbf851d3708579a2618a12736d70a0a185f83951afdd558fbf7077e1bdfee5d69753a2e2e5a5082c054ebfa7e19588000b4395e487c473b65ace6356f5d87e5505b29f75ec2a562b559c0aecc9a1cc829a7f53e0844f005ca6bdd4e3ac11039bf012f63c6eb5366ae12d2ab3a66acc0e93ab5ff2c1ed0a05c1960a4f1985dafd61c4f2b4837ad6ca8b5420bc817a5c5b66aaba2001ba3aa6c2704a52dd4d43a4d958bbf522d70e32fb734ae60700c4c4abfdd2f39ef2381c95b69c4c7bc0fb151d68d3fd86409b08b7f3d6c9e7f8281feef18b5feee38fe6a0460e5e1efee9e9e0bc837eb6620fe39067576abf37a9c30c0fa29986de0d5d8b0047b8ac46a1818b115c0046323bc772f1f6aaf49f419f5646d39c22b3c3ccce4de794e112bbdc00592f7f9f3e7b90afd3b9a623fb58d45392b11d6be0f28fff77d262ad010ac4e3a4c8ab310027b20a770b9570879eb55dce12b90ace5962b943e75ee75659a0d7e9ab476b1d8a705f944ad04712ef61414bdaf54c2bf646fa4de7436eb86d35afa0d567901525d5cd325f58e5ce1d264f6b6f1435228837505a5585059157a707b8ee242cb900a9fc7f6396242564821d3796633c87d587c021b4588befeddde9d272c65e0b2660c7ea51d60c4212160575d084d08da8eb3de46effe676e5bf5ec1e5e49a71cf86ece8c2a5439e0472450d9e919088407c7ec0cf1b08aef0f3fd4a945d906a92a9203be92ae51d25d60104b8bc6ad2b4103f1d89a84539429750a4a0e20c78a1f819c0f8242fbc129b7aa88c9fc2bfe14e3c69b1fb4eca81276b6310c8fe15a9e50798870b55c24472408098846e1ffbf7adb721a5417c338c351361d6fd2a9e0c6945b404f65e3c51b8fde7d6d1ac45dfb30d049f579c55d3c99ceb4cff8907c68d8d392cae355f7dd894ad45222ab558fffaf341954fc3ec0adafecd8e3791f9d90074fd5f5faaa83f9ff145c1ab0b9c99cd44c917685a32104d906c52664fce3ca82c85473aa568dfdf4bebf6a34cca5a9d2023965189f4a0361663b7dd176f4c52f77bc80c25dff8eeb6f64188092e3054a8c0be6fb8d57a38ca7ccfefc9f5d07bc3f4d86d905ca7a0cece63e4ed6cbd228c4eca73384ac46d7e2b995fef7c824004291d2b2a76318fe6b639b02f5552cbf68fed321d599b374ae4d7d3736210fc17b707da819b0fdc17caf76ff178db1d08d741df205deed2c27725b0676eff52438f7d76818702e3e28e02866901a13d1be550b785aa2b7a32846ba845d3bfbbf252845a8f66f95f685accf413ea6adf10a33fd6d982f7d0766dcd2dc3ec4998f15472a4e98ede08b975b3a3bfc30093e0a2c2196146c0014bc5b885ac30d09222bc5877a65731976a7e99e67790e4ab15cc5aac0fa94f35bef087a5813b5106a5f9bca7887b4e550429e91ee7b9ac1bc7f801350603f7cc973c5074f8c2e8c2a0ebf750651bba47842cbf575891f1bc097d6a68d9259090fbeecd47c34d5997a66d665581fe8c8355e8229f2cf612032723b0ecf2ef002113d47147d1362a1ea4245d302d15b76a581437c93931cb4750d564dec100b394327999313c9435bdc78193f2e4bdce81dccc738c27dee572c40e9739193e43b9bad7aaec013774dae61271d5e7ef61818a8e96d4bd8b2a741e8ea07de07983c1b97c177eff6e7604520693a03a229e846704beefe701f60f134bba41fab8d00b6a7ee9ffddd3b855c1c3681e380c989de04b1a92bd66b9cea0cc705c8c7f9b24ff963a7680f17c902df85770d88d876bb0aad6f3826cb74e33f717df57b696d6113f860aaf2be588e1138b79e7ca6bae87f1f4adec99f4e41d7ed30be4d12679aeba52cfb06ea2b054b48f46e9a777a82aca5e10b9b07a653fd097311d6415487b134a2ffa2215a57b8e90da9b49131a1c21822a3dfde1dbb38fb50c28f223642837311fe6e230ea218201d2897e2d45cb85459609b568ebe3b49f368c5220144e2582b0cd962f74d67e46c0e6644a73945bf860e2981c57a0fc51928edd0ac5e489e840b04f9cd37372c8534995e7b8815c5cc472ed5e3e1467d918ad3683b5a4cf28682d80d0ff0974a6d1481acad4d8eca849add9de4568257abe07282c56f1bfc30c6d9963bd9ae7a8904e9904177a8b31a3e7a582613f711298af4829df67da4d27f5a54c88a101f955468b8824f10d8c281337563f5c6ffc5487981501be22124c8d41d6a3968603066cf8a1dc592324ee62ba849898edf249dc86822e997b826f50145176a8427818b4b46146dc2aff9c73b2263cef424620f97f738d814e9ded877f145e91073ac92e5e073f54644438b99ff3d5eeb62658b0fe892d490b15d080e507507818bc66c8761a7684dde398514c109cb39721ac9860931e8f7567d332452b5c4921b5ab968f7eb0ddf49cf72a3d48fcf5925f611ab40cae54072612ae46acf06131bf3747c217f251d83f5d25223af21895ea7a8aa9c1e738348a6b224f92c8ec5456ba7fc93ad7921534ddc44f4f84167a571cc0c140281db334e3bdd2f6cd406032404ea23e69f02c1ddd3ed2ca068845053a8cd645a4d439b06212e40ed6180bcf89621ca119f5a2fc27b73c256c6532938456be12fb4e38fcf386de8faa1f2700120e1443e09fb1429cbe34306527968bfe0ee5cc62ea538a3e17cf22a197603d15bc9f706bdd5aa1b65af1e02f97b666bb8cc78664778dd69f1ed40c87b6d3380b01e842892b010c22189511042b4a11c0025811c885384d1c43edf0e49b44eac1484a88c1fdb4e8e185d31199b04aac7f30615e2b1384a1e642f256d50c32ce8d4b86dc80b748f6c5b72d1d58443e670c2496586b96ffee97b15fb9e04e6fe73f523b66477e5d6d3204b3e37daf57a9fc764260a8ebccd3eca4410394862d01a3afe4d6bec28823f4c50bf4629f3ce3654b04092f189193e70b423a5a8949f555a23a056ba9350dbc133e32995ff2a14c6bf6cd489466cb31fb1e915c7771da78b262603c4d427dd9c0a37d4c9b783601577d5ee87ef648c5335f6be3fa095b20a2a898e4e231c7f621f76cf7279aa4e96903c691b2ba2224248a4406b0ce5d6444387583aea61b260c37fb22b5bdd2b0b0a2acd7311860d3a61edc6a361bc2198f5751c85f665160187e83f796be04b739193f3fa0a072fb86dce3d2ef41b0d33f01f25a4b4fef8d7781921d72c9c0838056fd97eb60c1844b1e2a503a869cc3169a82b7ee4866ef5c4413c1a6315915504a89dc1a2927843925e39101320249277e82396889ff5c8ca47d6da9e833903adc8895b25da651e7d53023644f2a7aa498841e2468b17e56c94f4a179d4de717fc58f9047bb5cc62c3def688662616adec13ddaca2447a2669682766599df191006cb19960fadbfb80fb62ce41a9894cbf77414f37c12a29c79431f204b0b37170320c525be13d1f4c8d08554479409a133afb157fd596e87b6fc3651e563b6070c8a45403d7449f3539ba4a7b5f64344c171b942033941dfa9411178c12fe9fca89ff227e0286aea88f0f1b1864ddeebd41d681cf8fdb0e900be9771c54be316817d7f714b26dacde9fef14baedce927462a6b1fe38d8b37b7f6e504dd7775f2eba4c4865d45a6246272922c4591c8d9ab4a81819c8cae733a6196350f7ccfee3a733e4d056fc69ed355abe81086c6987b86dd8acf50da1e2a722dc4a1e7e951ef1dbf1fe98e2fe04a4ca94dde0a923d5aabdf479f797f5b65012b8d10c064faec4e8e0e77553c66f993b97fc487f74a4c0fa4abd13c38fb4d78c1e035db0b8ad0db7f6e184ba8ba585b44ff087f52d736f369239bc420fba0bb7076185deabaa20ac88e6e183a8e09243708d02ee28fb7db3beef1bd0760b36edd8116019592377ab1cb006f1049fb9e52f171824ff623df4658c81860b0de309212d5fe60c62bc2637f9cdc41d3142b4610686d8715a16f69acda66c7eebf37372fbf496f8c7d0d0502f6bd588746d758d47f98b66af1430bd167b832ece0bd604becba4ae862a15ef6e9b6ecc2ffe2a849a14f42e2274b3464dcf79ec3a70841fda8d34dae90eca495a399652cc794b99627bc75c5bf4c1fe61c1865f4870255fe298a7c1185a34a09e3d96c92836b021e8c641d7e68c6f5cedb3c4f49eade002b520228e488e779fe4f5958e127c3664faacc39b6f5d015fd068b92a1ffcdf356a833eb56f316de06bb46af878a0b2186aac377705ae2753da9a7f93f5233b603ccb8dd929e4c41eb18a59ceb4f9d9cdddacb00cb652c84d38e33106743bdf8cbd07c134a00baa09153e11b5b30dcf64856d59f6b0b599c0e7960ca381f89105973ba0d886db15a88dc80542c2bc3529053e2f3a31efc0008752f96e7442e785161548e10b825077079dd5d8f09297ebae1a0c890854e6d7a0fbbb37ce73893a4c0c8769bf08a7fbf1f309d41afb774ff6fe410de6690d7d08ff8ce7aa9171ddc54f1d9f6d30a61c905d3b81237a41446f80f397ed87cf0216dfdad40ed0e856ccc988e08a644c493155701d0365bd55a2af74c00dcac41cb181bf3eea936b4ab875d41f0df690dfd9c892b25bf877453e3afe73d16339f45cb85ce8c4be8901b1e12f14de7cf8ee0e308abbc5cc0641d1e84077cd2567b0649f2f7e133a684fd9bf5223995f1159131fa0d78a19f382943877aab17310809d2db7c6483f3e42b40c75813419c3b43347fb3c039c2438e95d564d95e8b878fa6247c0211779ea002769c45c1e2db5bc7edca4a5f145fb63d875acb559d1c86970920056ba55e0f52068901b81eeabd77a550a981df2453c9cebb9ad51f1a7f32c84ae8311a717e3981638bee3991e7daef05212e6878b0cf45ff46cbf59deb7d804a9ad2b6192debcd2afe1dac9fc300b7a5b1c7ab17069d37499f262b6889d46681bca311a19ab231ed9817ee30dca0465c1bb8f5b1908bf74b40af7f350acb8c4fffa0b33b0fba2165f64e906f0e41dedeb046efe2aa92778a4908536158ebe0fcfe83a7666731549156ae9c3bf249c34457309ea0cc56e96c4daab371c328e983acd7c98e72b2d1eda3eb355dc18e63d824c54917f44b182cc46c29fd8a4cd672df66cf48802c9bef66ebc278c0eb25eaf15f06399fe95fa1868e95be2b9d76c8ae9fcf7e0ea8212f765ccfd9bf21805414efa434dad70fe92699c248869ea80e262490225832df333b2db80c2aa1d34e5356e1da7a8492855b9154dd1f019f5a5ca372ff77f72c43446ff625ea6a9a8ae460cc91e609d4a84b38274485d55e58c29f80850fd2b5c3403de4a4654103840b0a6d0013c0c3c0c3c0c3c0cbcc6d8bda35bcfa1912f534a29c2a137045b1b3bc9949294891206a4c701f61d60df01f6bd6767cdde2c0802114410ca0fe51c3e54fed6129e96c9856656a8cc54e230176f44e3c994620e2550427979c64da2e1a749782af6a3687c12224bc2aa1c2b5649c6f4fb91a8c563fc539db468cd90a83e790c3de3a152f60873feb73c356171167244b7b7ed95434b4fc73462532955def2e8b8798d2449006830c2ac414e6517add1a3e8692c42f9d83168cb28d7263306900d8c01c407d350c4317bdc8b69b971741c79211ac8008d44b0297b7e4fb6238297d17b1f4e57af850ff1583ad3bf5bd93dff20407c7c0c7e7c92f8e841a4c817340c5108763eda8dd84b373d11e2d4f579ce93ccffb40f822b69d2a3ae07d99e0a82bdf4ea3ddaac8202f166e9b4ccd39b8b0d1099664f7f32e9befceb0f7acafa39dbc5a0622b34fca0e7d55b8b6fcb642523810d68f4814f7b91a34edae591f161fdd0ce1d5354bfc63ba0b107d773754f63cd3726e9a1a04956b8314fc22c2c821ed0c8c37669537cad114f16fa80061e783ff5616479cea4af0466e880c61d34abec1be34e05f14123c10f203d1e40c30ee873d7ec5125ce545f0746e36e358990c952a3039bbd691f2d4ddc6fa73107653b45eb9c56dc062740430edcb6688ae88bd279d434e27092557eb97119ce2c381caab6df3e4fce69f30da8182f890c175e3c6e61d070036f6a4c43ac67761bbd80461bb0511fab5699bdcf74010d36243548b57c99792998234982011a6bc0fe43e5d95ae85a82f81092243bde076f101f4206306407a0a30534d4800e1fad7b71a72e37b8c10b293204888fae410d92a44892ec7822eb414650821702048c202b440649d223c8ea781a69386957508f41bc26cf8f244992ec4892213b000ae84868a061cd1c4c9ce9f2ef78ba018d3330ea7c3deb5ea8aa6b86fcad52669079416b4c19bc0ee1eeb6397a6fba03037080182928010d3270727a55a945c6d5740c6dcbfba85b7b0d9789e1f8953aee27d7dc960bc3de3f16749a39fdd981c170da4568bdefb8230a687c21718ba5744d955e850049000d2fa02952ae4b7c2ed17e244992240534baf0888a497baecde9ac8e2449194288fca800911fdb4b8210d0e082173faadd315a4b4423438414e917c2e3c7f00aa4fd0d90e00b0d7c41a408079244c8bf40c892913e04ef403a9024ef407ed0f0018d2db4a3f2745c0c2634e746920408111e49b2c3070d2d3c2af9a6d3d0a746cd4ea091055ed3e820d54ac382460a34b0b0eedf0921328955395de136518dc145c66c17a4051a5640cae559f118c23a9cbc40a30a5f4c2267d9e3fce3912460d0a08296ae36d8880f5fe2d2812f30a0634612684c01a5c3a90a97e966f49542a341ade8e96fe88d1834a270b02fe52f2adc977c38a00185ad3cc58cd982d8fcfe043ff3751e3516bc3dc709e716a5995764db89ba09e74de926fdb2655766c221ce4be886771a399780b01cf5eb0a7e9d93682881fdf80f7641ce671b69240175a953ccab0769a9440309c830327ac84f9bed348d23a436ffcc52850aab3010681861b1ac6c9e5384da6647a0518452ae94323f055dda4423d020c261ee9adae264d7c9f880c6100eb26634fe07ff94d31ed0108296e784d0d0b326444d23088a1e214faeeccc974a03088f9ebf916e9f4c7da7f18367672d9810bbd84ed2f041fea3d36ffe792c93f7609357a9fa83a511e2d1e001769db72e2b8d1df841c479bf08bd92190d1d94c44c7da82ce2f3587251a878b9aff152525e5c7c265d457a7899cdde620f72562f6bcc39978e2dae8f3fb39c9552a35d8b94f40a9f34cbbb780a2d8c6b5d7521963fbe379224493284044992336661874a792b4ee82437280bc42c2829a229f692271689b3f49b72ba8c213b2349f28219b0685ccc4f99fa1ca63719cc78c5fe22d3ae94f053155de1684d29efa939ad945b91c86c694af908b539cb8a526cf5e29677de7cf478410d66acc2941adfc38b875cdf1099a18a62cb3c658f6f11f2342415a9dd85f89e4d978216156e36b5941a2bfcb67d8afc94656c8913ad6698824f418bb6f3ee6c978f24499119a5282c86e85e0f19abdc48920899418a538eaa5341f7c5cfa99124e9316314e6baf05fb355c217c5af3967df8cd2bd49878c19a1502b578e23f3fa462240808062f358394d9645e8d38c4f18c37b5c92d3d1cfbb9124196386270aad1daf759455a53b4627ce417f1262bdf579ea109fc1894fe5540ca32d4afa49f23336a1a98d4b1f64f496df465ec8fbe01543062b2402333471658df6633a871b65be03e900cfc88497f396903b1f95463c92240a988189637814a9b12b5b4ef9912411f2be3f72665c82574fd39c7b2ad3ffc5177806440662fc0bd6c70468fc608625508b1e54a7a6746b512552427350593c54f01247926407067494f11a1819b218d8a1830c20422c90244466c0610625cec94ac63521ef4afb3144f00509bed0808e20cb8191218b811f32002204cd984495b135e8a043ce978b011d16d0c01718d031010a7040c70c21cc90449adff2316c8deee62349d28124d1199128077d79a31ab79eaf9124095284c70b8000f1816640c299cd3dd2ff83eb20f862033ad873c623ca97bb4b1e36bb73d24892eca0c00c47589f7135468dd7de52230e57fd9fba31fcb8ce086b5e5450d247687dbe08462f6ad24b2be2ea8e41e77493ddaf13519d76d70a9a543a214414a74eeafc97a6d9f6108972916dfaa774d21a02d1d17433ca82f8142d84c9948c7fb2e3e2c388100661e2c4275959dbe72058b5cc7f0b4b8fae20ecda8d7a9af719631708e363e5979c52d9720610fd5acc1a3a96f0aaff60ca94b7aad6e2e5687ef8d2530ea6224e8abefa90af5650dd29a5d7341fd6d5f4a6ec734ca13df8a95fa525f66673ca48928c10e9218324d921868e325e033eb6816c2049caf817f048921d33f460051dcbbc49e8a4c4a4c30533f2808c4d959eee2f25d370e00f33f050f253dd57d1ae47c5fc00d2e30e7946f74d5afa6ee2c103c8183c6c30c30ea75c2edac3ad2fa5d448920019e1b13a985187cd728cefca18dedd3492243c6e30830e998c7993b31cec3eef1973a843839f8a967374f2e580fe8785a91ed5f31b1ebe2f2449c49811073b66cf1632acc912ff4892ecf03092c4001f9801072b57a96551fe1baacdb1840ca22b64b76eb83cda29b9b60fcf96366415539c968a224b9876f40c36ac272e4e2f8bc7767b64471020422840822f341064c9489224d9196b40798cb57dd6ad4bee4892ec18c10c35b4f727d6368ccc327324498a30230dafa63017849096293d234982011de94330010ab0f31819b22318f842043a2a3081ef21448c2449121e4f6475cc00c20c341ce4e8c97765d138fb4892f048920d4860021ed8c00592240433ce706eaa341d53a9d4e76640930e9635f2d9cf43044ce00b091cc04710327a906046193697f751cfe6be7e22c37b3ae32fe61fedbd8c24c98e010cd901e878c18c31a443ab78e7f89c6b6c24497ebc0f1efd31e091249df0e02181196240a6e88e50b977f77d18b85bcb597bb647770c18cc793bb6e6d3f549e72f7826be636e968e0a325e784545e959f33dcbad0b5f4e3987704bd16f622e54a2dec42dbe86b2ca4892fce8c1c30133b650eedd142fab74d9b75ab85eb4fc99a5a8f877060f6664a11276751b7e94f578468294214692f0e091831958e043c47badc6b019fe2bb8a16631bfffb5f5680408911f617c210619408458a03f880874ccf0c10c2bf0379eb2c554f32fa32a20fd63cb09198f962933a8701e311a630a776a159d3185f5e45ce94e3a8552db0c2954211736572c9d647837902461cc88c22968d33877295812232860392a9a38adbc9a36339ed0efbba6798c692e5e3b6638c1ec3d5a5c2c7a8879079b70dce81aaf3107ada0421c98c1044d588ae1e25a4ea8cf48921c6cc08c2524f735435f6f938cf90880087914fc00d281240122e469f003c88f0ecc5082b5215ebf2b261d578dfc48921d4912c69017fc2832024619438600d9004a444690244288b8604612ce9025ed42c4d86e70244964f03f92448808720612ee529ef2735c74b77d24498610997184d49c682da91ad793672449c8e0f1e37d9411044827c98e158891820ecc30c275298ff6f6dd18598d24c903661441dff67499a1a2c8fe469204023388a06e975b6de99b93a71d691d366308e69c12ba7b39214486e8a81942e8a34559354d49cff6674610caea5bd983b965d2f248927c310308b6a7760eb2f3699f742449c098f183e3e36b7656645ac98c24c91033c307c86f5d134d1fa7dbef01ff361756d6b452743378604ce6e1436e0e16e339630767d30e7563495a108f013374f0687bfe7ce64c57bf013948083d4d2b255379b28c24898f1532c66f100b1c0eae13369ef7e2690bb291244156457810212329e0066f92afef6ceff91f2cc2e38708d920658356cda2c65eeb07ad8d244992d4e0d8dc952be9cb9e2f456960fa95ff503aa397364792244944909461909be208f59696ad3492240c988171a3e64a63e85ac78c2489046450d48b2393e9c591a949c0f703493244043138073de2474e3e93f48514e1373d4d4fcb42c3a7830244f61874acd6b2574b6d19e2df5618699575d44653c856f1dd4fae4fee541e4310068587b4b0cb69ff5b194912e7514190496eac94ba5c6ccb08107ce48bbf760cbb8b8d2409027e6c5fb96f9aadeaf344065a41676aafb91d130621a347077c70ca923c7df30b92394fae664f795d4c03e83017b85ba341531871caf232d64790213d80a41f61748f1ffb011d21e8e1e9a8d8742174dc7f93648c1f3d5ed03d7e2c60441931ba47ebc2599c0c18036121ba51d353eeb58c2489a5664663d7869a489364858c9124dfcb6da8574adf55d7c81845f89dc707d91ef249b243c88e0ca980a34ebc6e99855262440c34ea2b424e5ea9a4a34f121f3ebe2bc09da698ab46b198b41e4982944124497694f143024952c68fad3d7dce96f11a3bc6f2479284002d30c7d22145e8d9b9ac3153c44710327ae84812328afcb8008f83309791ab412719ba911d6314e1a7c08e1978183a7e8c1f1b8224d19101166831678d6f1d74a729ade0f51f7d3274cce4afabc0abd49c95f2d8f7869882524e9f842ecfbfeb1b444176aabb7f5b2d3a3b76ec40457408792261e8002349fc7b044912214fa4079013b8b1564eef2a6ea8296002349a7c79c5f4d9335e8263e7bb75f9e6b81e851409bcf5f16dd1943545aa234077ccb3dce76b7a901847138dfbf5d7e45f4640040913ba1f564ac3fa260485754d395ac6abce6e24498808e1f1e37df88fe7310110eca5febd31533b8ae50369cab2af736a455e9207fecf79545021f5f2d4234942a447e20184088f0774a04df139da2879f17f72a0a474be9a4a7abddd8f248900365078270b5e219fe19b0698cda1b7c534c7e6190393812bc4a6963b39cfa61949121e448a0449921d448a702015494538495291010cd9019c208cc3561a21323e58a7359224448a70204988142183870e0c14b771cef3bfba35fee20246b17ce992a96cd9725ec88e0c598005b0ecde9c3c550c6a6d7720a70257d2b1fbf0d7a9bbe20ee428a047f798f749766c1b0f0c6f5f4f9aecd07cd347788cd8040ab9b15d9f4f514306081940840441099892f868939bbdf45c469224081021fe4504d28e26456c840acb6d2449fe07101fcd23491600016447365c25eb312f25203c88f4f01164880476a8997d993d23bf6e3fc0bcb3bd97425f67dd8c2449e291243a30b5d9f93c76f792682449ca183204888f24491275409daa5bf1bb572b844692a40009194080f01843080f1e38740dbb341dad65437f469284c7419ce979a51c8f59d13362d2ce29873e69d1afef1e4912190011320603b0cea871472e584e7e1a49122144869c613298682a19b3ae3a929c93f65690559941296f244978f88fe5f13110f249d20183a81c2a77e6f0ac318d24c9c89022417808019292648704be90c18620492260a720aaa2b3f9739f3692244276a47924c98e242142464a92173280120c804811320ca0c30165d25f2694fe7433b9479264072a62001d3c7ef4481221448294a2b9770cf2ddfbaaac91242122244992e4010dd80d68112a4f86d4feef4788b1cedf8ec1bd92516a5343f67ac4908a33192cdfae5bd86c84a10b2afdb895ea757b6660030c261b4dddc16ef3d6a60c1b5fe0dea469169579435c36b0e18536fc856a897d1edfc4b0d105b3537fb455d0d36acec00617f020cdf485af08f77e64025b30abc5ac1b2793782160430b75eafea0cc93c6a9e04892ec1822021b59684ea518631223eb4b8d857cef743e64560cdbb9c2f1f57735aa6f85840acf2abb721efe5285723ad1ac277bff49890a7f87a924cdd65368110936a670a54e3965f8dcd93b0ca36d48014f67f25ff4f9eac76d44e15153ee2f5b29735f1b50406ec60c6539752c9549c1c61310f3d3df3562db999ca1031b4ec0828c51fa6bf2d16f20e9471837b0d104f5dc62aea434a86f87ac0f30706083095bc8b624c5628e773fa48cfd40111b4bb02d6f56b7777f51b38e15d850c2f74974d5d9af7c3bb06c24e1b0d94beabde78c9f8384ce938e6afa214ede7684a37ffa2a1fbfd05ad930c2362aa8fb8d7e88ce63d828c2d93cf4968e9735677e24498400e101860d229cb5c3b9068f4f6fe71712d091243e6c0ca1ec962c8bfa56d5a0b421042b83d2e77971bb64b611044c99d86fbce8b53f01e1bcd41c44861b2fe5fea0ca15a584d21d477b68c30728919927329f6cf4c0d2de0f961517444f1b3ca852bc2fbd4984ecdc6ceca0cb1cdab45bada75555604307063b11a384ad5a573e179dac57e5d199c373b8689318539515af2ec35b942b854e49c62eb5181f409205be08434790e5808e911ab640754fc51c7e6a73127ff40042e447183f6ad4c238d3726f4a55cfa4456ad0e2aea42b27ec6490ed0729438c3288d498451b33b39541e7cbfe98a0862c1e19729f61af9fd1a2841ab1f8c26d3d4734efa6cf0c22d480c51afe528ef1b97c9d1952e315bb87784c5bb192b2cb489204212204c807749051c315e6293931a24cc98a9953240801046ab4822d91254f5f962c3b25a1062bfa8bbf7442bb25d45885f1aaf3d925655f795b811829d081811aaa40a62d534166c6db983a158324216385a41943a8910a647cbbb019935091868bdbe9a4447c684e81e7f495f4b642d6668700a186294edd49fb0525544d67ca20328308354a710769424b595a88c66b9002d9ed3842a79f05dbd38700063546d17c8e4cd2a4568dc93b88101e4112d710454a2df57b101bedff8ed4088597cc9455c50e72ed1aa06093588e78885bbb588d4fa432e798bc73ebe60fea1a9e30e6204ec90ad27374bf137bfebc175b3bc87213278e27bad3bcc7d2a4db84edf94e7750b59e1fa409c7d49e8ece594353301386a6dcdcd4215f7b63c28b9b17a344c8f1514fe0126bd8dc74f1f65579911a96d092a5f0317695ca5bd5a84442858c3eff682aed2235287190299d65c5ca302f8ef078214178f88f1e69013526a1eea511fa66aa39f29124791e4192a92189328c862ee99d3cc7181d64d48844ae299e3a39dad16447841a905844a4e7be78f66c9b0240a8f188f5623783791c4df53be23c1d5636be7d7a4b316a34026d4a8aa87b88beee305083119d2c61d1ecf64594435d8a1973f80a2b5244b2712eb4629b88cbca528afe398840dc2f7906cd78b7568d43acd529e9989953e3bd214ed14b56fa54ee525c083f9625559fcd21d38610f687fc5ad269715465106d9c6712e23cdf332a8836c5f460f62fda634ee00235029197c9cca173d7ba5f80605ed3bafab64bc5cd8e0cf9432ae8ad64c22e9c1a953180f8f0035283d0f0172d9aaecb3b90263283efc3a73aa6745aa541995806407c9421e463a035f85049d714d36882cce0f780ded0692fbdee8c757635f470e9a95acfda7a3bfa241942640890ce83f7e69a4e9af6984b04e20230f0908c968ca23f9e67501a81408d3b6c6a74b22cde2146b4a7861dcebc7f23fa49f752ce901d2349eab0666f8897554d8d3120cd8347046ad0a1dd18734ab39f3cb4ab1a73384eef4fe9055197e2911e17c01a7228275d3a1bc64f768a8fecf81f407c80b1811a7138a8cc341719272b6e469264479208a90107f584da2a79ab1f640e588d3718f4a87b9acc49b223063d28e086c2fca65f8f31c69c3316d468c3e5671dde927e0c378df0f0b13d88b8100ff8d81e4484ec07922408191dc6076ab0814d17af849d6308591f59630d6baa6878ab4a6193cc103530a2375d92bf631f3c6930f86d462f9d83d8da469204088fa7418fa4061ad2d9b495aef66467d348183a4a50e30c78c8cccede7a50a3c2333c0ba3480d3378514da8d53c8b253f2349f2638c1e1220418d3234ffb3c1443659bacc5d024962751aa84106ee52e54b75f945bb682449840819c3d1c38bca8d194b43c5c788089284480fc6b3118451430cd76989cb243a3a1f140645472caddb7e74ec7cd4008376fb9fdfb374aeab1011f231f88215e5ca52276d2ab62c821f35bcb0ba9ecc32e9194d069151a30ba9cdf2a2dcdd2dec268c1a5c30a598da64a7eb55b3013050630b6925fb50ea63b460b69c3584b8197d6f67e1d1153729939a92080bc61c74ee7cd6b1add424d181811a57387692614647aba4f2b342d2ada2c8749d1d735605b45a92df8ff9d123a2022a463797f9feca738d29982dfe3c8f9e98be2f05dd2ba89a781c55af47e1feb0e67e72ff9b6b28307bb244935bf40ee213bea072cc49e5f695fe38a1b50c4276ce9b26a4216a19e44d5dae568309dc9daaad8b67d5054990244396808a57b99387cb1e6eaaa10474dc8fe963a54d3a846400040c21a9461250fb7fbd1add18848e84a487b3dcd9d194d97d045b3dc5db66ae7ab73a50c3089bce791a358d9015a12224275b66a7b275ac480443ed6765708f759b1b429b9a16a37f4e895f358480a8ec2754c8eea4b1ad118443f37229255b65271f49921a4038a8fc3d999584a60b8f2449036afc20d37771fde593a6cf7c60d2ab6abf51bb39357ac0f6882a399da495753578d0987fb8dd565023aeb183bbdccf644c6aafdc3574d0ed6f8c19e57a96a25cec253fe2a28ec7a9707114196450955ed14a389224758baf3766e711eabdd4c6166ef0709a53e7781dcb9124d15ab0b99e2183344d2a2d5063d91e7e2bde66cc4892e42ccaafe89abb8365cf8e2cfc9441d72e7c3a9f33168e0e22bdfada467bb0f8eb3285ea8d79451997e47ca99a729b5706435cf128fbb1db1473c9b0ae0c86b402af92a66f395a3ce7234982ac38b59955ba7acaa45bc5a5320551d97cf73eaa4086db70ba7f9e2de748929854d4262b2c7d2f9a883e9224868af2867bd21e54d2147b2449ea1447cf3174e569b8df2b481137051a834a575a5776768d248996224bedfaaafb1deb3a23498248d15c5cabbcdadda6f24892e428f2504ba5ece3fb8fa258c492aa59a7dd0eef48925c28d22b7323d32fa7cb0145669b9b536b6826cd8c2489f98449e61cf929be676a0b52c43df1c7b29d131ab277744692a48214f14e9862ae5155aaaaa1194e7473973d74ca6c029df3cd9dbb5dd64d4792a4184d3c4aa77decbe344a67469244336185b2ebe09bb639c40437777f51d63f85b78c24495ec294ed9a2c552eb9791d4912b4c4b194a65cc95dd0b94a24b263d8ffcacf5fa2c41573587bb6c711323609634cd2627b080f42cd2349622609df36be6b978dba944522cdf9b54e7754958b4102117f4dada9b952d84792441f619ab2f5ec9df1d2d6489220479434c8be54ba526fd988c405b3d196e6a6d26924499011d7c8bc9d1a1121647224496e115ef5e82823eab73d389224471156e99311c2f3558e49c423e7e665c3e71c0d11b7a8fdd219359736fd4892d42190c1e644960c232c2c234952ca10d5855cf7cf72a73b2d84f27d21c73479923a8f240922c46bfa79f9394cc77210d69a46dfe4a944e43f9224288847c89afdaa14547acf48925c200a67e9b17739b57400612c8ff5778bcb729b3f14b47ea579d68c7b2a2349627ea8d3a8604ab38c77f44692a446861409d2873646c576119edfbf1c49829051c4057c48764d76b37e12f132197bf047e69995bcd7ac949124e9207a4893ee1142678db4118d24498f20641471411e9023e2bec3070b17d691240942461117e0e14ce13eb57348cbbe47920435a08b3b6caa496cd02e21accf912421c30e75b6b7cc4b49347b928c057451875cfe458eaef77c2a06a183b9152ab75cb345537328b67989d1e92bee3472b064c3c71cccee754f407c2c91751f3eb6e370ce583178f69c5b4610200d87b54bd46a50b7fd1f952ede90275179c494a84be3bac154fb9c69f9eac375234922a40d8915dda0f716a6b61f49121f2343d87077ba681ea1b6e2298d24c9132983d7c067f7db246a730e3efaa10643efae9ab67806693096d0fba6dfd17284004183e9464e5b26e571f21f7b065d5c2ec66a5d19298f0ce961867583baceac9ab3d28d24090cbe0c6811e79f5e9b9d658e4186c49d97e566a755c50c1903328da814cb3f280df2186238d559f21c436f271d1f09e8220cfd578b0aa56352caab911f63f400c3a13bcb3487d7251b8d24499019fc172cddf143357dc6a5d8471132bc70289d63ccff0f9542e6be0ce8a20bdafaa598631ef2d7c38565d64d78e6099bcf8e248903d98295c2c3dfe9ecfebb1632a1d9dc62a551650c7a781636399654665d9ed2979124e12243b06058cabb2ba752ebeda308195770d497d23c269e63eaab802eaca0bef7e6bbb8ed41a944bee8a20a8d10ff60f522468a3a92243bc0e8820a8dc930ffcc502ddf4692640702be781af41852e4001de8620a7f9231d6059f973da12ea490ccab15d3e374f624ee220ab785d1251edbb737a50b281c9fc2b3f5b6825c7224490e0b8c105480025d3c21f92a523f8d786b27e8c20999384dcb21e37c6cefc1668ae808810e1374d184ba63e9b43faf1b26b0f22327cf3ee5b3d048922cc1f8df7f59f32be71408104e1221d685124e6e612244c46814cf88fce85124096f2a29e7ee417b6c7ce4748184e7cbf2fbc6d31a423a9224a68b23f4a3b39baca85851e348925c1746e83d6d33bdd462d5e97d245d14a1ef38ba3cad9750210609410f964092f4e0c52e88801ef956b93dce4b53465ec8104e42eb884fa5f464190c499227b24962822e84b0670da13f623b8fd84148788638b13b794aa580604c5a635e12a16249fd075734abddf019de7634922443c2d0318690e74092081943c877e183f35badff2e5d6bd67a5094130b675a31a87ebbe0017e97f94b55bc03e4fd46c66815f428af0b1d986ba531b5caf3862917858bd9b6536ecb7d7a2449304003175fe6f8183ec7490f9d5b98479ee51c366dbf683a84d0b0859ad5aa672d4a9b696ba158de7a8f79f0fcd148928cf1a3471914a071071ab430e8984b75443ec8ddb3a8cbce837eaa70350ed9b1438807669482862c126b633aa7850b19d3583c4a45655fa72bd70b16df8c8a15d74a717f059ab7cbc3e6dc7cefb802ebfe2c5711debea55630da3a78286dc9e434ac2886be30fbf6417614ade2cc9dcd66834c15291373f17ddf4fe72c15cf65cc2133e6a7f40c03a8283caca9a0162d789e23e9853c059224bd90d7008d532497a3fddbf184fa9029f016bd2eb5947e4aa714483971a7b932ef4f4d8a52504975309d538c2a8e62516a613496b8ad5ba2f84e3c468fdb5be2965024a45a069d4d670d9d7a010d50f8964a6aa806d526b51f343e5125eb97576bb7ebaf6878a2137baa0c2aa94ddfeca3203438d176d214b1eb12a3f719d0d804222c9fb6a8e51543a9063434a1cc28a5a131fd65d3860449422448096864e2daaba07b4d66aef931718ad496f58da59ad64bf822a314fc5f812fc470018e27e44177522d21271c648afe916aaa59844d3884d092c14e3c093513ce30f3ded94fdbc74c09702cc1cfbb4a969d2dc7f494d0b9c7f9d33957a79d24e0b1fe543a9da982a648c072da4d9942cbd2cf23a45eb53c643b668c0a0e231c4c5dd2bea32e423737973d480d5e21038890b4430c1d3dc041046e637423491206101c4330667d5c43f89f08d97008c14d9d7385f59991b9e108c2f331934efb214a56fe021c40d033dcb279a76829db3f48e73b8ebc9ecca5ae0f0e726293b49199648eed08c118387ab08a08616dbe3aa3faf01e3c7e00f1e161fcf040920c790110202343760008f8a254e07d042922c60174340e1e304a09cb7a4acce8dfe0d881f2a9bacb727986a671e8c0b6aa553f25c39f340300c885965dd6bb3ae81cadc60542facfc8d6ec2d1cf5984cae625476d301005b6c2aaf9275bd650eb316e513726ca45f504b950a8001005a646d4a484fa5b46ddfb3283355a80c8fb1b4a42cbcdc9f533033168ed879e8701d5898a5528d75ec08252bafc0dd4befbef5afc8932b4ceff1f30c42e979532b4a95bfeaf6b7ca8389157b12a2d3536a501a4cab4078b6cdad9ca40a4e2bb787bd0a2e564a85713a548a27845ea68f8a757dc4e58c565bf9a760fee4a85dc556a5bc290aa53aee069dffd3f752781b7bc72a4f0a846916a52d97896c475188656a8c655b4f5d14c9a04c789ab3e031e3a160549f5c38eb18c706454ac5142a6b2e676b3fa18e8bba64667b62ebd78b1a22ee734e77a20ebdd172e1c209c74cb3faab9f9c4b6f42afac10aa3da63ca53571968a365ab34356a533f16552f57ab25a9532261067d135d4abc7477c09d6b7df82460ba542b644276f378557d89a8f2b8197b7feafe8caed302590c9f49fee74a23fe3491c944eb64184109f179684af2762d13f5fa7bd91504ce5eca46b9d375c4898b28d9c06cff0ad3c02a146874e6f7244e194b858b1a2d4da8de8df6dd3d5979a759511c7d653df907b67595d044a36adc2648c9b94aa88662bfeea7966b75213815fce31864a1d2d6e8a88fa4286b8d29ecf991ea2f431be25939a73fc8660336fb4d20d4287b91008cd3aea3f28b7b85942a0414e3ba8140da2d1aca72da6202d8f90202a6531b6fd29f3452810b726ad1b83fc6a96081096f62ca2cefbc27ee80fa90af2434366fc33c80f87eabc142fde7dd072b9960c8be1ff4f3ef09b4ed9869cf3d2730fe9fc39558ebba1254e3df8963c69d36242892cf350e8b4516414b56395c4039fd53454ccb98d39de81f7f0a64cea9fff8c766835c91f9393498e8a75c093a8a7d256a3630cd2e1b0f6edae1bce2173b9d439e87edf14ca41ad17f731b1f39ebe389436d62ee75c93e31d1cbc51962be91ea5d7736f40e9944b53ddc193e5dcc0cce6d1e974a4db6edab06ef473cb9b0da7e8f173529dd3f7e7d780794eba926bc76fdba821b7dc535dbd223e68d2c067eb376db1df9f3368b8368734f9ae29cf7e06fd2c89dd7526d7b49901d5e9ef6d7d4dfa6865a8327aba961199c3333234b3f329a81454b09c8de1aea492b4f7c5508eeac854daecf45e6140c353a687d058315c6038e50bf283c524f5bcfa82a72af4a6bd70aeb7c89837ed6eaabaa0c7120fa21f7fe5e7c26595b64687073b6dc13467aa4d6bce7fb5602831272d29d3e3c902802c283a78e7ca9a3f7fae00000b7d96059df36a0c1dab02802b18f26a57e7d442a9cbc792600d00b042c992da4f725adccd5485e573ec342f933dd65361f5146694faa7d2704fe11d594b21d4af7d58a580defa7e91af3db646c19893224cb6564a3284022a2ef4a8a056b48c9eb0c59cf71d5ed77d9e13da309a9642b8959ca7099d47d52e4f19ab72c384643631baeb49ec8446061961a801004bb83357eb76d6747253c225dfc2cf7fb76f2a25a1b4192fde2d665c4a4282a75db7647f68f4f58f70685e39cfb3a33ec58d90c817fd7241535e668bf05fc79d36eda4924789e06ace662b212ce34687e06ee5c99cba8d419d42b83e6eda7c34a5e714044689526a7b7b356404c296fbebf39bbed3077f60ce3dad37fd4986d007696694cb7136a90f9e1e143da867cd37a96a1d1eb827f3e59e3699501900ec40d395e25d962f513a06001da4bf3ec7f1add849c76ee4e21c462b67f7ecf62e3770c1269d272cf6349fe5e8b8c08d5b9c32b728fda73dc618b64555fa844cb61bbb395b8b6a452be93ca28458951657a9c9119fe744dab338e6dc963f45d56fd09185afae2da23198a6db62616bde38af9f73bf8645a33dbb6afc1c11638df0d831830e375e5128adcb0a2674e907b9c2139b392da4c60963f0822fe470a3159ba58d16db52da4f6a56a03c8beecfed2c4f79018fb4ef83c78e1d24d0000d32dc588516ecb3e754429779922ab61a995c4f988e22f25418faca7428f56c0d1915ed6c1e253f67d193f614994c42c47f6a9155ae290ae5bb9fbcd4fd4da8146b8cd57c7b2129109b94ae0a59d7a7c451207e7b6408217f417944719bfa6e93717426db84c2eef7dc98638102fda441788caf9ed49f28b7a70deee132b3a758e28627aa53f1349e3ed4e8e94627ec5b8b22371bbcfbe6c422c27ec30999c37c8cbfdfd8442a8d16a5bfe77745d74429b279b5630a32b7e0462690e97d76dc5276c78a89d5577ddc6452416b6a24495270e3125fc6fceb63e2df356309439f7659694e9bc41a49121ffb4486f078818f220cc6183f7aa0e04625fe0bba429ad2a0c22751e2537a4c4be7d14e7a9f8439f74794185d127bce964da6249305bf23f195184b31a542c20fea292d6e52fb2e7a44b9fa172ea7fc49651d919c18a9a76e1773d9885265ccf37631f574c908e4a85449a4a71c53ea168150f146c7e81954738a60fc64ae5a5bbbbe9c1b89d855d4ce88afd3516a449c648374f12fb73337f520f2e37d04e19180f0601e3c66d023cda0473ac58d431864eae0aa3965529f34447abf9d1e93cf898f85d8f209b78de93f667f6e10e234d5e9c7a3252faf0751d76abbacb50695620481720fd139e62083ce5220dccdcace681a20780bfa93b8cafce1ce3f986d4e63f6d97d51cf0f97ece68c4c1a737cdf8733e8ceb4299805a1646ef0019973cedc85cce7116fecc18e4146efd873c94549831e438a18c0dcd083d9e92ed7a74fd97a1f37f2608a76ec4e99abb74918c0839e3df488853a73d1ef80e7ea789b9ece82550a1606ec6049117796820e53c2aa8365376aad1af66f93c0b84187d252898ae5edf97133074cbbc4ec89c84e396b757228f7fe964a322f2be73170230e67d40c1e847e9059ea316ec0a10b7bf1643f740e5e56e0c61b4ce135cd0757ad8b8d046eb8c19ce4854ba775c3fc637bf82042a4870f1e6400119274dc6883252d46b33a53974be77f37d860e7aa11ae79bbaeb235701622f2ae29aa22351c2b67c5e8c94efd29ba9186a47f4e32643ab5793a1e31e8e123a81b6828f8472da1f225a136a3c08d33dca7faa6499dccc66986c48efeb4f3be2257b6c08d3298fc33d66e69b2203b33780c08791900d980b941862ede8853d5396db974630c56880ae659b63a7a24864cc9ae6ef69d4bfd85a11863d0c1624be9b5f30737c050de10a32b0715f1a201e1c6178ad954bacfb1230123dcf082b17bdef42f338f8c6e74212d77bee9849c9f3a793c8f2064081921c10d2eb43676b2b4e587ee478f913074fc00e2030637b650983579a652fe86165075a793a56a87ee74e446160cfaa4eba511324c5d37b080528d3937668f5b26bf023e2a6c94c84f319fd80acc9d6677d95c9ecfa9423e6697f2dbda4fc6a8e00911f5a0736f69afa6607592c1d4258f33b24b217f31a1b9e9d3ace6c08d289cd582281397ccff2a37a060de947ba3a59116dee3e3c613d26dcfe4174a3c2ceb84ca3e7fda6a954d293aa40a379a90d0f993fc52714ee575c91002c4024cb8c104bd62cdb295acd4b707379670fa28bfd01d579d0de18612b03adfcfe972eb4be846122cd195d3b841aa2613121017741c33cf2473e11b47a84fe456ff8c6e18c10aad673a48158b1d06f2a308a6d867eab2ca09993c3788d0ba684dd777f7eeff8d21dc273f764c13b3a3846e0801d7144c6fd68b92a1bb11048429714968334f426c6e00c11c77cb56a7ff013a95929e974963bcedc00d1f78238310eafea29a971b3d48935cb5e09935071376e0060f1869ee1f7d44e3b6f4811b3b3084aed0ecd5a094886ee8e05df98de2b12b65d07291bde5f8b099c145414c634ebd1edac02d8ebdd5f34e41a58c65952d9096573cb692e768a516af270dff238332f797166efde51eff3439a599056ea1f3e4e94b413f9c51041bb228d7252fb724a7b5f237b0110b3f5650761527bedcdd0fd8c0062c360fba4694ccdfc78506365eb17a9297296247a87f5d617cddeeb260f963aa2349d20ab64399059bcd134a39c28afe530ed168316b6a76156af220bbed9368f65315a83625d2b2e6bcaf271ba9d8e35d67ce11539b74c84a880d54a8b174893525a4dc251d3cc51efc3e8e8e972cb665c31488d87ebfec6b71ad97a2129a72c51491a33f23457a316bd2feab29be6914a69c9a69c1539bfc1c513c57d9f24968c9a81c8a6cc4cf85d606280cdaf499c70a564263fc00e2830710204478b88f1e9f788c107907d8f88429fcc4c5930cded9f10456e11537639afdbb4e30aa557488585f8e9913583c51ef5ef25f37b409b645a9df0c1edff7d9810d4d98f47cd44e3b884a4d19ff021e4120602313d59f3c65274cfbe719880d4c9c7931abd37eb00baf08be104307156c5ca2ee542ea3419bacf76d5842fdb010a7945097926ea3129d5065322bd5f7e2b34109b4d788690d3ada466563125d4cea4286c78fc993248c3dea5ac1c3cdc94a24745127964f66fbd01324f272b9a05b43751af511f96e6e8f1a964e544e59b2c0862370d115349e57d6b7ac1176a55dcb73b9345532e29c64f6549647cc335b0c8c10540005361661a6a4824e6f9b2c775e11c5a0945952a93fa445137166c94de9772a681889f10e840333886003119f9e588fa2963a9a7f884a94b64e4bd774e1368431fca70f4a4e2825f442744ab9e89841ece668120271395649e71395bb9b818d411475ede7ae4b7fa8d2870d419cd1be45bc670281e5cb22bebb29aac800a1e7ccce71b35e0e5afd212ff71955796e74447ec874d698f229e3df05f5419351cfecd45cd229c987dc947dc8939e94527b0f8b88f76432f368ca792044808891249f242de475b80d3de41aa2e6d97b83c9998793bfb55594f1d98cc1835f7162bdfcaabc4e7760e4e6f0e19410ffacbcc0861d7edf300b7adbbe29ec021b75305e668cf1bc8334e9c0a5bc21ec84685cd9e760e7abb6e4dfa5195c39a4f5c28f9aca95fe203c7820c0461cf6f027df3f9eaefad247421b7050e3e5145444c9946e1c3936def057a5642a7fa35be94892f80086ec00900d37d441f3950c56173aa5638c016403418074c00136da80fe069d37071563a914ac942403b0c106772e57e690eb7a7bda588379d2bdc2ae7a304dda50c39dfbddd35c2cafea7ec88e7c806da4010f27c44e78d9a64ca0030c1b68d0b2c289676e4ddbf90cc75d11d22e4746eda80f6c9821d519e3c628efe361d7e1a30807924487096c94a11aa1f361c3b828f57ff4b45f2f95ca5b543e222bec5583c9cf167a9029c57556b55aa716c5d8257dbd7fa2a7a14529fb366b3268ebc86671dd8713da7b92457171a6939627bdf76351ce8a31eb570d0bd3a6c97d1e515bda2bb4fe4afd9d475353c815a98f579a5267f4ecb4223995f2eb56e8df4ab2c2ecd0297e654f4c8fabf84c6e4e22aae93779aa68a485478b9e27769954749757d3e7d4465305156ad6ecd849355f4ef1296af74ed549e7df0b53bc59f2d62f3d878bad7b510a3e88584f2f3229560bfe27becb3df4a3b06410fab2abd5d4422f4471ce68d722674ac9a00fc541a9d3606d9a3bb5a0383ddd58d8979237ee27ba51bbf966f939b32ac40b4ff0d79d6794972cb5a04ed49f975392133b95549c30e67c8e41dfd8aed69b38cb7c9022945cf5ae35717f30cdb4f9628d906522adab31b57ef4e58b62c2bcadd1e47d7414d55dc2d85fc95379d78bd02de1e9c8d9af564bb54195a86e7394970d5242f736394ad5c693659368f47a50e973ecf01495c4bed1644f67af1ff9238132cd106e318e4a5b41a2202b7ef292d2231abda6626ce71c915211ba42fded45238af599616a3fc3fa8b00127ca18103e8d881178c50ecb4cce896af12172f16d1778c96b32cfce958cdc00b4530573179129b82a7312542b74a3a96d968f7ea1171e597cec954cc1cd90fe14633cf6a27c4b2890da145f90db1524bf1b210cd9e506aacc3ff8591106538b9eb69839e7a71108eba690eab2d27270ac231d97c1ddf2bdabd4030ba4fb6e8df981b3c4064617b96d9e7573df7072dbae9cf93d5b2f5f1035ee3e3a2b3491ff9f4e18a1daf54427ecae5e183619935e790a67b3e670f9a7f2815a91e1cbdf64e792aabe62c0f8d281dff367f2669c243627ae1364375e6aaeee0472faf64d1e36669873fe7e618c3ca0513eba0e89c47bc079dff5ae980177468c5e2e969cf7073a739701db3c8a49358b7749243b9bd3fb3274a9836c501bbd3fa7f3151fd121c4c4a2621374d6a8cf76f60a3a51257b5b817dd0d6a596bfdb5e5b0296fc31e3beb65b3a829a9990d9f6e1395963dc92cf31aaaf8eca3d632c305570d872a1d2d5bee75d49a8682c665899d51a53b4583fa6e164c5fce4a9b9ea124fcccdab682ef8c66d0327ef4dcf915d6621992967c7dac2743992e469b923d9e733786e34c8b9c5d26ddd92386d2c375909557997b1838254e74939a901683e1d654da3b74e9b9f20bdac6a8162e72c9f5829f79753b8cb66ca70b8dcffed59bceea8d0b061d731cb5e8eea72d385fef27d3e74c75315a30a7bfb82bdb6ca6b72ca053bc6c16eb50ab62a18bd1378799944dba8295395dc5cc998368ac90d0be5fbf2dfd9f5255e0ea546dcae7b972890a297d29c5d13d5eb64f815bd11af4e242ce9502a7eb21722ce8a9af781105368bbebaaa1c33a58a17503066763437056d4b295e3ce175f9ee683ad475eb8513f2cedaf4fc944d938e03bc6802e2bcc4c710f1f4ed7ac18493324fa956ed43f614062f96b055c5d16e5edfb9f4c58e1d60e898f10a2f94800911df274f4ec267a64606ad267be522a11cfd4e5bcaf12d9f7884df43692ae9f14c056d244988248917463829259b4a79588db621f21700e2451150a6b569f3abe49eb8c30b221c63ceaa61e55467f843685fb3db8ca89a6c84a0ffe51096d3c6998b83d0273771d9399eb7c8830c2f8050ce586dee1cbe82a546bcf841ee7be1645d86bdf0811a3fc369eede8b1e9c47e8d2ed17e3887d4792c40b1e942ac87faf0bbdd8c12968198b6939fc8e4ac710201f1821d2a30427f0420707b92b3a279584b0da72e402cb4a33ad4f939996ce818b84964ef1f3a7ffb9be45d1d2e9a05fabe523054284c7c89022413690c3162871151e2a863fc2c8510b5536694ab6a53e9938497680a1e305bd444420840220c8410b3565511d6199b973c383486f0472cc42112a6b45fb37f549c647101d9f431688dfd1cc9bfdefdda4e30239629152b79447c8a86dca87051e4d6c761633b577bd6299cbab51930c2f6719e13142a4870c78f8f0b13c78740e571c632b6c7ecb62fc4e8720495a080572b4a28acbfd0f22576a3b395861f48cff93eb9c2ded3956a18c9fa934fd7baf9af7f1395491d0b16cea72e6d792562a18b7689f976a93b66a24498a0772a02295dd94256449efd1ea14d7d6a968f201394c51e6b9184f65dc94cb1b41452290a3145ff68d63e2cf737d3e92243b0c043948817f0c9f4d64cd36658c1ca34028a9a9b2c84d6ba91c410e51ec1b6ca4e5207472fd879c204728f4a0b12ada0815cb530a7280a2acdf9a524d6d4c3a458c1c9f402f7779ac36dd3113a0807f6f101194f11a4892ef2184481d7278223b537919dbf574637274628de14e05f5dc74c1fb22496648210727b092e16ef6a20524a08348110efcb0c0488e4da02b9e74921ac48cee96431305eb94468a4e2bd24d9960ae74c7b85ac244c9e736053ded0d515f82fbd6b415eaa7829c2d9167cb73d2925997ce95604b56b00c95a5842edb2974bda934319a44a7c4673c8ba52432393a8d55c8e488c4e92bca94b799e577fc2007249269fb4f5c2dbd4d29861c8f5053e650f9d3290c391cc148119161ef7ee36f23d6d4b2da2c428bfa7230a29d311d9972c64c792fe2d99211cb6221c4344ec8a188b2359c324fa112e448043a9590513cebf8bb55851c88e8b6c72d8a789dbfca21ae51b1921a935fa5ac21f09461b75287c9a79c11ce51083455cf081315451f72861c84d0ec52d4f8a9fe49b62349328325c3c7fff8b1236010f90b0c21438e41f85173f01cff548c96dc420e41bc2fbaf26d3cdd8eb967214720eef66c1d33a6d3e5ac902be400c441e6e822bb561472fca12aabd25e3d932d273fe0a9335b968f6de67d1f8c1f63b4e9a90a95733e24ea82ca132a69aed67b483b56c84e61537dc97ac0938ad665e72147280f8c3099fffa2cfe68f080479993b229cb8b6aefd0a990b9426aacd297b5c3557a32af648a1757ad43f5de9e56762f4c533ab8b231c49feaf868a339d425b4354d68fdfbfcbf05c218430e39ac5fd9b2829a534d671cdaf9912296a27cda0787375352e6d6dd1bac2d61a64ea6aa9c3a6ef0cf56bde26586394d1bfef1f0faf0d8a54d3670da63fdc67ef8d1d81ad64d9ff4fec97ca9d5a048d758eff0a6e1da391d253dd4e5fa72a021a1f9177ea9fd3f6754c87106d7ffb3a991fe39a76b06e4a88f52cfe1836a99831c65c0e5e3890635fbba22024a08be2820f8a27ce08be2812f4a07be281cf8a26ce0003e8290d183c7fb085284088f1948c8418674a58c4c995754cb1f4dc83106db4406a575cb930a523160ba428d12cf4a73da25e408c319a6ba2afa82ca19048672e8d158cf1d738e971c5f503f6398490bf242423e8766aec72c4a5df84e6cdd659c1f71261792b73e5dbac62d7c31cd72caa44b94fae4d0c269e3e67c6953858cc982d7717ccf2b5ae6ec60c1335155bac6d2d8c6aec09e787d594ea52f5e56406e7bcadccda29b2d3b66bc21471598fdba4da6272ad8a14b55654d7b26e314ead4bf0f1ead63784a0f214488e490022a3ae8ab67a6240f2044788c91230a9a8ccd69e9b186c226a6dd9ba2e9d81693723ca1fcc1f3f2061f0f4ffa17fcf891c309c69453c80a8d3d95cdd1844fc5c5ecdd069da9d2821c4ce862bb8b3299496e92b120c71216a572c8df9854f99c4a2877521f5a532aa99e927224a1ba8eae22849b0309e5cebeed22c4a5eca59124e17104ee3233a5db91e730c241738bfedd389b6e2e837924398af08abcd2e1999753a78c240911d6106749bba9197308ca3184bdf3326510a5e4a5ec48920cc91c42487fd8d547dd33951404a4088b118b315493241d4408e60042e69f2d4f3ce7b1f77e60a91b9ddd73aa17d1e4f0419f9f6f93a70cbbb11c21470fecfff87de76fe13629070f4e1399de76bee7e3cbb183479588d24aba7fe4924307c9a02e77cad9e6b16386802317e88e179f3ebeee5c3ec0818b3eb579dce834eaf3c3718b44588c55aa437cb2d516e78abb506f29b88dac16799c1d9593b42b4f77c447101cb4e86292b9b743593839cd225d316ed6cfbc3ae4b2702bce7810cd6381daadcfa9d7a4794ec3a2d9184b1a26bfe2f2b4ed9cd4aee892fe4ba942ee7a505b713421cd3a3e73c52f5971ed7c66ab0857916a5bb61d1dd32e7baa5074cb3ea3ee055f2f159995ecd8aa109399458595c46ca7ed9e09a5738ab45d8c21465fbbc5c7148a7a5cbf9c43aebd538a53c5b7cdb58614ed9f2c0baf4f7b22330a73f2509ebcdd74fd260ad397e57cca42f1e894f45c9589535681c2ce8a7bdd55f9443109917af635e2b3e489c47a8a7f13af969677c28fa327f2f3728c1672c2fa8b1d64f64a9f426804c72636f9ea62cad37247a709364583321584e5f4054be4053832618acaca4fd92d750e31d19b888b3963ca3ef55d62eb2d719b638cd55bb2c4155c4efa6c0c9dc4af444a5ad5c970b39c3c4c897c43cc6be8946adc9ec441cf73b9a9aa1cef24e1c9eb2093f09c550f460255569bb69b830312c7bca7a78275e7968be31168dc581a763d1bda522488236cd9ac517bfc930ef246f0bb6fe73a9ee4b78c308386ca164b738e31bb88674fa554e717de5390224c426696369191dd63225a8d0ff3c9f2ddc20711e518fdbb825af84dcd211451274a3f79e6ca65884b9b7d8e969aac6821cca774d8d2574abc535c808310b8eb7a706f0d7ed787f14512700cc291b12c2b9438dd292388ce4fabcb688bffd2f2284308914098f4feba96d0393e2618e00004bba21957be64c629fff028b52483a58af08ffdc09c3629aa46d987446929793b1332673d0838f8a0495f8fa9fb92cccf8fec1009f400c71e929ba1649516f3df4c0e70e8c178bb17a7f143add5234942c6e300471e0ef25bfb3bfebbab3a828774902ffde1c25bf0fa0638ee7074af3653db7b61aa8f1552011ae0b003fa9427d5b48c1b0701471d0e1554ae4fb2ab54a6231e469204c1418735480db9a47783dc781938e65085a8a4f1448932670001871c4a22940e3ad8def938e2c08db0132a729ffc3a38e090baa7391d5b7b34e98c2449111e38dea09de6fa5375b980183abe888f8d010e37acc9bce42caa6ed61f471b109fe51e84bc105f4952c0c106c437fb4c67b6a6b5cc08028e35246fc3754c2aeb629a20e05043a284cafc60a2dd73500738d2e06e9ec70eedd1f74c39c08186b29edadda0e1d4457c06ef2f8887b54e4a3e69031c663866b51ea51d93b454fa1894a19c93aad7ccd86e1b1a491219ac10196c088010f911c613e921a4041ec04186c6e2feff3767b48e708c010be2b13e0a060e31203f53f3077db5e93438c270c954f793153f87d3e200c3e563a6740e3b5ffe19e1b1c30738be507a136fb15db9a2c4110f7ce13f7a68e08b2f7414210387178cb9539bddda515d1fa3088e2e7ca9375b9fb0fd7607077e78400c1d30c0c105c3f7de85f59f30a98f1499c1031c5b483676cadd131f2e9f150487166c3f9d82f0ee462480230ba615b9f42976cbf61d01e2c042d13374b2186feb5406f3f831021f3e168c24f1224366f800c715ca232b32e9f64dcd0c22e0b0025abd2aa94fc93fee3792243c5e489024f90ae0a8c2799e6494994aaa53a6424927d1ad9fe63c38645180630a6785aff4671734745019447af49841061c52787dd6d47edceaac128e281cd6b48c5ba6287e2b0e28a4c4a7bd503bda0f8d8ba8444ec3c14181301c0a850261000020b878120b0063130820684c261087c3b140d3451f14800257422e4832241e1e101024140884a17040280a0683a24018100c05836140402015ac5926d30395d6c0f490c7405303be7e1fcf295ce17cf02661732c3377a6a83c6d5349408739d18bab3aaa797949a4a7d0a5d558930edde47e1ee923a1d5b0dd2af4343702abed98153b08cfbd676c4fec3b70750a10bd708bd63210f81a68bf2d20973454ee086ef703305f0408c300ef3f038e6e8c434504422c4038e070888a7169c2e8853d39fe1f211344214d028f47241bbc923b9adfc7ed3dd426a411c15a8d4796bf8610df7a06decb71a666ec3bee834d66bc90f481c8269d3dd15215b06184622f89886c1df5c9ea55efa0b73f25bda521c8ba6966ef451cef5101e3876f9b8413e2e5c6c501658d7d9c91488f9087ca2c5229c10abe816b2b1333fd7a7c923d6c59bfee17cc1b6349beadedbb0be6c2be4d586a97dd32f634bd81205f64f931ab094dbdb663c2dad432e60010f4faaff432cfe5d34fd50bf8e2d33b88ef7a8a0fe22c5f4b727e8852d17b4c183b52d385ea018f804df8848e03ce86f1d4ba600494900cbaee15c00346862185bd1151cb1e9123f27572b53748f63f7055a05f1763c40ff392241ff16ecf8db4b3d23c693f959b1d03ea4311cf0c449f4671423b2e9f277ca993db784c3e461e41a6ce88f675378d44abe6b013b659108d266924bb3f83bccba618ace9048124f8b066bcbb67626665813c94a49c1146480446586b59179b767f70cc7e1a1997b0b710ceb42977d998ca0e139eff9f20885e8f0023d6754ed02e2e6f4a4cf4885768012267b0828baedf6b891583af33f804067e40ecbd68d017f63790350e6f53e7beb3943d23392c67d79915a1205bd4484bcf289e6d182a7230f844bb54df828cc27580ddf3f556ca01d13c72babf9841f4f4cceb5fd8bde9a06d7212387ebc0640fec9d9e7348ffd62a211049cab71e107385766c8e11c922149f713f22737050109ef1b10612bdb2302eafcbafefdbff10e2f9e2d6a0b6fa485c411dd38e3af6d13a26d02a49cb5a367562d54e85cdc2542e10c7b147b27a923a46e16237955c81c8649bdcf216aea59900273e0551a63595548fe99e0527b62c9f3fc0cd282a45c66812f986edf4d381ae910acce1179caaa559a07cbe069a4f97134a2eaca6d81ebdb1cadd07ac8f3474310355b3645591cba8918237e2dc324099d97cbb3024e1b0d6bf42f206af863de14009ddfba2bb14151f2ef007df3e7eea836c2e94308634587366c3e158d5e94d3c9b51c731a64256f8715939e8f454c2e57989dcde82f90d10e137ca1b75d027b21ef7de79c34fcf8cb3425c51920afebcfec4540375dd6ee5a37cae7d86462271239fcb90a940e02d65b2206ce26232095f32950d6c562dccab8e87f58ab0a9e4a1cade6e9dcb61d0029b14277dfe8a966ed08f9e3bea96d437fefcc2fc2eecd39c501386ee16a2facd43bda394ae1688ce018adc33f13ff2fd0241421e35a62b2560b26c900a05c76e818905f47575a5156e4c04c3c4b2aa18d42c2e4af73121bad3782406da3ebee1ec8b5c379ac946530137f314be05461c2e41f0a7eb2fa793d81fa580080b68445ecd10f234a502b12cb10ee1347ad5ec39d78472237978da2426ceaa88d3b21c4d36b643096895b61854e5a68860287f43c8be38291b3278c583f4c7b78d54cfddf5988c1925d84ef29012a7fb725f2f65ec0c41106890056b0b276920995d3509deb9e6ef671efe7df44bd33e0aca71851a1837dd5048baf4afb27dc451e35ec2274ffbf2519b2bfc882310e0afb95805d77f440a23ab8030b8f5ad8caf9f88160848485f2ac8b496f7be13e9bc3db9be77f811c3a7cf38e7f0fa4f53cef5d30d7f2530d3c2988687f86b34a4114aacfb472f5e5a0232d70a3bba043f040f6c9abf7c1770b109d0fe6b1337c01d4d5da1032bc5f92f76dba8c601c7cf7de7093bd29df94dd5e0da7e814161bb7875be7c441ceba2714004d0ac80d132ce0844ea45883d838511039b49ccf25739d35b8cb42c3a5ec79c891b9bc308e536c0d1e2efc1ea35559e9ce58b224c5351b91e89bc0830a55598e97da60690a94dcd985aac19528d9145cabc4cb521b203297aa4e913beb6372a02710d7f2dbbd76d0812f4d71644a13cb2ec1b584eb4bbc177846f3e432fb107ed100da1e5c1977e401548e388ae52727273eec9d3265d407452675406b235f8173aa794a806a9d203e658ec0564e4f714af98d52c9655033fa4efc81197a6d7cb130b3d45ef7a6614509348f5a174255f35b09e411b99fce69f1cdafa90cb0a9539393c245db96e45d9869b087ea5280d09c2e9a00ae75c49f4de189e9d8807279fb08b0835afeb035efa103a2b53490ab6093a67dc5c82ab30dce45e2ef233934e3560126defc284a590dd35626593aa5e1e00176ef3f63743f9336fb815f8e610cefe4b122f49327a4ffe6e51bcd7de99546a29fa09c2736eeec61fd516031910c48f6b734deefa00aa4445b0af2f13b15937879b4c3d16c04c2aa4dd4a7f4f098f4105465f9ea0ae1e9456941daeed5e4a38ada5ae0b4ea003bb5f218fb45d8af0473e8d66e3a4cf8b8b372677138108d4601dfd40d684c07e1c2333f25cbbfcb72f4fb4f281a6b6560201e5fe51640a47c92cfb32fe52e47c55300614854479b5a263b9ef7f4556484cd10a8cbb2335e1c1806d94a33a8b91896363b97390acf44644885c7b15bbe70cabc6516669f29da1a7762fe1eca4ed40c6579be03270564ef85b553d59e9c865422c5e9be477609d3a3433721946d1c63c26cf8f2e239b0fa736480b348e1ecb4ed5566fec7bc8926e3e65d594c2ef8259775fa345daea9b04e7ab3fe0978123d19c8a2af7056d875100e8573d4c5c53034d36e073a53c36d3cb5628507fcf01df0ddbbcd06b8448bcffdd4c4038f83c89fc53b1913807367c0115cb271e3ec64d76bbebcce39854e1715e8ce740e3cc1d0c471889d23a18d7766d86d14c2421e02c156c601673d61706d652ab163c05ec1417a0e003f5a7e91db647eb54a5eee92227cca8f9357fa1bedaab4f8e4dee3e0f1d934aee28220efb8215b13e0891207156c1cc6cef5ad000be1c509ed4c8a7ae5136ec6445fbe682975b914e13cc16ab6eab4e19be4aec3729f2bdc303be91d648f17c0273d392a5e11f95c03509372916a0a003c3d01ebd23247d9e7ece935b12635357579f7eb5905d1f42ce51708af95eb1056cd1aeaa7f5fb2e2b1998747ae5eec5654d83723af06ca243e44fbecacdf85df320f04396e3affe0f4c67bc7c896255644634778ec472f8e040bc192027cce8ae978e385aba62e33b3b987d68922f81ac5f508c937ce6e007c351948129685f6945f3b0a5529030035e2c1237b8722045283b2867890875351da7f7a3da7f762c198cd2737640b8c8eae21c34f983a3904fb8c316880578b69746034fdf2b2692a53a4adefc7469895359607cac0e1ae89571755c435a86f326c36f9e87514d62bc0c46e2e553037ab3ac18534d7a5e34c7c04cbfef0a1bd4f244e1bad3419f10dc0912a1e7a82ecce1571781c2f54b163fa02a70239905f3cf4819df092ccb008fab4f99d268ccbbdf2db5e0b93a47800e48c9cac9b6ecb4d90a1401bc7f2ba7d07aef9c705dcf6a6379af8e56a7125f204a8950f107e73e8ee08f69a96e03e64db5f10366519aa5b1e7c9f53ca215ea7be8ab3c39f0eeb9e17beb2cad96ee65967ec4a55bc15b97b3f2a6361f7820ab98591bd72f21f43b8f954c48eeb1b627e291010384e278bb169bd63ad55fea5d2dd2a937504e1f338a1ed3a43063736da5260d1cfc235d238a2872f3dd4f4012849f9f247dd970673bea60a8461974b0d2f9a519b2298e92619f2b864836e5ce07605941c1bc640baf162435219a96929e59b7c3c55bdbb7fc36bcacf580525237cf8ee332c8df06cb378e047fb85523b5141955c4e28196f5d4ea80e1858ac251a0c71136539cf685f6493642afdbf90507f15eca6ae3f26c81d0c57d9640d52ad8286e9c531689a9cf148268a3d0bde867e4a49413f328749a1c52c87f92b5b3e97443080dc75089756292ad05305230c557efd23292d8f4c403c12f568a2d46455b6f46596caa2aebbc2f1597875a1cbe8f2c59d4d52a1a86738d5ea7ea9b77b6563cfdbcb7fa5007d162defefd9362e75d498ddaee9345511944e2b86d26b3b8f366fc01c9768ad24dee4112ba508d7c33b574e1f39e41ccc7c64a940b61436e42aa15a00b1c775104c3cb1cd2c47dd4a8e3747e15b84b7d7deb464d5125a4b1b119d5825757c254d00962d1526074d8442357521b05f29447bd40245d9e2c3678cbf5304e74c7ee71e84729c80c620139c8a39d4110940651b43c8883e220805a7ede493cb56511313e91a249d81d44516110428be560b010b17959dedde36134a24693b03b2002abbe07421718235a340f3b83202a0da268791c071603be2f3b799a8320324a85b9a01b458314c4aae530c02b3046034a9047bb8060280ba26869601c30816aab91cd033d4a227a87ab0a9ce1b4aa2ec1f18445d2027540999dcb8d90bfe74c52a867b2618e10449acb07ea06737ffed425509347bb04616c41a417849b40d23b849e81f466c87a06a15710be1de4a6f520cf50a34ada6e788473dc682eba18730b746de97e0b7a6e69af2ddfdb82de2df4aaa5375dd07b0bbdb470b34bf56ea1e72ddcc0c2fa6129d49eb0e40e16addb6b4670e80e0c9f0004e620c641bc0842aaea6315ee5495ba82a3aaaba926c62a184886fe684f70650cd0d24865b8e21d99276e59493d84e8890c8dcbcb47f9b1aca12c1891003ad36cfd03ad61cf0cb0c200db7a5cd388b9e5d9ff6d8a876cd526b2a6c4b2dbff4b1759860b999465965be6ab9988c964f48739b84f9521a4998bce047d267d8c39bc56af09e01c93bf36c7eb4d3b0816720f7de346bb1dbaa5a3f696b30c640a51daf4b0f6a6d5f9c080996b0b69e13a4d324c5991404388800e52f0662558576e8cadf1d1e3be4db1bce76f8675c598b874ff287dc269eb19e424fd7c2f7d67f6682c5c8ed2f946c7bd7acbd6e79ace2a3a8b5f5f6834cc9163f1b14b7f3d2232347d023d84266f7e668404310f415609497f077dfc6866b375cea39c079da50b062d4d48c95f2acd2eaed3bd0a85d903dff77246823224ed861bcdb9570a7a4708dcabaac5d6cd1dd18c4f7c43af0796a7142518519c53e4d9569912f7a9839aacd0719f15107ee2783b698e169fe85e3d86e5637227acb8ad3be057309a7282a0809d4119d4609cbbb6e063c8d3678eee23201d986221ba2af4611b7ff61b81f6bb05cd9d4d228c830b2c6d2f1d3fb7e8acf5fafa40af6e5ad7b777cd7585fdeacf39765bbf45f2d6e1265cd1727e099d0c5b321e68d7eafcf12701316088b00f1f1783ea848ccf52219aadef31ba1a9bf09da6992ec03bd5d04e8c0b01830cab8cd6b04015ea9e76278fe4ce2b6485392751a459484abef955253a5acccafa9fd5a69116d511aa4565fa08da0d2c625fee1211f18a7a3e8709d867083aeaf86a054dc8fba758724460c4950f24451d0492e4281311710cb1155133af26b32dc1d31a9fc13abec5fdd8e3a2ba91d394fb8f61a1a64f84d5c2eca8452573e1d1fa71b2f97733845541ed7b8d7b09aa04306c7c4f26f38b467930cb589c7cfdd23a53ca5793de71c84e4b000a983ebd3a0e4080b81480a856fcebe23510710637a21bbc407cc5dff090e402404817da6b67a8bdb14745abc57dd48901d255961753a7dfa3c7fa585a601091c31a5170484d5114a7d3b72d34849042b0b1c7400d0f274f44a955615db5578e863d49e3080c063f29c4eb561bde871bcb2449592271f3663051d3ad4bf5a18a57291c4d8f218ea4c2d0e7fd5c653fc4e814d3fb0f2fe286e77d6b6d858c1f659ee95c6f548ce9cd3cf0ba50893e2c9460cbfb23cf2d405d22b88ecdb3a8f2f10e0c2af0f49759049ad08d49f57aec6700cdb7775019c3adf73bda829a45710b04685fe68e1fde9b6bf038305ce8a36f225bcb2005ae3ff67dd78df92261fa6f946095ea1533d9532140df0d397cd883e87d86752d79824279aabd3b609359aea3305fb991277036211d9be4bbfc527e1932fe45944ccafba7fc4a903141dbb79d86bb98bd4da825c4a30899168c6c0beb4578ef9a016169abd235cfb3c463e9b8a182f2ecacaa05afc7795c569ad998cf5f2719ac092215294c5ce47ddf51c7b42c530f73a685b452f6a5e679f99174a84c6b1dfbe61a6d8bd77153d1ba2397acbb3301a9bda33e2481a77df689b455e4e59d2648ef33c29486268cd19906c7dc76974f8a1f27a908d8b4ae557f71eb395a32e94c803e93b23c92d7cff8d96196c743b07fb44c4c5a13a3ed2e43f18954dc4cd595c40e03e592f4b9cce52af0da64302c2470535a7ce607550609587dd853c7a208b72211d402e6abe58a984cb5fce6782b734848c14b6777e3efb76354a3b060949ce2bec29de1974f8f3b92688d2045c580d4b6a2f9fdfe5796ff0b79b806dd24d8dfe829c68cb745cbea489976a3f92a025a14a1c73f9ddcc2a807f8098fc5f45ce9ee4f4dea190f7d09ef3df79b139dcee5f882e89c127bc0024b931b9c7bc37fd3c538762c13bbea5bad9713c8e95d5bf1242b663c2ff1b54500cc78c29ba700431d924493bb1d4d82704424022f5db82fb5134fad17a94c8b27b545181a4b502270a6a32902860f517355b6a44125013f953c3302215fead22afb1930bbaa75f744530ec876f8f1d66ddfb7d6d3fd5c2a0d3c07b038b3a48936a1310e1b6647f192742fef967218486daa372ad4ea99c41617a0be8b18a41d7bbc3ff016ebcfecd535e4570277a767d41a7eb4c763eb041d853fc9cca7ee18e7dbcda819223cfd9b21d3f96066f26b644911fd25ae316bbf89aad441e560be98624d4a0f700d9c4ccb2cc16c555c87f4385afa797d412a8b0051e7754178693dc13cfe6e8d420dd2b5eca8d5bfb5cea0d19b165fe5d905f6deb4fd6e7bb13956a30865df5944763a54f6698a750e1c352b9af8ab5a759b37e28fc0766a0f71073a4903c7773f26c493974b6a5066990e54e11ed78d2e7a862bea49e00d45c3b60884b5eac5a0d0dae595f55b2128d933db3b83a5821508d426fcac3491339a10a49a144ddc5deb87a3eef4e14a8dad75aef0c2f2f07339946e8b5013f0770eb9aa5604ebdc237c82576de92f5775defdaf3cfd07093046d07708dacd0784e45de4e297c268832aeec0a10a931b2bf5409b96356309bf96cee50a9618e73e26a40f1c3701af517b77c7e44538fe271f035787b192b98cde398420500699b3ef9a5f678b48b5da412f3d0c248985650c8d265048000424863953fa7b4c64feb0f1f3be5eb2b8120fe1cc01f6a4c3703a8b2a248ebf6adb8a2210f96e6f919a834f2d4da04e6602d74ba51e46494162987748a58cdc813dde09c453cad9c680f67a7c95376fc826eb26a48dbc14008d5271b7c0d75aca3a58d7b4218652bdab98947e7d7c764a8d6e7eeeb27c8b3d8c63e09728ea58d0a946275f4952a74120b2e81e93b6cb4f254dfb495132ef70784a5d53ac60f61d63388f93cd2e03258b9926c51edaa60634783954f26a6374f45abfaf8f3ac16e5c73795e232533086930ba6d255d98e0f440fc596fb008dc73bc6d69feef6a75dcfa3ca5101545b16322741214b45e5115e8b83c90c16abdcb6a7c08e4ca03ec130b8e7fd0b92b006919549057fcf09a627fee18ad55ed44a448003bcd566e1aed110cec472683bae346db85669b949e062396173fda734f0a777c6c9de54ef15803ddc4c1b10fbd4dabf0904098ca71787b37f60270bca39990afe2188ac707bfbef4b3cfbbafc6274913ceb299b41f14d2cffcad80be3226d21c3d371480e4b0849b88058ffc35dc6e4aff3ac621e61b9a59f786adcef428b72d8dc65bcd3911792448ecc437558d129817d211a0df2c2f2bcf1a4930c74a673250699f70597ec5c2001a7bcf03d3badf141df7ce6fa67c69eaca93ca739d380bb199fc60c10ecb0aa2fcfa2a7b8096e12e692d1c6653253197324ef090c78d1751ad8e1917ac4af16c4fc4550a782638f78215c1ab1bb1023b02a37d8082b186b2ae72d4ea5f41cbaa047fdee79b272eb1017d80e10d27eec979cbd2b64adcdde1ed367c63dd8d58366dfa25d515810bf126cca6eb622bd4b645de8ef1b5b282927d7d446afbf38b3a024291a4e2fa0e243d98148be369ed7521fe51f1a5fec0312a346e6177567ef74197bd7e1e0b89f47a46203d6054cabd99aa2d15a60e53d4d44f0ed66ea84345f462b97fad3c6fa04b1a65b8ed00c8ea205167e539df64aac80e52d71f6c1f94519eb8e186880fc333b98f7210ba5bfd479f4c62eeb78d00052dd49002937c9e869dcc7cc7b566f918ddfc05d891a263400195e2522188c66535030d75015330d4a53fba3a454d0701b5bf222de1132b6e0f1c9010d12654c34adb7cbcda16ce8ba17446bbee7c085174f1d3a2e3157e1dbab1e3d9d60bf4214799b69d7a9d6134bd32c746dc773f2787b3409c8875fc5172eb6a43ea70fd87b36677456cef48974a63558e8a18d0bbbbde372064b2a7b295e7cd4c1dfcec3f0c41d127f1d6204c2a819259295a81c48fc2c8c03f81747d1841fc6a02890a9c885c6ba74ce928410381716f231e3b070861577a534db34926476ac30c69644413304d0714b3d27dd5792df889ccd164f689dbf602d3e3e71861ef902b29477955bb8f30a3726e0f8428e0388bdd299289b0a16f7116d32ec0855dd79889de5f42c2918e0106673dda9722fb0cc3422d4a6b04b733678fdd47d3595e78b466f66f1ede2cbd2f029c435454ba033b8b35b4039f83d3926b7bd8dbb3cc3e2dd60e4721c1628f91fbdab2b46ffc77c8de0add71308f1cbd34119a19587a3d80a27e8c15d4cb052b47c78455b638afcfb53720261ca9bded3635061f57a67940cdc4efb78f2fb140dd6d3f3870a555708ba453ecaa4754bc062516d4519d6f18ec9e18ad2cc9e1a81a85a826a97695b486ad5baab94c2df2b499edd5fda40a3bda81afcd578e34572c88b776f531d67603c2776113e74b62d319dafb7f981befbda8b43708e601ab1b6e1e78e8c3876637c62a8566b4517ee8589d070903e92d0005252fa4b10f4cc1835ef7b6d203a17361cf6bdf42d23fc9aaecf803c4d378f4c8aa36b5083b4d4cf8f3c443459088b112f7db2e2fa6726e00a2bbc0d726240b111cfb8fc0d3918f164be22128c5a96ce6aed55e0126474bb2c3033972ba856a8b685a357b956283022c017074fcdfdeb5c3a2f35ed56041f37ad5422052c6180f78070c26dcdfd57f48e840fc0d277c7f9ca8ea6c1f1d240b4a773d2743b62054a3ec19602b6312821fa3ec336dc23c0928c5266dafc781efdc7104893d2e56c2c4495c31e90b1d3cd04860b0f71141c91af75a3f18be5c6b8e2509bc558df9c3ad7de70fa2b16574cb89aa6362ec116660abb857073210c1fa287db7196bb839812c8e08e7df8c9f8b38bfa7d8f54eff5148005ddfeeacdee51cb10983cd86425aa4014fc250ad3dba1ed9efba4d0bd1dea16e76da4c91a01f2cb80ff0535938eabf00311b0b4b314e67258a1ac1755b792534af7c4c8e8c6131c3674262143e48d8e1a9bb1e403681cbdcfa04e1736e867dc7a2ac43ee4afa822d0fba5237b77691c79497bbabf7f2f1df817e41720fa16058b0f676f6678b6709e81f3b0c5a4b730c7f07e19c34ca37f936879b2c484d750ae9405e5cdc7c7dba18d0292f4154ae529e9a4bb9153ea724de3932ff8b0efdabd1c9fbfc66deff7c6b3e875c0a281ba1fffa988893b1298fa79e64967e7c92a35725215c31b3fc673dc1561760f1df188ec13415e085451f96d4002a25e9b958f52073f291a19d6b2a277b8c3567762df521217d92f559a813606ebf62accfcb480fdd28bf78170473bcf0ac59ec0b61999584d4190fb54f14925b20558ab684d3bbe8d6b6cfa81d01f4419d0b2fe772c2959ccb4f2c84b5c3ca4ed4ea25d93613f9915f6c738c456601a9cf00aaa43cc4639e00baf3c445861a6a2b448131b50949ad0f55ec727b4d80ea4835b719985df6b7b3131311c9a627b0db30b9790f83e5f415cc60572590096c113fda786f9d07bdcc85d5045b72bd12b60d341a565451f75ac92839fa89e16e672cacbce3ed4b30c94136c545d837da1b1dcf6ec222578a51130b3bc018597e7f975bf7d8553111181eab22652f3204d4cdde4570e154bdb3adc7e0b1584260625e51623707ec162c65238efefe260cc3a65658041c1249c95ad8d7bdfefc3fdc661fe60bf04e29caf5ebfa1827214af7a4c9b13dfc3f3e3146a8f15165f252a63578beba52381a3f3b80b583aa7aa20bf525d6bc267c4d17b023fdcb1ee403b97ce8c5d8363a59ea5bcd8d41942bf185505f4a0f57fbc5feaa00520c31864ed81abb0be6c168b22cd8b1ad8a9e252729876aa0a7f195963820ce9845ac484601de7dbe5f36b39280db6c5a798c8cab36e8be346e47449319f679389b1ebb7bd1a7f332911c542153a1e9e2a136297aaad6edf240f67d2bc60dc8b3d8b1f67e00f70e323f31cc1071dd0cbf7bdfcc3d626a2045daaa9b23ae4a5a4fbdf5572732ba959d34bca2780a0d746205c6481c05500dfa0575ec541982db67c61c6deb1c8c019304474733aeb2f6fdae2c0024ecb833158396f6c04634175bfef920b9dcdfe48a87295ec86932932530a37ec232b90f026fac62c3343ed1df40491730296d4cb7d86349175d92ba2cbc1ed9c558d0f1dad683827e3dc20dea28e5362ad0b2982c8fb55c4c89a5340e8b287454ee174da157be488127c79fc9a194bb3c3375cefe72ebabe6d9ccd026f6dc8a1036a83f4b15917001863ba981b88cc1d685ac1ad358fde1818fff1a8c4bf46790bde9773238ae7e02e492294fda474869443fb928b00b4c7534ea2e82a85e968a221b9be055d5c1b7ffda77a2094db07a9c3ada2459ce86dd61c6bcf97e953c57a0f5bf8cd68448080b85b75886dee3631d17cff2e8bdee1f414b2f6e9dcb9d960ba98bc864de326b271ae8f8d509ef293ecf1fbae98ec449f42cde33b8dd29d3be36bfaf15dfb632558dd9df84b75d7bde064a6a8fb82b2b41ce0e8833700785e83935c5d6521f7ed85edd951bbe55f5db3fbb77cded33ce2a075eb84f5a7b02035a1f804627bfa0d6c4bfc7a569cf37a46b3794a3925cedcaa8fff1d785a6466f5274d22b0167232084efa4bba0910aea27e54ba462b18307158a28374709efd9b82cc4815c42137a054fbf4e1892c2630e01b52026a8ca9a58a62201d85e359b17a71595af59c2531c62fa32fa13768d710eee22d76a82fad53a54224d9b0418dc30f8735ae245322e608ce17fa0e50ae63f14272043836fb50b0532ee8780415186fcf7d3b9c96dfc92aa23f976ed3e0172f0984e0421db1374866a8d335b08cccd4dcf2cdc408e26e0c5a6b9b546f5ae7c6851618dcb5517550530646aafa08e5d148685bc6c22df05eea459ea0fd17140ba8d4f92ecb555e4d17a84df07fdfb7561ead27d1169e242e7e5023e623e330e5f509aab64f681b3280abaec0f8cf346bb9fee84bd8a148d2504e8c2cc44dfa27e0ef4ddb667aec7c0e5316b31e694cc093c386b212da6e4f77d2634f1e6684c3d33f23524ce5c943d052d550e6d913b2cc93b8c1ad5a1e91a9c4865ebe82a5ddc393d3f7634d642107284ff8a99eb9302aa3815f8e6cad2c1e32ff7d154e76cd7f07e0695aee57a921ee04042261422a0348c00184a22c567aef1e025b841bd44515932d752139ab8eb739a81b2f0d2404910f40105e54104caebd09b75de2275e8e740ca9e4de1af5fb43b9960098396d86bf0c87360d0f983c42a243508af0a8dd7ee7380a96d078bd611c14ae45664789e36031e09e8fa10ea7a2b4b75aa6880b0a0ef3f9049979aa415cfe2e9be01a3de7a16ac81219ffe42cefdc71498404600ba038be55329212406979e8a2140c4ef95387bf1d20735934ebbb3fd83b97e80d352b7ad04600032ca580e5d7066d8c201ebb6684e1ebf7ae181aedb5e408a9ba53fd0c7817e84fc3dedde8944a6eca548680c10abd0fd80d3f1c71cf4efadf87a1f78dd69d1b2d72a1ca695d8d420a22ad7ab332db3a8f2363d2a88b200518531fbb51a31d6160fe968f04761c382662bbeae0a80762dca55859fc0d92be24a03972ebb003c36b147e0772c39825368398df932555ce8ebe2699749bf963333aa2a31c5f3f24b1cc29866f3bb537403c02f06800791637753f7d847dd9062006dc72bf2b2a7eecf12a4f830a811c0fdbac87d9bc1d24deabfb1aee4bced55423e5a336696a545986111cfe16292fa7525033f4822be34bc1bd9eccf447a93fe8793b85df8a0b96a75380ce0134cd5715d626e9707e87716e5a10b22bc6c67c5c391ac5c1b579da6bf9b97afec3d5ba72ff5beca8901b8ff263082510cf280c04ea5721a0b24d9f0043566b7e6371289142f736673e3fa32109e5dce22330dad8adc22c8256c2eda1863bbcca9cf28fb10d7dfc8dc2de5cad69faafe6f9d1bde820a67942a432e472df971024ebb5a1208129d7eca19102132b95d1b36d63b6bc25c41242e194271e42cf2e23743b70bf2238e3be624021e219946055e2d9e428f5cd088c60adb142be71bda7e723e38bc0b2d91b1d1a6c75f0fbb07e6f91a95eedd4a6d3d174e3b626162b23e273f26ef75eaf850c743722e3ac2f9c7912f8729c1ced8305e9b6ca05258b1be79c367422ce625336e7075231d69b67709780d5592ab933968a6b313a821144f7154abc613e34c4be2089bf47ef934486b76dd92064fbb344bd9917cf3eb86e773ad6e31427d9fd053986113e0dc035018396f57aadb088dba82856d4f991c44751a9313672b5ac8286055908104486d51c6230b89735a90ffb048ce328455e327846d9f0645cbba63b60d4ecef808e713e30b7dbf065b4117c9e16b15df0a12c67162361540b2959cf49a8a693f7fcf3ab2699f719a0b23480b13187862030a034bfc6431a09b97ca5a628940831060c3d874e92afb55da4dc84c42faef3470c49b4c37a50b8324c5767487242f48d5b522196ecba8968e74c7eb81a410e701195ae63ef64ca032340489553232d6c46ed930be0dee9021a54feb5a25b31f3959cad163e44f19d9053ca55230a3a31f4007fcf0f7c845d3f6446b91681d82821f4f59da22f9973295ddd232a546c5b27ed980e716657d6d5d5adf1d4705bf5ae65441fde59748d6f1b24e39ac28af8860f888972bdb535b94d52a12a1746cb3f4f124e369475b74c1025ee284a70c3640b0a490033c0c3c0c3c0c3c0c3c8cfeffd96f0d6c736666422c7c7d165bda2d695370f943fe3bec3bc0bef75bdb9a6dd60cb0eff30d610ce30cd90c9c86934c3a497070830d37d670430d67eca8be9c735fc3438c1b69683c2f65b68c0f59951b683856e6a2a4f3fc318e2337ce80a956dd66884c31d11111911e648871c30c98ada8a7182c237da30c2739e253a8caf13cf864488c2e9f19b3b645178d1ece13b83186a372888dd9c4bd92a3819e91801b6270526b73fcd6f4a63d22226206193cccf01e352083c71961dc08831bda2ed8868ac9f191c20d30a49dd9a49293e4c6179cd1246dab46f65c921b5e48c6e32d2749f3e6d0dcc00c347070a30b49a9538a5339cf85426fcceff92df866bf05c4439b64e3d923dbd642b1b35666b8ac93acce029ff14284458c05f2a2a6748b26bd09ee150c1f62721db5647a2b7c952777ce4cfcac55a82a34c6d4d13562512a982fc58b39d979ecf01496ea106e925c62569452d8cce737a6c54481dd9db6b12ba150caf8acd184d9685e790239117f39ba7482511eb7e915324925d4044ee2f63c7ba794fb3301cd246f94b0d449fc257482fd687830493ca3843da96bfda7d5ae9424acf5a615e4c6d6e41c09ad9ccae57dca75921fe1ca0b621eb62e7a8e1aa1f2cedb259aae39648a50e5eb94e52fb33c2211f834e930a9e3f3e921141a834927058b19dd44086e7ad8ac39550e9b4a82a059a8132a4f9a981cdd0082a93fae3ce6d0a8f50f3213bfbebcfaf772c307cd499355e2692fa83a317c4ef9a246971754f6d74cc99f375c6e17a7bef41d6388937b4d17eeb9896d92543a39492e8c1aadb7fa2c49f14237b0810be3e54668f9e8e68f6a60e31655b04ede517a5b58fa1eaf57d7dfb3d7c29821ecca721e59d76981ca8732b1721a4d179f0566e7eb31a6549909cbe27cb1a2db7c32867f6351eec6b9f636299eecc2e294275759d2f5156fa7a948cc060daaba0213e3dec79cb7dd8eb6a2cd24262997a01725a4acd8f7aec4a07163e67e5691946f7767a83423a52a184b526fd2d95ad549056af19584d4111587ca73314aa6b214c353342351329dae347f8a29b0f7973bcbe0bb1e2bc5d14a38130b1a290ea361a9bd4a2dc98e823f0d3b1537bfc7608982eccc2485b7b89c26a1b066cf24d52ee17fb3018acf5ace6d7f4d43fe9fd06e5abe838b4673df136711ad9417af3e83df89cccaeef2324706b9396138d1b29d983d9b48befe2bf73e2f9a471386744c5ae96efee4c9c4294dfc0cb3f251390713689ccb569a4b4e8fce250e5126e6b690b1845ba27f69b4f3c96925b8904f9f171e277728c1652acfc944cbb20f2761ecd7245179f3550a25c1c68a696965f1729a44c2b4f777627c0b12564952db8939aa7ff6116a3a4953d838ea73910d479c954d10ddba7c26c937a2774b5a53314ae53f233db0c18864cda95cd386edfb7e11ac5f88b812919cca1551fbb86593f174b2c58958cdab32c98731c1438413ed31a524b565d7e021f411cb1d215e9b973184fffb52a239eda3650b917ffeb89c5c7efa12a2d87f2656328bd39c06a19a94aa32b296e40d05f19dfc31a7a6c6ce8a06a2fca94f3a840c08eba285756b9293bfc6c61fd09cc6edc4122ca6a67860c30f5f09aa95d75dbb84ba0f87fafc6a693bf467b40323003fb0c1873be5e553a4963c2a96c1c61e8c3966ccf2cd269cd62fe8218619688071d210110100196ce821f15d4c6cf1380ffe855e8e260613673b7830cd9a5d58f1b849c8dca1280b99ae3ee7c49dd881b1ec5962337606b90e7c8e5e27d649a1032686a6247eb1391cbccb726e2387b6f3ae71a0f255ca93ad820397d1e6572fac86cc1bfab4cf8f914ced14d9403900c60d5c031de861c30d26e9bd720a96f3f816061b6d48ede726e264304640051b6c30bc598ea6d0ca262f086cace14c29e4b4f39d5eff233c4a60430dee9d4931c98521811d67748f340670860e60470e6ca4e1b0d33977185fcd1845e38c1e62a0c0061a4c2f679ae93038008604c018c10e111111d83883973fd24cc8194f1a9c830d3378177cbb84d6f5bd1f0c32be07060060061b6538264bad396a830c75eb9e5892c5233dc418c3c618b0f960f529165c32c38618aeac259126a6c76e450736c2409a4cc647d9d7ba0c18bee9d9502b711e4b1b5fa062c6e385e8d38f1ac18617d04b9e16c7ff6b738b051b5da8437da54d98ba666e830b6a8efe3c133e183b580c2cd8d842219ad43d477c3f75d886168a9c12543b27f9f52c36b240dac57f0436b090a69ac497877f48bf31a0041b5740cf3bedd54c36aca048d97d66ddca259a23222255f883e66cd2e6b47a3115f213ed9c4938317cb045446c4ca120264cc60f9159624ba18dab99bc33c78879a3709ace7d7d694e492c212858ab5dffe15293f6474f3044de939d5082891e744261e5121fc2734fbc8c20e0002bb0d1842c6bab4e968f13650f1b4c28a590414343497b4d3c646006191fc6ab6fe0053696b0fa07975593226b321b4af02cb34959c2fc6eea2474afe1f2dc746c6d6d04033690c07bb494d5b737dce223d052628466a9722fd18611ba29394ac8681701a9df364fe3fa151e11aabb3c617762e67f8690b4791fe3ee6d65ffd81082ffd11e59ea9a5aed20d421f384ef902f315c40d8d3bb33d6e4077bc4a5c5d2d4860f8c0cadf169366638b317899537a7b79483a618f3c2183ca69017aab136b98bb29d9d94edd2b39aa38b73ce8f51625fe61c7372e1ab6a0ccbf135fa292eac68557e5245d3247ab748fd4fce9d4eda160919913183645ace572d9a8f1e63c8097a71192d143f39d3e54ad3f8cc62ed90f9ac534dd246b23064ce5c4d39fcfd846361a5daeb321137f95358201e6def3b7bf564f68a7abab3c798c2b65468d33883478f1aae40f2544fe4cba470a222a8d10acc92458a4caa9d891ca8c18a5ea6c378e6fb25e9acc2b8a1d1066aa8e2b04e6995b3b07af5013552e16e4ab51427a949928c0aea3f869b7d1273eaf914c95e75b25e1fbf6a53ec39bf2a850e961ece527ca37de973877567470ae3652dc4726cfc8c82924bcbf39c186a4a51f4f315f229ab118aaa4c2f35a6d02e92d6000515aaa3db4ecddac654a0c627e8f0d729564b8eb5bc27ca9edf449d5fd71ce39d287a9eaac8d841664e5423665e82a45be77813643633c97b0dbe1b4df84165d373bb4e5b4c26d0bddb601f33a7ac0926ea4fab6fe1766bcc72892c5a2fac97ecf1da59a20afe5172cb4a28cb6a54e2f4312669d593cf52da516a50a2c62424716c5e8fe92b2f318e1ca811898284086a3ca201351c51a31135185163113514512311ef274f71b26ea8120b1110a871881a86a8e47c563a1d1a25c385a072ce717f0b617a2b216a4ff5d1982419846ba1b22739f7dce7ab210873e58d580c4db3dd6a04828b32df315efe4d3f20b84cb9d75366653af50f78ca7c5672c1fb4be387e4a8f2ea777934e66ca0461fe80d0da661bc3c0fa3026768086af0812b0fef481835f6907ad69c98911b3a873d6ae881cde1a3ed2d65d6581eae92fa91cf18ab756750030f54fc5bc9f6e026a47760bec43a39e5c668678777ada4b9387999af53072ad2d544838fa84d5f830e9c1cce2e670935b79f391035152c474bf66fe470ccc9bf10337162bb2335e250dac6884fcdee67291c0eab3d2dea26faf6e835de908426cd2f96aba15237f06e5ad973fee4e09715d4688319d723a34a960d6a92a3ff5f722693091935d6b027e9f583ce56becbe151430dc6eb560ba2992e73a7a1382577650bee13e1d640031a523daff4ae71062b46fa47b108cf1765a0861992cc936e53a8d428836dc2a7df98c470730b6a9081bfe42d1e619663d94344240c0814200205d831030ad4184362bcd67557ce6ba5170535c4604ef2b129f77d564dc2c09c1c3a3e2e31caa80106c57eeff237c5a6b879a0e167f4a8f105b43e9d9067ad5b925e306f4a5257a954e74cbbe0474d55f8ff5c6a9a1111112e2447599ad1d73c797e8d2d5caa61f3627acbc9ec8888c80b6a6881f3eb9c378a75125e1b1111f11a5958b7e4bf916f2d9b0535b0c0985aea90f5982a795738c7ebf89b33a627e435ac6056c7296b9bf24ba6d6c0cfa802153977929cd92a7b3c2222d2830a6cb0fffc5c6e5f77528318b08f6c8d291c326b3e4a2ed4748331ca28a38614ecebcb99c4980abad28888c81935a270de8af76737f132ac1117d48082dea599d28596b8797c82613c87f2983d69a88b132c31ef5ce7d49a9024c5d793b7f4395aaac1844b12534e4ee2e9a87796d0811a4a28fe5c4e2bda193e66a02122128688c80dcc18c18e326a24c14d1f639d942c55fdb8851a48c0dc2e95e696182ca4358e6030ddea9ced3602995ce46f5eda6a2f42b3677238f1b3174b899090fe9ac24c365f7f0856e85f4927670d21642359b2616ccddcac1184539ef9be3b39ba8e59030879cc39c72cc90a1a3f357e80c7c9f331f237a6dca9e183eb4a4cbd79e34a74a7176fb27031a78c46fbb906158beb8888c80dc628a30c0848e0c770118021811d00f8028e5064b13d76e79824bf2113e000857d52744a5ea1cbc73252011c9f387aecd22862591632383cd16a489353cbe4e77c1c9de03cce6dd4ef2484257bf0e01e62f4000727f028bbf627e94996f98888c80e1ee0d8442a6f9fdd3a2be3048d1eae89624e6bc2bdbfb5fe0232c6d871031c99b0ece27adcfafe09107060c28a162e7dfadc2bbcc4251b1ab6498c259252686f59b838ee6e0d70542279bdff75f3628852d14043d1f8010e4a9849ce2689a9ee52dc731284a855cef57db6990a030e497862fcb091196e427d2241ffc7f41374839e6c818439e5f38c3956a395f7082a64a82489b1a488ca1c51250fab2ab36f27a70fc0d1886d367df69c231c8cd04c6ef137e93cd423347a380dbc053816814311d688afefbc87329b87802311f995d8c9679d63d42822a8f793c4bc5358f7688715701ce25bcb247a3049be8c0a8721281dfdb69452a624e1c1034721285775d18c5e7d0b920107211ecf279b32cddef21c442649953db2693dab13061c82d0b3a6acb97ab6f09c0dbc7b5c014720d83ff9f753888b7f1f109d859fff598cd0d5ffb0e7ca9fafe4ec279eb81f160d99e26be79f5abb0f6f48f1b0b874291bf3c1bfb2f2d4ea91cf770fba7946c9bbb75762ab87e470d2fa76d0d03b6a1ee80e737a193c201d1f673a9c54b1a27738c55c66957eb96cdac18ed1628abce5552bebf05accb77b8d39aa3b7478d424d25ffb33a973b077cf3d8d778e998c1ccc24c88e677998682a0e7afd8995c4a8752ec1e10e17fa4e0c9ddd2d19022be07803bdf9aa7accd3059f4670b841f1ef6072bc0a1e7eefb8011a66f81070b4814e972ae69e14fa4b3e80830d4959313eb6895943724aaff251e233c4d26390c13cce1083070e35a81b3eea99c839c091062bf86636cbe9346f83062e79c5797f57d20a719ca1b1ecf1c914bc816b000638cc80096a1399dd92c9255e86357bf48f88577d0b93e1ea92843ad164c7f05b4d46af188fbb1c315052e80f6b9937598b61c0e46ca91d523074de9b5625d6dce4e017d697fcbd582985b2bd503e33dfd4a5a9327b5dd0bbaf524a7eb9ad738113de931c7da2c961138e2de0b13e89490ecd539d16d420de9abe4d0ccd3e0b7f8ab94d1e442c209b15734a9dd174252e861923b802ee7a5953c6486b77aca05f746789616a7e4223c0510533e5eba89f73b05c1b1534a94b31796847a6e056ce254ff8a9011c52c8ff935427487dee2f0a798f5c7f9486869da1c0af9f84a639e1762d4ff824333e2e6d4b4bc80662bc138a213f77274173dff22614a35679c9bf266e7c8495457030c1e8f5e93ee691d13e3d06193c2a8063096713ea3c9846e697bc128e1f2fcd669784523264b6123a5b5ccf8808c018c10e345c0468f8198903096b9d85d49dece8e911de24d7c61df53bc932cee821060f0ae03002aff26e62fa245cc87144442402388ab06693123c5c980857ce55fc49f8e4780dc03184533661db6f2d21a4a1da2bdc67aa20fa48181bd88123086a18cd486d5b8d1b03a171dbb8d5fc70fca024c7f58b62c92ae383c307a6918bf59da47b51d4ced71b4ecc94cb79518a5ed51dfa49d013fad8c5ef25c9a75eaed01f0f33c8e0e13dc4186303617ce82229b2ad93a8d2063e72c19a49d2ffa73111f1031768eed90fad7f62cec04544c298010538f0710b3fe394ae8e6aecd7b6286bbab3665b923dacb5484386ae950c596bcf093e6891ba2721cebbdcf6c22321f898c59693949b9563fe3c996451646955923af6975be62316cce809a19939b6cda7147cc0c2ed68494f4c5dc37cea15485d7c695d8ead9f056120e0002af870c5472b3e58f1b18a52c5472a3e50d1818f8f8f8f8f0f517c8442b18bb69ef737bd06c0193e40f1f1890f4f7c74c2a4da3af2b7c1c107274c1f3e495b7769294951099a8c0edce063134963aadfef5d92f8ba264e3f1f6375d6ba2dd94c249ead55a5a5e6c51426febcf5127dc9f91def0dec40230d0e44600210f8b044a27a49b7feeb69c9e3dcc30330f8a8c4962757f29ce61f2e4f0953d64bb2b58a68457d838f491c67772c6cce2551b4761bbfff586573240e26074d49452f5e5221411cf878c487234a977a1737261a7c34c2bc9b2441a3ce6c7f83810f46d85a776342c77c2ce2934a2e8dfc56f0a108b4a478697e59d2696b828f44ac490a6d927f8a022222a2f840c4e973a88a699493e9fde310cf67f38c152e5ca3820f4324e629678aed50b1bd10e97b6b9974b2c64e88fca4247659f46310fbe6d7f1cbf910c45252a998e8392322221f8130a632b4b289fac807205cb1944afdd31d3ec66a173efe50888b41eb4ace0f95e87b73e1a40f77550adeb995ab42fde043d2ff68b8d69c2d573f2222e2848f3d14276def4295e8010ff7e2f9b3cc43c69af09187d45fb636cac92647ec3d94f08187245d0b514d8f96d11b111121c3c71d32cb9eb93d79b59c26860f3ba8c962c3e7eabff0510735785a99ba28f0840f3a64e29b6736a76c496ce03cbcf031076ec6240f3fc9528f49173ee4509d27f162b271f96c322222d2230e7c96fcb952c5d4361c884f2fc1c5e5e2e50663380dde80eafdaea6ea2475b0b5f0e1863547567d3de30a1f6da0d25fae6dfe94132a56f8608341bdec5bd2ea67e21111918f3558394c95942b53f6b48da8c1bcc8378d155773ca50e1230d8ffa64cce17c3c558506e773f649a9e211119133245b4aadb9dd53afc1297c9841d94e9b5993643d212c8329ad5d9d8d6af63ba5f041066cedd3bcfebc273939222232067dbcdb5643878e7be0430ca53569deea62da4b9b31563fc2b0fd6d7d270b8361cb13b3c9d9baa6317fe1c30b89c78d973dc58ed1162d7c74a16412a9d1f3e4bda411119130ecd200e3003b6440861915d8c00e4f630c2d410f3eb8b05bca6e53a1543e25158c31c6500900000a1f5bd8a763ca49ce2589153a00ccf0a185e285a59cf2b9eb72c9c256b926fa5ac9561611e9c10716b2cad98b36efd173c60317d8e1ec21e831c41891c0f60e1c7c5c01cfa83a9a6dfcf7c35af8b082b15eaa0413357f8cffa30ac7bfcc485dcf6dd65121d94e8cb3b393313ea690f85d25c7ce69d7567e4861cdd953483dbf0ad13ea250a6ce7632bd9557c7910f28187ba329ab793cafed0984c4a4878e983c4bf770346c40011191fd7042d29eafd6c6e9a309c9f92451d5941ac107139c122a6ef44ebef7744444c4051f4b786330b3c8122b451e3dc47881af8848182a82157c28e112f684191793d2d292d08915b56ff1a249972ae37b7c20e1e30896984ab8ec13e67de3462888ccb9baa5cdb9b908c9b5a624d9a9aee77e10a1d02217bed2a7d05ef918c2ad131bcd2431eef712a3871837c081ea8710fcf458bb97f171c40f027ba27e74d44028598e596e3c62c3457fb09f49a866ccf9f081498aa1b159377fe77bd18c95fc29e60d7135e1052f95b3fdde929cdbb28b3249398729f1c4eef97461ae24b9621f638e55e52259edcc839d64f92a092edc18cdd7e4b112b30985e0c62d9a0a2f57e1ae525ff003376c611a194995f00f2e8f0adca8055f953ba64de9275f4a8b4cba0eaf11df8c31376691a7bcfb7919638ae5caa2b9a89e6aeb772d873730038d1b98318206dc88459f9207dbef9357241b81c5db1a9e53acb5f013bcf18a375da64c13ad7257f2862bf6fb1bcf9bc3a574d2ad288c5b682ccbb9819a61865ae0062b6eac826ea882cd34399f6c91274c375251a8b8718a1ba6b8518a1ba4b8318a1ba2f84d8c95ecf7cfe29f66a071c68d50dc00c58d4f645359ec32c7b0682609d010a387183dd2e0e17b03958188880c5c06373cc1fddec484ed6d9c75a313540e9943e6eeef5eec0627a8bf107f7f673da36d224de75db1a967412418dcd00451e262a2a69cc5f7cd047672fab4924f8a33154c1c7316779133499204ed1289b934464a6693e5d40b6e5842f5d76c8b92cdf97c8f1b9520c326e9b374c8381b8f718312bff94962caf172923c3b09be93e67c75b468894ae2927c2ec5ed478c1b9128e8d4c7eddc2cb73a24548d9b63b3de256545066c0316dc78441df3ec2deaf632b55cb8e108334c367daef294218f18e246230a33e129f5ab8ef93f222202061a66f808a3a11c0063870444440050881b8c3886896d8298bfcbf78b3026fdd451a1729cf276dc5084316357e819f93c7a26e2bfcbd4ee1e44ece1735d8c0c2b79d28d436cd6d2992ddd0eb861886f2c4fec0869eb5472a3101db8410811dc180461e131b827392e7a4507370451ac747f13fe07e2aa8c31bdd2972766401475174bfa0f9ba8ba45a5cc5a31fd40897f39c5ecf2bb30fb605e98895a2749954cc307a7ca72785c3c1b0bf7707dfc9c277b8eb7bf1e6abbac944bda97fc92074d5eec844c73df68c1437286c5b1f4b2ebfaee70ccd9a53f16539a3c3bd49f54bb34568755b3729c59fd9fc8e880e7542b2798e8bf597fb83107cb829ea5a40cd288808808036ec8a1fa5042c5178f39dc09060f6ec481f593b3d8afef884932841b7030c5b8b9a3e6bfcf25d1b8f186a27afc582646df245e2c70c30d96147f2f8916b342b61cdc68c3219fddb6b49db45e961a269c6723fe6b32c97f9263095cd4facd1663d6a92b814d3a57db5939c97e27c14cb2646f25bb34e722c1cf93aa5139c53dca235c9a69f6222a67bb8d708ea48475ff7fb6a70875d4dc5b92a598ae2644b8f235546eb27919c90237f0182060063986506ada7d0b5aa767162124f4470fd9a814b1738e20946fa2acf746683c071028c1a4acd9d2ca5a6c73fce098d7444b69a3f76c9cc3076a893b51615c62e6a48c905eb01dd63b26fb68739717a9ff5c0955d2c951ad5d202f221d3a6736db32821c84e8a24d1b2f575db268ff73519a855a6c13dbf3d76384e0a2eb922a670db29aeb728b234c63fcf3524f375b6c279d66b070274aa8b5c02445f5f5e3eefe8716583a8da14eb35e4a2621b32827df4dc914ea1059f4b95a5eed37750aa261030a0ce00cdde121b1b867ba4f3e8b715b622f08818572499afbce6c4444c4ce087985e1aaf215ad6bea86b822c9a2c4874acd15990f810b425ae10731f798a3c27a8b6584b0c2f8a994cb19d36a31f00dec10c38c11a0206415b50956495651ed93ee105518bb333a8f56305d79c518630cfd1e6218202415c5498266cf7ef2e6d98110820a73a8fa30318a21a73854ce9892a4976bfd13628af2b526d9f67753c95f8ac49831c5f1139334274f8a043169723a668e1dfd28f6aa3cba298536cdb4284a825db29cf5b43bd4a1385788144de905451e5feed3937a5792fcc46241d34d12ae849f3d61a7dccb7d3993584a27f6986525593cc1e63a9c204ecaa3d555fd7ddf262a4b6572f8c99a4e364dfcaf9656ce4399407f4a47f3fd98a0ddb3252fee9738c72445a6bdd812e5f4f94dbbdf143295f0c296b837f35222cdbb7d2dc149a4a31a4d56bb54d2894a82d5923668cafda86724f45b8b31cc66274b02892cab369f4d59fbc53ca25841adf6c32e44ec08f3c28929c99ed664c446fc2f27a5fdaa5057d28ce83c5e972021d7a6dd22f09ba8a4e9351fb9224cd19663a92623cd4464a9af274e5888b07266e598315a25a39043145fe3e7d42498a7931d8109420c5130a162f4bfcbd139ad81f710110929846f42654997b6def43ccc2083470dd40c1e68f80b420871c63cd3dd1ffe31cf41589ee4b4d99a9d9ea920be4c393a83f4bd6719882fd3097b7622d33302a2f874a96eb3fa45edfce194b489ce4e0d9549fcd0eb9c6c9ae3673afb800693c73a6aaccc2485478fe7218333b4063cc840a301217ca84e0ccbbe7e2d295a42f6a02529a7709206bf761903217a08c94312aee2f1c9e2f5cc2178f8ffc295bcf93364120eb94331a7641b221753fd6b07bc5cff564d4e9e2f1652074b363767f8e8c80442e8b067afe887bd11fd929039d4d95265ec2bef3c1b2207638a25748c36ade2d1080f33d028830c332c240e49f2c729c9f7bc20040e216f087143481b42d810b2061241881a42d21082869033849821a40c2164081943881842c25018ed64fed983c5cc970f42c0c0c6a89df6541e847c819e8f71a3263a09b78778a171cbfa1553aa46268d902e68a146fd4ffcbf0c1e1442b8e09ac7d6a9c7d83f932d581535d27f629547c35f4058173800183bca1063e48c32c41839c30c32789491062942b4e0d59698e4b82e21da93855249a3d93a7db2e0d11a8460e1d4f1da57c399b7445808b9426752f12b6dc57ad2af106205c3d7de215560cd33ce84b060e9392154a832c64d4e3966da95902918f3bc2a5db89ecab41416af29c9f1eab24b45e196f74e11cf0981426762abd45ede7c99843ca1a49f71d13c4ea04bb8734f36b96392214d20f49344794939410813fa2454f276dd03214bf0af44778f9d1e234349085102b3179e5bd3f635789010928492fcde26d5d42989750812ce976a9289267a51634f0839c2aa957386ce88fb1d8dc0e61293949d4ceab41f13428a40e854a61869f9e4fe4288f069746e4d59637cea42865086ef0fd77943de522d8408a1749ef3477764ba18be4248108c9e9ffb4bb17a3f0c0182f726f5f13bb56b0ea310f20343c655942bc909213e704d9224f132dcbd78c3c6e8f9f12db7dbbcd0a2a592439cdf670eefe2944f90ab98d515f4d5c59ec3bbe4d7623c3573619a1393b6c50617e5fd5b8f29a79ca9e02d08d5b98cb3d9c214ee6272df5df6a71699689b1d799fb631b438e63fcffa2ff6876816078dab31da4f3b009105d977c276f0f8acf8c642bfcd39c1e46214cdc0029ffe9e8eb05e71b2bca59159319f43ae384cd644378d5b71fa652fab8a6a3d2507006145d69d9aa2be2c849f8c888810c82aae4c3271b2a4e409e78888c8024054e178ec0b19766da36223222220a9a0b6b209b7a6a3e3d91111910404157df75656a62b0c33bc00720ac3fa252d41473ac4322222020510535897bf35c58fd1e631a5c8a41f0bb2213c4c3d2364d48014dfa7fe459db7e86125808ca278d9f5a2eab9ece820a278fa841232a4f4d43120838c111e63b41820a1282fc5b7b4794040714caa945c52ef72e98888c812403ec1991c936b478609209e68b6bd2b532f860a950724308286182638638c3120004609c000c3699004904e5c9e279f2b7d4e1467ebd244dc6b184f08209b20d72aff2f463b00a209d63c4eb749499236320a8064e2f7ce18b33e3500c1449b399c9cc2a5cdb69d18805ce272d3b81dd7b93a05c412bcbc5666e47bb68c81542231675ec8ff50e27c9344ad4d79b2e44126612cf152aed18d1b671049644133770a7e25cb91c8a2251993c635d43f2390483f578698f0e72749a1018f057984f9242f39d72410472c65ef5675517354704444e40c90468030e25c25e55495d7983b5700b208b36b2f7af45482bd94021045103e27544a931cf3921111112ec30c148024628f3f490aae969be7c4c778c10bc8400311fa852df93ac696cec940410ee1b65ab49597d34aa521aa6439279c9d9444c9a08007400a71cc9814eca73b4e2709e1985426877193416cd37d26885ee5340bc2141d5ca67366e60e8c1280a10111949146fb044444ca48a3bd8f001208c37e3a59f42be564d9111191040410775229efafd24f22833020b063474360077b09c6184365200211911d3500f94325879ec96dd8ecbdd3280303679471c60340fcb085933d8d0c194f991f80f4e19c313e254d49f8f0e692ff2cfb867c5c3c00d903daf1493a46ad9815d2035d92a0edd625855b4a0f903cb4954912bcb6df44bf81008207c33c85f4ff6566bbcee000c81dcc6ef7a37129881dcc9f9294a24d7a0f679900481dacafeaadf4551a2074a0c29ebcb9ef39c99980cc41cd5bd9c424758e00220790383096f527fe8649f94f4000020793b829e8cbf4a55f672402206f38524c4cb1f677c32d7682c9b9538e1a7b1bcaf92e6359a61c35b66c783edfeae45b1e6fd7d0eff94a84a8f897aa86538ee9529849e99e4c1a2893226c665a3f8d865daa64dd58f769f367206be5666773dcb816331cd44b3833cb293f4919faecbf933a49121d3a30ba0ce5403b8f5605081932f7130783023b40c680e7bd5cee9c2c4ff58a864e6007199f03103194a7d2e764253ea2009030b05623ab1a9617931c3078a295642e77d45cf2480f902f24e5d60921d22a254400f14251d974fef783df6790d105c73f768fbcc68e8dc3a0001240b89067b20af31355191d02c81692428756cd3a796b193cce104344248c335c043e8618657c2009205ad0837667df2c39949a3c01240b091a4afd743d786674461a3400c182eaf916fc3b49b7538d8888f419629c818103902bec29e542b42322222056b84ad34d65bb9c0052057e27dfb5a27ba5f01840a8a057492a11edd3379e29fc5f9233ee29a6ff060d2052f0c4677b263eb57929069028247e4e27ae87e51eaf0c20504836294df454eb17409e50d44bf9c7243b3729b90510276c9255d6a05fa779ab262478c79bb87fd9bd3a081312da4fbab7925f8266e24d746e680a204ad8dcbb4e36972af56c1238cf132d5a53d55945829ffe3a7db5349ce68f7058d424e595beadd228003102de9e264798bd6b7e4560bb369c943faa460b25018408d998c9d944b520016408e67fb84fb15731f734c650306ee01a10c22a6b25c9e9e3c6ecf12a8004a1e859498a219300c14cd14bf790eb989214407ef095682ee37d9599222880f860bbcdb31f2e73be24d7041cbd28fb7d7697248ac619626c000c24e0e0c59d7fd3ae2eea07cd4776416ddaca4d39c98935c700872ecaefde33e5b3ee9e3438728186b094de5c4d70e0e2f64f1fbcbba473d1cfb8c57e2d1e9df27f4e1e2a386c81a316386861cad8d3dc6552ca4f47ce9845bec9f266ccc38c0571c8c298427ee5c6b4bdd48c8888840106020eb023042ec0118b37a5f4d21ebc7a7316c0010bb3848b931d3e98e61811e07885aa5eaf59ee37ab3cce50c3e18a3a6e868b0e91e16885d7be7166a3cdca89858315e8e6b8962ea6e16cb303c72a0c2666f8c7f0335451854d19324a12c37652b1a6bc39e73fc537a9232022b23850519edcef70278e53f4d61f2bfff352c925e03045294df2b41c4319dcc00c344480a31475ac6bbc3e8df0f73c8d19f020a345443e8083145c8da69832b84c650248c0310a1ca258eb4c0287b82232eec63444b7155c535f5908bfe38396e7ebae4d08d73f668b315dca8e0ec2bdf06539e4a794a011449d56c5b74d9e1e2b09c41ffe92d29b9761424028e6b99369cabfb47fd8e47a7771adf881bd9912a3cdd707e3735a4d194c25bde3833796d4a49031eee76c0f9eace6b2f81a3dd5450f47ed26cb49cc1be3b23c7c8107e6a7a292bded797e0722a5e7d3983cb71d3b38e3b177d3a4d1acaa0e98e5a6b31ce917aed1a150b97c6cdace3c3587cd4283c51c911c2a0e5fc0e124c99f576f1aab63e78b37f4d22e9e43423a7df3851b12cb3d6d5892c3c6956da83ba7942fc52c491a1b8e15acaacba2087cb18682d7e8ab5878eb90d5806735696d3d5685da2bf0451a4abdb6255f92d4706f025fa0214143f23756d20eaf8db060042ad8f1c5190c6d6d33d7cdf06c979c3973ccb4b12ec3e9d7538f86ba50b264288f6bfc942e6533293c067d75b6737f2b86d383e8f54669bb9886a110e9cb97a1764d0ac1707eddfb7492f426f7f9852ce3c3426c144db9507de185c3b60713534a8726c92ea01bc3eb72c7d4101e2e74f2ce59ce6ab65038a13a2cad85e3a62b1b9fb3601efb7867d7b1a5835828f9687ed6095e61f7d1378d8e31bd255630e584ad5462794c0cf128c21755382bbaca429d5478a5dafd728e53e82c7d3c374b46d07033a4508e7ea95b6b153dcb0bf8220afc86b6a4e3175058af52d0f5ac39d94786192f4863063e01f612888850e08b27184cb3cba7b0bc16430c7ce104e327c2ac63b427497e8433f04513ca1cb3225996ff9f8409099ee430192cbb5f942af0c51248094f2787b74a29cd4a48b2ec9ee2654e7ff193c01749a87295ecd997c9ab952f9080868a1995bdd6723447a8fa2d2c735f3c396e84c25d4c4b62dec7095e111c95a992daabc35b555f1081ead668b22773174c6a0825042b27e347fd7c29e54ff04510be00c2a5b3279b7c7b05bef84103bef0c1c9e7379fd426eb7b7aa183176e28cf39ddcaa48e494630a06317a48be4ec65269fe7ed980b1db8d0710b1db6306f32df3a37775d92910ae8a8850e5ae898451313ab515d31856a75c8e2fc9ddbf12c2e4a28d1858e58e880c57711258cad4fc78d5f518e94d90d1be38a9378d94ef24c4fe992b422313a5e98e88f929d0e5670b2eb66ebbc0bc0073a565186faca32516642575677660168850e55d81aa327ee7767ab3c1506cb9a523fb312961243072aea5ceec143955c39d8a770c584bee9b6accea42956cf50d2d85466b074299e3bd93095f27fc91952d091911aa5736a27d4310aabfde25bacffb7ccd2210a2542b3737a9189927b1da130b3c2c55e4c31f53ca20314755cacef125adfc4cd27f40b8d19ff5fd2848aebf084965394eb97f50eb97722297dbc9444d50d3d594e98c9c62cc9d1d2b189a4949a848b5bfb8f5c8c317810408726fe6b9f6f5db14e2d19e141061a3c3c033a32614e52161e080083cc8080060eb0c30662bcfb182b4608ced00b84511506d1017600e0153a309175bc4e965bf6a4685f02cd6ffff16c2434792ce159c6f58cfabebd2b41c9c84f7c8ea1442dea6d26ff244a265d093926287448e26c276593c5a4cc5c361a6978c0013a22a195c9eff587ee203624eaac2113918e479c73d0928299580f74382277f564299c98638b8d3864521333ca54d45cea400723f6506f3127e11b111189808e459819bbd393e05e3f9d11e6a143119a5696886d2601119112e848840e44a8d933a2ba26041c6007e93884b5b9b12db5a95a121f111179c10e19f0097c0700b4a0c31054cacf69635d583a5f472192e3bf4eaa3f87a08310fa8e5d2e21ec5adb1e449562b4ecf3754c357508c24b19af73d91663b003c165ccf1e4b57b53cf80b8f3c6d7f6bf2e8bfc073c2f73e3a267fd24ec8724213b793839ba6bcae983d3136d1969d57a317c387c108d3e72b2873ce512ad2f86da484f0f55263997cf854d26e60179598f37e26dfe111e0ac9d76c13d295e7dfc1fbfdb816472a7bf476481cd1dde8795396bd0e46b124d349dc49bbe94027dd5bb34d726b3c8732a5549e27a47a352e07a42c9720e77f26591e07224f344fcab3956ec3e1641e73acad93eed47e43b24f49527b9de670d70de78b41ddcb2f5f49691b38bd8b33edf2122265c395437c8c8a39794aafa19c443ffd7c4bf95e3574e3bdee497e7757d3f058c6cb9d3ee558a268506ecbb2b4c63c7ace4078d8f47cd9a943c60ce9ade78837e9fc27598673c36b967c2a395e920ccce61c2d6ddecd141f4366b275ca9e737f326238b8cd46bce6b707c3901c7385fe0ac1d0dede07cd4e7e6a395fa00437795b53c70babab0715f7f09ea1e9c29ffa5df3fe5cf8aa74b357e87ef2710b89bb39dcaa734ccc510be7e978bd7c6249bf98854e8a11257a696d52c44297436c0abb5cae6b7205d5a27baefd9a654fb1c2131d53caee78498e295538b5e74d9d3dc2ea2a54d8c7d2ab4f90cb3a9529d0fb27c6b28af9f37e52e04f5e8b9dbc2429dc17854b16176ff90b6b9a834261d765e2cd6716ed9e90209af335994e3809e166953d9726cd9aa0cd5e09b1c1bf562d2698e7f443a3efadea4b38e509b11919d2a18435e69818224b404712ca31395ea8d74a252312ce2664c91a1e3d026ed29f526e64b94a46308dea062993337eab45d04184efc4fb8a2f53fb120e41cb93da6df2cc89bb102a976fb1f05a3e5909421e4543dd999c2d1ed301043d74ac8b1f45fced07828e1f242f2997e6a6269555860e1f9c5267d4af8ff00f578e5e74ab9fa3eaeb39785166f0528d75526527d9c5a9536cdf0a497d957561d41d6ded4a1f69532e9c3113432263ae6ac3856baab93f640ce1f5dea250d9ec33de33969c1cb630563b099d5435f9756a41a625b3f4176961548f759bb04fcb79411572cca2ccf42598541a36ddb2504b0cb1e9294e44de2fe48845f5a13a06359dc89e61d1bb27b164e24cdce45fa1ce58bc9bfc8f275c395c71e8ae5fb94d9794b41e62a8196d5637700d805117f0428e56349b36b7ba6aec928f15975029c7fa4e0e9a27a601304a033bc658004c21c72a5cd9bc995d3626797a557c61f2df9f7752e1b9748ef9fafc924b50b149a953b64ff79539e500b0841ca7309b2069f2c5cb5ef6e530458e52983649bff7c7654b3cca500e4cc05fa05d460e52f049b0b3589d4a906314c5fd5eb38edd880972882247284caf79be7c326ed472e40014c8018ac49056c153b6e6dce11c9fc043a5fbfb85dc24680dc8e1891c9dc07543f7442d8457c68c1d669021033ec103727062934354f4b4eb58cf7e906313c5f8bdff5a4fa299bc26f05bcd5c95a3e6d47b26d4d53ac133fbc9ff36267c3d3d79b2cd4b18752675b2902173c9b1c4e1343d976875b6692ac1650a1b6bca53081b29919b60539f2673f924b43d95923b7a9b944c24c17645afcbe6264b498944b1375ef8d8a91ee480c4711936e564599f963ea2eb18e1ae29fe45533400c60576f8208723d4bc54f29a24566a721ba15d8c92c9b03d0d650e4610b79e4ffa4cab1ec3811c8bc804efcbf8fc6a273dd230230460e4508421d357fb457b5e934bc4513957bf797a2a61442464b947abe694425487f0c262b625d1fce7210ca491c310dcabe6e589bb689e93000d1da30222223d1c0d34748c372347216a0f2dad92424cba72063908815af549f59a7de452720c82b5354f25b9eb5db405e1fdd6c7fee731d1e24028b64936c9e41baf640102cb346b2966f9782694e30f6f599599c9fae1f873bf0f8b09d2f59ef27cd047b3e557f89dcefd1edeb89e693e75b2895d0fbd091e5abf267958aa2d560e1d2962371e2ccd6459a66ef6d7bec31bef5aaa84b8bf12b64362b6884cffae412caec3ad61a3e7242d5df5d2c1cedeb2d13a4a7972e760feaa7f4df1cac11635175733f74a691cda6442999c33499d420a8724a1d366cfeafcd1dfd087f58a3d492e97dc0d64864b9d93b754d96c43394b43e6c4feea68b221715e45f6844d79a55c43d28a9ebc6ea1b2723558f526a57e7cd2509a3e494add39a1d783065f2aee5ad789b3e139c35b193e59991c33a81f25095b52b4f1ef940113b75d4adf46c63a64302a5a35274cf3df660c7630315c2eff38211a31202232d9571f4d8e6218f08e1f8f21e34d77100ca7982d474d566267987cc19b18b96826ba479878c114c7cb5290d9984c922e24548e71f163b58e49ad2007175ed10bbada192cb3b285c262e6eee3476654b490ac917bd25e8f877a59f86b3458a857058b392c20ee172d578c5de193b26a4ccddcc6495921f31bcbd257c193f35bfd2cef9c4d057baeed630c9b1e9929acb9fc42ff4349952329e8f96967dd72a2f0e875fa5e4bad2b310714ce9b7c2c9445d59f4d8e271cffdfec53ee841c4d70ab8cfea8d46f2312612c0e8743a25020080084a96d06331308202848240c4542c1885019a61f140001522a1e4e482e20241a1612120883e150281c0a87c2413018140605c381404830129144f26a074ca108a15f0f5480b4e36cfc50a119a82e7c87dd2174e1624600be6b83a885bbbac70fcb5bdbdab0682e34d6e56edae187be2c4d8fba52abd1d40cf9a84927a5ea0c575268e6297d9a5ab3ee808b35deff9fcd4c371a296b8ee8c5750a5cc834520a1342d52c1d560eedd8eed5ed268f5c563206e08742169d69a76d3ce72fd2a28025609e03a904e209a6ef99008b57059965870ad1485ba8237cd4d6359ed46d1ee30ad741dea1f3dede3d716fcb74f84cde3d1a3d92e308b277f0f725bb8e0e8eb112b5af4336af4f8066c41916a2823e141f576fc64d11aaba6ff25fc71ba06c2c188a2ba7e2f071fa99e7055d696f4bd542beec3907e2a69666740392b87db66acc5c7c4789ea8b70677a0d82a629e1fa404b8500a67ae80311503bd946b64c2d3a70c3ec917444f2f48adba79383807427c643b386247a62f56fe9c50352d23f5b29eada01269a05eb445fb66b2dae653c2325f1d3c65749ba5451cab79b440b9800713cfa7593705b1aa52b15c764d42609bb2675437f76cbc1388d5c4145d190323dc276da70e3dfc326a8c40fbfafe08ccf5d2170c852b4217ecce4bbaa6adbf30c19828741ddf9e520b974a801ebcc1c9531b38327d31e8b64acd979d8fe6b754edd54a7ce43cb2c61b9f73654a0783c34d47546a7e62655f351e2d350ecf8acb431ef2b138255e93cf246ea92174e46682b79b82d5ee21e2bb52bed32208018911223f8f1bf4d3a365956c7914cfef1236c2110f9efd801a6abeb72e11014231e76f11ff04440781ed67ffa3b77e61d7a7a3d66ac7e57e976806d3d8707ed617ce315513fbd21f2787bad471c96482ef626d6840f0806cefdb14085f5798af30ec9c461e9cf5223cccae2136cc12436f63f2df923b54662846e30addee8dfe22d8854d94cf7bf3056fcd84af56dae6c4f091f2d100b0862de255a5a1405a1e83591366788aef8b76d7b23d5d321ad6deaf3182f3791bb4b0fef32504ec49ff5dee484fa8d53cb29a6e9a6e149f67c0dd0d3d40b040c9fa606f624cca55aecad4f340c5544670adfa525e103add0a5c527edf54ed3526e0a469249d3c76d12d5ad7a9a5e6145a34a11650572ec451e01333984f8a5ec212e1ae14395f00d203aaa7dd4dda605a922711dcc3ab118edde5b7a5643279dae2514f4c7e496692b49dad90e96098275712091d519c3a57b8595817afefd23377b9b626505f67cfe2a824ae0621f722d5bd894ff47853680ab01a73da2ff663570c7050ce852170d3ce574b81d67f5f88a408d9f5857ba02165525ad8c85d1a21c011aeae882deb1315f2022116c07d9094046ed1fb32eb31f894001128be383130dd26233f6e7ec0ecec4c737c668d5d8b00103d222e03b95ce23bbc9f0f3068fe9b0699ee88a5cf1437c88242d82a8c0e1d195172fbcf0fd62473a3f74f4e1f96ccfc60c8174a6fb380cf7737f5cc3e9b9382e008807634f201af7cf9206a5a3630cc0eb24afd0c46a72b1449b076f358f69230ef72c398c480f31d943bf288b7aa01994453b500dcaa21fe80765439ddfcfd12199c407e366e552fccbb6a8bc792c40e797da73f291062fbb9bd13bbb715e1ee640c8df3af13e151480fe6864cc2866842650b063a190f6024b5684887b09cd5c3fc01c8af2b6a23a8245973e21b09be3a7f08677fc760b8b63e8e38daff449e20759cf0f859fa4ed5bf78f9516ff26fbf623fd73d3130ed99a2fe6a6d9fc8ae5ecc78708ef9b3aef9edf00451c34f2f2774c096a4a6e5e6e7e0b427442c641cfb92fb9bd95ab43ae7fcd86f1080ce0cd38f649dd3c9a94918fb460420f988b5826ffb0d20f43db1bc406d81e4d15faae7e55d0183801fda5ba032f70e2199803637bc934690ddd8ee19db2803881760447016ff935798d9513c8245bbe206441e9503865c38389b262a69c10dfdffb50c8123118418d439dfc94aeb13b273bd530a1f31fcbb9c2efd823de15f3438df83ed2dfb2cefda2057fde0945d1cdc9a58de5fb4df944e7dfa5be18c9456aea87f6d62410b5e0c6eff3a37e2fb3d9c9b05c52251980ec1822c65c2bd91deae9b8ba01b48b5c53f89db333b7c3df7da11b3c24ee5e5eae605677cc0485f137615a788c4df4c68707c50ad885d5ad310a407aeb893e1882045cd74e2aaa02aa4c6a009610d1fb591882778d82578135b714d41aaa5691c946c4671991ac4ceeb20920a010fe6c77ef363410d331ba4e5fbc3a6055efea3ce50c9675243326acc70ed9ef4818c76246313498e23531c44068a620a425c553fe913a15dae0e191fe90fdf8396924b22148dd08563ea941c3bac0e3d983dc52832b22cb32953b85ae2ac628706218a7aee2a697f04b4b215c8a296b0892598a437eb045afb20e61332bcfc285af6c4d363da7e67b964fcb15c872a62767a0131191dfe2560e94a105a3f2edb299bda82e444a7d8abedbfa904c59bd2b2ee976b6afadb3931065dd8edab2b54c2d34439ea10530aa77b13b4a4d02c767142127b38193ca2b225cab45bea4bf848f17c9a38a7c8a7142a6c4dec2da227923b6be2460e5221e4983a13d4bf03198aa0f76047d412080c8502958627097b385818292991e3802b8ede0dd630da0b23c0194557f08ba7465fc8a3517d83d95f8f17a487f6ec618f03fd747c51f9eea70c929a445ca75290ad522551c548111d814a5f2afaad1412f24758fae4df790cd4cb9fc22804ec449c2953711fcb1e85111bdc1953363a58d2a7d8b2b916b9c89935d13d475c06f1d1e4c50a8b2000491afe5395b1a8cd9a796cd3584e2549b81bd325d2608cf3c2b481f323b8ac3d88a0c2742e46fb416abb99a887c09e3b0ebadf2673c1c65246a0101c940e8b3beb11b9fb9d2a1f29270eae247e3b8598c309063ba3bf8de2d5073098c23db600918da56d0976b69557d8cb2186b31ab18ee4345c0328deb1e804e6782c5754ce07352c2c62ae92ee9451be74f5821380065cc746a5bf29220d4a6a3a21310785e5b6d63a6d8780990a13d560b03268e33d7a6d279d9dec97735177f653909822406d92bcbae05e3cb43de055f54c98a7d86be09d5d96fe435372c05c00faaa810823eb80b03effc05c257fdfcb62ab4db6ae37d7a13a3286c2a03b99113e635b8af094e5c142709d9964fc9fcdab8b2b166fc4488b3c02a3383941a7569da70c584e4ccc4bb559043dcc4417a1e51b606660d41569122c677ffca5d64983f504891c449c07b60389d9ec99eae08452080d5c1d8d1e6ccd7717c1409743f962a5df7c32335827970f8b82606e869c61801c0cb44595f7370052205a6aeecd34664ac2fa9f75f50022f5b68224fb00f1b41fc3eb3a5bc2c7b15dac4d36a9e996fd6feac47ab5fa47a9a4daec95d892bdb81063c7886b60784c6a31ea245800610cd82711073351d2411683b798de41b44d422ee832a0795548b40c80250c6e82f26f5521aba2e128d4bbccac746520e81dd19edac1a7d90268fa6dd4e0528f46d08dd078cb490ff63b5b2208574a852c6d8e8d8e583f9b7204c31ddba579b236b083b58c7bd2614dc82a377a58b32e71e7db71a032b1b8c6e72db31e452e10c03d6414ca7ee540ba6bfacfc0b897966a5fdeea5fdc51bf537dc9fecd7b9a55b2b7c312270b52183b29a013c9672750c8b9c53693437880d5e57e4d86177f33ec204b6305ddf3b481f4ee182cb1ac0c25dc8309c67c9036a7facbbb7d30f8e4c8e6423c8ebe352131a269c346d7c953f477ede57ea60ef1ad533044e9e8dcf8691063e6581262b93c88aaa3765770ff03acc9b2995b7cd098f7997c88a15d1711db1b8c0032f7cdcc28944f4928b157df6a6ff3e954e22a90568a4db03f2ce3933e17c3483a69b8f05963d03e69b601f8362269cfa7b3e6f2d6c706c80afda0e3f514f0592decf442af924952ac19885d254f579785785919f0c54d0257df123bca3f56f88bca553e4b35245b8e10946798dba2f104675a7d0ba7ace0aacc03a58ab5a7402f0bedd934c3e39d3cc34c92265b941067dc5cf880442cc3bb47e500096611daa07ee042cb289b9770136d8233f6837d380fd6f52f34803d33e857e7e649497255ec07871a6370084e727a56c17cd82d2313809b9965a797d826a1e2ff4149fd427c22e7c02cad9669dabca45a3d325b1657f0a72d9be228644b568d867cf03298f07afe4acb896f17aaddf4987fe837e077c605f4cf3cbf4d58f81c9049a2098ba7b40cc11186b0fc70ef791433757054f39370105ab731589d839674ef968548bb41240e3fecb7925a69aba6e0fa65fa52bec8144a47d6579f22dda5fe6865bd91db538aa00bfa1979ca2946b375f9cf53db6154e6b054f4ac792b43042cb7446aaeea65a2acf2bbb4bb8c72f3e6942d4099f10864858fa741dbb90fb85e487e4bd5f364225a61342037944b9c4109219bba6e2866c74dde2bd5c7284e72c5a36d61a83c164ea4612fa10bffa84c6a502855c41e6ba4449f30109ad29f6d5fed578ecd04919fb86181910c49e74e05431a2d2c76ac5012bb61b4e92652301725b01594a28b600ef77880b16fe3507a776b1cbc642a3cc830d5866d64585c41b85638c3186502fb042855c0fa878321809c1331ff65cf404398f8033c90286a27e91cb0badd020e9ea9dd461a348f32cfac222be14cbadcb4098bb3491c135f0636beba573f6a65332cb110b67348e626bd12edbfb02075db9cb1ec566c15d006c4b14601f99b81f4749d8e4b3e708ad0cf9ce88d25e902678ba5826250e125dcfe2dc90e06adc4c7a9a42cde4eb1a62778f21d91d9ed9538eb108df3339f4405109436d5a538b9588a3168f0af5fa066a984d92fff25d395d6805ad7998a4a0a361690c5c43402d41fb78baaf36c04b1b475cb6c6c7442230bf38c2db805ba2cd0f2cfb4eaedb3467b703e116c4fd5ca07b7743efec0c9830aadd6b86ae1490ecf650b24f2674f128b746135d59d9abca15ef985b51bd83f5b5cc4d3d66bc1476c9318a738737640c3626ab4b438e4e3f56f2b81da1296f1cea56d6ce29b26b7cf06a49ded70aa635582ef912d323d64f313bff8d20c73dca6a4fa31a4c607cfa78475332a19ada64641577809f402f4b5f7934c743eb6a718db966e25ce683bfd8f3051483c823e990a50713b16d84a7f08866bf475c731c7bb32387b3daf7583e9053881d49be12ac8c4c7ca2b3d19ac78623ec65b32edfb9b9465ca99236f45e85c900969b1782f66f6839d212b8356c349059f359bd7872646119be1b93e4944d778bf2d893e4562f11fa2848a832868237986aab522e0b3c149536419ae26ae279c4118b9467b2b3418e8879de1817105f2decd9b9816e32d29bd5fcc8b0ae8c77592959e0567c66ca573dc39a5a103963206cc79239d77eb9bbc7dd6517d4b9eb71ee68f2526a7757dcbddd9d0f4aeed683faaaa4ae5c81e6a7684cdf4cdd574fd0d5f092db98b09fbeb737bccddcdf74219a7dda86e806583abdbc492a70a14eb4ba3f47b9c28571a58ad516f8f53a8668de0e336cc3ec7bfeea87fddacdc8c0a9341805d53b59bee0e5f3497e4100a448a44667752b88513145e0abaaaf98c9168e863f49669a79edaa4af243e44a531bf9c1b00a161b0103aaa1dc716563d5b1999cc72418d8cf2f980c812727494e9c138057652dc45e24f107c2ad23994d7c00a23f29ffcad895902eb619f85f4009f1759719e0bf7a1d3b6fb05a59a7929cc14a4e35f4bd556ad95c7e5a7ff494e2ddb478d6ec33369ad7dfde49ab5dc81bdd6a7dc536c438b85c881f85843a54f6b5ef720da1e29a147f35f1a10d2487eebe10902286a08fb1c2b755b39dc69bc4c7944bac249534e32a5ead72120a82b5e4d6d3ffee21635c30cd9cdc8914c3b6334a63489c1becf4494cc974c4d88fa55e06270050364a70f241321b1617bde47432f12cc48661d14f302434c8d6aced6f0d41542587251638aff778aac5a18027324465281631f6b307dba1c40f281f3446b477003916fe843b97252b1d8b58a69999b09cc178a4658a04a578a58bc175dd2291042fef98832390d8636ac4465e4b586149d2aff2d87e5cf26c5a800d7abba17a6cebe34615b4a2f6dec52be73931d59fe2527fd83d8ae8bccc744c26c2f466bea06f7a2d61835d8cbf1e0b7996c844f7cee05bdd8450107c53a76df18b4c48c32164a4b337ca9308e4b996d9715f146479654ab506c0f03970ba91bf57da018c1d70653c032ee01e4e8aca08c114b8fa103ea3e97164d3bfa6fa2b9ed4b4f6804d8d92b0eb64498f52fbee5508cfc6ed462343f7404343cd97fc18e81644ae1d9e52e28b4cdeb2504c8bed1234652c7a56f5db7187436edcfef686275e253154fb9f18e9eb6c72d8501fd48bbfc7c2b4460b5dd84989a487540aaf1ffb5951b8945d6d3acd9cca6bece1c9485c83cc8aa29cf980eff7f3fbc15f5e4d8061221a94b4be783536a1e989950c83782c7fabc64798301d1580a78b95133ab450841b237489384d47a5f4b20c9107733f5716f07408bda60e7eda081341ad937009bd5aea63e5521832b0a475e66139f49b9cb68b7041d8c78ee8d7c0c426de7d997b857e28e2256a1a338f8e1800c4442f4c353ac278073595623b0d9d0ab534682ef84e16f2bc741f42ba19d11523ce1e75d2c99e9f4557d81de9e87655e3642a1e98d0547cab154c8f9a868d743f1901990a30ea3738bfe4b0b769cd0640401ed6821e18185598b3f697eaff16ea2cf988bc51f95aa0598d242fe45702dccd32039f259d4b0602123411073ad939e1401c24668b2a426735220100faeafa16ca01348c84f8c3a8ca9808de450bf1a8d5180f5761c98b92442d229d4b8ac84d26443c9f1256ceb511b39cc20efc037c43cac8a70e09f31c949d16d1000e684622c6d59150a77ff77bfd6dd0ff9c868cf7bf54cfa58e26512281e771791993fb3d204ced67ccafaceb98a272424bbdd19394790db75e8b87077ddb287e85f0172ca6e96e7085d003df6f7c5bd3111f4bc0a586d9ea0818f1725914fd9eba41c7a215344e39a18413c1b5f947ad6a133cf05fbee981947a3c2af259c8eb82351d2b04cf98a37ebb000b0573c91727aa6c918d7a6a6d9e464e7aaecf710338090f8284bdfbe0039b710bb4b9b2b989b2ff992d3cc47be7b03b6e38e5ad2ed81bfa70782ddee4b7e62d78f8e8c1131b432d7bd387b3304a78181cea6890e792c3d5ad1a93a440714fcb7453d80d2ed4f43ff83fd00f361e859eef4faad90f6cd777005910259701e96cf86df7bb12f7ad4d078662512fab6acdb6deeda1fc1bc208dd1e8be6f0abcf26cc3263eea1ec59a1b8d66f0a1882d65aa697a0219b0f76a1d2ed61f0505d581c1d049ea61bac0d1ec25f658699294462456f9d39b69f8511189319eb3823d7e31b024ce6af3cc0e50d99a8b679f02fd2fd2c33aa3f9af994f143587958c351e83b761a04bfa40fef7eca89743e2f3946726ea5b819875cf4dad876699477d20a7f65a1226982c55317c85a1116cbf61a7806db254c926c27b0a395936a25ac25501249449d93b295040cb3a28c90a857769ae37f3f30a04118894240c1f7489e1363508c60ab5416b8e2e40d4df0b722b346cc252c2161dfd354890f60d70518eedf4ac99929e3b5465ae4aa65e8133641c804c40a08a315e92536f7064218a6991500c4821db3c804b2199b335f79ec82babf407ef4ede305d26ccfb83a3862a83724b38769e75ce2e719502cab0e126d5aea153a121c9047654c0bba0e7d2cce34d63d4f2384c75e2327a6e1c35b6c8c4f3b1bfcf00d8f110f07df45f43c78e7fc71a25cc3592356247011b6f5621c7081337c77a0286d3e490a441ebe6851c6efb248a886e2cd97c3e5b92abb841425e660404bd79a06e3b2a53535d18128f71e0c8ac54df8b54c130c76851eb2afaa708fdf9ecd82cff89e82ab4be49e3cc4981528944dff67e2a8cd588956f6adbaed022e9c792deacc294bc30a68bd89d7ba06a4e829f2d6bda07b8a2870e4525582d0375bfbd993ee876a7c6ab8ebfdc9301ff36e7d73e0d58cba65b64a22a0c62af4185b9d6b08f08e88f72824cf30cc25c29669ba2c092188965f4eb0746a950c46c0edadd0ebfd1f48fcd0e7a148a84700fe0ca6957391af167e27d049852f99fdcf90d83377044d81e50cfa9a36dc1149938df50a3c9219ccc152b9cad4eea2303c1a39b246fe46312f848f7fb687ca2d611fdb12d07a904f28fa6d0c45e1ced213b113a7ee07ff70ab4b8c8577a745c402b09d9220abb3272bdd8786f18b7ece360cb79c05d3b74a01c9700a56439cf905d2e9dae91f6b52b6d71f7da9942c00296c0227ed5c52d081fbf804b9b6950f15681880b85d29160dfa2c9e1a3c39baf2043ab2ff29053be81b45ab42cda52a028727971e95e885173cc5fa3b39839a8e3a50f30b048c59997f87c7d23729783a3b3cd2614a8e92390ab3a41e139047fd9686076fa61b8304cec83b2edd34560f9bfeb07a9db9dc37471f91588e173c83e8d6648e61902c4c711ebbcf1ee7a73b5a3526be358ed333214ffb3c685e3d93f7b8d0bcb866335cfa221ab999c4733cc9e3edb3d8ca2d861aa984710e10502719387c2e8c91d7d432c1e1267eb478265f635adc7e6843ba338b568c6b981cd76300c8a23c921f54ec013ba780696110c886da9082f76ae99a169f09b806734e4e4a25a2b630ab08b9db1d62af35f0dcb2cadcd5b8488837d044511b86a4cb798fa98f3543cf36bfaf9c66e7ac8d106f27bf6539518bf806f8e201d380941c1c740710e1a7ddc079cce53616323af619fe4447d07b51139ba4c9f352a414ff22a616e0602b09c49707459d1f43d9ae92667ef9919eeee65e2063d4c2e6bf0e3f004aaeb8d58198a0cef7b4d8e3252373fb2ae3573d02e767b06a552048001ceadb3834df2cbec0ea5a4080dd9e781303ed94ac9da1ee6068ccc9c1ea226bf44e37c395e3a45c82565829206ce590366189df7462e7065f57ac0fde8d0b169fbe52590377529b095835c78e548571f0cc998c655236c6d1056c69c69333be013829182d7f67bd04d6d9416d3010a80205429d64164a59489eb22657f838196d6e7fbc29d60c031a9bf51e414ef925cd0b2d3641817f9eef3bacac2a4685693d02ee32ce58d25f289fb4e41e30a7a0e77a03a9a7138bcddc896c437412c3582efbc9cb43dad86733ff0c0d8d44f756d1fed1b9a09d92f36adf91817747725854683ac58357fb26147936e587918cf72197ae0d195728f29121d12476f0b1c04fee30e913e57d41241359b350354ccfced89fc4f67a28ba6c1918237903cf391e95f2cb3c77ef7343e54573547769b9afa714322c6b58fe20eb985bc237daca9fe171976cef2b39cf64a5aaf024936262de32b43fb88dabc9f0c7c31736a7b0e8fb9c309f86ecfbf22091a5dafa83606340bfa4681a665cccf749a0eadb2eb46aec5e1ce853e8327351e1babec29a1497ce758a1753d8b47f4f9722bb22c0a13ba1fb6f2d5e65e2552563309c919a39bfb2cbd74d3755fd9e6364958e0dcc4885f64966b4c4ea664ee9cc417543d8b20b026ccae53e2e2dee277a1b123dd1c727740f3bcdfca66f50b78f59745adf01734ff3077b2290d95b8816d537500a5d527e44db95daf83c3f01a08a98817fa8f49e51fbd372e6ffefd8a33418768bbbcd2a4ead0c86330c5ed4995ab41206c8002125381f581bea79f286850a65c6bb3171ac7ae06f60c5695029f8ca2a6c8d8e3b784a9ee32980ef193b457aedacb5d9a1a4543167c8637bdf37191461d491da3674999d63d00594a308220ca411204da88c8ac2ddb488a41c1e75d5542b43ac7f92f9ffeafa7111524834db0dfee86c46b41fabf157830e9af6735d294d1e5e5edcf9f18347beac17a64cafdca5e4538944ef205600b270e10915451c67702e42fdaa6925094ccc96abc80b3d395a6bb0f190d36f8cf2f7be4e0f1911847980270c96445447c6614cb5db863572686daaa835a7e71b76b37262ab731c0e97e26b62b44a0fb20a091ca57089792493da155f016eb04a5849184cba3b0ece8b9e0a4598ffa52da07df9d096d6a7ff3da5764ae711cca6217254ef695759303ceec6487f929275b4a799d54246c2569b990998c9630462ef3a6657dc204c20a21f28398518b7115a0bcd1f211f9fe8031cee8783821dd9f00ae39e378bb053e78eba68f3d7b84011743e695981db4628f7743e3e52084b73165f28fe297138df2a9751892a1f4bdf827b42bdb831bc170b5ffdaad53723af4ccb4c90944f73ed326f8b65f5aa3f1d137f887607ac324b17a4ebfd3256dd15abfd07f9a398e3d9ebc6e83d56d7b1afc5465136dd31688e5d626cbb71acf117be32ee2d23dd316496e8e23e36efed22ace135de298cb0912a20370dd944b2cf2cde41c10ff006bbe7f522afbd07c4840216e9631b6f4717587cb2392490bf8363dc3e35d709de98a7d91f281ab6efc1058e6f112dd2212fcf839d1b816a9cd5fb20c57d5903412821a4fdff80d143de9acdb277f70330001aa14f6144fa7fc9a9b34641c16c02431966be0871c82b07ffcd690c368e5b1961023c77fdb26fdf2592952dca2ec1dc99dd3073d00267ba1855d7df996ea4e800cd029839403b012df92c1ea8cb4401bf9048b1032ede017cf2b08fc8d7c935c0454df9bd77e582a6c1a6c93cc47b03804bf50000091f23aa6e2aa2288c6357208d61ab41be2fdbc4b260a8e70be2186c520faa2a085d7e34b0eb4be294aa439dc8c03eab7adff0564690e6971739027fd9311c888399bf633e04afedf94b52cc802ec213014526003a8b429ef3a15106ea552a3421409d4f4b37faeb93e9be2ea2bdb3b208ae082c8b7ebd41b790bf30fe55ba6b4b08df033a2a4d24414cf3a3f9234e34385a044261da4f888e8b90d4570c1cb084749721fd11f8859e20d989cee8037a68fa2bec0dce35d7fa8a5960b5c4b62dd5370359f8a5d9b2c522bbe85c702c00b19c771216d3fa8bb23754385aff226f712ba4edac981e84e8de281cdb391e3a896e3ba7493996fd2ce714f1c8532fa62d30967761398f63ad09ae22ab5947c18ae1eb98606fef4c2c0d056559e988950b95c3e7e1a61c5eaafc6195b4a1d1507908320466c08dab3d93c00ebc203a1c25843042b801171a4926c93aa8e4f170163aa0dd9989c4a50e918c3039942b60355f810b2185a74df8dd5683ff0642ecd2598fec0db240dee91a1836100b80596bf94f36a0b5d960a455a5c7e64189b3cd9a75d3ecec0b86886414b45a74d63d7c1c6065e6cd838db092209c6b9a518ddaafad42bbc56f13f5b99746e35c8f26ba93bad6dcea8462210dc3048dd93b53685ecdd259e5036d1653a44c2c9b30738cd9266d7016ee286db34101986c214e6403e2343cbd893630d2eb895dfe4cc406761e85d8c59cbb0da6bd04267d7ac89e3509bfeb87baf9d0adb649d39f67c7ec645070cc8e85c54b246248e2a852d4efac73d1d9c1931ae5365392ddf7115deb4118a0b9cbe4c555ab36f58fd2fbc1aaf9b65276f11d9d8e21356175b15eebf3a84f91d9cc8deec70996df66fd302aa398b4519ed652cb4cbeb14e42b70c1f1687f3893b9fc93720c88f8f0bd8f1136224e3b2d8990970ae2d5069ef8c83affc242a22a2e37cd5a2e5ac78f9baaa721ec28da88b6351e77a295f53ade0049d9e145c31b89602c1b30575d93ca53daf3652e420159c9b5a335f076103b3c00cd738deb039f5fb8853c770da786410e1a88bbc4eecb2462ef934c2ca8b3d81d9431886da3a53a7a734271c636daedf97998c567d10cccc2411f4da2530fc180328216da2461e9f2e3562784b71f2bf30b143385e0ff789ec5b696069cef52ae2577a804b9db73467efe0dc5722827c41aea7c4457d316016c972ef6b4be8d8424fa5f212471943d1393c20c40b34fdd33634a41f7c41f91dc83c2db6e4f5fc31cb4105301ada6c5b5ed6ff61f915c855bad3721f80fc2f1b1146667a778ee53be91170630c1d1a56c765676408cdd49e2b07127d65cb44b775ca4945a5bc5978a06b001ebe2235f3ec95b77f85b48a47bfd0e5308d8b669b65f5e77ac13f055d5d2ad00325f405f1831e903f66ff93593afcd1da59f9327e991391a03e2d51aaafa8f13f556452731cc23fb9da55c0e74f48e6a7806aa3eba21a3bdd0405c2d2dbe1cc8b141c2ec981c9cf75bf2cbb0fa8324cada0a596da9af0f1835e8269f2ddaf428b1ae05c6c54080ffb4462cf59ea682ac0fb8d4273c0e13099cf9c0052131e1a06d40c9684bb9c346098202c1d1377a36a121fa7e3834bbddc47b6e19ba6e1f328d832ad426ac4d3365b49abb6cbcb84bc2c8d51949e9376dc96ac88bb1990e4a8813889efa82f366f23b01ebf58bf47a585771e71e391b937771f85f2964e835024cef2e8f8af385fbdecb8e0c81477a532be25e968fd1882362f39e153dabe122d247a024da09fa80252815286aa8448527dc62e829d480f962e835369d0bd8d6feb6ea8da8a62fb29255c40184c2e0c4877b0517c1eaeb0f89ca72e2dd19c7917f408c8b28e9dd488af93225e835a07ad341da1a90ec92575e24e2efdc30160b581a2687e7accd485da4a49e137b1cc8b8ef62cb5994675bb6da9db93deb43beb2c8b98d3c68bd55f39ea7b541452fe36ce07a50191d8a9f3272471d291cad1be1594a7abb3af59e1d20a8458b65088d3707b5dfbdc3399191a741d670f4644c36fb135fc9514bfb58e86e15ce70d72b4dd425e7d7224eeef71c21a43e409fa5c6ad3ea3459fa88b5c0ac113a811a5d483c67beae083f549ff0869fe4f8bd4b44617016bb737cf5abc97587bb16c8f756b4b3f2f4e526fe07edde06ed5e4469d105f56298e32b35b83f178774a4f4bae0984adf4c6a373f92e4ea7b64aa941837ce0c9d68d25b7fc16d25b82f0039e229191604f160baa074d8ccc9577f1bdd70121364dc955a482c64c28eff5cbb348b0ad8b50a2124668ed9e0d4bf4efb36b78daeb07eddcb2c470f7f216df73ddb86c5fe6f7e1cfe3b00f86fbe760f8c9d8617ac74303a4c54440eb5716444a7d47e826ed757db5f7c5fdded41d83240cb813f9ae20ac1d643599410fd1f830fe36a4bcb26eba876c1323638956ec2b760aba119a4d10a74dfcf6048ce43d9a1ac5418a8a01850df63ddbbcb1074f602e705603f84b6e8521956c279c301604230041436faf3a3df088bb7518a3bc03ac352556db33198166a7b1b63da1d11826bc415c088781e8832d8f9c7cd392754cf2efa3621a7c6b4e1dd6ae38aff8980002f81c11bc7cc853263d9fcc0f55ecd392a3aee9e314e7b5a6c99814d2fec37b703257bd44ea4b86b77966cc1d50453c1cd3f81fd4e2831d1242db1e0b7102b980c02e79e182963017cc05800a20053c0ec189820303679bdb41a7b075ccf028e2945290d3340b0a490033c0c3c0c3c0c3c0c3c8cbef5cf6f7d00ec2425254f07477c2d29d3de4bd2eb57afe77b586bcd0609d719679cef81ff0c840d320d684e554e72fe846d7de533ed04b35633888464484b13deb6185d336ec384096edab670796754aa259862d0ab0cb5a18424315eea9337735c421b4930db44ce85fa0f934c6c2041336143dfe7f77fc7ad60e3087d8e1d3e9f2d53ef890d2390bad2974e5cfa626ea30859b693939c843688603e49a5932449f91886a15eefd3b92b0c5b443db496c9295770e8f8088673a297187bb37cf4fb1dfa018c8f5fa019d66491aad6171fbde04f25627afce0c5c72e3269edc43e87f5ce24bac0aa4fd0f964b2a6cf7ce462994f27c7cb1bc672c9073e705138cbfc2fb9c5c4ec77c8e0e3167e7a1cdd0e2b1bfbd9420f592547f3702dd2642751afd1dd61a7c596aaec529b2827db69e063169eab96942ad9c5b84f8e91911ef0c00c34d0f03314071fb2a0bd4c6acfdab1971e6e03fe88c5fe7b319ab0bad17fc0a2041faf2878a63241a3e4afc75cf1d10a34786cbe46462af0c10a2f850aa1e1eec458499af0b10a4feb92a5642527beab42cdf92752d6d531dca9e8b532a57069cd39c55061fc8e9582270b0d1fa748262aeeedcde9f5c714f85a348bd173d9e49452f867279a59ad6faef8850f52b429c475634c62d6933e467188b32ec1a3455bb7f000c0123e444188e7bfe0ee496be68f5098fcaa9398644cf64e8382d0f698325d8a16c7fac42bd956be354ae1c313d609b191af192f46761eba4cf8e804e36e293ee97e627e3851849dc995db9ac2c726d0f79c652cc47aa703c287268c8a296947b9a461652638f958d1f9dc94aac244964d92fa4e93a772e51246dfd8bb166b92a76b89a4187dc6fd63cad6c4830c324a0b54303282061b3e2a716aafe8a32efd319614e1831245ac589a2a3985781d848f4920a13d735329af4b850e1f9228e7b563c2528a9f460f90d101323840c606c8d0001935f888c47521570d9091013230f080177c4022f9534b8e497563fb0df8e31174c54e3ba9ee043e1cf1d1880f46a4beef9e2cd7d949191e1f8ba8444a358a959837c773288208f7dc99337b924e30071f895822677312ec4d8aa9a8e00311cfe65c72bea47dd58e828f439095ca43c5d879dfc31d1f86a882759a9571dc000dc5c1c84805d040e30464a86002697c14c24fb329471ff7241613840f421ce2d9a16a4367aa701009659f3b6beaa0e1de49f810c417f672d226a7c9a8e1b1c30c1d3c749cc12303647c60023c701f7c04e2e09a5a337d9209ece8c08eff0084e27f2967ea587526fee17069c35e7cccf470f2e18783a75c7fae61c72ef41f7d489ab18afe5642899924078e0f3e20b993a1635b99e7ed051f7b388a5b496cee56afade3430f26c1929c63578adfaf3946462ad0de23870d74b80bf27012742c77df6c5c597828fc2b4f3275157cdc2195b61ca4cf24ab51edc057f615b195f4a8550a3eea50b594f821b3a4dc31ec910609e890a6ae6cfef92f87b74cf031875d26652c7fea1db3d0e0430ebe4c26cdd937d649cc0e34d2c8401cec9a0e7713d7366beab143070966f00187f637a4c64f627f9bd00b3ede90647e6919d8c00a3edc905053b59dd24b8bc6db5068c854eb0b9eb7951c2323ae038d1e0ff860c31225749c98cd2d79f6a0c71938f035b89d397a4e7b7bb75d0d984f4c48d89b06f42b74b46b0f1af24ee1b4d27c2faf541f67e82dfcfb46adf1642133982c6d54afbe32e0f952be8913cb81437b94e1fd4106c64e0a1927548e66950f7c8ca19a95f0183296d4c5c5a07c12e6a278b6ade461d8e4e8a1a4de3edcc46060bfbff537f7bef5fdc25dbb5d71e3ea0535bb897539c8ee064f17c85cfbdff4ba296b2e94f43ce5f4e42568760b5557f7ec9955fbaa05ba7abd4c904a315c260b9a8e4ee61c3d2bbd050beb474b957ecdc434932b1c6efd7763be9dbc56204dcaeeb3f41f45ad2ae49f3ae2345bda1fa99064d956e6c4681773d0308347043ea680868ab9a468eef61dfd90c247143ea070a72fa93825debb74959c0652c081297c3ce1b0bf7417573bc388ae83091f4e50c56746f2524eba773501b1bd09cb167d635b3e98608a85c5248af4b104b764df982a1b7badff50c2b1c38e9d89f14712dc38ad29d4fc86aedc0712b2dcec27862e1b078f91911574a00427f8384225fa05b72c7a5e928687e630c2278963f943740cad0d2ef05184333aa5ce9f3bc877c9e383087f580c57e96363b20fc38c1eba92bd5e2e4fd61086992796679f17ad3552a8118c54a3ad07df1416bdac010c5fade4da4e9fbd7256461a6d06092850e3179dba8afd5b9e6592afe18b84fecbb9cef961fafa1abdf04c122dae774c365ff3c26472aa0b1a6f256bd9831abbe8235db74ece5ef29d2eacee98645ebc362c960b644264ffa737fb546ae0a29cc1a4aae0de82bd0abd3ca97378366bd8424b21521bda62fcfdd4a8c5632a7ea323db4065508316566b7a92a4b7b61263428d59f0e1255df2f0f558cbe2eb24ed75915ee3762cb4e0315d38296998276151ec55c65fedbff5af58f2f27ed24b259d78aeb08356eea4dab1999724d468c5e2ff174394242b1235744ceb5727e578aba0d3928464cc79d5495471758e573a35eec1ad29d448c552aad965ccf2cddaa83098a816d53da7d03f5fa87f6dcbb159539027dcd6e7cbd1252d45c9f72c2d4c4aaeb148f1d5c9df99ae65729f5163145a6f14ff8c4e1a2d270435449124c49e87930fc56997f5846c6b8062cfd5fbfb28a977f34f9ca762e3e5664fec49b0186c3a3b45a69d48ce5f9d71265b69183971ac2897c4a0ea99bd4d942b2c573ee7684293e56f2fbf26135d88d74d73bb323526b4cc1d275888d9f4944b7469a26cde32fe499258c218c2f23bf5f7e7be2a916be57d3e09d5ee8912fc9ba46d552566907612463f89b6f5b0b9581294c592bb3a8bc5d244e29cef9294d5a7dd2a854471e34aa62d26e9c6f3883deb774e3fe5cdcd3c74e000d308420d47183ddce4d84c313cf78d48ecb8cc10bb3322b14e44cba4bc10dd17f1f926494c924bbc8b1571d27bb99cb289e8bc4b367f5a90531b117d88d7d596f4212851d773fc8f269dec1aa2f0af16c20d5e6979153f9f55429453fad784a7cc9374107b38f309df5310d956e4a68c97c46e3310ccd7454df2efe5ce2020ce1ab4fe2f4dce277b7fa854454a7a4c16f5ce0f949893e81b1a3455767de03aa612b7fcd47e637ca0a24431c9b7cffab23d24b3398631fbcab12d7a48d892d2ca5d928734272e7ad64f39d778d06eca25aad3c794d41d4ea2e2a9a67226e9d6410d3b98e4fa3661c4d3e4246bd441c998bd3a496a82cb56830ed9b98874e789be25a6c61cfcdc498a3ae1d9c6c41a72a02ae24f332763304f8d3874791b5382f59ab554030eccf5e53229f6fd2f59e30d6e7c956f7a57c30d6ec68fba9c1cd66b6f83fb1753aab95c37a6b321a15df7e4d8954b63bd0653ca32519b5703156bd3c9b7c44e370d75eed524cbc968286d5ef5122d7b06b3c697937752a2ae35c3dd96ffc48b9781e9d071f4d53389593294afd389291a25a86320d463bae4962d931483eaef27099f6e4dd8c2b085fde89cbadd738e828193a494b39fa82da37fe19c96538e9f5eb37a214912fff5cfab4fe1ec029ee2494997e40c27cd85f2fb63388b76d29be016f6ccd4f1ce72a794b59024cbec795e2f0b449c75582045666483c56c95ed0ae8ca9fcc6e4e57de0ae58cd88a97729e14af429a234373c5e0976b2ab027c6194fb9cfd377a6609758d236e9cfb22b05adc418d5be14db2e1305dcd398892654c76650d86b5a2dc6ce3f0f952794e9644b9553a8c9ee04733f7fe6bdd513a34de8628adf649a5a3a3201b95c92d4a9e7124c96600ad59c6278a64f56a2843c9f9c259e68a88d9584e3e44ae1fe5d926823a1d4b9a79d3fd55a1e018b8c5395eb499a13aa61843a76ea2edb5c0ef63354b0358a50741bcda72957e4fa1a44283e2237bac4a5a244870186519d24f9497e9375d36b0061acc1aaf3fb5ebcbcb9018271ce641399b54c52373100303c1db918f3c3bf4025aabbaf4f7ecb695f9422c7e430997395a57b7149b26a98cff79c43e60552e1d24a6ca577bfbbd0a378070f16d7e7b3bab0656b3faff849776a2e28494a51ef04179ff4d99b4a2849d4f216bdc9a71a9e445bd07b39757b8a4a29c35a90ef9ab5327ab468c3cd5473a67ae8dc2cf29ce43dd98e59436eb2b8a72c78d83616a5cafddd11b116262cca955333e5a2b297d82b923f6fa52b4f278cee0a3479ea65074f2b728d2b31f12461c56f5f9ec4dfaa122e66159877c74d8bb661de44159bf987d54ffdcd5e920a76c7cb365da8a0e2b3d5d6c6b798ea14798ed88a8fc124513345d289279e94eab267220394220ddbb9c7f6ce5f0eb80148b19ca426976e8af3981fc5617e252bdd7bf69317c52d6ebb9e4cc532eb509c5357d54369122a555098111a3a19bccd24d14f14619a72373f9e682b45fb6c6d49954c27dcd76cc24921a6a49e13dc49527a39a1a366dc0457d171d162a36f25d144251b3f78f46c25cf9948edf2a4894fde5162c2f5e02d69174a2ebbc4e1a5c2c5e42ed9e494012c6144a64b6359bbd749aa12e8c5d0f4e8595149d00094e83d7f0e5fc23e09ba433f2c655d1289113697aed7c3f21d89b26bae3cfc0b89d43f95acf7ea23be3a8d49e8a03aa2aaf856b247f96875248b76560879c4bef165b1c37d6c86700871c425c4cd9acbbfae9cb821a4119f7c254c5a25df6c0b8f358430226411a467ab1a13fcccc412871a421451f6c574a927b6c99d869044906195339d8d9ff04084977c3ee8096e3195ce31327288a4dcf858993e493c3a4388212e4b6d35f9a576e463869042d03e9931cb76d814da10422015a1f9657267ea2a869041a4e1513a4c92c9144cc21022883cc72afb6edb0c7f2056bbdf284b96f39bcc110208b2e54b1acf15bde2f207ad4b122d3d65a6e29e6364c40fa64c7ff18ccb1742fa50e81233e9baf3d8b97c38e64ffc3dc9153d585e08d943d367d12ed6ccc493cc3132a287d3c85f4a656dd79dced185903ca4bdf9cf3cd7c2fe49081eaecad7b14ae8e8ddf10942ee60f8aba825954f3fc52408b143ab75696793859e1c4ee33f1052873e43c76bd98b49117a20840e67fc7fcd8c9684120c84ccc19853baf34dd2e631e91c23233d1819a94005940400d042881c0a4dc9cd93f4553527240e7956ddcf31e1708cb0897b3fc9e3d63720b1b2db2566e87eca0df9c7dca124e1924cf56d78fd33d866da7c2a8b0d5ea7876492e4af5a690dae49698e9292bf64a6863b59c6182bbd3b669c062fa35fd018553d870e1aa8798d417fe4339c2b54e3e2ac09966f33f4b7be915aae2f1e0f29439984b7ec7e29236e0f21c321b3bda9c9f1f4846a0c855eb6cc2326e75c580ca68f5ddc24c7ce1c694818eaf0d63713d373474d0818f0f5ba987273c81772cd164359944fff3dc40b8fef69cafd3ba40b7bcc96536f0ebd9d4ed2e8102e702ab66952ecf4701e9508d9026f27efba1da97f8816122b8fd4658ce218c1c88819656022240bbe5b3669ebd373c5112158f8f46ec7d38931778708b902229f36bf7f1c08b1021526527da44fba9c12520552edcef6d295a82b8e102a9cb457f3de819029d4a9cbcdd3456ca5648e91911029602225ffae9d844421b1fdf742973c5f5be931821028e4b1bb24d1fb93f8fd9121e4090571fbe8a9a5bbdbf5428813b29b946e9393c5ac6a139222d3638a21a33758214c403232a634bf42c812ca98f624495965cb3151085182267b78946036212409c7949e7e4db2f60647a361468e1e6960a077e8e8c0c8480812ba589b95b92f24bb3e021e7653af4e1b6284b63d8ea87712c35e0a298269bf534e9225a5cf74471a5ec6aaa2a1891022f861fec2a6ca581d9c463b1a205804c830dab55d39abfe85b1c7549f782609120c60fca20ecba80520bea8e26e904f4dc500a41767936433f1d2ab2b4f7c00c20bc64a100b6eff9a6e1402c82e72936a3249b1f27bc2ba289a602167f20b928b44ef39d3918dd123082eb8ddbf929a8f33be6b01e4165c7d961c265f20b650bbe2b2a42487193846406a8159b6dd9fcd39cce88103841620b3384ee66946454f1fad1c3d1c441685b4fe4a13e43395b8f28e34d0e8c1a3870e1580c402d58e67d3317cf00fc700020becc48aa1c9e48ba94bc000f20afa5212b3a43fd22e26041057143e075d19d1cd5c291b9801a41586b97c62aa246a8ce9bf008415869d0bf1f726e6f4bf8ab7a2dc5d6f69942caaa24fe3f9be4ca82cbfa6a2eae9ede4213aa708cb0041c59d7a71e3b6d4e71c9d6229db9499c42b31ad450620a628858486708b797f26905238152787924b16841420a3288ae5302da261004414afdc5fe4b9faa55d73f40e16ec30c1c8080e748084025dad18c42dc5d13b140414664acfd655fae9872101f289e48ed357723cc7480ff40c12b480033b4cc002139041821670c01379c926154c4773779f63646410209d4824fc75f577104e74153cabb75dceb9e4c8e801b289a53bbbebf53d4def9a48d7936ca64932a1ea57e6cbcf8d6e625240060826d063471a3954c03a4030619245e2d62cc730f9cd01c8258ca9b4248fde3943710062894a5eddc9a821904a1c2f27d3dc545302f5bc0b7f9a824ce2cb922d4c704f92a9209238c378668bc6bdb528c7c8088e0af0500f8c8c44a2b2d560fb164e030412698921f6a42eb1b209f20866dc7e3c46c301e28864fd22bcf53374ec6006208d2869e6cbc9a2bb74651b0d1e8030e2b4d9d09d794903641109a5a16a5fa67cb7e401a2082afc89a7e15f4bd23811888f58e5209b639007de3b7420a2cc3c7f1776e6f01e3bd40668801ce2d7e892520e2a1a8638cfcac91a5f742fe7668014e298a5ca937558ac5a70f4701e84b827cc4d3486039041206db2d94bcecfa931c7c848192082606725a3bc9a6c256d1965e8b84120de17f7bd3c6da9eb038822834931d446c9b1df1c3500f9c371257532938cc972e387728a58269335f37eee06207de844fd3e59ffbeac77a4a1038d1de0687534f850475ba7d6cb738c8ce800d943f6593d9984f679bee8c14a72ecc83c6b9d36e16103903c14dd4e6d2abe678d273cf0406eff65704bb594c3de43478e1de0e8e136b8c351f249199314cca535103b9cf5ecef52dcbf4b5a072aaedac876bc74a2d221c1c3e7de901d17d3ea207328a5ef37c78c6ebbe17833cc408341e4c04c7c5eca9dd7dfc63240e250924cf8e0f944e1d04b7cfb8acedcc9df1b4c6b25e78baf29cde5206ed8ef5aec32b436f07ebd9745552f43033d78a4b1011680b061f92cfad22993a377e0805fd03b5c05107801c81a5c1fb1cacfe1536e0e440dad2729e9638c686bc981a4a140d070982b1373ce354db6819c612f11d14a56819881c84cfeb5b932e7dd8094e19852ca311bfe39c6062183a1d2ff7cbe0c903168f98397b0675b6e0e1031541840c04002902f1488175400d20502e1c231daefd14ccee5d1640b205a00c902081660007205102b805401840a66daf9f4cf9be3ff9a82fd756234f9542ae40422053a46a789a7d3b52b0012854647d5aa2b50f0673583e6fa8437c6b9da75cb9e43870410271cb6227a6e752680348150ad37db50a53a9d208030818c4b5f29d8ec6ff497d0494977cac7379678010288126e93834ed68ee74f9f84722f7e90a06d9edc54e53942a27a7692a45f9dde500f408c806a9242c3e7d5d12c83142195e8ef74b38c9731c7c848e20210225462569a9d8b714cfd16d818862d51e2ebdadf5ed8ac0d617032255f497bfe6a053682619789413b8489c135c9021bc0d02fec734e41b5a7d75fb8715387f61b99ce2b0c6cf82213494fc2f6ec777ebdb8666376fecd15fddb14d8e0051afd414e4b737f1cce3d6ceca23b49b6ed7819a20d5d18ecec63d4b5c9355930d8c8051aab2f27c2a67d521bb8c8a45df3a37f8b52ce3926e9db25a484b960c3168ff6dd586588021bb530e5d1186ff36327cbe5b0810e1e3b6cd022a9509ff6b1e299b8a321071bb348f2df7c7b7245cd8b54604316b4c6f31acb1075c294071bb1b0010be6256b2d3f744c92891d6cbca28d9329e51457336cb8a20e5d91c9d86885a139dd4ba4498e919109d86085a7992685be9bb4a0093656c10961a92d6f3d3e7c1baa305ae5debcc7ad18db48851a6f937071642bceb2818aaa3e7f4c42e7882ccfc6298accc9f2e7e8319a98b4618a52364b25892e4729a86049ce98a9396bc3618314a5bc494edd2812d3b7ec791235463f6db0218a93895322a926a5977a471aa12886d954af6c95a176b0010ac4c3eb4cac959039cbc1c627bed32be1fddebcd26ac7c4c18627d66a0f63b2891eb0d18962d29c3786cecdce32076c702235a1ea7af2b63eb568a897c118b0b109466ee3a7d6b5fc8e8c54e06d68e274d517b5cc623bd716b0910953caef4e2667c8a91e137b0a266eec94a47efc1c2323362ec175ae640915e215ae1e3c7cc78e342cd19f3437ad2555d5c9a9c42af97a73c19343073628818668a4c97bd95b89136c4cc2e4ab9139a9ebc7d89b6043127e2e3f495eeb6ccd351249529a2da61fad4c53820d48b4c97dc5936d5769e703361e41d4aedbb867d55f4d8e91111ce0683fa3073d1c916c926a92e01af7938dd0e5c54d2e6ab219070e67c42a7f6533268b3086126e3fd8fee6f48a584eb00d32eabeb527e2d3b3eeeb0b15723522d8fd8af944322c7e6c1ce2caa41b259aa624dea8c386213e494cd8ccfe93639e0b81a7ddd53452c955334264b9a1cd2d2c3cd2c03188e6c2dc4ad8ce2b956d6043105ee8baf8794f6a6023104cb98d4b8e658c310608772f6a0aafbd56ffffc2c61f4a827a5ccbb1496f1b7ee0d7f2c89fe4dae84399abd35a1d962e4ff850320d7996b7dbd883b1dad39dcbe538e1d7036da136e85cecd4e9f350d01ab9db1262f5c74395a45849332c24f73b5c17df4dd8ac9fdeb40325c57c3e59e4a307eb805c96f031fe6939733a3c25c59f9c1da5b4e273f87a322dd574aaf6590e9909f14967fd6d268e037e95e3b286e1f099d9474aa6a86bbe01cd9273e8fc6241c275838d36381997e94366d99c56366c9e3dbcc672ac77bb062c94eb6773cdb3396f460f1c3d76380f1caf03470f1ebec3861af014ad27d3e5cb576a1a4c5a929493fb8f06fc6d93f02907b7b9cf40589cf7505a9224ae190e5b358fe9ddb2e4b20c6dd68c4d33c9706aea9c2aaf534835036460e0011398818d31386e51ea44ad5f31510c46e77bdc8f8cae49300c5f7ef4bc3018d61673d7d3929256f805255c26bdc2a955ee859357ced912223445bbc047d369ab1cdd4e920b778e5dd0d07a0b9b94929caf732efec7394646ba0765f460474347efd061430b9f2cb91699d94bb2b350a7fc9d31fc678d2116a814fa6162909323b32bf05115371f3693e78f152ca97d3299bcdd3a9a2aac9e997a96722e93a95084af25e1c56fd32c53f8e438193dc7afb9b148210ba5194d0c5af2484914f48d7b71634da5cd41a134df774ba4a938644c52499a5aee7c542cdaba193fe35bcc9f023f2d97127a537495afa49ba9f1d097a218cb3f7b66d8de9d1449b71ee4f43236ef515c1bb93afd1b33d9a2306b865993f259a839149985872e3906c56272c9de7f962b863f61a8cf1eec34c9a527163f31c6c7b4136b344d5667512ea69cc82cc6e092e526b8bc1793975d274b6ac27133d9f298894ef6f0998f35678298e8df7c7db7a29c2478892e32ae6efc2c4127adfe39e97dc35789d24e940ae651a24c17d5193ea6bb6e12e79c0a7fcf96da374964f253e27799bd5a244ed192854b9bed330689652c260b25d9b9761e714cf24f8d6c1cf17d4e9599fb44ed4b233edf4b4beb0c265f18c14c6967ceb6ba5c5944251bd34f4511d865c4e87a5a7a49223af3606759c6241d117bba3026597a34b90ee1794cc95b65083d796dba5856992f444973eebe3025214e4be2e79f949735ca4124c969ecc32f88243689915973d67820f46ceebfaa229d0308dd4a4e279964779affc31a3569eab9fbb1de0f4fb97479ca8eb1fa3e1ca3faa57b684a69e7c3176f493c427312f53d9429dd98f05ef267ac87356ace94b22b23e33c7849ec18cc649324bf7830634eec5fc332d73b9877634bf44de6246a074feeaf310bd271c53aa4e2e99e3a7a924ba443413689969b2e5d0ae77092ce66a743b68d2707368d9b585a1c3acd1afde673f53d70d82bfca635b9a3ace70d44da4961d5e306af8294e7a6926a73da40b7ce854f617379860d7d685d759b14bb336bd0ae3b54cc179d12a3864cb031cbd2a9e32e69286a77baec93336f05d1509b309b71a7bafe04cfc059bae878179a217974b53275e8de08cba09a7c3d73f286a5109201bd9066b9a2e4da7f0c7d0aafef6392a7f7c5504e736946fb306cf126596d29979c8301f16cf1a424a578f60be5c6e489f925f2632f14b3d8a53e171f4fbb9025c13b9726b990a877b0a8dd1618933e8f7da685c4ebd1ad240929e9c942412d9cd4968498ee6001f5f90dedd1f34bce157cedfc3b5db9826daca0661af19e0a0f5e52856a2ac47bb2ecd1254705a4324fc564be9fd74de14fbdf97f294595eba49050277fcc1329255a17052dc97531d825d9423a287c22b6a9e2279063c28a469bf9d59df07dd212f2629b06bd09cf6b5e09157c4f8a33e1b164a1b653e860e9259c49ecca332ba1cbea97520c9bf1db24189fdcb2f569eecf22a1558bfdf1239471c3ff4e4bd29c114e133f6c38bd9aad085ccee2de9722800825e1c40f6e512e99398c73f5fdc58f27c487c2383bc495052d18a570929d7c6e51530e30dc4ef7f7587962fd8b7c7583659f6cb9f545d97f4eb375c5e4f542493da9ecc593a0195ef061fc7a4c92fbf45d7cf11dae1a5e79eac2fd6d13cdafdd3d2517bb45a9d494677127b860b7da47a365b7c0c28927ec64b668327832c132f9895f8b524da49f95a5c89d16c5bd8f3168d858b3cfe2cd297727616343ebb2e8df2fd36bb295128fc556626cd1a0164fbc61610ed666d2b859c9fd8aeb74faf624e9cc6d5710539904cb39c6edb61587544b728a51566c9225ed12c273c6e82afc2df3c9ee8bffa42aeaeb947646df521c53b1d9a4d77dc7f20ea202afb9d29091a1fa3bc52985989062d9aa345314f234af5b3cfb24a6144a74c7ebca9e7c32a47863a6e9a7e7b45a1945513d8af6cf58ae135198c92ae58e26a1b0662f96e72adb1c1406f7f4d7719d4f9072769572fb9759c713ae74b2aa109d4e24c52499b75f8edc9c2035478966fe1b73bf09e37ada44cf7fca714d64714563e87ccc5e67c2b0367ff94b29691813b7c495e4cec57d97484dce93ac5a4b707a6297a66825dc94e93b2a48093389f1e4af663e7393e8ed4edc142d75a54d12e6ec9cfac822619e885bfbcd759d038947e55d43896162fd08b542e5908f9d3be80854dad4c6d308e7534b4cc53082cd587942974a4966118d260f694145581aa2debe3a64ac2462bda099261222a2acd097f4cf5cf1c41ca2182db72f13638872a847ebdb7c21275308d572b37ecb62e6902184a5ff254ab9e7fbf82074b7ee1d9374d7b420122a56684a319d760dc4c93549424bae946c02e2b418377db363a9f987e7de626e35f9bca41fdc5c6fed14f6a18d1f42553dae628e0fda064fb285f8ca496c0f9b89294949f0e8e1b9f47e2777f2804b7af6d11cf6d2c103275a540d27fb9ca8b943b2b59e874a6f9270b1c3e3616f99b9c9a752072e46c6ae73ec8ad3c169b330f11cac50294973275e4ce5906ec65833d3fa2989036fa2631f87435149484d72bdc1a8d531bba48a1b3641743e5a469e4da50d6e5af7c71c2a6c20739ffaeac554727c0dc7acb6179515f1d570ceb427668c9fc44cc3e92f34ff64b2a0a1a111b5132e678f99c933245525596d4333109f6ab9e92b03d59a522525e56bc98079da7baae848730c499b145fe2228647c2cce4b62461385c2d6fe62dab5c9280c11496cf3ec5b9ab2bf90219bd7724aec40bf49df4d21fa169a9a40bcb9e65d512e74aa5840be8a61e29493f7bf4b750adc91737c99e71f35ac084f217cdef5196cf029512d596db4e581d0bc5942183c7922342bf82e379613bdc5648d454a639b57bd92aa4b6d5d962b9f60953a1e865353af597ce29d4693d4949923d65a652f8d226afa846c1ea8ad87426149e3a49f2e99f9049db963ba7a58e9d408f568ab351af2636a112c2e4aaf774520799704a4d999b5376fab7043debfafd5c4a1a3a25f09f93748ceae4b225a14d61aafa22aaa386845be5aedb3d9a183f477835f78ddf07b75c31c21bfa5bd39366980728c2fb27275fb71fb40310819a59bd6eb794c49261105119b5eb62df49228c5f4a767fb591772b184b6cbcacfb8ad201e3d434a37997464aa87e8185fdac1a75e24754be406e93245ffcbd485a95bcd7ebd9dd796157656bc97c17a755bcd3d490eeb82ef6d068675a628a56e7a24fc24cddd4b838788665efca079d6fd15e79a559bd92e4d816c68ff3255b79aeb9b570b74cca7c79e6c24a0bf3ea77b889315ee92c2c392793c4abfee4a52c48cd50a298b120837c66c81c75375864aea53155dc8beb5e61b7878c8f1d6d595778b57136a6856eaf15da65cc25b6bad789b1a24de26a952406957715891d23e3864d1b26471506aff89d43b77295a4c29c16adf18a6ac2a8b8dc7292e63cbd9ad429b68839bf98efc2680a43fefc5f8e49552b45962be6fd65cd2687e84448e10091519c200122a2e01d668821120a337e0708ca28c30c0d444004140510f9040e1d67d410f18402443ac1a3072e0257c118229ce841229bd0048e4c9451862a4004130d10b9842578388f3412914a50a28c3294454426d143452481009148f450068840620c9147b00e1e0b107144ebc08143c71918d0c009527043a4113acec0001a7e0334cc7081091420c208b7810d7405111059040f4524402411071041040e04881c62002286a8215208028810220022836080882002c1a387f6e001883fd810f1437b1ff8b0870288e8610022790811c1c31d0c2062871b22751011a1c31822739083182271a82102870f9137f03880881b4044da200011361440640d3c0820a206e7a11b009134a081470d913398410c91321840840c1f2263188088184044c2c083d68143c71918b8011a3848c10144c040b6c5b91443af8f443bcc9081c817f4add84e134dd2bc5403225e48fa122d25cfb9533c47a40b7656ac57d83549dbfe800817eeb8bdd0a16f62ca670e1c66f438c19b61061a677040640bcb45bddb0c25258e470b2e10c9c2677a1676ebf99e2a5810b902895881cfdbcd74d7dcb94fa40a987fe57137ed1c16a682c8141c4f1b7b5deb79318948a1d8572f999b734cd7464193f75419a58342927049ee4e8ee5181931224fe0fce26cdc93a343c409224d20138830a196400111258824410409224710318248113ccf2a9d1ff62576ce31325201083c40022244081946297a1eeda87496d34718e6180fa197a4d7fc7e30eed8cf18f34566671a187f1e4b9288fb8bc56cc82fdcd81ee3c6941f537a427c8164d97d08bbfbafb81749ee2987a81c6ef9ee41082f76efa9f6ec2352e52e4ed93c2b99876b4d515d7c699ee52aa32bef5c84e042b73b19bb2079e59d0e426e617db215f1296963d86d5192d3858b3aa1b63d3a426a919c53e61993555a5c52ae98c2f4368b2421537d0ad7b924786441eefb8549c65446eb43627149c67e8eb0306db6c9e56141af37bd438708886c10f28ac5c3eea7c76829c58f87b8e274569f2c97e489b548086985f9dec35975c8741959f17c9770a9bc2e9845002842c82a4254b1d8c917c327fd41482ad04e2564864db139afa8682f6ec99e264cd2cc5378bb561de75cc27e3345eb115fa942c44dac00908490526026cf89c143879f731221a430e36c0c27685949658f2244147e474d69e2b249d28643510c9f858002518b5262f03899da728c8c64e0045608f904259710a1369506c85081dba075a091813c8478e2cc4b257886d889c43f13553c86daf4db04423851ec9f5e4ddff9e0ed26084f274d56c92126c5846842d5b0fb60fe25dbbe219948dc206972ef2193496342a9b839d74917a24f0db984d972abe1e9848cc161468e336ec0fa011ce8c0f11062096364d62d77a8125ab47db875a564ba5142bdbb17d934f9e7f91c1a3209777be542545b2d58728c8c844842932edf94507724588b5762dee521a149292a86ac74097be07dcad47c55df32d683154a77dac4186f3d9c8724f79293544cb72fc64331252bb2cac2c654efb009ee37f1b327864ded502ee12b7d73b97e9f755836bd78e7241d923e8c999872a3c738ce01572bd7ba64615209ca21f31346e2cf6c43be385c9b04cdad50a9730f0ee427b93777de186bb537b8135312991bb4f909d17f978e196b43bbaf75f2682ad59e0d9cbe5ffa5fca6fe26b683bc7bd8949f614975103b9e77366b949929369387e6b578cd4b08d2968f8c52d6b223ffcfee40caee6f4e21222ef9922c63003b929995e5a133cc5cd1865f86adda4d6b4933aad19639021ffea0e6392d015dd1d630cd725312aaa7cda7f1703d35b5f29ade33ecd6130c5ac28529d6973a8bd3006188c93d3d28949f497b50b637c21354142f746367b64bc608951d99a19b5a9ed185df09310ad196fa6a26a728c8c6c610c2e68e39da9b36385121d630b76f0105a2964c8730e6368a1bc7d928e4999388c9185f63cc868ce8c8185377cb44bccb70d635c0109c90ab75e913131368c61855254c67d8cf93ebdaa82f1e7979bf5b2c5a850cabdf1315a49d13655c3185338476e05d5ad94425dd2308614361336e336c86ba5d70c6344a16fafba7c4f49eca90c634041bd30d1e3c99b1a6226c3184fa8c5d3f3b2f432a79c804973ea9fe40a26e53746136eabf4709171266c69cf52dc4c347109b6c6f23be1356a12ec3194f05a6d854ed2e58c2601bf182d7582b6f76320e1f51599c818734eb1e71819394257729e5af0ff8ad919c30889783ed34de972a1e138cee000192b386314610c227819de6d2f93649ba40468b8310c5e3ddce6e59809dc1046d6e1ffb1796454c4609c4fdedd9c16eeaad931850e3780e1e791d9cc27d3e1c62f8aadc143ba9e571ce9862f988aeb1d194e4bd672a317eb78321d138fb1af9c401b6ef0e2cde617a7be337a4c93310135dcd8c5e7394d76d236e953ec862efab41465424ceee6f807377291f4e775c2668be16fbd818b82948e7cc47dd00a6fdc82b494d91d738c3addb0c5f1bc73cbb4abc5b2d1a2afe7f4456afe062dca0d9363273dcb54d52cd28ff32469a21377c9e0862cd08f96925d5093dacb8d581cac53fa53bc9d64ae60026bb8018bc6a6c40f630fd6d13d58473b1a2730830b375ea165c8cd513b53a7eb7a54c00413601cdb851baec867d62e3acbca546f85e17d829a89352b9cef74559524257378156ffa2859ae62a1f55545311b278b68d2b259537103158c8948c6ace1b76e9ee2fabe8d1df36a34dd1485ae8bd7fc3ffd6f29923631897adeb13c68a4f8e4e82a25a72f69cf516c3afdb396b42a324714fa897bf246f594cc8622b9c3ae6edab0e9b2020ad36e73d235b5d178d003c78d4fb8afaada212c648eb727aa4f1a539750766235512d8f9acd731c87708313674f9a9805f37441db046941a3df06134df41dc5b28857b44a56268c93353658cce5c80a269234643c26934ba4f1a7d1628e3aa15396f072e3e8991caac4ba13538254706312d49f70d7497a8bf12d92784c36c1e2e644a20e256687551edd240f09ac2ca5e9ca1d3747fe084373a8c7f4c611599cf21abf4e23cc0ea90a0f37234ed12fee3ec7f6457711de869db96479fa6256119886bd07f54c97e39a887e73fe0d1f3536348a88fc63f8fc9d5fa279fc107f0a1953ba7a91f8d2106abe0f578fefbb1b166259f75026c95da7ce10a2f81c4cb0fd714ba11a44d9ed45e3a42cb657220876e3e60593e2ae250a04e519d366499a534b42b80108352715378dcb0f25e60f47c959728e0c1efca4f8a1b729317783ef945440b8d107f3da69ab78c86c68f9603639b8c5ab8445f5f770907b933e3a6a49747a2886d656a567959c3c0fc7249f256435cab6c683f59ed9848b16e5f3dee116ad24e5b93cc12ac50ec68868642eb50e495db21aa386cc3b9f0e98e495f39e38cd81ab4a7264be6d3e399583ab59156eebf5d26b71a0f434e64fef894a1a1cf697ce9bb1356fb03ce965fd49f24586dd505ec81d99574f5ff26d30fc798ab85c314ecab02171a3262d93bb06eebd2733f4a68a1654436f494c437b250d696636c1434968b83d05cdcdf724d57b06d373ccdef6f65e35f9c10d331cb6e45d543732b565b84186ba318637456e4c16c34b77ae0937c47025497ca782b7669dc3e0658cf7943fcc52749270030c8686ccf9bccbd36afb8592581a3bbbc4d456392f2479ee4dc9ec5258a837ba408874ea309d56e17e2e50d117e52cd457b5bd85ca5285d524bd169af739136ffe2c10d21596f349de38190bf74d9574e3d12bd0494eb2f5e7137347c50a48f426df510d65425985a4dacab7e82315ca8ac1a3c4cf99c2fd55724eb5eda89349c1aebe4c9fcdd7eda328184e77623bcfe6d90505f36f5b8a1fa22768d29f4cacf86afb9913ea944d184ff997c18d267861c7f2c47c18d3d308379840a5bf8b3e6a9e74e4252465296fa7ccc4e186124a702309750309f499689e2d7c6e1ce11c3b662a7952e2adbf6104ece41c5653437fbc9c61c68d225c7797fe5fb35a487f8308548eb5259f52a99c0ec338d136dbd5af263c00388218c2102318e7b24c999d35674aa91c1528230d3372a86064044702802588010ca3480963671d2cd83704317e517d2ab3305e425a54ca20862fca19a7de35fce5386f2f585531bdd0f92a6f3188c18baee4722e934aba20c62e7ca9780bd6299f18d3baa884bd28fd9f440b62e4c229cd8e53a6e1c2f5b471926fd0fa12e50014c4b8859d69faea3c7b7a308720862d922ae6ac83a4b4de2f462d0e537ba7793ae7e42f2dbe0e6582bbaec7ad7016bf895fcc175a3ad2238ba4af241d9975b6ca582478479baa4ad277cac0e2e0c92ec4de9666f31509de72928b94b8e230162e6e92b3f8394ac10e1390b1021e88d18ae3662e77dae0394f92156a98125b37c638e9c339c45885599ea36bb08c18aab8b3ab4dbc1d31d94ec44845512d3ef1d1a5298f0a52e386f64cdb298e1393a09dfc37987d4ce14de655d68ddd8dd10b62942259ffb016c3f46f4c11831425f5fc3fdb588c517452e5a8bb47134043cfc08218a278a5a4d9fe24257d4d8a118ac3d38289d9afe3fba0e8a287c6982465cbfd13466e8a4e3526d6df9e50ed2c96507727b6b44b214afc67e7041753d5a4baf2c775135fcc96bc72cc99b46ac232cd1f45d6764ecdc41fad444d3b3d9d1013e60a9649b40fbbfc25303fcb9e347b0afab184622764c7ac7c258a2e557a952cf7e43c25eaf431b75879cac4fc248aa84a57498c240ccf9d614e3239ba9130a5ac97bbe1afa602893defaaa9ca6998c923f0bae824255f7fdf11dc9727d7b3ceb75723cef5687ed1b92c4acf08bea2a9deb889dbf922f2d237293d9764d48a2073f6145e353edb89787a4f65bb4a92574544257ee8cb641ee260f2a51f170d41f95530c12b045b312777689d4c3942249672f2898cb9fb4168371d7f32456e41689975a1eac3327e02f1e76c529abb183603e2d4c1aea7327ff03f25e98257fc908926dc686a3cf9a4f441d9f0d51ff13925091fead1d0f56026554ebe87d2aee5f1aa5b09c9f5504e72d91dcbc35e17f553ec565578285ccea26386cf89fc0eb97eee3129c58c6a872ca38dfe8f4f9f7c1dac24c7943a351d322949eecef01cf68ab2cb139377af1c1ccf2406abeffd76e370ebb97fccc261cfccb17274d555f30d8dbe746d8931d725ddd066adbc299ae7499e361c35c735854bb301538b9d24a2c3fc49afc14c57e3d339b7b349ab614b799eeda44e03a6399c67ce85bda8d1608cf367a361ace37f86d55bddcdba4ad4de0ccd893d992463c9de65f8f7c2c5d19b0c99fba6bc1a4a4eee31b4bf11ad39fadbc66258b4522f523e431a865fa74bf0cb8221cd1725e1d6e1acfd425ee952f3a317fe9f916e8d268d06bb70565ca99d9c24eb8e0bed782e3113db022a5d1f2fe4d36b2da815be22cd6429390bfe87dd4b9269a6f460e198ffa6662dd3e6e60aaf5aee9687d7eb132bb4267ad8af185c3255857e837f64cbd5ba54b0fbb24273a5b33885edc3e44f675e0ae5e8395b34e9281cfb719296c43cc450783e8b86b094497d423191a3b931bcc6ac13aeab9c395dc7dfbc099724989cd34656f892098b498d666e8946710996d4992dd43d3bab0434e62aedb2d75d93e0c9ba793e5fdc3a24e0b184eebc1aff99239cde5f9ad543d47546c0e35f6aefe693e422246f5aefce316210c18a6e77c2ae49e70da3b7a4dd2d2599a4303ac9d2248cc6a09d128c42cfe4e7f60edf819174b93d229f4bfa24bf386492ac88ed14545a5f709a6573be176d8a7ecf92e68516fa31099796c4dc2efeb4292f79dc8c99d545c2e89c5c95be2573415f70d594c4154f292e4ed3909fb6649abb45d12ff2b533485f698b3753bc59965019c55a2c77d937156ec73c5a14ca7c4dec7833a6cd82ad4faee399c967597022add36e21e1c6028fb696653bb0c074b5de477f85d94e9e963ea9ae8c2b1253bcceb339376d925674153a5df7d5ba97b222f173c9fb154d36e9d2552488ec650a5755f1e52839d74566038d45a8c40e43a2a2a14828100a4461201030b87a05c31308404844248d040291589ca9cb3c140000492e1858382e24221e0e12120e8a43c14028140c85c28030100808844241307b10cd43499e0351dcb475a78d9bb6efb479d3e6efccf60bce4367fba78d9536af6873a5ad156d78656c53eae20576b9f4a63b365ddc74f7a60b9beede746933776c4d712b91833824017daad96e47ac280f6aafc03dbca1aa221c9a0aa398726dcf1074fa879a27d3b15065468b682d94ab94052aea4d56947f10d24ec93a601fdaf1c85a7ec5764d2cfe80a577e198f344ffa1c0f3c9fad403b2159e14a17c8914e55cf067e52413b4828841d401ef6e644797592eb1406d4eb3794b7175a29a55bf9dd392506686a7a0cb6a5b0afb2ed2a9a00344a428c5dac80c40415f2b429b89f57b14aac50018b19ee87cc292be051055802602c68bd7b7aeb4c33a5b2ebc94517da08473225472047d559ba27c4391caa7314a24d376d8d3c163624b2a1b6e6a2b47ef84c26af3dec46cc15acae8d494a62f8b85d3195087871d0ea6eadd87eb4b148d62ecf582ea5a5f7aa880152b5a549f2029d5c6ac482f9e8cce00928f961cdde613dc7fc8a7cb98700d46d0e810f4a6f5f4a36a03277be301645673f455f462c418c558aa53a249036874bf3e3b4d271f797c2c6181aca5be77f02c67bc7dac62c65daf24ecafcca48bcf1862fb05174d122259b2a1e15d3364aa4644f498586420becbcc2017b01af079448fbf3ce8d65739f1d8cfb97ed4b3f709e18d6b7bd9c5dd83b225eef2e1ac2e76d8de89ab829bb7c607efe67acc10580649b13c3eaf56f362179f98dfcb8835f473c0fe9a01df8581609819e401f58d6596486fdd46bdc54ecbe9ed742298be582ce962eec8031b4d286cab45ec0061c04e6dbba15928cfe8631ba9b69baa5daeac61435a4e88759daa81301db89b5b852aa92b6320c824cb184a71fdb5ac20286daaa7f242f53d8964dd03c05b82843622f4833c0be9f8b39e183b2f8532a41a9c8a3552250bb1f1a7c246bc5f024d5b9e6db9cf7c3cd59b1c768e6290f2f38a80d95d3f0d02bbe9ced94e4b48f38de18fe43efe68dfc486c81988c31151ad1295afc4c2e7578505d06dace17c9641825379506e0b1776618a16e2830eb1c7446ff6b543b7127221418b7abeb528fd30ebb3238e51287919b7ce3758e6d09e7e1f80305a631cb53173c7edb3fca141702053bd1f7c3e5d84ed6a886e9974086fc789e87d2e325e69bee38dd015d6b5151905ddb1e97585bad9ff34f1059f6b0428b89620239c252970f5706b4c589e56008cc9c19d6eb45d2390b6b864b59970051282203907a52ae28a2a71ba8a5b0e138f9b2ca80f78fb5b6eb315d17d3b6e370252dd843e514544d96ac524c35a23676c327a6a0298672398c06606f0d661dbdfacb8bedeca336c41c9dc121473cb43d808513063908810ee74cf4fa1ff6a50937bc525dc708df2ef660b96bfe0d5eaefdedec637d2aa1d1655b0b560c00cab9aabec70cb01de88cd50aa1f0037d47b0a95e7aca745a4d7f58cba18df0fb2fa497a7fad59bb22eb62c145608994b91578dd67741179d62bd02b1050cc1fe4aa3da648b6995e3ef39ac811f5bb61a2c12907e49a011d304ed443c995711c53eae46c023952df93bb49b37081d7704bc54515573e073e9e504dd0d9b5d8aee8990deb40259bcdfdb1a608b94c50804a37cdfb7f2897bfefa3cd04a3495669dc3a16d68b3ecc15c7d8ca965ff4b49bba3613c35874a4ccded0878a04762d4714e68a11493ba95e91622021ebd463d053928b5a93d26e3110c4e6d0614f2e04b119a89e93ed2dbd43bbab20a380c8297534504e11390c6edea21858c0b312cd817bf9ca297fbe22719fef4de8badb8e165d12360376a09004c828334304b32c35695335a3422dc266bacb2832f74bee871c640faa2ee8ba24bfa7025601408cf66990e967bed0c3876e10d9baed7d86947c3a143e38ddc50ecb367a63211e188ab1865296596f898480c7ed32549aa24b930b714021b9b4c51adccbd9397a1d7b948ac8e4565834e328519d5bdd2ba4e2dae850c232c1728eda5ed890a1bde7d55a3374105d92090ceaadc18fa34be1afa3332f0862b3e4a5cb8f677ec78cae1c57953de7d1d3d127ebc0fa27db7c6d4359f615fdaacca40ca460a7c30c1af0fa46f25848407dbd447ae29ff40e42348663c7916f279e29cf7a7c32c40f7cec6111ebfd154325d49c5b91a4a24a0e43b79b58b5202114489cba5f25eed548170b2bc7f5aa88bfae084854597f9cc4d73c88243e030eb250b2c7dad39ab384e27955990d1802dbe6e06280f1ed79fe2984a48eb948d0b2b21454f1298a8fb62a31324270bd5718cde91c11bf30b8e3578942108a61e9a90473d4ed70256ffa505c14ab132564532939064981306104e4d284d06f967be35c503a9f3eba937d13178f732d34548376c109766ccf119d1a205fb8400eb7e5f7648ec2884e2d2c844b41a84e5a0362c76e48184dbeb8cbb5895407fe0b840c8835067b372aa74c01f64d9cde63e10b1d3b4b1cd3c2a650c0eb45334795845caf732fa1a2b89838b8c7fb136759b431634829f1b05baa77bbb628c72314dac29e58680ca5b576fbc6d51f4ac086905c670908684605bf0eab2ccdb2b7bebb5f85bb58710300acc6312125e53d19ee73dce0c247e2b5c8c80ca2182a45a13aa906318b8b9e6ae96221a9278e197784de1d5f29c78a099fcad7701029682d4c06172f38d3ede89542803d15939463c5846f2b9f0ea14123489b7b97bf9965a0fa70e155cb85a3c305c7c59ab4574588531c5d07b29042649f57090d68e5e9babc7bd6663d5d223d2fac1a557f0597e40c61b7d28aabd1141f1370e0060987fd5f89eeb3b9a44b6fe5bca7a77c4ba17cacd24c4ddb02869ef09d95878ba30efacbb3a9221c31a44c4d6aea1d5d8f0c6b8bbaffde350daf8bf5e5444b90d506b7f89d2adea2d0b1afc89d88db2d04db5ddda754b443b3d2aca012a65aeb588df544f8a785627a94a6403d4d913181a16d94aec3fee5696278ddd9e37207cad4a0e63659314a706237745fd99c63ac305c72d1dfbfa85150b542ab5ecf9e73a28afaccfe566d6f13e34023cbfdc5bbdcb3362a28bc5ce6d965a35253f22b77f4fa84905105f9eec7a2ebaf92927134d0181dba552a5e05758059a137d67821035109733d22bbaf4cb295ee7a70292884e89b5a388714b1eb6e0be75ab2161d59d27dc101bcf4afad2a8a2ad1ac060a6e0eb4c0186e72c3daaba280269a30200c0f9af1b73b32b1bdc8ebe4e67a5987652284325f9dd7a47f44467c095eaa801e28e97c7be129919d8b766e511f633798f21a474d752bd74e760b405ee3ed8338c4e9ea45a066f5b8ebe3762e95a5ca1b5176fb80122d887776c77fa7c9b006d5d39851deb04bd41555a259053ab7b109e652a7e8a8bfca4efd6b6fb3cc2f613547650d1a2bb9636dec13bb04afa2bcd20fb7e37dc4bd991216bdba872a37e9bbbf05e8d523477c85f781b29f041728782cdc829878b773d225989831586d51e96345c490163d8f2d1465714cd17770cbc66a959a06878ca4f98893a45c506734d50d4ba8c4e9503cd85a78b4b828a7bb15fb2d6f13d399257630a5fb81b2cf53c83dc505d4b5e8428f16aa6840c99614f47c4deaaffd48cf0eb8a7df0b4747a6730ca99324ed966aba6786f0ce83a16035545740778582f586648017a1721ee3e9f471090ab60b9a5a5bbfe87d648bb74a6fe1927f6ea768db0950a53627185b6a45988a2fca23718bf78d53890c540e92b754359eb9ab032989ce0cd2a38b736c344c5397202f54ea740fbf3593526977359f1ae6a5c7e7945ef95310fe701e0b99ff94c6d9a08460f84c54d8f6f7af5ee9943a13676a3643120939af1524a43821cbbaa5543c8794408a336596bb074caa503d2d3656c9523fb7606739f2e8201e872b4e34575b33f8bae96107e9c286e61a4002ea1752b565568df47d07498cb8c9a20ce9d4b5d1115274aebb9967cea73f3bd4f8d182fa6f28c836041d92d0834b549e3ea89c5d85350c4f33023dfaa488d2f078cbf9e94e78771af5a2f792e5b4cf1d2831100b55858872290b209c7b8c11acbef54d98a82e41d1ee962bfed067eae1048c9ed4ff89581d0d34d043e7ccb617814f76b3d7e1e8cf482d133d9d74912e89954eea6e9bd1c60070530c776578e2e4097670a0f37cff9d5bd131bf989cb4ac47d8852b9c306fa2007871e324ea1575cb266f6837383dc92675771ad921bcace171843997dc763bc3c1b12ae3f8b4083d682949d5d826153c10785b994627b348fa25eeae1d3c9b4f496b94387b48b84bee4b4b1d50750ba113180e8abbc9253079399a835791cfe941819487927ccbfde188b44cea32f2f080e4aae24866d03bcaa96a4dae5efe32442478bebdeffb2203967a40f3c76b82e5c8b413b0d2c34ba7ade28c07f5048ebfc18d19619273ba2eb44b557fc4881b9faf72e5d8b0997a1eb31531ed8a90e836ac31e7643cc85898d8b357331ba69958a0b56ec45ebcb6e1824afc1b480c5b49f0db054d6b9c1d4c9ccbed6ad29f99618eaa23485ba5765bccc345cd55382cc04c4cca766a6a6149e643c66c9443c418275924c9e0ab5daaed11bbef178897dad28e88b0b522764955ac66a0b3c62b4e62b4cb23df813e2a3f1e6d387f4a47aa90dc17c0bfa07a0d17d04d90dd218565ca2156662af583992c48da632e5b6b8147e974b66ed3a0bfca24258ed91b252ba1cd2914de724d14ef017a1efe1ee5a108995fe08884236e800870d0e08bd5a7d5aaab2b035016771a5e0fc1aa7ad8c1ebbf2d512eb66e10433c34a208ddaa658f361299d64e1ec435f98c07532af70e2849d4dcc34858fca05d30b52635a3f598734450d6b21e456b501f222d3857508f46a8d8e122f8df6b4e032cc96861cc54861ca9cbb4d0323411f46b42b45d3c66a5befeb4325666b2742fa38136f1f1f2d290ca3d811a7d3070ead31e5d4e55ebc4a1dd7c7c47ebb22afea6d23192146346b97e25e48a2387aeb556606038e74d4c6c986da5574c65875abfa394ab55f8a9ec6dcf522c0a3bbe6605723d6067cd65e5be93de8d16ba86ff08ce55fb2a5b13aa4b6aa2d045ccc535ea55067ee1b47dd1e1b92f5d234fbd3c116d652e303c88db553b57490e965f68e188895fa175854b6b92c9df5683ec135f9cd23ddf206677e17d393b063e067d7a66b3a8c06934d93da80394daa70e3a2312a1c68ba632b3578c9c009e1126011ec7ac518aa9ed1973f15b0558948b9da4ecf85f701cc422d64800572ef909bf4769ce94e19ba3acece6ce5246392166d69501accc318a6371697d05428c423cbe4331cf18e306757568337b1719b8ece3b924af6fed20bd83e9fdea47ac4fe0d3e640dfbce206170541b2ca1e5d3dd2a8b2cbe335c22e5b15b1bf27c1b9552df18a52ee3978a6535897548ca685272f1585e254d31c4b858cc549f744765f44c64752e730ef050c43c648b09f024561863d4a3d05dba78b468b157a24202f589cb864f32158f4d70b6c111cd76576245b144a85a5221ea8e6f61c62fa03c8de7b28f18e3860053ee84c70965cd40625e57d3336e498035550b160885259cda005669c09548ef92ef810c268d859f6fab8fb06054d63a713b60e03a2e0f9c5c813515dcecd41a991041513b087e598d411715d2c389bc6a1697377bf7ac36d8bb4227dfc8c2b47f2527db0dd39f8be37a8b560ee628d321478a1b7e801875b9e19c8fad359c033c101728c46ba943f218c9543138df7a8640ec9a2584cb848c325a21ce15b5f9c862fc425229fb1240e6a0599401f6f411cd40a738738eea2b8af65e60ed18cf8604deae545aec6fe65f4c787417ed49f027625088746653c0230f543252fb38a349fd213f3879a5f628928480e78667e5601c9319a1f75112734825f1503c3414615cdcff02f0a44fe9ab43809349709b70dd9d68bdbd8bbb690f20d7b9834fcd997d1fccacf88c46826a5f6c0cda58e347bbd0f92574cfa4fc58124f041ea23efa6e7978aefadcea98063c18c54cd67e7d555f5a6c7c0bb070eb31d2a43962072a71961698da98bffc67e8a88600c67f7f426c58129840c40fa560d68bf7c2a0eaca5ed50d7b72a2cda5a4e8a8bcb4de87521927469d5cb9919a619747a291d991a83624d57d44e71dce022a842fdec83e70443d73b6aa133b1002b3de6af2ea92d52eebe0123aec176e286464e37cd9ffa2f2ba4d4c98b7f3b2b217c97a6b891852f3b584afd9cf98955325e0c2598ac38e53b400aa38cf9f498a810d353a25b55d470c139b88c8a770d3d0cc331e6965734bb6c533c5dcb4d4b1b2a3b9abe367682ceaa04fa7d885f349c553a7b2ca7820de8059eb57c48de1d23703d66b9231aed01403978c3f44afd891a895f24c52fe87a3f3d93ee291aff429287808bf957f9b87c559932fee081039a7e0d0e421a664ec8f07845bba84ef4c119e392cb34bc637f7b1a3bd00108f05877a243de7640ec8067c692da4d195e80f7316f1adbc2ba4b107d21fef011027e74156fb8868d37a4744773d464a6fe2af86b4d4860c0c9cd78d41024013a9226673622ed0d1431a1e0c13adab256ce8588148d54088a84104bb002c708164829b28cc2222e1a7a28dfc6beb18537cb9708547028b712e7ba8385af9983ca4d67e8ced652f0c508c38ca0836902c4a1349040c40dda2ca011e131862543cc9515008fca917ce0849f0b6698d22294c334a4224ebad50ec98ba8689e82d5c75ff6a5a4a9680d81f2277b2da65942e08869daefadfd3c5e6cc797a3030354ae9dd43620192756bf03482bf03126ad2f6982d564422a4c5650367fc08ce907414284d6ebb7a33429a8d33be01d9aac73cfff483d1da1e6b83e9b3353ac7d05bead762218e32bb0bc842567a2571d31be1c8ef462b5879dc41eeb640828fbba5f6b4fc88412bb3abd2c2d1758e637a07a17f44c9e38decc84619ca5200d7bb61df1faf1c1e52762446b43e041624dfd2f3062dc11bafbe335423414aa1f04dcd3734f74813e388f513d07a62ec0608e6c763ba990db538930e4510c143071c86459a3a0f7062a406ed4ac0a8510384ff24bc16d5ab9512f44ab98fab5ca348d7796f2a57fe7e5e2c6ab77046910da4b77cce1389f44b9f66e6416878b858faf572eb8282c5c8635519be648ac45757d0ecf2b9e441bf31a0038c7a9b64e9cf6d35bd2defa73438053fddf46214ff27158333e329bc210f983891497ae925944a430bec18cfe0b29dceaceeb402819078fa043184f6e0e9232811bc71cd9ba3a11baf5acbf0a51c27b2155fe99902955d4ab7b6bf7f9f97bfa71f2472eed453de13cf673b47505dbef6a3835c2934100d27230fbb8d22e930146856d3b42f12aa7d6c5462f7d37da8be4b4b0012d84a7a81ea3015ca293c015e1f3979b50a26d235e8e1b515577b89a977c253c23deabf2be0edcee911dfd5d989556185044c132d3c2d49e5ecccaffe4f5dd60e53610b7b06b863a333af7293027a892c9654eca934683e200cdbb2b08146e984181faf33ba0d0a63b1fb672b7e1da40f5ac9f0498c65e51336909de398c9bb7823c337e51dd36072664d3dba4da561e10a485e02f80092827eef2d3d9c8f8f866c54909de94563ffbf513edeb914966a1a8200be5e4a84605e2be93184628926f4ae0f3997656ea8adb77ae6b5a9907f64619ff8eb67949e5ad349ac7fc5cec4b3d20f5c90976aeddfa7650be30b51df111a457b73382aada6d3a6b0bf8d0e38793b204a1a8572c3ae18be0e2cd2b7de3914d3a2cce3936b9eb76d96dfa08dab12e2e6b4c35d9111a67a69cd2589ffd500427b785ff9cce58c7f0f272048b01e599ef34f5c244f3321d519c83fe9bbb59354b224dc9865916c1e7b95c137f892a949a5f6e8797fbcf1e96838e7246ae3509098fed9b9f18a3b8265bca8ae9baf8290709fe1bf37d4695993f11813377e3d23ff12f4bef5dd5a58f6e594cb2d59e03ade2cdb0472a583b691c87c07a53d05aff80d37ec9593fad3ba99dc0f0f8f16a67e2c244cf44dff481669b2e764a11fe4de9c5f2c1ed29f9a8113d1d8d1ffcbd2a0d617ca5ac7abad61b243462714c6a8ef1bb17717a372e865435c8ec379be3432f38e4d2d09ee6715007c4b5bbf941dbb4a8d1ec9b1f9424028951ce9ed5cd5e3ea6015ff9e082b4507038127428d2fe6aa48c193861d3b58489efa5fb0d7b74dcdfb06e6b58f867c949ae95947959c1c593390ff248b6149f0825375d5541a3f7030106111e49bc15261e8cbae10787af2484a994036e568aadce111ff348f2fcc8e77b51a2902d2234ff7a68dce20445d85e7332c7eaf3744d75491b5afd4cab5e83eb346cf78a27464acaa3d7371597ba577416463071ea153a077258f1f2d93cc91b4335360d57bd90bfa0db079abb02f50129671ec33b92f7e02b588e23c9da559fa220593a559a6460a33517a6acbaad05b565643948ea1ee64c50e12105a6a2aeb99b171763a717900aea75e0f94263a174ac3d626e4018491329dd5305f625aadd9544653a233be625cb8e7a38910400f9e26c08b507ca0d9d8d73a440ffd87eb11dc07aa25ce9ffe423fa5bf6a42868f45b66a9b4642c596f99221f2055ebc33a7066151c477f7f35a83db0daab15d9b42bc5f7f5e2e4339ad74618ae6668b86ae8feb32df89987810fd1a71df76f21629a5f7205ea814c583f8326572cd8bc3ad8e450c5890a3540b8c952ed8049c4b3330d5e51e3c6baf2e1ec3e2cc9b03a270927eb73ac50928b4e41b52133c7eaad3d2deb713d89134c410a06c52cbefc85b180d170c12d4836ce628eb3c7adfdbc7222d41999fb1b2941210cd44e4503fceaa9e0753d9dfbda3bf1717a10b31d54c09e8321cfbab6153d3596b38705f84b634e059edda05572fd80d4c5a8c3ea4f32b6bc3a8139282eb1d24612ad7528b7d7e753873681bd94e63717a3e48f57322fa796c7dd262c29647e1d2b2bc32bd66b754e49ed9d6aed109c3f64482c3ccd056e81f025bb30855c23ce549cd125c256e9d9e0b34dae2f64fcebbf2caa73ed4f0165f8642800fa840256526a0fddd80461f2e8df47f8c5a316d031da876a2f71727dc4f0a385e9dbe6bf5ad72f37b3f60bb96f529961502b939c6a4ce90318596387b572401b4f782b0701852e02eb4757ba853543a7b04722ef6091265ee01c9f789d5a90ca0de1889cc6f38c07b2f313be58e5f51e6c9320be258190055ae7cff1f883b1ccfc8b574d93176c12ea4d5100dc73cf8c3f0a4a202e77c2115ab3d1d101d3d476e6ef19d297c3a6dd85c839720ee46894f6d2fc07c757d77c96516b1c06d07b6cd01a7b03603d2d86de6eec9257c313e1c3cc89e8ff166f49fd6f659bdf723db090e217ef23a303d231070ade25dcca81e6d83e76951fb849091767fe9bdae94459fc3f7e20e077812a307683adadf28243145e4255f90c4f37d0a7ea107adb20fc4149925f193035ab9a9f8499116ade13bbd1680d907b201022ea014a0ffde4e3df82f014a16688643b10f89e1a75ba8fd1d50a589a3d776c1b83e83db6e4ae4765b0f6edb1f92eebfdc15f0da473a707e9d7890c15189be91e13cd5c9a1b4513f6c7fcade2a068086b8802818b2c99acb062acb947302af4943989f7d3593ca9992a99fc80a267c1c2f70c88c5b7d8bcd34fbe60da2bd4daafff73050c70c5ae3a61c52f936b8bf3b2d8d161b3bcac5f74de77f48c665a3864eda4a02d952383780bc331570ee3963448ca0e06ab962b82a1d9b3d2c9c3ac2389b55f48c9ae02cb9290ae3da75dd15c2aa213eb2feee589aebec5f2ec8427026b8bcb06b169672c5c6fc19d3e14bde4f2e4f120554a45f8b12eead20f5a3b5817c9e40639272b94e10962f8cf5b209d44b224ab29880ba23d297f3210de66730cc4e2336c5e07a8ac320e3d550ea40f75c0a899b991a62528445290a1e5100ea43346a6eaa1be1eaab5c87478712e9645876e4bc612c92adb47ad27840dfff5af7e12e43d7242ae56053587394c4c9e1d5f77b09ed87de8a105aaf8140c401057bb617e56890514246cf898adc4080a73deb68d980d6d92682c8b4942b31d82f05cc73657ebc3b99e3cd3038e169129f208dc04a38f5bbc6ff2c76bd6fce1afedf276d966abc3fd63164e632005f5ed852a919b6cba96d06c2d597b91a359c43e33459d899c82539f03856c190de13fedea53927a43fcce8524e34361c33a095910ebc28b5719e6d4eca5ca71929cb773008cdee55803e1cbc241565d04e58c45c1ce4467de893f64c3f726f45e1c62348f0800ae711fd3c084e1ff8039edfec8d6dd6e804b83c8efe25d07eb774a34a8fa623c220bd9690532418d6e527eff01604cb92e2ece6998221a2ccd766c5bda8c120a8e737589dc0789a604bec5286191802ac89e032a8d762b90cffc2ff66df25eec6c4adfe497de58b6ae51552cfb79c8b0626ca9018daa44fe8ea967b1d29c59fac128ac96b8027ed7e9ee445db37959a171af2d19ebe2c2ce506367ec240c147f396b3ec089dbf424d97682f94c58c3611266531885fafa2ab9687bb0f204d6dd69059771ba5ce8f52c3c01bdd3839f9a3a89b782322f51e2c3458f600e6d4e9cf96bc3b7b373ef01b70c95672d72e36288332fc354287ddbf9bfc2c5c035fdffffbc1566c25f3cd7b9da9cf58c674931476cee9fabe514e0c8b7166d6f789b36b78570436dd74ec13f773489731eb877cf6d66de34fced0a02dd5f364d18c27a41020c25d87e6c8212a659124bc54f49263bfcd632eb745ee7da862839a187c40f6e54f3316454b5251543f611e41bd3f90a659398a77d4ba2fa48099f2b416643dc0a8af80c2c86ba8443422e5f7ad0d92e683c93d045aac92ed7c59f840f84ab5a754626d57da3af496d00396afc22fa5151640c39cbe670a6450e794ab80f8503e09e5e9a0a3ff4c8f222b7d6c52c742c1559b1a68e9c2563377c45d118bf122325fa1a17d8328c50febb8584462428697d06408ec710c5c45ff62ad040abfaac7c0d78e3f33dd1db3c8a0195dfdd20d46d29bc329013a62e5cd428b33c20f599e3be5c279100cdda737303a85219895e3d1454b09a0fab8f38bd2a799b40bc473c09d467e73b020cb64573571fbc01cb9ddc381ad56344ee262afca22a9e97e2c991bcaef80cf48fb75826ad031a71ceb897c7c80d2e992046398c2e2cb6aff9fc902fd80bdd54f47625d36e6528561a74f2809e75b99df17d5d3f877f97469dc3d7a748bff244d14e665a5c2189756850e8fe373bdfd89ad61c2455c0d51068a36fa452a11366ff6942cf0063108580428b809901dd29ac42b89414d38aa2a061bc6a1f01b51993302aaa8bc0bf56a10107356618a686542478d0bef8b755726d6f46d0a1fe509aa0cd610c42500a77f4eb934c9ab6511b9834baa43667046c702b4055612e474e39f725a5fc1dc7ed2ad2e3e73a2674afb1d6afc4c14c572118339fe25fb67b4f13e803f8bcca286dfb19db847d02b7956df41513ff43426ca9f3b3e9a4198460ecec99c3303a37facb24c8aeb233a5f7214c7b7648b53988c6c285b44b092c103bd963eb45ac7ec5a25e9da3193b5e5b5fed249b37491849c93ddd8f6f6dc203fe6d82d77ce5471bec09fe1ed092e42e557a6312004a229202adc81c9477f5f5041428adc194e290b3f7908d5b0e24813ebd7236e42dfbd01ecc24102c8dd560f5c38258a9adf7a1423996dcf4ff166ba58a5babea1e37c52edb27af948600c4980afa1244ee98ff67f8e55c44e5c0d826ae565b23196609a7110b155ecc74c26bb25642abc7327da9dbe3ef1f7ae727006f999054c086b12b36faa84c50aa62837f48ccc27144a1df4274c578aed603f9da93843162c7b20ff41ee5495a2075a76f883b049d8ac80fcbb3241877840177ff8857e17e1e27a54ca92b7e15de27da6f15ddfe75bab1d56ce45b57557423fc5ebccfcd09bfa6e23f7cb4aa7eacb5e1b709831e0da8e4c78edc9e7b6f479b544295474c3df737c0c5053ae67326f22cf029a61283a67242d6cf5391a1f20c7cbfef219ab5167b0e3227e6e44450efbf582b573d28223abe4d203f554707bd0463e4f4a6b021713cda6dc152bc0d1695150ea61f6e2f5f19dc3a08b84335ae3f5ccc8da6872868267d45d8f54eba71e02dc7207aac579b315dbff1d20f6bb3b159f69da9c1360e8660d65e63227d31f644c0bdc7303dfacb423eeeb925972b2cbc67c9ebb2a5233bce76e16168623b4908e318ee3d355f74d3388a5b3f8aefc29b63e64291505bf18617d9b5ef8ac1a7afc5ec360889cee000afe50590b6d54e5fe555b5ad092b83f027faa6eec68b0562571d3fd95faadf122221c67a3b201b0b5be2b89108e1ff4c4adba688091efab781cdbdbd5a0062c3d94a50af8adf291b5c90a32abd7773ab5eadd2d6445779ec748732826b40d874553661622219c0dcb3a9d8e2d487e5280a33c35657c51e3efaa5d1b942da15d35338fd172133991681af5191d1152e0d9f53e4ee62f70a5d56987b4588baad78bd0ea6aae6b025cd30c00678fbb3e8f05a9d03fd87696b7950598da88b9a586b04d7b1061d8bdb57db7756b4f4506a8ca9473e5824de4ceba54e4adeb2c516c652dc30001a057f45c9d95a3817cb9342c4d419df640b9d456291b3a82c962c62962e0b3a15373715582855e8364e2a7c72e3b693fa7ca13c3de2e0939208e5aebcc6e4437f39adc61e941aa505ec159c17a9b3132aa18278382fe89190a2092efa07473d397a72dd1e7312773fd4de32643605f5c18a1a9c9b3c26ea4959c0d98ea552a898b8e449aa1cab83304ce4495d07b50b012b4f1b50332ea3847c64192969bf15dac49db18cdc6e744e9e840366a42484987b1410576d524e9ee8dfe32b2f4f83ae136041b4e4651872d62862541e5788d3230f71f1d842720d3ee6a311e5082de61085c6544e3a4b8519c84e09832b4162ba9e51c140d555f478162c50909864d4a07e8da003714bdd2be4d0081578ab4935871787848280bb167851e687e62fb32264d7d186fa9da97cf9042a18fa7e4537e2be3327c7f98784d3ee40389b8e00c7653b310fda3044aadc524ca02a12779c5cff20ccbcfa2dea11e1bc6ef345643b6b8dd0b774b4b121a419b3cd32584bf315f86ac6e73c38538f1938080d69a1cce6f480393a6966428097811001c8ee2f3db45562b761c5f138f160f636c9fcf310f2be16a977f0c5be6cdfa5cdb77cbf4d67ed77e0e38287d0aa2b0145c133e124d43cfbf5f1c207081dac5e528f93e8dd129fa364b654130bc31c6876c4d2a4a4e256aaea30862636f07f99137efbedfb65aa5f4580d1b5b2101ff94b28668148be43028cab023ed0045a0c3550b0a49003f3ffffffffffffffffff18f66f59f5ff1fc20d29295280ffefbd776e92b4e90017ed42b4d66cbb050000885327be7781c20c900cab0b5fd8afe3157b34b1cec3e6ad2cb11d74b822d56ddd1c19b742cddc949eecb0e298b4a4e8ad615fd15d459584f6b89eca9f528e2af84edf7bd2f6a5fd950ae5272bba8b56eaf987d0810a274cb4b3944b0c9d2ea7d0c292a58baa99e28e6771b63d7367fa5224492d165116db7c4b7ad0410aeb5f3e46cc33678ca3b8ae049f6fd1f0b697071da220234af8b80c5fc94d82d0110aa33657d8868bcbbc83c20f23f6a6735149ff44ab167bb36cd8ecdbf104596ea5afba49f7351de8e844a2c8ba75cd892c2575ec3f392246c72608ddf15fbb9c9285eb2438e346092cd0a1093a9bef9555584921ebc8c47d1f54fec673ae9d3a30d15c6cdb9a9421a3cd97304576e57462a4d8e62cb157b08c123a2bdd592ae1dba9e84c7db06442e50a1d94d04c4efc96ad1232ba93384ecc9318ec9384672edd36256f92448d071d91d032658a41eced3eb4637440a25fed143a6ff0e0b103848e47f8d331f171626c13531c71cac5c95a9692a3a31197f061c935e594995fb43f00051d8c289f60a1c4206aa3296442c7220e23a7676272b24e0e3a14b1f75aac58e29af0bfdfe848c49b395bc5a373637d4460529ba57597b874f21058c949b68f399d94a4a4218e195d79e26f0a91605a5275f527fd0909f109bbf9cca441ace56a72ec6c8c728b201269918e1ab473971688c65bd6274b633f49012239e62c9df1ffa15228091d7f58d353a8d058b26e17840e3f943d176ecdb3b9967c91848e3e2423369a62de578508810e3e9ce5a94c4ad9eed8039a83d8e66cea8888081938c62083026774e82111dd8ec17bfca289d141471e6a93c9347252b64d110f59ca30ebd1652666ee061d77b0dac4ba73664ee9e43bec80968d49ba495209b175d4e193edaeb45f395a52e960cc38e2d9e799031d7e29690c5391ff75c8a188b3da28267e445e3ae2405b0c972e668dd99a75c0c154fdb09bec7f4b2753e8788316e424d9daac3f0d75b8c1142e7c8b9f95a8d51921e3037ee38b31c8e86803667fe1637ef34c990dfbba5928cb686d27bb86e2453f85734b974c540d478d61e97b9734a45b82b5ffc71e4046094444cef019eca0030d449ae5cf51577fd51b008021749c81594f92b6474b09ccd061862d64e78c7b7867ac1d65682e560837118dcdd38c0e3290713f79e84f428ddb36e818c375972b2176dda0430cea89adfba1524a6403c01f3ac2c097f55fd498d34107188cddb5fc13f9d1a29c838e2f9c7aa3c794342d6f9c1a80820e2f984d2cc1253c47e26a41471792c4ccc4ffd63690000d24200309f80e2e1851dd6d7a266fe484828e2d98534ed5ce087b13762d24d9d9cc2473d6d22a9080157464e17e5f3ff51f0f13662cacf9d342e65998f3e415d03c4b9eb27ad44d6885e42fcbb863dda295ab821719f3ae243bb6a6a4a0830a4be764254999b2d3af5370a63fa71c4e8e1412132aed4e36ca5d2e0aa675585ccb241d50286cc5e4d9840ae2270c848e27a41b956348580070840e272464fe9df390f9414713acd8964b7c2e645362c22569c8cf16e9121274226a4fcaf98f5f0931e8484207123a8e906466f997ca53b33d1d46f8ae3ffef7fc6deb5484db4283e6a06307113ad031840e2198a4742183bf496ca41d413858bcf8b49d6bb44ccae800826da1a52f96c68af1ebf8019f729c506dd941870faab52c594c8a56e2d95ed01e7453654b528317b5d9a9a56873178535394ccc291f543232a8a10b2d8fa7a8286daeb14ea0462e8c9ad17031791ad4c04559326967c76042e5941ab750347ba6acd9c28756cb10c3bfc00186096ad8628dad8a17929b52f25a24bf2664db896587345283169ce49541c3da78c8ce2c8aee31aa99ed25293d2321a8218b8a05d580458d579c6d3d49c5a093b65f0e32c6b8212252c315d48a1aac28afa62e640a9e65be0ed458859d3ff6ac77c63ea9400d55d448c5b94e6e4b12f3bacfa0e2f2b0dfb97b92942c18841aa748cc10f9f7694c83dd354cb17588b81449b1532bac44772c515238259794619a51b0de638259653544c189f527c578e7dcdd8f88018686c122220fc0512314669c12ffd29a23a0b8a4fd2dbafb232222353e51c3135775bad09c4e088bd99107e0c091c371e0d02fca20e3469751a31367f24dd7e0849f3656f5ad8e888884b16684e08b32cad004888820a2c626b620f7d9fddedcff1c111111112903c7186a6802f7ac295d6634222292861a99f0e34fccb6d121430d4c28a7fba79d326fdf460c352e71540ab19fd25dac32f9a20c1c65a86189ed927d68e97cb29718236a54a2743fad268b881a94f0cd2d5bbcd57cbe1943d49884e94fd2b3fe8aede133e2881a92a8e6a4d03829a3d214892e3b89d134797dff654424113520b1ee75da06292995d48d88883ca2c623aaa079b2657ffcb7bc226a3842ff74b59e711ba7f9226a3402f3e47b429a74e1fe04123518f14956cd7a75120f6da40109784002c028430261b0b7190368448d4558e28b9924e77b0d452455cea9a204932c3d23a34622ced149924a82e54ed7895103115c8ce33b19622e25491bd438c479d1dea4506176e28b831a8648fadcd3259dc57013fc1a8538a69fb06f62386a10e234e9fca4bbb2786276a4c620cc9d6144c437d5e631a92108b367739ead4d073502710c727268b9fb14c407c4953177988a3f6726ff87a3e40a3f5b6599673fa815ae1525957c917a1fb67b8f3107b3ac4ce27cf8c2675d3cc13de095d352d57bafe45b0fc6467a900a9f3b76ce83b72a25b4688c87dadbba3ff7b2c9f2dee1f8a9cd63ccd60e866e0daf1277d521adc36adadea326ddd93e7428659dd3e91843064dce21cd92ef36a7e478dbc881b19c7d937072e270d987c69376752e0b872c4c59cc36952596bcc158527fa820b2b1a173c32946c49f47ebd3701b0eee63b2e664c28682bdc69e99c91aceb92429d283ff7b4aa286d533a593d5ba35c64b1a122f75b3776ffcec1534a097ca3b951c3b4352c6132cb3ef95f8991992d34c4af37319baa4d6d2913b962643512564ae26f7adcf1848cbc9c374470c66fe98315fa720155361480ea27252308d2a8b4644c0b07afaaff495263dfe5f384639a9ca5859a5bf174a671ed398698899bf0b7d5b945cfecf85e44b8bd697e4cd71fa2d982a5cf266d77553ac8546c2a6fb663779ca66a194b94fd834ef97b7c5423966b734af73c297e815d65422b3397ede21b5c29635645d8af12f68a70a7aa52bf324ec05b90e15ce765f1b4de157f69c82293446ac72530e35a550f7c92dae22669bcc281ccae41c3d992c2d354221b9d960d2c9957549f009a78f49c66c8b134e921857512afc748e358168b524e47c79dab498f046e599127522e3bdc6128893f55312a3c921c75402afb5d7e97fc11a4938e4bbd395497fe2eec8d740427142ffed6b9ed1c98cc0a1c611fa70cb1b533e07187aa30446b8248be84bd28ca6cfc530430c306ea01e78408d22146ae96cc2fb2c7aec8c1b3970388f210115d420426de6393456700d9109a3c6107c7bdd6f4df925236e400ec7400d2124e45da552ef132d0f4080073c80001b094880153304e0851a416077af2ca53f793628a80184cf2e535c2f132b753c7246186594a13fe0dfe3e63559b655a718d4f041e2392516d97afad188c81966ec8d0424a013408133f88c30c600410cc600038709e240a317565c33cb6e4d7db1bc00009a408317a5ce5312591dd995191af88088c8031e70c68d079cf160dcf01334e0022339c0404118ea1508001168ec02fb9eb9d4e4f13ea7c8a0a18b4d72b3ca495af25476bf001925e8008d5cd0c0058d5b942d4840a316440b11d098c50768c82216b078852b5a913cbd57d77a494ec125d060c52a3ced24ea2558de8a5e15a590216743995966073b10038c111c0aa8410e72900a1aa8a0632651a3d769689c2251d5b5a42815a2610a347da4d59cdc5d25e5068d525c6210b7f6e87d292a29c8289edeb12b1aa338d77606133266095ae3808628ca4eeb29e38f6567cb19344261bc91d52ad9a4397d41d146f8b894cda964506f584044446ff817343e915cbad173924dd79df744579fc4f23e96ee8977e299e8cb694ff08b0494800627f413bdc206d124539261d0d804d1d084297e4972dd45f65b3a13496ad9c736c65de78806269ec62568588246253c4083123426e1001a92a011091a90a0f1081a8ea0d1081a8c309f6e0c365ad1018d452c7d52c9293c5b36a98a484ad798bdde76fe3a341241569c141f3727edd697400311eae592e5c43c87b0534253c939055391888621f6942b4fb2d178620a228146210cea265d95d3912fca0863044883105c94befdaff5a41e0fc2af0b994dbce0d1835b060d4190179fd274b66a8ad909680442cd183d9a786c769dd00044f579b22f5dd77ff623222223a0f1874b12bea4b21c2fabe5a240c30fa7bc8ac1f4c44744444440a30ff4677299ca984ed1640334f89058595617437f6bde4644443040630f74d6dd28bdae39e50234f4f09b1cdc92a63e0f4993614ce8986d513d1e0eb1c97392b1ee8cfd0e49e2e6af8d6f8ba7b61d4c7d3b9ba494c308da9b787114f00e26fbeb42c1585db6dd9b4e90ce138ab9dfa5e4ac67763ac1951ef9f3b009c9a93c58f0ae1e1364421ae7633e932c21d9e2a39c946bd62ba1b42b9ac5728693539250720b57793524b09ddba493ab23ac69d22ef457c6d608c65f67fe4f11da8f1d3be7fdd092c80044d8e4333957c6794e730f018d132a45dd8bd978b1c0004250ca524c2654b47cce8e888864c00041a06ef437dd3c478d6b00209c2af869bea8c0003fe83e67a9741b2d985b0ce003cea428cf0bf742d11025c68a335e6af242b198ec3a688c6295da05311fb6b7a4e8c2f09dc2a5387ea1d5ca8556d13d54c6f872d9aae0031766f5785331857bf4ae47f0710b224ace1a7db1f0124744446c513a8f906c0d8d8888d442bbf79cd9febd93b31111910f7cd0e2e4166dd53fc9ded91c1111f99885322689b2afde888888093e64713ac9aa3377cc8888482c94340dbb9fd41111910e7cc0c2102b8bb626fa0a3c997f7475a9243eb9c2b0b2926b52ec497a3e5a91bc16ad3249d7264c69e5831562904186003e56d16380618331cc28c0872ab0fe2d31855e2a21a71111113152e1fe859232d365498b1f15d86fc4497e4247d53ab2808f537c98e2caf6ff5193b42a9f1346196268e08c09e0c0a121f0268302222267ac0e3e4a6112ade33eb8cced9d60fc7f41460e0d5ce00236f82005ad79e205597bfbb94744441c8c1b394671d80b16fa7aa177ce1151bc376d37797dd7318e8888e4e73023146557cc9d0b2850f148536997c9bb43f0f109c237be69dabebc6be3f044e9dca45ef2d209e7ff739faccf896693e083137755aa69bc7a4ae9f21b14f8d844dd7f3d1aecc4be286be2f7f065f2889a892e9a24963cf261620bc95caabe771aa1083e2ec194f0dedfbe73e0c31209739fd91732954873c77c8f96f44afc2df04189abd5c253ae3add9326518e765df39fef22a12492727fbaf4e7d93989191111492b0c7c44624f5edd1f6b3b49e31924e8136354cd422671fd11111111111c5f8ce000e38b327068e0e3115eda0beae973436fa7011f8e3089169626dcef53da1f8db0e36f738a9e7a5aea0f463c7f63f349d417b1da5948489cec25c88a60bcfca4b4e222f9af043e12c1fe8713fc245ff5baacc18034830520f78188af4267ac6d347d6c0e416c2569cee6373cf96108bd6348d5d88f16dbb74fe0a310969765d9981b0c324e80820f42f0a9af257cd6068198d4d95e6595e36c04f1c99692e7ca747cbd637c04a2bdde8a174f28f137bf810f40b41eb219efa27f307b7a8d09b1e429353ff467671f8ebcd427569ea9688f0f260fd6317f3c79735cf6e0689e5c363db677727a50d2b2fb6fb55d5b968744bddff854593ce8b9625e4383ff89b9439e39c4fade49f248e5c30e5f1ad550593b5325c18f3a50295825c9eca45e8965f041074abc9f5ad5110040f898c3bfd732d6d5871cb6b3d6dd0f7a1c2a39ba556a69f80adf88195fd4008c6ec0071c0ecdb9d9acd262bc61ab585e9267da3429474444d60c1c6e284db6b47cf2ade6a30d779c98efd5d711119132c0b891034718222239c600c304310063022222221f6cf86d77d272f3b3ce5c818f352488f497d0995f442f6a30b62c25d9a9d3600c739a84ac1834947f31c92644654f31bc6748dad20d2e15d6266c1e7c98414bc1ff46b42f4355e61779a2fff6776ae0231011a981dff80f3294e6e469936242acb333f68b33c2282307189b565f8c5ce0630c6e97ac963ab32d25f10f311cac6325ab3485c1507ad9c2c6cfa59e0483e6977fe0e30b7e641817f18f6172f5e185b394a63e5143057c74c12454680da7a9842ff1830b878ee716d494bfd93db70dd8c087160a5d257957c464880ef29185f4376aa76f1e111101030718222238c200238719f98185bf676624cee43d661f5738839a6ba7083fac70e9947766baf5e8d98f2a985abd71f1635376fca042392e787ee7f8630a5ad4989d52e59cc7703368e024f032ce288114944e494c29ee4eaa52ef15f032ce28817e44e11fbbcb17da42e112aed29775c5fc7e7d3ce1509ad1c45cc2c73451081a90038c305ef0e184427bce9c4af5a30944a750dd9926fb55e88309541ef52487acd024efc712f6fc399d2cde33140564d8a0040cf850422e5f51ded444fff97c24a1985995f3ab4759ef0309684a4b89af17838f23f02613f5f16e43afe686df1841043e8cc06d955c29f5feafff2802ff174c9ccff7799af34104ade3aa95f0c1a64bfa18c2f93d096a7275f485fd218437e7c65d4e69366f7c11831b64bc0a3e8270b4aeb7d899c5ac0682b7316589e95ee1b2a71f3fc0ee7cc7ed62e378ef810f1ffc16f4ed4773d295c9462fdaac27c5abba53df2c2f4aa2ab4a868bd13189ee22934fe8b2f85d1749855f499a2abd8d8765462ea8954ea51924f0c045f9d93ef445f626d1c4041eb73889a935dc27e9bd8dc5c0717ce1618bbb37aba760e1dfd4631eb548daec3187f8caab257bd0e292542e9425d1e4a4242339340422222339b40c1191337278ccc2d0f724e6ce94ef56bf41c6171ab8e139c60083021eb230ee622af1a28fb79e239c43c5f822c70d306ee4f0884557e1d3259f8a12c386c5fe69826551f515d494862edf7461c3e30ad5fe75bb935c2761d38a52bc68dfc17b5654572509331b2b3c69569114533967a60c27c8a78a52734949ae98444f7ae2068f54a47e1766b64285a9fe7275c9c53209799ce298eb635015d1c31477bcbd74b2676beb9722d14f312deafa35ca1ea4e0443d6f4d13e23d4cc4f018c513775e3e26ebc9ba281283c4da85c7cb55d323146dae14f3559da0e0acc36f059faf132f8f4f7cb13afd495d723ec9e289725889b27827dc98e2cbc64c0a5f951379d49a55d790c726facc6e826ac9593be73d34412749a56332af07cf22e091094a0a5131637808cd7b60a2109bc4190f77794ebf043e227b9a16d6d2862c9155b0a9b18cf1a1b3221e95308499ffc7afb5d57b3c287187cbbccb8a4937ac33b48c2f6e48c06312aebc49c96d62ace41860c4c0f73c24714e397f6783b5c91bcd41467a44e22f0d2667fda74de23e222262031f03021e902080c723502ff13f65e8e7e188c6553246d6864b966e447561f7c493d0b1351ec3c5f030dc83117792b2cfa155ea2d47c063116fca6feeec29e7af4411c4c7f67978b894b7e29108dff26d7a3d96b8fb8e8888a0c003117d5f8cfe1efd98663b842768949af12c4ba391c0c31049aca8c72a292cbd3e028f421095e413b773925c2a09020f429cc9ad92a8293a083ccad79e18e2b7691c518087206c93ca84397127f3c581e863a6bdacef01c1092589eb49aa46fea0665facd5ce8b1f99a1782612e2e1872fc6ae98f9d3077b4f7ecd9fb42409158ef5e0c363394f4c954fac4433f2800a782001253081c71e3cf450a670f3eaa9cf03591fe6e4a495e5258a07242e77991ce52bc79cc71d8a2ef993df7617f0b0839d3d7c32397fe8e0a5471d4ce041078f39509663e5d9f02afea9910878c8c1230e5e9aed47918c259f8743d29752e2e5941693e2f18672c86d527b4b6e991cf170031a59412c48d89d9cb7a176cd59994c10c94fd970e4c9a3ad73537b97c71a3c4fa9973a7597e0be1a92444fddd3f2a481f1ec6db77d92a4d143039efaed5135c6f90c49c9c41fcf176cff4d7ae06186e48ea9a4e17280e05106e463da630abe65131ac1830c7a8449c93a467d10cd18bc0c35eb941693b72f066e2bc99eeffa3449a1063cc2503479ebe4e51982071876dd89dcec9f2fac6d992d8ebda6ed8d173e39aca7dbec64a577419dd971ebce936d521ae0c105c5844b1fc34eeecfd9c275625813e77ac662aa85e7b2e5db2fb9e387e49185daf5b7cecd3225d11b7860e1ac39b62b6dd132344af0b842a94e36b9c5d0f9b64b8287154af2a369dbe6227baf42efa5d1c4224fd536237850c164339e71eef498829f61b39e67f790022d77826a579c13e31b1111c9e1316081471432493ad92e7992436529c70d0dc10d0f018e1ba8078ce00105937fc59c254e463c9e506b926573d29d979213818713f2dacf29e50c7b34414be9c973477fe6571e4c48f2defa4c97d573958c9ce1b1040f2564c1a6e4932449c8137f0b1e49c863d4144eb4dada1673680e12f4c0030978aed33c09dfcda31f81cc1b3ac5d426f49dcb030f23f4fdb1b7d7eda64cb008ab25512c3d44846eae33ed741f825ec285bd93cee48aa3073c8440669f4c794bcc3227c70c8f20f89ae46cd3e48951a3071058d7b1389e3e1e3fb82e7efdd7b59e58ef040f1f50162c097d351f325a143a7ab1e574925ca4c68babb7b3c7d70ff55197d0b18bdef357ee9342b9a7c5071dba28896161a1a4d859156f42472ed0245e97c79c0417d4db6e4a37cd9fabdd422bdd5cd6b7b185b94683470d7e2dba19156dd32931b3a2840e5a103133d376e131d72cecb018db9d1a59202749b9c1e335a5b18dd0110b2f9974f2c50f299529b0387e79eb07fb04bfaabae78be629c18456eedb164e0ac8259c0b5ae1e299cba51dc4128ddf5d744e9f55f5025289ee2ffe06cb27078d1b8412c520259f1ccb5636c30d3289e44ca9e672cc1dc6e292a892187392f80d1209837774aa1c320824184f82c66e96d4120dc823cc2f6163969a411c9195ace7132cf36f5a411af1ca7a4e79b36af7f58c30c6cb4cbfa731d4457829a3587c6d1591bcded92d6d0549c49e73cefe3071b13a058208cdb252858ce1119043703a2b6e39e9648c8f01c68218c28c1e2a6b8a49bc985f9042104229f9f2848f49f93a0fc2a9e06a82dace01104164e63befa6e30f40028159b999a4712c4bae66d0c0c3503368600140309f3c659f5cc9928541fe70b00de6714ebd668c011961888880f841c9e9e01669e97266471006481fd8984ffb02840fc537b1bee34ccef5a80940f670097fd6667ef937e623207a783ece9994a3c8207930a6e4e3b649f4d2271f040fc67778864f7230007287b43fa69caa929476be1980d8a168e5a9d737c85d590d52876a7cc53ac534062074f092a868904bc24afb232020063287e4f393cd625a0e649494e4d4281eb3772a001287440d27c77e9e8b5a351cf41cf652f1d3a7509f37981683c65092a01b3cf1a4adcfbc4fed0ba40d9f5072c986d42f9d46edf9a8ab206b28ee62dbd8cc6bba05440d489ca416cccbd6929c064a5e8f5971334ab5c32068e0463cdfad44fdab06e40c58fc338b95544ca41a11110131836f3a6752cc9f8294a10831cdf9d73bfa7e10321cd6a42e7f90df3b7b44446404871961bc0840c6600c9a2c94609776a204021031f826750a7363ff1b5512808441ebe0d3994a73c363100332c238010818bcaaa826e58f06f205344fceaea2f1ac93a817d218b94972c9947b4dbaf099d4bd6242d47e9a40b8704c6ee127afe8c497205bf04f254afcab8a8c1b102d183634a63a32bbca04c9c27631598ebd15de9f8260213fd38fd57c95f97e902be0e9444d22f2f7c4b36be430438c08805861b5ab4da9ee979269aaf049ede2b1f602a142c1329d309964cbffd30740a660091b4ea7cf65b47529dc19cebbe48b92e444a3c0099aac4eddc490b98140a11ccd5906803cc1cedcefe14f25ac0671c25f3989a7592a9afe4d50b7725878cf043b95e4f267f695f512b4b6cb72a9298157bb4d513ba1fe264139d390414582d9baa34bfac6cd9e2368719d33278f113c93bca4e9494f929c22389a84729d92a4dc93086879d99dac1942499eebcdb77d76a110ca7cd95210a9d6fa8250b8a497b4498050a77ca351f149ba1f2cde1e11993d880f9255e773876ca514fa5e78157f913e2fb27c8d2fea77b3f72e6caf11ad6cb30fb62e2ea984cc1e434ed63a17896971ec24c9db7071e15f124cb424e6b36e6f4165b5dc50dd0f596d71cae9ed0a57e994d622c9fd368b7e9c167fc6c99d8d53c29c3e8b26e54a3a4f93c7d2659138eb1b7389b1e0ce3aa84589d1f660e1e6186f67fae7b6c45f41fc86d4201b3a277357a0a556278e75b6acbc156956f1ebbdedcb382b9238cbc92ecd98daab58c4e6d5ce2f3cc5aa60439634676e2a9213dd4baeb1ceb4a2a2ba4f6245d7ad20e929c8a89bfb98a2da779d9538f943598a5f329df0ba1fe332a440a36e58ccc151f052c24ccb559e7aa2204236578c5153ff4928b4d12c267e56ee9e80c2a0da9da3997c0299954a412bcf97144fd8b36935aba97d6b9d488e2a393fade6846aa22954de37f109bf59c2db25e1a389f35c92e2e4c41fb333d14ca6189310173f8631c19f687fc9973853f455c58d25ead02477f89c4a7417faa24d8ceb3229e189691356419e44720c1e3b69e96f3b9684b95662ace82291cb9ae872a2a6c40924d678b318ff2aee943c22d9add3697b788b157684aea9f229e520561137e270b27cca89f251f38c30fea2092b5317b25f449167152e886f98ae087368daa8f1e9bb7422927c2a3ed37a2fc78838e7f02a1a3d44a23d44a3592f5b554370695367c7d5fd3d8530b34ca78a92105a9242326c3388e4f3cbd651109b78da2ed39e9e328150adc37b4cdfeb424094b249dd9fb41feefdc1d213253cc406d10f9bc89c864d77acfb60d79bf4bd297c28ccb4dd435a1a73d2b0cfded8eae1fdbc7d25a5360fc725578fdcee931e0f49dbc5b8e6aab77e873aebee3a743b982da59e52b35bd875e864fde94dfda623d381f490e525db75e8780e5f6a69ebf66d6b550e2729e75441638eac983810d3e164d3201cdc94e71ba252177f039782469be664f73937386d316a3b6ab4b00dae49e9640df796acd8d0d59db9cba59dbf86af73bad199540d66ec248eab9e067bf35cfeb999d2341a144f8288949f749acfa0fde68adb9f837b6c06c6a4ab1823bc3eb9654053887cd22c19ce6d21aa95594bb363f0af63d66d2ec183470cd766ecf02177f2cf3060e192946135ee253160a8e6433f5ee60b78f4701643c6c9845ed0edb5c4d2aa73feba407a167b3be9e4933d2eac9bf349dff329a5dcd9c25d71fec162986bcad102eeed79b54c2cf1ad93853a767695cf6301ab2d4d531a37d25fe1f0146f637d227cb7427abab3d1f32a982f54b0ec93c41c3915ba2feda0972c7edf39052d0915a72f3b9e54a7143af5ce4e9913056a7dd2c34916554d28b431f8d8a525cb68f204bf2d26d56862b0ae38a11c17cf3249bdbda926e8fdfd1a4d42f34bc984e4cd319aa73c9d5aca2514d264ef75cb9f36af04732f09f39f2996a693e086cab4911a09a7feb0d922a4c7e2237831995c2e6b84e2a64e29dae49b132d8226fb31ce4ca70d1e22b8972b9688cd454d0e61efce93caf20ac1ec2793a1a7b267109ed4acf996cc9f3340f857c7a446db537f3f60a5f2e4cdcbcee1e4003ef0d64c3ecd572f2ae1dff3f86fc89317da9bfc7e72ed3892d9c56292943d72d7c572a95916d3b9387aa7f387933b3f8c0bdb4baa9817bec55bb1f377923ac6c4b6d0b2935839cd4942c4b550bd7225b9ce31559216be7d3c7dd9b85136b358be2de6d09aaf6e91857252bcb8a9120b6adfd35518b354172c6cdde831e68bb928e12bf05e13a54f770599e4cf159f561ca7274ed48977a859c15944c8b8e6b6125d8519edcb3a8999be3eaa3093a849055d626bd63ca2e20af77b278f6d5e93535095952fe7e3f963a648ce5153eef36e4b62a5a862a5e82555470ad37ab6cb122ffb866e14b9aff6452f1185593936777dce1c4351bc7b418195acc14b4eda62f14f142d66b7e9f5843be796a5e3a9c96d27ac9ce84ee171e28e2d1be32a969cca4da8da3905df9e12a6d444b6a15f9f5e3d764c265c8f7729644c245aaa24fb6b4a427a09fb42e6a0165bf3c95922dbe026745dd76b2a915ef29b9e708b5ea144525bc456cc599db549a4d59e6a6a317d578924aceeb318bb487c1ef639490f09634bbc0ce33de24ea76f9bae498eb92310f54e1bce773eef46245710f58aed9d4f9a118c9b5492c1fa27eb45a8593295d0395b32ac885c536a4f264e565613914795dc141626b60711886e49b2dd7988d452e72c29656f35c42a193bdb37aeaa2984d2c9bf4deac74a430834e9ee8bffef5ecc20d014963309fbf5130ae224660aebd15fc70e445b6327f217dd730e10e50b9f3449aca9777f20a26b2c6c5638cbf9e10e132ec3a856f47d4034d725b984cf50f9f09e78297b30a8ff5889c1ea32a5e8a1f3f049de0e4b1e9692072d27bf2ba70a1e949233598926d637953bec962757ae26cb15b78366b239291726e7bb0efb995c61972a3fd474f8efbd273fc3efac7338072fa1d55539a469de040d696275270ecb5e489b7712ae927030a7758d9e68c93a6f38a6487fde570915375036219b36d30683e7cb6b62c606e3c4640f26d8c91e5c8397abfa3cc5d4709d06cfa8159324c62c0dfd7f9b58a27ea7c90c0de9c864e76f0f79293b83ab9ae3a795cc0c6992e89c3da7e6e897c1cafdb92cbbbff24c06b7841997a9ba91790c26effbad128357a962307eed7476270cf7097629d687cbda80c1fc933d585c133e325f3093cc7e8edf5571f482d95be36e4e7fd2895dd8a3624a33ebb5fbb8c09f679a0ccf9c84932d6cc9d6bc4d2d983bfd94ff9b246c250bbbcb6e0add0a0bec667585cd72cc2badf80f5259c193e3bd4c8ef726fc55b026a39874391592b2e78aea546d923c053cc7574992302e1a96c29dc143af22220f408010ceedde974ed62586190141a0b37692a6d365a3b4110400818f1a63b88ffd0bfe0f0ed61af31627d539027c90b5588a254e8d9bbdc0e45a734695a426cc8b62f8cf9e37426bcc5da026ce46ed89fabee8a258a12561dae7a2141b3f9fafc7059a4c4cf18ded67f27e0b4afed41c1eb78575569953879789b9d7c2b5ac6df221bdd2ecb430c3d3253183d44e3d8b4f3e2cdab32d0b5fafce36b478cc66c7c21f578fb1cb86c51ad139a792bdcff615d65e36714cccf28fba22132eb3f7dfc99a37ad38a8543e2925ddb3c60a2a7d5bcead6d62a678152529e794cb2c39e65e1548b57ad07b6bcd735391c77615199fb82841855221f53a09fa265af414c78b179ded630ad5355ca80f97c2f52d396e4a29a5534941ce7856cb183ecbe78c22b1e73c47d1587d424714941cb37d9cd9cff66728bc936314ad7cfef72628d2bbd424899f4e92f913999518753ba58939eb09ef339d28256b3a91d9858c1b9325468fe184ad533976be89365a247a5f333aae89f7d6d3acdfe5a0f14c34d5ddaeb3613e2f26d89f894a713ec87f2ef194903ad5992fe7249628c750f2b615ac446f5a6f9b4f0c725248095d6483e59a7e125e46fa8926bd13f549c2f0b624c7e831debf8bc4513aad46ef20f16df290f5ed9cf33ce24e97743a0973fe99c411e71c73d65bdf0f9d3782d3f193937832c2cfb7295e932c02d598424e58451196da25399b4a22deedd5924d937cab22a254a184334947b67308aa73ce513b9db5c51822317777bf99e458a51067d6a7942f331b84302e67e6e6cc0661924543897941d45f72ce10ef7113ad40d8691eec9324804864344a7a7be6aefca19ca420b7f371c34ae5072efb72f498a2c9ed3ee0296f1ed7900f9449d515c37b28751243d2a225cd257a70274c2821255ccd3c58d1276c4bcf745478c0bd4aa78489ee50db48da86b1362f1b0736ec7038c952a326211ed8a883e396927ccf69830eb6efba74d0bdd9f60040041b73e0f64bfecb661de569da90838d387c9a77fd3697619421061838e0c04d485c55871fbb098c37685399cd4eec966d0236dc908425997e39738c41c68dc7808d36a839c8c97299977a9f81e680800d3614cddc9358593222bd51c6056cac81eb96933dc6d2083f7d0487196548c0861ade93227cbbbe01c67f11011b6928499136ea1e37f8592c60030d868a3f1ef37f5a62e30c87846eee949519aed8a73bbff7ee2769a30c693abd946d739fc834024236c8d0fda7ddcee9f2aa3920b031863458b06c2f974db4170367173bf736b34f2b36c2d0aa26bff034ad98a90d30f816a35d90abbf505b4f64df694ab26ac30bfdea69feecf35a93b7d105f592641215fa9d84c806173ab5132d35f5b5a268630b269f168b9757de724e60430b74ee97c49824e5d925b091852a688abdb41362aa63a1b839c92795e72b183fb39b3eaa15123a4e74ce7e5520b7a375a5f950c19acbd5888d2998355e4a827d8e29eec58614cebae85be285dd2ecd4614c8241d26730ae1390b85cebec24ed4f4614c8c8d27709be418b75bdb3da63881dcce62ee7735c1183cc8a4ac6cce25d960426f6288d72d511b4b282a844f9726ab68920d2574b29d5eccb59dc9cd46128e95c4df62ffebf7470225e79c4e62b752f0f0111afdb6be5a318b396b04ff25f4de2e5b04a34bcc3976dbebe510c1746116da395dce3784925455d9cceba4a41921f0d94bf8f9143d730e4253d1e3faf1639ad801c124da4da4fcdbf599fcc06ccb502322d9f041331ea3a7c7a0a9d2fdc2fd468e4d43482fba0c254706771fdff487f0c2f3bce96247eba81d8641c82e34c9ffe4ec4ded25bb21bac8c34b8adebc5f5f3f174c95cd97965c5b9dc245f73de62679ec1694b859f56334ba435b98eeeda3d734bcd2540b2df7362de6fc10fad38210f18aa92bed5389dd0899051b73f29cf2e45cf66571a7ac5d19f4d53ac6c42297fbbeee7c6952906d10028b620ecb146cf5c4d4f3055e91ac492ed9fbcec3e49c32425c919a5096534ea90621ad3063f6da94b6c28a53538a5292d694eca91921ab20ba52794ad28c484621aaa83a4ecea291c111920a556c2c891bf6dfea8a11820a3285a532fb124ace340d424e71fb4926a7983432083145c2486bacc9ed5d7e714829dac82f998b2d73b92f21a4c893e0a94abee36590c124c89051785d499eceb1f755ce2044145dcc1da149b8d2ed958c90501c4a4325dbf741418e2531a3097dc827884ee641735271bf5802ec10e2893c6a98d6ecd0bd7b12d289436e6bd906dbfd1ced104e186a5d62a237699f18b2897310abed1e9d05219a78e24a56ebad98fdaa904c94425de5549fe3fd252198385a966042cf6d2197f04f4edf9d51e7783046707c1162092bbc25b7f6760c0d23041552892f7eca75af73ead0855082b5dfd2943585b96c864cc237b9de927688ca500991c49d33562fd3c817374222b17e4c427d5e4c2be91c111181445139a85bcea6133b8743c36841c823da94e3c96ed2d9447cc6304188233c8fe1e2b75af6137ca006639c20a411c9295bae6e5a575e9e041fe81b200823841157f03cbb3dfe0a42165107699dad18d121230c42145185df5ec96165337538c660414822923a69d618ba35c7948f88887c41820fe018c34310719aef2efd2d191111c141820f7c117288355baca5d21bf919508821f4d7add7f16453674821d41c9ad984174742d000cfa13948300365760e7c71c61860e4c010427cd2875f8cca1df5b99041d496cd52baebfa942b41189bbef1327d3ad139241057cd566e4dda39a6cd094200a14c67ccd3cb8ab9c93ffca9654cf068317beefdf0f8547eefecfa606b0919252a738ca9e3c39fc2a6ff309b5afbb207724bf06ceed1a48c4e0f7b0eab5749639eee3d0f857928d141081ed2249497d0df9229af2177b8e4689f3b76bbbed72176486ca9f4b617f5fa9384d4614d994912df533c613474a86eac4ff6e40999835927f3776654e34e0e9183a3159f939474a36a36240ea9ebf77d36794eb349081c089748d9d8314c7e1ef2063ed2d5927fc814b37610e206c5cfb4a46872232222af1e060b42da70dece5ea2b78507bfd980780e5b62e7780d660e59d2761252031b97d12be589f1794e431e1f6dd424f5bf9c8286ebdc634db54a4ef50c9e14f36a59c542e91f628666333e45d7cde725e764fc181a784048198ad2b9e1b434694a0919d08d265758a463c03ce749b7978b21b1cdfbedd5b7c2c230bc9df5262a947d12b70e848081d6506f65b132bdf705454d76a3689afa498678a19e4bff8d19691f7e4817be29bbcefa71a112f3c791bf29640b8958fc2fab6088169413f72b6cca2c705f69528cd79b33c4088460a18ff226491d2f54c6197205c4f29c24797b92572f2bec2777c794c6466e788e31bc0a6fd8cb4132ce9ce7950a4475cc67f31833c678c8147effcd5c25ef1eb595c239f86b9d88a975b4b420240a9bb86f58cf39e28210289cd67b937499d19ee45910f28484c8aaaa8eb9139c3f93bf0e5d92ae9b20a4099a65d71c374ca4af650405214cb03a948e09961641c8125abb2e1f8bfd918a18214aa857b627bbec9024d865b1f25ad838bd5c0812b2ecaa4a928c8f767904ce7d2d2abc377cc4065f00200b214660bad664ab657fd4a4089ff565dcb42aeb738d8888380e32c2e0188410a19489b7f19fee9377089f559fb06ac1735485d0672ecb9fded7dd9c88484810923f3658b85c5b8af6801390a18210201c954adacaed2ee407d6fd9a5c3f66880fdcbf4c7a673e73e3f5a23ebda81ccb6717340d80f022fb4a195a297eb98f2322220f00d945971295a94f0c441749fd39bc33c5ebefb40d407261768e75934ea3fae5678ca15ff8185fdc20e30b1380e0429f933f9d98b5d3e2b7283363fcacfd1a535a416c619a5c2f694f35a548000220b570fc435cbbe956e7448ba26fba8f49406641baa54f3575dedbb62c125a7cab52a75c27ebb128977fa5ac6f20b0f82a457f6eededc604e415588c398a9495f003405c615d4a88548c5b918734918c5562ce3d61c527455608d5ffdaa957a1944961ec426bbae9a8a20aa970b11fab9ec50c80a4a2cd25f7e1dbc4f8b85141591899923b7b8a2e46373964da1013c306dc0031452e9aaf9b4d6ef11c97a28ae1d9243139891a346f002105a355dd6e498c57311f4593d9bf4d487de94a8ba212aa6d3b5f3e889720a170faa79254d9e44503020ab4c3ad3407c7171e8331f4c627403ed10963ed27648edaab8c32ccf0046a5a29989ce42c19f5c81737dc066484e1659c510228807482d1cc7b936b45d3554ee441e6e4cf41d7f3c9d9c4a3f712a23985cb1a4d6811e525c915904cec098c7ba8f40e4322c260301209450251180c0a4b9c06531308004058200d050371603451857d031400015d221c3c40241c241a121a14160744816028140e0403a1401810088782a16063122881e6b2311824d5f4bfef0b68e3df00cd5d8df8d3c2122dc063c47a902b22b861656d47236fb42f6e6d15f2fd67f8616dbb6834eaf49aa0e2be7b7a7d3d690776e40cc86713c7761bc3479731fa5cdcb7913a3e04cbcb4b300dbe20ef72cc584a0efaa489533de7cd08f0454543455fec7ce5946c98b5aaabcedde57b1b5bb59362ffc59450ca61471bd060fdc8088f91c2bb054ec27ed5a227a281bd13a796bf303b4b7123e047943877042e0c05b9654869b1ef38569bf503128b3c38f0e416ce59e27a3ab6d6cb624c503309f6c03aed48a9c1ff5c5eb3ad47283c108b7741a6d96766fe37ae4b078701d1ccfef484ea4fe5a0372f5edabc714bae4c5f251bec14814d7a9b9c04d7062e3b0316a04a0687cad9d187a0e920facdeb3d8abd530e877e01c4ddf03fba53027e0ecf58664bf79115c10b61f997a3bc93ca0e21bea2383407af103144a5665b1d2f88c462555fdb4cb14991bcc7c1a52ea1e2211d76bd35938c001001bb49d315da1b7d92c2f82955117e8b210e6a1f7be70b0006942d106c9b692f516c20dd680dc121ad646844043d5deb14e17e9dfab3f2aed274848a4e913a133ccff95d6c375ce2f69d7bcf7ffdb43cbbcd9cd16f91a3d4a6b5982a364127204c785b2252d06156160103d9123e8679bc470324caed44c0ea419f402264a6444ca6fe42e45c12fa3e75cdcf6d0ec6480ee073dbc4df45b79d4beab7716dcf6dcccb7246c42ed29093e34f1e7d9ce318d8e76dd97c5ccf9cc2ffa40aaf98268c7aa94372c200a52e4518c53356a2a9fca8c720a087b83346ae54f2ba4c94e962f38cbff62bc0d2fb64337dea3c79ddd752a1c62324837d1eb86f879701e3f77d452ea2193fc951615bf7ab82e52c1c140e2ac3ced517abe11de620bf4be175d4301e74d00d1e892ecad0a03cc681b4bd2811382e330a1a078186ba0e88025e4fbfeb9cb537479b05e95c610b1fc3337fe30ed240a6ed87b6f1768962283cddaff174f41c9c3ea348b5db051c2777a0a72bde87b2b4bdcef8d189760a81f9c9fd95c994bf084fff9aff163db2dfdb196d3f67b66acfb7cc6672b7a4b5aee83908de48ea5c8ee325fa8f000e12c862f67967bc41b808f479cab16f35843f0c86b945de005a00863001ac0b7e6ba7d92ee89bbe8c3c4b9bdabf41b8155dd65d5cf6d33d774208e038f0fd13900c3c5abb91fa58577ae7448f923bf3ebc075987680d8dfe625cc2ebe847c6729f1e8a54946c9fefdc48cc8432c69786ea7a3f622d4dce36c4f263a0700b432e1d0ccba6f83d7e9f99d3c67767cc0130bbe93523a7808035845d3334de05472b4825897e1cd9b2eeaee48d4858eda971b9386e04e49094383f33be7635ea3362e8079062dc9bbd05220ef3736d31ee44f7bdf4e56410c4e38b204095b73150963aea9e41b1cb21de4c3c98a438aae0320abbbb207f49f5c19ce3a4058d771f7ce9690c908651463b2992d00a2526bac83410a69702c538a96399e72e32819cd0ca7348b1bbd9b03a8165c10c0fdfda38d165a57e9b1d30afc464b03ed21347ce5d4824e05a05fa0adb323a8d8adb69433e69a7083c9c88d22a756281781abf4580b4047dd71733067b4be2fbfa6cd00e7614ebba24349de69028083c65758e0d14ea74b131271a0ce719e43641e04ecafb4a94971e17e14f9c801cdd2f366e4d96f8548d3c115a1e7c81f26708b98abedb7b13f61a06ff91916a98283610b435c399e2ec99112717dba67018aa2c4c626af542ac84beea1bbff5de908a673a60b1f07d7c023a52df37d295561b9b3ea98a3835d265d4c38ae4cc484d2aeaf3e48ac0f91b4cf592fa39760f47a198b54e42c8c88dd1d57e2883152fbcdeac0aaea266474019b5105619a75bfffdb5f4078c0618e4c0260eb1cea62044df0a8133228f59d0abeef03ca2a05e12e2a8ef110d4b05306643808b27a6f82d421159c5ab329f0e2165f10f57a0dae0084a51a33696e2d957a54629308671ba5d28dcb6da122870f84e2634950bc2c56f7369e6ae85bd0f5f7202c6ea92719458716e0e93d0ee39d02d89ead1eea9b0756fe5ff02d1d445d80930be96b54b0af06a95a082a417ce58e0806b71c35af84e162bc8850b2cf6b3403f3fa7cdf7c955537ba59bd4627e3c9e9f7b7471d87b671c7b6065032fb873655d54cf3abe6e0f21f524063859dad9d54e01c49b1414b252184c7837cbf662868b4f1c2e0c915c3fc1f14766019e76b06a062c77e5c84e1e713ad91bb038148e8d2d14782bf3865b68f7978d6013b77ddeaab3b799d0f6e303f8723e0d9c74e68677f79312b835630cb82708bf9229ae14ef58b518d6d7638343c764afc290107d8ecc9a3fe853c2bfddd48de2e4476a859654b9d13ee7e8fd71e2a0e7d6eaa9ec9fda6b3767b1c1067cd8026f8bdf870828d1882bccac6c242358062d4b155e56300d00a24f686f9480b5b5bc6c514ee69d9e987df1cacb16d650e75a16273d056992beb9310746791f1f026555371af01f36386a4966a970010290e33dd7a64d1d48f23de14802896655082ade02edf9f77e406d7913e3794e48058765735693e24d54497a39f1670d839febfad5fbf18157e86402bfbb46394cefabf9f921c80e70081f05318c776f38292293384127d2d747b709640d59ed9de49ea38f004c9944a57b6178f69e3336c387013e9a4b12fc31ccfe48ae1aa69fdb1804c78d21540f2e2146f84113f8f07dc70e2abbb572de6d616acfbe9122456658e42949c8c07bb572dff67e59dd45c2a5181bf0c77bedc1e083895a1c0b4d501e7dcab51d562bfdd3ce8951e82832b774cb9f847946e4bbad116a26fcef23775cb6285a65491f892f8702be0c0b6deca80903f2280d24a43ba4a07b57485433c1e3e5a4855af9b00345ce6132873adb3689c034d1eb43f8aaaec860ad0ea2af81d70857d0e2aa0c8c51e283fceff402f229cf0e63276431959747e2379410594d054b379b3371c4b0e470514281e82e2f7e94d7563008043a565fc91d02ce112ab242aa097a45543aab0ed212aa01645ba45c7f6050ce789bd33495f4030c5a121346fb774ae64087ca3a3f2c59df673a3eefd1ca3d598597d182a32e2722114ae1397aae0daa430912f80ca07a9d27f8fce8edb211542ad12451d9288bee6b69696c8766787a29e21c71860b2543534c84a2ac3e3854b2b91fd42181c6b02033b087f64988611deeed7fdbf41feae2b2163417da52076412cd61cc664da7e6158eebabed4c5dc4b428de8b20374a05bb615d09d9fda7d72da8e60328aedb14351a7e3e40f1c97f6a220a88708ddbb6ab0c7013fa5a4a78455a55a8b1670cf9e600b83ae0abc88d4666baa445a7d7a303132fec4f8a374ed0b39375bf863a8c6e9d7fee98eb6237ecda1df0604cb813ff6a91d561a7a65dc88e8c06a346e26867eb0cee21886573e1b4f95ea654a12c6d568442b6cafa71d77ed8e155f8bd7655c980d791f2654258c65daa719c086524979eb60749a684db619db20cf3390c01a372eb6fd381b2f5d2ebf1ddba88ca6f8666b7ac6db3236a9a6169deb56141babc8d7c0d28793d07906a9e2e78586910af367a5d4a4e8bba29561d09dcea8bf84b571099cdf0f8b0bfb2c9bcd07eb165923200bf4b2c5a8020cbf527fb336b3a0a7788fb273eede72f4e1882350bb4bcbafae81006162d15b9398852bf42e16f7f47c1c91dc26280cb81433b2c7d5c085ec5f6e8c7b7017d78dc069b5396321c01ebc0466a31cd672ecc411016acdc9e9d99be0d8ef1299eabd781b5f6488bd6ff5aca8059bd9987ea612f4ca40153d56fe59b171266bb0dff5b69bc034b738d2dbe8cf2a88db6d4dc3b868b55751d335c3b5e3040ddae918edc9a5ab28d0c48fe9ae06864a5ecc1d6492016674d452c7e8314f5edab1ed3d36d281d6e5a544eae7ba0454a9e4d48ff314f1317f60a8526aacc4d947e49893abb386394d2e245f0d6c58e57690bd26faf420bd6ea0ebb26f7a9ff0e734a4df496226cc6dcb4aa059b4e7ca6b33150fdc160d3a755cd93ae9616f3ef57c162dc2b8cb277f608a60c755d3464bf4cb37d2b87e13100a992fbc2855934b47acbc55c36fb51f47fb0107da06348b0d49aaa43449357a7ec15a667bc1e68e5b414f4e965f3e9e40883e1d8d4b5101689c5e46baa3f3984d6a4a06f946784726bfd4d7c82c91225757e46ca191f9beeb99decefad3aef66cd07481c2e8a762b7a7b4330dec63d76be0b07460e73602ca34a0ae52d3446e3dd6438d3d7584b8c6c6bb3b4ee2ecac3d368844d6cf1fa56aae1fb401fd1d7c95ac07a8fb771157444d5d80353aa5999afaf71b90962cfe02e8af2dbccb5e6cbdf174d7c4f4380602495c71dab5e7d5dd6a21dbb85cafba314a0190adbad67a475599f7ecdb96d2ffbaa44e6a38bdd0514ff5f6478228891a889b96446718cc59b9d327fa1ac201955ac2ef019d15846b48b81e7658164f14859ad999724cba92af511d94e6ecc15981d34abddabafe446be960525bde0b771a5e78f1ab22cad0a1437fb5afd5dc150cd84a6459aa815b090ae98fce0555b535833fd0c81b8979e27dd50e883c5f7798bef545aa597afd8d8b6c95cdef572fb1706815b7746f82a946e3cc987ef16bdda8ef3d5306cbad13b8d68c9c17848a4018c9a892dae321b080ac01f914a6337b302e872ae9aba0485b4e5731ef70e428380e2077474b5b8e5746ec687172519b355b11e04fafcfa0c43c92fdcad0978c6988b3dad4a6e6e73bae6cb21e887fc66c1a9d6708ef0069f1bd16b1a9cdff4d4259f87c92d2d1b96c34cc584cef6e2a9876500da9dd5054003da2b0c07dec85f4acf73b9cafc11022fe3bb07286c139b23c84f4ac2896a198138de09c502cf57628207a6385dce6cdcca6ebedb30132a275353649a06073ccdbf364470c60c5390bd17d1f0da4a645d491c56857e23fb41d9fba86abc565cab5d8464e564f19c61026d38c1c59eeff15b3d6a6da4c480ce49f1e46adf4236c7f3693f540598a2a9bdf2e18a576ca07b5159b9d73138b2f21248e2d681d906ee33d5df36691cb6a2bb6b77c5d339a95387d64e74ccef243d32c5149fa8d956ccb95e1d8135d89072c224e170d5a84bc53b6565bd6b40423ad25a63a279fff98a12283bf37c56c087bc2f83cdb4c55252c65fdadee5af6aa281371ed41f6c5ebce3ef36ab2044c264cc90600367b47124ff92c98f67dfc9d739c9db23e3e60352179dbc537cd39a287b74eca32a1144a5e01f2b37bc7239ce9cf4604398cda17e0cec1b49e590e941948c169c629765d16d29cf38595852286210798c3317fb9514b64c0242d690cb3734066762958b71f994253c954f296e5acbc8f92e91cd28fdaa2de139892cf66e9cfb2b626f0c65ad5f2d6d094fc2e85e449ce897aa2d6eb3dc1d22e9a876a13efb2c242bf8d27eca769420259564b23396eb28399de3e499f8a20a52ea05cbb2b1633d5d880ce9ad817078d8b7b60e24a5d19482faa9ec642f9d3cbf5b5d8cb53d8838efe0b502de8b18e2e2fffaf76d553eb9f0763bdb55433addb6146956fc030741dff12bdeaa35bbb424ebd70f52a69439bea6716a46d5b8e655f335e86db8fd4348fae4403bd304937fdfb1dfb197251f7167ca9c3380580db02684b8823a27caf81a3d30c6b605d06b6d1434d4df5ea63de30456295d10b370ba47137a17ec1f0772dd2527b0a77684ddadabff5139186812bbb27f4c11fd990f03d88fd8430bbae87d174810aa0a73ee896addd0949f0748cd6317f33c66c99c3cc7a57e63cbda09729e7750ba52eed3bbde81012716ca3278f7b1abd9fb9873570d05b10978e88bf8c3befd7e2f4616db3163bc96106d9f7df41e378832954df7d662e407b382aef39ee477d9bce485d65509ef984f1de94a01918b60d3c1be4b3dcddda5a692b0a80f8d7a46dea3abdb7237be96b66252400ac619ee2b594efa13048683d836c5388f1d259178f4e3e9152bee89c265d8cf2303f909be6884cd06a2544cf8bc5667f1412b8debe679c3dc1b26d1d29959210683ad4bd020b83851649ce3e2c9915d7f252d027883731ea3923592ecb8608ee6dc21bc6fa980110bdac6ebf8cc8d2934bf505a1929789f23cec4c557035a7cd508e1ca279715b7125160ba5f4a4cf1ef8d6b693a2e96768fa21f6f70831d08824326f03c44eb10ee19c59518016f3b752cd09ccba33a9e60e32f7ee7c6e2fee5bd1ee7c0b312a616e32b4b364cf00d0b028bdec3119099cf16707738c578fc7e0a7b59694a98593795af09011ecb8219cd8994d21f81a4a3e52e677d38883f2ff48b002fca9ede44a4b0a3a02219e48577ed737ec69eaff9ef1de1927d23aaeed8faf7423027ae433456988385485b840b29b1b2170732a0e21b778e4dc1731735fd4b829b0759e8fd3cab06a75adbd04ef4b5ba880275f88c81433439be5996c641a1bc3af1f4f7c69ac2ecf6e32e72507a00c20d39020db1b21790b54e2d6948dbd9ba38489c19a54d1cecbc9904c2c3e846bd82a40c9381d248c0f3d491f80c64d1b0f32ae423838bb9200548c177ec1d191d44c849618d6f4117b638ccf633b111aa956b4343a4812648bb3e5b9dbd25c45be1b3e58ebffa9b1410859d8b3a8bf8574813a80f98628a9d9b9d7cafd0307d92f06abc8158ca8a010bd6699882bae6cfe3e43c22714cbf0b400ec2c54aa6f1f8e22bd5d732ac0a13782cbab4fa9045c53fd9e051a8ecb2c4268a93129a2a03013923656c32ae6848ec019d67b97bea589e4fb6eb22c6d29227dfb902bbdde67e5c142939fe6ed083efc841c10b38c88a0d478876cb610e526b3381cc7b7c8ad7d584abd3b5842fa02dc9807d9a75102ec4020ed5e778bb30247cf0802c5b17badbf750136988d51218f9e8c092fa58df16422b115db41e1ebada3413b5e39d02e6e264c524026857125b932529bfb06d45ec628904f904854301fa5ac9742006d94ef9132cab6bfe8c4fcfb72c68f298f6a38079fae7ff93b1f0434e6d3d4d8e38d7e3c3352e0daea35d1b8ac12250ce8db151dfa7e072d21532d633642c2652b0f78fd3573f783d1db81cc08716c0cdf009c3e8221cfbe077bce8d30ae2627804295c74a86c430959d636a04569a9f38674b614d4080a4c24158b3c2b78e24ec187857cf81be607c9a907079f0dc64f71a635d76138aae04418d2e2e24933e1e5d64b77b114f8edbf93974ff89275fa17d3f7fc695d2b139e6d3469b5f72c4b73f5dd52348ee9940f3686d07f3d7e5248e1fd5d1643cef9cbb81f6ce768c615e83e14a2c112d6a6194ebe66f2d3f66ee68a3118f419d55b234eca514025236248a82ad923edbc114230b1ceb842de0ac212a10399fecb57712e07b643dd7a0961d637ea226cbfe46b7ab479a5c3acb7099b038202e28bd0054f1387a409b60efeb96144b9d986191761199673291bf4d0b1151e36b5e8ecfba05287d89896513c87b1bcd8f06b4bf5960f5a73392cc7a7052fb08fabca36c1178f9fa23fffe258278d52111cc39fc37f8caf375a195786e9c321c1b0bcf78947808c3770473454203425cde994eec58ff7064fec7456e945bbe5f1d99858a75664e2f0efba64f180787934004f2e344791103dd862ad9c8ac4b17221c4a3671d178aefc1b999d28b5bddea3de388b12c87a3d3e189aef140bfeb3bb36c40f74453217149ed550bcf703b87c05fcf04ae5ef9d1c68f637650135c23e579570f5079446a131eb9e21fa87648b0b0c8dfb76054538e65d61fa6daa11605714456f08b33d63a93b59c39a57ed5d1ec750cdb5b03e91ce39578203fb370965ed291b10c4421efcbe5c5a63460022da1cf428c5942ceddcb86cc5fd8a73623142832c38e33e57c1f1a7f941bbb26cff049ed890bc5d888d7c84a1987d3a581b90de39b5aa9a232dc1ac9b416fb504c3115443272f8ce4c3af1abafc1cc8abec1410556f32166cfd93cf1bb0e40641f4d6adbe9f9ee819aaa86f2af02976c5e5a062ebd1ecb4791138ad448dab5701e01f2987f71644766a15d28061565c843f1e5c1148183d33f95a9097782ea56772992a4da17c3951400e74a75f0190872405b68a2fba28af696736bc53b0ef209de747b2f622b9a70e5c2ab98e03e7d5f2e9ddd16aa65b5d22732a60802bc47b1b715bb1a2d4e67143f030b2773771ef01a8f0199fe8b5d61ec3cfd0331c2f96b862be476290095848197b241b7fff66da2f9adcd8c0c02bfa4f20303a7839a79cf61faf6d43596a02c423aa13184c3d02fec23ce06e47bda89845749160c19d91f3bcb1a8f310286dcb90f93899bb42e98dd44eb357b2c3118cc9ff2c547c4d3f4421354b2415784659dc121701874b1c47872ba765984a263368a395236577c257cb5beef1d434f530c587c48f89f21b2afd33dc732598509a8ed0c9f5ca7186e3bbe4271335eaeba12f525e247bbdf3ed46e348ac37e502982191590f79b327622d05788a68c323145bae5ec8017a4a30b200135ef05217394dedcd19f8900e04b95e9eac0b0ca8a21542eb5426c8e7e1943021083aa6bc8d5e0ce3ad9fb250c3bca2b199db7852d815b0422c925fbe89712c5aef760750d9962df848cab994823a02aa16cb483dac453f9a26f44af633dda386f8745e040e5fe5508a4e64ddf58cdcbaf599fa65a298267c95099056ca7cc9ed506c53209debd712967d5fe1d47eb7f706c9b8333cc3843e124b78ca1b61c1dbc3d840dd570306349b5f4657f6f6db4fd02fedf07e538f7f077dc4f121b6d342da08135500512ee632cd71e658fede3b7077051fc01fcaeaae2c7afc922410e8bdc75d9a881394497c2a6e6ab9d459460fd7294a51bdeb3c6788b4c3ebb8fc215048ebbd2724d8223628cc4d60e973f51617248485597493d8b2cc8bf89ce7cef78122043d77ca0b0ff45dcf3f104d0fb5b83fbf55813b84dd3e98dee18d9cbc7fcc3e848097f7e75ef1ae86b7841eb29725d06d824481e17a12bb244eb0cbdd92f9dd6551ee58578ae557244553c2c1120930e4198f1a9e5ac981d25c164a265cbd037518d002e4ecd6ba1abc0f96f03a391e06af3381e302031820ffd57aa27c2a8d419ca231ad1315fe31fc2cb786b7754618006dda03d282e1005494fa188fc93e3d7cfc72a5fd08feaf0adb4c68fa58af32bb15d60e91248f1fefd1db07c175d6dd6f17c7dfe361c75fe5c7c7c88b5c38ea608d6fa4065ed734be937cd4a87ffc2d1dc681f46b28b1563926cf185a19b4accf6eb08dc3c93fd4e07a46306ac39e59c6b041b26b4741be60035e7dcf9c120b754e35c1b6870db68edeb09e80f8de318d40200b5d0aaef3554ea1a8e656f826d0d44b7c2b8c0c79fc621c10734e475cc336f968cb447e188b7164acfef5fe0216e41ba83fc7fd5e0aa8f83b51a1dd2b4ab31b29a8e23acd3498160c64506ba62f1bdae6a810b615e0450b5b38c074060787fc175bdfe0fe9dda680043ba3ed00245432039b37395d9743c9946a05cf429fbd3bb6014734c32ece46172a3206b39fc8264835e608f452b5e0cc2aba77ff10421ec789437705d237e0817326fafb346bc42871428f0ad8904c741e6a1ac0e4ffb4f87974dcfa322c83151177faedad0b47812fe02ffc52dc3264bacd118f29cc0fda1e3f8bb74871003be2fa9ce5c2a6b23b4581e2cc22cf2061415f542c25490643e7a1512f8277e7132ce5f8a98fa7fcb3f5382db3306a4710076758d4dee813118566b74ce3fde43b6b17090489749de1a43816027d619181443df8f96c4895990329e360b4cb707200d515a0f3da54ba34088b8988c190d332a8da9a2124239fa2da8b13093ce236ed1dce460070f9d0b3c132fd7fe47b9c607ee6f0db656cc111abb3db30c2e575f5988d10b0170a2b17feda20c6daf02e265434e00ddfe918fc26ac3730e5175589fc3110b32a9d06eb081ba541fe56771d56a0a32a7a7005b9e31c65278a088ee1061b1198d77785ecdbf2456c896afc824081422b7f187f3adfe5e59fb6cae1508f53566216ed2905802febcc625b67236bd0e8c833991c92160e57c573e45a85de992b1d39c22326ce59ef2c05e2705ff5a95a858a2336948289706b2e966f3f429dff951bb753ce373f2c8c050c5445fa9acfbff11f3fd3c3446f91a1f53413d48fb6485da63029da40066e228ed7067fbadb84c73f0515141adb2c49222520db7621394fc47f93001eb3ab011012487057a88bba43b47a442604eba3ccd481a5655f861e3a1d34a3f5c3ccce785d4943b4b27254dfaa93c80e6f83f8d78190bcac7971c4733f2b771043853b68766952634f00b4a949af71a315ab00d558cc356e52db1aa0ec367173ba52e1dfe46c982378c40b76b2cc81150abac1bb8add8b342a1c8166c8db27c7d6edd7ca16cd19e3fe5026be64d4d27d61968a830507eba444aa2b756f2cc5b959818b1a78a68f5ad960193dea19dbc67216ae7b05f2ac37a688ac46de0c6535dab37f89972e915d07ec5e7b6a1b86206f13b9eb28bccabe622164ef027142024351d017f068e9f33710f220d2837d3bba9322c8d0b2c0d00f1e15d1c032d442fde2156e879797c0656888e8764b2a8b681fea73e90ef7a2b0869bfdd3590849269aa264c179cdac655d36096a8f06f1219e2fd68665b9b3f859f55cc50470039994b98da9d40d53c292ed0e05e42498a95ceb08eff09993c6dc56c3b36272bbc7f461f7958b9a67425c608e1005584156a54cf5bf0560f0bd240a2cbc66ab364c146bd04897e4459a6c146708dfa2b0b35ae8b319721b3928dd35b444bde88156b5caf54ac04945a98ba44884e09a237092fc97b55eee0cbd0eb89092e4146917781f7afca79cc20fa530f02ee9e40c8f01cedb9701a16412a91ac315bc1c526eaddb0092029292df4a3dd8fd0707fe2e5ff2a442ab7f5786851b308be5b3f666233e929e0878b494efc8a59bba70b0722159a6f2e2ec4de22bfe64979da814aa7438a5209d4416495a076222f2d79a5c83d57397bbcce5576e0daace54122faee2f84d5fab7fa4c77e45ffda8005089a350fa602ac7d9c15a4be0e524f511b0393ab5713c930707954201ef1d3c273d61a2c8e37a61dc115f63807cc04fcd1eea8e9d87e72383680ca8b809579b9fa8b01479f391910af0cce3b4ebf94430038d3e0e8d878b23299ba87507b13a79f092c1e9ac44e2c183f094bd86a29489187b6462df5179d433938bdf581e4d4e8e27651acdc6fcb390b2a6349224c914e94ed298bc4d4e4feb250949cae4deb43dc91db45399259a004f38299f4b2b4522b218b33896acf25b20c1d9a9a1b09422f15e912ccc5b7e6721bdd68b52764105780a969677a670ac9fcfcc3f8d335cc30c20c1b30f53130c1073312af59c5f9e8370eb0fdbc1fdfae973e7f191c9bc64dc71b3885ac69d5603c00696699a96bcb21b72060f30d178d469037865639a96909ca46499650d5b3b5951e5e27e843277e02bb967ea96be63553a63383440f1542c4720b09900d224374e961e62b0d6ad14b2959466875c5d076911c4b00daf4285980b47d4adc52f604a9565a8aac384540048fbb69d0b9a50d621c43f78c82be9e495a5dde3e6703b4c044cb5b2e46467100ff4a07f6d27f28d5d434cc259c37be89ebd64478a3d0902b770612a12e8bad81a37e44948d8853e717c3011d0f8bb9a6dcd00ba1e9432ff5bec92456399eb892b8a8896c4e15e92eec284ce57431d25c80e1a18601bb49f092ae074f91fd9ac9bcf3c803920fbe5b75246a289d63e2b4ab88bb85aa5d3cd9d8e452111e3f7661a85c5b7c52a7944a9ab03c7993839c6d30932e55dcead7cd8016f7119eb169e9054e36c8d2f214ca4cf0c116f92bcaada51ea4167b8228adc3ef5b12e720bae2ef2245ab05c80a15b2458147bb8c873c06cd6004ba487fef24e60ccea36eea31baa0854d0a3dcab5a852b88d318051f54940cf03f50c384a6089a1aa27e79108d8a55d8c88ab8958ac4d3f6fe53041e038ecbf6df7f1f2bb2f8bcf9f81dcd050f2702d278242b51cd0107433d02903e41dc3039b814ffc110417d0a4ab0b74cc1338205fb034851489417fa2617f4dd5678f4984d0dd602bf086557894e81221be5d8483385266ac29a5f1b0d1ba21074338725ed26c08c8d4e08408cfdc4112838d168c7e692bcc0e45ccfc9c81f4907d3af3edbd02c3f8d16d0439c458e3f080d9ae962f0dee2cab482fc608d109dc3313f088898516d81efe8517367db2bf00e05adc2120bd6b0bf3bc728af314e9c2fe84d332734630f4e016d1116b2e24ef10c489451cfaf07109bf96f416d500293ca958f34dd171890c94fa73d4d746710be311d9c2a7ee0f7dffc29aa43ff7042a18111c5f390442cc80659bbddce632f7d56a5f242f17400683c46d6a38d6adf917d3e533ae58defbc6d1f6cb271373e881fa16000cd2082ec7af5f0c973a687a9db1b5075121d8bc791356875199c63804b2db1e0086d10cb0992774a51b4e4bb3bd75a5b3e9e828f02682f8c7b8fcd0b7c5509d7a498161b1f3b391bc92f11a5c985022a2303fb40aba72e10153699ab3bfac9159bcbdd304d167de29a273280149e5d951de1b663eb6c2f8297c9de31a6e60e65872ae44df941d071ca394ffceb0a1c4836f49394a58c93f9168f69914b2c2d0de004cd26f52aeee0b5a36f2ec45b4fad4ac11150d589325b3bf3cbb40654dd669f60fdcb44e09d48dd9c929adff466612bbbc295ca7497ee5e44f884569102cf4fec8071242a995504ca3565a7bc9da6d4fc67a5fff84d516d9d1b1517fbba1b40dd56705f4118bab27c90d586fc2f6d6a6206229c3146898ef4e095a2a8e694cce6254cab2021908e8611926d44b78d15daa414d8122b6b3868bc9781f131f59300baf4cc283260b46438330f0f0f0f0f0f0f8f8cb3686b1da43109524a992619a60c5bf92da524934c3285ae9deb0766e2d399891f10f6076d026b027002aaf4f4a7aaf487dfa9a2bede7b46ef474bdb38bb5b354dccdec739c94a9142d5d83a9c7c68dbe4797eeaf650e40d395b9acb2a9d8565347a60439c2ab313b5763e01e8a0c9a35f1d66b8ba5be3ae9e068f638cf9f1d6837cd51d065760c2c810c655069a3bd2ebb6c348d72f028d1dadfd7563274f11572b0c3475a07e3d76d9ea5ca0a1638ea4c83e6f1be3667d502387260ea5d98dc7cbb1a942fb450307da86561ddbd9356f68dcd0b48182868d0f346b7cc3a39aae4f7d9c588e0941a3467e43e7584b74b48ad48c04329009b3c1089a3496ab736befff10070d1a67b4b3c57f4ef9a7573b8d1928f57eff7d3367b5b0064d1964f0a685a85b7e1b23294c77cf0b913f5226869e62eb2d744ed3c9158662c9d02696a71ab35f30bc195d6ab4aaad2396be60daa8e8e03a9d9829f2e2f5b86e36759621e5ecc25536f6694ab95888fdd89e657d92216ea15297b6a6861eb1734e8bc664f4bbc4eccacbb238f7ce584a3c4929fac7e2bb7573d3d3af78d5c42e377563ccbbad48eadc51f86c551de3d354811ab153e711e59faed25091f89bd7db6285e95b6aa6683c7c12e2c30a6f6f49b1dabb78d71d8ee22462b49a651ef2b6183450b8335e2a6ffa9b41f3442aab951a4afa4afdbb0b1a2752ea6dd958fa6d0cedcda0a68974d44eb275299915a763e2d5e986b76de912874fa5ae449bee131d8d129d29cf4a28172671acbc12e5ab37438ac78106895665ec3c3f5a67a9bc2312b26aed60b3d3f8a02583c68865ddac21d6b63cb5c69a2234446062e5a67c2761423d1b688668e7e7b6bd3a6ce79b4274375a3dc9abd42af5296882704ed89efa3131c081068854abbe29579f339a1f2e53e12fca3313bf1b203af3597396787f4087db92ad84e9321ff9c052baa3d6325fa868a5daf4a06a25ede58bbde72cbab0e181f1b7d64e57da968eeb52d8ecc07c53a65b777071435761a3439e84087fd1a3b3fb5f8126176f9debab1cb1b3c75e6118094b83cb2d8716296ebae4bb999a2dc8ca9773f3f24e7c4b538b26e773a7edec7b56d3d25431559b68913a965233cba12e76b8ddeab5fc4f234bb3bee2c7dc85cd10ada089a5cf792f4bcdda020d2c7fcbda4e9736b448b5735eb95e67458f27a9c3b69d0934aeb4a256d15bdda2f5eb561a565651d7962a5dbae73669ab72d4d2c3e4cc8ef67a4ea5e97a6208dbc9e3e8240d2aaf9bd015c3546d46760ab3679a88324f29759629ca3891d31fd376de54ca6173fda3582b081a521267523ecabc1df6b546e9c376525a0a333921d788c23c4f223d28bbf551aa0925ade5862c7da293dfa90125e9291fb567ad76b62108349fecf9615f669ea7ce96c693d5d82deb5ca5aaa57372d074f2e9379fd52f35760d693869b4cfdc354fa9b7e49a4df87b3b9bb2c6b6ff51a3c9e1a3ad8d35f1b65b9c09ded13e4dadb4d4b693982c764b6d35b3d464b93497e02ac573ccdf8a513a62349674c3e5de4eff2c3e4cd9a0a90429b94934922494ce9b9eb66e094d246d375d35d3d6f4b5d85a8c8c181944d040c292ab3ecb9a7d2e540b7dd03cc2efdcdc585a6c8c111a471c152fd58efca979fab011e565890ef37609348c30c4b05913b1aa5ba41641458e6a8c9ed81d681241e41043fef89ee4a712fd9cc6660a496c1d62bfcc351b7325e45c55a7d468e5b1b31a84ad7f2f6c76bcd4ea0b92969fd745ad67f9b7148836cd44b8f61c95d2ff0d64c0c00006040d201fa8953ae4ad92bf6c1e7144331d5dccb6d5a6114efdecfbb83392bcd613772312b359a421458f8d98d449bc9a229ceb5ea9c3fb8920d2f8a473e253b892a53c040d29046dd277fcb696904154fab33a8f8fd7adb8112490d3b978daa9767851d7061b4034f9f6d6aab59071cacd1f8896233d5497fc68e6ea3b7d4fe7a684fae06331a4acada3546f8fd3230f6ec99ef392c3e071cc8d77212f2523468631126cee40ccbfb11ed56859bbb6a38ef684a9ee6cb72f754bc71c196ce4604ddcb0a557d412a9b5892331ee3b3daac6060e6646a92db6901d62556fe0fe4aac35f63a8c781b375e313caf52e72adfe2365251c2956d1f6dd8d8a5bc31cf844a83cd1acafa165f5a8bd5507f8ec2656c9b34b6932fa4f7eca0a1dd679d1d5beba78d9b3314a2bfe333d5672d7763067a57c7c7efc76beb58b22903e12ffe837e76f935327c4f4bb7506bcfe9f46cc650c94ddb3b6b7790f217e30eff6e62cfb6cddb599b3018b64ee89fba4fed3530d8596d250b9b2f7851e53a28e9eab62d79c1e98c365d30df4ec5126ecb6e6d375cf426c66c576ba952d96eb6f886105975c2c4282dd7a269befbab3cefcf75365920c63891e275bb75eb1b2c76bb1d74ed4fee7efb8c045ebc64b1b902add85471fca4755fac4f2d4f484562422ce16d4b2bb9790adc5eec79d33ff54a6823c53ac897d0a374c6f49c4d14b7810285cd130cefde55ca6beb9c6e4ee0a689f7a56c1d6ee7fc37b30d130959a2773ed930f1e56609c4d7a51aed23869e9012ce52bab34962a154cddb33d5b9fd0d122ab3b75de3d4cd11206c8cd814b12182bb19af3bd553092d36045f628d95295f1b21ceab339ec7650af1b24d10a8583baff8dba63f019a4307f41c38e78e020d2870030c64665a0013c6817be0a407700145664c1931040470c33bb058020090195366840102602d789916c2380c070830460c5365960c626640c004000ce82245ab447dfcbbda3ee39fe18365bc78898189f9420398f565812113068c075da2483064609819e35fbe20d0058a4cbe7c104bbd99271ecfb63b740ee3a7f38c13cbfb9aafe4cbceaa74ba34d14911e79e735fa76acd78f132260c1832308029f35fc4601726f2cb9703ba2c31430c4a09326c4c1237cca062603114d00589044346cccc1818be7c41a0cb1109860c0d6056992f5f10e8620416d1858821d851dbdb4508ffc4d6b3e5db8e9ebf21ba04d10508a6985153955a4b31df2e3fa0c6dedf932e533c943e304e66ee6fad54ad5a5d7a70444de13146dca9a8f180dabc0f21fcd4b37a77500dd94abbce56b572954075d1a11da5d2622bd1adccd35c70616a15f373dc11a51fdddcd2d4aefecf6bd59077d982de6b254a4bd5a696fcf65f5cc44ba7daa1a5f1e0a9d5757f57fd146c66d9c73ef6dddc14ffef4696df53a4a8a57b42e613cbb7a66d953577762fc4c106164efc9f7cd76231a0cd2bff2db53ca8fb37aeb45c4971c68b974d2bec7cd1a194abeacb92820d2bab2bbdf3a3dd5fdc70c68b97deac9256f26b2f2fc64ddea8d25a3bf4987ed0cc9719e3c5cb980936a9b0e4f4281dd377c47f1b544eb963ab132b858ca6dcb2f687ffecd5ab55276c4ad990328a28a1344e4c9de3f48b015052f1db6f37a14c88d80c7bc14bf060f389afbdfbf4868cc9bc1b4f3a392cd5375d5ddb6b274e78dd7a86a85bdd2dc6cd264a91adab76d6d184ff207da5141f311edc64a28ff2287f6a858d5dda608297a8d3579fae307d366e4bf4a8eed6b3ae95a05fe72fd36a7b8baa3694687affd9e66dcf3a08275167b927a6885d92a5b896225d84eba4cd4d248c6d43aff417cb6003093b872e82d3a8b2630c438818820c214440b427c3017209120462490e0441928450421f1240f0288a03418a43288a631064883184104210218438420c9129c1da067984ac8d56ca9929b4c6d2a445dd44425959f909ed48072e4d624e90de38d7ae9335aa7a6c142c88ea11771cdca4d48d5b7a8a8272c1d16c04d85014b9095799d53b6dad8c44ddc6517868428bde888f2c0035da7f591bbf986fba261e1f2e14526953dabdff334815e513f7c89833499017530796b0651c94b69246308337272056422ce4aca4e3d6301d7a60fb7ced0d629f2ed771caa46cd999508f196892d969f41df2940e55a5b41134884686dfa7352fa5d85fe3e601c5e2153f5a9dce340249c630b93ea4b2426b76acf2a00a4a67d1f5e65241b27b7d74b1c6cbe8966fef60b72e2fe85000691609c3f972572a699f43ef8fa1cd9feab3eca871850240b058d8c4429486bf7b217028ecdd1a5ec94f15c188f77cab794a90cb3c941527c9caade093ce1fc841542e8be088fd8f5446a637a17c536dd0439cc4d31fcc1bd47bdfcb5dd674f7f5e7a1b9d2d83b4f81481b9329bbf260d2fc56f5b05441801d93341ce95919baaf7810d3be2316261bd633dc264a86d5788f8b8493b6bcabeb2183fd48eaa61905a7bd0ccd41ecfd9b169918f66c8f22a094b19ba1b2d3e734e356329a9f2ba7345a561beaf7bff41a818ead5a813fef240153cd46543a9a3dc1afe96f18a1ccd90e325acc92c201140d62093e4dc444ee054baf66882109fcd887f2ca0d818b54da31f6896014f026af74487c0c5bf0d27b98ef138fb6dbad1ce3fd75c15ec7059cb4680392341a425dd17a5f7372620fc5ded4504c8c5cf284e37bb23e8f75501740c59a316d2b397183dced08d5175cd85998641de0c8442d5eed63cc803b87246a77f30ec6263d6d307b0e0c847274a3168c5047ca0b70e39c33f3e87df3a88263c2327d0a4e06471a9308f3c03821fe14bdbb158abd110a80cd19eb89a6273cb0577fba75b48284a0be83f0fa5eb94a44de2e23af83004711f46791f8511e600bd1680d8be922dba10ad6098fb3c4b6d4a2bcb7281b1dc2d8987a67e761b859b7d95912190deed3517eac04ba9b17350a418c3a6b2642116ac45c2b32acdfdb59ca3d555976f2e9d15cb98fd3e2a6fc278e3a0ed12b5f0929bc79dff33fae37a2b98f89d446162269d8c8af7464bf039706992d1c169c484d21d3174ea3f96a7a9a30af62450bd6fe6ccb1546dae0da7622d84a2d58f75fb8eae7025ea2115afbee3e68823bb4e4996499c4581b04294fca1e9d346cd4eef41bc169bcb4dbc7401790d919a18e4c0e8388c1bece8cbf04901e475adf46de6107b0cfb79cba2841e704647ec2c1f87198c581aab88ea5de3c5d1c9ee4afde3a6f248282d1dce912e15550cd61f4440309cabc10a8bfa1c972b1ae475d7fbe1200d687bb2cfee203593796263623c50f28981ada275b82d08af544a998ab929aa3e44096009ddb3d196b8e06f0f186dd4c952daaa7f4f794e8ec303c4768f852e499ba9c9f15a7389f2719dc2ccd0a05b599210c293ae37f24687dc559ac86998fcce2a17f914817a080aadbd82fd9f183ad0b771bd9ab4e54d13b5946ee41edc5c03380698eedaae6812fad54ad0708dd87ac0114240e4736e5c6e4a784ae566e32e2e6e09f27f137566c492ffdba1be05d5a271bbc8801f09198187a02661c69376a7891527f20e2e5c9b01edfa118274214d6def7a5fe526aba02673b12e68a699c196fb8985d902e26af552b8acd1ae803eebe50586b4d0e0fa096adaae2399f9a9550ccec9f1da93ee80ac2c3461805f624f5027a1bf4f18c48419dfd4885dc1acdcd937b22e633c248b8e3324b38f955715c52449738968ef1726e202ae77b4ba7e580d1e372727fc3ef376f551d0a80791115a332bfa6f7ebc0849ffac02634e7e7cbb36ae997bd254986568b99b552c1ec8181947ca4834a0f6607fdeb5ccd7b92073a2bed352b3936f920484c54a09e23450f29c707a42e2f6d4c3521d6cdff0c0f4b2880877eb2c1e5bfedc482e0059e1b77c1ec9042526438663e903c170bc430842ffd63d91882cb195d60f53b31e6ea5d7e06268954404a18f5b18a5c2a41cc56c8bb4dd35a59d87cd6cb138757ab1cdf72bcf402d54f2172bdc504e521a977ca147184a1845d399cd6e6dbd57df6287a4167290c7b095359e91f4d16709b97ceca47ea44c8f6d24979789a43bc8c60b7b912953d5f96ba2ef793f82f8e2665d48b2d36450eb225fd5287d7440931399b2ac0523d914d8e747ffa8dd2137f0c8642a59262afbd1b7ed437c676dfa8eec5e3a3f7cd9d3070da4aa17319f10da0ac2652929e5c95308e8fcd9e3455cd2a3d50b08cd96f49558948d815ffa19383b328cc5b3986e22f32fed919ee326418670e70a6cafd4256647db998bee4fb709173413b52af14299a031f13697a4ddd100ef1e5463733b75b20ee2310d90d5b072ef0a375aa2f9472307b2c4fc1d25b5db4c167952ca67436cde229da61dac46d081582292748c6fc4a13e03ffe997e2a4c90c352d213dfc6237ce605052aaf373c242aa7b2762798481b06ae8a5b14a06e41d82f0ccd74de4332ad8f9fe9ab9b92348e2b01ecbb60a675cdfa27b07546bbc52fe436a36f34d7bac92d23835e29d2ae70b44e8906cf13a63f07691f87a860fceec47c73f5eaa6fca283bbee23b28875e681babb661d203682b659b659ba7077e24bdb18621d1f9524ffb3193681f79f041781fe91cc540d1857ce1bfc900327c7f21f2b7e7e010f8789bd123d447c6806d8e5fedefaeea45caef960cd3801d9566a27f62ff1a64e9b2a77f514d2408adb066339e5653b5d105f625bc957498eb4b0cfae3ada255c964ade0beb3fa2e57a03d2b5f1216bf06c6ae50461e93c610bafa255d5f8ad97bbe0bbd7322893d64d10348649baf5a9ba172b4bc8e0bef5270b6dfb1626270c68570b0f" + "1161532": "0x52bc537646db8e0528b52ffd00586c1303ba5533b25920d0b29a0ec4a2611b52d92fdae06a091058591d40cb11b8a664f6abf580870b30040c12af7a0d2bf93c6dc122d26217d8175cb740a9fe930df154f05e8487f2c04edaa59089ddd3c488058d3afe6e7b6fb9a59469cb24a50c670aa00c2c0a4541403f4631233eb1d8111d1a17b440145bb28291502c490b3f11d834b7192b223424544468e801e407b68c39744408c867e888d0028282860e70801e373300e1107b98424340463f444b8cf8180d0515f90029217f8896902b192c6276c12c6a21a6824f51cc884f510b3106c42870a3628111518c05a1a103882052992d18011501322afa098aad98984431a320a0233e988a1914f423ce60318b8c9400c58ac4885a1d94941bb32856b48468491112ec6cc68c7e6244451c8d1914f453c486ab611afdec992026d11012a3253b6652308d7e7c6246868ae4acda98b12240444a7c8a7e52b8f9829845808a70441ea611201f1f2025e40122308109245912238a213112c2e336cd0f00292189622a100d610002e25d63c68c7e8c0005fdb0e0135b125b22810a1889a590c24f057a682eb34885223124453a37669191508c2886440868a79284808ee808979845808a8480888c98c47c5a0852a2e4c78728662408684910158a0c0505d9b15ac14ce2f363f463e4c728e680989b02100005fd0019010901ad6ca2982a14190af2804fcc6849911893980c8d179368e800de0d9659640494042828c602905191d89123b19cfb641a89110d15090d2929aab119621619fd181565356662308d00d1e032a691588ceaf681a1a0209519d3a8082848082889911f1c5c121f180a0afac1f160c4dc2066ac88d04fd08f0772d00c315b0852a26449914fd08fd107c4fc31fa31a2eac0cc22a121a0a222a0244431253e2df048e5c0c6bbe2060715a1980a355e14454349947c60739b4431a10f0cad566ccc191b2b74601d624b560012b2404df7c4fc646a9845b1243f423eb1243124463870cc669111d18f121f999a16cc58d18f073c551bb3052320a2212022253e33b759142b42b464a82846b44a7d313a22142a318b62404644312543444a3ec811c5148a11a966b4cc22a1980a43463e46424b868a14f999a97962744428a6468c6904c8a7050fd4d074319918018a05050d15f1312afa09f2015242aa409464023a268d0579e0c74868c9111fa3223122202342403e3e39143065322537aed2146824911349cf9a4c4652249f32996ccae331f01854099d3299ec89d57fe79cf3ee58bbb3b3b373396bddee5c77aa55d93a0cf65a95bdebbacefddedbdd7ce7bdfeff575f6dc1fb7eedfbf4bcd75a67005c2fe79dbf7fc170ce9ce7bddf1980daac7b7aecf51e60cef67d829ff56b9ed7397b5de7de85ddf52ee7fcaab7f6b5bb6b021020e66362623e26e663fede0b82209841f0affff5ebef3d7e73d6d941b719fc6c80b7f7fe5b996bad3b08feab763aebbe338ed6ff836bffb397f3e5c1e3cae49c6fb6f9bf3077cf1ebaf3b8eedaaddbab1fd45ae6b396b1b6fb7f1baab27fcef7fed5566b95ebbf7ec70fbaefc29b79dc8f89898989d15adfec31dffd67effebb6bf0b3d69ccea17e50fbbbced6f57510fcacfdde0beaee5fdfbb809c73ceee00bf57dffb586b19ed323239ff83e0cd3ffeff83e007eef7ad5671ee3a67cf230fd508ffd9be7320f8d973d6323caedfee7a7e3d74d5e77fcff9efebfb3a7fc6fecf71ff3ae78c73ce1abb3b767fd0b3ccdf7f1dc27dfdef32320f76dd636ddf5524807ffddef79cb102fefdf505df41fffc3867aed39ac7e79b2f8feb7fef6bac6fbe36ef38dbdc7fb7433076f77b6ffe8cfffdbbf7ecf97ae70ebee6fef36b77bf39679c3f679b35c6ff7fddedbbbbc6ffe07fc6f123fefcd6620cba7dfdaf71f8ff9fd29dbb83a0fbd65a3fe8fa6158677fed325df760c6d8f3d7ac3d57effc6bce4fadcd32ffefeef8de0c3afecf7eff6aaf59c73d3b08829e737e1c827bf69cdf2f78af679befb5f6de7fd7f7eadc657ff9eb1c420821cc8b6fa7b5be5a6b2d42d62008667ffdeffdbd5f6badda6badf56bbdf7ffebfd7b65f467d7f731ce6fff65fedf3bcf0d78fd6fdffa8f1f3f7ee4f7124a28e11fbf5b8cdfdfc1fcfe3eebbf6bf04119adb3d6ba7e86e5fcd8daf7ec321e42ced97e3ee173feb47bb66ffd2b2893b3bfffcd7f3fe5ff7e3dcc5683d9ef5bcfd9b5e71fe16af03de7ac3508bafb6b9dffef7fc6f8557fc39bfde6fbf96d767db3f5f72cfeec39c771beaf933f6bcf9eb37e9bf3dbeebff3cfffe0fbe76b6d97730673ceaf358ff7fceffeb903bd9cb3cdbff69bdf1fdfffcf9ec3f0c1fcaffdb57761986de6b2b5ff375f9d75ce32f965b2bb3b76d73a87fff9d6fc193c8006dff37d5c80d79e61af794030bf8cbb7bd521e42cd361f79c53f933e739e3fcdc15726ffed7f9edbdd976efaff5cdd7b37be65ee7ecfae67befdfbfcff309e8c2f7ff54fdfc3974acfddd4fc82008de9bf3cddce7d7fa33ce7fafffbf06f5ffe7fbd63d7be7f962ddbdee5ee39cb5d63abfce7f5bdaf1cb18e09feb3cbfb59f57f9defff0f57ffdd7f91f63fdfef7f1e37cccf37077ef7ee6ffb1f62efffdff40bfc6ef38ff839ef30fe0ff5de7ecf7deeb5aeb7f19777fbfff3a6b9d3dfbbbbb5e6b1d5726bfbb7ed73ee67cceee2bfdfe1f6aad59f9555a7f986ffeffec388390bbfc0fea10fc7cf5e3fc3a0c5d26fff7c0afb5d6fa3a4dd60ffae0f467edb9cbaedffdbffbff0010c0dfb3d6f85f7fce3ada5dbf06ffffbeebff98e7f1f865ae1e92dd3508e6fc34fa5fe7d7af1ff4fc39ffffe3fc7ffecf9f5fe79c73d619847c1fbcd9fd73ce9fefcebb769df5bf8339837eff4110887fd671f0f3ff6bfdfaf367cf5a7b4d4dceff391af4acc33c737e0d66ad5f6bed9ff36b7fad73cefa3f0cc330df84efdaff3598ff43adf339fbff87feafc3fdbffe77f77fd7cfb9e7f8cf0e6acfefff39bf7ff6f7bfd73d7ffecf39e77fcf3ae7cfeff9777c1677e41ce4ffff4130671919100cc39c653e3fcc8c29935d01e3748e10632116e4c3e427c9cd8f39420a43413e290801a590c250508e00040501a92082037484b820e0420104147416007b80080a30120484a4888f51d0929f233123afa94302118e008c7e886242b114887262454531222549868af0e049428c85a12231229f9f222345623e23a8b0230012941489158140911431faf1800f92222021a0232e138e0011c558f019c0080210000946623e43464a5a202a82b399c48c0801f90801fd202972e4c8d06893f81c214674c48768c8e8a7c85050d0cf0e04188911c58c100df9ec088084181091112c9604c8486809d1d873c468c9073d4c62487c8c84808894f81429024a42f46354a4a380a21cdc24616888c84685223f1e080a1a228231e0274664d3424c051f232631211e418c6229e4208b8c8a8098c476cc3982d0109051919f22a11f22231f23a02449865c284c1298001d891129197b887e6241457428c088504c89921f9f580a3f444346453b4ad8f980c9d0078c78ec088004728ee023340454441463c1c7041246f02121a6c24f90077c5210024252f483c4c788496cb32014731cb3b64034942496e459108a798f299395408d7a648fdc8fecd151ad44e6d1513d72224714e9a8562213e9a81239a247940812a5dcd1d11192fbd1d1d1d1115225328f90ea1112d2453a3a7ace72474747f4e80809c98920d1a323a4a3a37974747474f447da2332918eeed15126328f8e2692ee884c24244c04894e24a44b04894ea42782449138248ec81145b24490e8444242722247481409a91299484895c81145a2449028122532912891233a8920d149644e22119832d90b4ee89c932629fa99014cf00c33c3cc3033cc0cb37f2ce91064dd1ffe3c8da94c2693c964b2eef334b6815f02dcc99d665666b3d90c7f15cadbe0e796fb6d6ff3c7dd755b30f6666ff6666ff676efbd6eb997c96432998ce3388ee3386fd46337e6118f74a4514d4d4d4d4d4dd456d22d26bda2cb962ce4dcd488c9439baca54d61b02c4caa51da4b2e263ae36cb3d96c369bcd9ab6c0dfe6c632f4f68f658ddeb8c92f6da25f9075efdcb087b686db7f69f7791a6b133c22ea3724931dcd5f75631c863535fbc772dfb174d1918ef44b804c776eb9cdcde68fb7329bcd66b3d9f7d4ff7fb79cb5d65a6bf5d88d32998c8e348a46d1281a658237238057997e9774467f28e9949246292994923621e76e61f2d028cee92e67187296f3e68adab61aa8f0892ca713f94bfeaabb9c35726e8cc3b0a6666f974b0472d228bfbb1b4bec85acdbc7322483acdb8e650d18b26e6ea451bf068dda3f965507b21211b28808cb5f9adf9099bfeac6380c6b6af676b9e81d77f9caa3bd756e37679b3fb85d37e785b37136cec6d9381bc7711cc7b975777777fce31df388473a32313131313131917500de0f8f45c43784b339b8e7b7a7b7a7eb3dbb3de9f6fd4bf387dd75ff94c99365c6322626662c73e408c75214c9f2975263f97a91e52f5970fc466fd46337fac88d3fde318f78a46385aa5015aa4255a81c646e7d82c7ba12feb87897269423e0d8e54bb54b71b5cb1ce4dc73f2ccec32869c3b4f1e9a4d83cc8de70fbae7ae50ce4333fe15f355f74cc6ab985095a306c72896db5f792c5d6459a1c8bae7e499f385c7d29f9075cf2f0199a4e33f4d1f75f7d40e8df29fdcc99ddcc99ddcc99daafee1c968f636e36c4bac2be14d72bf497e93fc26f94df29be43789ac73fec0ff64ed937db24ff6c93ed927b2ee5fe2b85fe27e89fb25ee97b85fe27ec9f66f7bdbdbdef6b6b7917573b37bb9d9e566979b5d6e76b9d9e566378c6ff8866ff8866ff846cb99966999966999966964dd56d66d8cc3b0a6666f97cb5fa50864b74b11c8d2cac8ea96fb7d379ed347de3d757e78faa0bba776628949bab358ce1a493716cb1986a4fb8a256d22e97eb1a45124dd9c585626926e2b96158aa4dbc5d29548bab509de9c3f2659ba1339f7749e19646e3d6975cbfdc53383b3bae8eea93db5a7f6d49e6aab08e99eac3aaa706be4c439e290622ac785123033a60b33cc9cba1e4b630e2e1d4219c09ed0a8d143079813d80bae316024e891838e1b7ae02076e92145fcc2068c2b0a0e0e604d602ec064a213ce113649c464d1e38616981ad9eb8d1e36f488429306f60214e2c5c61705a7072f375e6d845af450e2c1821e35b46260b5a0f5a4058307440a052d28ad325ab7961938c408aba079230c838b6825792bf85ed0bdd142a375c6ab072f1ed080d18306d7018b88d697560e5e615e6bb0a4480981038b991a4dd2cc13fa85afcbd704c793182264963c1f68a078543c13783d784cde0f323ab470f039b55e6045d122a375834fd6a3043d66e821438f185e6ab8bcf070e3b5031d275c4a3b7878a5d103ca6a0b1a2f3d927a3cc1b9c1b8e80143cb043a30d49ca1a3a5c70b1e1b3424480541e342d8a5e58446f6d2c167816d81d55c5b5e2eb89e704dd129c2b58453c4abc94b46c3e49ac195c3eb8c171a3d9cec29ae217462c08261dc32d65c5a6eaa7041019b81cb0a1c2bc43558308035b95e00dbc25573e100836259c1c1824384cb0693c15e72bde18a81c6d683042f30ae2f7ab8e072a345825693960b3d9abc683d64af1bec0d1a346ed480b9016b23c7851c1f728460dd20a7871c13c0b25095c093e2d5e029e17ca13dc85c11e3e441494dd1926918522758cd00a2c0bddc2e9f05aef21d91c3a480d03008a950d900c3020603d813ec0a580c606cc434f1992014427ff12d71573830f5873bc33af8282fa503f7047708ad04cd1655066f0347044725ece1d2609bb04fc07a90f3434e528e931c1860567860a8926c17951b7f835617150d2d17dcb4a1aa212fb556f0fad2fa01c4019412825129d14282e6ca8c15dd938f26c325744265c4ea89cf49ab0a100b95124c8b2a07d812356dd4b890ba81ea8696122d2f355368b8d052a4d89049016de352e1e1e03dc1b124030395941c375a5bb835625ad01dd1b5810388982ef8063233992930da1de3060b9a205a2cf04ad0c9404608992a29293245c4486165682dd17a01cd145e12f88297032c0b5825aca5a6b49a08bff0a6d42cad4ed0da0284522dd17179283568c05490afc090801dd1a2410c15b015e4b4a152011803ec0406622544ea0acd0c5a4fe012780255199d9498a816183026ba343c1b5a3068c5804607386c004b02a6c447024f8a16ada6c9aa06d2005b8315d5ea2187879c590e10b017b8a03c196cac845b5e523c1854361c17705b5e3768d9584cb8c47085e1b281ab099711b01db0709013440e1596193027583756193017a8a28450aca0bc19bc1b667ab092c1060a1b16acb0acaed87051f1c0e6049e971c36422b6c5420b385868d9b2d5469ac50f0b2e11505a6839c216055b06a376fb4b26859d1eaa205d5e2a295a525450b8bd6142d2f5a4cb0b2b868f041f171799133054d0c88c0d4d0499a7143a78b8b0a5613ac24585a5848b0a0a0795263831dc315f512030719a93152b50f0a180cb0a41d397c588056402ca92a20941b36c0223e242e0f3c1b7837f8b2f05e601d1153456a08ae0d3c04c7c6c5c232c21b83c60aa704cc08308945c3d18347066b09dd84060817185b87941ab034729ee430b98ac8798185060b0c2b0739506054e02c70c8f07a02b4c1258596cd1ce1e282a6890606db468a871925b40b334ed428bd945e4ea4ac6831704d46092f8a6a06918db186f0f6f292f3d4fa621c4285837692d383700a0b831929582a5839f12da192e19dc8695213844d13ab06ac316068e49c00e61446d1a820668ad6151d0b605ab8ba70d5e055830e0966a074b6c0c0b0bec05ab04990a3072a2e5bb65dc8c1039db49bb09e606d9959a2f544abd641d1924137844d0c343bd4ccc0268871874e0b2f0696123534e09821cee015060e0f5a545e63d0e4e065c6ab06af32c42d5e51220dc22b70c2c0110376639d0193a21545cb29c70a9c1cb4c668a980460c1d265a3650c5a09fbcc078d980d5c4d5a56e7941e1aa62acc1eb861719af2d60135c128e163833180e39988049017df02e324cac6288812145c467430a8a9a024e07160dc61b7028e5d856507488b889c1a7842e22870e2f186037b89c80d940d3030d0d870b1c356caed8fcc0c241c78b118991062f1a5e258099018b92c306384be08481751995604a301a6053c09a705db989829d01aba1a6069a3270bac079816883a8c4aa418cc252da5105070c1e66d830ba06d814708b8e282c2e5e4f66b2c8a1058789950c5e3968e92066e182a223060e1a353fd0b471e3c60d153852e4302347193851e070d1b172130618849e01acbd70c821c3b1c282823d314a812dc172d039c10b072d292216b030301d5833605dc10a83b585b883b8c4ba419cc2927203068b8ceca4ab926ad29a92530516c56b86114a4b8b1615600e3367d8274c8647033e41eb08580d60608c418c54ec20709018b9c0013346e5a08d40b87870ede02243c7053a2968c9a02384ebc945844e153a57b09eb49248516939d19a410b8a7a05cdacc5a5d582cfa1db6243054d9356d4aba0a58525a3f9022b2387073759e48479d972d6604df19cb8b680e5a065042883f005df13d897970c3237bcbe9861010c07b01bc0b8c0c8d069a2d584bfb864008bca5f3c12641c844d78361a18c0c6c8d901ce1b3457c06cf0a281e7828b8b4ed3cb0b9716af2e6062803dcc707126bc2fbe27749270b580a3812bc18c0d33516694666a98a161a6043333ccc83013c30c9499a499273330ccbc30e36486042b1f562658f5b0a2b2e261b5c36aca6a69a5c32a87150e2b29ab1b5636aca2ac94566bacc2ac76b0d2c14a8d551a2b345667acc0ac6e2b335665ac72b0fab2c2c1ea062b325651ab3156365889b10a63558315182b2f2bdbea8b150d565eacba5871b19a810b0cd8449cc24b4215e6d6be055c139d17d818360c6ec57ef266b818f68bc581b3a1630795163258a8b2e8a67c0f5c161c169ff44f5e3158212a16d54a9db90c568ac3c0325926dc0cbb02d7cd35035818393a005dd0759951a38565060d0783c382a570255a28e89c5a45a87630136615452b05336be4a8f1da028cf2e26255c33d634607ac14bc966811f19ac127e5c34167091d9a8e12a1961754c8040b055e0d70b6c04923471b2e18b86200f3a28302571630db4b06ac226678c0c2e2fa028302f685ab8c991dbc0e3a597456c08ac14b0b1d176e6c7835a1f3e486059907180b60347059a991a165e5f5822b07ada5d70a646c68457941d1e942670c1d2e746ca0a3834e9596924e0e302f5c4e2e2c749acc7ca1f304ac8b97166c034dc949a74c16e5295757f21343e2e3a3a91b118af9f874d80730663603aa26e7a1417caf929cc706f1ad5a729e1aa454919dae957bc554cb6339c394ab2d93c96441f058e23b9661153d2caacb3715bda7eaf2ada90e9e0c1861264b3d237d6bfaeda0290f5e8f46c2ee9eaa67f347257d73622575f57ed74f88ddf45b400cc9ed9492f3844dfef28d7118864da4a79484d47d4721b6babce931b3babcbb67ddb9638944c7595d658d8cf4adcbb05435cde9a35431912e8436398f6a07faf20d04ed4a8d74fa2a552a207d97a113e97b8e2b248092aa29d3876f2174542d4d1fbe7beaa84458aa967cbfd855a92edf9c38abab6e2bceea2abb19e97bce1814c038a9ae494e1d83c28d8dea9aa4254bd512e95bb554774afa3180ba41d2910607210e726ea10245f6d4aec9c654774aef89f4edbbab526b3649771dcb0e0be9db060625f4281ae9db7b721e20dbb767739e595fbe67dd99d5557a24dda51745fa0622cefa2ac330057e9eee32becf59af74c680251239a70fba27cb4715743c9113e7e8910850fd0921f46495f75f0a593756aa9932917577948a083ceb795ea9e76590c9f451f7a4b80bb2ee0eaaea1945d6edcd30a6d3104a2200b420e8958260067ba68fba73a64cf7de7befbdf81372b7f709b9334c53def9fffff7fcadffffff8a537bdee769300c699413b26e19198eaa44d6ad9a81dec8ba57f4cb8c9d99f14a67663248a36813ad823a51288a05a5512468d3f451771466c294eef9cd9c73c6e22427ed660f8a8382828282d2d8eb98502661c2840913e6f17dab3ba765a1d168341acd666badb5d6721cc7711c87dddddd5d6beff358576e9a6a535353535393e5ace5b0e5acb5d65acb711cc7715c94474545454581618cccf5acb5d65a2bd3b24ee63299ccddddddc31826cbc4c4c4c4c454adc061df5a6badb596e3b8cb71dcbdf7de7b31c618639c73ce39e71819ae737777f72b576ede9d388ee3388e93b9cb5ce63297b9cc65d65a6badbd4f4f4f4f4f4f34779ad39ce634a739cd7e1ea853a1473fba69d3c44c78cf2fef7bebf56b6f85ba77eb30c69391a950350db26e55bdadd8b09175d37451636b6abcd29a9a0c56a8e9a3ee59ddaa5495a96a21eb9ea9349aea44d65d53b9d41959778e5ac5c6dad878a5363619ac4cd347ddac2b61fd84608c31cde14ed6fe5f1a45b35bffb8bf5926264c652e731cc7711c8799989898989898eacd9dbe187f9e4ccb3a99cbac4c7665baf3b4c7ba52a11c0a0aca9f7c6eb9cb711cc7711cf7ef9646a3d168349a4c2693c96432edb95bee5f776e6fd65a6badbd72e5ca950f38994c2693711cc7711cf7ffffff39e79c73b6d65a6b398ee3388e7b6badb5d672319e8cf709a1aa4f08dd9a7e737f42e69e1fde39d7ecd96677ca796b9537335393c346c70ebb638757ba63478dcc6532994c264b4185a250505050d42d872df797d22c1313a63095819ff75926264ce1fcffffffd8ba53f51d5cfc79fa76bbfd75dd5d4f773f9bcd66b3d9ec76bbdd6eb71b8d46a3d1689646a3d168343bc6ffffffdf7befbdf776bbdd6eb7ffffffe730c618639c73ce39678ee3388ee356339f9049bfb9e74737c6153bb65686f7c45bd7e4d0b1e3031e37f6e6c62bbdb99973d6e9d34eaed27f5aa5d168341aedaf8c661996c964b26b53309b61999810df14f87937cbc48438057edebdf7de7b2ffe91fbea96fb9bf375cbfdbdac2b57aeb8bdf970ef9dcd66b3d94cdf78f7de7befb539e79c73c618638c71c6393c9b1d1ff0b8d9766faf746f7ba3f6e643a56eb9bf19e7d96c369bcd747875369bcd6639e79c735e5a5a5a5a5ab2d96c36db0e2fe7ecf7de7befd5e1e9d87aee39b7fee083a72f64dd37517563e161c8bac5342c1459f788058ec5c1f14a7170323837ad6e291264dd6393e3d8af9175b35e0bf74c64dd394fa5655b2dafb4d5cae02fcdf98372365b0d18638c315e5a5a5a5aaaeed672dc5f7baf577a2fc6b8f2e071e34d8f41e18c2fd5356f3e2124dd7a7bdc6c72336efcd1ef98474e06579c640e1b2f63da4d8797c54962da0e4fc6c39b24153d4c478f6296d7d279792c222619d3cbdc625e31bb90739393a7327d0d327fc9397fbf29262d82177393646e158d43759b2e16f22a91750be0ceb0637776bcd29d9d0cae40df2087c0b17bea4d721e1c630d09bff44cdf02ac653c2a12598d836383ac9b042e8c2a002b8f8ae527917597f04ea858725164dd020863c75b7d433cdd790e53e04779381e1eeb958727839c6dfa98398735fb8e38b25e795324b27a860b59374d8da6a6e689ac3b0757450e6f8a25d744d66dc361d16175e8f04a75e8c820372bc1cb6f6913db6c369bcd66b3349a1d837e4370be610abcf9f6793a5ffa79fae2dbed76bbdd7ea4b938eb007838bbd3747272727272da0159770e7ac3f47aba635db922009b179bcd66b3653c7afa661ca6c0cfd3ff7fbbdd6eb7db2de79c73ce3eda911b6d1e67bdc3c3229125f507589075f378e271736323ebde5d6c0f8ba5ad91758b5a463b8e5ee93866d0d2f057a6792b53b582ac7be79fe2bcd9bcd86c369bcd86bdce2d07e676bbdd6e37cee338eede7befbd396f3bde705af4b24864f54885ac1b670987c59a9175e7d82a395e164b9b44d6ddb24e74ac8e8e57aaa393412be3f1f2a54df3669c53dd728f69f674776dfe0db179b1d96c369b8ddec0dc6eb7db77bb79ba735a161a8d46fb6834ee6fc6ffffff7fefbdf75e8c31c618e79c7d6459ddf2ae4864b54e1864dd2e9bebf5ba0da1e4acaed2bf90756b9877c5d29fc8ba7b7c4328e9555457dd7a82604100c12b0501840cba93c6df336532994c2693f5dc5aad5683517c3dddddafd93d2ace49bb598f8a737293c4f4dadc728f71f674976fc56eb9c7f47abacb99525a161a8d06d26834ccfdcd16e4fe66e7388ee338eeffffffefbdf7de8b31c618e39c737e7d425c83e0dd6982e735cfe246b815ffc1a790737b94c9e34a13bb1214b6855135b75dc3b864227812ade644a3d168341a4d2693c96432992bb992e74ada953a5772a527a030bd9eee720600bd93a4dd42f0a638b348491611939c22250b50a1dc4946b3b799cd7e433249dd728ff1f57477b3633c62eae9ee564add728f31989b77d3b7ee966f17639ac5d31d6df6f8ab6eea967bbccbd70cc698fb9bddc9bbb853e84e2977eadcc9ddc9727f73e7eeeeeed65a6bade5388ee338eeffffff31c618638c31f8799a62b26e0d002f8b9414c19d66cd93bcc91a602a19d5cb169307d30b5599eaac36555aad55a7d96c369bcd66341a8d46a3d16432994c2693e10e638c310f59b70cc538678cf36a6665369bcd54515151515151511d0eda449b685968341a8d86659880db2df7176f2b9b3f7213994c2693c9b25bee2fbef7de7bef377aa31ebb918e3db55aad56ab8de0e100d4a72e754bcd62841572eefac3e4e9a95f99a2f02da4616a643bc9a524425da2d59c9ea066b3d96c369bd91b8d46a3d168b49e599bb559cb35bfb336cd20eb4ec96432994c26c3b9cb31140a0a0a0a0a0a6a6665369bcdc2ca44718a7e1b74cbfddd96367fe02c341a8d46a3618cdd727fffffffff1bbd518fdd48c79c73ce3933d1257853a4241529b943048d62aa4b354a85529bac01869c9b923179983817d5846961adc6693fb9a0dc369bcd66b3d9ccde6eb7db2d407aaccb822fcf5a10b4e048a92ce9da92054170832098baa5c2d8cf097b3529d57b38b8db9520430940965fad0393b8d49c3c8f2528a31b8fe517e6bbf917e59fcd3f28923e01c0a35d47da4df767f2c549b2d8084b8f2c3f007855aca416e1694252b65418f5859fe4dde1a663a9aad2ed528525b5cb1a24f22e553470972a2d2a2edf2e554eda76bb2929815584af2278f57f04efdff39ede7ea452aa4bc95b5272cff3b6576bad75cfcff36a4dd952515fbf2aaa2bec5236d23797a3e88df48dbf2fcc57ab3b65d8c4a5eed49d52dbbe2a6a0924dd772c4b0081a49b1b4b10582cb2fcea8e1d64f9d554f6f78f6e565d2604a004bdeb477ffca8277895e352363a437579b7ea4aa249dfc771dce6386e766913b9802fda565d6128a01a0088a7bfe81a4c1f21f8d608f058260849fbc9307fb01092f584facd50797ab6ef4f4ae5014285f44d7ea923c2a7217d7b54ea4e37eb9ab48d7e49291bf92585a4272346a8c9209f10d5373285dca8b9ec52b5a4006a15e05514bc2a42a1358a5ea249d387ef5d3f5dab2eae7436484aab5d805769fd74089bec489dc8a82c7f42eaee90a8ce8675e237b2a4370f03d5c597bac3e63c2c27351ec6011378400d021e0444c084368549b202258b1151a6fc40fad65a6b2da34d5ae63d5d400317f064c408410c78da768bc2402a4a6a4a8a29a564545d4ab4d2cd66b329dd684de9ed0688580e78bac6a58a0ed46a4f4e1df8943e1d82aa8bd6aa0b89778bda4136b9cb9a306c52f26eb6eef811af472ce2cd1f53543bd013c09d6fff2e55449c3067083f969e152655156feb229f10980ce16f15953dbf21b3ba7e17f9e8d6d433f225604e97b7e937a40aa9b7916f88572f16fb865cf2c8978023df90143cfb0d5981be41da9d0292492b1224481c0912db81747f43544bbba7ca8011e6103d50f476a021f8b6a237459cd3557a4254213d26d2b71107134e2e30a822d71d2ecabccd1f744e993dd41f48df33c7a0700697ea9a241155cdea0ea5946ea31a1596baf32311110b35e4dd2bb81b3292054cde4db4c2654326238d3079b7d188c21155e66b921e8324be88413a0a476099ae4996aa2a1ba82edfdf9701bccb099582bdd134ea0ede188d1a659e00669e4047cf4643f03d827183ce4185527175b2cb4a85c4bbac524807326a1b1ba46fba297e42fa7edad79e96421589ac9014bc4ac1d06ae91aa46f5b65291fe8cd487511b17d5ebe2d1f988f8cafcb77c5b745f709a95bdbb4123dc1b369a5d2b3dae6d9f2154ae269a5ba2325d45448218f8a5a69fa5051c1c244aaaa087d5baa4d457d4f75fc6a15a8ae0870bb9c4f5e13edc58be241d16468307a8d9aae7d4f1fd4d36814adf9cbe909744643a8dba657f05e9c641533393f07d09ad3d947d2ed22e9fed153334ebc9d38a70f1cd2ad9730f9bae912cf8a1f97e9c33710f16bc1f4e1fb8b6286406483ec12570300d94c21ae0983ec1a57d814b2e0f500a12929292511d8b85a94f70989806ae905a126b58d00d5e5db84eaf26d0290d0cb16619730cb073ef0397d5620206ceaa9cd5ad8e4631d75cd5b9ad5bca5baf3fb5bf8847c217d6b3dbf3a96485ac8baa928e38290ee1eaf62d0e442d6f1d6c227848e5c1469c5cc3d5519bd8dc0e3441dfb8a39db8a343436adf0f3521fec9859ddf0a819774f0d018dcd6ee5e818af78d2374b9cd5853396aa261efb8a37db8a3535e3de97b31f7e5eea833d3f213b764fd5f313b2aa19c5595de2b8c5595d34fb469cd565b379ec0fc42180d0a61de2ac2e1de3b4194b1597ba53b3559b662c5555489a5de2238f13f5be22b8add875bbd2cbd90ff7fc847cbba76a6fcf4f486af75420332c2a2a3262847acbf4e17b66d34fc86aaba8d499f300193597fa72958a2c554b9e6749224bfa57b335f56a36fd84d0ecf92da0ca9a903946bd54236aa5eaf24d236a29d5e5db264b38236a2eba0a5d9b3e6a1061a967358ef48d63049e7dbd3592c789785f316f2bd622e886610729a2db2fb280e45d71889e0d445451a92fdf9c3844d20ed2333e277efb8ae1b6a2b7a9484920a2939e0d24eff909c1bba77abb472c22b5818830ec20402a10b108997df7fc8470bba7feeea9fe09f152a238ab2b1467757de2ac2e9517e1e4a2858cec48df31bbdadf7a5f9113c72bc2929a41fab6a46f509cd5f58da5aa49b5e48d9d38ab4b8f599cd5f563a99ad951c64a38b96841a5a6534a292975a7ee26d297fce55bab96483a961d0db4b669db0af40db2f3a28a348cea4a29d59d496dd595aa81f4aff639212185468459c25ad85442753569e201113f44226c128176515dbe69ed4ba2b4f62525cd97dd74d7d4d4b10c496a471d9d96e9c377e9754d90be9ba4bc44819222230526b506e9db5bfa6ade92b7e42d59fbd53ea72bddacc3d235e128d27769659d1775fbeeb4d05d9f5643d6a785647d1a26eb583e0ea4e3a73d6d93742cb934487f5a496f4fe36c6684d114d54518320eaa0bae8bba5352dbe3307269541e3a5f744f28a2f8d10409494c5811798618293c544492eed256214b7aa35dd41dbb7d539b19f3c76fdfb4c9799ee82eb1ef9f2c20e906223a717921098624afc5830c6e6b922862d65442d427d27739b9cc5029591280849282a954217d138036b99025bda96a550b5993583b54d7124f9e80e072d966f0a898c92a4e5277582ad95589c1a325f02c153b928687b0542da96c6416a4eae94b523991be554dcc13688d86e03b657ba2a6c2a46e9faaf6bb5471d133d18790eed58c0ae9aec509891a169a576922533d30a5563ca494563770bb9c68ecfc2e5735a00136796790be4b5005e4bc91659d81ac49d54583c633d277a5a38a8aaef4e6799ee7ded2575bd2367ff997808ed4ae25c252b5a46daa2c9307c8e60132a66cfef2da45b565fc818e568c207d875fade21041768f38fd1564fcb6d0ed2a21b07c5d48df76d466d0f1abd5714775d57c49ce9352725aa32778371a826fff3ea52fa992a557c992d66a089b6ae5bedf3d55fbf4eae00a97b4bba7529192544545e583aa874a63de08696113abbac26f5797ef9516a19e6d9bcdd655993e7c3f27a6949abc1b3d61ce10ca4e08d277ada391be95ba21bc33f40c93d4c5656b217dcfb2438267a6e459b1929adee0553193549c51bc1e31650ba9c80226ed980aa3ba7ccb8811762491a537782d1e4215155515150faa2952bc1e3125a5be525448a3904cdd307df84e459921f8d63407efc539c58d0b59c58ea4e121fc6abe547740924225f15444f93991ae6dd555539a3e7c7b15a11299b2a56cd3470843f8f40de9482b0346382ecd1fdd9c3e4a7f82747aa3619ca767d31a59aa9a7a44d592bf4a1593155554a60fdf54240aab847497aa251b3caaea61f2a4bc4c1595f9c36eba4b1516d2554290293248df752c534b3b73bacad42de543023ad28e295b67259c241d55295bb8d222d4b6eaf21d36855784464c9e20db004076197ad9a26797611620bb0cb790bb0cbb384f90b167c45fedab9123fd84d46dadddd65aa6baa36d75c7b7a653bcf9d94ceaec1096dd925058bed3d334cdc16e6dbb219071566d1b6775691be99be2704522991cc24952d237ae7941a8671a4bdda97be691a59ecd544bd5e5bba7bea8a2525dbeabc88956a4aa23c2d2b391becbaf46faaed59d1e4c9e94ed4be5d14a36e7f16efef230f3070fe68f9ada25bda1a43c9434086f979488923a094b7ad39bde9c47d7bc26d59ddfbeab942a4575aa3b93747ad3b59bdd659d81db372a952c6b15bacb8a0509b26a919165e5427d4f7a8275812c6b17a46fade43c2b29f5e5d44956227d7b37e75925f9cb773896982cbd1be93b65739e5510f3e5fb86d458621ec0b10c6910df68fb418497b291beb538a78f9242d155541e5595faf2ed5bd754b7bae3a4ef1510f4844afa0e9ddda8446e36d528ea18423332820104086800b3182008865118890255d24b0f14000d4974583c56341a184f8511498c50729441121060888c8088c8c060260e807aaad54ab25eb5c2b1a278fcfe0481b3db6ee57c817ef549cfade79243dd332e26e2146ad04b6e4741d18072ed023f3a1956b67a86c0ea7b047358f9e19de4e67842e542bda2ba0e874222cbae0ee45a1416c043d082b36c7707e99368ba4d46815d7ef370c36b82c09935a58963864f914bd92cf692e045309f6448495ede0324726abc6d81354fc7b02c58c6c7a8f1a328c445482afdc85bc4315c3c62027c393278e9f95206589e0d55024ae60338ed30aee103222b3067c778a803f0db1ab011da6741a4b31e3e6c8f48a96c277597aa54b5cb3ceb0ec70c8c97c72862f1828a4ddcbf1fe93e1c7da6e0ea40c64438b0498e28090e106dc9d7bf47dbdffcebd03bdf13993f13fbfcd0c28d4daf42ed985280989f102aa6a5f7d91b5838fbcfc91c30810a69de69a5aa94883c305f93ab6677217df21518db5ec6cc477b65080c99682a9bc600e01e506d92fbab0e3ee8f3e2196bce03967dd8194405cfdb27e8aebca2ebc7f22c5ea31eb486a2d296851ab872fe062483acf3a8c7da05f5df793700eb2f58e050f63f8917899392623d7bfa6d4e313765306de75977a2d82907ab83ac1a1cbd806efb9538cd3aac529e84353750be391663a223ec5dfd40ada814f06f929ab9606d421a856b286b78218ff98c24ffa5275660163ae90eb7ff576b1f825a937282dd1eda63cf098a90c02c30bd5769cf8d2ff023fba15309bc962b2fc19f5c797c38a08001f370c74b445220a17b878ad69cbee4a9861171c065eaf9fb9d8608453346f4bc67b75b133f7b78cc7ef22b3fd0b5237edddf1de40601692cbf746c245d628e7e45299d12107fdbb2f755101bb982b8552ff1bca757dc9641f168563fa02e14cc6c50538d8b2cbddab48aaaa7e2a8ea36034ab69c37d19f67d57e2ee7ec2b0f6ac817f86e5120835a3faba6db58d1be6e1ce23a1917a465e35d509696f8f890355dee273e73b4bf5be26dcf32ae6cdb74ba89226f22f9bcfa1e9cbf93f1fd227e3154fc8a6db69f10946743c88d9eef516fb47d9c6e72e44f35233b5809db0e8b348f62c94bd45c2dba41c21f2d323375912ff9e2830d7f2d394b8e2192187cc67c61de12ec0e20d3682a3bc43d7ca220b664cc64cf9d1c31ae143fd3e1f75ecac7bc108e44a0cd25956b7fbd401ed191edd8625acf262575797273b3dbd63c3f84c17cef7aa2b3bee8d2f15330425de995fa6a32edb75000998ea185d660d21016dbf5b27ba861a3ab82bd40dc997831af76263f41b146468e3f49da6ccbb7e60f8f878447bbab1a77b796a76a2305a378e926945bf37b078f2c9fea9ad7f6b57b5fbfdf3a95434df45f8f05886de650f38f8881655a60430ee43ce205ea4cfd1fe2cbab50c2c86bb4c90af334d05d954db6b6b57df65e1f029c1e5eb5d93a1f4e5e89cc8c910d4f2e8151c7d47ca9d4fc1113754329187a8186bc9499232a05049844ca50a92caf35007884c55fe8f07c00deb7410b802320d1dd878a7e7ed7d35bdedca3a9217ebd4e9e7154aa2c75183938019d444dfc4e22b3eb3b9ce41c704a95276b036f2f36993154681c65617e2e5876584a98c55cb58b403091d34a9218fcda6867a98c4b6da8ed5f2736ad2eb92212b23fb1377e81ae55b3a5048d0ec82dff72429715fc748b0384647243eb8f54b29ace8c847ef4842be92340efe7bff22bc4a1d4a79cfcde813c975571f2102773d5c212d050a66ae2527fe3c22456c9b18bd2e532020fdc11d3c253b412e874fe858c9c57370ff8c2950942bd679831eacfbcf4c9bcf1f8d01c4b6a8f4e3a14a24e280dcdc77a079f7a094ed5e9f6dc7e2f83bd069968a79f08218362b58843fc0800024e71c5dbd93e1b012b3e5c83e6cca67a60e40e9ee563d141a45d094a32d712c9bbc9cf887ed7b117718bf0fed85ce70a0acd871d454aae4f876357aafc2766466d7310da8f81a097a79d62d57659df68eb26fe425596437c6f00b63350c3f43d9ae36f73035fc902933fb2c0bbaae9b6755814ee63019b661d8cd4501a6e4ec316cc13d460abddfacebf240a626b9e9e33dbdab282d915f4173039380354105c2c8ea0962ce942a5d07119ec8066ba4cc2272094b3bd1b978d798e0afe80921c38706cefb7b2db72223f00ab51edc22027c4a449bd15a85bc8f9b10ae9652e0883698379d60f1fa1196cab9bc077b1b7e8a9612efd9447f88bf9a9a68520f24da9217a53042f25847949e454f8c282aff2b79dc84977b02eda2621eb9287a6484487df27b6dd52ee5c018c9c57d2f3d450202389e0b2a8373a590ad02f9f2042f8f11539acf2ebba434ee349a022f590c32fe83a3919c067ac8e3231e13089f20d9c2e08adcba9f1fc453356883b201e6e490f6331f77fb36692a33eafca14f9bc878824663994657ec3e08618a9d869394feb0841cfead7ab702a50003dcf3fb0e1ae35872b8fdb50c3aa032dcf4094fbb3a97a1d8c287714ce869f2b844b73e5ac3261408d84b3c38637f2cf493a3b32c1a5a38a359c07830abf09725a3dd87f6ca2ac508b9c52a062f357f3ca8024bbdfaa802294cb701da777970e301149fac178811938da1106a6a03465471bd23c53957956a72ba0da1ce0169e4a0fc13f83cea1ab0b2be092c1b09fd5d26afc2104e0a138b4277f981e6cd9187db45e381f53f481861549eadfb655b511351bf388ffbff0dd6904167ca991da169aa2d71f9d22dfc0653848416b84b409cdf58ff71044324fe4fd55d8c1cc53093b98c68a40eb8ed0e4497c00a793164fd4183147c6a839ac63ae782c6b59bac2b4799a2c8a2f3c4f8f4d8e3374953c9afd260527d2051428945e23e2e1dbf4e94d3297b396cf037798ffcc2217068ba93f3914fbf3be719f002f158691020728e0fc883cc0e551090165c701b7d0ae01e3a95b0cdbd222dd4e88e23ba48b3c894299c7a5dc0f6ab61a144f58f8910adec4044cc7161f4905e708a76a4f03aba526e1d287a95fffdd871b50a9b78b8a44a1b8236803b90747b6e0a6f6ec054594890234d71aa8ff95760952241f6e8eebed4ab2321951952fa5766060009ade50c84ce00fcc7cf5c1aef02770057dfb7f3bea451db574d75efc2c831d7dae875093afd3eac5f2ac7422d6ebdd5647289c492bf386f44987ec49813d0ddc9ed4e4251b684359c5c533ba3dcdde0a8abb8f838ff068f9fb8bd195c162bea9b14928e346038731ab5e39627f7a35792b73b236e1610b3c27abb905c514906ecbaaed6405988cbec190da61679d0741b1c000c144c3fb7d8437f6fccfcead09aebd3d40a1896bfcd811708053ff1ece70431cf9910ef3e5559498090595470040d5526f1c6bb3b8df5a1b5eff5edcd59a5b9e7b8cc58195943004f8c27d330dc24a36230cc89ec22aac3562312c1620b28a9d7938aabafc7634b33d340c4b930a762dc43c08a7c730fbe7ce429573e6eac3868de16056733e91b4b601c7b5d645768da7dacbf49c40ec597836017dc1738e0ff97b4efb71572e38d81dcbda52b98d2e2b3da2bc4e0b95c506803c5b944678b0427352be61ff32a546bd42f75c84b8eb549a2d9e480107794cde756f75ef79a78f4df49088aeb3c02ad64c9d556162599d293fa21b7667e0be6172b5c91bac44e6fde153fbe7291c97695da9548fbff1f0e92849068d802f81adbc37850ef0693592d5ccf49ff9120c0c5d786fd70c50b438460643d58771640cf9486239bf1ee63f00614962040f5b162e153bbc07253b38b67e6ae27fda3dab9c8ad0ee8488916fac06947f8d5746bbf7a0cd72de02275bada999be2d73e860864c2aabd0db23c7b6c7504947732094707fa528364222f978a4efb051b694835429ea04f803513014426aa16e4ae7d19d54856742dc5fe9b3cd5cfece6fd9ff5db627d462f40f49a958e972c62aac81a2e9d947b514bd991d486033208f37b55a649b6492189b87dc6863cb0e2fc0ee0154278b24aa01a92015338d80de2907c61fd5563a4b1ad7c7fc8090a0b27f461903a8d1941abb5529f14e534dd012e69f76d3e6d73e8a36ee86b5abdf294a605b74392f94a2a9ad6475dfa16a304549abb78d30aa53239df43ff4936680995c3d26f64730e7b2cb3249a2aa93eaf4028019abc419fdd731ef63b19c38a3a8da4282e527e35448680e53a78a98ee17e2b6d4724b169347a44705377a4c33d1284ef0953cc7d9959118943a1096ff3338f6595736f246e8493be216878072465d2bd486e66ca2a521b63d3acbcbd6338c7b15d6cdc8713a03df62db8047f087a2c09909b3ca6f03d6c1b6d5086d51362af446185bcd33a990473e09c15079b683fa02ea00d0ecf3c9d32a3250b0f4e5314ac0fe3448540aba7bd377b643accb0649ea79d9de93382e5e62d8eb7809393fac06395500700742f9b873a42cef80d48339f3fa0f7b7124dca253bdd452a43cb601ea8492e6d858d2d1c20dc8e131623b9a7d389803d23916a89cffaa306973fa490f182ec575420857e91e6f2af532ea3f9f2ee88c50a64139b069ae3bc0c0dc127c30951f1dcbdb097029c59445140a4aea5ba116ca58e4fa455771ff1998d8b6da1953ee3496334930bc423e8bfeb1953edc69b814631479e8d07cd0461bd507607277d9040f463484001e9228bf177500b78fcbba6921d15087fabaaf78b469df0d2030e2102b114558677c4f561c5f4a6422ce6f4571b4d12def6ec9e094abd3bd8b37db25a8f9e3f07d3906f62246d0ece26e646b8724f9decfccf012971dec8a06750f5d7dfddaf448ada388701e489dce5eb4cef3975a65e753ec0ea0385e7a6f2c7a71ea408d7ddb48aee06357daf371d32789d468c18d73158a3e32ce27625a483686a2bcf77885fcb160674b66b2f61ac087aed9d18bb4a24e6502a88e968de855e11d888c184384366477116d246ad13bca53635c458e8cf6483c27805f8bc4650749c30ee2964b15bd023ce8a3040a542308f45df18538e93eb152329e83bc82bf6ba651ef2a65ccd20c1107a53ea33d0d605988bbe1d3f94a11faf4e834603380cc84d41d81135ae2c87bf6953eb086896a1698a80458757ba9cbadc33ad0d3e91e7c29f59ce7714131208b3deba9b388eb171c0302f1a8c1e7fc7b691f686f15ca60852f3c49cc5af24c61a82e3ff8a3e6dcfc0fd135ecb0a033fca424e130c58184b4dbb7f32f4939c022ebd474e94049358c60c45d5becd4014e16d7547721c586d8c10ff86e5ec1f4bc26d1681958aa914ca7411c03a10d821ac2b86ec6fbae619f45f6664788c649928eb68e8845820b363fbc9d5963a7c5940447fdd34742dff4ca2524b351065ce98e81b0ce2c5b0bf10752f0a14fd1bdbfcba789fa2360ca631eb8ce7edd8f73d012eeea42376f5d09a7efad2fdfb30eff14daebe8acd926fdff52a2053c137c75a7a5e9a2b802d3411ef067b5be214cdb9bb081b0b9fd3f5746f8d7bf4797ffe8bc8b1f4ef2bac7ffeb4ad2ea42b0df17882bb2c7ede3fad6c949fba7fbf7c5a39dcd2aa521ffaf82fb97c8d267913322777a249291b40f4ad35d44db395ebbb893d6b5789c4916318ea07d334c9a449b1e6ff055124f3addda34588466290ef26922e14b680cd51b68a3a4e513400aeec3e99218ce21bb751bb11001d4e9fbc58df0a1cc776d83f5bc5959a536be159bc08794789ea494c118547037a5da6ce87331cc63a586cb29e90b1d8e6d23a4cf9aed36175b746a51846ba08283a4c249e443290ac32150511485c4f5cd926a387085ef899aa53010ce435612a4880fbef6b418ed9484ef50ae28504473355cacc6f9963347148d93372a8bdba6c77a49c93cb93c49cff8cdd840547b8d2128203d077e09093a23c99e56d31c7825e5934cb7779e9752089be9092b0f79c21ad14427d3280ce79d092691e4fe3a674063418b0adc4716dfc3025ed8c8ad0ec45b0327ef89224f1bcab146d1abf962d4a4066eaeb2575899d58dcb368e08a8717b8863d95b7cb4b58197938761b05c213f52882d76f52ebf53a191b9445728b0ee270dc5c5c878c177f90edbe21410c334e9adcb9ebcbac3dd043458806530a93a65001f0c48c81d4d83bb1f154117f3cfe1df6d56ffb85e4c1d615dffd7957eeaa10f0a3d4c057a17ddd139b30000f88cdc2f3b6346c78ee3507329870b2c408110fa2c4a6d980c8602b8f5796fdfa554023b6599229538ed55a66ec80cde4a6368e3e2afc494d67ef2f32eb843c8fb7ef3c7d224bbfba5cf91e0ccfc4c34590346b7ee6c071649a5669cce6842eef50558276537dbc055df8458ae1a1098ea9fd78f7947479d6f7ffdf1eb277a63537670e8c7647a1e55f13954538fe07d68ec805bc9996f2ab3d795c5b2485e17cf301c0479578e69fa6ed240ae9ddbce5e2e66135573003c823d715145ca0e435ae8bbfbce46be77aae216669a182c9903586ed75f7b92af3089a6343c3e1db4b4b08fae14da7ae3fe2229e5dde350b19f90cff4299329f55e2929a9d5dbb81021cf2b37b29ee822e1af01ce8a263d51501290141351fc61881cf74c4926776f3c3fc88c8716aefba2f4438bb62b6a325926518d54b06d17a128cfa1d2e2de2bc8552cb0510a84fe34047ffcf9b12f4c93de3b35313436a36f6ff1228af000020070b7c774d4fc53d2940f120ca54d1b188f6131e9c43b048200ddce693aa63cfc41092040e8651308137e8270623008c99c08a1856f4ef45608aa0d3bd8adcdeebdb9d43f21e486814617a751e0602b18422e3966359d4423bd460f3730be1cbd5823e7de2a944dd0ac16ebb2f5e074559a55e83fd47c6226c37a819105ab8c1a7edfe884d8ce7bb5ecaa60af97d35edde60af3c1833a24ed95e59cd231062f3a420bc48e6006c32324e1724c9b8594c0684083cad5badf71cde9c8725459fdbab96f8f4163712b62d41c69660dd713bc5bedd7470a50d646d56da57390b63851240a0757dd49722d71592eb76f48ef78033a94819ae0b0ece6874ff22aa9681961bf39a18f45d9f648d490976eb297b3b8b451af706ba3f35677f864498f94c7247b311bb78dc5349a1e8ef5aca9b088ca683b112ffcee38ca0be09a3a52a1f137eaddc3f048dbe89d2514c0fa195c8527c926ff676bacc4a2240e2d23f194eb36f5553587a25d3b21de4cbabf410e12574588a935256af42d336df134f0d14e917bbdb88ffb40f3c3175fa132f0fadccaa91ea21b97b20ec7fe5439b9719e8ad7c6812ed5bc77634026d004e28ee729e5d0e1cd2c8389e945a9979b25f17affd833afe7877ff55aa5236f0cca8ad4d8ade1b9a79271825d9252e147473ec06f3d5105a2b909a5cc942b5666e982a6be7097e2f01cd3ff0c84a39f09d37b0c691c44968ae195050e0cf465d983ac1c369b7efedab2daf72bba8cc675476133ff5b3eee8afda4dc776efe1f0c1555ccb39e0074643f27dbacc10e861f556c6b324ad7bf7638ce39ff23774c45a7194bbee6e3f12d6257f76a2829b2b9d6f79c2c7953b314bd4ea94a7a390d9b54f15ca6f6e616a6ad7b878fa149b5240083fab101a00157259d7c53882c951f9ff6ff34d2fd6cc911415d761a69b6f41c13923f81d2c03310e1297324fbea8a3edc92c59909cf957ed11a4dae5f72eee2937b799225ababffca0be61b0259a7320e87c5901b06d22d99c22e7dc2deac7bb6adc4b8d6d696b8766ca3027ad59a66ca5f4f9c0d9a44cde1c1458a80228f9c24482f9bc3292a33b690d389525502ea77185d40d6f06c8ed4d098a6fbcc11ec46d26f7ca854c4c738ee910398a6b1f51dd1ebc2c3f1f7485908308417cb15e22840522cd068d43ea4cb1a74b857914252ac0ca1c710f6e52beffdfe575beb6dd47d353021144da3a9f543ccf6f9aebadb040fd85d642a3344f24b7f8a8dc261d1df0ba2d0c27e9c10f1ec1d394dabb95e830c702c379aaf111763713c4d98a368f3ff95433449257014728f1a8aae118f984e4c1780a2cb6b64d894e3902df0ffcfd234d83adf1509d5d8fce6d3c0b900f7e937033781d99fa26b9c5878b539af0d4bad8cef420a74f7dface628bd5c670cd789a94e1adf97c41a75dcad7b6e7f5f9025fbe3ce8d586f42fba61220e21f0241ace1b44b6b6e5ec7de2b265b20e0596d166faa7bc8adc5aeeac7c40c42095906810c35839087a06032486d751db004297a55e99952511de94460dc6b527bdadbca4df981800703bada7c4e4ee6790e3cf1cf4cfe13430a27afdc73481eec9bed97aff3feab6bfa240400c5cb8944491566c0b71efcffb049810299ad1205a080bb0984f38cf1cf583badd726128058dc15bbb4099ca76c0aa11991e4822ff32496da21db77bdd6d95856b66dd1007b69a68599f24b8626cb819fe272e33cd920a659326e6246d175c696ba60baa9b298abaa987b3755be068a2ad3463c95bb319a4a034a72860b21796d2ca465abe1a366defd788d3cf99ca729137a932a8773b7e8fed448f7dd631f2dfaf6fdca042024aff0bdfecff5d7df5883fd3331fef638608af66870d5de1b800d894ef6fa421463caca94907a400fe89693b692c25434541a0c76864ab045f60aed1e4e2fac4492445e40bc917a37e8c2b356001823b9dfb72e28ab7790a5074b65005a33c0e1c3fccd7d6ce5faefdedebd8d4f41c94aafeb758608f3f78fbe7388acbf012c6ad4a4675775d83ee16c3a6bd7bb52efc285ed8891499d2c1a880241babc67d164ff438e34c9e4bb49be14952289d77b5e96c952c02f912652e016110e9e7e5e3fe0df2deab5c9d5a033e79a2384836211367b11fadf5388c4285bc9b3435f6aadc90f9e15f2089cfc4fc590a513a449d96ca486b6a3ce2235a5dfa7a151d51e34d3be97efe5b571876cb7ba4f1c1d0d328eb2ce436f9a7c7c60dd133eb473b6b26c7aecc9c2e5499778f666c3ede235f4d763f31ab3a6281cddcc21829c82379434d0f8b9b8aa5858325de0a0173b8af867ffbfd98335ba02fbf7d6b9e014e24132460cb7a4792e2ae3c1091207cae1e185379da9436424e6770ebf11589a9b640d016df809191e7c993135d91f069d77ced69bd179819b8bd82c5bed7e260219deaac01a1ef9cf972d9eb8cfc8b934eef8542462f11f9d7845aa5b9d8e5968cb104ddd6353f4faaa8f11da0c9eb921511483b84d3c8e0ff0ce9abfc9637be41806f7d5044fb2c9ff5f86d19e8f164dcd244f5e92feea92c6c985daa21a9932a61ae59bb502b0c53cd70fab384698ec3660b383fa92f5a265240ce417deef975ebe20d3d0c233d7ce868d4f5aeedbab5cf8d7cb514a6ed2a93d797264915c310ace12825cc6584a661ba24c1664080a82a2d715dd206efc3d27df6deae4d4d55aafe0a3e55f6c47a738ad3c469abe09545ecd69f706c4538350bee37d06713e66e6eb3ce49b1329dc163165d0e79105d8ec5af04a850bd88fbb608cf504f60558d306a1ffa332bab0bd311c3ec2b50a05a3e8067bd42d7b8d5f588cced0506444715f7bbdc284c19f434612b3ced7d433f2eface7509c9a1fd1b2221db0fdce5ce4a2fc6de5c8e58a2e61559d78d53e8ebede6fefdfa07e350e804d4a0267fe9d232f6195769361c293d7a44895074a1613135a44890331f1dd017450ea82f8252b9cedd526fa1391f8d0d59a7d8d14d062ebb6eacb08ab9de649df10bdc162b4ade4cbeb52f621598d98bc1ded348543196e06ca1706be2e780d02c51c3b26d5483bf2c8b8a84ccf7b11e3405470364a5534a153eba794e7eac9c5921a411e8d90d63c797181ab8a5aeea7d446ecb44fe17e6fc5c610ffd3bb1ada2b4acc26db22fb4c404dc814c61e4190c6c04e8e7266d36c78a3a05432f11fc083a5d60571dbe6b66a8eaacbbbe388f2d1f86109b164c598deef05cfd77f520a4fe05ab83c9126b28ef45a0204bcca83fa702704a184b9f7c813b16501c503252ac42d7530b936f6d77160b6a66c54eec56d807bd4e1de5bab22501189c33fa51996a235b69f3efc67ec591470636023a6673b00b3220a1e60036e0829f28f655fcb8b303816a8a8def05452a9a58a05d8513ec382573ac4a58c1afb0e39a555f0f391d73b31aa9a4e7fd89d2b5ce0f220dc15944fdd832966462dd98a28009414ae6a362e975be613ac5081d420a8217058622a25a26fd2e9f2dfc12904ec789a26f72e1ab4fbce5011cb07515a057a20ecdba01a1e465a8bc02d782ef33e83d8dc0946a6cdcd099e1eb76bee2ef204ab9827137aaee3e2b0249c100ea2cbcbd3603fdbb9e407ec46546b258b1525e711aad870ad36640f4df11986d2fd11788e7e9b920595d0d13b8a9812735d24d748a4d8dd74ed3de34e4e8e1258e69be7aca66c9c602d9f518d9a7a4d0813f56a680c80f5340444399fd87a3696f934d349d6841f504c31bd7c55dd0f3b7a2e8eaa12b9a3d5decda280b36693bc8bdcc168d99139b91067018d4b61c23176e1a8efc244945765d80c932f023662d3e631f2407357fafd2f39acbe6d7e79b50767cc1481a16154ecf2e2ba12f08215cb2915c5c3257353058ed0923d6cbeb8c2018c73694d0d0089c3318eb0a1a396348a6c390b93a14635e01a0c4a3500751733035ac3b7fecf5ffccd5e809c8cb84d996a8523f851818899e28908f6d700f7ef159cf677f91e6bfd78de0a179a969d38e6a14e35956747075e748a46913ee3924f22491eff8aae0902ec54384eac620591954d358501578e6cd4221ef62aa360db3e2e3f0057b4c267ea810da302535eade053b823e8beb521d4ad06886d0b80b2859ae3db0fca31df23344763305b509bd724bc65f06f7e7b71119406a5155454a36634c7a612b6021a4783a4dbcf01bff00b28821010483f0807f21e04059840379c83e4a8115dd5496f8ea4c4b97d6ce335e88d00a667e06fdf3c88a8c0fa0b22bdf8470d6112b4c8a4726d454de5acf50446d8a861444d9818e91f8d11686532b20156a7d60fe17c2dd5b898e7b20b818424b1731bc57a7726585f514dd4ed9bb1eaf71c59b649d8adbbc837436f7b7e5eba789977754e64a651b90036672356cc3231d22b754d1c116022c5cc12674694988791041b7782e4b3cfbf7bf3b390688f4690fb7fd08bbe32ad2a125dd2c5c18d92205c193e9a9a1c13399cf725b6705890a02aaf5c8169a0db303ffa89275312244b02248014db655fda4e3f33f6b7d093b838179cde0e63908ea7b7b3c1e3e4f17672dd285a6fe78be1cc2fc0f7ace086cdc3df4615e1d0e63bc9690eabc5ee1331ba14a87a46ba393a4b05b68e9841c1b18fac757400b97ac5a2aba3d4bbea13e7552df05eed8dfb6a47c434be76ff559e3181861960d236a361d3333a4a43c30265a0643b776394ea2d40a7dd5067e5f68be9b694316afbe36b84cefb0d22a561474e4a4731e93c3175a74612c69d7229fa523ba1982ad38e5ed27c26943c414b69a5ca090b1fa778caa323b51e2fc3f8f857b58f28e6fef856a22f1b8f1b1f390c73f2dc5b151da4e7be6d523009606596a8a6696c0d4373734ced97f4df6ff72f74980b350ec75eeb4183236e01c676478c8c1bdf998353bd9c6ac0d41c3687fd0d756880dc4a926f129313bb471b361851c624083708000a64d6c928aff81476a4882aba34c0ae4f579b332dcf79416b0d9b0a72f8f4d013fac45d4bc09fc62ed0de0caef7845e9f3061819c12f1cd36158a47703bb59ee5b48799aa55989f8a5e70c2cd4fe6055a5ec0c965631b4e7f750bd4d067a85d0ea7d39841417999dd280992ff099dff6616e6e4ad9f13a6b61745c17d76394c1096e5a5391324a363795817eceff9f804ba8189fed36c7aa0e1075dad9fa77860998baa5ea724b1ed28e96777c497ea090154f3cd9d6a62ccd44958a5b273248c78fcffffee094d26e7afab5ae1de9a642e636d4da2319fe769db822e217fdc479085da2451c8ab76d2c3b8e2bf08fc41323e03625c4386771ad1c6881caa8713bb071e3b23c687b241b98c64d03030b30a5012aae0324b052a3754142b3945872f4229e0f5a96f8ae46c7ccd900b55fd36327ffe7bcfe51926c37942979e50180280678a67299263cbab738c609a4442d25f6bbff4ea784b311ed13769764c44d947d7875c7ecbaaea214aa9d84179dda743f1600d0d59ac09c898d9902030d2e285f94a7ed53027f57f39cea96ad2e6395bff16734a2e0b7568278a7fcb71ce6bffa2cc091b30bb08fa3e343f008e97e6a8006aee07048b16440dd8530441a43224788b1613e53330510171f46dac4d57f09403c64090f9000a5b1df8f9b481546264e0bfe902293db7338b07f2399b06965605c5419177e3542c1cfbd7ea80ac0b8b76445407e88bd6fbea9774a12cab26fc6293415e508b2b18b47fff29876fa398068db2a9c200f4b1ab446b5953b113788d12555f97a053ca68476a025f15a6e64d8c745a0c0461b9a448124f0c922202994d67274bbf56c1aeeece7d76c9571833a8490282a46c2730ecc4f807821b44f260dcedd1c2e6d16669fc1762cf21d8a8bca7f763ba4a5f0b0d3d777ebe78d8586edb0bf0b12fed26528f72933f82db643b606d729c275fb496e99f42a4c4efec283d31d18d047904001000b7774cc7e9445d70432014d8d59dcce3cc39485c99fb874a0baf8dc6be900968421b7eea478dc59cdbd4c8ef3394711d4a2fc0c17203916850f63722e5a2499958f24811d1f8c0da5aa64b74099759e8ad8d8a51cc1360a37a2baa489092518b7aadf7f1bcaaf777382f4b24f197f394d73ecba1b96770d3f323254f469244929c243959c21443eeb76700123ecbecdcb3d7db3e3fccf959a6419fe6c08a96d5010cfbbc9543c7c49ff5c9a80c454a7d602f13aee632ec7a179f2bec07fd64c27a6fcb28403404ba777560c7c243e108af0838810ab1d7998a729214d7ed6116d34ede8c56611ce9f4599c54917969681a34f832477257865491a1ccc0ab2a5764f7a8ab637b4a5d351311575a598d9559898c67ac1c8d0056fa4384e434fe0c1bea200f27b87e86bc08150068c79b89c748e230c8a473000aae5701538852e0253763b16af625541cf42b6564551d581cca235f7d564277b83b59f69be6650f2730ab160f7b3558f20361be9a36f90527cbe0bb83c8e08660467dd47c7d651de4978d2091487e29028c233527c58cc39560104cc65476f5a619bd219c4fee441e2515ebca18f7e3c5874aeac2d9c564f8c99351382759cfa92d9dcaedb1f24a73c953a389dbeaac1f74124f32b1aafff54e9811012a51941e01be294a3f0df05a4f56ae6b484f235065aa17a88f8180c022736a85e271b6dca02ca07ddb4022de922a6a5755203c7b4475d467b80a62f36bd9a996a1e3b4a81525a7c5239112f24728f17fe824f60798c4f11f07c6befab25f972b54e180410000477718e7f34455700330d4805df846aa27f502ca561de31790b53aae60c0f6ea48c380465ff4560c97ceba0f632f1112e1e531fc14c41ea13b89998ad39ecca1caed27375d050628cd59914428ef767ea3c452f58890db1ec85cd24042470f205b6cc87262da549d7e20a7d9660f3cca53d186fa8f1bb4c19f5ff26ce85fff381be8512fcd06f94c65e095f4151a46e6a25a3e8079c98a0834827991932725c5298581dd6c239e332b01cc78d16c7fb833e693aaae5651adaaf8ee3800000615b8bd90c344ca0398a598a460519a67d18137d9d1a2ec985165cfdd93024892134deb05c6af7600cc16733f64ef5629da5fc80d0970147808b71aa5529787c6d91dba81cfed65d924ed13810d98097f1765ee20260277988ccf12d53dcf4be477d99713731c9ccb833448526a453be567966bf854d457ddf840054f947d74cdb53d5cf8232ab7d2121efe3a091ab643c20af04628e3ad08e775e14c08e9e8ef4fcebe8ffddea5d55a38318b148563a4ad37334db3a014d5be3f6e64dcf8ce1cf4db197c519b219099197f4197b1f8ab8c5baa9331e61101ce281ad6f38408adcc78166df6f3459cd6e678900dfffde2627b277d63b7f89e79c716e8fbc88fc5e437b0909ded6f6947960c70334a96ebff251004f184c0ed4000be08acd6e6ef90613521bf8ddb6a1ff51db6d566e3fbbaac0694bd0378924c9289ffa2f36cc3f918633f07839e1924767e843b756cc3825e1efdba4082b34913325e5b57a8471c95a3a7be6c38ebbab80830afd9f74bd3e882e1818700e33d78767efa479a71b87add3595058ef01831b16281fab00d76f66abacad03bbeba1c33a3713d7ec170c4fac2da60987570f797f11545a29ece67f21e4246122733cd95f92002fd7d7dfcffd5e76e994eb66118e3d97e5fd274f2b128c480c70806d23c4eb97c5dfb932483f76dff8fc3754301b0645f1c98e3648414a431a252f39b533f5a2ea14eb0e57173ba605decd765e75a70c3318e6c6856b1862ab26994dd018d7397843397b3cd72f231b36d9ba22d6457dbe8a5addc2a07f6f6a37a45c9cb6ab9e7d6aa57374c7a89e9a9849219a5a6a0fc33db1f3b3a667c2f875ed902eab4344e9fc762ba03a0f4053da45bda600a905ecf1df389b0afd398daef8abfe44497ee11c3b41c29d32c9ba6ddae12c8a66a1efe0ca7934adf1f086fd67c638f4ebd770805e354f210b260d3e741288ba6d307a16399320372ed7020143d4fb897f3d8e55275bb042f7617de921037735f2c1defb86656ce5f79c46717605e5b022889be6f309e0b817cab76fcc6e2c77fc96206e2e3f718c7ff485a0bbf7de2a13495236974494973b47e9b216832d32d279267a45e47be0e877c280706bebd657bf366dd986a498ad9688251c3d328a7a3dea3f33c48a8fcb57e7a652e386a5336df5032dc911e96491c8a900d3fc90e85b2e12882356092ab0113580dd88deca8831eba71a36856c8ea6622c4745597b81d03413dfdfee8e34784b70af86744a362fb77c0b875af5239b07104c0b7552f0549fa4902cff3d3c1fc86bae45733320a7e98209e63384b2e24a7d1a8e1e991c9de470c8a2d127320fbe763e10e0a5d7fcab808893e6945b92215be80ea07fa748d8fa757aa3a1de715c1df906df6bf25049283be3a1b7da9dce89d86a3b36c390228e828d9c78ea2a4397f380ebf5e07252044d43a9347c8a7d5858f90d9a9bb5684009f4e26116256ba4f83905f765c05eed3a26b1d9f00df2e8dc9fd648f0e5f1e002cd46a7f07d9d0a914bb008a0bb3a5d59e16452b47bb9ed2a62ce409907d96261c625a7cceee6cb17bef8f0ca04a524496cca063f71bf508ae0eaabec0d27259d5bbc34a9d8b02a8f5aa9afede8b238d85df3e19a66526c580efa248f736ce0ccab6a696216dcbcac43332a423737cf1142a2f3055bbad7da279941f932c9d8090f81a22465d37dca5f33ddbf82177e2fa3776c83f60ad4cbcf905000a1ec137d13174bf837eb8424dc1458d6af3309ba2b51918854dd80705452e8b37e986ee0b515ccf460387cd97ec90669f626b6b9e15a4b55a4987e8296df15ceaee29c06373d0a89c8d090408f3ec04c009796eaa6f4479b23f3a7edce34d059c3b4d2adf67a450f166d7d545a284ae4092b9784ae9a4a2ee39d4b9c66e20ebc870b719ec7c0aef9c766692f7017780a47786b6cb3041f4c83be319ddd1dcb10add656967279419930c33baa099115d75ff4feedd701e21b6edf88be0e91291decf8e7dec09f6a9985eeec2f34a3a84e83a5e94666284cdfd689ba70425635aadb2ec7c32efebab93b45f7e614c028f71e9bf3784dd5b8e94443106606dc937dd65042b0bc8b80e4afde7d5ee9da1ad4a8909e9bc362c0fe3d43de8e82b4ec36300ef1b4996e62a459972f87cda0bc4634e44009c62ca311edcd1d425f4b96bb762033f4bc0ac3db49f1aedf8800abea9c1a0d66e959dcc15c14ca677b530baf42e33b77f7b9ff760a6521cb76a795467cf136e274179524a1acb1b9c900a6da6701515af71d5ff7f591ad33acbbeb0521996ed7ebcc8acd85af5114594773d28116222a74157a4d6d92014b4ca1e64bdf34c38233aaecbf1bbc5a9d4d73bc9b959d1e5325291e2b03322f689d0c50852896fc08899113d8d91dffc7914fe92e5b63b9f1cbe7d1ad1d75db1f732833d89c9eb5df0779bc3360de8edae787f88e9006de47ecbf69ec5ced2607137366f1a3c7205269e3055c83849405582c3910a2b678d3f779264c1f710078710f038a15e02cf75ff4ec5f42923beb58d8785d84b57020f133122ec801a8b6aec0d254dd42722b4ee50305dd0c3420d294011831a0c3fb104ca7a7c0aba0fbc9ea8c19f1178e29c7ecced9438f8b9a77376d9e743cedaa70f0838cf209f9d1ddb128bfd9d1c92f43ee3b54f47bf18d0149ff3aa4f425f8c695a9fb1daa5b15f8c68da4f79dda5d02fc6a489dcdcae283c3a734c73ca3ebf5e4ccf9755bee8c062caca2858e3f585009a35d6bdb954db545303fd7f315de469be4cc35e2784536cb9ec443bccb0967ed0d574d50bb6e246c9d5f391cc3160115457a488165deb7883bc56724cca6d77fd515e6b7940cbb63fff51568a3ca6e5bebbdf2c2db524a265db9fef2ca95516d362dfdc6fa63448a82c7a533256f365d2c94584c69326458fa0d36addb118a22319bc0664b4dd511f7ed3e689f865ee189dbf064a8e60c23eb7f82eddc71b0045eb781adc391d3e607fd379fd3e1f6723cfbbf2656c40bf229e08e81a2f4ed0bfe53c759dffddd7e745ff9913b02bd5a971c3ee983676a8648b1834d1ee6eca1816cd46b3f184ae5d90287e3da5ba826e284247d90ca48a3f20a7e17bafc7183d51fb413773567cfe27f30dd19d5803f10e16a2010e6fa3e6b12c1aad605ee1e60e00fff51633d01a827093d103e13be76fb262440fb34dc9e6af36e7816d1b947ad8539c695a53ff0e332f1546525a97b16a7cdfaaec8e5162ceb31d97b1bd1acec6c2747db1180171b92efdc312ab8522d5e08856ccde0de2b03719c255f327e4a9ea6297b87307de9e90d1e0f5f7cea2f095261c7e89ded8af5f9bad4613497e81cc2432522fe167714c419fc1c43299d53c7c47dd3e7c35c53af66bd5adb294cdfdb50cb3247ae6c7641b876903332c9ebd1e79d3530762552b427d0ddc2d24e2aaed1ef2f6f8a7bba9787058f7d27edf21a34d58d5cc77562724772e00d42deec81226b31b5a875f3e86d5eaac51fb6b63c59f8c4492acb17e82b3fa1b3ea8aaffd994d8c0dc4826871be7babe15796d58662d413285cc2d6d0c2e778464be848d6ac2fa2634bc1e31f98083c1dfdfba456e5e0b54ccc7d94015f01a716fcaa08fc891553513c1e2e03078b8a80cd2b5708f1c1fb797fa28ab460f50f8c3f686b4ea539085d7142a47ea5139e4c99f7adcd04292af34dbd5f40fa10f8809edb4e4afc03221a23edd0bbecbcb24fc711868fbd688fed6bbb7f3121a2d78986f5dd7b79950e566b0291d88f160cafeb628af7263b12ae0e5156e426f9c7b8ae172fccd7874994f1bda81da49fa83e789720dc235846d8e61fe0c326c512eee0ae7ef47c22a60f511c0ed2cbe6551b2a3af6a9739773a4c7b1f76c37fba2139a2348b0a8076ac51d6af3a0177b105401bf95510174010cf00895b85e02cf2010ac47f404ac7e1703cf9712d96804d4028c8861c22d85c1f438f43e45022e3c65d25fec8b27a308b34d75760dffa01e7c50fc1aa961b94e3cc932a9b0f614b520587188f9bb60acaabaf907eee4c90d737a09206ddd38995b7671b3724b85b2aada3a56a00187f0080d5b28dca3aa3fb2457b253665e79af3e80e71bfc03b6d963088d677951ad59837e79bb55e7071beed67a795c219a42d25417ec96332775a9bc846263b288eeaba09c3bf17c28ae0cf3c6d427c4c45f66eb1ac363f4a9a01664f5e267b980895f6fa1dc7b2d8660c56651cb94fef95510aab439158377a2293c70b12d63f1606fdc7738d0c8a3cb98d4bfb84c76042bef656bf9a4521572497543a90718f1c62b6d58cb622f5fed77a3a31a2f826a2c87ec490ec2beb615aa119cd61023a6717ff5b2c2a78aad6ee56a97a7cba18989528e1b612081ffcb45fe64b18c5640cf5bd21f30f1289531e65dad004adc078cff3bee69720e3a91d881c8c54b94f5ee10e4f35013d1d03b4436b8006dc5c79aded0569edf4e7bb183aecfa0fb51b3061fa536593c3f4a142a1570929d06f868de1702fea7c4e11e001211627156b36b024540758d7ec61eb675f07cce1c7cd0ddb237baee2c0828c63eb8aa9355b2f5df342634d5341d7d915e45c3ad883ba1afa855edfb44acd4ea4d40bdcafe9039462893f9f4fa78d6a0a19d21050889afdb87e5c2caa1ac25375177142cf2650cfc79087850d1c23d77521662a188cf0278e7c4bb84ca43707c4765c072b50bc2b2acc1a5cca8283bf4d22dad08f458871c077dfcc31fb336088a8c2c0e26ea1bf923612e5d485e3ef2dab7f4e1c7f4ef717fe7af72a5f1ed459bf20673f2bf84558d48240e82e32b59a8a774f8c56113426d9ce8eaefb3226d5769e84b56864aa04f9d0e1754c13575db10c5a39cf3439f87f5a4a31b0d65a311509f31de11ced39cd845e7fdd280b351761c3bd3b9f72316f46e6dbd1db9435b3de0c4eff569227b31fa48092a4cac86a1c0c19d27fa8ae68b68b219ea221872103a21457aab3827ace33d616873b328ac4424bc0fe5c49ab07857d349a544d68104c27edae49754e992174da41dc4a01a91159f1bf1788f5ee3d60efe5044e88fa681631a5a3cd5f64240153e5922ce2000a2bc2a43ba868ecfa88be935a9808e023909b094870c2fac1c806f49e380a6d6e5c0ebf54ffd75e2ef21a1acb609feb1366b8c6f06049ee327f44bfa271bfa7f8c71f405c22107eab1df2e6fcd6151c01ea0ad386995142a45ecb511313522e8ec581ed86f0312a37eafb65058c0755128bf245c2d4fdea710a86f6d5ea88402005e5ba20e2adfe5efd6c20b1f606e2c37d5b007484b4d6d1d760a652f9111b04a7acdae583299d9f6cf2f8476c236855a5267513c8c642902e20dfa7e0e6833fb5bfb0bf7ad8cca8fe5dad066390cb37ad8027291090e9daf2001858c0985b4eaf538cda26356b103cb5c92d886c3223d7afc8c94dc60f3131a25afd4908ebd6683d3dc63425dbaec4376bf627b7f2810957b6c9f7c6660c79805a1939ac69f1bf92a6f055619134cc36f5c959a610bca2c028563b75e9e8d005b476c5a0b7b47032eb2a23bd4eb6b19d21cd918c43c78deb965319dac77fe468a40468cbc80ae6069f5c6ca44f17aa4e980c172810e0c8c0c839b159c10cca66f8355cd41044f99c17f6afcb10c2e6cfb02032741f03a00a5eaba308a517e5f1a6a9892015892a1da0b2321590596c33b84049e0409cc1f1446030abbd68c59305a15710e79fe6a7c0b46e4caa66a96a33a5bba3624f7baf7dbf5c8a139a9bdcf4680b34733e57252f4f8d0feb482c0fc972a00170e5acc09695eea5403d0d3cf1c61f256f7c0cd18a18aa0462f358a4522db4d4484c82465bf08c108a1081bb8d5827022f1a3eb569ba0ba44067983b01e70a733b7104074f7b5fc3c05effdce3a170c8156c83153f7f74aece3a6fb7d3656d7cfdc7447656fb965b43f586e17da3f546e93f60795fbb5ff70d4ee4c0ed01d5b5fc751f5433fcc90ce8a26444ee47d7b68cafc0348c8cc3a3709ec87fa2522c81a7caf1eb775195f11cb8a09a9a4823457a89ca4dc007332c5b4686111e329ae41bdca418a6b727895d3a8425f52561a137ab00c854ceb2b72f2695360107ab20f3251d3b62789b6dfad480294d534f679e991b10f7d91c9364d5753903541084e11787094a3628e0a6559dec9b34c73d47dfbb9e62893b71fb64298a34ede7e2873d4e9ed873e8e6a79fbe1e928186f7ff4b2a9fa1ae5d8e175f83dc22103886f05a496f93d2a42db1fe1d01999cf3c3af7e421da2737918be49f6c249ff908e97746a277c862f91ddeacfc0e71507e8738ccdf618eff1dba4abfc31d2a7e872f97df218f94df618e0dbf439d15bfc31f2abfc358f93b0462fa1deee81dce6ef81df2c0fc0e7b00f03b1c1236e1e277488bf91d1669f13bfc79f13b3492c3eff0880e6b3b4482fa3d62a57e8f6e02f07bb443c6cceb60ee4f87e7c1dc230f0fd77c7f927203ccc914d3a28585cc6fb866e6433bec2023003bc8086921efdb2333535237c9bc0e31ca1e347f87a04aea26d4e3f0fbc6781973833387f18e6b7240a162a450314a849037c88291030ea0b60fde788aaeecbf285bbc57c6fc56b6b4b070f11eb775195f11cb8a09a9a4823457a89ca4dcf014d7c0bcca418a6b4caf723aeea06e72515237b1f898167f43d983e6cd2864ba438597feb47d98162d2d2fcf82859b904a2a487385ca49cac904ca64a0aca58505004cd0d552822d162598230899eaaa4fa69792a55615dcc6711dd76ddbb66d2dde712e2011206bdb3ccfdbbc6d339263475782467025e8821c3b5ab55e29ced609b6bcd5a2692d4153346607c44ff6bb5817bbe7fd4eb06544cb4bb0456742307be2f1214d78955663eccf5450d6d52d803e3250175b41848886c3611a58b601c9fb3a681bc711e4defb13cbbcdf7edf33f65dec1671945fdab6bf9d37b9dfe4039aa21129e1bf4545100569b9bb3b080402d13cc41d42dba7349026facc9db1b9497333693561f4c6b22f31b10c9bfb7d40fad0f641733ca22c4f66ec06bd47d70dce51a1eae818a0c6cc03bf0be6f0943fe8866e0b6c19d16a5d518bce502dcae1a8ef453ea0326a858976b4357700045d9b200222fa218a5559c7619baafdb72e661d8fa52564ef2b4ecdf07f712a57bf5134c611c0cf30471d5400e60a454755c64e324a4dfb859eb9e955074f2a1a1675892a6bc28738cf4f116d7f0c426580ad1a33d6c0d3a00b9608424642079f17fa3dca40efff824d9443b443c4a3eb81759b57f041ff2a87dd20d1f96f65e5216a79cb51a1bae190c3b5c141b04c66f18e9f2c1e8279b40569b4b3f5c976a89f54e59c1372a839bd7dfdd475d993883a0d65ee3297ad216f9026e3ba1c1a93bac95da0bfcc51fedccb3ed005654164a32ee491dea0bfa7a420d70fd9b80e42de64740097006597c8166a8c7db0e215601c9c7a2b0d1c9bc2b956099cea39dde8da013a02093a8660c40f76e0439c208d080d84c1eea9c343fd5d5619fedba4b964b8677daff33ccee3baaeebaa7f2fa33321bc9560100a83841a635f5582208fcd0ef7f5deeb3ff667fbd1f695f7e8a2015e9783ad8ac453344f67aadfd0982093baa99e5b7969341a8d46cbafcfba97886035b7074317dc3607c18b2f28a333fef6c1203435ea00c3db61cfb4a9fa3345453c5565f5fdc79c9aec83c26019ad1ed9ba12efb8a933b10ccbeae9a8fabe99b2ed37bbdd1e3761910fb00f6ddf45ad6d3353e30c6a35ed71094190a0c4107cf003910f2a3a4287b65f69f5f7e8e2586eb2ef14acb1f911f37187dbad823a558971e01cdabee322f00ab24e0642d6c93f3290bca3ed7334b0088ddf300dd003410654f706803c0061e0ddb6eadb6fe056ddb7bbd592d34d162c42738941dea216f7fea21d9e1215f1937d19407c2fa03340bca84567beaf2fe2a16dc8bca5d7af34a63e38ea421611317fd8f4f7b5141511d1443411ad560f34efcb6b5141f61ef4b345461ce5f975c736214d4a437e17b52220010bd0a8b6ed025dd775a010c85dfcd1a8b6ed2b8dd91ef40bfa70bb4e0397e22230ceb66d5b2d556cea535c030a75dd571ad33dd8814b1fa429ebca53aadf2e9ab6d0b4d4b4858e34d0f6f78aa61a85a2461735d9a7ffd1947445310dffaeeba8a3bab1e5a62ccb3a14a60b4737a9704f8320f143ab70a68d6bee69901ef0d0ddcc51433cf5d1582cd6102bfb238fd9cdd6b34799a6416ad0b342eff195bac1271234480dcaa0f7c8a3ed1e617a8f3fb47dae2400195825014e9c9200270e3c00d70420c34dbd42e8fab60b0970fe7013d560a5ee25217553f7a097f58d68b0629b9006414da2eb83dabfd2182c035f3cea0e0dcf121426a65690035b6e0273b8c97aaf72b0ba8cce84fc85440d997af592fad84634aad85e797f5d0b17b5442f118c8b71b00bb77880c02dc15595a7d723f544d9aa8a265f51eda9b31b4426938126d7e525a33341680af4414ff6ab4c06c2288c85c1ee96837befbd37e7baee3d2fcd51230f3791f94993a86592195d2219d114e52842e4ea1ea4ad28879b642008922e333b5d1f4c59b95566532cdc75346499a768deb91c1af333a99b2e1e5ddd83bc51ef72881faade5dacb342f784b6a74e09dac5ba18451975d093fd0d63b27b74d93dba4034a3eb4757171b9300f3e13104062e85c50a32e5d1bb8b6d11cdea0e089785bcaf4bdf1d5e292ab299229a0c445dcc9eecc73a208ee2debe149137d8daa9451cd53d884511f91d89b69f32beba98093eb9d5b7df221acef7e55c53523a25ba20b5d6cd6a922e76ddf46dbf3ffc7d21cff3ca729de20370dd2d5bd450b678f640d1161a7f0091edcc787a54ab95aaa5c585c7eb953d50b4853aeef46a5f096b071b56d094f5484552c950a5b0e17a595f05be5c1a15109f6a83b95e86f4f81a79601a3fc8e36be44167eacb0062eca1ed7b89965d8ebad7854b2afebe92a2ee8a1c188e3bb3d1ef91a767c81e7dae8b24453447bcbd963aac0486dc79e6a5a612d364530efbdc619fc3dc61d79a2655066f0f9a3754ba0671b81b06414da2ab137890b929e5cd8ab7e151ca9b96777995f2a67cf3c9f2a6f4ff26e50dcbab78527923feca9f943729aff26379433eca83601982aac119e45d7f7e7e9840616cb8a9acb804d790bbb761854b8b597ea9fed0194a6fa804e9b154513e4bb9422291482f924824d2ab989898987c8a898989c9a3942727277f436675f26479727272424f4a9392548ea58a9b6cca077bf2de33e99db50f36558ff8c97bef41e6fe6eb4f7a33d37b3bee6cf47327d8814172672d5f6692e75540569fa9bf360b203e9f7a7e98754867d2a8a9abe49598d780cef6d4969ccae5368ef4925a52ff63796a00e15d7ec0ad3ded71f9ba2abb3d6b4e72ced7d85f9103a53c4a4d0de7b5f65367573738323b31a9f08bb06d60ac7e42161b15638e46a7c224435168bb5c2f956e3dfdc10513abfd5f844d0d0c8d5f83744d0243216eb866935fe0d99d568d627e8c97bef29ae3f14c67b95bb30915d5b0fc6adb866fb50b96930c60d952adb8f7ad3a08c8b4f37546e3ae3dab3ea6971455c9bb0ba2bb80ea999828d14ac0669dc4d8b255d8134eaad81714d854201ae58d2d557aad4285018ee375d3558e3824a11b8aea94fa030dc83304630280c182d3060c08051021a808b08c3303921512e0c15156118c2f0ba0a43fcc050f902e3613c0c1b609830606cd66194aa194a3610dacd50b9694f5317cfdc80f768da72825188eb55093490baec179af6b7301bb32ebb6d1cd775deb77d9ff5fa715de779dfd75deffb40a05008bca0500804efc5e0bd1897c0e80f9dc9eec5256009ed2bb765b984a36d34b25e47b199c3fc757aebfc99c57c6255a7be2aab56dd6e1ca5309f29ba60fe9e7ee57ed7f7fee05782b4a73bcd6d248ffe4aabbfd235a90439842ac3be3f192363648c8c914d68523622635f593509c451dea737eb914671148a77a555710f743522194fcb61928bc422e160528b8463ac91b1f0c74a2b74853c219e8d3fa391d1c8f8c488448f461c15faf189110ca311128ef11c8de0d96c44ca4cae2563e3cff803aa8539e1cb725d380b75c25817ca4220216cfcc14530123ceb60e18e7047a823dce1a8d0873ac219843b4220e12bdcd1752279c7730b5db683c160b0d015ba4257e80a5da12b74396e02f7580ed7300dffe0131bc13ea12b942394f302c33c980733819bd098c751a1c74ce025601e3cc346700fe6e9baaeebba17d818bef00c17a1e1131bc13d9807a75c0ef740572d34139ed9178c6778866778866778e6211c2196e5ce102cd40ab9ced02bb423848367dd4ed7c409420242029a2284438390382af4a0294068002109ed08b14048ce9304aa8572845aa157684788054202aa816ae7799ee779ae5cdcd3e11ee8ea05f60203d54ca0da799ee7799ee7799ee709aa816aa01aa806aa816aa09ac762b158ac03d2e958aef3e964dd4cfbd38ea78b816a2d485c72702c5897d3e5743e3a20baeb7c743be8723a9e4ea7cb79e1582621d6799ee7799e1dacdbe9645d4fc7d3e974391dac83911c4bc5f5700f7465bb92cf799ee7799ee7799ee7d9c16c8a8b99601dcc6e9eed601dac8375b00ed6c13a98cf662d475a7e2ce7d26aa9b9b05c705c6e5ace0ef6b2f3d2c4d61ab5146929d242a4e5886e29e2a8d0b71069d9424b11979b969f9622259f92cfd63241ee601dec3ccff33c4f502d168bc562e30fe986c422b54838c6733432fee0990bda426b41a2fdbda5665d705c6e5a7e5a8ab4d042d7f7e54c922fb0979d17d94bcf0bcf8bce4bce0b6cfcb1a9ba2a1d299dcf2a21f9ca5da2959af84a4a64cca6eaeafb7226c9ffbfdd7fb807baea601d0c54f3720e9da3125403d51ef41db7e15917b327ff2f3477cee6ce22b3c43443e636e1199e55ce862e6efcb1298e654ffe2cd6f8c31a7f58e30f6bfc197f42973d79e8aabf799f39fe6c2d349bda660e9a3be76b6e920c99fb9f33b7c934feb4d0c69f159cadd55ac1e9565a2b382b382ec8987d81d9d4d6fa7226c97f32664fa12cb7d05a682db4165a0bad85d642d39c39fa928f4d599fcf9a3be7cddc24e999fbdf643247e50a8e3d81b50469afd32f3ad556cb6da3df2f40ac58ed4bcecb8b4c8fbf5f66fba567fcfdc2f3027b89d5ed3fdd425b4026e203e37be5dda5233d4816db6c977baf0c3d483baeebbcdaee2bf956706caaaefc53ea977c4a56a033f6fd4b57a832b8f72ff9e3406d17d7dc2652e9f78b1f2af98c4a3e2fb01718e89520ede94e731bceaf4c7ebf00d1e4efe7ae575aed95ae5f7cd099fbfe2f3ba832c0f79741f94dd21dc817180f38bf227fbff09cfc7ed1d12fdef5caaa5f721c157a7f907a1f0595949fbe2588c2d407cb508da91f4229a93d9125b52725b5279392da16da695bd675dad76961a7d53963a7ec8cf9d0623fb133568b5956cce2b0fce5308ee53a1c2bc6b1641c6bc6b17a38d6ece79cd566ce9a39cecc5b3377b5aa4e6c6bc9b6d66c6bf56c2d9fad45d3b5a5fdad0febc3c92dd2f52f5385e96a4bbdaa31f4888c34d2747db1a47654523bb3f447d7f7f3fb406eb78de3ba8deb3acffb3e50680b85acd790f78140a110085ebc616cbde210782fc62525a2bce56cbd665c2212e51c8623711345eb55cce168248ae34822999c9c90240a4aca579256f4f726a0c9c9c9fdcaed42d727318daa5dbe72675dbf928fc250f22b3141fe14f02d7bfabeeffb64ba7bee57706c6af4df7f3f2a71023c7357edfd57b25841b633bdbdbf09b2bfca7a25d55dc9ade0f44057dfb2277f956fe5fe3402f22657705ada9f8cd119aafd5770708d35ed8cc2d4f7a72e6e6ee085a669cb093e21b2bb4b0990ba6c151a55bdb7889bbccef3388febbaae961c07e65c98b60faee001475382397eda01e883c2d8a7222764b0deeb7254f507613e6035a45d6c9077d6a97efeb09951c82f3fb2ffb699e30ef28e1e347f5d389fbef75e1dd42768fb159b37f0efcb9924ff4d26172e707d2f310e377d180785a957c855e768221b4b8183c0ac60622850266c8aa6736eab5feef13a0fbc4bc86a078a324d1d371a55d7912a0f2aec879bdc3deeebf6a396dfd7cf0ce93c47a3ea1c2c297ba81ef454255d05f55579d4d769759c212772d67416c50d12e0dabf1e29553e7dc5906bcdaca79bec8b9264d24df5fc5640c1c3df7b9e07c6c478cb5d21fc7d2814c23f841eb43d149eb2307be2388ee3643577aba1dade66ab4d810655d09be775b586adb4dbbc77d1fe20530bce5f53378d46a3d16834fa1b32b47e0ec3300cc3f06fc8acc2af4fd29c73ce39ff0d9995ea35d59e4371a4c3c8f498770301476d3f6b284065531b8b0274270731bd571c45ef0a94714bce903795a96c0a097ffb356c8aaea88f2e5d6690eb679b0a0202b5d5e8eb7f8e6ac00bce6a6496e0cf4d5567876ec7911d351d74c0359d73ce9958c8dbcfed88a3b608aaeede1de555065d7199c135ce75afbc7d7dae3337ede9784af7efbe3e98714d358010d85fd59533dcf45137b938914daa10e3be704d5d8185bceba9a2e94c0c50c0b85fcabe582cd60c5638f4445bf444758dd3454f54cba871be680cd5334a523488ba5e52bd020b79050b327e41769359f242ae21d12c47dd68fb7ec44fd64f110b728fd1933efa7b2fee81aec407318db3a694864cd6170f4f55168bc5c25959267cc000092ff000892c1c59f983b690006338a2472214ac005ceab4c79ee84cdbafa1ea7e5359f72aaff56d48506b02102ce8fa3538ceac61aa66a86ab8dde836e323b3c26cacee40d4ad47588e33c34fd63eb8c35d39226f5b5f550aea6667eeec4ea827fb4e853a85f62c683bc48809dabe357df83bc7b214be100b59e44218b4fdfd26a5319b9221003cccd0788b478ebbea0f7f05e0f5d2966653a2598fd89fd3c5893cd27409499c02b82d46bf5dfcb429d19ce1a31acb66462afc4dbe9381a64273869fec8b3c69189943b4fd6d89d0f67fd88e78ca8178ecf4d8e9b1fab2293b9bd5d7acbe6614c6fe4724f7087ffb6943d07783846733fd82b768173ce64bb8accaf0568d7120ce044782893f415b8f9df608abe304710cdf18d8f296b63cdcfead677dd933e46d679646b334fb33b04d485b1a1199cea0a0e96d619bca4e0bb3296a0516acec5b1d47e16f2499bcaa0254867ff89b16d1f93735e2fd8641b9504f2aab67a0a9f0edd7243495dfbeab80ce785586bf3581c8dacd1e38a6d5e87735833582a2382b036d9f6e0b036d4de76f187afb59009a12df7e8d3a83019487d15bba841d4e4c5a056ddfad4063db9f70221ed3f667788aba2af49b0eb9bf298fb6efa73543e6ce95b66defa6894cbb3f58e352bb3f145239143d2e4e6491a6333110e1621aae553dc427dd64821d204a922449929598dfe44d700f74357a8c6958eda6ca4df65d8c90ebaafea6b2972199ce8c9cdaa4e9cc084b8305f0da66530223f458c3109a7b9b0ee706cb4773bf6d60edbc8fdbb0f590864a2885e140da5f2cc392d25336697f0f86f60795949abe1db4ff566eacfd3b1997da942aff694fbbee4ffff6f79a9f5557eb3547b9b94bda7b7bf2edac7de5e6f64caf997ebae9c8994b9aeaeda74b1ab2bf9f5eb3db59a9e9f33616f69a832b80d4657b8ff61ea48ea23ed893ce17cb3272f63d261f175486a658a6294c52d01ab36912a240adaac9fb4dc1a069c5117f5718e89bc121d16fb0e4377de2ab3ce85777e4d094fcc9b499cf87a3863d79f7e47736f94d927efff8dba4f2db45ca6f1994df5446d207370dda6d033d0882be629baa41a172d360e77d205114455114455114455114c595959595959595151616161616161616152a54a850a142858a52a9542a954aa552a9542a954aa552a9542a954a25dba96059119d1345511445511445511445511445511445511445511445511445511445510c421445511445511445511445511445511445f104349bed0056dfefd6157802c736aef1570c5e5c22fa95f73954abd77ab9b4175e70e430cf71254031c4360f922aebe686082f4992242b247eb87f83ac382449922449922d922449922449174992244992a40f1fb0617ed896e0df95d2d218e08ba5475f80200882efe103540d7e65e8c5b2aebe23b2e37c67cd59db5ba2288aa2288ade53d37dd093e73dc7a994ee03a4514a57427b4f9641b4f71b76d8368391f474ef3581beff7deef9e8c97b6a0ac1d2fbbbde7dc707707d4b6ec52149922449926ca1a0a0a0a0a0a0fc0d9915ca7b5f5d292929292929297f436695f2ded7978a8a8a8a8a8a8aca7bef83288aa2288ae27bff8195959595959595bf21b35a79ef6db0b0b0b0b0b0b0fc0d9915cb7b5f593675a342850a15af42858abf21b35261529615b11401a741af52a69428255992f46441e6c507708d1fc435964492952449b2a49246a31292447e2010494927494ad2aa84923d00edff95a1079554a388d65a6b6e55bda17224c4ebe4824a51a627fca46f3c29497ac2e6566990bba1f2fea890524c504ec0931b2a43fa49e558aa60591155525048b0f4257e6cb6b8b880caaa414e575cf3f2d28130b61864ad35d90b82b0c5d6448a4f9fb00f01c2352c58d09840021ea00150d20254d630d4b692de3391cc0a053d79bf33a0f1ab417b0f2a83101aff76960734fe11686c5e5c0313e202f80d222e40d54380effd769c778f5658f5e8e9a722b1bf99bb4472e63ed136646e91b69f4173bbb6bf4d4a130d2a5ddfd252406fea26fb22e0347e8a6bb0e9027ce117d426e58dca8b294f427993939f2aaa90524c504e48518908e586ca110e28fb3b7f283a9ad6a46e0271493558527d52d295494957a492ae44251aa5ac47a027ef53ca2a047af25ea5ac49d093f763597b405f785f736a0ede5798c7f09e2c6faa12e80bef6f7cab9b1bbfbab99157264ffaf14bbc6aefab11af4fd0307021f0a9c50fb6b218a8ab407b49b497bffe80c1fb1a068abaefbdc3461fd61f2c127d36e54345526560a0c678efd5356cd89a3b9b94550cf405143407efc7b23e4163785fe3379967fa96d5889bbcf7010355467d82c678ef71e6761cedbdc8dc648919060ae3bd9bdbf5a645b4f7a0d275a639c45c9c61b8b8b8acfa86182f2e2e3d0685c3c5a57581b70753395c9ceb0bbc3d2873c30d95246d52de98a41b53878da6487f35fdca039a2299d5880984afc47a2cabcc9ebc27953566ab8e3dc1ecc97b51e91215742a80f5c651a177b3e2b0dbae3a272627a6ef20a2bd6f1c9560151ab46e817b1a5a0cb30814fa31c2aa655bdbb6cdbf4cbe49bbca05889a9c9c902b262675179249bd8549dd547336dcd3854a62e08b33500f7e4b83eafb96089d11bdfdba053ac3ade85d755cf4ae3a2dba0dcce4df6b62b6f0937d183bd4b0a956934d0581c3bb8e6beefbf77d9fffe69996b5813b3c65c379d8b0a9aaa353bbedb7cee29afb6038a2239389fc21714d35f2eefaf95981851ddb7f38dacdcd81aba99b50bc95a2a23dd866ebf17d3953ba7ded019d71778d3f99a2baf72468f444df5d6ef2d7a82b2e80a83750df77b8c951d5dc577bade6f697ebba5c2f87812c2a4a2f433231f98dbbc861b6ac2099fc70203b365499a674c6374e5326b4fdce3cc349a73b1f473bb2874dc860a7b2a191bc698dee8a43d7779389bb0000b15815c7b66ddbe6be436784747e5db490513415a2230aeb25db7b49b5904938fe96b4b425e0ab5c44845339686ac162b160abed425b27f2a8a9101930a1b7a9de12db74e61e75f7f853543c91b7df5547c5b2b1933795d51f03c8bac6bc23e889faf87c9095206b6410e4b59b34b895a667064982e672773dd5b8e4c0a837ba72964d797697c35c3645326dd8930f1b2ecfffc3a641aa37f0434f3505bdcab3bbe7de194167426f1f04411c72fcb9f6ba131077cb6bb229d293cc20fc64ab8e0e689aa8cb38ee4111119bbf31e45d753a93bfa667e6e8fa1b12babeb36ccac4ac3f96c4ba0fd24aab2d71d68fa32891dc83f42aaf3592e92e7b9a82ce782f60c8d70341f5b65bfeb0e5c00f033aa362e3fa3e0daaef7dd7f6bd926a37c26df0d065d52f60c8a01450987a63e39a33373da2ab6b5c520a73eb9bdc50426372fdd149d51f7bb2a30e77dde5ae117d2173164bc6a2302ac855eba029d2db7725688a64fef62350b6fb38316ff609c5dc2fb40e9aaa3a2ff4a6355a73d56a50d76fcfa13c7a3a73539f93d2a42495a049c78e09d7e8a081ee9e2b2b6651840e1cdb8300f0caedb3a6425c4874f72291480a70a3ee251b0425a3380ab3cf2dbd932b556c5cfbd3a0da4dd714c61f04c0f51b4fd9b027160e77e9faa3ed73334d85b88c68fbbec353ee39da3e0880fb951b2519a1c51595db97c074f720cccde5f6a0b26ac72c8ac8214d85b86ca0bb076fb861b9fda8acba62164564134d85b87074b73d5856bd611645e4505321323883ee1e7c719de52c678de5f6a1b2ea0eb32822a7682a44064ee8ee418fbab785251b085dcf3a8a352cebe726747d51116a8406d5331ab4049734ae2785aecf8d41571dbf3ff987a79c654ff6718068fb2bd8bbc92b9a0a99410c5a8ec27114ddaaabc6c27114f52474dd42e81e541c372a3a3a36e53bfc643d4747a747aebbf6c075d053122021e8fa94baeb08baba0f94a0abc9daa8386e5ca316e4eaa23df4e46f4393c94df65de09a16542644c71017ae2935216f936a86dfa86c2a881b8d43dbbf333c455726160b33213b8ee92c5114d9d4c2458c8beb02d7746ee6406b2a59ad56751c654fa6c89bd66c04515938e49003ae01d11e909019a840efaa83c2a110e87b5cd33d984ae11ad095a02995cb99f020b5203c5583daf8dabe35e8c9af676eeaa33d87dc85c4008936692a2406466890862c5e1d95509b721767e3abb55a5936b6dfb4b69d00082ce0a1065dbfb22acb4610362a8b6e2627c4c82beb055297bd55b71ba5340794f2405b20706e5374557a5cc89bcaeccf68914378ecccbaecebb7e56167a19d7976e6e11acb4364064f8f7ef128ab0641e2680c0e84c7518006dd7d7d2f2beda143b46f4ad36ebb7273e0dde4bd97db85ae0141f5be9620a049922449828f70043a53fdd69d5a7becc9ce6a8f9bea102f649347f691088e23511c81d4862279db98494f0f9da94ea9cce690150735159af548ddc1cd0f5052c49084ca4ae752851e62676f74ad259acea230426f8f61fc85581c88eff0e8a8a82b9830c376d6e3a892c7b0a633312ca104ef8b94955cd10e8f219aeee8a08994a63b39e8d1205df1854c8514e1465321321f9d351572843568930b728a066db86e9d9e9890abfe34087373c8a188a376fd61a3657d991ddc64ff8506996a373f99914827e35aab498df7a0c935216bbcff46e253fc03f8a1922b12955c94abe92c8a14a0e01a0fbb577174c192920b86f98c9df58c39ca866679fbe939123a73ff53c3fded6bd0f65556708d37842e7fe05e049fdebe0234554f0f75e0d7ef335f32f76d3c203c4682e8bb6d5c1eb53f2e29357d2bda3f048a23174090fa9afe31d9be0f3645815a63d1533b75df31662f6bbe5e5e521d8b793716c75196e5286a5b1687ece5b17adaefb409692be41ea3a7945640d5d927ea0d922fe6e6aeac91186654b7c40f729000a26e89064e64174d9170031c3295566974a6ea506b1d43ad68a82848c24ccda0322a5b71eb99edcc65858fdcb244ded451dd1b8033f7a8b7d2756cb836e01a7f521436dc7a7a8df715f45de93037e5c4acecc4050c1723b17322b18d846b4050f58ac2e024793bcc73445ce334a4a61d629bb03c6e672a1aed45263380a756b60653b88e588b532437f1d121df773f9a616a61f216f6dedad0d6a0866f5b8cdd427b2b001bc7d978421a5c3f9adb36eb1ee538cfb4a55cce538797f394e16f0a45ea7384ce4ace9091a86f7da6ed6adb9b120df2b6311ba333f5065cd363f4600c152591638edab6a6edb6310bc4515d13f44c0c2ebdaa3f72b815d3d8cced426f7fbf2bc1af3e8e0a408c152c24ed0f832f9da9f5654f1ca03bbafbdad3955f86dc0df171d8f714b72c91777de5382af4c351ddc7ac8db9c9fe0b5c6381b8c93e298aceec81f3ab518fd1bf146161aee3286ab704740f524ca387f8dd8bb5d69a90e9db8576736fef6d4aa406f49656c4fe38ca7bfbd688a3f63539e0c27eedb129d29e7c564491a906fd26717897afb44a33bde53a4e6fa9cc6ea77b12aee9bcd579cb5b316e808ac227753d4667aab6a1a633288ee87075c035df7bcc81e4f07099b6cfbd5e96a355227676d2ecc9d2c21b1a6a5399a61ec534b87773fff61c1e40a7bbdf308d1ea3ef486abde7caed7dd7f1c823acbe727d5558a0c4a854ce53e7340d119a1900000000004316000028140c084403325d1354ef14000d5a8a506a723e9709a46192c230c628650c20800002000080913918ea0402b80dc3f87569b0ac432880e3419ece821f4ae70b02c88775d42491bd320e28c602eaba93731524daec0b2c9be160bc35e066d96cd42f6a16b9c0e38fbf38ce01984696c886eb2ff2a7e48f7b08fea28c5f26d3c7ea436403e8a90ef50c321bc19b696f708080de4606576218468c4a2c82b1d11eab2523ea01c04300d5616340fafc1862ce57619ce9a4b47ab21299b80f23731bb5f7e6524479e05b0c4ca4b3b4b4d8270e91d58bc02a9cdcfe1261e3ce004c3e7eb9a011cd0ee003eece4dcf5bb835dda2c351464cb7ce0f4985bd5413a8b34d1f825c2b4f4a54542442b49ba884f37cb444fd974deb616d867afb1ad799232663f3915f39dd8d894a8e564e84ebd3ad0b72a7ab9c8ab4154a81bbfcd5dfd2f7d72d9907c42964cf3c9151dba3527f14b093689a03d1ee2e177f71c2a110091d22d42d734834930fd9f962ea9ea9ad4601e4ba21b38c7b3be3b3678366dff5782be6a49e34aeffbf595412aa65a9efc9645eab192b8b1369f0f09859c451a0e48f361b2edcef4b05a9e3cc037d3d093bd14f0c9dc476f0eb1231463ffd4da182f817db60876d040fe095b48b947198d32b6afcad22a2aaf1d1be6e046119e2881ab3330c2d13cd73e6a666e3429786280bee848121291224528212f8201f21e89282f2be6b573d31a8bce37be0c457624f1af566e7c86b5dbcc059217b191ba240cec70fc8b7427fc0ee3465b5a7681b9d0c00fbe7de80d03e2b0096897d921cd8ef02b8f52d2c8bffa10b2ca3ac80369441ca21ce326ab42bb0bfbf24bb003df6f05d20f8b4c6c1052492d4b38499700e2e207900517604e21b3866ea34a8c8babdaa61dbc8463ba6b58d6becc9997e7e98592ea64f3d8b8279fc2bacac341a1d8eba2347c8a73c8c1a358abf079eb6ece2cc522017de2fa432afe71ebc22b8367d86dc828126dad0ce6024e3f1af8a56f58ce52d34e1c4cd4d8445b0214a544de45ed63da1d32bf6f6b9f80c1004308ce5af19ff9363465582b53ac3b47c4071a47bd42de2ae5036a0e5257a0a3406f420f16024809d125e339c35d19c12e0d0e4dbd498e27323d6e2463d30d9ac37cc2b03b9570ff6ef32f3780ed56f7db1715019494536fc8bf240e247434012c38829e66bc4793fb78744c72d557a152a8d88b4e94d18f340bd20ad53d94b49eb46bc77a215fb8fe16282f3d36d128a611dac5e3f145f19d96e190fc5a1ac8ad94ca869a841608b422da60c43bb725eff400933b0e383c17ee0fc35ee59fa07d894cdafbb71372fd682a5a80578e0655eb342cd5084a4ed7046cc2f7a744b4deb55ae5ab9bc4dcd92b4b51cbd400ad2c425f145c9176d2c195344d0dc751fc32e7466042c0b0a00e9fb95288e2fd677092ae96ac2a50a63d024f8410b4ca9347fa8290eb3feee53a4c711cbc42d4ea156bb312c484666aef2ef5a8020bee20207a04cfcca18777100640a98888d28988e378d88fed6b012bbd839213abdd34dd09439c419771c49cc2a9a64a7fab7f01b36fd0d1aadb7b83fa97afd9e169ba0b8b29550c12869c6e1ef9e629faaf1f799b9e5db71160909a3284517593f016bfa138d2ec3774308da15715c6d916539ed2eb4ca943eb427e1dcb294d950b2c1f85d94047896174eedf7a1ef73e0bb15f7bc26675e0074b80f9b4d13bd28da2f3c50ec608c47b211719f1e151ef9f0816485e749035ef57afe744232be65dc937c3f7d158190ab95b5aeffb458af65ac304b24f7c4e92b11f4de1d6f27d28f20f5c625f955af2a885ebeca7df600c08da232b0246709cf66b527e40224748be12e977c37b6bc9f34b9b4cf315b029c0c185aea9f6b30d018ea36c88878b83d835fe5b0d84af5b20fabec567cbd6ab4488169b1741c076a07b16ba3c98956c8fa448c96ae1545c7d9be03ffae2ed411953f48dd781090e2427f96298688200afdae12084baaee51910629523a707aa0bb68c439fb11fd86d5c07a83aba0c79677572ddfc6fbfb681b8a67ef69d0e0af3d679ae9edd0b2abfe15179985d3be1a7dff274ff67c5f35a3369987f4aa1daa15502aafde0611d9a4835502b4db4e2609098db6aa6ceca16b13606589339ea0859b39c04531cb8595568afd68520336f3ad14c4c6615c0fd449c003a0053a061d54375bdd6a348ade4d20f46d322e6994d2461934bba2f6471273abfcfcfd3e2642af9d71ffdc1f5cfaf348c01d508e5b1d41ff096e3f183bb8131daa57d16836d35606d3e272da3374a1c1308997d0f3a3c20d65f20c7a68671a173b6167554f2eccd62d0aea83a80ddac2931146a53c38c315b493de87b086cfafd1306fe2d647f160edc15a7026cb55d0389fdfb60f773e363f832441b116a27d694a244cd8451846af6db703fd9acd04fb06b6244d803b1c4b5007918cfff22b2d585fc4b2e93e9e6a2fe45292c4bc320f4542b5b802a9a119f249432fd4cedbf153f8d11e1479280236e73e907552469dd6cfe3991984b958e1cc5c399ff8c9b2b5d512782130f80a62e7989ab2952c477f7550a129b0b3ab6ee34bd899c5af29aa375c35972b65efd74ab4f0ba65d041d0fdb9aac7a8e649b9821d3357cfc5b2948cbc6614c2447aaa39c8fd78cf497a918bbfd754d441850f40fa2f3d1356aabe43ea95931faa62cecf555391094e4bf08ece86ca7ed66c63d4d899b4eebc835a7d750c098dcdfe280e18353c3a46e999a7e60c10721acd4a7dec35e5fbb6aabdaf371c9ad0c677d5cfe36adee939d1ca45a67716b963d803283a7d89a63597b4dfdb54d4a40b50f625aced8473a373b819a907795fe94de38804d94c37e4fa7322a4a0fca7d4536ea296b5c23eb4aaa9c80f0af140497e9a417e0d1d4ec9bc3e04efb95ee6b8c7b008b871069852ea0f3d1eb1a3568e9b20af0883a4183fcff57f0ed3784b832c6083b68aece8a400ed0ca501c2f84036647906d6f2740bfd6436ecf02c47d0e07d29205c8305ad9f145bc972a99ed04ef215be3e713b5fd46f0f29ff33e029a0034132888a690872c1dca970433168af0dbe40d9457d8fd0605d48b62ff46ea6602feffa217fdee8b2b5da0542d7187d7215930ad2a5816416cd327c17741c2501ed966f71ce5de29b5cf7f1844d5fe4cb893f3a4529986dc9c3eb69b5f24923eff80b41ef2e874f133b609012ceba8156f2d031ffc16ceeeab614b6908cb978f0ef4a7b9e09fd27dc82b5f9af6e1418ab89da8c145e2c05fa8f14c65682828361c7698b142614cbe49380e0a3016023290838ccc9251cb9f009ca7812ed9ee0d945d15b40564bcc9fad9dad0843dc854251487df6b214a193d46c91d4dc47a0a390aff22d31650d287c09218c3a2d41a1d87773b32ccdf3993dd8b63e880cf4be458dd184ad8a88ecbf8e0ae00dff12777b8519d87b18b2e24708e81c5f257c6275817d6c601d6851089db4e9cc1689c2bd41805734764397dc4521763f88781b2993af3a6b11f83efa2edc13614f2dfa543fdc003b453b7beffc27af79920cb4ebdd1d0e9ffbafa6b807a3135791663ba8592f1865f506fe90ce36fba0ed8e80a2364be35ae414e552c8836ae42d7874eb75b896fd57aa8b641ed930ed9963b2c6ea2cab2c59dec27e634cfba677848e99f2113e0ae28cddf67982653ee39b08121edf1ce63dd5c0e478c0f21fa1726555916a234195964ce838da6e920c81d388f0d975e821824e889c4d44df0ab4c669c43a4477f4fd1d2f274eef8d04e9ceba2216deb7960d0905aaa59e39c68d7fd13a2f0dcc3d6a8bd764957520048c721c5c93b3f1c65fbed18b0025eb1bb14c475d47e6b9a0ebf20347365bbefad27c6088bf2a241aacd2f40d67cd708d904f0f451f672688c82ed0678f1a5365b689365d8953a18f28debe8acf09b477123744c530809c3faf0c679c3312450985fa3700a8eb84e800ab5e6222d1437182db7ee7b4bcc269b90d8de79fb878c96c0563a23f8062f15103d42ccf95a0aac5596c5967a5e13c3c9354a93d5dd684dd4aef9479a32584f3892f7964668401d09d25d8a51f5d13ff204159fd01ed3042e4d3e428d0028a37ccfff2ed64a48430918ea0efca498d69a88d223c494c7c948f0b8c730e42dc2c87c2d83c535e47d6d776d4f2578346b827da68c38006831e0808cd0c16a227c9f9e9b4b1d5ab577223d3f4b18bc85fe1ad17736eb0ae1d2d8148fb2e59960dd467a2191b395b6b818d902cc0a70d4799abf12ccacda82c6255799e93896fb7ea9f4d72a88568675854fab023de106be3ea769bc1fdd1436dba9a4f17c8a473af49a851d516e2cc13d9a56c34a306ab75d84c9e5a52f17e54ea4dec80199ad48b34eadf9e61e016cf6f93378f5706e012d8f934c992dfd8fc8c4b608558e953fc782cb68dfd648ba2f353ddd5409bf68504d77994162f1bdad8069936722843279f7e785d3fd32d1b6563c1916bc1cdf3984105e5b484588190b597a547c5296cc185419f1745e0a94827290e48b8b1a692692f0405b82fc4c2fda17fe962e9be4fcecee6dcc68b1fec909e99d963d3fde682bd262c16585dbaa41f136fc5d760add9312368aa94c13f4592202f97bc8f8d8550025b89da33361a67b25acc784b65e0cbf1774530409c191b5aeb59498df2c4d3178d98b8c0294ca42deea3053357957529fd406cd378b13848dcc8e8d4f9c65439b6171c7c3738bd48a9559875178b1307405b6e5493ac2d09e5419d49dd4af674b6793c21bae486fe7c28302a3422934801cea23ad23e0b4dc50eb758fae43476ce4ae7823f12ec92d2f6b4f771f00949f29d376d2f927195f9a03c9d919ff5e8fb20689120113bb00f9c2118095458940a212bee2f10d88320ac89ac7c0840a2a830106f98385c0ed13e4b376554fc953ad4b625606c062c8b275a75ccb6bf1a0d6f751b40e2e209a4a4342607cd70f6fdf21b2a837f53976e139511e8ff7235205117d6cf3ecbb22a68cd4555bd99533e5682f7e50bd02528d3268ee7f76b6cf31ba6929742b972afb17fe07730d854d500019ac733766870467ae37c76a56437083d4f49d0c83c48813bd26312c7b3637ee2222828e705899124114f30513be108344ada557be14695b06f611cb717203909e5799122159ab7e014233ee205649a32a71d4c477fa88fd5810de4c4e7b3fac495ad6284038de66830e030e6ed2966e9265b3e80bb7650369836056602a166c4c0acc20751a1bf2bab0f5724514557c18e55586bf7253cbe1286959075bc7b0a47972f92aed4af70581552eb25b94fe86757f337881e2f2a33f52444ad207e267dbec782b60a4781425c75b897c15076856cc47dfe5e6e6bd5377281853d671faa242149c57dcea95975969a2201c3a8c6b969be9f5745ad98b604bab62465c3cb63fb22591a3777cc481b4394779fb2a9fc7219908b56619ad1de237753352d2668c6d11be7daec9e206e040d9c04c5df914f9deb3413cb6c79c31ea523a1ce7e58234058416063dc70b515d60b4401ad768a68d7afc4ac81bd4ff33bd364537a1aaf89a6a7132b304a59acc3687fb4f4b705fa4cbdcfea2abf76a33d76fc4d7dcdc692c0c027bd1c75ebbf0c03793348c0f27ce07464d8f07998d2ad23c878052260045414e2210ae9dc408389a6f6ff16ac3ae160b7087bcf1c687e345f205e76f2c29078f0d0a417d350d14176d5162bc96e8e7cca829921c9dae7243d26f8710b9e0c8155e696225298c410519b7db9becfec5178f03bf8cdbae5871ca5303c5fee77b8573afcc13d88112fd22c698ed4e5c151ed0858462976d8f7a99c80847e207d96836197a81eec5bc6927345aa7458d72a00f55f155503e440409251763b07420cd8784c430ec781f0f1ef4ee37d78fe220ef3ab03c52ef68019e645afcc77c801f6a61e49d35c628fc058d28c0efc383ced1a22a04d5e7de9b7f19d4566fee82157176d9a2cc98ebd44e9eb88123f5b8e0fcf34a59f48554c615be5e08716d51955b42ddec3b47b6a92888ca99f1e6b57f18301da8721e70d84dae67f622961de0e02f6df2caebc197f72638a882d127c1afb83fa39a51634e86a1ece99701bcd127da709ea08b80a65647f68ac42bf74579cd4850c340f24674dd8bbc0558e7e0bab052223e2cbc645acc81ef6b4d9f2b1a558bdb4b23676a986d388883254cf6691994527e2fdcb8e98ce30dbc7be8f39ade98831864121924d376652552824f1de26bfcd091fb8bbe4374a32f9538b5b91c400961282996acb40207415302c2c0b5f1f0abf74f0a370f732be0e9145101d6a37ca14011819a50c46cf8954ddfc03dc6f19f753e88df817ebfbfaae8d0f80f24a6fca84072fb014ff3cd12e5041de1ce579393ba05b015941f7b7e17ed33fa0dd4f248f61e1174f0d34b1b878e1fde0f64a1b032089f96520607d52cb733ce3006a19aaa9ee830831eeb25ab59baf75f199abc34f6902709f525529173243896a35dce6c7e0c22db081c6b53844bed08f1de932f85bb759cb6ac4e50991408ad4c19a4191b79ad70c5f917062e63f43b466300b9319f739b3e6abe78b22cddd2e5220fb2faffb62e5382ac862b626fb91055fde7dc5d8c84a98fd90000904c03fbc2665f61fe7b5a1d02c41719b08d21d716e9290419c6437c0d8ca13d62d08146e303847ecc4dd158556cfca60da5afca47746ae43a3c03e96b4cd7f1be611f9f24bcaa22dc17d89c3709937eda0fed687bc658fdcf0b7bf71abf345241bae09fad721eeae15e37e15669a4e0eefd8419104d300fa103bf57658c72044e2a171ee6a9f568c231cb36b0b072375bd412b502738d3278598c202d82792260bf3dc90acf2e1dc909cc8df851dfc70361a3b8e4dac6518933b21f1479ad94c636472bcaa1ebc306562222f263854b990c8b202696bbc79452592bf0838e96dd51adc124060345fa2a591402428acf838bb13dd3b19dd5d490e78fbc2469d1222748d095d6612ecc2c28e204d05efc369605024d87a68cd2cebe104998b52dba2adf58b5f701e2b46ab211874caacc8f468e72f7ec39af4251c8e0a94673ac3b297178ea3bb99f6e96cdbda62da4f4322602b91745b30ebd0a69715a089b2a51f8135f09d98e6283cfc5c367c56bdd4ec2b341523c82b260300a805c4f019f2034d0a6d595138a19c03cc50e062038e90e8a2e07d8f984ff1c09cf54e37e54852b8d99c64be3da4d95a4584307f4da6c96927f1eca7686596216f683c72bdb52a562989ed1a63e187cd3c6b9af3e453f3cc7d2079516d5f09bafc15efb315bafd4887ef528e0339672c7bb2e04302d9bcaf1eae641693de5bb38e558c42ebacf967c9c0692aad33941a5dbab78beb35ec32b74464ec42e24a9d287618543095148038fb966c78b8e0803c4a909f175a85ad8b904eedff00e6b99f8737a2bf114c1909a2f0f0d9b1511a1330babb2f5e0782bdb185f75710a149345cb99d8158044612b8d05e64b1fee10272496fe14e8889603143d95d08cc6bb2df0703c4e7e95ddc97d374311b7b5de881aa517f8f3a252288a3dece0adc1237dc06b10bf8d33f5c5b78b00036ad51f8e5406c4ba45e4208fb41b47d224614330ad3f969d8b5cb27bfdeda00953aa0515ac07863f56995a5fd2da85d0e89be9d883aba983d65b689e0feb7e56a3bcfe799561c5e16eedd0881e3bd2d8efb720e4480033b231c87e1c69d71114386716e0186713bf87bb854d8c656ac4aa81081cd631b8a8a7888fb45f26058061e765c632ce55635806abe62cdc75e57970eec0c7b356c8458d017f10a94a92efa15ef533d004896600b5aeddecc2d49b59c14a810647134942f79aa90333454386df23d3174c2db6e0ba56a90cb7a807d118998d22068adb1826ecd5a3c6c0fb76cfccb94cab9d13860fb6eff6e7905b0fc7d6285ff19e70c2c0e3215b830a4b09f7ec90f83130cbc66e56b0fdb08c50758d82a21e715b976715d3af094ca23a733867b4316013effcb4d9ddc5903d1771ce352ee4c225d5ce8bf2991ddd58f5c4ba1f4bf3f1a89a79f2eafd8e1c25cb859dae0e9119d498534eb79f3f259447ef4fc10e1dc6a49a603be5cb5d26b145fe0e14d398d5e7fada0e7fb848dfd0570cd421d5f515fc1acb2947c31d35c682a2501afc4028950d33eb5d692249862456c908a92f17bc4f857bbc83235a4052fa84db5e9d452e1a9e0ac5c6e8b6d64f885d2a7efa69c94de99b8b3f438d9598d7d78e3bff5cd21dd1a0d98aa9c90f2c967ec0e39052a081cb2741d9e2b14b519630fc9f5f4edd2996fc75227122544900b1ac7a6a72da1337e56003b409de8be014a1a29804437a906e1b6c09ce3b8990bed773e5d46759dd47fdde54f1665d8b0677edffef615a17d477e43f26dd7602f162d6dc5655c778d84e55b433aab4d8d4c74a8747c5cfb2304a4407ea8f8f1818ad093ede9f9c7d41bb50c9a17e8571333351ff6f391ab310ff82dd9c48beacea9e6ff4ae791177223ba2ca07d803187cad2dc30422c8f7629241321b8ba18bd9400811dc7c422475d75630b214fe3e68e014d5f074e5e6cc19f0d4e4192aa77c015ff94c9457fa2b514cfa84ca261dbe20dd19ead9ba51420d49c3a3974546f59651ef00c23c02c3145b8fe374f2a67199b4c68ed6a0a410d17802bd13c9aa033c137d190c0f5be83b6df380b9df1f1527f6e6fc08a6406c39b44167a48da537de4baf2af8d8af9f666ecb8dca5bd9f05ee4575f37015fcf826a5e6d874d7586caa93156d7c028b5deba99ba04d3f3659f677989e2d7d2bf479febac09cd4372251db2768f3a5f659207a7045b478669ff9aeb8e53c23df729e569d613edace9204bddc46d7d1dfd7d594a4936d8ceb21c67fe6c2a26ac5b84b9d3e311ddc481432562f1ff983b9fa6e04f25839c74070baf772bc4f7584465cf959d06611789a2e503bdfc2405a8bef26c4520014f9ab7cecf1bc9ff6a27023097a441735287e80cf1aa9d48e296a5496bcc48813065a5e2352b2ffe01f2fe23c369dba25a11dd6628fb908f55ecf506de5934d0618488bd86aa3b75cf76aaae815b849d90c26ebb1dc9516375a4547c6b178559b76cbf6ebc97f0c742dd48c838594bffeeaf6dafca943631d25b79f22cc56178323e99c6f6a4fe772a6eb8bbfc69fe007e69eba0e09a2059b91995777580d2760ccb5064a3ce4cce872ec60ee848479999844978ad1dfa831e668809fe685419548495deda410ef9949762217eaa9196024a76d9a00f96a924cdcca3526e67a6e72c842a728c66b79921bc88d97cfa8f80d1ad8e78680154aa6cb22686ed518f29651455aead9359d3c341913c2bd672623e5e2e8376a187342d875334609c7f1db3b2482726c6a3bf114b3708f8bbb989872c50e1138ab809f307b72daec3626bb6164b867813586511cd3f5822b5094ecae3c9948ec805c5cbb6872471e04c4e909d8614500dc5b040459cedcc6e3ab86b9bce12ed6e7ac8558a2120bd0d4c4241260d94d822509da0fbce95d2cf154dcda59ba67095d604c55da443f54a6a07628908cdc2522b21f63dc87344086a293aeb8d530f52fdb376e6316b6b0bc94c6ea8013d3320edcae1ccd15e5682a107e2aa833fb908f64add5772ca60702e8b920968095007a3b682805de10eede599c4b10d6b5c9c014d507632abd23e0b923b3c38bc920790f4900a1a71d5c1fbe2656a951cd13fb29d1191daf5a4a3e0be00b05556a22678464146ffd01b121d6d5bddaea5458816f75b151516c9eb1275efa181a17aa9f8c2bfd4de8a9e390871c1d7410fa353a0349f1610c19170015fb455519802fe6913636c02abe3595af7bb3aa0cf897d23f80ab9cc374e9a39b99f20c165b1203e79459e3d9caa31a0dec4012ff2be7e44e3960e92c6d2469c633330ad38771dd8cf6adc28c4dfdd69ac81f4f42b4edc1c37cc96fe2680f7d551716a064dc7be32f2bc33e35733ec565fba0c3f96603f615824c9618149a3a861104c4260ac0cd0b2f7b7b17412dda09ee86349de4f04a6284e1228eff07c8447b7504ae822b40596de0f402add33ea6ba1e500989eb8a70f4abb216d3d63da3c7c5c5404a515765346e3841b25482f319c344ca11a17d9fa06d3fa0ad7d1b07a2694167d644c8edc9c8e55d69093b6f1699e1fccb293171a6862e3bcbeac1c99e89d486062011d7a3b1f9c684f722b4ed53d0f02ac5fee62f0e25c2fa534dbfd00671350c1c1a5c87110a359005b34e9a61a9bb2834577202b44b21246cc731259a8fb3dc4391256662cc92550d6aa72072047f005a0d22ba99b0806ad60237a7b00230171c8bc1b007b7ea6e65904c33be27dd30ae115f5f0e4f6723f1389e6a55dde925dd4501d360aa7e98b4ce63b651a7b4edbb46171439716ec6336e412ea245a8e382303b3a55b846cfb04fd4884f0ce7298a16468721ba58f18ec37a6179ff51582cc800e9e7077b277252ed4f6b1f6929c8bff6ed44e98e105888b23f7bbbd09e31135becb8591321002eb0849fa5e9b7bf45426438dd62c58256b522ddf2711daca2ccbe58559ef8c11717406018843152c4b2a2e0b8866985750082aba502b55f8668159f24ba1fe15530e01f5b60da1c0a12a77a9a2eb7b98d670d7d002f59d407a22e9be4ccce0f45413fc3f3a33b435fbf3250f8831e520d56de533f51dce14fb7a8a17db8760bd9667d4785d865381aa3437ea5e84e838a37302764f08e17e8ae95915d4561f22c40c417c4627eaa1519eaef8a88b7103e1d6700bcf639cd5dac60207a2811765a9fdc740be4f8eecfe35f6b62c85f944d224e4de9224d77f4b8b052260e072190b0439ef8bd80de9d80f6dd08747ed28d769b936f5d1e934525af7c578c645146e39ec8ae493b9dd183ac8aa4fcdcb595a4e682ee658f2d7d0937b5b22340695f02e53b2db2731f30ce6246690de4f982fc802ec7ec37f550d086ac884ec74f84c0f4614825ee6ac0236835c1dd42a06680fb3e7eafbab3b3e4848952030758bf77d140c134b13807281fcb89487f939bc049cd75da14f4d04da30a439b18ed5c8961dd265eb1de96c503d35ffd8061764e4d2e8454b7fde96f659ee2222cfc93a97fdadca0f27545798e6d3468e7be76f45c2b6d071497983853f22d98d304ca0690aec9300a3e41dcf51be850f67fda31be39a948507af60e07ffa817801fcf0c0ae62b1b33b2827ea55aab2b4697f20851a899f562df5a1996193f7e2dc357cada3536ce877525db8df3b76c25ceb686de594a386903545a24866ea09727b39210f4fe999b576cd0ac6b0879e0f4837cf1fabe7362875db323f0eab90ad4ae1a3a1908a1f73998ef342404c33306651c41fc86bef289fdf77a084a56b9cbc1c9ef438956d610532fb53d8b3e27814839cca1575e67ba9ca45d27f86a7a533910df526fe6bf3dc5b8fc0d8f614df01df81162ce5276bba6f1ec0c6b25fa4a4dbcfe1a3c6af5e2e98217581e159fa7172fbdfbf3e4f2e0143b9869ace7763b037c482b9d321bddbe69325cd36b552b1dd5232a0552a97711faf612f4f683a0b7fa77e0b3ea10192852b70a5e34eb0e8672341899b15a39028160c685c244aa5f31dfe242827893e0c3bd2ca15c5b717a448ceb6c4cea5a706a1c5dc73243f4d353957b6e8d5cef70457863d4da3b21dcaab7e80a8e429b2b205867b13a137dad772b5fa3a521a43b5364b124fa6680a212bb83557b88ed14f2fabff57e94d54600c2e7bb62b7d1ea29f19519a9a70e8a7bd6508f6496c292f46f0c6bff0413a945e8b52ffa816fbb614a25e283fd278758b9a74556aafb19147b347753e8148b67582eebe604ca2289becfa66def96ee6d5f870a1d35814c6e70f81cbf0dbacb0126ba3faebe0ff63e88b9974604098971ea81392f99e5fe893c72e05b37150f1dc1a18232345e73ca509af4a362b5ffeee9083f5a3492e135bfb90f738b6b0452512ff10f7e6abe708735fa0b5021e377c12f3636718bc9f22900a50b4ff6123630a5d31290884721044bff375c8b0ca5f9db5d6b711fedbda029c127045780d53c16253b0117ab4353aa51aede0c6448788da71123ae36cf03fc3b9e2f105e428e161a262811eaa2e3b84ba609cd174e9a19c425f6ba09a1b02e5547b761962b659cad31064bf980bd4a67279fb9472421a954c97cb7be0404a96d8f7f52b619a5b18a3e7ed2ba0bb1d04237e2576e9b489f129480f94ffa667b5ef2a8e452b7bdb59f2bafff79577f7b073e483f9ba7953ce69ea07d3453eee681cf491b33a5aa5f920d4d060bba8ebac4fc0acbdf71c6b57e1416fe168a6eaa61ca5052cbef8a4b7b0bf18aa73bf1520db3d16acbc4b90b5f4723c08a034f45b788a6324f6b9ec014d28c0bcaa5f05eb4b3b463c04ee8f405689907731ba8f3f4b3e72560c8f994f7879c0abae01434b3992cb4c3cfcb0537429e810c12cd5d7fe0c950b1dff0376af37e4cd5e471ec2a8b2090cb6144f5ee24ac316f2ca7611972db9bd608269d7be5354937e78332e8329b7a73fd234c3c75bc6637c08ce40413bb1942445971b64953b7afe9df20515f9bb4ba56f613ce09337afbee833f20c3ae1c873305717bc95a0ac744e31ac51c7ac5bc20ec3636d8287b5e3c4b4286fc2a0851bf99cc63738306c9180c6b96180ec6dc367284cbc3bfbd4540e7e695e4c00c30aba55a59eb13f7f31979e7440084e0b3500dc4558feb6fc357bada8e12789d6789f4a4ebc7b7e5f743c01059f051be2b3c041f20b121cbfc10ddea07584d7c334c472c60249bcfe94328eaa01a3b64afe1219413abdc381e5831b35476fa3e21cd6c299db6b7cb3669b206c84806ad8f0f61ced2b01b7d4fd43fc96c3f131dce70c32630c9376152fee4b4246f00d39036cdb5d59c87d2ff5a5c79b8ea0b0bba87a24b7e05efe8433c3133d636ca8672ad01f9aa9ed1011fccd8f7017dc213148e469212f9e3d8da3ae6a168853a208e8e19f2106a5a1c672904c0a0a0c4d1ec41a6867d8b2308058b17065fa4e20bf44fd87d0e05b5c6f81e47e62ef64ab91f116fe5b1bdab22e208f64678377ce9903c88c160be387e6d4993ff740a6b2a13d08b753396014dca8098e07e0f6380b242f00a6d7020dd3a65104a535fa1468584716c838c28674283424e99a0e97180be1a589c2eed0de706bb07e13aeff002f58688020e60dfc01cb780b8001984d9eb2f79ef1584f78268e4efccdb4c3647e9d882843fcada91ecc5ce9172c42a358e07667e6e959d1ecb43f2754e25dbd5cb2c62043e74d0ad531f4158c9889f665e3fd92b5355613b8dc9c6bc3dcbb4f2ad0e6f5bfdfd524a22aa24befc3a70f33177b30e5a61d84e48b71c80728b4c8c207b0c834e39104e0b54d8dcc69032954341f93137da82ca3f768de851f3642f33336819f07d45d1a638cea106f4649134c30fc2c14202ebbbe05c8c1b789f9264388b8898338185fe612650e80e65027dfd0ccc28d011de2cc81b40052404f2c55f24eb81dbb236a5317a3e5e977fdc7889595cd70b0299bc769c30d3e8aeaed744f56e7fd4b97e795499fd14e4fa74fcfc2c0da76ba6f3efd3cff56f941213d992ce130ad3a8c1f5af2e794b21a568580799a0bf98b99efdc6061b45efc85349c890bfae27e8b7c93c666e502c198361cd8281c198cd469af06eafc9f8026656c8d8da8678acb2137384e649643191f555172221bafe767b27a8a8e7db439ea47303735af86ac7757d3489457205196f3e66b3f30d6cd68c9637ca3326ec606f0204b9d4f5a95d26f8baed065805d86d301ddd63739bcf53d853f4413776662f02f6942b96cf818dc57e5f1066ada49143cf650af9d04e84d04ba5a69a4e0d250f182ed7fd17a880046aa107ee9a8203015b4665501249821271e4c8bdd027b2a66ec2ed8144ed8e59e2b4409574d49092b6971236813ab2c0a343cd08fb7f33887233ee570d1c82fa0f2e0cb05d64a83ea0011fc206fd59388c47be7c6aa31cc395516603c2afcd4869a070ba936253e58e8f3190fb3349264c80b255bbe595e3e0c0fa412b9eb89f11453f8e29c405ab68ce7e857a551689d29b81588c30469811ca42306da0d6d3cf2a3e5a8039ee7b49e1da2adf08646cf936b11f019749fbd2608429246c4610086bc02513810684940264b5562e88d88be3d1ae8a441a0ccf6d36284ef16f50424ac847c5e85434413fcbc70f381dd10d8a2a782149df878482a19c8b716a8499776e8234cedfc820da76ab60a564290ec2080fd08cda27ca0cf8b54698cb9bf97ebf1e618c648ee1fbc308330daff74d770015657ed0d8873066460ef28c2b9564509ee3026196be88258514a271adc80cfd628630ff3630dc38c894342921637e230cb13c3f81c6265fe5f28038763c301c48b405ce09aed5f634e926a1b26e0c5243b74f88092baaafb0c6c00161de46429d98a916415dd4952c6905a74d65ea8432035d61a82d062c428d89505e4ac74055981e40dc4a8dae1a6519ebe1aac4ab67a4c5d2549d23d8ccdf14c6150e78536ff6021526ba71d932d828fde50a0acc9ee55ac6a29d82e13c182bbfd6835ed3af9a44857912bf5b0cb01ee59c995779ce39f433861ba19bd70ba88fcbb1163f0ef0c81a90605258164871fd8887ed5b7eeadff2adfbc46f58a9e0fc70ce4d4d772ec70d7f203761ff54b9f474414af9d90d2e6de68410f2ecc7a74fd480252023759ea4b3e3fb67caa94213ee325ad16169d000573e55298eb05b28ab1cfc9a1181558d34d7542335722e27bd9095bcd9cef4ad1f2770e202c2b5b3274eb9dab844597d423c2c914e3ff1d33248fc12a3f49413b6ae17482cad79f778baba1b7b011dd5aab305de254464977a36a0de27f388d23a3f956a72bac331e00daa79148fc9e590392eb70c10d697049e89b6340ba8667682327dd7f7def91ec31453c4be1e4820815ab85d4e3cb7db9882d790f16acf1891a2d2e80776430f35f4291bca90e542c30973b20761cdab13104e2f62ea9b24e77737e9fbe436e9f26636c950be42951e7b87ecf6e533a9f521828449e24355fc9015b5e1f88da57ff2015531323b649794d1c4729c1d699888da61b988c9408a46284f90e366657f93c6217b0e4b2ead7a04e0e0aaf4c37d025d835849fa0aea881e0ed96d8ec7add0e589867f8a10480053638726ae195e4ed24866a589aef4fbf00c2841c08108ab32f9541599024082a57092873cfcdf4ba864eb41678bd332bd13deccef15992b1e50536ff6b2c8e271478e7176e3abd1f544322fc13db175312448e5c6eff05d5455ab5132148fc722eba5d00eb6b1e12d2507312c2919fd92538b3209b446baf56287dc7cf1a1ff2cfff257f59336346e7180902b5812484119288bf11f1eead7f62d7ff56385eb7c7f2fb57e0c9760e84d74a4cd0d4f207b4fd71cefdec5bcb14dd70bf2e2ded856a00282aab7ab62a29baebaeba2072c23cf6690b49f034a95473fb21aa4863a81d9c78e84b96f6fe8ae57ab1bce35bbe406ee4643b674aaa5bac2b751066de7a70657a02bef4236045f8df08d30dd70a4ed7b70a2826f671edc8d236171c1859bb335ac5cf570a2640d02bb03e226835016cc30aed62ed4b43ac3b529c4e8b1a1151c33d07a4bb58982cf7f816d32ef6454bedb998b6adfaccf5d57611325623fda99107649c33ebd6edf60d1e7027eb6ceac1165f4eef77def5d22866760638d1febc8062aef1ab64a0e10e920022e93f64a305591663ba658b64e11212cd16d333cbd79eb986a7e35b85fc7347ef818d6c0d8467e9ac891426092c4785c2e6f897e36cd052faaa1e5e61b89669e3f4520b0ec98910d0143393a37b9abb6bb256a49b280e3982643166c7b6d5ee2dcd5316fac0aa2bda6d931e1a0423ea57047e8e633fbfa34ea2e26884abb242889dc6b54413671ccdb975fa4f640040935890f55718e59f486631b8b5eca4754cdc8b4635e6ae313cb7176a464226ac752032603a99ad040418eb896fd48da316f08bb8238eba32deb0e108a73d948f5d7d60a3a38e65b015cb4652904057ad2614ce5f86b096a2f41e67603fd15288a519c40440aac4509cd82cc884079a550b7943cfcdf4ba864eb41678bd332bd13deccef41a62b1e50536ff61221333a71a961a051f8e30f0ac29c5637078a38bc87f7c896e4755f74ccf15a5311328102e8dddaeb700f97888b70a45c1fdb24c0be8843538742ed8d87ccdddb1d3777ebacce4d8ac9059604a4a80cca62fc0f4ff5b37db7bffad9b6a349d19ec22bf549cf74207bb122d60e859822e94633f646bde1145efef03b80e2d185acdbb93e46b87beb8495461a6aa8c968e098d52fa1b0291f8223c864cc905df4822df138c3d871c7d820075201df948a6633b22181749f20f82003d5f6cb891aed6bd74e6a306418c2523620a47461e70b30f4bddc788990f223198f856cf82a69603410684184d0a0c92ce0e0f5cb9c44e81a09491fa8d42ee7b9bcc1d373521172148ff0ee8d63d4a0a11f69b810a7b8a1685036bbb60b0b2ebb02bef090596c3f84a1dea266b07213474678254e572b09e9584f4a0aa1df2fea736316cc8708ceb91b8ad787001fc00b383717b06c15d223dbbedc0c665810030d9e4cc3f7e5c3cdbb316147396baae89654acbee2ebbd74aa2d6d023e01e68b53280d418166156a421c96c2800ca62378aca9c70a18700eb8da84a1403cc2c9c1e0b05bce321ad07ad259972e1b7f4702810fa5885b5f30c9745502689f0f67458f093711c9cde2e5b05015abda4010f4a34011a4c2750083a524ba77bcdd07a29fa8270971bfa6780adb1d8252b9686367561edd37a952bf6505bed7c4e7cfc82cbae6082f9d6d31054c974b4f0e7b01e86a07eb1944d39a727020ddedac3cccc635a0d6042781e54a0864fd1f6bdc215476ae7452522714dc94b927a64d8dab02651e80b6413f02161a384820a1b473c2f5b38b59cb7a83cb24d7904e2c4264a75a9b40c48f162b402ad5e6ad617106952c296ca852d62474e4ad318be30755ca5d33c2081a94ec0001c00f829f9d7a5dad3f2e2e5d5899abc09a34d94f430654be0ce8966d5f616350467e2c516bd41b7838b6ad60845a127eb4fe4f5f29918beb7180e4021ae2a771d93f521383553fa2061aad0f8894bd31feb8af1ea3d5bd2794a393e3a9b9f31f940e73c62679233122350b49f3b1f9016858c3dce4cc728e2a72de3702af31e38c1781a5a2d3d9874f22e2b8e467277b6318e8ddf0a2d2167b99182b339cd9449c9df2a76135fbd96cb06ccc9b9a0668f556275d5d8e7e6f468f75077a57231516b4bb1f436fa25db62bd83abc1599f789be0adae6127e8eaef8562ab7e4200776e9960dfa6fc16821d9e49e81977eae237dfbfce73742aef4ec5f3796c1e8095c8bf2c6271092b218b97b136334fd3c01b6020677387f9434b8f8b1475545687627f4d5f96814a2d8881d129435cd4448650d5411e60263b4b00494a94c86e81e70361ce178e2e980d79c664f67029ea68abb1df010b5994b8f8acbc1b63b09ca7813028a3383d1671ad67dfdac65d66b6685de056e1a6d20581670b2b4da3617f239b191e3b8e82eb3e619cda46be1bf09f1f4566745d7fc2c57f6e51eccd85e9dbe1f1933ea604f6daf20e88b0d2b11830b0358c1db219c5dc4834dc881aa4e6bc6c9ab73534737fca4c5182af405caa82b7932f89d028fac8aaf7c83f685ad7f21371681c81651ac1ee9828af04eb357c829f6cc8d575d1bbf0849c2de913c38d7d0aeab7b2c4659c1f7ea7aff0840798f1ea6f88685eaba9ebcad6761679125b890493d1cb7b101a9dd0ffbb855a6bdd1f02366a61e737004d5da19196c3d94a47c23089a9463334a5e7fa1ae64c2b7056260a71d56c5416928225a1b2e5164ec653a82cb0af6dcb4d4d0c73c062713ed72e949839f79181c2eb4e3d326465fe621b8ac60cf4d4b0d7d6cb93d6b31270956bca4ccccc9cc657c3da38588fb6ab5dc5ba228827de87713ca1891b67ad3fc35237ea97de73701845fa45b4e67335bb5528b5f7b013552ba5b8b9596ababa6969ccd33180c88a8a91b6f6d2fcbf38c5f077768c824bcb460cfc72849d47ef234f94007976d2aa2ff56aaeb0b366d44c7f5ed4b030d3437129b1f43f6dd6a213f90d3326a9281e4b4d0517188e5ccacc3f1871285ad7eddd85bf0dd1117d6fe39d72f59e2cb6d441f4baf968a87c537e62330af0daef1c97287c992cef869ac002011a13de645b288c6a5afc5c9151edd8fa0330050b7feb4054244878ac7007275108c4da66ffa688549d0738eea0f2b2b730b933aa5301f0734e5e2259bca10c73f35c416d6241c1abc182f5bff44e78c3f9d33e3c8e691981a0e7b94530e4fc17a33fb1c32125e34860437e01d5f1a40c5792f5b8c5fff010528d7e69e5c728d4a85f0a27b0444f385a0981ad214023f3979df8a235d23ffed4b275903b45799e4491178bca32b36a1afe4b83c651d80880265ab90fe66c2e5ee6b98fc0b76dacd83a5b1a07ae37741c692c7160ab1b571399a4b541d9c16888bb35fbb63a1b655029b15fd38c4b1f8eb526c46d0906737a4218fdb27a1e655d3fc452d8a05f4af534ec2219ddcd198fd0ad4a19f261f94069e3a01c2e9fd4430818b5eb8879af2004cfedc321b51456b9b9c815be40ff4c67d656a0747352754ed475092ae34aec9631f08bce3f88093c7347b1afc15be98c3d58b7c825f332208d17f1d909b124766e2357edfe5f4ec59e4e24c7e34b48019d0cfeb88708a7f42824f241b9e6811a311857a0d27b31408932199dbdc04c5b4707fe021e79925903972c5a60f4a850c543a9afab5cb290807c67eb0138783427aa458398fc8a66030f361f13cac61483e705b1ce530cfd345272a9da94a2d8954611065260c1a08b0ac2a566ba46d54e9f6c2129b857826db0d4516ada71614f855437a1db27cfdbcfdfa72eee6b99d044bef8e1f4c24e75d1a8ea7c185ace154cb36a2f8c5ba77e8cad02a7cf5f262433bc75d22ae00c6eb14124dacf46ae342ccf9714d5204bf5438eb2cb83064d83acaae04423003d48354e85788a67cf584b8c46f998d2a7b6b025c3b3b84243a82c37bc9e7ff18a2a624c481e72c0240263869545aba39bb480cc2274a40f8c8663db08802547e4966bf10a8a00a5e52237f589450252fb2a99783009798ce38e47c55d3f0515ab8da06e3674f5d3d44ab74b215b101618bf41bce0cdf192997be9762b21e5705e8dab6a8ab4b529f25f9f5204549a68c96266b3b89c2e7f5630d919f01f6d8b720033daac008a416ebf8ec967dd53256da31f7a3659217114d8e6d8a8407650291de975772a098af6d3b3ef7eca1f41bba8c0ac744e29518f52d34de8e0bc532860c08e0a56d1b3d46d9be7b2afcc290500491429bf4456dfd06f030352f638e31e0829af465176cf28fb70ee447ed1e75b4b8eb353814bc91fc6429255ff758ef0c4b96df9824324e276313a9b5dcbe5a4407846c3cc4eb6c02554d3e6307becd44c0416d9f2dd00dcda01b45f4c524dac6bec84a0792e1162722a34f14d4a8daaf21ac7a8a2c279ea9276bf55fe40921bf4399b109d685f2a599f381e009d28bd7021bd6083c813eb4050b2b212fae7b0de8142a109f856876dd5262a043f9eb6c6e9c1b82baaa1a6d7b25d46e49c7bcfd3a26678946db0a37d5243ff41a5d6da160de4c1d8c55bfc9290eba99c4761f3fc10dcd02e1559d73181107fe74cc12fb60665db1f20c1a4ee79562f40a850baae0a7045372b2a7f3af414a4cf0cf6fb2ea88f99085597255f6003105c17e7cac64dc2b2ff01d2620864bca28a7b99bbaaa2768580d8f9c190976951e305812a8ff0033b1afb240db4b6dca56230d62095e85a7ca4ad748eceb915808db8a1d8e73bfdf1060119413b777f8306b6445d53d87c83757fb0544b3383ae0119b664c77237fab592c244db12f772ae0f5e51b827df5cd928405829c866ec72bee34dff6e65b43eb0e2266e82184b499e252dbaad2622a49379a5fdbbecb4e659c76692902a51bb1e7dfa06dc21e86c41468cc1e250a103cf6659a53644250cca175e4cd47909a24d93428f87c6cc6aefb29de5fc21f1773c7b2aa2558d43391be0cfa46166cf46c0104ee7fe09ecf87d86d30b649c06763a5c21a488f17614901d8f7a5be5270da929e7e5436cf5aa4365111b0cb700ec77739fefc93f9a74bdf745df73915cbe908ccf22d5f6b3d522109c1784d19a7a8a42a749b9059c4f3130a628724a9f01428fcd98665ddfb9420f2686bafec36703c93f4f5f8d4a2a011a14438545518e27e49e2ed566828514859bca251a72b8e32275f6bb470e143662d55a25ffa224abf9e2b9db56bfbb8fe7cb73d584c71e0cb0714f31f9e1f120cee730a54728f22b496ade40e395692b088670282d0520c97517d43700909174285016cd43009e5596395f194c4f094e4bbf51e499064b850944a0966d93565cc27ad05689ee470072895da138123aba58ffb5e473656fffd711731870cc083c6b3e8b40b717110fa32d2e6970524658346c41378efd53324bca4f46cf464554bc772f2e1832db1c85621e13ebe541fb38f34d138e97b856143ddac07f974f010eba2bfdb55caf715ee23e5e750de55fc182c4b05f2fdb2d083754afe7e5aa8da22fc22f7599e1f4936f4bd7ae0789eb48d7f4befa1b8105dcb1c3d606af52abc14aca8ee7fcd1b8a688fe11fbb51a3e8d0357c4d4bb900bd1904b776b93dba8db6b77a60c75839b99ec96f0d5df30a62cffea3591ff9de5b577f6d48eec9824a31a180aa10584bbdc29a42cd7e4f3e465a984395642330411db47bb20c5a8a80f4b127c73f6ac2a40fa85709e241e4ccb649de81e0e65278da0c3f1f3e4f77e5c42dc1fe46c26464a82719351f0baec3db00a5d508224bd5d59ce6af9cb8e9cacc61a8c880de6f43ba0bbb3fa5495f8d2a7c8fa832e7064c4d692546d6e8b1a0bb9b22f167c859437e8f3f251de8453a64dcb25fcb11a330c158da6537228f30d46e4da95d542e89ec59cc06c4149539051992b3e1461be4808919697d57229ab5f17305cfd16f28b6417386179c536c942110c2c31693915b9b519215e88d16ebadd38c1da458cbfcbc134af2417875a4ca03fb0b1554e44d4862fb9edeabe39f2cbd55661112e42b3e0f0716438e4058f104a4dae3777fed872f0eda49425097f3feba5aba7973063fcf5421944bc8f1cc7e08bc7747817489f592dbe93955e371c7adec03b443adf345072fec92f4e20b5845fcdf52e9704686975e952865a0d6d1838ef0165da2a33fd8ce85d102f51521857f19dedb09b603c62e62dbd676a33a84b7dd87869e3b2377879aec468820efc046c196ff41b212b51a8444775c48e748e3958ae43922c1bc37198a35f45bcc32dd1fb4eca3d52ee0f6a690e394a33ff808dfa08042cd53daa5ad6ca5e81850165d0cf00aeb7989127f7089f93bb22a610e245fd3d60a700df68bff4bd41029bf40ec9279f12e893e0d08d5b10687b3b028ba675267860c67d2f4c3d555e5f449b5752fdc9ec63c926d40f4e6e073b9dce2fb887a88b59456337897312e0629a41d0068dd7f42a8ba30c5c4c2284c1ab117c5fb4082cfc51f229846bea07ab3351456e1b4b0e3dc418374e43811f84f86642c08df5a3c8648cc9bb17b610b7de17bb9410b2e3820d53d8d67d1dd7758a6fe559dd6d3cd062f1e372cd826738aca8e6e22250a8f012e116e9308e361f514c6138f9c3b13992f269a951458b64e2870c2418eedb24c21699b87c052a963f4848ea5dd98fa30c9b31466628d8307d619286d795799e23ff10281e20e47d48ac9fa0f1c7132ee9581c9262f6ec194021a0e1488f22f90d9b7b4c9fade873a7998226cbf138113cec4b80885a74f1895a907a7a501e2ae18c94652df4b38521655c9dd53ff017cc83299c6b2eba6c15e0fed2280a552b384c7e7abf702a24c2a468630156a8408026e66173d5abada4f0fb603c6f86ba7bdab3b76549ebdfd664d47b0d19a0842b54d3c2885d876b83162dd570d8613aed40bcd6dd9f555a4dc33facc91b6c4b23233e6afe4f71131975752b5a0f26b588bca398bb3f4a26158e468ed4295e5ac675a03754c43caaa0a877c6624c6e5698842b227323caa215ba358131f6302a6602e5abe9c22cfd54a24b326ed9a28db4c521480a34bf526640dc3e077c2e836ec14add8db0c6a5b7ed323976f129695e92f69a8413a05668467988f009c598f82fcbf80b0f2fdb25ca675c91b316036f5b2d64ea474061cdbd7c13454480b41cb0de3dc02b25718031a94208150410082efdfee3e180d52b0483fee6ec839f77560196d605f2a552b689a3f2aca904c678f3e03f6ac765586de03c764a3e68086f42260a286d2faadaeb8ad418f427121e9544881d7d0c58fa7067ae64ce7d872323cda8415aaa649899013c982f7a0818845a80729d0698c961380661efdd84758eec656669113cd0e2f82e578be99b763bb2689124916af2a22278c6d15444e640ac9c16665ad4c1ccec0b791bcc9f81b69fe8a8ac0d97b9486e3af9874f7be8b9d4aefdf860be93ba475b357a88e2b44c0876ea8ec0a2c1d2441a8a6777cefde7ce71d158309686f971295bcedf0548ff194ff0d437c8d2dff14f41e285b81e1240dd69e1d717ce008ccbde1d2c22ddabd70cfff670dd4f1169a8523ec82db1f274a6c3152846921abd8966b17ee64ceabed89008c424e9bf134c0ceae28ee41a498e43d869647c30c758361dfd72878a7140a4406550684f2d7000169f06b8abe4f78fee680505b2381cf33eec6e466a4d6c4326ea752c3d484edaada822bbe432e6d7f9ee5837b5082476c99aa15f0e7b82da4c6120450cffacf2dafa9db703b79ede5083385f6e8896a49e3aa8773d190d1fe904d81fb4e3f53a0b1fde51ba5620540b334185e45398ccacf07d8ca5ab8941e7ba681970da4ece37dee2dd0ffdda8655e1951dd28306311590142b4dccbd7ec135831ebbf91143d60ae5af86aea06c2622e18ef1395c3d1e9812ab7c200b48b49fb17728d4baffdd9faa289b6df34e7e08cbe135098c436c0218038aae049576e30f954232446e5b020624955d4dad17a17c73968b55b443cd6fec982c917138ca1fc43765df79e51a1c05fc1b9dc9825f5f5ab8f8442d8f04c321d944f2f3562e1ddd8b919aac1f581ec9528f06dd93742f6a53313ff787133a70e63d7c14a31d43fc22592e21a454729cd5848d19e104d0465efe150071e4f560ecb56fa09461a5b8142f67ae4afb6b939565cf4ee97dd4cf4d145dd427eeb5863c41fe6067b1c4618978ab7d215a968d57b61565c7134be42badd1e9850b367fcdfbbea23991ad307e8a4eb1a213aae415c6cadae60eb1d6718e46ceec9b4363f2123d76f923570e547b288f6ef62de706d10a1606da0ae8479ee5b3a562e1c792e8b5f0d34cac192fafa2765308565ebdd2645d4a9b2f1c22dee4d492485da9bba8dd67d479554ea3b74de946ef14df008838495ee7a3337688a935d405280b5c7e2b5cdaf26c81a68b825b1fd45d72b39c85e122e991813f9e6546fcf353956b4fdd60ff03acd763e55eeb98d4549b7a688b5d8b1ce8fe9864bbf3c225a4ebb846ad0271f1af416cd28789639f0c6f3ee58dd21553b46d4654bfef6be74a62732922e366d958ff93ecad240a697f7bd1240d092708373e4b1153ff83ae12d291617295989020dfa564b5a52bcf8e2c822d12b07ddf0b9b5f466e49d3e7a387a36b658cb9ba2a91309d32502229818f9a8fdabd046839dd73ac78d95df0ff524922f8b94909f255336db870be985082b682a64cc1d1c71125119a16252a7f697149a99ef7f5f590912de039a28ab9a78f2c2a9e02f7bdaedad84c224d925b9990b551ec96ed61214725fca2e32decfead85197d536977f4caba5ccda5ba844f0c83a156ad89b8d2d24600f4a2585bfed52b66f0491b65fabb0eecca574cfa703b79371440cf5f87ec4f8b27ce8d90a42dea1720208b60fe0810710e60d89176bf58380b1b196f09728efc58b5cd5020fd285c2c4acc1684ab9a6e618e23ce29e3c0e60e12f7c85da8126499683836819d65df67360b7fd2179fb80b1d2617c9e382ab2c8f109196337bd463dc2ce8ab9d982db871d7aa9fd714e6c16220b6a6c1843ba05c68f0cbc01c1ba565089484b73820e531d456edf9e8e459d12fc5d1a3a6faa5ef0a65517626938acca0190bac3313456e60abec08289027385ee9ed2eadb418af0a792130c74ed68a96ad9fde8bffcc91ab312740c39dd8e45e7d81e9b2e8f61512fb6ccc238f3bea9c59a0b485ff03a76714093809a26933b726c1480ab98638a5e529a32874ef0da73a1a0ba1a3f485cae0830552ec7976bb2e051a0cbad2ddd29c6e32767822c389fd0b5724426f82fa17f7b4563bf937b8f82292b790f8d6600d832005a6d7116123986964a1dfe88bd69a1c6841153c57368fa04649a4f3c7e44299ddbeda6b1b84bb23591f82a64a4dc92533b057d31d1a4aed6ad6376141cb22368a6f5119749be3a4d5092dea238a4168a8da0a69681186d9b4bdf2e4191394fde677c08f78052fadacefce1c68f48330c8a3d386c844f8f30a08a8e24f6c8b45ac9faf76a21413b47a300416e44d26b1aa774c91befff82fb36f6d256cc66774e6a9031890e60886f2e712a41c81012839bbd88646f87b36a068659a139e84ab879622a290ef623c5b3a9576bb785963d38ed25b3fadb9b916daabdc1b90694b09e0077268e5f06cec0fbb723fd403fa76c445cf8961b7d0fbb814afe84de856ae6b061dcf9b9a766fea1a5ada4ba8cb4ae23e712c81dd504eaea71dc593dde176709b6676224898a04639728700120adb7831cc90b4a206676981cfb4162cb919f66a92b8910619cac37278d83305c2888b68228d402a0f290773b81c8fa4d2bdeba95f3e4d6ba4a1a6222f047adf81a5b856b308f9a89b0098a369d26d1fb108a54143db8ba436e045aa2894b2155395916d43bb48c0b7cf429ec28033a1d239c59401a19271d55e09ea3e1aee818a956bc46aa871ee867930a51b71cae5aa9b3b823761647116b489fd40b9d37fabf46ba033bd04fab01f7c0dbe55e00ba4c5ac4d732b3e1e390a54f7b833df09fd85a23462cd984ecbde5de014b099d09080af4f10b50a59d52568ca1a79049133d6d408337b1d7037b5fc6117b60ae438076ef13a2b1f7ec3962efa273decdeec9492eb0283fe4f801f609e5cb00c051e4dd3bf932cc819de833bae5a3db323fba778e9bf441d0ee868a2d9200ae584ebdd3799ae204e93905e7c8c239b230fdbcd40784a1f72e6df589b27cf40510454f4ae9c1f48b3c2798a4c0921ec2999367efdbb9d3100bea137ded133d0a196cc499b630bdf7197d7283b03f39272fcab7fb03d37b148877513eef7683a018e5a32d7953e0939b0308ecfd4405763e7ba62d4c4fe929bd772184995f1e453c8598d83eee80338de96dcc8f5e3b1fe647f3a3c70e01f3236fc2f9d1fd217421226ef12105eedefd73089cb2a20c4ab2b1dc74dad7af74351293402e6ab59644822e30d50167cf3a600e7a9f7774efe6f9ba83475f4e81e7bc3852608bed15e1388140987a11b637c42484eded9274d85ed00d08dbcbc91e1cb6f7c3f3c1f66e47366c6f6d57c5f66a4d346c6fa693617b29118aed9db135b1bd12470124b6b7455f0a08533f6f636b2fc4a22f743b4e26cf1e7093664f94d1c1983e95981ececc9e79a396370c31cc64288300d3ef874c0ee1350678d44dabb5d6ad6a75d3b46dab5badb56edbebb66ddbb66d5add5ed44dab9bb6d5adbed82a90ad6adab66ddbb66ddbb66ddbb66ddb160a69db865ab16d2fb66dd3b66ddbb66ddb8068283a1bf5c4664aad00b5d03617cadab40dc88baa6dda76a2b3b1693036189a06e443bbee446783cecf8b5a6bad302a0ff545bd51ff39d1f9506bd5aa56559b56bf699aa6699a56b5adb6544ddb76d861876d63d980687563d96a0c6ddb806cdbb5e77a4dabf5dab7b37437366dd3b60dc8a66ddbcaa6a26d295b8d51553231ea53ba1bdbfb289d0fdbb6d5cdd3348db2b66dd3b46ddb36954dabdda66d5ba8769ba66ddab621607b9f6a1bc49a56b74ddb9e4384b72fe5a0ca6ddab6c5d8b6ad6aa009075364eac2d9391e2b5197a823154212bc2a0465ee827482339f19563b3c623b3c8632b43b31072bd62ea1bcb9b9b9b1d65a4bdf3788feecbaaeebba4ede575f212ceecef50c79eaeeee96524a29a594db8538cbb41b3177fb7504c22481048cc93ea3774e3f8964ad5c023a272fe8f6e056ab60f7a9d55a12e9949e8b1d4d9e98e6149836fd8ce6b6b80467df3a1b2af0e89b563fa7da3fda3fda3f9f6b9f7aedf59f4f3c5f3874298ff8c1113c7a05d28381c4707d87dea17fcec1171b0b9770318147afe7206a0a162e01a485737899adce1b8926644926b2274b1ba9442641228fb4b4f1be4ffbecd7db47d3b3257afd6e0a1d58482a33643ea13c3fc59eb8b09155066769f3d0bb8fee1dca95cb45ffb87ca7135f9e40aa29886df95ea5eff5d9aacf47d35e59be3c7b48dfca9765709e2d95cffbb23df93269f4d92fff4bf93e94cffbe89db6bdfbed6c8c3e1d117b5f8ef8f3d0dfdd087dfb7444fcf9b2e87d98a200385a44746213d791e6e9719344329940ea517434157637ec5500d1d353b5ed4008f1725281c2854b856e931e2656c9ce923ba30063b2f714264cab1708ce3e43e69ce6ab9bad7ef5ab653ffb32e99faf7ed207b8bef66aaabc3e4219d226c664af1d07ba10abcc1c1e19933a12369b90a712a29636a18f1c22fae24d9fb2bfb3a1451c71be48a44f594bda44db987b8a02e06811d1894d5c479aa7c74d12c9640281334dd327ba1ba14f1f7d8ab9396213380311cb2e086c884e5f34e70745d72f17649f2c5039e83798c4bdb600d52b87342abbe8f9f4d0d6af1b1e9c2b76017ba40d10b28964422e913b5825bbd402940161ccc9b3cb21bdead6c9b3e442e3ecda6d0ce10ce8592a3989be2c93bcfbb244228fe04c16c1d9e7f5cb9208ceb2bee8b95ef4fcc12e9d8d0e7635b8f77700552244baa55d5904679fd15be843bbcea5b341e707468cc5622cc60acdcfe5e38ea6699ab683164383a1856ec413457743fb0762e9d2f9a07d9a8e88b59fee129c754bfb68ad26e15c316c0bdf9bf62ab7cfb66d5bfc6cff6c5aadda4ddd8dcfb54f47acf1e9afbb09cece4367430516a24f59845fee1d193c9cadeac3f7ed233c803e37c6204cfc42ec422cee1cc5d6188bb1e82a459b1824d26bb09e1c1bf9fcb9fce0435f9e404a9d0dfad56ff6499efb5c89679153e8f389a79ef3e0ec157bbd5e1295d9d4eed95a12e9b355f5dbf3c443baef73b7afa5b3a17d3a229e5fd6bebdbed4dda8a12ff7b7d9ea178479f59146659fadd9facb8473bffaf5aa51b0fd1fb6facdcfe16cd557039b674b4e9c7d6693099ccd25389b3b389b49703691e0ecb05a4b22fda702e080330d671acee8c099761d699e1e374924930904a680338de57ce17adf7da5bb11ba14c9eeec2a59742d744e059254b0f346aeba2551d9ab7de5e00c86f3d4193d4f25def3d402ce7ea202ab75ab553ee00c84f206d1384b1bd9030893dd2022ceb287083b9487c05d0d89e5276d204c766e7423f66e0e20f0b5ab7437eafb299d0f1595c4c2256ac0c21501f57dd93fb1d65a6bb5eef6111026fbbc6d04c6640fdd787322126f6e6e6e42ef9efbddc8467f3a22163d746efb1c7ecb408dc49faf5f10267b0cc2649fd1db85b85570055f1000279ec7483ad63ec31c3b5b8dca9e4115c59a4829ce0386d7c107d965270f8f4c9c71a49037f7ab5f7dca3e9bb0f4f2795eda4c16c0ecb30567eab39f856534aadd5fc691026fdfb9d75cfb24eb5df1de8f9d8d9337e87dd8894e0e3ae8e4fb41148374cf1e6d5a25fa80e03ad853bb9ba11b848831fbbd6a8e8591746240c01ed8037b600fecc1d9114398c0290c8f1892836557d37de59cec44a2eea1199d71eff7f78377eefba1fbca97ddbba33bfb94899e75d9552ee89edc1c83137111240a6d37cb641e70c71e26cd83763e7439a28e88e597edfbd246d66a2d89c43d9f7b3ef5ad7d9af73b82cdfdc2d9fb55bb9a93f76b57632fca39d8d534ca6357d3922362ed3ae6e7dd5b7244bc5dc7c439620faecf21c2f57bcabbee46e89f4f47c4da97fba283ba1ba3d74f47c4db97fbde67c8948bf2b5f8607ff293ef07efab23fbfd20fa62ac4fd9858838f419ddddd005bdbb398ec1871418f4c59d3e652df965f58845424af26ee1ec312657b3517d50b5a618eb188bec9c0ac45d69d3a7ec9f2b874098ec2d830061b24b22604cf67a73445c7d342a7b762b57cf0ee52acfd68790826413087cb1b0382391ec71f61319d8dcff3ccb7fbe20e6ccf0a7b3213f1d11d7aff6297b7fb34fd9b51b712906364b1b9c7db6b24f20bd9a2d168b15021a59760ecad911d250b70aa6c8be1fa80ba53710a406279f135e7dd1131ed55ef68447b39747e9cbc5a3f3e551f90a79b45f218f7628ad853c3ab39892d274ca8ea6e5b2a3513907279c32c4a2721b9f48a45a4d37b4d3726209b6b627cdb4ba7d38501712d9117cf1818547d42009ee9f0584046b67e96ca8c0281d0dc742914d6a514941a28154eec42e3db0f6132d371493374b389714ed20350931d1dddddeed587dd28ec20736732c8ed52a966be776b48a740dd47294528342313823b1769677acfe76f44ac6a68d8ccd1b13a849af268b3577b0660fd6f4c1a45529747a355dae988bc7d593a45527447a355faf22af232614375db67a356331f923265da6cb1eadca6ea22c1613a6514eafa80ba6e38a1d69950cd22bfa1a42e455049bdeae56a5dcf466f58ac69a47ab7f34695554d2ab8cc5da612d317d6e7ac4e955e672bd5c39a6471fbdca5e12a5bd80bc4c8fa6d2493c62a603d1abcc6432fd00bdd258385a15c4899b5e805605d1a19c24e372413261d3619b4c3ff54a73a5685510f3394c9fbdd24c87ad0a82ab377da5a331b1e4aab3f799a47dba3496eb25579f58ec157bc55e58fb8cc9d5e72551da5f33f6d23e2e17cbc572b15c72f5617d582ed787e57ac9d5168bbd62afd80b6bdbebf57ad1184bae36978be562b9582eb9da582c97cbf592ab1a8bbd62afd80b6bcf6272555faf2cf6ca62af2cc692abea72b15c2c170b6bd75c72556bb5d615da79c9951693a8d85f5aeca569afef99f467ab9d244ad1b172f8eef750ccf4a9849ed2a1888940b19398090594bd40272fd32b7b61ed27dce8e3029d7c5ca68feb7361edde477e58cfa40fab6a1f6d29b113532c8bc91a5fa6ec255ff185b58bb4cfe632659b4b6eaeb8b9b0f65086b3848576581b6b636d2cacbda3a51bda8989582492ad31ac1db4b2043b7196b0fa7abd5e273650dc6994766de7c485d5955597acae767528dcb6e954160b6be726fdd83e6907f5497bed9326ba266a3c2146b98d33d95c8d28b249a4d25568df5250e449771517d6de12046b77b1895d4d63946b31b9e258b55a9b715a0c6be7506e449203042c2cbfd00e4b63914896158af5493bc7039be54fc78a7d763e31acbd63d52a3b56c7eaad71cb8558c25a95e34ba755b94a25adca56e53696495a15afbd2fca0ed642d71e75643cd22a7bed1149ab50ae81ba8f4ece9d00a9dc883997168a49947612c9da5aad2591ceb55c094ff227ae064ff0246fba41442c44c5a1985c89424cf42a879a600dc54aed6a7ee2f6bd1b5f7dd26eba10cbb79cdb3a9a9602c01614cd3ef4d0b7c723da3914a0d9aabe70469ec402e1263b8b286848e5251e58bb8adb036b67f181b593e40fac7d4509109c591ce993f6be29df0bc51b7dd9da0baaf1e61fed3266e57bfb8298da9528c1414cdcb1b0f6ccb91abbc0b1ebcf059637d40508138a4118ed1909ac7c3f876258bb6d5576edb555f3da41ada2d76e5f710897c680113bd4e0063bdc204b2981ed73115a61e75a2051c13ac105122a000400ae5c4814fdc4f03624e69a089e094a8207180ce109d8b9e02808083c700c8647108183e7b3731b68bbd988c49d24319956abd58a3d710c7187b6a6cb75e38a3bdd232e894d62846123ce91155992c630cc43425b2c22b435ebefbce9131dd28319840a96ca17a639b2d3aed9000ba1015ccd1648c5b55a3a98417a25f3449282f23c87b86691980c86009027fb793f2036f38169f60353166d5277609af5600253ca4449dd694b97604a75603238d3160c86694ca28ac48e5022f8c492284a5d405580590065d01e3186aa40d7fa26d67d36bb39d9983c842f4ce54ba2e8b373de0d5d744f3ebadeb72baa773b77e741b75edeecc2644cf6c06e9e43304ca26030b992b19ec99aad1e51c6041263e863b09e1eb159723563b30748943161ac16104c0f01b9a2b5ca975c51985c45564cf6c8970a2ce543f97a6ecabd1bfae8ced8844519b2488ca18fc1306d1e53db184ff3a468560be78608e8dbad17dded2757f479b9d3965c59ca922d89a297f246b6248bb622cb7583726ece511d8d6ab66d23af8e3eca82f469ba622c4f97f60f0f9ce96e9fe318303d6d41efe018c0950b1740551665f44e0e0dc28b0a91b9c1c98d3be0693ee5461ef034e743b7025002de2dc07609004ff3cd235738ac5c1d802557321035dfc432c1a3044f385f2c4c4f285fbd29e0697e744ff034cfdd0a4ff3d9654bae58b8e48a742357208892457868dd85298abcc9641104649fd91c3d473cefa86edbf446dfac2da3d78ffeb92da3cf7be74638454637a31cb1894804ce8c4e1f8b0057d3e5cd2524c171c20d12d3a6084c83f8c0a28f5e78748f82ba5b03b176aee5dd188b3b110cbd23c2610d66c0d47b8e310867ece8de698700dad9185d9475366e40048b3e7aec6e8c3cd1a78d68913ed167eda2d3c71fb48f9e630e9177d1b56b6fc4b2bb31ba77181eddf30e3b1bde47107b9713ddd16d247c4d8423116169bccfe88c0836c718ae9187166995361fbdef5c1c11590211383bb8a901a6cfd3c63b84334168cf0104b6cfa277e73a91e73dd21f58c4041fc32327d0c11c442589fdc0100f8139884a82854710c104a7c0f0082276e023808083bd6bf323efc80972f008c323272082b9dae283f7d147f76247f339b781baa3f97cae77ee233a15bdfbe71c078a5d8df7d1616743eb7ce846a29b4224fa5a6c34f6ae8302436088616763f4d167b4e88eee7529f0e8dc07d4d5185df4c13e795fa640461f6d9da8c08e5e61465f9eef6ec4a30bb1d51e898c3e479fcf3a1f469fa3cfd1670e119e191802f7cd3ca7e5be991dcdcc43e04c3f4f3b9af9f56b7e4d64eba694e101f75d00a077720cdc2e5661c0f47d43a90ea6e7423006afe01939b9f88974da6a1495e99b2374c003d3377d8c592bbd6ff4e9d07535381108868587ef1b4a91f0414f5bad6a4c7758b430a202a6f3993a01531e4530a52d264368107a04d3cfae46e3d1473852c4189cd9acf61168baa66bbaee9aae6dbba1ed76db056d97dbee67bbdb76eb76b5ed663a74db706c2820d82aa843ec572045c148b596f4530f50067e9e7435b814504a0a8c73880d157806e913ddb91252923e4263cc92de3cbd84f3bcbce13c5df39b414677babc1d36374f2f69559eb11983333cad8a98f2e0dc3d624d2c13ad0a9d3eeeb4aa3b05d9a9863260da1363e8f326577d2351f4b57a5fb62e226cf009c32382ec600e368471862415ec7449147d3d591724995786394d04a6a3cfcfe7e99a41e00cc4940510452f838a8318ed01119e25a7cc47d623dbd18489d829e725e382d4d95081bb43569fe8e30e0843e7e1efa53efa449fe5604a91607afabea94c9c967c87a404d3d3249852fa3a9d7e126dddd0d60d6de5f005db44fa441fbbbee913bdc806364f17a6f4917eba5a354f3f83b46a74fa690367b6d3e7d9034c1fbd2006b8828044d1073187501ec200900b58fb7e75541d5607c985610e20f80cb1d21348030753e4162d2c1f93b007e89325b58a5ec444a2e46101fa24626284cd96078439b8227a9ac042f423eece0712ee8f6b897a9642a1ee055230a9c9e229d46c8113730972e9b1f9b379c129adc44cab28b3a223e18cb6704567052651df57120455308133114b4843fe85875cadfed2c23b64be9a571dd2e86b3672d532bf1605f470d51bd0c355df078860c0eaaa7f40e63d7cda0d8e6f80ea3dbc87ef03abab3ecd46a2e2218d78cd25571fe8e1aac7afaecc8512755a81ece193b9ead35c12a5b392f95a1a20b3bacc218d15ec1cb0fa341d898a7fb5aa84e3399a826d4ba26ab6d5215b111bdf387f3611c617d8d5659e84cd9fcd8c6efb43a2e406c2615774cff9fd70b37780c90b4bae562952a4487198a2535f714b45fa34515fe985d3d1948af4496673ceec2be1f4a9f4ea937ce953213697702c86192e7d78607f3e3f7c00e13975ddcfad1ea15c6daf3d2a8fafb63e1bb97ac1f1801693a8f8d52549144e47f362c4cbfc5e5e72c542c3aa2461f30b8e0a159307e63ad06483eaabe77ad52763edea6bb93cccb56b69a140b0afcf9f4d0f9779ae18e5b057aaa3bc87fbade8c895ea838d225de623fd04babcb260bdee0b79e0d54571752e40685c5c9dcb8f2e012ea5520e875d490191860ecf259c90a8c567f61573b6787f858b15598baf80335a8b598859c41c065544045280cd2b3aa3171f75343bbc7876f30b183160f0f019cd65a3514703e35cc9c5533a1a18d99c33bbf9c567348e94d4b9140b4b47837a2acb706429520e926c4e0bccec661cf3029307eeef87f954129329956559ea661c93257261d67783e512676861b8c4121dbc03864b986109dc3dbfe054acc130a703a86ff636c27256ae5a18b0bacc579f9528f8211810801d2f1aab73ab5b6f248a7e75654eef035697f93c20336fd6601bb811e2620c365b1e2de7ad432ea4d19d8121707f95489f1ac28ea350e6009eab0b69702a3e2d5a7c5e165c6ac58a152b56a056a0523408361e95ca1a844a65cd2295a44557547f4fb029202957ea47aaf552e4e58572d8bde0cc0e306971ae06367f3621b0b1b5e2f9a86752ead9a6a4cc0bbb05348dd5e7f28ae1f9c9c2f32bbe7c26781ef565520f9e4f7dd94a9e5cc269f1e5504793a5bedc1f8ec963c266a662466793c967b322fb77a455f90567c557a3f18a432344c025787a60f9efe6cbf96072b583def000cb7f3a9f925eed10b196e0890296ff767a35e112626882e53f9c15d90b4eabb2cbeba548abe619b0fccb91564d33d8a02eaf128eec68e6610a354f59ead94987146abe3fb92379b08cc515641ca9d840accb06397979bde4ac80605713f33c79e0d91b48808e078078c0853b7bc0e5811f324b1eece2dd2db2162f382f392f3a2f392f455e5e2f485e602f455e8ebcbc5e90bcc05e703e9b171c178fb999c58bbb384a47f3e29e0b182f4e3147ae56745239a9672b3af330b2ecaec45674522b3ad9bd008c1830260f87f186aa17ef57a8dae17d1054b90071a50f47a26262de374f1e3de63997098b9916bafb672357ab77cfa99cd5d76628c13ef57df1124ee9553ad22a169c81780796831d8b2f7780096671549e3c70ea1ceac2b46831674e8bfbe1ccd962b6b8fcbc2bee47a4c5f7ddacb8104fd457e47b7d363c36bbbc52a9fbe22c6ecc8763f2c02e0e3b1a178771ed0fcbc3b5ae3ea9fcc5b53d6ccb4709a4c30c6cca391c76e5c5c3f25c0b48c4a47b2ee128c0aee86aa460163d4cc0e4aa8501325f7df579a0a501ababaefa3ed0525abdd43aa421f36930898a1f8246bce9872db1f24bdbe0bca213bb06a8befa3e1b2536afe8f40e265df4be5f0280d8becb6b4527746e54ca5c5ea321d8fc82933ad227f9179c56a54c603b08b6171d763552f0fc3e9b10d85c629558a51dbd8aa957ab58f41c69158b143c53395386e51c0b11935665222618877d79c191a812fe146173b00e304ab07d7ec111edb0a69d3ed9232eaf18100e9b4b38380533bfbc811b3cdfb793b0a9cf8b438361162c3ea3453bba5fbcb831ef15d90a7bc406a7552e2effe5b40ac6e53918b7c55d5c885145be178c0bb18bdbb86fe317176226a3e78a4f0efb27e7380882e914d0d594707fa91c1c9b4b1c7741f0a5c74bab4fd90b0f08f3c292a89b3ee1b0dd61f7d9f4732a27b5d3aa3e35c52a78440a4a80e553b056a560f9144faa47ae7648180db07c8a49aa49af76743747a46047af46ad549256c1235600c3f2291db96a1ab357745a9553af186b4549abe415b0fcca4eab64166cd0d4ab55b9845362b52a7f36f84e1eef14c0229562914a1de21818140a06857af1c1a46258ac70d12202367f2226319c5f704a14bfe0c81e7c367295caa971099b3f1bfc11c99e7a7fb9a23e9fba29582aa74ff25704367be39cca49ddc6b0cb3e9b567d43be9b8f48ab32eac3a1c1ce62b14440437e41f86ca00683331fdc77d191287917910b6b31cb3d97705e70a4b443e097e79799dde7128e9c49346af644cd79885bf48aacb3155916f3ad982d504f5d0b732d8b6b7ff40905ed16d034529e15accbab55f348abb29c5635ac5533898b8e4bac552d7d88519777d969d50a9e25ad62a2552b3e2122a699977761d2aad4e55d9aa0d8d1aa96f97d45f0f74add0fe743dd8fc837a44ff2a3ee8b57b0fd88f30b4efe7438f15cc2e9b183d6d550dcdf67d3039bca4921e995ad26dceda283e5330b29f3be6d55afde47e995cbab471d8d06c330fcf29696cb5cdb3ae1e1a184e5e3391c968b2162d2aa28622257190d79cb92abd517b0d190293dbfe07c361225bfbadf8d44c9abe88133367e5ed82960a331a371f0cb732ac79a00c2c8abaee5505ec4c068b1030c0b1e56c4e8644717506447de098a29646138571b1ea5d3ab0d9c99971a14708eb8e51340bf04f4a9ab61c2056855f6650d86fb546d727db9d9aab841cc1437cb580e251c2cffdd9b5158286e46e181e55d6efe7e80e54fdc7cc224bbec60f9969b4b375b969b2dce2ef92382e5576eb62a375b1b2c9f72b38ca1dc5c4f3c9717961fa572b0bcfd5e70b07c684507cb77dfcd1286e3b99bb51e1cffb9b9faa83c34978683e3015a957168b07ebf67ed536398591e596679b48a6279dbe306cb5b9cd5cacbfa68153c12831696d5064bcb0367dbb2d9115f43c0d9de70475ea0049c6d112cb3a537301c9d57abb216c3367548abe61210ced5a616c13248b541c06cd19a43ecd019208311461861841146186184114618618410214284183162c4881123468c183162c4881021428408b12fac4128438a599d8a624da4142c70e6413bc1b9248a8b2c8f1d0de9b1a36139071bb60c953ea363cb4933ad6e1f0ed48554aec426ce55abb524143eb0ad2a7da5e21a0825963ea367b4e779dea7e7799e87e29ee779de897b9ee779a07b9ee779a67b9ee77927f73ccff3e83dcff33c7bcff33ccff33ccf73b9e7799ee7799ee785ee799ee7799e87c39bf73ccff33c2f85ca5bee79396213587ebbf75047e37929a20ff7506ce58582aba251cac703bd4ea47c4e78dc0b94f239e17d5ea6cf096f7b055cd80186690fb824f6c0b4210f2741ddc52298de1c81c0cb1f34f2dc84b143f9031802d4be405d9614940ab2dd88e3546ec4e76e6349248756290f4d8a4cf98c9652ca257006c5e3e17927272727dbbb562dc2428d5341197d96724e87246c069217e20a7170e3e0d46a2d89f4f3441e89a28ff2e61429fa1463e42a4842cc89aeca9598fb8034107769e4ebb5aa55586f941245e5f3ae1e14e24420d8dd5081459c08947221a7a36214249cf0a28209c66a9c8e651e709632a03e62430516bd656c19ca2197f449a201cee8b0b83b7d9b01cae84e534edf4be00c4a4b1e98d6b6cdb25c0b8d9685607622a404531cb9e404840488a2ef585f01d65168258c607a4ea571701aa771bac80a8bca89874262d08da12b812b31a712aacd04a612c8ec9a47ea484c43fff1932559a97584712a5ac622024979952fc6e4bb2f471e89064caf69523e8708cbefa3af71600cc6608c1e45857391b2799a07969b27549b47ea481db96a1b89a23fcd9ceb9060360787beab692c258f945bb0f1f3b9c740aff23cda78e04ced581ae5837d42f9e89b25412a5fee16473bfaae562dfbbeec29a0ee46edbeac5d5e3b622912aa5db90318432f8504c1f429b779706e6d0d1045616e1ef9029902922441c381a797409c9bf566c925bd8ab089290f3c271fef419a3bba09088f9060b3e4e1e9a74081cd5287e744fbfae4e49974729e13a943ed619fe497ab8ec4a5e6913cea09267fc0a44b667983a924228b903d47584c026720d57868e418200c3d51e28130f45ccd0104ce1eea6ed4cb779d0ff552933c2d79307d6809779004fa44af7227963762d18510c6021045dfb28209603104396e8069a810c2c8198d7225e65826d64e63daed2440187a791b0930861ee5360e84e9228da2910a49484868d44204436c7263bb3c777947a3cf435d770365b47d8b30945b14897245ffdc1caf109334cec9e7aa36f68614613019613018a6dc8d58e536b67245ef42aeba0888a22791aa45a23ac15201d3d6022c432bd4b097afddc9bd73f26ee722a8eb54b8aeeb3e7a550169dd8dcf3baec587eef6f6fbbc83ddbd0b614ce827178e3e2a9f2bfaa853e14c20d8d5c82fc7d2674ed03395cfe710e1f9d967dd8d7a90bc76dadd187d7e3a2256f9b27ce833244bcdf6fda07dfb0f219a72514e6e8e40308d387624babdb98d74919ba38f1c7f601a93a30c30bdbc34c0f48d23571268143d6dfaae690cd3732e2d2374a12108f4893e62ee368e3970e6f3d5d83e2122bdbc11cbcf6bb7f6694e1886390ce145079c60ba4cdf31021193129c86cb73a7d29e376e5bb9dcf40c42c1d0e58b444a282e69637384d9ac66f50ab07c297b56fa4611ce6c38d7121aac0a30d8dc30a95393884780abba049b04090ab7c2890b388a217e41cc1cd1d030080393abd2e5a58fec229f503cff3e93fe6c612d16c84941ee87a03811717151c4f495be868166736293c4cba6630c5ca0e4cd606d964edfe0f60f16562c423bc9c057e76c158855fcd197e2cf07210c10f1875c45249c2453a511f9b2fd780300a91363e45f40158b8cfa98e71e307c9681eb063afca4441915889f4e86570e90a88cd403e946ea7300b0fc06804400507c3cae84cb07e1cc76791de00cfd745815508676f90b1d508128637ee50302c6c8e71858cacf330a4b180c75e807214c0471141465d0c367510668e673ed0230dd64e240458050b4c16acf4eaf7d19cda412d935500a5ced40f11dd2f456cd95cbe375c0f031a0004aef4106c76d200867b2cdf4dc959e534acf2ca5e7160c1f0fcf7534f3a1db300813057892df3a9a8841b79ede86c51829c498249c06fa74341173f466a696424a423ea5cfa4c362fa5514d00a2691b66796edb9c572cf232c929191de655f7f2729af1b6803711f93c6814cda7629ee24587ec621735103938840f342cc42ba3a48b83e760d6b55d6136b4a22ce367da87435b107db6da901dd90c12532dc520300783ec312732ba052c300cb4b1f31464ee902a88a44e0a905c5109174341083ae6cf50987de9dc452b51b84f40161e485a858cb8c1063e44d3716413f2e93ad96458030f259fac0f2a1980420b407d83b07a3c9646a1aca43a0007b8fa51685b201b07733cc75a0ac4d190e3c8d4e3a9a280408935d212e8f2e5109b8837c4402c690e74e229e372a014ff22e373a01a29aa288a54b05b843852e9f6ffdd94c1abc029e4a201329a0ee6aa4645f4d6ca2bb1a510c4896d0ae06422106c58534ea95b853c9ba1a526c01559987ca02a2a08c7a1d2bb20e190566795e990161155006ca85aa4d0629c6c81f3e05ca307587875d8d8973c4266a94d136a42803085394f118237ff2792824126631b19c63b9117320ce081045e08de5de81d81e65843c8e9463bbd05797c04d1d1a4023787ee2c62d35221cb2b885895b6a483c2988e5427c92d724106c5f89acab894db004c1f2b60122ca90addc3d51091863044218908d48c018198bd049620952ab02856fd0ba9a988359aedd89bbab115f806bad3566a13c0466999823a5c0557f47094e8388f81290688c2036418388ec30c3f259067c91608e0793ac4e547b62f167e88428fc194e41005408008f5f01003c5cd0b8cf300b32e608aab4c39f802ae04ce8f02f5146777818a8fa1cfe055cb51c9e23c9d835213c1fbb9a1638476ca226ee28812054695c0954b56f87e945ec307d2590a171a4853bf11328fe9b03283ea384307c1657a5c3cf28231289313a7255faa211224a3ef465198331de8470963a34dcc77535a011385e212ecfae1014ef6a7cf08c321a1663602a3acb71f6466cba51bbf20aa1439c8e21413a4ae04cf7d2b96b0f7d392a01973aee235ba0c376e3cdbd765bfe976eee4704c2c89b6ecb532c2ca495bbdcf452fd3e0861ecb3545272b9e9a5c79b56d58804a8925d5d6e49c8d5aecbdd5102120dd831764424e00bf912541a91097107796e05d417c20e4444133cbfd2d5782b5d0d498b3960a1237535100c789ed4d54422a4ae8645bd1969c329521b16656c9797ad2863fba21230465e6e5f136a1511014f212c5d0ddc020ba85eca421a25f99ba0c49d421462e4e8042c3fa917bf9116f07ca9ab816ac08138ebe24d6459f9fea3b8cb6f0eff7e1f1292c385f085ca97631320dc21e5cb51090863a07c392271841108639c7830f6135d28512a75fb7244424a45a9816ac0f32d5d8d4a4b571371d002eac6d915627ae846249810639c9083044b085f7cb063e48803e18b1cadb0438e54c0f2310a30867cede20d11352e35177735500ab8af10d34bb70821d1f4c5224094fce74457f3024f119ce86aa20be7884d9c88376dc8def1f3046a55f6b5103c9570e96a62139c0b2874a3106e1c428c9107dd48e4735b5a6e3c028491ffdc58041823afdd28047892cfe2dd70bd1b2edd580496f7ba780361e457a060fb48e039064a029c23365113c75023e640fe7314ca43b8b0469fd5079bb7a8348b57cc9222758ca991113400007315003040100c08052442598ab2ec1b14000c789852725a9e89b32c8a5114e58c21c800020000000001101019220e00207a9d83e76f153e30607ccaf074934be89f820e3259e665cb6003ae676297b8dddf94ecf619e114256b9deda47ba772959529d561e39da3bfb8e54a6f01d43572c269879b107e66f308e0a154e8ce438950d32c1973d0db3c5c84cdf270d831802ec14ea51bf8cdb81f4590fb21c2dccfd02d6cd610221485bfb5e069d98eb681560264b334497fe2a9d62c13062ad28bc13f9607f484ab3d549236b16b4f87e5d9dc4bf5437f0c32b7a86f7dce836334de7261300deede64f6a90f2d045a832ff7dbbdb9027a8f58bdc2c916d52f5e7f7f8c69e0858f647f5d9af1279950efadb48361b67135260a217bb0bdc68118848b5c3c83887e0a50677661e90e2360475c1133a23d2efacb4d963d9cef676ff8ed6aae723751358a2fddc1ad0a3db448a726b121d55fe79096e12ae780fca44d2ad274a79481b3ff5badc4b044e4f63a94c0febc9e28388d711a9eb08c0260558a0a3db3c37e0fb76815abe1527a444f2eee94a8dd040cde71a156b306976aa89d44a652be23157d8709a677441e5b0189ecc82c72f18abc496534b9634666f55d89d6e925f8bde2764f8856167721a2ce8422e05530163c159bbba49a013b131d3211f1fe876390f6b72eec3ac84a4f6e5fb6ebfe545bc457860064896f3ffd651cc677f8c1ecb9bc62ad46e50f69921fc76b59f33b30cd324112bbe4e7b8fd960c1b8ad79623c1bb5bd1b291c0424368549ac496b53a096cc9246646a43526c77030417e0645e6430d75cb2eb09d291c188971a5eaec6a4407d3d2b01ad01eb1d75742258727d720027d3b5f726dd2ceb81df09682b0a2cc8630bad3fd7ad34e4230d7e1bcc583a108e8bad56bc0b85987b7c0f2d3ba7345a4df162840e263272a87682286e4bbdee75d4ac60fb029737ec73ebf371068c8efd9b6b7e2a56b20e866e151a8188f779d1761fd7a580b478d506a49a0a64db11fda823461310875f27b10ad16ab50bc2ca41c7c8c68c52d0d081414be28e5687bdea835ba0ee13cd794d5f9da5322178afc568cd3a8fe7822a60aa8371384ed203ff86fce1f9547c24c68a1f94ad5ccb3ebb5b36f3a5baad8fa207e214ba275d35979c064822e2846ec41d417f80ef569348166057893895e410a131f091317acfed87ffe0da11c1285029252c15ad10fbc09bb7d650f96ae50dbeddf21928db3eccc74bcc8f09931ee4ac30d626f4b3ff591de95643ca94928fabaf6c18907311d5b4119d48d82b131294761cf9380deae0961a9c8cb4853052217d7028298550d224d0d9de95ded2a25fe03f209e392a055315b3acfb750b5a5ea676e6d9b940a5f12176429e23fa8dfc0c5c7a07a7ca535469da9204e0d842bc0d6a8644e22543995ed06d5a5770563659c1452255c969f4f7f309b1fc53f99ed37013fcde8243437c1348252995061d045992b2702da913055311040d64ca40b801b8178952b4f4d64b71819a80a7e63a9b8b6e1d395177f698ef4efb08aadd82b4bf4f5deff2baf70b7ad3a25e3fc13ed118898c9b6c7822f6acea73f534f3c514d8a15410c4c8b0505c36be13d378c60e42f8b6f3a07e6e860157640a94778febb798631bafbff1b4043f7cb0d41f38592bce054e44bc49e7c39797314ee2927abf55244dfbdf44cf2aabee1c67f6e2759e93302bd85a02f3840d774f39d9e3dd26b1a7d84824787ac54c0e59c998ebb77ad25bdccce2757b51c7e3f0595fdca88af806e540a3203efb67f5a97880f04b26a91d205b741e5efe041c25f6881078be0ec5dce42b7894049239e0efc2a1a124eac82a9267e6d102db3373182c29686171bb7e6c6c5a05c3f11b741c01b4d289dc6b4d0cefef99b13b4e4628d8f4bd0892224c9a0683be6df542b68a67eb9a36df1655c7b1b6b028c62c6c88444effd305853951b649e3871870053b0b5cb02455b7de31c8cd79fe320650039bbfbd152c6f2e6feaaed0d0d09130d242e5df76b3404b92b9e703626e027e0a1a34e4fee54905fcf622f43a952c3515a44c6b48933937dfd1ff6ad667928d77bb3f22fd82acb26949a36bda0169b67772023c7cc47651b8a2f179360632ec08391d51b3da27902be0592d96e4b7283db12c2c8769f57ae071fea7be7a3dbf452ff0cdd73335219688e623f2d0ec6e34dcf3c26d3f91c6e6b07ffe56055c72b34afda04efcf449bcd7877d46f79e832e9b517d299795f224b193065d681be1ef956e7b7c42598f9c9c2e87a5411ebf5b083f51b9da0a1d6858dffece3dba03601bd9154747ed52bf4a2b489f431986bfb591801583eb1e0f42d6ded4711a6bff0819175017f32831f965d0266222b3df1f3055d999aeaeaa9cf6841957c152c8e0946b257cb4619db3944e5ab49bcda2cae150101ec4396112044ca9c198e7ffcdbdf2a2bc42bf85f474af2ea4787c1ff7cf638274adbc56d21390d49fd486125a5d6fde7cd378ba22df9c35b5eea8447db30484b10e56dcf409da22f3d3f56095c96970d8c50b870e5166d09e2362a2a0fe433e562476d34d1226629c09023be3916f23a4ebfa86806f6feccd7364e139ab983dabf242b1eefc38ebe08b5fd3ea7e5101c4f7051d7babb55f9fd4592bdeaf72b70d097f49338b47d809937c1143929c27dd20fcc85f508b33f400c2745570c774b02fb6432c119fa7b56697f19b699ecf556ce34ddca98d9e43a047fa255d47674558e244b4b3d5d747ae0cb8ae446bd40e8098dd019c0b3eb6bf9223ad793e7b39acaea1a08d4e3a302688446959a30650be083e6f4fff02448cfcf109ee93dbf465d75d523b74b5eea638d28558dac630bc7873aff129c7c11e24549f380e3d717af37ae34624da171dadd84018c48651eca69049d085e39de5e699b2ae50f601cafec257d99f96d71019606fc3f22c0da42cf3c3eca6134e3369f6f21fe12a24c947da46d982db234e7311ba6865f59a551da48497311faa9ef21f546ce8b3b1fee31db594d6c6c15cf5b24856830f4dad5e44856f1f1e0e6b578336c1107c6ba8f91e8b8c35164fcfe799ac6edf149529a04e965a38849907a59c730ca2a4c4c7f0930a7637425600a00cad34bc1a532332646396210a364cb8a9ee8882e479c2a2883923a2aa9557ba5ec4d17dadc716f2ab977be41f932e1bd93a19827df466f38456b2433b3d6ab22fa47e6897c25a290ea98f2dded1679e8be1c6d0b7ee795d3e97314a5118cf9afca249a981394347dad2ef170231834aa4023a065431d5d595f0c8d48b1b48dff3648597f0c1a2ac7f3314154a10f3fb9459f69d94d38dea374933a4e0ec15afd90a2f1cef3359b8bccd58339cf8cd4635bf02c28c903a71870015af956b195b2e650675a6bbe582b987ad84304adb5bf7ac3c9889d14fec57482e5373af9bbae6a138f5ca3d3eca76fe9c1dcce5ec7a6dc032269ef36eb03d49d9716080ab7bec4d0bd47420b651a25855a617a55ad116829d00f7785386346602f75401d148e07742e6485fd67612f5378dcc2090060a83a2bb448da5177694cd7142fa2592efe241b4524cced9c4499472f058d266d755b2c3eadbd0c16810d9dec1082f2677edca8d089020615f2f2e6a9709b7b5511b18408fd9883fc09b42f9c5c3d215c92fba804743be4d25f1c36a50afad353260c1fbeeb5af96a0c9e81232d37e932f6326eca121ecd86ce05c1b9ac0482c7a1859a308e0537850a64d3378ce0b059755555fb07bae6dcbb21301aceaec9c5e81af0e2370ac4bbb4cbf66d4185e45d401c72aac962d732e9fc3ae2b17a19ff0b6666bfb930e937c7e5a6de03e765e4630eef566ed0827f251109219a1d72ba1e4907a5d22c37d1a01ab08c7973a247297df3c7f7e939c01f022d79b1b33cb490d0859f575cc98e8265b19849a40ad5b999e27a563ff4e2648be16a6bf67593cd21b73946a401e849c38db7f780e7d5f405c69083ab3ee5827841447afac64766160eb126afeca39b69fd43e2cf3a282c190361a151288669dd765843a1e80d566ef872a03820d95c51c21b4ea3aca6783885a1dfc5b660255108205641ac1208f0e8d9f0a08fcab9e71987a4b698f6f4dd31dbc23b81a221e8e5c9556f08e033296468b052760181c0b20bcb81b160d96929a6794ecf6f70bbac8b6f617e4394e796a0caec3ee35308073ed2911bc09b2eb2b70913e7de79eff5b13c212a2f16af623ff547d74d2978dc06f636f3a599d205aca94bf813e4c8bce6daa31c072977633e22f1e51b518047997a8ea2cd071b5f747bfd50ac21c11792e3e96359ec574a40a93050c286685c72feb2af35fff9b5f33fb0db4d96f58ff3959223f69c628f11f1b65def690e1c994d320a95e55972b8ef77f4926cea7b2baa577ad7562a93538498653b06fd28431e86a6e71d3d04cb1fc998e4a439d63ea302cd2a00e74ee8d5af43b9096148673313ffbdd323bdaaf9a91d1376a0eb393ea2baa27e1e7151cf5f95ee06bc277ed8f472c10058ea847b96f0d761ae6c630937f748d2e5497af43bf74267e3ade4d98fd8a843ca0770a16b1d76b72dca422a639c70e73a20fee29d8cefdac1c51935151cca9a2f615e43963bd80724f3993485ee7556c053204353a0ab5ab001b4246f22e8b8aa4a750b9391ce06fae80b9a58d7e30041b396124058f2494b78cfa58c4f2ad12e326c30b9eaa5f22591336a3f107402bcb70161b4d81181e53891f5ddab1edb537a592c2536a6e40c8a460e5242488c17c5484bf46ee07945942aa390f7937734933912484c45599d38320e9408adc67422e9d26b8312c91712e6d0ca3c62b055b4e8f8a705dff6d3abe186532b3976ea40a01aa6658bce7a146d13d1199aea25b2d5a61868e64546ac72708d7cf6d5fb18dfde9dc0eeee291a3d4e529dea35cae1ed64a36b13f08edebe8f69c4b01d7c8c42b21dd820358efc02ca14a9d5f001720e13b25501cf74733a54eab584ffc1b2e2137519b9e1b15edb9eec3cd230cbb895f31948fb00b2c634dcf19930e2a8424c15bdcb35df00aa611658ffcf191d7a03a699adc22cc08e3e39f02e4d567311a3b626083e4f04a3e98bfdd441b0970464fd90ebfbd1d4431ff7bab68b34b19d581b7355254129220f0bd4c393e2ccbd1d14f170812297a1a9980ae6c599346327fbefb5199c093e142b01b15e14a7b0e9e516b262af81cd78e1a64c634f2e03733d9610da1e8c1cd1f8e207b797480e54547b83ec62f18c9927dadbdf1867a5dba2182ee8853a00e2cee3cb08b7e40b7b039f492dcfd989d3d7d595b4da92b7ef184285c482e3f02e36ac49b7b6a5078a28365968b175df7c17ed9819dac25237757c37bca26e14ce77e33ab93d568815f00bee9a75c0fad57002ad7e772bd53867db519539089cde432a834c104bcbe7fcf61f86bf11a967fa715777bd8b8991016f0efee1aa27f3f93e9c0b582d08a741e4acdea15b278ffc1c658612df6aebd8890ee0afbb099acb9aea9fc6120c60230cf0827d4d05a097e149647375a1b3e15afca18a3afd64e3be0d50b1e17811b5129f10fdf3af372b90299d50b6f9e12503e72da317c400bab9a64f9db57a0031f14d2e8c245013c231d1d544b7cb273a1b07765a5bd413b009695628e50f6f2e65433120b8b580a9938d409424b4f94f4a4cba2312a1e4a893b363984460104cea82cb7d44fc053b94611a3eead4f51ec50696ac0187e1f197068616370d926f38c72f99b7e44439014040d43c88c26cf860f6dd8ddb4ac665bfbe62466dbb099a70bef1bced88747c3eacc159efd45d2c494511090418b44f3ce3870d3134ed18c9369fad3b72f9e3f5dfb60bacd57005e8352463af7d4e83acb68944b7ccb9628726a41915373d5c166bb5169d9503ab009fbe26022301e4ba98028ee1be78001c48420bbe7fcfdc4a3f78e2fd7eb24084b9f209961aec11b8ea48d3bff223a9519bd895437e87fcbde2050d802aad3fc055882012bd544a1e1ac61520a1a1e4649e860871bb26a02b49f8c4e5181ded697fae8f63a9ddd80d1adc58e4794f436d67c4c0141bc42e697c488a4329e47cdca3e249ae4b56736b271c1b7337cba1f415ef0538df53cdffa8a89966e3938a1b9b80e94573c5f1fc78f8457239d6fde9d84354996ad450decafea64569b592acc5a653a8d72a58702f7a8cd6e761b441b3ad3c8564a142e8589f4d5dd73f2b07fe98a9988e0885f499aaa4bdd103d0a49ea57ecc586a08c8b28afd4399e59af54be051cbe0ee37f17603caee443985d73d0ed78459b76905648947ca922b60f98a589752777558e4e03659db1ea9833e1c5974b3ece09709a0532a6d475ca0cad711ed7f6a4ecc40867d0aab39a6473c42f5ee9d0e978a123835dc80a9dd445f222a14bed066d7ecb071ed31cb57e7b465d95f9371d0049ebe57d19832f1ca31a8be871d6061ffd52af8e772d197e5abe17e84bd75c16971c6d24dba943d736d89bf587be62e606e9437ac89a5922fa394ba1e67f158fca2a13a4d058ee6a92f8b6bce1927e42d439c4b3a7529f03ee78a68502a86c9f98287ad3d9f175a25e61eb6dcc7bac298a784893eb3965a9d9fa6039f543259f3e91c609995d74af9addaf081bdec08b4a4b6f01c50c17ae994af5903a01bf1c995d96f2acbeec714c89a47aab75b84d0b4a778bb8a70f962fe36dfdf682329a2db231ec28e7437e3140ba35ba1bd67bd18b946377d0d00d7e53f9e476116249cbf0c98b954e39d4971ea1bce02a50d824a0111434fabd3dcd3b85d3cbec862eb3a82a2845f44dcc3d6399112fdb2631084ffee5408d92c09fcfd2a59fa1c7e407be9ee8d44823e0fbc41d90cdcb169442aceefc9d67ab2497f4d7c599543ef0ddf6ec9095219a8b0d5b10bede443d2382f723488782e1cdac90f5132479966934fd969cb5ebc8cbbe6c4458c67f227e91c85838c01f6d00f650c24d75c160312e783495a1baea946ea7f0a023db970e5f0d441a9a27180b81b3b63bb2bf4f798bbe8867a643c11720afad663f1594caa406646bfe1c4350900ba954fc77ca26933e1a62d1e56c0331d06369460fae1ba8b56bc6c0a92048b27292760e3f3bb61d6ba299fdefbc1d47825862e7a6e27489b777a2f0de286bdff18275c7f727fe9a80c42ecb03a2151e8ec28ab14ddb3a7a8c52236f714332f12037dc7968c10c2cf0680c257348e9ee0b1d316448cd7b961f158a63f2467e6f03cd3c9c0a0b8cddf05112f017a048fcc22562a692d22f78c9d275a0926c2b777021320e15c1b08e965a1a0447dcb8498738b79c81412513295b98fc8d6af6786f55e2525635ed2801a9f244e60a80c8d0eecfbd72cc3ab934c74b024d66d82de18a411c8e259c2627f0528a3d86dcbe89198201cd956e569768b0e795b8a5ec05df544ec33d3a6b7846a70d156c8d5dd5d9040a7190a8e34a354017efdbe3b07a46f1c77e6e2c2570e892a49948652a6803358128d0848ac2189dbc765d37ab96c10848b5f876ba751b49e55c9e21c4577f1ceb92868cb969258173b117406b4945c002bae59d20eb5233466a6de80621c5c27664133234959abc4e41bec83eec220399d116de6222e0cf503ca2a9c2a16086d2fc6f6ff85743f4fff7830298397a914482ac1291e779c8000f414a453aa28fd99168b161f0fd23d1fd55590ad86be7476610b5b9dc9f6fbe4bd04e55693bf0b070079ec51a4e759b01f1c34215b7f1289a581ef39763fc731312e113e3526ed20a02456e3f857ab1132ef493d06d521182c02f694dac8c773ae28028cf54a069a283b7f1e04b6faf973bdb80d99a1b7445e4bb0491369766e918919a28e169102871da1819479b3e556f437af80953053a52f86e75dcafb6838941ac17c325019824274a3f54556d6fc85ffaaa0a60b821b8d5a82937015db19e6d0cab5f96543ab1ffe40b61e9d98a80250d17c5b07ec6bdbd20f072b6026a029412d67ffc351de95f36dbe67702aaf7312b564d4996b3b2a9576c32d4139a62c78bb72c2f8f82492ffd1e738d9c03923457b66147ba292df7fb205107c2e4cae71bace3d852a9953e5753822de57c227942f0606e50a99143c9c942d0e57b8a22a3c3f7f1eaca3415f41e323645f9e8fa2dac03775ed366e03afbfe3504b21da98ad0af41a37862f02d1c89e40a66490d9f72718ee6aad85cc04dabc9ba0a7d970e7d77dc68e7af248d3bdc2568a6ee43040858f450543a505e0996ac795dd7ef9e31d94032d376905c24ed476e8c9fb886d1a116cf325bd35493a5625f37bf6ef5d1d4abfae900da167c7ebf8cbaa029518513d93954f30167cf597ba330455a0a14bed98f36c0406e922e2403a3dcc219c44c02b68e9ca52f7b0d393891915ec5489e6401ca312f0a7f6fd9c7e300a6d8b35799dd0fb68c9560f88184292663686b4b7b298aef4ab1ef023bf5114ee227136b53295bb1e309b97b3a408fec0af5b4a7709124856d7e3f607d8285ab4bcfc95140b0630ea8792d97f2ffe85a3e88d704604e8cdb5310dabfe05e4b19fef407b9591d0ffb2fb57b30365459fb2cdd01ca4882b30e4d5c596ab6066296c0b6f4740685277474d6fcc20d5ed67f6be17f8ce51e85a7ef0cdfc45ab69c94566c29c6aa4dae44b74f6aaf6d73442519007775e3b884b5ffc60e8240bfbc19be8396054281e8ffd76d55c269d4a8bf679d2255afce1f87e86fc20b00571440b9c1941b793dfbaf1264bbab489e7405e770c805a6411811bb371581f17b4dd7971f3efc8325994f6953a2f0a85f413eb28a22360a8891542319d753c043964625bfb6b9d8f105ca0d1d11cf17306e7e603f531ef29222f10b90331aa046bc9fe59f24a633195d25a17176cdc7e537652bf3d03e568a1af171a6807257004310e33fb0fcb44f4ea659ca07a3a6cb9067f93a3f6f96c324a69fd8af16f2201ca257bbf8f77cb1d9d6abfbfa8950c83c5853ffa0deb022a0759c5829233d163f7e8749e6d93a507e2f511855076319e853fc6cd5ab40d85feee9268d499a3ba983bcb734b8da099bf986524843ca1755d72f98fc7762d7ba017c056b4735fa5be252f7f446b16a384ff0cdeaa4545f0caf273ad4e5b7de05768e4466f7dbe3a8a311f3980442c6c898b9280598628dfe1e5b27621b08d4d45413a2990bf46ba20278d59b622fedcdd02837b6b1d7f836e581c523f08e855fb4da9413e69a24b40c6a8acc12328a4be7896519ee8e85340cb178ee8fe6842e6cba1d61bae9a76e0e5584e40c2731e30f79d1eb1314f3eed946c7efcc33f85daaf86af7ab6303c387883e9b4d60dfa712efbaacbe191e4c61fdf8cbb7ee01efe46a4d09f520fb407f203a5dac5f517736cd50b8589d24f210f0a7f512fbb61bf06183dba0e2964b096e15e6a0eb2bfe6434b8a61d2151a09d591fc8286ba335bd9d578cf1971dace178a48e4f7293dec94928f159b0f4c34dfd7635bc0bb0c6e506d0847b2a4ca220e74fc8320bb38ae70c1f04484bed8af934ea31d1e42dafb18cefb5478627c387f929509f623ba5ccfdd42f5dc1bffb682ffab9911b4f4639afe0997339771f1842999e93e66209fea5e6bfd532cbc70017229f295397876ea082480e705b54ed7771afda6a7c040c61393d374b0e08ecc3a1206c1c7a68138e18a5762e522eba0d96a687e1b7432055b61749d440142023a037768d074b7b0df685b3b021808af3cc5223491e07ae43af59cd1700e6a3b3adf796041194918010abb38664f0a7e0401243899b8c0967b6bd503b4559371dd7fd299c2381471710cd4d3c07c1c8b066644c2532e551a6dc999e6761291c4f3a51da20a115d490a139efacacf86026680244029169e5d2320bab9d2e7676b632bbcc0defcad22f1d1dd7241161104182b33e463c3009bdba45234642c13ea409b74807c5b261887b4d9f066c093c13aa130612ae6d5c926f730d0f2807d84be608a932ae7740f4d7b580f0cbb5ea42b4bd0dad5471e0ff7c24dc5a6f2e6e6cdf0b0fa66b710c97fe34ab439af79702a969099f7e22f83f658e3e8ce890ac2431ad75d546a0015bb03a92b559e4d5fa04c3972e4d885d201ed2110e592ae2051a8b3c74eed7800977087706a74b19dc6c3e1b1bfd8bd441ff567b8bce3bb2b5c13dc9b768545a7dbb81dcbf4f2f99ec6f544401b9ce6065993595b61c41eabd46745fa58b9326437f90848f1e4467e5406c7192cfbca7a876ebfd6b706438daa48d4bf5a1fb1969c92459151c497ccdf60e39cd90bdf550d8d694666bfa119865c7634430a9ad9b792fd4d9fc9632157dadb981cf991218b9be14389cdbea1b7b6cd3ca7449743ef2142273e8ed79e5cb559bd98b740a9e8c4981ad777b288b6e37b6f1127b5a0449750a3b309f49fa9c5bd8b8d9c314d4754f5247d6f0b7e322f61456a7e3ba275a15c9ba83f280cad0a17c33ee969cdfa421b60c2b6aafc256df9903702e7ea99ed203d2f707340dd04ea887386e6d7f44a656cb2bc752f6b45d16fb48a965b861792866de13a3e604a0b60e15290c2e82247f807139fc0ed5e9243bf7de256ee1ff915db2777e5fdc95941e7e6d6bdf06f7e4c7a4ba578826fee121ebaf523bf62f9c4addc3f702bb64fdc4add37cbf60254ef357bf98f5e5fa2e33b44d9dbbca607f7b184cbaf0865319ec75cf1a2d61a3e7ebbda429e6c461d12661edd0934173e71a80b978f9e792eb1d17f131171ad636dadbacc44c48b4a485ac65c044ffc0da8ba9f4457612ed4fe1702edf33e81f0799f40f9da73e03e72df1faffe94c1482a5132da8fee256c047f5df8b9d8291607eba52312d167c32742a44fa51949d0cd56fe88f1d178106a53aa435aa9c3888b8ae6540017be06cc7e8ef3cb1948854bcfccbc04bcb4ccdf4bc198d6948b7cb8b499bc96c396aef91519fce9cc1bc8864f9fc9430918699b9a6d2c1e075962a2108dcc8f444bcbf4fc4dc0b46606a59b18173cc7efbc7bd6633f59a17ae83153a62465caa80f12385e8b5c257dd5b57089e4c37f778e33d189b381bbbc5ab2ae233dae6fa374712a436e393ac1e83a9eb466d81309ae8ac9337d3bd0d4d10b2a0296115144f64d16cb660644d85d21a6e81dd73d43d93f150df29041aa1e627379cf5e754aec427e3e3233a8c6f3dd1468dd1b1402c59985cba7769b1bbc5e8ae508f803616330f61c154320c43ab225ac0f1f4dbbf31d974bf50bf0d944acc8e785d26aa9f7305a138a381de0db004ba205a0f4ae109d667765907df4ab3c7f6670d7bd30868d45de268a89872f020f84a44748dd8c14b78aafa10b7f63742bfd79f418580aca6ba8d9e1c35e81f9786f60f9b87f207cd99b81b2f60920b1fd565891969162b15b2d0a713432166344cd34c7d2669562c96e87b949bd7db70c700684bd0892f0fee1409f64ba6bb8a864c5d0118a331ebbbcf9612a91642dd50101c5b1cd28bb81bcac17144578518d8b969293c21aca14a30405888d237ab663aead73bf8d58f276a5b094210c00325224dea9711d224ffc173be91ac5350ba8912497aa0a08ba67b391689607a59d0ce09ca7311483104805ff6c43262555f5612a29c28cd706ed82d0838b8d3143683187396bab84bbc67958ad7c33edbda36f0514ccc0815fca01c23f8dc34a5ad65f7fa47b106c00c2ad4e439a7280c21d112f376291ebded2f424eb9ff59de95875bd112bae8ebd1f5dfa1a60f4793dd158f0d073003797c5f3f9107e906818829d858b861eec541a4bde4096017a4fc1278894ff69d3703e1124c4dca299483c9da0197729118c644811ec86e6011e1c7040f4bb63b3671b1d787b9a7510fe2652d331531c379bf21000cdd9d1db28250f9f9145b5b113b84deef33b228a1acef556e6bc90b25c8e43ee1ebc7e6e6bbe9c0229fd3d53e3a430944133d3db13cc320d57fbcf1a0bb8aef54391b0f15c22888f9ea6325ce62a729ec10015b1ca11c9eaeeae06e7bee7734286609e14ad5a3de6e4bdc1df88f649504ef0f5c4d09378e1e9ae83312378b590c440a2eb448b6c59f78863d8498a49d524bcf0010a2f33caa0107d008685170bb41123aa5528cfaea05f2bbfabae20d334b5383fd16e083d45165ddd6f803c16bd6c3d53359295a2d28fe0330951973fbd34aa1a3f6ef38c6832f024d4f58e89d457c84a59c888119ad7f0daa61d00653b4fbf125105b57ebf7bb31df22b2fb78413cf4646240956f5b4053b0db4ac71cf73b002bc53a066a44786f6fe7449d6b540686e5a5e9a524b0c6165d6cd096bfcbb3ba0741d9680c4a7ace9b36b27e657ad153f938b91ef67825cbe6ab35b33843b35f095474f36fb01f71c80991fa1280f8c29ae2eed675f7a1594f89128caf956437acf4c9747d1f04882d4b1b80a2ceb0dfb1aef6fb2dc8d0a3b83b43226efd17d089c1bd509a3f3811c1a6287c90729c919e52c70469aae1b1fe2272ff5a99c990403acf888534b98bb77b7fd41b78207901e1daa1c40a7626ac0a577605e1c97faad55d3e6070c58971231c2f7129f90ddab99041ce6838ace1d1184625198b39dfda1a3b99ba238e22c955553c181731171008a04f04e119a96838ebbc5775ef7a0603b4e77f942791c349d39a40725a24f04c24bcb71100ffd3f12ed0fd7c2c81d067612f8deb609b0a02b622ac00c0c41e89f2c24b1339b80aab3ebef0728acd0d2001496607117dc1af3169a82ef6855069bffecbe343ca357e42f6e67c7d530be91600a07097738f1a9f8366401e6b275f0b821f7aa963e334c17769acf15f1956a8858a9a59b88d5cb4de7c3587938f141f224cdce9b74af9616382cc9c474c3195809ebed026bb7bc288875d1ede22d38b8dacc2ea22afcd41049ba481d21cd5f78ce747c7f52a3a2bcdaddc431874563880c9dea24c3e26aa30635dfbbae4409b3a3623ad85cacc67c50efbe5b53394d5e2ee5657303f1a63138b42ef96e23287535581bba2031dd6da1aa4ef0c392ec0419720742f8e7bcb83932bf44031a9adf854a0233ada29741237513044079cf57c4ed64c54c715d407a15e5df7cc8aa2d095ffc179ec89232e4676143b149ef95c8c7690a4d96bb7653d22638f251784a82031ac64de309870a1aadca7715c6d08dd9149656666f911d6ea5797254d7e09ca4e42cc06f8f2c7fd16b41256cc83e6b061c3a32cb18672a03fb6270a399c16961c290f9663075479bdd085e4ae4e8b5b9bece79356851100af15f2cbaaf2b22ede8363f3c694ff90b50fe01113f20c5d7d533fe2b34de4f9c2fc6ffafe90caabd6e14a0a9e21621ee8e412876d0205a5f08b3c1503cc0e6c8c2ec7b21439f3bb76a9307fb29962d568fcaa62e5ceb213752128db8f08617672f2e6b611aba5a8117929b29c4e221ab961955a5ab5573bfd85707aa2f3d2456a4f5bc3b339e635b1ecb9659ef7918eb3f433afda8618cb2863e7c6bbd8ab00ec6c872bfa8fdb6a2c080e54ea6e85205d985ec1c9357f9243ccf5d44bc4f76ae5ec105de6b5c6755439503da06d4e018c642fbe8ff4a01e51d9a7257c5f9513161f14db06220ff2700ba79638b79f94e8fbf93c7f40336ec03250c805186d2b7000e2ea3bdce212f7b62e75f6e1cadb07c3f081055188770a3e4184792104373b3ed9d8bf29b470642f906aa1ca5663d243aab6a7595120f64ad3948233a0dbbffe4fe0113ebd5bc15077d02710c6825005766a4736d52552d36d42b28291c67d87094b75250e8348ac8f9c097f2df4b4bf8b3913703c690063dc30e05262b38a8c8e509f9a5bcc3564c602cc6b716b3cfc514fc14def7fa5e88d9b54006e23ecf6b1d1aff5aa3124c600b8d8f04405e804a4f5b6d48782203c71e4586d4e6d918914ee85ae4ebf8055b77503508b9a882884d4b6d7374d7855cacc466d8e9870fccf9c5aa448065c6be111b0cd1794c6a24250b733211c6f13097faa82f80c5af1148a2798ba68c5306a499a0b21f0a2b27a57cf0a710faea3c1b80feddd30e35cf578ce3bbd65259e8cad500c5abfc9778a17a13a42f7c585d604ed90f90d4eae984b4eeae203ccc311db5dabac23002f09d9107ee00b55e970d0f5045a001fac0cb8e3858421a044e6e3e74129f0b61f399ab5111f90c619506db60f0a817b773cbf8d1c6a5b911c00277e6f060b9094c10daee1094da49ba720703588cf4287ed98871355d107cea98c7d08a3b6f7759d22dd37e2fede5b743cfba0279a28ce011837cb613f1508f772b512070a1204296a7a4bf7d7bef820f542508d4b81a3ecd889b1683150db21acc9fdd9da27e7996ace889cf53db1ef5ca81f0d3444590368c4e55ad80e0e0ea07e7821a7c19320b5f1587ff30ab65a8ef3c6de16a9a28b1c29e54f5bfcd416182a9872cf8c357d576ed7b2ac6df2dc0d0de8b3c4f210a364ba228a930c1e15f9eb0f2794fcd7ca04dd18233450950816e264b00c11e4bd4968d642cb07aed65e40428e064f56e837ee9fd771f5a290ac60339c15483eaba07ff1fcf5086c2d869389de6d1109cab91320259a656c779bd44578b6a5270c0252402417a09f11f92feb332ab5b0ce41702793a821834c005897f8a3ac910c732ee8bb83bbc11e337eb283eb68a545a5acf564ee81c30b9814b4393c7f1f42b92b1aae051f68b92f05bade67fd03772ba04da39161f20ac485e2741a6eb662c656674de8fb870f3177be5bf3d05a58a2b7bcf6adfd0e68c09af7ce2f434fd0e1de2c0d7986c0ec10bfe2167715a22d105838581b45d905bdbffb2e6b83fd7e21e3d3dc7a37316b07b96f6a52a97c2902c54d761fba7d469895419a6dff325f389cfba99f283b1d8e8a6f043c90c1720e46501cc2061556a7bfd0fc10f2201a3adf61cd4a22613375c0bd9edb91b43cf31c957d846c8ae94ffb33872f0166868d3688c3f3f600b6b318fad37ce44f1a7c3f44ae35efe3cf3e5a870df26f82a33efc6c43ea76daf5992d037ef7888929c3b5c093e331b1606a5055ff086c31f18db4ef3cb52a0c01143fed9bec24eebf3397c0e70ffe5a69651527f8da29f62aa5e3aca3118c6dcf1b5282572e803b9521f133991f50d6a722e6bf6d11aeadfdcfed91a08b7919d9cdf6e2d1864284d3659eeabbe8579af0c3b5755949f1bc6a0d87d73f0c87db81a424a1cf930f70bd63dc8ef28bbcda3688bfa89a402a0d8ea427019ccca1eccb363982c85c0e0bc860f62828098b0cbf4f331a4eaaca4f7873da88a91656800cbe13385e1355c216d14b4943144e9b58588a8bec9ef4956b987bb32993a88ab2136765a33b640c0d79c83a90d492ef15921f98041286d0861c366159c5b5c8833583759a9332a84a811b33e73c4e2df0ae642faa630acd0c7e958c8af50630a124b5e7b368a32f092cde54f92c8ee4d28101c3056b42076600d3c2cce2773b64496a81fb9da134a8760cf6491c2e58873c59b4129350b4071af2fed246d2daa2f6181574bfc0ff7f1142efc5b724a8cdb1570d59d1945bcce29320efdf72362f8c2e65c350143d3a94e30a99fadaebaa063d9891c257fd224df199fad84c69d1d5d28f1338b7b74eaeb22835ac450916e79920a575962984bb787dea851beb14ef91787530e2124b80069895ec5813144e8031edcda6d079ee2c08cb21cc567a8dbce85841c4e1c14e5c55d6a2e665d9971ceb813c3ca80810439b3d2cb32c04eeb178e05850c7ecfdb16ddb0de12233c1d3b6a672f3da6b9f85ca0ff6c3d585b77d8383c9f2979734134b69810a82fd56318f6611016d1c8a254bdfb881d6e645b5f27a508f8335fa4312ebd0b10f006cae197399b63f4d4d473daf33078079eae88faadb09e131649841a72e710beb5631215e49109e4b950d8dc265702c10c605097147a4723907ddd382d32c0241bcd41680f16c0d40031a27b00017dce30d47ce4e19e404c47cd3eedc36b01190a842d451198b5cf0ac98d38576aded60f2e5336ccb7d8409b980abcc93954ea4cf9b85e0b730d979d466be4dfaf815a46b1b15530b371ea89b5112c03b7119362b97195edddc85498de28efd1df982d41f0a4a276fde5700ca12c8e04ae4158967ec901b51c0cc71d4a00a28f8ca5f4837f707fbec2677621a49c7193e7e82138c334071467e6e01d64ae9d75e05a21ac368704c4cb7e3b5c82866b31d1b59f51cf38c7797f7d2b1020b6b1f1bbf724f90ece68bb3820d72d768cfe23f678e6ef44584dadee70db57daf091c7617feb89b620c16d62c112ace64ca8229258baf08fa0b8d42c3bd2ca5c8386e650581e0392c8ec8946eaf5e4511eec43e75b7ba4d35d5b51946535e5b24d556b6b96ac7af22e10d5bdb411a6be82b02a190ab6818569d6e856a6cfdd49445a92142b5d91ac1c784c7dd782a5387a127222b2c3d6419b50fdd194cec3e28b7eb0822ba2e58ec24c396378b2111bfb14c1441586339d81e62d345112909bab4a3a2d6199398a02fbe96a021b06a19b586030d35e13a2d53719f2279be411a9ed6f194b18785331efebff641a1e9807ed048d706fb6a872ac599456d36636b79dfcaf2aa1a347d3fe1443fc367085a46e3c8f6cb3b4cce759b84e72aaae717d976bfa6d91222fa1ef15e082975a6f8edb86e393c8e73673a2aa709f4673e139234ea89445ff0361554b2c19ed541102754d357050919a2c96642181cf232b8584e1a7e00d9743f988b303d4c32d4f58fd56a9d8ce71d7c1abf0d0dd062a830c4c4ed4e2d206ba0ff01be59a435678438749aabf66c4adc4c7a0829f9311784bb2c5b74c2bab2c695fed485dd3e95484fd2f8592f6129be018f10439f887c00dec54fd60c466db54668f8ab49038f730133a06518357cf8bb244a029d0c71bee47616326ccf3638e69910ca26f611ecc4fbe2f860f417ce25fcd957500a88f7c0d9b9f33699d4a682a87246102b38dc2751eccfb97c3c6476a8b574558352b9d0552455f737fcde86bac3e033e2359fefc1f5086a69a58aa0a7dd35832a542470ec48f1e30bb7712a27ea5e6aff8da1477c172ed36b2aa56946b626d4db0d72e8d8d02675d89468ea1e4107ee04b2b48d3131088678e4b9ff7f4a24df743d721326b123be88d03af2409ce5893860ad19273b2dcbbbcf604febc2ec7da8e37f9dcc373b74838d4c9300aceb52b5d06f1c06ce037aa11a3a5f03994a2f7bcc666a3ebaba460b13ffc3627f4173e7e8e410e24fddec08840d76a6783ecb3e9b84846309fee8deac0f29a551e8cd701bf80c535bb245da9c37e0186dfac97f46576632b61f27ff1c029eeda02ecc3bde8833e54023f4090a5854c3e70cd0e852eac314b1372eca691da9a526145c9f81c8db05a5648a371634f4e48421ceaca9f6f14fae61b49a8ce850ae82519f0903219c46484176878ce1862a8c54264a8dc9f6882d4cac75a605eded217270f3204f0616d43f9a535c2a35ffdeb06325d99fc27f413bb7fc08c8942f5f638e8c10fdfa6d7db69d2d63d2db4f4363307545428d4e9ed52af54f6ce0eefb178028226cdb148b82617d429301c62e82925a5009decbb659f9baaf4564034e0269fc6153fcc1cba1d8df5b73cb8a3526a748d9b0bdf0d34fa08baf499591ec06afc7315078e7c704966bf68b24d338625c516707c1c10ee00ee53f8bea74dec2b3051b71af3bf5fbd3029de8b325d3a1a905a91e8e30857d7fc91a07ed3b93df014dc5693c01821a4457320bf98f497d54cd968619d9fa9da69ab1466acffe349fc0fd06cd924ffaf3e70d37c41d736bcc2fab1077fcb87a00d32c203bf9445b5534b8b55539114b0d1c33b28fe8a360656421ea6708941c16567c29656c3196ba48f7a790c6f653ffab314dc060ddca0f9ddfe21ecdb6fe8b2f34062a1b968d147412a5a1e56d20d62084b7cd5658a815e57da2ac98651abbaaf3cda28733757e7218327a7f5a3c7d899b7cda16d118b8d115fd6ab4ab16a565e77ef58ad8f075710b0a56f1ca6aebcaf9b6fae818c2419d623774b11a540c7b0c14bf65a6ec795e11db2a92fac45638243d275aa9cdf08d73f1064d65b379b96fe07436f2746b996d2558d92c0d227953597d7f795462080ab5b0f9ec25714dd78a5aefeba926c6bc69167d3e08a37ea4f391cbd0c289c9482dcfc14c2d30b01d2fdefb0ac0f0e1cf6a62194a18a701c67989c237718527f04a24f7183ebdb5622c26de56159136e46233c89173192273ce187b7a470f91b5bb6b9998c6fdb5c2a45df090ce8f00c3ec1fbd4a9a793ce03cbbbcf2646f592e7abf53605253c03b48e2dfa7aeed1c4d41c48e6e630d85c240847ee5b494151c5f890de68cc0eac02831c0b10c18907ff85841a8a135f9ba11b288ce4efa8bf21e59945011a2b1f2840c665e57c5c0e39dbecab6f83e4b15c998938fa258f3c58c15c3fe7cc866f15ec2a7d9e8867b2bdaacde3df0356e2ebb1f3566b06f09049dbf1b70fcc6621150b45ce5430e72aa4865f983a2b651e44e0b6256b6163dee82fb7f9f209a153e6c6f3da4a3fb2180499f16d06ebcf46ca3e22f48cb55009fceb71531f69321e16ef488e391fb1ab25187cea0102b210040b0008338b3bd21676b0e087eff853d6782b9c3a409c2c31e75633f3793a1b27313bc3bc9ba55d4a2a77ae6de14dce1431163fc8ad5dbfd80c13afd5d099e183b006dde18595d5fe76bd5f95839007347dce40c344b68bf5017b498e05d0a9ca12ef2d9846a584cd01467069602a58f7a4344161b7834771ade7d88f1b9ed4da17d18359f372138449661f9b00d0fc38c7fbbaf640bd452ba108ab9c03da29bdc199b0948b27bae66bdbf57422f2bdcc3cf49d3097dc22d9b63b52bbaea12de982deeb5e4d8249f8efd8ceaa0c3c331d8c140375f9f2d8a77312a16c2e2f5fed6973959cdba3af12c8806879c60eb48e62da19fc235dc1ec6658ec5729cd861c0fbba24e9cabdd22700c35d37a70bdf3a5eb14e86ac99ed917abc64dcb702634dad6d399c102f679545d01c4158201a7c5668ea0313d0119334fd40288d0c2d04f0cea8ec3be20ec47b1fe52f24b32375a76f35677e098177a07e7f0c15e140a3f433feee0d499d90636f7600d2eddde88ecdcad0a7496b9074cc9db3ae1e93b93296156deec6b84a05c4455aa4442dde786e0cf7e786e237a4ea50dd336d5f12ec6149979c13884ff5d06c9be2793f5881a3db1ead922f9ffa927aaf4cf991fa967e47e793e59046f3cb8126344f4b49a207819f24c22fd20eddd91b08d10cbbfad41a303c0fb1cffa042080dd695abea0494b797a81a17257642c345a23a3d5456ea397e421aa52b0093b4084d2f50a768f4e098815b2d1f7352bc0c63521d96495f9ed85e7c745d344ff6e8b57608dcda2085ce3ff8a4887a8e965de08baf63fa43b26caaf756c8ed65f3e2a5987bdcbc182b8e30f22a6485045f5c053a5dfdb202bdabc1dcdc5bd08b560677ba9a16fb2ec8c0580530b35518e0d86738063c0f9295be4fa22dd1c37c2865544a78b68737749e9d91b31f88233cc6d01449abadd2844fd61ba766f6ab2d27ebb80fece464c217685e40058f26bf30c58b2661d8bf0af79c97847312871af60bf66858d871e97e91a58aa30a4630c0a9c9922f7392fb0406cee5a8ee0779c979292c43190f76dfe4300078880d9e919f0ca442894ae1b8cf8175e2138bb14e924f23003ebeb6241187668609f5dc3896e2471c9befc22c364e3eb42baf12290e8a278f4a361ee4a33b22c13e7359b403b86788fbadd77359b543e71016747c2f5924d5f49a4ad9c359f215224a4f769459d1e450f160f5d6b1c98e9b329119e6666aca50f97c70b6e3f0ae34403e9903ae19b73dd20d9f33e3010f6889fc0100a000337d3520c938e84da9e96f691f822871545579fb568870e46a0e22c4b09ed9300a2f306f20067690308210225e91a129b21d50907286a65a1dfdc72a2703efb878cb1db84e2890542f351e6599fdd29a7ccc48e6092382a9336305f27f6ad61b506018639f00b94e954a2c1f66534db00bbb8a58bc2215a63c88d948c7156f0163604a2fcff4f6d8b50de003d52f6fc39295df57a74bf58520398b9a1a5349419fcb95955065a20e52bd9fb6a07d588d57a9f95e1f158133f455bfef17d0b56b8c86ae87065cdc58a375096104e1831160faabe49f35f7c3aff101fb7bd99c00d5da3e8d22b5511b0866bd2e37b7049355e2da1dca094bd47b5a2d261ed022cc07afaafc28690d6e9ce83a06037dd040b65fae30d4811109b3df4e838cfd2f3258ffa372788368276a0f83689b92be2dfac89fa8bdc17a0ede8ec82f7617151910f1b6fb922ebf0c58210a5fbb223c00c096b588b85f7de9f0ebf2a6025473db2c6cf4e67279ae8b158ea9225e9458ec29d2cfa39cf238e4546f5c41ebbe4546229e7dacc458eba7eeb537a38589c678c295706a4ffb38b8132103db2bc7e61e5078e2c690e1a9b1ef52cfb0b02b021a56e9b4ba175f6cee7a7ce6917b6a837753dab882eb2b592456daf936146256a9971eb5db8a027409b3655638ca03d278625e01fa50dd15b0c52b2e517daee45b41e1a9044f8962847576b1494376d34677648ad5e71126d9845933d5f5b66b93219ee8f70ed378defafa03435761df162a879efc10a631ffaeeb94f60c18edbb21a734ae999aff685e0b46516fc3b97aea4090356ac331a92fccdb81927514befdd065e4dd72f3c595f3ee5c7c4f9758f7b27a07da69699266089ec776a74474d03ecc9082ae76cb6a82e092726ebd8d1af1a4a3708c17b1d45b203ca240ceb1a43e82a5b3c0799a5782b64b1f7a8e2581544c54b2e5cc75b41370919b51a6bc978b6d09cf74c22cb0a7b038bb83d8bcfd3bef34274d0c151290ec3c34c3386f425951efedba6059020f2f67e405cd196849362127f01a48738c9d085125890dab09ab8fc7202762ac04f3036552a8fd72e180666c2a250ee43c36f09037d2331e35645e685256ae8a931305fd95f6766ad4cb4ce3931624817f8064b3051e2fb4f7063b8893d9151bb262f571548dc1095576ef046959046b65cf920cd9b94c52f12cdd17f32d5a36d411fae44b37a6f0cbb0adca464b01c6d3e6497e721c303b0274d6c88afd479689f4298f97542c737e18b1fdcdbf5d45337d4e66d86b2a8543d5b136e4c1f0f1a3ae4dea3f785e549a8a34b98c37c2fc71f6c0f7607564447b6039bdf161b6cb0f3947360e905ee75b9878166510c11e62143a97fa82a5a856b3c813a98518a66e74fd4c8470fb077f20f911656a67a2800074a2b2fb36700157915094cabd7659f6948e693559b332540d96d42c321d5192f424fcabfe30bf98dbab7cec3a1f8b958e6e4e5fc9bd56982c9503a4c4a6bb0091bf641cd1fd5d3ebaaac7761b7bd089fe4e1932e484a5cb3abad7525d952b80c4d6564d7aa7628414af4a3a60af06a6b34466341029f2a46f7e6934852a1f829ab9bfd945d0770a7bd6043b49c9c254a6244db2edda2bafb9c65f1df78c48bafd617241af459da140a6140065cccec2433143d3a2093ccc99ed4471208e32588c164be4ff7bc26919321012e9a0ad727d04bc56d68773c5b1c51d55ab9c2e5ebf28e949699f7ee19d57a50fab0c909e8f5bee029dc7220a7b36ace9aa16cad86f01bdff76dfe0632628ebffac2c8357e3c55e8df2833f4350d3d0e03bbe9b1dacbc5316f2c7fbd9a13eb23106e6a014c92716b7216c49f9a72735c349ecddfa48d040eb7e80f689cf82ea8a485cd614ea13695a4c9a5b2948809b86498948b0cef84052c54f64094c68ebe1bb13741d34045c0af4ec470efc412820c7c0c83174d7d8c0c4165f1929604885aba28f114c4f49e1307ef1c060766ca18781ebd8eca3e0567bb5d81584108b481c7412802d94130ae375e8f433516144e5f2c705a1e85a18da888bf853a289e228bd21cfe636bf370a1f93dae9e28efc5c95b669f186c23814901296e85cca54a8c5d2b520fb6af7594e26c12e24fbcb89012e85cd238e9962ecaeb0cd8145068e407080270236eec533578304b3db07441971cf520c5e320e07a079f1815299032350e09e19d560d2c810769688821e449b5e71c3ebf9273985213f361b37a05f8014de5e096be1ead760896e06102a63416ad5723127033051b66f6b8250e1403f6692a1781eaa19d49601c145534c907971407a56dc0fd3ea91c750d85d08d2a67299fb0f2fcb29d0805fa22029bcb87e2f5a40af45865d6b8327ca189e3797aa7bdfb6bdbdb2b28c685ae5404ff687a81e45bb7edc7aafac0e02488a629843d2c84ad16a67e44ccd5729693afda6349deab8cce3912ec6c93a151642605f71624838170f68a507eed6ec2be2579cbe515c848db1774de28159fa3d96722a0174062485b39a11dd528e5406031a00c7995b305c15a90398185725ec3b672018a318a33829ff87f44c1e80ea253a47d5ec54d494b19045f9b0a9104eb50610fa060e43000e60a0aa639cd11164e56322b80e7ad882eb54fc8d2c9524cc1037c886e546b4b76cb2f7de52262903e20975095509d435c37abb1567d84c4dbcb1119db78b66d45b47ff8997636826868786684606cfcb1221423596f4aa24d2ab52c94d08578c4e8d908c46e8d6ab12c80c57af4a2032bc7562b8cd229b48d6ab12c88b7716ddc659019cfa78e485531f690670ea23921d9cfa5853e1d4c79f15a73eda504e7d547272eaa157afca15cee2d4433e7a55cee0ac9a5e952b477931d1ab92008ee2a35314e6c30f04d8b49cf8984a10130e392474eaa19e5e9503701d9c7aa848af4a01780e4e3de4e3c2a9878ce0e0d443b316a71e3ad283530fd17870ea21240770eaa1da75eaa11fd0a9876c20a71e52f2bd7a55b6f01b7cf4aaacc16da861c184caa98b60bd2a47a72efad1ab32e4d44536bd2a454e5de444af4a14a72e8af5aa4c1105e95559f2ead44538bd2a496e9dba6848afca91f7f4aa0c80a79cbaa848af4a00380d4e5de4d3ab127b76ea2223bd2a657077ea28aeca92b12d053875d1ec443cc9258f3f711456f10027b14a031c84ef106eb1877778377cc501312b4e8018156789411520e645cc5dc965011c15c3124300d201317e7ac08a102ace1262b532402e51beb2c3692584102b9f1182ca25cb2b80aff28e8f2597ab2f8685e5a818142a972afc14833af98c9002e412488cb308b18a7102e41de38a003e2384954b941b40452e4fbe83af3840c5492184205508b122848a159f11a2924b204238e900211cc0c252e10558f1176e62000d1c4a93eb90777c346684f840030134ae0a0d532e7d7092060e08b80ca0e121dee13d9006986ae41921a50e9e43def195d75db820ddf4610eee22ef18c71a3e2384cca50e1ee61d1e19b6dc45def1f9904b171f8dd7c1491a24994b150f6990a1cf0869e512080dff1a2e68380e79c7e80207d25b2ab90cfdddc4801c72a98323a0c67550def1d5c801a452c35443c5e4334274c825901a9e03036e0d073140871c54dc079323c0416c65e41921a54ba9f21bf28e4fc6f519212d610fb9b420e80619aa5cc2f09b778c32543d800b00c9f06f0870469e1152b694367c37f0904b908379477880ef865cdee02c6cf01921a05c1ec073711679c70723972c3e193c1cc0413240a05c5eff64803e9f11e2924b20329c87192c64b82aef1859a87c46c8017209721e6e2e3f3f80830b68f11e66dcf0cde8c1f33bc33a38e3823e23a425974066780f0bb86186dbb0801b6cf019215e2eafb7e412f41ebcda78f1bce3fb5c52d5be78f68754de31be00e1e2e51ddee7d273fbe28d77780fe446566246488d91678494304a1a3ce71d5f2a5794ee140db94c79ce3bc61834d85c8abc1f1ce5c51d88bce37b4111b97db1b65fb2123342ac73c085fc904b202f9e63f88ba3c4c8ee334244b9b42eca3bbc07622304e37b2031525f0c97d14331bc5c86bce61de16725aacf0881914b2031dcc5462a97405ede8ae134e41de32b3123244583cf081973e9f918ca65f590b7541f10d0fa961e7838c00e0678510016bcc25978065f61ec04c032b80e7800396001d09602dc05c68e0396c16fc02d6cc035744b01ce02635761193c8503400306804c6d2920cf085991515c9da2336494994e51cf18672036dcb10c3632caabaaa80b8163780c7ef11a3886d3c02f3e03c7c8225b555197815fb2e85655d455e0145fc1254761929ff0c855708a9b70c9494cf2108ffce2140771c94198e41f1eb98753b288864b5984a4495954c3a32cfac1e0a3e04e8a2486a0e445d823c2ab0935f810ae4d24d1a3851f71f701286c55789e2e0cf929fb13a7e2cb94fd4916cd82e861cade04cfa72f11e7f8dcabb9e4f1f56df596f6f00ffd9fe7d4f65743db25f7edbdcd71c47733bccfe17dd73975eafa3010f36dd6d1df798edab9e8d2b968d62bd14b8444547b2afa792ab23d1529792aba3d152d798ae27aea31f06ca9b0f0c0d8ae9f5f8e333c4a81c727cc14754f0a4ffdabc253075de1a9835978ea37c9530f7117c65908e2391bcf271101fcb97373fb12e4b24123c8584e9f2360f0184402b0eda97321d773987e02f01c822c0a35ae5610b85b30b803814d6b8a2e34c6d9a8c7671b67f7e78e134878db033edb1056b431beb88e66bd3875235ef0a7a455d439d1a5f3670b43f9d9423f779e20c1b7042c043a451d934918fdcb7166f27327063bf8cee5587b5aa453f371748a7a7b39ce9e12d129aa7a629c2b682e82acf9394306463c80e81fae409bf9cee01aa9d719341751bda52dfe3a455bf3db299ed6d2ee5aad13d55a8eeb3a0fc4759de77d1fc8fb402078bf100482f786a178c350144d4c4e42d1c4e4e4640c89404b6eb31e9e1a921e1e9393710c857abe5dc423aab16f47a94e8cec68549b8eaacdb7d3ee5aade5c6302412a1a08c4628a31189542a914aa594149234a590a4c9a4a2625251399d50a8151556858ada54453da1502b15aba83e54d8faa7f6ed3d33233a3da471baa66dfa47bb96dc6635243d3c326a532dada13ee8ab7ad76cdc74cc998de9f3b4bb566bb9ef4339ce79861956ac00c01712a1a08c46245229c5a6a4d4a629df0c9f4975dab55acb719de5bacef3be0f047a1f080482f7862278c350144d4c44939393710c8544286348244241198d482552292585244d269553c59714565ca2de7ac9454a252b2efdfb51e46cd15efdabaaf691e3c1387d060d8cf467fb379b56290362b1582c168b8137e00d7803de8037e00d7803dec4c01bf006bc016fc01bf006bc898137e00d7803de8037e04d0cbc016fc01bf006bc898137e00d7803dec4c01bf006bc898137e00d7833839c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c5a33add9c22016038162311db1586c04c562b11809148bc562b1184803d28034200d4803d28034204d0ca40169401a9006a40169409a184803d28034200d4803d2c4401a9006a40169409a184803d28034204d0ca40169409a184803d2803443ee5c5156d9b7534aa34bbebdd25bdbdaaf195b43d2a9a6b45a698ce7db3959773edfee15c179fa3408c88240b529e833a1b1f6efd5a04a614cd89b8e4eb5116008b2843e2deed03b74aa594e4e42648b50be6f1f599225916a53d2673259a62d7661f503431319fc6b5ad76cb7eaaaaf582c168bc56246b8b0a56a4e23672c6485559b1aab3855a7cabc8eb395858585858585659a6e68128ea291e7538bc562b1582c66044b55b5b3b0b0b0b0b0749c6d1b0b0b0b0b0bcb0c894a6467bbb50b0683c16030582c168bc56231236c365bc71aa7755ad63ded339db3b1582c168b51236cb6692ba584a61387f3e98c32b2c77d28ad292d168bc562b198ede67ad534ccd6582c168bc5622ad3455f30180c0683c128ad6bd7ae5da90e95d11e9f59a5d586c16030188c521aa5b5cf1517b654cd69e4cca7a77d605555610d8335ac619f6b7c91350e4bd9b8a0b1faa23e3eeee3b0ef1b47d23d9582c910ae003296edd33e2cd5a48673fa6c9f1673f9952349baa7522edabf9a91f45a5ff5555fb345cd48bdac20139b67db5ed96c3b5573e722aa4ca40b98c100063080280c200a03f84b94fc3c8ba946f1a938a8a341ad7d396fa0968340d8875655a7b8a5532ddfcbdeaafde166a8012ce7aa6ef13ca998c894126984224275385dcbb839992b4a51c69aad18cc54f512e51f8dc190af354c9cb00cca57fcde3a5504900cb8680931e2411d0fe612878b2fc202f5815ce0e4f3db55e00d9c5c8647ebe49762d04f58893bc51af9e41483b9fc665521e1fa56e153ac315b2abca555e00df070c96c6a5e331a48c2d55282476b565597edd6732be95aa782e0d874aa3ac11de914ca535f8863148e2ae64ea0309e3a1ffd73f1e70e90214fc31faf2976fe3a55fd1b691e519ac79183951ccc053529705ef573478a99bfb78654fc21c5c35ceef0e1abb24c53157ae8a6d049017c384572b6a8aceff34ca4898934095dc5452a617b7def15c51b7a99fbd1a96a1ab91fccd53a8563873f7139f1156c958c271779c8d20681201067411cc8ddaca55fd35baf4abba4573e775ea0f3a5ada13a6567e40aee0c2f36b987b91f30446e721325ed26263ea78967138c63a7ae7f9dba8ee21d3e91de39fd0f9f48ff3cc52f883d6f9ce216971cac08ea1ec5d704e39ca58e899a572d91465df6c1789d3a57ebd44fa76aad5717b4487a35ff5e1a7a9e8bb8e4f162155d72d031d0e7f2e98573d07fe032e83cbe716921f0d42da7e253fc01c79794c7538ce3415807f72a39078a83e78d5baa8839d87c132e477f9dc41470e93c88cf53b2edd4f5967a71c83bafec82bc887ac8b91f7db95a65d923486c3fcd9aad198864fcb903048a15aeaac1d81f18cbeec5d19a9b3561ac413ad3208671eecc6a606f6736341bdb0f988f0dce8f1e234572f8b96304f67666e445001fea9304d9cf9d24fc783bb3b499929f467eeecc6cfede3bc520a8b75b5c04ed5eb11f40e7bcb1f529be80cee1d8e16d2ea95b80be3d714ab38ba6d4bbbb9d529a3b1f5d0d89ce6ad2ded2b40b3a1d924497d414469077d48fd0a9537cf11ea498eae092470eefef758a3d0771c9e3af4ff176b15e953cdec4ab8937169d24ba9874af93e7f33ff1bae879d71b71ffb0361df5980b76386161f9ea637d919dced7da35c1e59c399d7ae283498bac9d309e4a1df6a9830e76275ca33082041e576b36eb55d9b98e9cf06cf557fbe95cdd8ce9e7ce4d0812200291828267028567eb723a95d57ddf38ea54d66cc97a9ef3f9cab915432fbb5786d12f82e8773e78789a55651d13bd9a3c30225f3b27beec6aba980b66e4cb0ec786c70444beec8888a0909bad5a89af53e4f0fceef57af97344389d4ed98cd8997f7518f8f8d2d66c5c1a1cac7e1f07cb96837df5d0047676a3043b7bc010b33a963fc8ef94184b3f7762208497000802b4719cb98bef5e9575f251393a816284595855d5940b1716c6c2e9d85988096369399d69ad7d1ce173b2939f3b3740f8c6613bd1c56622389d5e81bc3a4784939d7ca0b30ece085bd9350f1b61216c888cc8d7caf3b5baa55da8b68e89affb31764e905d90af6eeb5e5710bda54bfaa187966667ed628f74aad22f2d0ebbe9933f775c70fbb283c9fc1121ee7a101969fb0a64b589917a8d8d0d1262768684d7dbd96c278adbcf9d26fcc8f0730707b1ef7c744cf8ec80c1e66bf8b9a3e4c7effcd0f91c7eeef898c15f319cf305f52bbad03c2ba62d17aa9f8e27ebd43d9575ca54a7eaf47c4975bebb1b548bc05876b0ee657117992daa1761aaaa1f51824e65b510640d6a622cedccceec114beb1f8c348399faacf684672b05054b744f7ced58f0b5bd3398c9f0054abe1c53d56d6c3a30366d517c4f3a3096dd8bdafb042cb6a25ed3fde86c7e06f7d3254e718f9e963aecb783b653e0834e71393e08ba3551c158d21f1d2249f091849910909377d54fdecefddc590214fe9eb03dd22afaa7ce7676b930facf5c97eb7dbc5e292818bb9aaf4efab90303207cd9c19800d5d4a44630ce9d286adfbd7a3577a2a07df5ce4777b05e4d289a80f365f703a5693569efce5d0fb13b09c158764f17fbf2fbb27b752f9bb1b4b323cd9a2d25463b73b13d95d541be213d3d2a5fcf38842dfcfcc53dd3a9db8f87dbf5d539255fddfaf78d638d1782b115f9b27b69e05f5fe90f0babc15852d80907c6b27bbd664f736975ac2823db46136e0c9f2b4ab206cf169017afa10b9dc1d116178163f49ee318fd4782a2bd86dfa7e3885e752ec2bb3cdeceae3e738903c77bde2eb4c431faea461401e3f3fa032e47477ccb7c7b2dc33782d62f1fd129eaaecab22deaf4e5a3240a27787c907c0e3f797c92b04290cfe1a70fa268c19bc8de3a184eb101307eba319188e1d3674b067e71509cd199be82bc475ff4a5c385716dac548451337d513166fa8b0c9fa2cb1803cbc47019a3f1e98f28f858f29e8ff3c5fcb23ad9a89106237d9057f720384fd9e0829f23ef79f7caf3cf5558f81875d4f772c9e341773175e814f53b45172033dc1b69e30ce4890291f75c86128c9f7b5e86b65e959fedc323ad533625970ba7f843978282b11c675df72095ca12c2634624dccce80623f7ca9cab53498c4278c9b940aee29e83a05317029f1461f4308b1e23e89f877e3bd1253411818841bae72d1d06e139984f41780e3a988b203d9f7f6938bb907702bfb0e681a0e7215765cdd49ad5e43962439f9a6e21d64ce81a42119e3591803379a2b0e4a98fb5caa22deae0e785aef0a757b60b9ceb240e41c3639c8a3712e03159745515f529fe90f2e1ad5332f0c9860c8ff1982c13ca701eadd0c67561444286d3007919da6e5f7eb60f9b68e0d38d1797e132321231fcc567ab8a30ea976a239d3fbfc87bde44def3c90385ece7d30f7f352f7f3f9df240a28b97c7154b183d2fbfda53cf41f1c5ba5c74e2606540f1a53ee997e6a86358f29e5ff1a55d9fa35200741ddfd3d9a233704517d26f18b6188497e94c7dce951808c517fba487e20cfba005fa41bfb3f6ac26a1b7f4cc39ea83b9e6d4bf9f5e91997a4bfdb0c941a28be732f06c5d8e4eae9ae4a8ff7d3fbdf232f5afd62b9353bf474cf8e4cdc0272f7fb6d6e5c238d2f238eb14480ba34a9e9d1a6776b6f0b2155dbc5c5667d9a153d45964e0d99a628c762ffbd029ea140aae2740a1e64d3f79a060f3b7862ff87463ba0c8cbff84b9691e1ae1a8e840c9f346af80b9621be1c61c51ad365f80b9e3ec51c15a0efb9e813182f0cd0f3bc2982e0479bc038faa54de9cce1fd9739d76c4155b808c6d0365f784e57bc241fb5e2e5f8a8152fbf47f95c71946bbeb04f4729660b1a5eafd9c038cee60bfad447da7c311f94338ed1b70341c518ed3527a053d453374a5d9da2de2e03cf560cfafa6ce548fd84cb4f052ebf154c814685b6a75e03cbd056100e126f4c877190e8425f9dba978626d87ae3b9d2d1b9d4d16fe236077eaf77b7eed6ddfe3a47fb6eb7a453b75bcdc9f2645d873d57a7ae9356e838d9e572e72a39d95fef9298dd2dbb1eabb25be26fadb14a7a557eafbf6e5db15e8138d7ed756beb15e837253b3259b508b3087fef3dd2aaf05e07815e8b74a5dd5b8ffcf55a5359745655d76f6a5633ab21afe75dda61da32e1117ed55ba7ae8a9b7ce49dc955708841f83271c46c71ab7bde61afebbca5bdaeebaa573bafbd7a1ef7dd95b39c17cece4f5f78f2eaedbafebefed6fced317958f1eb5d4d65a9f02b835f10fc55f1b2a3f9ebdd6beea0e2d73bb1730ed73fa14e2e439619f9e984698c70fb74b8b431f293db38b98a2c23a4f3539639a9c832271ff9143b1f6120ba47058fbcc365e736547c9465684bc5a7d88091af6419938f6c8c5c25cbb4ac05149e3a93c7a0dc74e3e42a1e7372998a4abe4ec52e9f688c46f9762c55757d94e9adaabe6f1c79cc28cfaae2f1e42539eeebb8cffaf5efbb9d8b038557bca69a59f7faeb25e876de5f982c4f26c564d5db6cbee8fcf6b83549c62bfcbd9c775d2e71fd02e8f3594559cc6567f35dec2f28971dcedf29abb77bb95c6fb3c59db7ce853fd97c61cad6551b8ac9b23da6eafa85fdbd65e87a8b34ba26c6d29375aeeee5c92a8be4d7bd9eca2af94df14bfaf54bf2185326954a1d47a29c68a8b8c967eba2fc9efc7abf2a6bb670627f6dfedefe3a0aa7aaeafa09dffbcdb48ac9cafebac9cfd8bd72e7ea14d7b9fefa1549b884adabaaaea760fbaaaacb712452aeb7aa2a7da52fc5634899cb271b24273d86443a8fe77cfcc8f1faf54aa1d3d9f5d62567dfa23cd7694f6559bf4e99305f80fcbaf77ddea389cdbd367ffd88f982fe4519e2ce663396ef1bc77a7daeb8b988afe637706d1fa6fc18dbc80915c26bf39e37e43f8fddaf837c78e2742c7c31f93203af4485cf721c59403e5515d6aa0c6566c44f183f3fd14ba45725787b9a61f4d3cfafcd75a2ca6e4fe8d7e71a09fd1e6916a6dd20433ef41b3ab51f78eb55795de0925ed523b82a8bf390cb614801dad227518c36bdeae995173a4864d6ab93e7f3ad83453ef4c20fb7c53e1fde283e328e5515fa27c54872153f7909ea7c38a1eb98c0efb3279b61f45b5aeb95fdd0e94fafa60f72663ef486a16ac2e9831b14f9d027aa55733af061cd101484f6f3403ea5f7a39c349d5e959e4d09c27a7a557a3370a257b6073cf8f2061942e44bd497d766075f5e1e1d7c798b7ce84a60a3bf36ac6210158672ceb9ec5a7193a3dc744d2610068e3c7410a7431056593c5a38311ead12b4f930250566f292db28f9a834ca32253795f0adc1604f559938376519dae27c8a0d30399965ae4bc7e45c96b9afaa0add94410fe0ccead7a6b29038dd28b9c94dd96572ce4bf9e4f9c8678bcb27cf65382f39796d2c4d864b1c9e55654d1d08c692d6746cb67ad5abde09c64df11853a635d2634c993439e731a6cc79947e3985bc2918e5241e39874b6ec22b291c9e2d139e2dd38ac9e42ba69e1ba4737e83f352464288e7dc0dd24b1909ce494f36c2dc8d91735986476be4531ca2e4a88c44e9468a8f32129e8eabc0489c6ea05c85abc8ae15e71c954f9ecf3a5b9c8335e0abc66cade45455719c8ceafbf0c9cbb6a753a197a3836a9585722fbf5a65d1da07f27954aee17278753a155e22b5caba9f976d15c612e4f3a1735e823a34170ce4d3abf6d041467a15f2d041b35e7d1e3aa85367e820925e9d78e860ad57a2877e5dd7153a089b200c84519088e7cdf9b1aecd08d401492b803a0fbac6dc658e0463496b21fdd0e915fa061ff60b3eec147c18d22f90241841f0a1121f4e317ce81c4eafcaafbcb50f6d8fb5d99bab57a387ce05e9d5fcf07a987a714e805e3049f0a1cf301cd2aad0c15c86dfe8c8873e1b64915020cc16d7414e80749a355ba14d38fa1234e44307bd2a2bf4af56591e0e08f6e1f77de3f8d5428ef2e9978ae209d3960a26611f2beb54e8a2144eaee254a4413aa9f8098378c4d466b608439f7bf8d381c5f33ceebdafdde21c3d7cd769d75da70f8af0e32f870313765c5364f101d95723fec0e33dbfa0108553b0200557eb7e1da66f7b7cecec439f2b703c1f9a64f2f0fa5a2757e1a10c1eba87a92e7cc8d23a7949bdf0a153dbdce1e4a17ba2e71dae8ff215b7b1e2be8272cf322447a1f01124fcc53c5cda2039ca6da05c862c23c473d4a5a10c5906e5249fa247c2467c36274c721b27276519da3af9141b4072155946c54936487eca321f8c88aa0afd82210ae3c0841d576bc5553c66c5556ea0fce43128879d4e361f3a15bd7ca241721e1f335ba4d8c3e0f11e04aa2a74d2f78de3c9c6c9491e43cab3aa56b0a73c2fbdebbc4ca3a0001561fc305d4aecdf47f296beb4d679387af949e1c32f0ad32d3467f8e17ce8f917c5645d1b1a4c96955515ce7ce179e852b091c2ce843042f1e5a0bf73cfcb2506592840a090e7b3a2642cca65bfc031741b2bab64fd2e5bd96c117a690c63496d680d4f15f5d0670551f732c83f584d65a964db53bf2626cb463155a1874e23bf9a0fbd8a34acac8991d6a8cdc66facb2523cf48b5359a4877e752acbe4a1df5af218955c4a49213d4625932a6ef218954c5b236f69cf5659271a2757f1d90addf3a9ac150fdd9b5516cac3d97a7de8fad2bb7de8f97ce82bd84555858ec2a1935b1869e8a1b7f44905cf2640c9bd3e74939f91da3a15fa9869ad53620cc6ee82b00b8b0f8c5ec229d8f65455e824b63e55157a8b41d0eff2c986c794b2955555ca97f291649e55c5e3a7d8e5938d929b3ca6944dcee3659d87df68ca5f389af06c9178b652f06c81469cca5a51829219a4e004add0bdd041b9243d9c0fbd8467cbfbd12beaa17b3695c579e8de0ce60bd043ff40206f7c824998f67c5fcfd7f3f57ce8d466bee80f7d84675539498ea18f180261187a480663381b3df4abc2a2c7387a19a2e20cdae3c75c4428e3a0af1f5df41216c6314f80be5e7493d02f0d472c8a6ee2271d78d1cb8af3a15b59afca6b736d7a15ba099e51fc0c7dae087311d726f2f8da8718e0b45a160cb02f08ec1b6b0a6cb7189870512d0c3816ac9e52c1085010c212a030021068307978e26f3f96f3c175d6c5d279634052fbb9a1091513d814025116ef33c244cd3a575920afde81b8cf8660b60081b607e08dc108bb614d28561a04e9aa6812c4e4a40ef9467b32b60e7e6c350515566b2af7aaf55679463a929f72f179d43d95baa190b3d45bcaef43c0bd683e9a36bbf9d8bedadabc2107aa213888c989d00f8e890f89c18ab2801284d18d147edf17be0ef6d5827a42d3a79ae6acd699059621ac487101d902169d2a7ac3122a1f3f132dddf5e85c5d4d070bbd7b7da2e7b4541aa2847b562a954a34daa7542a95724bc94f59a67b80b8ed532ae596dcaeaafabeb154caae199a3b97ab26d1b4ced52e5765d158cc1573c55c256fe9db7560ed51930835ad26d152982ceb6ada121fd61eb0fe82ab93b8fa0a2e99cb659370b9504251180aad2b74b95caeced5e36ad9abb61026cb2e6113d2b0aece25eb5c6118ba27f37a3c9f914d4921499369346a9b76f5ab6bc27681ae9e0fc1dcb95cd6f5b2355515765d4a4ab6aeaa0a498f49c9b4d0044af191c7a4e491f37850768d5ca0119e2d20234aa3354a0b3d05cf162d427d6814c65a8ac562a1d32466e8345c82f6783771d14f9cc2e88f0ffdb6e872424d4e4c322641201c692d32998c07297c503f776e60831b28f9b9e384205f763f776e407b1b580f17665f7e3ab3870b3eb3e708b5afc877ceeccb5bdbc9f1b9b7bbe47b8ed0f3feb3c7083ac0f9f651338a9c94526bf2b6ce896344bfe7b849bb5a9372447dd41817e4729883e51fcf39f11cac534d9341862954a8a8adacdc50289fd329c94c45658a97c994a48724a770a5a4d84aa5243412a96734b2d9505092bc44225a2884338eb293939b89898e28fa84a16d766f12d7fc969e3f1fc636ff89b1fc74acfd887cb2afc8e7d3219975aa8f7cadb572d6b9ee1bbbd9a499a86084fd006fe012b006fe804ac01af8d325612c6f6d529e2f3b5b796934247776841a00fcb9b1f982d461f9f2d3f96295555f384bbeb37ddf487a8a45a753ed2b5c7c0dc9b7ce4d8e7c8ecbe0904e3548a4534a6ca2076cb5131170decf6124df5e6db5a02320da18c45ad0ec3d0fe40332d2f557dccfe1f9b762ce2dc611d6f8e85047582b2e413ebe9d06c17d0cc6f2d66ebdaade1ebe7a5541abf22ef90e5d7feb54d79abf259d6ad8f78f6fe770f8eaba1a58e00dd45083df8a3bafa186bc811abce22ed780a7e5bcd68059b060c159ffde3211be3ad5a18f6a84b1ec6c35dfd97c3a25ed15b6a4884faf4ab0e78df46aeee460e61b2ce2d3ab76d0083540e823ec992fa6ac6736a457f65b47e643fb6cb54a031901838038df926f50cf37a8c87707ebd50a6f0ad8c701ec5bfcdcc9a9fdbd53e47229237b4eb6c2c8632faf4eaf561091f5c7d32b0078fbd7d3abcf9b062fc9007839be97f2f26375b6aa02bd808c2aa7e19de8a2ca363a65fd0a633979defa0c7e3f9bca593a65dddd135d5479874ed929fb51a7ac77b64ee5f20b402ec74c43b67d3b00f0d829eb2bf0e72bfc7aa2cb8a6e05a676b6b0f964bdb4539c0197539671099af9768c2960df71f9fd7c45606f5f38aaec61a638d2ab0ef2f365c030531ca151da1431f8f92a30cc1453f414487ad530f8f92b182609925aad29e9553ff1f351182689929bbd15e955c77efe09c32429e2c3f92431d2ab06f2f355304c122349665d92d91433bdea9b9f6fc23053cc4cf1f2a678f1f4aa5ff0f3490c93842749cf97a46749afda899f9f8261922c99c2059ac2f5d3ab76c1cf2f6198243f36d096e448afba053f9f8461921c4942bb49683cbd6a16fcfc1186b1f1f4843db69f5eb5cdcf47c130b61f9b4db4d992ccf4aa57f0f3451826c94c92974992d7915eb50a7e7e08c3d88ed04e68417ad529f8f92386b105c1197188f4aa7ffcfc130c6323220bc994f4aa51f0f34d308c4dc94d741bd2ab3ec1cf17318c6d880e8a4e915e75133f3fc430b6223e231f23bd6ad8cfbf18c666c43623d9664b7ad526f8f92086b12d49e22a2571cd16f3616c487ad525f8f9200c6343d2a9f930b6f929620efa30b6da6c317fe7c7cc97dceddbb959edaebbee2cecbbad576c6bad95c3258ef0ad7b5e19d61cb5ba3ad5bda46f9da2b59716f6ed60fc743096f4655f5d61eddf14e3adb24224ad6aefdbb777adb2c25955b5777b88249c551628f6e9d0999f5fbeb56f57b1814a985f66d163a4afff8880908ce5add57a1576eaa7572d368f54ffa0823b57945f5b4b81a87ebf26a2aa2cbd5f78efe8eb5568a62a1195654a912a0c44658932115555fd9bb59088a7dea3758a7190dfd31b85d3af08d39609beaab0405f5355bdc42b224cab2288e854f522e689885e9177ceae4b4141afec1351554b4c161055555d0850d472d0040f1095453d4055d5457082afb4055f7b6ca61ced68f74d93108c8d48a766e79fd76aad15a9779f6747f2bba977d4dab0a2bec7a37197a33ed7b9877354aeec8c237cce3bef44cff33c8f8edee875d87221c5f371d05085b19c3517367cfb8a92bbd67aa72cb5dee11c740c1407f9341b613111200812419d88caa23d96f8ea302f7c75ee4592280f455114a98fe348ce17e08b9e30d6bf2291e8027291e872fd86444f18db4b3208961a60e1436fdcdffdecb92df9904ff187ee4f9c773e7a4b37a6214c7d3001ab2eda0401415ca6afcfa7eae0a253d5a718f2854477528e76b4e33ecf6407e36bbeb05fbd7ffa200ad8cfc912b934c5f347228944ea3a8ee3388efb966882054fccca516badb51ded388afb4598b6ba135ffa29a594524aa9b5d65afa596badfd2acd768a52f24578b65444da63b63889945a1bb5e170cd6bb6b0d65aeb9ff86aa73dea126313e4cb2ae9c197b906ef34209f1859f0953641977821e954575aa7e8973c7e7eb293fedb57f3d76fca8fb1fb39a1c2759499b19b5fc4f31e23efcd78feced95776bbaef3f177e55e7babaa7bf113c6eade915e959e8e27f3782acdab5df76c9e92ebde12afc8a5adebb47a3a342297a35596b579e6eb2db5f364b3c5edbadb75efd5abee7ab7c483cdaf7e3d1f7f91fcf57047ebd4f58a6fbd7d55759d93621cb9c9557a76a3dcc8d1c87aaa19467ff5bc735def66ae77381d91eb9d8f2b437543fe76357fbd7a9d27eb55af4acaf3b75725cbac5725eda1f5aae46494091ecff58afcf58cfcf590fcf57efe8e33d2bacd2e94937e72f2922427e37a389fca42f1ebdcacb24a7e6595c5a335fbcbe3f2b8a5d2ada6aaae934e721b2447216519124a9621759c0d7bafaa22ad935986b6ac4fb101a4a764198ed6dd48b7598623b3e7f2009d51af2271ba4172d2c9ec22dd3a299f3a47f1d9b2f9d4b98c7592a7c850b085d51b26593cabca929deb55bdaeebba130c4f56f2183277ae148f21730ae9d663c8dc393944555d9fc97a7c6e099f3c05a3b8c5242731ca4b964491a4a348db8d14b77ec33a292321a4737b23c5491909eb293ec58ed650b0bd81e236cbf068a1f8148720f9292341ba5172948c04a53912a71b275ff195ec42b9f5533e753eeb6c59e76297d3f9cbe1fc45e55455595ba7ae5f2ba3f2ba6ccbf1e4b7e66fe7bafd297379d6a9eb1d715596e7e572cc1d07aedbebdc0df975eebabdf5cac4afdb25bd3a099aada8740b988b8a1a764ca99119010010004316003040180e0985e3799a24414e3e14800e72a04c78541e89d320096214a48c318600000000000000000080015b049a5d9d7360daa965c8ea576640ea22245c40e470a03bb8c2e688cc52e4a0fc1b88872d4ad33f0a406acb0d2572684e64491a2a02321139cc30fec420fb98e15f83ff4c795c057e23103934e95f3eed4a7341af77c57559cfe55d061739a8f8080816ca0a1a4725492f01a5f46e47d8ea173950b6f828b0eb61a265eb00b6ae76369183ac0d70c60ef7b42772f06d77732872582f5d0cb669f97d714980065442a8989991fbd4ae57a0fae5142bd3c5d871a19704a11691432e431e7896b5beb192b56b4c4bd9f2dc09d2a8837d7cac6949836ec6035f0ace022e1cfd238acdc6b42c964312391c7ccf1ab1d0dab424da8ddf630137bc69b95f6cf2a84826e579c71639ccc50194c893b7219b2b50665aca80ca41a9c63828701ad7b4d460af605cc90a06e22160690bba000186c861a4feca48e98ec9cd52b8ec58df1ce89908fc9171c4b49497c8413d1b0f7ddc3342e75de2f1760087af4868fc322d25969dbf83d08ba5c321a4a3bb405ac884cb13cac430e56867886dfda73157b5cdee18308f4134372c76c9e165779e02003b7298fb715085914305472c726809204c76cfca215d71bb01e16f7e021a9a89460388e4309ba58961569d05622c0c74eb8593f46c65e3262e0b441c9033c538247317a368da2aba0134383d2d1f0afccf8e018c019651f40487be080dc60c3724cd24c9a40d3d2872dcb90ade7af80a053730a00b0da79e0e169148d9ce043c86c6719770e15e8a6dc513de6a7df2568eec7e0f6f2ce30a2763cd2afa151ac089636bd0616f76597610077124f235e8894ca5489856d5ba59a167d1e1d1ce4247f66ead209c32268faf9d3504649f5329b940c456190a804412ba1ea450b1947161946bf3aede76bdad3341f963abb3a0c0d28236a4638fb90746a3a65f95b0cad1d342d0d86a3b54f6cc1781a4c0ce7568106a8a63c509f1542b61edcb7f7da61538d92fbebfe6c095ff0c865dabbaf7e07a3ae51a2b265621ed35985d6937894059a8dc07912d8fb60d4e7401f73443bd974a611c8dc1a0c3c3002b26090d0692e1bc2dc29e99590eb00a0d51e30f46d4b48343c46003652b84b7f9dd11a9df90730865e34c25479773f8a904589d5c3630ea0ef7720d4bf24cb1823192cd1c516a454e5b0d10725ba539153813385555ed1464ab4df2a7b7825d72cf242f33b17520be940f4b4a8eb68e1f92c8179689bb324bb3d38e5604d4095419e01fa3c23d9075dded0865779cb2a58d74a4b3367412f7d0c7f37dd8da1a8c7574a2560731bd81aee8502e202ad6b92b6f586aabca8cd56a58cc92954e83b75c90de454062951eb32ff18bb7bcaf1789a6e854cfb02ebaf2917052e4a272ea572e3413b880c321a5182d7fdeb16896ff2a9ab5e7750d72a9564a8a545f647fbd25a04b3d437eacfb46fa4495ae792d6ccb50a4c3abb0f15662c46bfe9bcfaf3976f6cb473c211e64b75d87d06964ad24a4a4ff29892047914906fa8057bdd946f84acd1fbb7624e9d738b09dbdeedc041c46b1e209ef5d8f0bcd5c4c44b5ce61bb8b61507f9c53a1e8099393e0b4994bc0260580be7ba6a322dd220b33a207bcd8c984d8143d0f32c5d518f8533d9fb2af5b4c2b81f844f1ccf9e644c5f11a10951bfe207434b4efb31f2fc24af866064920a1982a18dea40ff73b1090d7f98e514b2d97b4e91025a386003bf7043c932c1748d004cd50e77b964bde1f7e570d9773e3e7be8d3ec97b8c3661560837d14c2c9709f052a81d1f2bd17fd0581a59b9b4a9497c3ad5b7db98a0a2cf1cd4b88aece1df898d9fda37785257a7eb4104f1e0e73b4447b1a374e6008098e54c88288c074dba8701a1961c4bd46a38e5757879ee46858286658ff800d832f714e6540edc941c17a016ef40ab72e4559357f783ec8250561149417126829ac1a17e7bf085912c1a6defb9160317e6a95d2ffb290dbeeebb320dd55ec32efacba380d9ac8e42e72192c03f80ba405c30eeb701c492965dab27cbfd71d39ac147eebdf448144190f38a84034e1efe620ddc651233b922b31fd1ba97c9d6c94c9269b4e9c6047cd8bd40a62d194d30e462571bdd31e55aeca774899873cff69bf1b552f40f9e09c774db45f9ca1433eb0fb9754f7f5a81b3cdddd12166d8bcf86416698cbeba85df57e1c5779239bf608a72b2102e1e3e537a342d7389e09baac468c9cddae1c3649baf925cc468ae6a3e285c1c13267d3e157a2286b4e57ce12472aebd5afbb3544138e1d106b61a50a7c05c06fa65f4c6060ef4951e51062a6ef03d9953e67cc92fb675b42f04fd74ed700dffdd5e5836f942165e8278ff01f4421eeb166008031b47580dcc42f47e268328e69c36b2c3f60358455a03cc9cead0271b86b45b4a3713e6f6efedc3c97d400493d726e2b605fd7ee7ad9b4da120d633b8a3cc09718a6763bcfc1d30aa784a43b234950e33cf3e88c73ff94b40cdf82291fc4af1db543d161a9df68833681c4b8ad12d72af0b001ea7c37cee3ed57abda2ab2c763cdb42316f019465aec0df45f08207debdf67ea8c18f6a95798cdeab90baed0693283a63e96b0bf521ca9ef14b43b900dd7badb093ae68542ace786a6c7db8584caa68002fd759504ba75977c692685c209342cacc50cc1cf0b8de70e87287a527a1000d74bd946c5f7dee83912f31a40af45932f2c257d3cb70c0c8423258d410340d290e3522f7422c2e0b1b1c54a10058b9df2a04fd37cb0aeb7357776f8ffdac216cf9a6a0ab310c1a45e72abaec1392a5906cdaba6730c08cc02f85e20a3ef245224a7311aa117ed888f885db5d7c3daa0869f3ecc55db5c4b0ab8b105d472fa711315db1a537f98e8295fd04775405f0f3e623b73722251068b4b8ef40efcfaefb494c538ca7e36984da74861029a69139a5a89d6181815e98b4983980920d6c5cc31abe47deb3a175251b00552b784325f76a920f0ec0d31cd44cd94cd2882e0b79ff69cb08fac6aaec0aa34c3daf7125b896c9c89f226e6041d937ddfbaea4bfe464c739ee144d2ca9c14031d63e895a4d18f6a4ba4841d21a4c07b05c4d7ee0d41b2342309c7424320088df1aa53725565aabc9ff853b079131240036a95b0f745af7b482b4b12e769d7fa671606c057fd5b49be9bb85a8fe29d799fc9c48aae701013b8ee7dc9f2f7fb1c149b49e1e3a6d654442ad05f04322161590cd036033fa060cf46358aef217b301e5a7a8e07103eb5ff8bdc950e50e508955432670067b3c8b83f5405b3201234b384def470db073ccbc545be44f0b7e40d3c2299534b167a719ed49f5126f7ba90483440f523d924e08a76c143f10199a121582ec1c1d117a10c28569c837a130fc8ac8418b5a68c6892d359827771093d703dabf6a1596c2f5f9e99bfb38a6555e0655f9ac0707f4870eeb799c12ed2a2af6c45706637f428488658d93a2c06064606e26d710c0ef6ff161fa125fc8f8da5b98c42e95ef0111161ed7030260a9d7024f04394976a485dcfbf07741fe066003604e480a589fd2143cf1ae7ca540b53b589977d596a7d847fb492873413cb4594701ccae9f2dcef036aa99e2c4c4cb34164f5261049fb604bd400e52c78beab85a4d9cfa82adc45a508fb658faa8f7d5d5f7c51cadbd18015d2ebb6583822c1ee93b8412bba96a1fe8dc32f91126e86d085e7b1da7dcaa2cdb454931183676df74e888b465dd13bd754852ba27a22b4980e139143acc76a01c0062f48cf701194857733434c6c35bb2300c472319ed5837349d9835fc87297fabd0fa46958c00e0a9a38961e5d2f74782a709db07e0e7e7746c8c253804e9852da2cae3a47917e9e98f76cd41c0674831e21098768d739afa113bd755b8ce48a87a4a239888e430709f6007122127038a0d57720c31a75e4952cf2cf8233bce0d5223020223cdf75af39c594503400150d4d8d82e6aac33f40fd1d18b2ef0e45ff1927fe7d072019a0bbdc09312d99901c528f80aa9e580134e02ef6cc13b69b9e128e1a5c61803e89cd1baed158db7fd35b016fd8c691df6b85f7535e2481842c4e5d2489b8d1edd84177865960a1742279a33f265b7117e5e2c17616a20ed15803b9c18fb9e571ff60161f448fbb63a20ccae22c27acdc14a4747085ab14c5e5c9f2d4756cc2ef6ebe8c52b9458e0c673037080c3d2385d0a41c012d84c150003e1bacde6e028fb6a854110f19279cc8269ed762c8ea015422ed838385b1ab5dc188458f64b1a80ffa03b95261b11e406dbec9983539f0bf9b734efccb3e0142466f24540615bc72b193d1ebf44d1fb46ca2dc465dd8be3e8d9372e794216545aeae92e1a2d9df8bb83becd94f793012637330d505a1c61b3b04d9d3e396f19e5e0d2785acc1e24e062c9525b2a52aba5e1e40387010b3998c531b91a11685867dcbc7b5bd4dd2bd30ae9210911b08f1509118cd7f310b23b2b3a8093584c365dc8f6aa99d8801109c91f4400e8f13b3a15eaed2a4afd1cf011c12532d5613b9b926a8414c31d4cc9e6d515d8e0b27c57cccaedf25a789d9e150cd8b1150e11e4489722b2fd5e9c68fc4aa96b969239741638a7ce346cf1eab4a1d5c7132ca53a9aac8841040c0b758c081260f52ebf2443c3fea6498605b9f6310ab2ea1afac52aa3c8978096606902ec391d3480174aee22adb33e00ba038b2192ec504b48076e832ad161c86f990eee47b8cadb1174d2bb64531133a7aa7923b2de2eb8f2e21fa4a0d0204700df559139e9c7f4c009fa0ba7833452121d7bf91e71ab373c749247e0fdb60e30fbf26a27207efa1d833b34d0d5eb966ef9630c7d1ac63463568fc032edd9d6aeb36526432e3222ba05ee2e7725cb8a146ba59b95069d59c7af16234dffac8721d8bcee53484a571995b77bdf1dcf6d3f7790e3559ad874c1e2a8de4e392cca88add3099e8f821977d4a4584197dde3f281dbfa6fd1084b37012ee3259a80a39cf9aa4ef0118c56fb667bc7d117a86c029216adae6109b3db3822f378244fd18f74d4b230d14135a047908673643636f245b391cedc978f08d1aced4c3c02d64f11d904159f4ac0a96df6b27df01ceb1a63324fcf7ebd6266ab681423e492dc262462a8e5581511dc011067cf23bb45e24ee14af4ac2b9d08929d381afc84253ec5097df274ac6d0effc1f333a8bef8050feff13e4202c3da22eea714b450ef3b9ab9e102300a7752c96261b5d106e2218b24fce3afbec5089f4ce4e1e4cdde5d5b28a65dffc000349afe75050cf75b5a0ffd6be82fedbdb71f3b59e7dff52eb81b7e68a1b8c681cbb4955ff87500988d22b62465e86f181f9fab07a1ddb11f29c638189fbf18c1deb32f5647f39739c0162f86c28f1b6ce293bc44e7a47a4b4b1ed9263162951ca43f72f958b16a4656dd2478e0ad7403205f340ef02d46bec61938adce12806ed0a515b7d8d122a356ec5f216af70bf2435a5726a8ef35b678654a32eee2769e44b42089e925ea1ddd205530aa0897b08c0629189176b1702956efbda3a35aaa06c142c2b37a0db9f1e287fa99fa47dca7af046ee83c71dcb0265cc3e31f12f41804280aad5f8ea5ebd0a6047f5a7fcb9470ac856edce06e76f55a007857b22ebc42b916ce957250143d972f9b44fdba161ad5b3f25758fe1c3c0740cdbb349cc22ceadd8959084cbd44171db368a541be23b8b6fbfdb64ef1de0119c3d6c21dbb360a66b4290b89d36a1c766baf059b9631cfaf942aaa5284574b263a7fb5165aedf4415fa2f7bb166effe6900bddce0a6d3815002595448d0329027591dff98506185b60bed41e56ffbb346f2f7545f176e9b50576d6e4be1b0afab72df887394522dda87a0a9592ff832f18d629d93427bd7cb1c9d00039b5c12b4c06d9d97be30e068df005ebb9e87fac1bac5413131140c5912f986345f47cb61618a8199e4f34e673192ebfdd1054e086085f002ff0b21b4610b2e4bd59bb7ca542815f5547dedc24eba1aa74de7e45375be9d9c1734115a78df185d1db189c63d4f68a9a12dcd8739038fdc3170e9e4ce494c217520fbff20e7f87f25bc01cd9e1372769d309beee37f70135e17ad77f2c6f77471505e7384e82b76b589f5bbf740c7c9005e7f6173a6aaf919c48fba792ee5f005e35b71fc2a5ec16022080adda1d7ef62cede03fff89cd53a4bd7e2cdad97a5c6e19c3b230bc622bc685f4c51f063106525157f9daa1f52c4d399392a9973a32ecb02a6aa2a38a33ff05d66c24b0182114a0be3ed95786bf1040dea86eff2f5c3a634ad0186491020583fd85e4e986dd5989bc9049270c5c64331af2013680fe42e73e42611ca9ae9a2a4ae77f819dff2878fd4fa065691b485504d4cd702d0e52c7ed390d0bc84531f94156f217b4313860940ffc2a9f80890ab28b894e9734ffe4ae37acbeaeb965e0630fdaef20393baf507fcafa0b2983ca08fb173aa920da5cf5aad800b60d8b9e136dd46a38c00a4ae1e076cfe87267a4134217d58cedcdcfaa94c1b0bd4602fe0ec8cdbb55aa3e0ec56a68f02fa8e929679bac41cdb21d5c7a1e1cb43dfd7ea150029deca204c64bdba515289c44f7ced3f5e434e3fe05ade854ed190de78ee7bf90d4a19bf71a1236bc4e01fd2f1cb19084d01d5378fc0da3b10a4693c0b27e63ca561f6aa966102a7033e6a9445596d808886975557bbae02994cdd1f4370f3218180314936b75785873e13c7dc434c1d6362a65a487f8650a6d4dc3fd990b49f4fac84b3236d802bb37459f1200f25c5e8af9cfb9b21b0c3a8acf76f9a617066059431810b90ab5c4dce3bdadb96944dae24af2603f82926fbb55abc6ca2a2d18a7945494a6ee0746b0ffb0ee1d2b9144e8fde5cbb9b034f6d2ee8ca9907d3564871f05c1c97a4d36c149d17b01823ae426692896266abb17544f771a8aee18641c1f1fc3601515599522aff1338db23c1b5194a415b12a53324c503061a05b36f7620f288fe66140215425854ba090ccfba4a321051498c8f039640a5d4c6e20693e045ebbaef379c712ad81672c4fbc164b127c832326220256ccdc6e172503f4466cea4070eed2df5ba89020d51815e322983b161a0c54690cbcaf360fa8dd3b4d56b7bcc1cee0b5c8fee3240d0eaa9037bd2c8b8700074cc2c9425faca0435be6b55189b0e0234d60421ff710ab4acb8af28aee7bbd57a9edbd5e3d4e12884b9524b46c48a3e921205f62e2080402bd58acc51a6f309185c3968948ecbfca5f2ca315836a85b3c56e4a755ae778b41532708f7cd1d7eae0be37f67a8dd8559bf3aee64c17ecba03b30eddb55f9e3324fabe9ddd551336671f77b2ad0fbe0867091eee53834a6d28210398792b597bb92fc13abbea781c6beb9668336186808ab112bf613a8f4479f2b7644644b7f389fdd62deb18ed927e7c8baa8159158726c2dd9367dd8730f3f6b930b3e1ca8bc66b97ec248f4cfc87efe80538f84887ba843ed5fcd671db8af98662090979eeb7a031f42a264ec59543bceeb5f1543ee49609b1cc950b049ec9dec92f41f15e036d879e2a639c7163155ac6ed141aae322bcb6e2cc0caddd4cc1408e00c8c024764993d88d224c073cd4d922b40d393567a18b6fb740072538d831b794aea5dab0e21cd92a66950173f126cff851291228d1c62cb207af1745afcfa9f2909dc7d03aef6250ed55cf05255d70b2520e5bc53fcd52ff2c7569d0ab677aecad383d15d0c61b76c4c80f28106ac3494db3418acde9a2d0f4aae55204b91c58bc000a16e3e3ecdb6d4bd830e7aeb956dbc9a12b555920ed712205ef6fbb5af8f9d31ccc638f4afb069175b2d15283509f8a8b648c190b6d0cfdedba990b0eff062a0d5269f3cb647a1e7c3d892373541871825b5ad9dee7b2ac657583cab4310bcc6a0785a28b2daf3a579e20990c17b9d647a1944fc3bb4ab5f4042d2d32a158f2ef8f6270b1faf1221f6a29aec57182bb883c9e99d2c78f7bb816ba6324ae25e4aa896470735c8b9a27144609ff869cbae99c3c44712ca6f6f761414d52d5f17c82fb9eb3f92bb9be7d83d64a59108f4d193bdb68f4eb50b1838f63272e9c82abf63cc53b2d29d96b7f7697db5f069634f5a9d32fcb9f0f4966891b457827fb08a3e3d8c7eba77bf1a296c51306d35002dd60064b9db42076abe160f3a2c93899ea5dd048a8faadd722d71c75aae9ccea43ef9fa759d60f1994ff4b98e26db4568660a3bea2a13d7f9dc5887669db52b8814a87bb182e52ae9e32a3fa3afdcda5301263f50855d4df725ea655b52a22c46102047581bbbe61c0bf9b7533681e1ee10333a889071e8cc1cd4c73265da65d0b3b8d3c2684dd21170d6b7436e866ab4021cd95d4ebb0b42983afe0fdc3cda86b2e4d80bd92339e8bd730d445f562973ebbffeb8970601c41f6b47e0ee6b6a4b9d86caa5f8a4300b7844c07b9667bb2f40b41d3eebf1f5c07a91cb1e7b0da2a57385acbfe45ef42e2fa2773d8055b77d2da7f66f8b929803af3bddd4157387967cac1cb72e6bc57265ea9d4a263c510e8f6b9e39ef08d683e3ecad6bb9f9533546a696ca4a6c66009bce86cc4325cd50652d4a1d7917b9775621a258e9e3035b3d9b41f1eff1eac8e59e1b3fac2abe44f24c2cd157f3da6872bf9a28ce9bbd3a2aeef14c76dcb602b9768106f48a4ce1a4082dd87a0d38c9a9c1e319d1a4da1f7916b2de7c148669094954c23841a28aaa1e08a5f0400e99108e5f5be10e609232eb9a45f752d0357489095f88c235573a014d9378aaa5e03ce95a1594cf44851d3f03e7212a5f0f34924b65a996bab5a36b7e885f108f994b8f56912401f21b2fbf82e6dc75244da37d824b570410ed09c61e9ed0a70938f04bb11244bcbc8f0d8763a2b1455c749f0ec6f2039e8dabb9c4571f5838f6c81f76eda7554c8e77590cfff03a9675edc626c50643a7f2757f40b236b47519efda6e5f71940b3713de45f768350079c3dee873033ef8e5c6d795150370f3fa383a46d48aa85ffb1abaa60063643646e6fc0bbb8002ec5563fd10bf9432589a5d617794ecb1b4a3d2fef235bb44325c62b5b97d70e20598e58d3afa224eae21d14fe107259a58b0a6ba69bf5cebe3a8320fb042f9c45fc40eb0fc7772e0344e847aac50eb872bb43f7fa0210c49200af3589ad2593255f9608689808375a952f0228e53afe85c09b5b2e1897b5802c7cdc04e6623cf42c24120f9b18868872f2ac7654ef57f1a0a761ac247eca3a1376d2fabed75ee02b4516e875931d016b8e1ae268366c1d018a0134a74d3ce714223a6ed06cc37851fe413e8b873e2a1508c7f69933a984ee27b8a935f3551520904afad504c78766c3b7016fa61d6783780c3714cc5fcfdc6a462cb8a5964c32914114cde080f15688b6fb8bc17ee78ba26aee370d17db5512549e7944e72eff57975c48828c3929579dfbb972109b4bedf923d8bd629f21c4c65b067e7dca6885336eec614358dab195ca283ac3af3bbb52d9c7e6fa4a07123ae099b2eb9d43be2029b88cfd071af6cf5811010474091c254c5f1a29cd2a72f0cbfde10072785a7d82b3d0d49ec8c1bc845339d7a5ce8b5f93d032f59cd56f5841d2f4830ce6d44e4ffd82ed38d1c95fe48ddbd48c43317a67adfd2d09b15b4925e583d15f1fa2ec093716e46cc5bcd248b96d0ce1240a1e52430e2d07e5d8f52688989b1cda6e359b87db5a77702a659ed1997fc2cbb187ab2270e9405ff2d0249b14b3fb46e4fae48ec35bcde72c0915973fe041d445ff7622cd2668e9e4d22c0d8f3085fad315231639642c2029aa4f5524ecfe9d44aeddbaa79b51f18c297beb2899c7793f86a63478e2c38b2c59b1c4bc8f5c7d461d05f6ae2be1824644d27a6fd99da07ce7cb4d8ffcdfda3a67d6cebe720c7205b7a524e1b8a7cb6d675b52307a0dddad6a2ab2b0f3a75b1eea29ad2fc1fda85efa08df64bf7d00d357a298f70a828aa63f4812b5049e71d2aa1e3ddb711f945490d148dd320449e394ced3d13adababd1175e6b5a06eef951cb2dcbc8b4714c281a2aa4cd6fff9759f0d70150cd1cc1d537df2118e4f827027e5bf9905f6b106bb106839aa5993fe199031e81a947eb9f1291724d19aef64ae7939d09c444914bc36a519d1e3cf206ccbc38c5ffd59ecacb22e9e0f22e8d4075906bdcc39f5e83454d60a135abf49beb826c37a69530b3ce92007896e2bc1e03d64153bb9a83959c53cce7a3f991cfdb1afd6cacd15566cdd8706e0b9111fcd24bb7e462f83af5856a0ff4ae442e99d3cf20ce9af9d84f55aea62bcffc70d5443b666e90119e001c45009bdec735e5060bd8d45704ca50e1d48d1fd0c4e82806becc19a3a16b42e77e83022229225c95257d9c890d881cf49df2f0326a7108321dd68b94d657d617db33d0bc72b5a3634809c3f93912eefcd23d8e89a1ad3ce31e4a10b26e0800b287c31ac01061206424567653591d9cd781efa8c19026f74bba49bfc732eb18440d4e39fed425ca3cb03d0e68085e2d3d66c2169ae987dd50a868f6ce61d5072e192e5778dcb24dc9a20c0374661ef835c9995e6d9f2f94ac95ca355c125c30a45fe38a6d24ac97585954a11adfeb501a3f40142038a0c0536cf7e24c30a29c85acaaa881a906a7087d3d5e09f6bb610719f1820fd74659e1254b1a4fbfd44e2c602624111fbac31f859549cb4817b14c253af2501f6a36b9dd919c4252fd15155832f7c71852cd62ccf3cc30162ee5a90779210c72592cb052c952a49164748d8f2d83d3e4ca32cd1631c5964518c54093d1f3064b9fcac8fd86c009305ee7b8d8f99b6c64b8811cbc695b88f7a7e4e55049d7d6ed442e13a901a57c842bf556089826a153575b365a745766e43303d7ebaaa79c25f5b51a9b74d3f207645d1916ad2bc6239b84ff9ab6e8b28d53ac2a69f4ac120e93b9ce0f36a72cba72a8960f6ebd18d38e040ce84f6988062982903511f3a68a50dee9727bfb148889b9d3dbd23cca9ab958a759de2003693b2b2d7cbdd73e44aa7a8a5de6134ae400be4d5ae262ecec8572fd5309dccc3a8ed26f7d644108233c89627b22b7fb6d56627ac7d1a6d628d5ade87784de8b2329ea7ff6958751213cdd0fe850566b718567a150e848a787b5dba4f1896c282b71d39c53b4d5113f1bd1c4de45f299e2ce226436af28e25d89bc0808f3737d7fff749a3b48d32449aa3b35fd53d274415a45f711c06fdfdb1264765cb0cae578a1ceb5e885acee25ae12996589f2141cf07688c9279bc8f088d64d447990744864e2978e06b343f95a4d31106d5576f2901962e1b512f80f7580a81b076430824632458ddff412b96700be46cc93244ce228e7036aa898b85d7bd511c3d7940dff76648a224e32736563432a75121b30aeb18ca1061a99dfef4cc42225a805672b5c6afc88a98e90db1abfb253be7e92a5c283822b63e296218adc98738ac1e8d73a82d27b5260832c208c1b3d33e052ba85281ca2ec1965b4c260f6912ae395101dec383e8f064a0d7d22d741002093e888326159a512a29175958d63bdc0871b7352a320f430a0281675377141f9a7e0f36f0b726caf579d8dcac91527ec5c0b8c109be782b70e26f4928e3bd6d9cac375c56381b0982f2e0e7cfec41bea82ee63931d47b75a0a590fe00e0afe5cc25d6bc0143a6928c7b981cbaf5ae53aeeedc5629c7ea1bb51280216eee31703f97ee7abfbccf4271a33b0dc23ca0a3c19093f9ccaa5427eb89834c591f57c2612f16206f31b055dc8abfbe40218d7e30acc0dc8883a649ae836d2619361968f18c9a9be98978e23fa794fcd62f8ca2fc6ba03966c039d406a410755e8332519b1214aaf4d051933f94148c9444d0c31b9f1186c4e9690703061e228144fe1e4fe0b35da6f19e4904a2af2591a7e281e493e54101ddf2d949895a1f4a977a0ab7a4095c919820ce46d9ccc766646e3e8fd0eeffa3b79c01355400c1349e45b060dea5c40081f7933175f06fbaf52cd1ec0f495a499c55e1a47c3ca4acd914b9046690eba1be8df7951b115ef1a25f62ecac5c31f5ccf9febf23c52cb37d243dbfaba51ecfc441b75d3651460c7def57bbc897714e1e1022cf5aef5db6934d35fc85a85a9fed500fffcb6d93a46dee509f307159f2df2250e13898a739ea9f0e39d06f4591418ffe2fdab23ff4ecc50be8d4813a7e86685deefb9194d286ca146181207d41562072ef422038220d4bf9959fcd629bbd27da640eab6550af159ae722d88e8c88a6e52f13485224cacc27fa7f2cf4ccd8251e83241e3b09373822b01e16a26b17b834d7b31ddb058aee7d64a7060978600ed0c6b9b17d5b0a57d857590a64e34b0151275e36ba11958c3ec8238e00e498609046aba68865277068911184efb06ed4a841de5f2bdb3b3974f868532fe46dbf76ae3b6a6b20ca2d88862fe50dba3bea529ed4103ef2234667f4b1f980b8198a945b812a917b9808119718acf6d9531eb9600fa32e007593f4f16db2a9d986fc7c3e200f3ddc7119489204ef05029bd81049f73be21d7732ebdd201280a43acc80e2bb8143205f983af0124c894cf448fb6a3e318356da9e06c5bb4b433d574ef9a3c4eb03939d78a16515514f5ea560d2ceb2aba0e58fbd636f7d2d119a3ac24ce66b05e1e72c1fd9e5cc5882fb916bc528e45d742c4cdbc242af3cf21f4738961a6725aca8f8a1d3108ba2b12a5c771d178df494623427d699502c8ffcfe123a0e6d5a3f7270168406334af00e8b48362d10eaf1342025bdaf4ad0182965f050019f3adff1b69047a548f4ea6acee86104c2404704f9049a0439c87805b60b0bafcffeb29120810bc7309d98283b7d80c06042b077098008527ddfbea4c5c690472522a078cd3dda7ecd201b662c7643e8779836a44e0da6092a1a20f84f4a622d4225acbe21d0f40bf817e47abfbf9514eb8958740cee2dd4d50d43a1b315272598f43aae3573c1bb25e76c354cf76372ec1f0fbd6c9a05d3f690418783e1dfd309114599558411fdf0526f7785d0cf23234168e6a574be13897119d24f604cd7b65a9a419f672b6bc27a16dee3903d2cb0c515a06ea5720c4738ec8dc37ac44d51a2153f1ba59c2ba840c51c2de380aa60c1565293648a25621895507d59bb2cb3641e4c0964051b402758c787ddf4cec1f7fa6f1e51f0e2c7d1b2817ac7f661a6d75dabac36294b4646c8ebb8219f8eb808eae19567572e0f4173c8256bb204dc2ed84dfd52252d76888ba4b5907861fb052029f64f424f1b4d7f468955706a3ff4242777a5f66821b69485933d21f5dca5d58b2b7483460dd1fc5f86a52c76047518429e9af96413dbbf211ed580eeb866ae89406f0f31d22bd01c539b7e590e01fe1dc63eca34c0a085e62dbbf4367bd74088865950bdcb976a2fa7e75d76cb5a15724fb9620f7e6327c074ae0c07e090a245d868afc0b90255b2cd18cadc03aa902ca3ea8a322a7e1821228dcb1ae7cc3f1c1ac9a67d92cb563c027f6aa4cc5f021e79862a405d5edac264256617ab604e3056a8f8dd1f884d6058f675e7a9c78b29fae8bc0873083bd6f6b3a8dc80b6f152b54fe2351ed18a8b562b46680b1efe1dd78b4ca4ecaee83123e6849482a44ee4099fb213363d9b5434f83dff87f4504c3dea402dfd77a1e2e3f887f01485db9fa9ed88239b4cd510ae9781cc6f0dc3127b185b0d0c5dd33054af932829006e5e25479ac69e8d4e0293d0417ecbae32bbcc77b737946c7dec8b2d73c7e1a9a63fcf499a3224763f000449c8d0ee4b9652b9d4a060088eda891cc22e406934eaa4fa7e153a594532b5dee20a78d34869b2d83d02ccc7ffe6cdb2efea67f1a258818151650f1dc1fb009251e3d249f006c11c58427d0b838d877473c26ecacf5b567f265009a1a63bc569a7fee3c753d67afcd141ea26c92779c208480b29f8cd0cd0c32a4d8ae4602b697aaee88791b8c6b89182c515e289c8f7618f1d01af0843ae308a3938deeff9a525bd12b1be8bbacfaafaaa2de2515c65144892329984d71bcc24e42c9fadcbe508b0df1556201554a39b9358e25d3bc8e1e3812ffba300269a5e1fed69a1e3b13ea1032c7191f56b01c2edf4fbdeeb262971f886613e57c701feefb3358bc017731d5291028aa03324e90c92db3512bee23684cc62ba544d618d16e2dd97f4a388d2d3b964deb87bb8f33a10e720414b96f4d29cf841df8aa4c1b00bb64c111d6a8b859c3d85a2ab90e51d1c219489e59fc2c3186bb65a9c158f8a48c6b2d3c9662de1b4b073074a0c683a574aaec62256a103e3cf5b82884c39fca2da98e31b2a5482a5042fcd4e964b00c5d5fff5f06493c63dd6a50907fd6885155950119e5fd1b9352b6c5048be87c428839c9cdf61f44192c97f5c25a22f210e25822535f1601b364c50ccd4468c5bd04cf3de690de04fb45aa7dae102cf7a4577619b2f66b05115f35873ee28bcecb6d79ce334d0c74a932994e599091b738a70f22eb5799b911b1888c5e491582bda8ac1b20924d9498238958538574ccf2d9db02851e372874a28510b3a4fc09c6a66058935b249888142c7086c8e58d34b4f8afcd86fb269718aacb73b325b1d56c51382e60dfa074cf41ef815a10a938f7bb1dffd683ab75fe6a17a1269759f022842d62b02c48ae2c3f99d456cdd66264cbb21521cf7f9cfe21c8a2e204cf91ded7490079f06e934818b94aeb84a41ce563216ace468bef8756ea0f1a82972450db724e7fe8f3bd3cdd637ac1768974f95709e79d74d4eb0cd48c1c00a288a7bd7256a976a598006804534841818f2344262c659c6547b76583783686ddb51eed7a51ee3dc1cc90600aeeb75390eaf2b31852e2ac974b90324884c1dafa40fe99c197cf02639f279cd385cc464d1105a5e243e8048d268973a3053b83f8a9fb40772297685d67e9ba832096bf90f1323c7ed0cf397845d7f78f8b1f03989e02df163ac0df229720cb47e107923bfe3c99c839d2fa55f7f907fb33ee6b88bdab2cf3d572d68f0cfbc5ef23620362e908b8edd0932c9b6426b496f79b5fa400eaf312eab3d270566214d7f6b52c83e3e7126d80b9606c2acd07a962d2eaa745a2acc03e55b950d687d3f33cb08cd29c5e185e76ea8d8f970608f19129d560b115abb7c08d59c51dc006cb146ea5ac17f0da5d2aea5f48a63b5e822a064aa2c177fcbbfe8496ccd87f703d4f9737b20aedafac591a6a33f918be9520ca27c701fdfa779c311db395d779f83298345e757c1ecdd233b6f6389d29322e48c09a33907c1afee14e8ea6c48ba8541deacc7352a11ac5b5c88a7f317733132e4ae14a9721337d698ee144cd4413ea421c946c2703c327d29dc4ee3b7d5e0fcb567861ef620fa5bb51bd5237a982abccc865a7b70b11fc172d0e33b0b671f7068d1e191f6585e23f301dc2305659882ddf94e6711452e34c94fa6202a752ae84717b62a99b1dd2cec46e012f6d6fe813f8a785053050583832dcc1a0f1fd7f467b88ab7a7cd723a1fdadb3c4485899dba24296ab51a600a202fccdc88e897b0ab90e0b6714f09180e2d64da921771c6d34f33e94973d659f620505d85e3eb95344500ca24795e065bdad704a94e0ff6d4ddbe261eae652aa22ceb130f48db9d3ca7fa5c46646ac042956fb74ac845c77d6540c4d4dd218d095d575bc1ca64e66a96413b393c879856a672002d06b9b82b7d888f59d0dbb22496bb91022287e72d7895b0288aa6693a323b8cc04bc9549cb097613103ea7868e2eb06d79a4976da994153b28f7b088c1066d5f39412d70cb003240ce789c31d2f86f649d75d94fcca751ccdb48114414ad5585a8245e01ff33d9a81f24a10a5acc9456aa8b567452507455c33dae8e6d143cf58390471aab68950229fd071571fda748cec3eacaf381fb7bac758c1c01ac44ebf7a9dc6e59a6b12a0c392dea1d959dd1bb44c62e8f1b7e7c62b9f383496ed9adc036b31f291435a683ed4b637025e617592fa342422dca83e17871421f190a4524000da407aa455e6c35bbe4f4237a1d663a0917a6d8a9b8ef473f9cf46f5ebcd30235ad390d0ce5c46cf8812f3cefc069dc6d21e26989679d0d340c9e82882642546f1ba1d3504287dc466706b0d398f8ef198ad23c65d32084513d6dfbb2ed12cdd4912cd3429c6dcab62098c00ecdd09035b0d8b761101394e4c9edc7be8d4afc9c8cdbbc6a7030e32b031f5938e6029c35625b436d164754097dfa4e0bda02c0ea1b649268a5ff6d3b1c6fa0a2a087d98e6bd8591aa0bce84c1b7e2b2d113480faaecd4136ad340d80747713b3d72d84b6b384b43586cc30cd400cc76628779c033208047b1b67c7cfbecd5609de97443231c5414d0bc77dd5db5ab00458f7685e164f77812512a3c8eeeb4e9af874f74784cc528ba66374354ed9324c01e4cf3f55c39681b6791e7908751b18a56d48c3934a8f139f917e2244f2b3c2d3dea8baa18356281d3e1be74a6e9cd1e247ff80089cb3c65ffb518888cddc86ef6a67938c7b64fe316b49b65c55d9add78b9f88837af0241a0103e4d3b603d90b1be80581f6fa36d4d141b52e6b21d9dde5b4a0064a1ba4077d5fd12414d467b360d0218a3e11430895cabd6cfc8c6009e75ade7a5d4a5d2ef16ad84a65529a42d57d382d21021ad8a04df607a6b713ad7f01cd20d466a9644aba964510ea156a8599b925639b257d4e25a049d11cca8f8b17eab94fab16811b32041c91bfa8e6e2cdae3b6fa6e12de8cb09146f69c114fc870b0227c80e55eee6b440564a928ed50856622c733c1f8d3a248d40f4ae34af71832111ed5ff4395b7fb7d434d642d550e8112fea66ca5f784ce41e17353f15fb782731c510cdc93a660368ef4829c5f6351aa39e57bb5a0d90e573e0ec7300e45223603113cc19feb725ebd76b068cfdc894cecf8cdf93e9eec5a80a3ba17a1b2cbe90bcc97ef4c4be770c2a7e1440836925effb34780243f81bb83f7214eb37c44c1dfece586186ccbbe8d02688941726c6ad87ed512ee1bda92a5c2fbb0ce37ba8c3f1ecab701fb76138747283e21127a2b787aba8a0be99b155a3ea4092e218bc62767474794081e34ca4c64f41b5619a6ddf9f02366fda8baabbbdaecff52ac2f9d4dd746fb9c93bd208eb93be52c52d4f3396c7801ffceedbd87c1429ffecf8581a904d20e50f33fdac5b252ad55c21cff23e40f52187e2cafaa58b7cd0cf65f25e6f088e2e3f002e729e821828ebae9c0cfcbae2e27fe2ec157c495cdc88ccc3647d3262034496847a242cedeb80c18b76d3babcb67af5e399838e919796e1a535ca2db3d96122d1a82d448656065426d0dd4bff911651421c7ab4312d4322f62edaa026c73a0b162d2f6336dcf508ceca06aa9b86a87b97d676c4ed5222507ce04a09a7ab98807e9158518d063ab4df296bac6089de5fbce881cbb840cf2ac484ed35bc8acc57831b1a6e7cf431930fdb721654595f7accd9a8e87b8d5f07f4b78051bc6a54a4faa25f5ba9818a66a6487f33d448c88489c8de2de451957f4d03779c6ea96dc7b62d02507dabb00d748912736c892de6bc09ae474634687366a077df51ea2c4885fb6b056acfa04eb35e26b9488b65ed4d84d119cab7dac019883f3d58a6dc0349c3239b29e6209ab14aa3a2dac88ca7b12525a703a20da32b93eb3e59f24aeb6cc26ed99d4d4f68d7cd5c156fa4cad084292c3673a641aadcd249be94f5aa2055aa51918a616d4c41c4717c38c6be9b505e1e8d1dbb9c103bda742f79c7d9317e3c8dacfbc853fb29829be15a4a4ac8a3a0fe7c71a85bdc356086a2f2e8f54348449193c5f6c176b17aabe7bab24601287dff77cd384e39c844f4fbe12a8de35d7c94dbebdb3d0ba3c0678b6653c600d67cb6d493b8c43bc96e34e8cd296446b4901403b57a164ca89dfe2b25ba01620ed5accf93837fa9c39f3bf637122b1ffdd0ab62f37805f1d15a2996fa8328285bbadb38fbd1d5f4042331745f8ac880f3431dd5bfa8d58edc50949b3f398c18a837c9273e61e621618506ec79b72a746f88060cb8154de5f492f27264066a419cbf6d0b5b5913b77855cc56f4c51ddb7dc2986a653ce57ab41cac0cd2a6efd6adccb5f6bdc65d415300dd56b6c80a8bfcc7596a00c52a14a219f67ec348177b3950c31290e16ca03c84d75bc99428c699723a39885ba4110b8685952c26e4490c6e43b2ebcceef1093bc78b0bb74d1af0c8504aad63a27c94d02d267bfe71593fc80470f58ff079abac0e8511c9c42dfd2f1b623f5ed663cc834b38c0fd9167c21ab1b94008b66cb87080c7f1347994547af1e5e47f15a54c2c840480434d881edb3fadfcc35273d19ed8708a4a649c82171988d4439029db952dee70d7ed588732787e450c5789c872ee2c2f7430101aa6ad4648c650c660d7de78e54ad859f31f81e9ee754af6101383ef6c950b6cb48892d718635162e01dc874ecea554c58d86a97d8d082a65f55c6b25f5e4e0b592f997ab34431cbf4fe34c0b86f188f7bbadcf630c63a39b66b1cd30df55d0cece4bd64eacd12c42c5196ffd7a66b17498c790bbfa9d4819e58a7f33040c1eba2f43e00c1ba7134014a179d202a074dcf89498f0fd809513ad10850bae8816841e841dd6fb44450a25b26582a2a85c37d82653a25c212d1528fd0332e2558122ab5f53642940e7a3bca280a0a7aa5d1acec7a0bc1f8af560fb35365170e7cb078c85de32e5119be78fd0aeee2c65573f2db8527d29f1ae0c80e9021b15d634c1ab9d74ed42ef4e74a8f6087e63f02b3d3f328ed21760cdab51557d8c802a55f30c642e9c03a90d1dd959798b0782b2e6383c59abea88cddb63c392db25e6ecae61262b669fb690ce3d660bcf75439db67146b726cbf21a65bd4bb33b0c97ab9299b498859a25edeaf9dce2e9628e696fd5029873d918ece6b8060877651cc35334cd6f319bf888b32072aa7fcd23c2bc6076b108bb8a78cd2309666fe0e9e37f5efaacb49723dcf4940151b200aa924cc31978ba85b54318ec02ba5d2840a34e1935904e924f9a8377178d2d4489aedfc2ae4920b9551882c10c1924a3af5daf2576df2f683363c2763c4d26674f8a24833e6a4d33821121ecda48a74293e73d288728d2a34bc3f789f89790d3e79c1a72c4d1a3673892e6fb7390e98cd2fc151109cfaa2da9c9bdff842be7cca65a628c392a42cb6605399533b1a7a02f7e03be5a2a097fb905c086378d67ce0660ae2adb208aaa10dcc7c64912ac33b5842be6bb5c91ee8ab2d54cae69a200fb5b246a4ee06ac5a9b365a6f6a1bd6d008ac34ad673253264d9ad18814d3cc51f84a86a42a9201f5665ca81985b42350881f497ad872e79273883d097c0706ee4b942000cef7f46c05a3ffbb3c268fa424433913793bf13a1e7b92838de21c171ed231084a12b70479b54ae32e846e1d1782b96dfccf0d69f400ec43c05627405514f095055c250356b88d6a40e00701d87702eec302ec5306d6270794ff071ea64f73d196ee5d1c68722827f0e1a3e47d5df9974d77c8248de0d27a704440ae1075da1bbd96e6a805d63bb4aa42a0761547dbc4248d5c21c24d334dfb3d986850cf14934c3329266b42586a2430a9667fe51ae9a3564bfd7e03c04393fabefad4c5c54622c5e4b32187851bb5597a41eadb866420706ebe85f2fddd5c2f6541b54b8dae11aaedba1cad44ab301a0c82b2ce9280d2c51dd1a6155cdcfbe79dfb74f14d808743ad9c6fb5f4ccf57bbbd80f156917d01b4dabe8af1529b5d595bcd594e24a4ae53a49cfe584fec67f6407c6e04c8d34313df323425e793bc794ac7e823a72337861220c76b891b4b52a23a756dda69936d13495b0dad7d79824bb35dedac8cf4e53947716304bc79a05965862cd9ae5925cde8a07da7ddeced6fa783c30fdc6f1cc02e27976b20a70f917a826fb1509afd2beba5a0bc6d1031186bbcdcc1bfc1bb036fe9ab3a68a193f634a3050279946c0912eb1110a4a14e703b81d3cda45b804d049bc2586d21fb7964ff8b0dabc0c82baa1cd9b1e28282731d0227a5a9bff82887bc14715f457bd3ab93ba448d8bdbe8456f44e4a091548afe51f158dcc6b50bbb7090d65e3a8af754d8d509a1b669455c1c02b3606a8ea56874186896d88df988d02a96b8ddb9a31e5e9e5eaef1a0f50168d4b9258a009077c82c9169df14f3333f1a93d0b667e86d002495d20f430726805509147febff96944236b44a3b64904f58d0b510ae04a1aa5f423d2b06c4ff5f1b0ecd49115bab65609f81388b10ddd98d0db44692deed352feb2b34b4543b14c56837f975126996493e35672f9188e58ac2d8091918e3d090ccd7b96bc47226e392417699fdbce7187931a2ff6e574e72ed61f644b9b1855819a072337f381702ef85fa259492382a2411cfd07a70a8406559ab50482fd505c1becdbbeda207bbf3c8f13deeacb99c67384f3e4610e4e72b9e3d40176821d62122fa9b110ff4a8b812c508524ca86ef63b427a6a3032927a820815b82a023d54d10e002ca6a93fb96a3e1adf57b40909c66a6479d9d1f9f1808b29c3b0b2658f378c58559a4c269b371802a4e4d6e19cf13eb7852f524a02e5269104336430678c04880805e6101dc325b7c7e360203cc3bca5c493416ee2b9f61fc758cf5e51f382da56847455154ecfac0ffab0c3a3fb84b6cceb90ad176fc0bb789641a571937e48310a93c342a054e33a2200043b94d2be38a3c68ab2eba14c2052b2f75a85ef2f5dfb960daf98d0979e355317172c264b5e63c93d192b73fdf777b0d8f4d4ac7c3479586647f14b2faa48a12365e48f2dc87da85410d75a2739c34db3a9f5b17bf8e9fba42ea0a519ebd0e6c2b61b691e9d63f8a5d78d28ede27ce845b1b52c1f0d680753a535128be752627e9c0c206bcca2285ca64382e2c0abc0fa2c3e2110a6c4a607164066f3396b5fbf97426b931d79d82742b85f76df6b0eaa540d90ba43dde627f43bfb65e3db1f478f452031a8cb280583020d5a80359bbde63d8b0819d642fcea0e1b93a8f64a5cb49935a6d8485ae2b6fceb4e309ccfd72e260b9d8ef17f7e4747b71b11a57b0700c6cd04bc5110720b3fd0d4272a9f878f67b7d92b642c8de2544ee2d6592520607081208c9073f9bd168b5daad79a9d38a79a9a3f2db8ac560b0fdd5646446a3716ce1167d85a99697f0aa4625efdb4ac91bbb54b4625ec2a7144ade5715c6567a7fb5959a973cb48b4fa1959a9ecfa2f292c70815cd87e222a92a3d9fa5c64b9e215434df0887a5a6c8a6667f35961a3d9f05e625cf0f2a9a3f24085642835bc03b4c85a9504549129fa4542b7dc29a1f9a79e9debc270de30d3a9d4e2f2f7d2b17cdbf301cd3f3434ed0d257a44808082d7d31258278f29e4342272fa5785e9af2cf0fa164de3325f3d255b9687e58c334d50ce4f212489bc94cf3412b2f893f1f1483bd64462388fee8a2f95fcc4b61ca45f343e961ea8bc5f4fc1337bc6b89841a3ca1698e315202ef919e9b0303f9f8562e3368a511b04283501b58009a127d05bcbf227a7e4bc29497404548d1fc235449e8f9a016e8f9610a74327102ee9cbe8f08ce3f1f8402cdaf01e2e7cca387494c79499a542b3d59da0b78e7a02dbda5e83837d477d2f3538c016f165813f59ff8029127a43083229438cdb40d162858c04ede0cd09d17fcf2a3f978fe7b1cda3e7d3da91587b0129404efafa6da2f9afeb78492be9fffd53a274a0ae989df23eecee39ce3457f322746c7c939227260aa8e120cd0f625c78bb64fc58eaab32a7d5ced725f0de700dfeea5dc521c182a85860db5fd4889229d9e284e69aae9049133f4e7e31c60cedf93de7ef3540c8b4898f95f2d0c3196ded94e94a6bddf3928adb69d6ab525dbc9d2f66de9191d3f0a4c67124ba3e3b6294d552d05b849b4286db3b8b997a63fa92a4c85ad0e1335ac37678749b0cf02c54bdb2ce408ed41cc29f6a549fcf92c30961825d19c62ff6a9bc394288640dec0698984204b804e34647c80afca4bd274af4acf1a3d7f53e97953b5ed64675ebaa6f99656c5d010ece28d26f0b6b1988582960e4045f367ccca68bee11501bfdea0939e73d312092c247a835204009d6ab858684f7be841275df607847cc9977c4d99734632e79c73ced045fe78cfd674753e59e41620bcc4c2258f5af298f38bf95581a8b5d65ac7a793d6d168fce7bcfc32e759336d2dd7239486e62f011dbd3f4043f34733adf58e115967f50efd940548d3cd33b3b80296261d5026694a01c24775b9c8df476df5305556adaf3a27358d3c05b3ac6a51ea7d9310e8536341ec99b376373fc892bfa494287a4bb9e2f746df78ad78b1bc565e2fa7794d66a49e54e47d6131198dad2efe9c5029152ca692a966b5cbc91bc3d09091c964343ab723e884d56a073065a32943496112027d40ece97c5e87e2a0b8510c194adafe245491a2a292a2223cc9a99a38baa43009813e20f6743eafe370dbabcc5aed4f5e80a74cb625818fa06f3f9a99eb4bc2f84bd3bcafbe1ecde651e69c93866cb54f450c0860ce9a2c6029616aafede422fff901617dc0f2083c70e9e9ffbf2dea544379afef3416c24e6029602630ed6f595e9aa78f658116e5f584dde317e583925094c499357f67822c796a0715bf455b445961f1979c99bed9175cc91babe41da6e4fd797b8ba666aeac110a0d1a73e9f961def7246f0cd3f353c4627abe498e7928ef0bca1beff0b52777f20e555fee728c3957f47c8e859efea3d1489c26494be2ff7ed12db63667d4ecaf19e3ff7a519a3aea89627df13567541bc88a0309e3bfbd09734be1a9ffc56987d04aa43aa1fd2b8b2567a80d64a96e3620888232592ced9345736549187faa6d11bc6dedc5b2b59ab78cbd285d54bf9a151a80222e4da957bb7177c3e9bcafe3c1e0071432497112a2a84851596159f1626e716191834ab6357f08f0acc3284a093d1407510b1517e330fc1f8d64e8fde12d2d5ca0c82435f97293bc306ee1ab1042014b25dc1ee6dd60304479d192ab385bb9b5b5b8d9bab3755bd3c54b38fb152c2f30272b15e6450a191ad245c1130a0a5b7b2fc661f829d5a4e3798f28a508ebb0a28bef07acad8b0f01aead8b182fd4ed307b4c39da015469187e47092a3bc0f8dc11042a30780055527888e1493983eb0d79f6fdb9141b4386671c810c9227e54ce7eaa006152439f3ddcd7669d08c4574176f2a504a32de88e4a1088f60395b54443d22b45455b365e488a6bf27147486226a59559cbc2f67cb3f2f1d6580e7ef7befbd77bb238cde1706259401400780194eed66666c66d0b83402c005a00717fca58e078b1ed11f47fd1e04600550b594c19b1014457abf285d17d10f06fefd50b5e75afa571ef2fba16a9f264f077a5f395b74d6d2f489e0f95d8d1a1f4df77a001d8d472b69b32ef2a747598001cf175360af0b308db3f881e777292ad57b7894c6193c8ee33c8fdb8c709ee7791ce76d28cff33cabf23ccff36ea756cec515e15e9c8c9b71344e09b78433c2c16a872312e256218f436d4b3855e73dcebb1ee75def3b5e3da578159f42a7cccaacac93d2e95ccff33ccff33ccff3bcef5cce1ad19e0bc605ae88e7791eb5aed0ab7ca89e422a140b7b1bf3bc30aca54e9e01276f72127a93cce3e44327a2a539870a5994ccc3cab69a0d799ee7c93acfb94e3ef4a17c0abdfd1393934779cff3eaea84a263ca43a84ead563b85bf8050de4e28bf80504609bdfd0584b2e53e84234409459547114dde8a271f9226945028140acd1aca090aca9fa04c9a8989c9cbef0127af928998b21ad424133167a1c9cab23cef65add1d1fb136a53ad545eda36ef1d0b785b97656d6b5d94e4efbd2df2fa6c0de7da6a5e8d62efadccdb6e513594d4b5bcaf496aad22712a542a38acc21cc90d79de6f7ec4670e73248e447bef2d577969caa6bfae2ac4ff6d73a6489d4e29286c9e248cf71c71aa44151d3d25e87872dce978c7ddfd3bf77ed36d67e352883476429d541bcea69e3c4fa5bd4e612cd149970dbaa680e9a3e892cb6f163093b4fd7e01439af6469af6274ddbd383112c5a6253fe9db57c53761127204544e8e8d2a40d38081d296569ca00bdbdcdf142ab80e9cec1bdb2a74547f7b836d61c8cc5fbc8e175f81e261190ab040e42c321daff8e40965edeff9e80a3822c61182867ba17ca29e182769816b4a7289784f6d0e2f73df968f1fb1a214ad38b284d1b2702bc399876216736ffa94073bfbf94f697fb437933af36fa96b2cdc1b8ec8959980b717aa318f32ee28b6f115d7c166146b187c945ec616a117b98b2d8c314937934c1b188c93c5870f95b9e012dff22f368e27e4bfe1799470e9fc54dc44c73dfb910f35f71df67808bcf99c734b978f941203f4ce62182698e081903f2bbc83c74f84c444c7379dfcfc1bd3477339e1f0d97432cde45cce15b441d3e8ba21f6b787b5a1d7784e21ce01d959b50f0521039f3ad74e008829238eff27b0ed13e7da07d32a1093de4df9309ed36c8bf270e7a10c20c00ea8ba0fde59eae10e502d332c6b42a767e13bd7f11c76f21b60811040e290b028710414cf971a27099dfddeb61f1fb2a72bf89f75f44976f2166212d2f3f9a203898631aa8729153e9f178302d0c3958d7d5ef3af96d79e3d0db5b1bb34728c96edb5bbb5971bf68fbf648ae94244375dbe7bcb8f81ad485688f5091575986396e698619b3651a7c18f1a620e40efe38a80c4ed6e24294268e58f5fc38d9c2a250f1300738881900d453a0e5fd71d01e5adebf02b234be3fe7abef113d2e25d8d322424b415091bfb7bc744dfe1e97cd38de805f7e7334368b7c80f7d8e2dd33f2528b7c43be462f8ffe44b9d20b90a601a85c2a25569bb59f280309e32f12b9516481f6d741a6fd73e066da9f85285d34eacddd15f0b02f1019fba634c70629729476bf4500c1c17cc02eeddff21bc3b04afb73369dbf0acb3b0c5c79c913db1f620daa3c2d17f9631a48c3340cf39207c3300cc3b455620600f53190345023938af690df1fcb40965cde1f0b9133f7fd310b47e883ff470b8381a92b1aa49c99e2efad08fdbf2d1b764ceec814f3c61c92cf1c14b09c536a312f591579df306f9c4d5a5ec2e1227fcf9e56f6b4b247e5250ee62287a93c2a115c814a80aa57ec0ab0283c8109e18f341ce16caa562cafad9a224458ad20d4e8a0091b843fc246b4578b0c6ab3aa144be03d84d54134555528347d171189a69f44d33268fad90b9a7641532d68fa0e7387797e7f1c2307f31067994c46bbd8bbfbd16cdb77436a3b29053b3d56501963e8a44b97e251a262230614df800e2ec716ee4daa279646ad9ba798355c245fd69a7098f3f2af2c6d5ee66d2df66017c9df88a19f1206e444fd5c2d3b1d274418a26af91cd0ebf0e785b47c59dd3d1d4ffa78bf06955fffeb788458e1fa68e4cbfa75d8939fccfb017bd4f53f22d47029e618b57ccf47239f061de55beb7d44e0643a90f3d9806e8833d95278fbcadf58ca9ff9b55da12d60abb62ef6a47abe80e76f2f336dad565603b8b68014ebacd5d66a55781509787e7d996bde019e7fa57c2be55ba04a172baa4c5dddb3a463e5426cfffef6bb56fb3501360f31b57d0bd40c3a019eef51d2be9792aa7d695b40903defaa55e4638eca5802a7ba2bcc0a6bbe35ba6477866921adfd6944d5b45c2f58ece25388fa145d8d66a32c069badd345e154a8fad5c852cd9a516da4fd2c94e198848d323f0a47fc9d15a7c93eecc65ce633779a7bcdeb94ad96cbf58ac964b3198d56ab9d5c7a6ac5d2524a4961534a29a5a4ab964b4b29a57c29e74a4b29a5784dd29de63edf8a9c4986756b702b74bd8b9b4907ede25388fad4389fa6ad684d93d562b9582f168c15636d9e15ab69caa8ca9df3ace826aa7a5d188e856f456aa2b0e92599d1681cffc310df8b7118febbfb77f7766a16629d521929d8aa92b3cda1632ae8a085abb78717a3a8d56ac9d53251ad8b97f057b0bcc09c703544b95264bf130a51e568f1dd00c762579870ee454a24a2d4286de311aba76bcdc155aece57497961423bb6236ea408a50276a3011756c26c1df872a0b2038c8f0e6b5081c1030807951bf2ec465b0da4c490e181830c52470736546b840a946ab1506df8fd2003800e00339c191b2a63690480e36aad95c58e00c77d0dcae51e04603f26a61cad0a395aeb817a045bd18044ad2cb035656b9661b958687a7e0b1d60f9e27732073860f9c411b5278e48e92368728352294ab2397751e0d74c1ca1a927ca01de57d31cc24f1cf1840a7cd0d2a42489843700d1130444cf073244cb24b85eb44c420adea099a0c44ac3d0920947b44083c04573003a4e206ed0b1897d011968a9d229047cbaa0e5c7a0a0995a4a2db5947ef6bf8ec7f39de7f37c9ecff3856ccc6516d6f93a9d4ee73f7ba4885e89f3274c123aaeecacb6848e93fe27d2efa334fd7da5e3f77dd9d6e8b89db61f749cad0db5a5e8a8e453eb7c942cf9cc3e493e34cf898ed3e343cfef0c018b4096c29414cd071521499b1a8880040c7ab240cfdfa01f7a7e07a5e77fd62ed91b99a69fb8737ce3f754dc95a6bf2f7b440cc81f7aeed0879e7f52a3e3c9123d659e2a60fa7455d333a56708889ef39374a463980259bae10bf47c2f0e1e16de51e527650d6ac5dba2e3fc4fbc2e3ade966804bcbf5ad805bc910111af6dd206fcbd157315e87f7f832ce80d4aa9d8300c53620824543101ef0d05a2013e797969457532f352cbcf0aab31960d3a85a917cb4b2b2d5a435bd4b5125ba9b1a8e88aaa507ed314be2fe98462834e2c352e9acf0273d17c4a5af9c9b19ce725edbca45fe8879e2f4fee02bceb92257a834eb5b6881f99ca4b1f17ecf3beb115aa2a6351e9f92b2bcfc272436a167166b1b3227a362a2f75622e9a01df1d4192b677fa04ed2f9320673a680e4ada7620fd0841d83169104a57d489cd0be1259795abb01af8e87c3e4ccd046cc5555bad73c7f6db735c9df3030a494e47d47164edd3546509dac4df53d37e4745d153aa6dcbaeb2d91d88a776d0f781032190818a0d9a522043b400647e363e70d2f43f1f0ad043d34fb9ca5732ae07476324c19b20f68c23106319cfe8f34623e0e91e6dcd1c4e80f73cd55ae5bc8ee3c9ef3c719aea44cd539da77aaad56e769e50a7d3f592a7e3c913e522fff95513b5db9c9b5d32dd30a3c6668c27c17f68afa12118e03da71170fdb9da6c6cc46d4623aedb741de7769ccdbd921383c0a184baaaf49fb1582c66b7d9aab1568d8da0f7753c18cc148f46cff89d2c5d5453ab69d19a24669c8fe63024bd4196e6498a7c3e0c4215608b848913f0eb995d6ab30630e40c1c789025394396708ce60c1e33c65f8e1c06f865a79cee9df9db1d8d666c1b6d9ccbe16c381a677369dc6834aa48e6098a997ab9e3388bf0d902ed7fb2389cc79c6165cc7ce7f4944bbe6ddb421663cf9ba8ae233b9ff7232f75f2447df954f2665e22678a9025efdded6f4f6bbce4e55a53698d8ab6806547b0c44901d4444f2e9a358eae311460a9ed8c51af351b8618d7fca6dc5b6b7589655927ac8f2ab340accaaeec90cb6d955691cc5aad1604ada13555c90de2a0fdd600ef20084e6bbc19deb5566b958ede86c61802822018023f2008faf944e0d0078ba1cfe7f3f97c3e1f1004411004439cff80200882201812bbff80200882201812bdff80200882201812bfff802008822018123bff014110044130247afe038220088220e82382796fb486cdf87d677ee350a6f47bd4a4df31ba7264fcbe317e631e7e87307ebfdee1f7a8474f5772a68bf97d5ffcc630bf43bdbdfcfeb1c5ef18bd792ebf6358fc1e5f869a1bafe6e8b3fc8ed177fcfc1befabeffd592367be9fbf0139d3f9f077cca8379b93df311a8f38c4529628fe1a72c6f3347efe95339f9fbf013c7fd2bf1b0ca2889e927fef8cbc2f9ec91b8700c83b94c9a54cca3be624c315c3c5830b866b07d728ef18bd811b93f7c52ff2c6214cdee18b8b1679c7d07a45795f3ce68d431df20e73c8fb358b1a97bc63f49cdd96bc2fce796331ff8a3963c93b46ef39bb2b795fac92370e53f20e5f45de8f92f718e61db39de41d33a6c87bfc0dccfb8644d07b0a0453600a4c81293005fe8ed11d0d913381e2f624f47c7fd5fa3b46731e14ebd31037533d597bb2277bb2277bb2bf63e8530f24760f8af66988d6545bdbf63b06247a0f8adbd310aba9d2e87395c6551a8dab34aed2b84ad320f17b50e49e86e82629a5bcd7b2eeef18faa0fb34446ac23131d2ca361b076d9e86384d9bca2596586289258ed1f8778cde9b6ad3f1df6890f8c9a088b307e69be9c9891d810d3b10c31257d0f3250d519a5c942e345b6083cdd01830749dc7333d55c0fb6a493f1fe67c7917e9f9e703f5eac9cfc6fcfa52ac524a397dcae947a4115791b0aa842fdfba27738c3fbded07aa291de55b4b23c6c8e5c38d86cce8c5e569685efe7e34ef8283c8e709b8be2c32e37c343577f7fbe8373f897d80f778a7a70b7887e4f5ce9d930517f0a4d5dd7365c105bc5f4b893738f45886214e1852097521f64218d351fe27c3ef66a5a37b2a937646ed99ee1ca3ae4f0f40c723523669473e96291ef3844355d625d3c7ac66242ea374a1095524e7f3993225072e0211546c0187c625f0e5367033a2e170bace734e576bad393c593df76aad53cc1186be8ec74323c109deae1ba3c0ded93d3ccfbbdfd7e9c4d0f23d238931287e3e1b54db8e8705167077838e52ce5a6bf52ad2393bef7a209deef1603941dad93d749530f2f33a0ec69b8b31e6f066ab633a439d1e76f2f0036e87283ae9d259239893c2928e37a43a24016f7fe92a69ca3b3afd45474e0abbcc5ff56fedc5e2ebfbcc4b2e5f5bbee6afdff99c95be42e003d6f445c7fa5787179e2e9b524a5a821d556f4fd9c0da652e4960af39105a6b109b3d2561eab3ea4df1e1c54af12b2a292abecaa099da55e835a5ebbbcc00fbe09ae5573c5d424b3a68f4b5dd87ae13e5a28a1aa1c610f8017dc5519f3a41ebaf8ad468cd1eb56a265fbffe8652df6514092c025997b769eae6aad5d2e125f0c1bc5ad5ce7f5eab4525ed6c291e144ffe23860f125174c8626f90386f8a84ae5404bad65a6b9e89284d2150d4e12549e7d79f282538c9ad57869a92cedad93206661c56884d00e1c3e47d847ef39c3722347d9e45ec26f546a06b4d8aeacb9f6e90a50993b010e8fa9d57bb71d75b51c32ce280b7e7ea771b0f8797a6a9be1094247595a84d641107bcdf87599f9eb69a97a4a9767953d4569f5b1145511445f18d9031895feb53949752f2d7a7ffffffff46c898fe59640af3924bfeda92a9cc4b396f9f0dac278c8ef53b57c05cae2eaa7f6bb5be8beadf8bf1d717ff45b9826545da8f66fbc922a2d6b801c403bafffa63fd517d192fadacacacacacacacd45711af146d9f226229da5e85d87579f7d0dc090e2f4a0a318752b411a1b79792245144699adf0f547a8993a2ee6bd775ff0113115f29e2b8ff882e65c470bf09a588cb7b083b57749c2c4ae2f2b44068aa660bd493498f8ff2a00549049e3f6deb159b8d6a46d6af4215eac2702c94fd6ca48d6a2fbdd63ad295c2b4a9de4de4de7f136f4c36a3d5aab86538938e59cbf5825549db4c33cbb2a629abb55c2f584c56c53d65d554abe2a62a1385d146b351f6b190bbb763b3106e3b4a9b0232c4cd2443b426b76eddba75bb4732c46ae264c810a9c9ca36955fbf7efdfa95b1d19d78258cab56335bc564f0405f3871ebe6a9e67eaaa4dc1085ea39693a0e40371bca265757d12b73cac8000000db36a367eec5f87f349a3162b815acc0052ec830c830d448a42844412e610902d0f3b700e6ef929635949b27e54bbab6dfc416318bd2e4caa73894df1d809674dca0243f8592e0edd1118577543f1103de1ee7733b1016f270297b928a3e8f8a9017be2137cfe830b46ca143c5474bce8dcdcbc74ac09bc646c70dcf52f6f2b484d12254b13f9c1beec279e60625514d431d8ec0372869beee0d59e4857d74aa2204bb0f07b4095d13ce0594271666c280d1a245ce2a547c3e1c2d5f4b4a9a251d5344a55c434dceb721f5cc54ef69022d7f4c24f63cc1d7f1b88c2496518c972f093b129bb902166419c4ff2dd1a0e5ef987386a52c7555384519f09e279428f0964afeffa916c5b721b528fe387a6988bb22899eeff357502d8a2bb204e8385d772c2a29a20a94f06464c386d42f1b526f40b1cf15407f1b527bc6829e4f473acea7fa8697a4a45252494fa0a7c7b3e89dbf2fde6f8528fe98484c13e8f972869e4f3d54794edc3cf7dd8a8f86cbd56523aab8fd8fa66e369fbf1fec6ff2b68fe938fdedaf7c34f686d4dce7ef87edb9bcb7dfac486f60448f5a16090214ba932a292a33f5f4c51a26d66940d2f150f81903a69ad3d9222e1be6006ccbb13b05e07d75ad75fb29e6d86a743db142fdb9753b362f6b24cc26cf1dd8c3f91a946ebe5351d2e64734091ee4e8bf3b20da3931edce9969e7d0b4736adabb93f66e7559b8266cbd6b7c7166978637b5f0f4a831c5a9b92dec0a5f0f1b631b998dd5ee09a3c2d4abc6d58635a28db39785b197f614eaa6b02a5c3d6bac19b5b820c819effd3921cc19ddfb734428e9fbd13d8db5e7683ac4adebc93e9aa00ffa1125712d39724390f17b310ec3ff5a732fc661f83f8e75762fc66138a32ad54ab552ad542b1585f9bd1887e1ff38de8b7118fe8fe3f6f292bb5c74f2928f46e3f81f8618bbb6d7bd1887e1ff38765414f201454c65d07c5d244d1c91eaa97578a9de8b7158236935baceea8c5567ac3a63d519abce58ab954cb69ab295ccc66c4c65632a1b53d998cac6545bca45bebd5ce49f82a5282c054bc1eec5380cffc7913b8d46e3f81f86189f5cf7621c86ffa3d7a2c0f439dfd55c5fcd349d75c6d119ad5969a7ab8dd6d434751bb33597a65f53d565b7974fd476a2262a6e1905de618b2382e186932690284d1fb1237a4cc25051c8e7416208747cb8d6d59b6b79de1531d5f4bf508ade2535a7fbcf46d55d961286feceb1d568eeb72c04f5269c53ea4b1347848afcb994fa57d7ccb5da80671e9f8e8e91c0f62fd7ba976b11e1947045b61777848b71322ec9b5db8b92f696da8cc8a9adc889558e15033cf4cc288e3b6deea42ba6e3b619a1a36f6f7f6f8fc3fadb6f9c80fa16d8424adab2dfbb71ad9614711f8ab8a504f87fc0a1eb631aa2a4f9f6a3d96e488dc3d7356f2f3afa6323e0cd9db4fb73274af2b1b71487a2a4fadc8f232fda0cf4c69a6be9bac21dda47474ee8a4cbf6c05298cc3b67d4eccd98acfdba27bfa381f6df2a752547ff4e76d43311a789fadc60bcd96cb0c49bcd066371ea0db6be848afc4d441fdadf9b339c0dee0609e3bf3bb5563d25475307e0546a77b50fe867ccf7bf40aad7aa131fd64788c911bda376352fdd54eaa63ab4ce60c6048981768e92eac7f970a1ced3f126a85650e57c3e1f2ed4793a1ee8e50ff47106b9fea8bc0bd51f0ee5425dc7e37d401c9038f5870b759e8e07da6093142ddd7d1008040299884bbc7baa352b09e35e3b03de5d6d3e48d6dfdd4dc919d7a5ba84dc6c4020946443ea1a848efe7495dadded6aabd445c12c753517f9cce7533740dd199cb4779f8f387557f3529dc114f9df407be58187f2eaa5a6a4dea94bc8ba0285d41faffc7580f79d73ce397347a3e35ddd5465c9995b87d45625a2bdba6a11cd41ed18c20638d0fe5d13b4dfd44ddd24e48ccffbdf14481298819bc2bfaf0bb4ff65819cc1eff97d5fd0f97d657069708568bf38e0fcbe3ad0fe747353b51f40a1bca70665a76d4450c2f8fbc614146d4c8f28751542aab2ea90ea041d57d507c61b91eaae7adc67c6f88362088b2adff83263c0a9b184f1df422e1ed887f2e0a3932edb67212dac2de18e803d2585969122a914692b7979a23a51b0a42934041cdefa734583d091656da6ac4c573e92e66f972fffa0de9ca8d98e21ae4e424bdffb4cce924c324818ff2906191383e96be63486725f7d9c0f7a22494a9213253f310334cf2474dc5cdca780cfc64cc2f8d725703773d112cf114287f4fefb1ab45a7fcd49a3257fd5f78d523a6de6fc48665bb1ea8aae6aad4f59ac202bcaaa9b0d270b7b88a9ebd349ab1c6ffee80225ed89d2a821a939a3ab3d3b07e24a786a850bf0a69f0f13d599e1d99a2d70ff5042b601884c030a24c35081cefb48304b5d9e493e1794bcac0405dabf7b820925f373e21369102af2f7c421ba13851c5de4afa2249538e04d57298a064cc570bb10063162742a85f1e55dc215766288f7c05ff4f694a784501d5020c8992d0be96aa09db4fd9c09818410792544921c54e45308184cc2f8a7b0019ead56cb5bf307ca4ed86cb560b3b5c20bf839bfe96ab666cdd679cfd32348fac4e7bfa991231e0559fadedfade05c9033350be9dedf8dcc1937668cbf6413a02067a61301081fb06809081739a647c892cf680b681273e6a91410d8d311b5803b5a3e510320da078e1642c2f87b13583ec1844c6f5f4d1f9ca0afa8d48cb8053d0c15cd0000001000b315002038140c88c4c2f14810479aa01f14800d6c864c786e4614676992a3284e19038c21000000000000648064684402c1714b00b2adde44f17ae35605dc25c474e909761577f80893d24dbaf2b0f49815ed68bad60244d16c50ba827116db72a1bbb65026ef52d2ea3c0fb7b88e2b989ee2097543b71d32dc3113cf658f000bd7aea565781cc7b8f30300484e6106dbf5a333e4a39f712b66bbc9116a5a6ff65a908cda14a6ef4f63c8f92c715cd17c88a1a5a735eef48244f32676168f6213b7751f37dcb0d41143da41f9b0d1bea855930d99a549bdae4d822e0664e3107d4a53eb0adfbfc4fb72cecb2462309d600ae9aa77b2f5be61db3278fce13090382652baadabeb847666de8e00c77e9213be359325449cde730d36d82e3f2ebf2f0ab2e27464ae19bb9610cd2854d22af00db9f707e9e86ef01f2046586dc4f6a0635b682e36ca06ab974a2f23be87a84664b3d4408e674a6e8574932c24e5d49bd4c26e78b69d1e781884f81ae800a61f5101886f9047301931020a0185034836209cd151fd14b00618418f1f9fca5f7026064b6af6d8c7c14fadd9c6e063a76b3989b1bf722c713a44e716abb91c28a0fcbafc6bb204c9cd8d35c408422f5246b9327fb82ca72f3d2567725333520b895a08c7b12c0318aa5e86edb20031403b802665400dbc77435fdb593bd01de98b96cb622ca8764d9156ca007bce2431a3e167eaf2c837fe98eeee524b8f08a35d371c1cbd3da90603ed99d17b3b1d862014e3e3a2dd63f2b9ee5406e99e477afb4472b5da09af9d90c5105559a60cd39ebc556330949a72ed178f0f3978933b6fd375c9ad6c68ef4306d30d43fee41a2f33ef55915a471922db1b09573526ccea0f197ebacf41f1ae864869ed30f2fa7ac018cc868fc5c15ed5cdaeac08cb16d9003fe881402c9d1e899cf802c494ba5c9d83a700741ec837a333aa267836329c609477c2b13fd1293a1beccb232d8ab3160a01927f7f95f61ba35b64f4cf756aa241a4bd71f327f7368cd79374b5b8e0420e831d244de02f1719fd1ce5bc56e2a34b4e07dd093cb87b88b2b98cb988a34d38b334276816c20fc67b103cdaa7cbb8fc577c2f6152b16959baa090d074c874adbe4704547681600343970733668a8a251f7e0c5c3184a2f874abba9e12dcbc85bd75a5f2dfc1e70cdb0db4f52e9108087d4cf22cc2ac07748570e538b67be983be11c7a1693e32ea7c74eef0b67b827820b1997511e1921799057eb6695a46858b19fcba57422e3a9e0101a040c9aadaade610120817c7cf584f683f726177e8d3d2d0d4bfac38574ede5592c99a137e55d59159a49fc738f00dea7b1ce0397ae42978ccffab6002c39b153d4b629c873d4c8ca9c2840da7450913dec4e4b1487e87125619d3b09c34b4095a276ac8219c092890a475bd9ff0a6218f044ffa6c12367d186223d19985f5a190d810b1232c02740902ffcddbaca5e3e046fc4d176a0e6563aa50a302ae8e699cd2b9221cc90be506abdcbc9388007df34ca3b459a0c6f6c495e286b0a89468627998f39b77f8a8519e6f8c702bc913b8c40b1e790b7f9faf902040a8d22cc3940eac1e048ad9b4138627d360fc630963e81d7f84c503ce8348cf5e25c827086e2d77c8875bf9d51b4b194b51eae20efb23f09c0fdfc910d3581c8b4e445c71891d6fd8000a249f7d4025f7198ed2056809d696d74f8e19d9cb4122f9002d98fca144f0779f89db080ba0c642c9ee3357c6055eff1295f7c85b6f1fd4e3fa1876ce16da59a014323ca80e4a0a304b9b3011729219644d3464fb1738e219e23c00f528fdffbf30735d1a4535b2b6f676dc7841c7565abfccfa24a4c85f55b71ba1159868462d6dc148a8bae7c507c3f94b8476f348d91f259b695364e62dd3087905bd43ab255c39fd2d45f7d1822b423809148ac52d0a8f74eff59e3771ffdde2e266df479678da0a609af454f60a1864c1e17f6f5a827def6e9ed3a8f4192ce2ab7eb3e35a146038c0d2dd843a4450735b5c2d427945ce97f084fd1148d40970cfa564297b49f694fe6a8a45f25ae078516de833fe6df6a93a33d725e3909baddaf8b9531753854658d8ae6b7c5a375a1798b22e381ac86a8402cc9b6d75a36a0217f4ddfb39452fad3144e4fab6af58e6ae1c891fff81e38a1cbaf701dad6dd9267c0abe917ebc52531a42325e44199168f41ca7af7ea42c29886d13ae23c3a9f60bbfbbf404ffd344c9d14d947243ab25aaf70df00071048a9ae83cd30b7267c1c84f4fde2c5c1b6884f1705205fa36ba40231822e30ed53dc656e69c422949c0e0ac6cb3c22408da4a432b615fa475470fe247951dc4f9c70c4e5e814c011ccc08d775fb7342e1777f331a248cd958437a02c6961012bee07525161499eab74f4c549f30ccac8883cb01c49659e407080c70ef0a1d446762049d7693709737d84567e112783ecaaf4a72c303cd431c7cccccccb0c1171b89de705f53b69b034b8b8306ae8b2edaf83d110d4c7265e6b368b391a226fa3631739f0f4d03cc213ea68e1f0ec47dc413476252534f5e6e61074d11140be7ab518f1fd80dd864da0b5f6638ec1602b97b4167ea37ed37f4e1508659a18823257a81b4463fc5dfeb23a88dde2b48f38807d15bf6b3a52a398556597cbb6b4aa5bcd12a9c1cf14d854a05aa274b26657ba14012346376d0419353a7b190c1d78bb2c906a31f9065b11e0676d02ebca0a07a10ca3b0c871979771af24d40bebaed3aacbd40d16a4132966de132d949758d6cdf26d33d9dd1cd607424f8bab1a1f7bb63750ff40c9ba6f68417481351b62e24d3b2a4f41b0b952a062ef190604df440b4989fe89764fb20d49ae6634941cb6b63655a636a485132b139595bcdd646f6bd1726ac305e98cb6a5f7fcc050e29652e58623f3611bf1da69993a12d698eadf3466b5e932a58105d401150b371215c0a39b2a54eea15e80c13597105c1d14950f96b4fc8e48fd054c2942ef6e38815d645c211129a4c0113f7e5cc97995b1f59e1732decae750c96715648cf2fc93fb74aacdfc20113008bc66849f4586d220d6d8a7b53ba5e0c10d843fe39222223ff7d70f6bb31633b7d722b63b13ae98395e7e48c1f5c44f28bdc56dfe89f8590d702e03bcfeb11f219b0fd85084321167e94ab53b12636dc3d5159c2274ee1d3ef0b8230564198d8d144fe2758204f79d3a4ffc12511a3a6c725cf724114d6e8900e157ed08d9335bb5992ae1e73672e4b58bc459b29741a4299dff1dcdbed88fc02e9391d34ac9ab9810a48fcdb067b4bd5825ce141ebad41165266671996122c486879f5c105f1c47dbcf389c2a24c9366c9d2f1334c157de934fa5f5c5c8ad1c478a4e18ae6203aa72422a4e1a460fb9f128fea5154d64d1f5a279734d38c3468615194e94b62588d9ae10dd23ddc7d2d64818522e437501e5b3a16fffef044c5a31681566b5816bafc67a323643bd3f0a7159729e7ec6960ef11450df3faa2fe5eb34256753aae99910e1ca94f425f73be0e45b5f758b5d74584a450de0c89604e4f8b8094cfd67dd554dde86300acdfc674ad1bbc71d7bd8162b9ed5e76ae003c04fb150be1d7288fab64c42ba70b521e4362114bf7b88e4dd9aa71394a62e045320192a54021fd981ac484bece1058481b5819de336c1fa1b1676cc6924c47f081de660b16a526a46152c0e51985018f4b4a8349c2b4c0e0a74c109a4fbb1d1106cf9698b05e111747d73788081d60a2b48b1b5582097385ad67f8a2b25e95155b78b2d8a22a3954fd8d2b33620ca6c418b9088e21819a3d6a7fc8525eda64a99ab09258a64680d5e0605b1760709996f1f559809035a346561c7156fe10766ace023abb714e65b59612f71839563d42bbfc13349bc3b329abc571d9884af1f996a7cb85a033828a0b300a31c8057a15deece15e02c327f68f64303e1ee70ea4a1a662930d92111e25e0fb441a3cc6450bcb82a990a2f009f47566a59e17fd969887504d1479df6d3c8fff2fbbda367cca66a33bfc8be9ed6c30e818e33fa76cd22024ac96560be5cf0168f47de02f21904c5d149679cfdc1171dac5eb0eac9d10d31094462c1fa30f4b31ffd699e4ddc63c7be78f41e063ad738cd949641bfc5e2dd49337c27ec62e1edf402425a9956b69b73fecada7276d68084b1ee6229e02e199f7f80e51b43177c5516547cf2c3eb3105fb5044a205c490e16becfdce212b2dbc7449dcd84465f3222969253760d08548bf71f8867d10e86c7502ef21d747e5bc1ddf7c0711dcd5766fd6227285a339b711f20768ad51dc595987931cbc5152802dd3ae28a4bbab8fac97bc05daff07f921d73589f37c1d2f087316ed3d10605d3561548c0acd9bef4bb748e2dbc8312edb810bce4970038b2573ab6a0659feba7cac25c777f4baa65e5b01555a5cd157dd4fe0be86ebaf6bfaa1a68178d20bdc57b012a50773ca2fcc2d7d1b7411b020b8fa2e00a9e48730e2bd26cdadb190a87fcf637f082e4487488b3113caa6c7b28e4a209beb132e42f62fe93152c2c804c203b96ec928bff59405da350a2b84106dcff6a0d1c40ff8b9c68d7bc4018425644f900fc6a0803067ebba398a509719fa220de575ee00939a1b9e6a4270e217d8fe0e68ba5e29efebfd31203bc513308f7833dbf55c0cd40caa622b9c3479508754825b6109065a8e88b466e97c60ecc72d779a091ce6c0992ed35eddf73c4e33f66ad40b77bc1b2b271c8d5d166d180dc9376ea76ee736ea492f1e0fe828452e17535877b3cc0b19191d09df2b4540212b213792d6d70906dd4a6f675eb8a81961e93347fedc569c07b2b675e687a5135b32db5548417efc8a4be6384810be864248ee5cfa7de853c2ed4c072b856e04b85bf24b4ee9a2b12e399c472f9e1ec1a1cab974c0660e14bfd9c39447e0e3bc7e5bc5059479fa209f7fd864eeb8f911926f221ac3c8d726b52318ace4d4dcc7a6a3060d16f65f2f83a9ae553f32d0982e6185be96f00de9a7b7ed370a113680996d0f2c8adaa3b13da5a6174d8d2db3feeea809b63944c068776b62e980f03a89f03fe305e2a08c9a482c54e9e889887f4dbf372f4f00e129ee0f270370743a22463aabcb81145d4d50379e4e34f83544decffe7e0b7c9a7709f9fafab5f5f7d991a757a47e081f1cbb4fad7cd5973034b9656fcd02ecddf8fd8414baae65d52b04b1d401844461c2e2f1204e3680b3795d61400d7d3fab9b2c6494a87efde2f12d2b223e114c461390a22ea8c081024cc0776f018a51099f37577ed399e1fa1ce93e94a2f443dfb847383b2e9bfe91dbc9b7ee0ea051f652136717a081bb7bb85df8458780e0850936fb52f57caa202eaf923f581a46a89a600d0a99a3deab9c2a0a45e47b2237f7a38a6862a71e8390349ccab7f4fbb3f6bb6084a255ed9e16038ace6dd24021fc8e30f692294c706e915b764d6c335425da09abd66d026172da26938c7db00d903d67afd11978b6b09ecc228418c1550cb6b727966a9557ea93f9bca5c3f1b6a0a41d1540e5a2d1a187d0b4e6ffbe1721e5701da08d3b05d0c77bb922e997ba351eab863b5f58223f80477da6fb31130fdd694c39fbd117ab095faaed51a5a1a009ff866bbb635fd45720ee44e7baf291a51f36e432f3abd7dcb3d690b594810bd8b88ddb7737348dc8aad8a7da994f5a5213f89846f3646643fe136b3e120272baaf08fd37cc245ab4b99a459b799835aa29d39591c580c58f2f687956f960abfd85fc05d0fe7fe0d78f99643d6acef65fbae46f6707dcf7ab420cd2e34a190deb075e07325bf2f6d451926eb37a75f762d28eb341f88e8beaa06421c8dae9bee0d7f4abf6d5c72e94512f9ada5b700c2e2565737f8181492d982d22db09ca9f3f3a3a5886afb383a4d82c667fd4df3da7bce0ce293ec8f9ce0b38389375bd6a68ab5e344d5e7f27514e506eeea35793a02be95137085836509c9582dfd3d0c3a25748db5aa9c3074ed96c4111d2f43bf58f3afd55e26c0ac632cc107dd3c10c5c6af777029aef0a581f5fd39f1915162965e16776d29149993b0e9af190ce4440b8eb7f62db27394490f4c17faf4432cb13e908226680035b4bd542290c4628272c9f944d0135436481ad5ef4474d092dcf7ff32cffc7cf44aceacb22317831013192d885ae38147c7e2aa688bf8aa3f5722df46f252645ecd3b01b1286584cbe69e183d2c8691518af05869a33bd1c768c7733a94ba0014ed75a496658186f7104e23f08d1ae2d19bee8038053305789cec26df1b0d3e9d99898b4821ab8e2148d523288241b24b00536edc9c3fac8151c0dd41295db13c62fe35bdb74e83c1f29ab43df176b4575309c9ddab40e017ff6ee7eee8f57ee9bf745b8d7aa102161cdcb72ccd1e8fd22c7e7ac529df20ac3ed78e8dc7497d9cca1cf8cc52e8cf4a55dec2403c218e3f1f478f56d92a0591e9a0e7a6021037e0bf9803bb4c41616ee09c2823e38b7a222140d7accb251de384423c2ca186409dfc76f914607a2d51897533c3093b7f948641cba58bd09a417e3d4b4808c0098cf0ebc5b049237aaf22fbe088abeeb1337b0df69fd06634440673358dc16632f3a4f88f3e7f3c0466d3ba416328d18804184894a9ab46f44b3db1dbd62be56284c3674f2c644fe2147952ca8fdf78e6de0b3244cfce4bcdfe8cbf130c8464e65e375123ae98042c57b57bc6f36034ea786f1d7bde1cc47ec70221a69f06df2d075303632e45e41a6e734ebeb5d88a78207ee405fbea639f4591dbb9b2d655f2f1f2a73117442e95d67d34e7cf7d98b076a272a6cab5e91565dca5ed940112ca2532d346de39d789f85187482c269c234408f94babef23f316934e3fc8c4dda701ad03b87bfde1fc1a13bb1f779092e1f71bdefcc84d6f2c7db1ee64275881472674956c0e081610c9a4cbb9140056b7feedab8294302f75fe9202ce6a6b71f0600d6f83c2eba3f73b34936f0ecf24975609c3e0c427f2e18f4651e0742b492b9d0eb97df34b3de166b92c65d6c0394fd9a78678a1e21a8756148c0bfa21e421aba48e8c4b8003484c8e06475fa9075fc4292c98c2a10d79ca58297227960cea693766a9e70335caf3b2f7ded65ca59545ed2857e41dc7cc328995133699fe6288b1fe0d26aeba37545782762d5869882a02aef0da364d4542a196d267e1dc0d209462e9ede726b0d0271bce6f171a37e043c0336b285677bb522ff91e261499dd4bfcfb4b7f1fc0b79a75c84507d4d72e308890237808f9d90083c3a819b8e8882c6ccffa2cdbdaa9c80093b951a04b76d61475e9188899acd76e38934146f3387c6b46ae79c7f2db581937e731077d403afd1a0a278b0668f8708bb650d8670c2d666d0c0ff03cfdea41f3ad02523ea457373ece74d2974e4cf1b6182229b572d9a1585c75e1f7d73aa64d96613a411546f23068be603e7639645eb7b75cf2f4b7694c690e0f46fc7d79049604151119d9b2dcf85461b698bb174102a74b8370f9d6b24be9aeea12c16bc4d999c2098877243953980fae03f14460c99caf523ea09e35ca7cb8fd62c8d903f841182ad9a0d838737a5ca89fe0ba4f90c8679d73fa9d82e55a51f1e80a2c0ad1c269437805e3b2c1b3dc22eabf7818a7ce73e56c4cb71a8a1434ce8d7e24ccb9bfe8c390c6f510800686f91966fcec217f52a1746c9e750e75c9f4e65037819f016af8b702a64167337b3ed0f7ff014b60584da76efe037a815bed02f241be224f5dc0d5b087fe40080b5ae81044fc86c7c4ed1a63e8371b0ce742b235fd2ac5d06148a78ed6017bb76b632ad3fa4c508e5cc148ef98925a140ff9e05831ccb0fa799f12e33047be601a3b0b4bc0b5c45f1fca0cea80685c192c28ac9565e2bfae533d907a683a2c394b68b158ae02e760cd721bb35b114514d98cb2b12f074b079470e1c11a3566607e963726e86b1928b01f61a80b6e729f27f017bc250f37418c944eb3e2c92b6ed92be5caa79f4b514ffa1c82dc2b53094356840d8b28a0b87b1c11c34fc35ec6cb436b8ebceee6840f8c18060f092c77e273740b4a0488697a4a8a85483ba2353493b78da8089b80c90023022c34143939a05e93678ac246a6ae0c6cdd4aa84e62d498f950c0c34c13ff038c6830e929491fc59058de3d10e3293835cf35f221b75d716437023a66744052a6e20ecc2cc844198555a1a6bfa1ad165a50ee582b4e33ad7e4a7159bcaeb40ea4b2fd23c178d241cc6222a0119047c1ba506e04080f83f251bd4a73539bf4c263b033f835da6262f6c45e1e6cd371fecf4fa698b528fce6cab522711a9d096b760426651d879792544c3d855c68a90a629e6087365de8ceafbb50c8fedc8234c9353b0ce43d2b1c756491209730ddbca08e31d866fe1a9a7bb64623bd552785d43cb09d1555528ac7e683f46fce83a57b3505c48242db6d67d12a0ef700252437f89302108e989ad1a1728860aef1d7fa71b3201400ec1442745ee68d013dd651455a58806456d1cc9eecf24b0b866f2c51a1a28e66242d6868d18bc93cac94719517e8fe8463b4acd2662f71b91932c7b0cf0cd502a30fc88626ce2b29ded5bcb24577055730e55ded739b4f62ed8e8c2ae5d4e37ef08e4b31b039777ea43d0e4d2db59381ad5e55590b29954ea663f55e40fb37c2f36f6f2999247620cbb7243eed167e2cbedd160139447a49b341d7a4915b893dfca9713012af7188c23816ae0b18ff77728d023fb4a750aea0d9fe8a7c8ec6e1cd1a8e988f70249c8ba79e463abfd1806d60262e0bb884d56019323a4fd42be589d14731a1d53be4dbef7334c5fd37b36d03ebbf966305fc622e20dee125286d66765a0894b6946f279ee2140afd2845bbfba6568ba181c684a1568a0d1312979cda8329844a8b336d83611ea33034bd910e15eb74e3090dc50768bd4c47940b477aa9510cb5b6fc5ee060da111051d66f964119927089e6d9d3195661c01f3d7aac13276d240859e8ed1912bdfdfcbacf2f528ee6527c8048ce6e68f26c9d8454d722b148542603032fcbb32530d41ef1c39d540826e1446ecc97dd81a79638ea230c26a53d018db46e6d46b05ae30d3985b895812dffabc4cf442022b0494a71b98bbc9021369bac6d05f36c18277e94967e58e99f9df096dc2ca7855e56ed0e26c6c79b598e26a3668d797dc7fc43eac7f6aa724e4d8103d6a88a7505d776c51808c02346a9b94aa77807e1d51eb8a56935dcfbad50f22ea09d4a743941da3ec16cb3f95177887e66e51748a10a272246fc02d4ddd45e914d14432e919704f934e513a8b3e51230ed0ab5b541d51ea9845239cae500385da40b97e03f0f71be155905324ebd738ee4e80620feab60c97205432ae9720d0c047cf704bfc766dcd5514db1e9f56de34fa2f9a834a04973516f13244857194f368f873577c3b1a6986d8f003cbe6967395e22bafd2f8a272976dcf54e2f92300d5149351815c54863e69374193f29dedf4dcc6cb56bc3a4fe14491d82f4aa72e181f81aeef19464d8c0587348e85ec382c60049a236964e86ceccbef3968a1b077bf47530c45eefe1e1ff590c1caa74fd0bfdf963ecc783df04eeb71328adb484671c3ad33046773155e08415dbb43eb8397ba572342c83ebe64337b5b65e29f948752314981428aa8efa52b9659bf75623e5b8cdaddb466ad1b8169a02f8558e28efaf35fab7c05368010461ac857ac534730d1fff5dab6bdaa77511de8f1300d96c6781770102b0a5cd31211f499aad6071e52c563dfcaf9203ef28b72ac2e3dd31a75956a3780dea1977701192e4857f2f26e5a8117fea8797520cfcdc1a988328b929d51c6a59eae091d1e35cae53319d0f0e847c495578ac225f975c5fd028238e25e7a124008f4da28c2c002cb871dc50de9063dbd7956603d002b4786ffc6446452242c41544ffee324938c096a2aa8555769e57d839461aa6665c5fe09d462021fd64513c12f4b5bee5f3713f190a6edc02d601287a178ed8b832029e8be89b7c8b5d36974f117de81fab5195aded5aff4f8204926dd0314d2367e2c0294ca24d56974b793a09359f6aa8b1bfe02bcecf42c6aae3b3c6206344b58284ecbe9c07429bfa6a397a4e51048da5bb2801200a1e82d4401f9fb4f542334ab6f34d21356e83079410bd9f8f98e010fd34bf17b11f710159d709370e9e5e33636c133c480107d5881684cbdcd5778494091c229c80735e283bebb70f15e14f0ff253fc0f2b52320261a80f12a4525f2109942070824f464302cec82baa8b0c22184a62b34ce1ee4e96c0b837923efb936f56c37cdea8ed7aa3a00a90eb40276771a00f7fcda373e2c839bdf68979d8081c246f9fb8546064a3a5847c58ce19828f39eb0cc6aa7ec79dd9690c8cc05d6c5d950187c34eb0e8ffc0a9d3340381bb64814f589614ba7fd299c0e5f221d99b6f71037b507a8efedfca0c9ec03cffa166511bbfe3fcf527a82cb9dd5acb02f7dd5f94c5cfae348d5c70362f560009c48c33b9199f45ec65c5beba94a9a9cf5bc3d4e2c2b431387169055f90d228a0e4e609528f7062a726e530e1cd66fa031dfa269bea65664ca524cdd1542e2395fe6885323b99e4cd7fd5dfa1e7685d127fc004924bde1a5112a0c1a306a3d77ef67c803cd2605430ea935357c162ff9181d020cc4a18200ac043df7960a664551fbd3480116a8a5f39d22f840fa1222048458eb68095855583de529b6192a4f16e01af8c049d57fee4466264e50380e088b0869c709f82db241437e0ab25727a40c8bbe31cc468ee0ead730b45f82edfdd1dec05fcf155797c980fb25237cb65a6e6d7cdbf7f08ce0652eeba9fa1347eebf00ac329a0be9e7405d91df03e0a68477d12cc0b4df5810633dde41495d66b5597ebf7cbe05b25a31c7fabe5b680bb4ebca3516be3d7f41102a8116faf9880478fbefbc454feb0f9bf3977518fa143e3fd505eda33502215eeae3c53ed54ef2c0070a040873543b944277fbee759a765287f6e1047a54d8b6c36fcacd003cc389f736734fef7221a7c1c27c2e29422805e200a6b0d953a63b7efd29fa8bd6c8cc7be1c1ecfad5fbf6dcffdc76387daedb70109bd57b5bd0ebc398debc75cce200339b542510677f08920569cbcbd316e43a9bef2af6c8ca02a4ae3dee98dcce4522e5d13301c359a67c9626947bc591c3a5bcd338464d4b44f259d12ec6a75b8ca4f8e61b8412f75d088300587d91e0bbb80bc050008c9ca4b6003c2446b48fc0bc3c280c85b1cb181cd065e56d891145d3827e8566c29ae4cea61632ac106962b9968f2151bafbb4994ecd231497eaa54b14413d86d39d1ff65cb69eaccf55d1760bc79cbb2581da73f16558e2970d8802b045f13e76b58847cbedcbaad3914fd899d084e620b97f12452a70219488af7fe6f1afdc48d8fa8a32e753ab50ea36c8e12ac6f3adc1e5140f3996ebe7509650cd71ccbb20d7ac3924c4c0dc738110286bd469c8e9c601567dca766d3729f83675d4ad87573f775ea488b825d4a018df4a0dee56dc701d7e5bf6058accda60f4313598ed6a6a5d5cfe4e421afb4eeacbe12685ea0b1112ee475771fcc428a48261db656e29d6b746db5037ea80300b6020b13f776466863db08b366cc444f78f6d221df0d0c779f9f2b4bb3d5f692064b834e547758e0811caba5407d1bb237d5762ef26818f066f4eb45b00fcfc182db445877bdfe92adce4b8ea2de2a77878d4f02e3eda8a546a50ba45142cd4d6c8b6786b421bccad78377f6c3b106c03a8d0ca09346651c3cb5f173c052ecf6166603ca7940e29cf46c3b8386d7a9a5650798c96f84806886fdbedc0c880608834a28298329ab7581b93d9764e17cf6457266f51a7243a55bc9011c42c0b61f5a73ec33c98aa58d5acd628915498138c29532f4db16206fb464750ec1f2138f2c6aceaa8ff2adda1361b602a140a5f8a9fff9344011f3bb90ccc103e41c1f4d9d2bc0353321eea6a907356d70162aa78a8246a53dfdbeaaaf2a4cb09ca3a88c33022e94d6d2f60c4b810b808112586d75dcccd16adc8fa94fc4e1a2ac541616b203359e8974704511f0163f30c7b83892c0c1f0949b61444521d04a007de6074d1736cecfd666f3244721827b1753e9e4b385f76c786d1da8c345bf769a4bb8b286d35fdf50b9ae0ab3b1ad7629010b148758119fa03b63154266ea2e3cb742209ee2b30336778ba50209853f06841bf3903a6e623df43329faa538a2005b809b2a6b3e38721b7c0dca353cb8ffa0ff68e44b91e0a5862d70e837536565ee07a40c772b65d961139f36545bea30cf37c790b05e8b0123369cf907b0c7dce0f587ca61ec530bb8065053948a372cde822c588ee6ab910f7987095c14d6a65746aedd723f1fa8d956d5765f37d07177a33187bce2c72710b1c2a018a7390e61d29802f2a57d2e1083880d067555c8f4b0ccac81848a02d69e1909984e1061f9996112ead4bf79ecff4364482237e62f693e63ac7304bab77eac07711fec1d7fa3938aa4a466a466515c21013a63f888528f3d493ceb76c19707ab608cfe1d3314e8a15d164664da41b9a5c7120f2138739c3d2f959c6238870b21c1f8d0510f3510794ea36e262c7a9961e59c84da23de809e3e962065912ec13f4a50e432a20f6d86b4bb7e93fa4b89db634abfabfe77a2bf87f972e924a9256c4589653705ca4f07c1c002366e049225bb2511b06ad20fc884f4c61a2d005aadbe5635b93bcda7ec73e506f56f5e62d32542c0348e450b926f45a70d52d261c86a844483f5bc14e0f5abc485d0c142ad315af6181dced5433dcfe0ea98e47aeb3f74417cdb22b29f1f549594a65433668f27dcdce5621763d6703ad1e99b507df81f4aa68eda47cad89fb36d4c638304d7ab2d277a571a60a63b07a95d94a43cf7124d2d965f4ddd5b870efecb4dd82b041be716484b42219068a05584e431a0b7a9320a97c5701b7703ca517ee93a26686a67ebc409a4b48e0ce62f33b9347e8bce47fdf3be0d267c14faa8ff75d932c9b9af5495f65fc5a4a7b6f530bd8fef543dbdf6a5ec288fdd8502759deea2344d50e74e8773c7c7cc8f1a2748eeabb4f9b4d6439c565ef1de675e98a0afe05f148633bd7837306680c49ecc27f0234ee2383041228aa4fe798d8af67a69f55d18af348736162ef8813e675e0fe4f2a4300f4e908001d7bd6706cc7c048d3bd536ddf632759c026a6650c6efe81dd5d2b392b7497929c753b1dc35bfc700680892a0a09a7d099124ea44b994aed20c5c4e86a8d07c12b5698b75e78ba3f61b5deb28df52529d554107dc22b749d9b28e486196a3074bbb1e6510834a1e5efd2d4907dfab08eafea450ada72c16329c6734c2041ab1894f00f235c5505626fed986522c0ae47d626c8b4b633eeecd0f14a1ca363f895c1a5e544072f8bc95db1654932e0688aae32706cfa5b23b71a73a242a742d868649277fdb02fc96ef5f3d4733b824cff1059e7dac409de74ec0b61722d0277e0e8adeff6144980ec1293cfba5775bac2fa4b4ccde7803bb6a4011d208c2cd07810eaa844371486940edd24a1bbbb37a5dd3fe128f9c11e6dea7800595c339d5ec5f835a11491f7fc0b3992e60adcc3d4b723a91da624991d05bb033ca714ac7f341d82997b6affef74856d67dc123628073b5882bd66055fe7ee2c06301eaf4ed8123b1f7db08773ea6d286bbb132d206d4ee8938afcded1b95f5645741e02390253fb4031013c350365ae540738cdbe3ae6e2eb0c3f73d2cb8706484882849375381702cc892d3001e36a8fe9bd330c254b4ebf9dd8848b7e5f334203894d7a842a3d396dba046495c006da4e2ba67bf92ddb44301f7bade51ec2e185d3ea80bbe46cf31a46617ee5c5fc5732469091603e836e7e38de899caa6991cda254021a45f8f8b48267235ab15f4f9a2a16aa41af6b886eea3085df3755e75855bbf81df73b8de70e59ae7047e2c7669915f2340920a86a482b59f3dfc47462a748d29e50f25c307a12c5d8fa818062e69507cccd82ddd8a79b6a9289a66fab3536c0c157940b0a4831b4873f08d4046eaf25d698dc80943c6e02c7da6d02a2011193d72394486a2f8d375d9a0ee93612d0fb641a48e0f180798b9a3bf5fdc17d6d97ad3d7bf6f599a1dcfa2e2c5c7df61453ffc0caa76f7db9f459a3e31892fa0be9a4b13f157269873cd985050989845b495d8f086d6adf7d644a6947f1d925f628f9218d1850b6c315d981fe08bd6e409363ca9e533ce073667416b437c49de31480f713996a40964f762ab9b43c39d4d4b5febf5164bda512f363db9c0270452952f7373418ca4eec07788039fc5260fefbf26ce2a6a3a901e36820f5d220497242e27dd82bd64eb05fc0f6b1824870128125ab7b4e8d79e5b8bfb74ce07ca8c7126a2592189835a05f95a5664430cdb838c3842f169093aeec2532757003f3d2c19e8b550e264b8fc18e82ec3489e4b4d22d73802d2b49fc7fdd68a1a19c82643c805ecd9702a27f0dacdece25365db76d122c3cba0df9e2a209b68a42032c9600d2c43631653a6d2ae108b2b2dd204b8a565ddafa4bf49619032326aa690c419125867b4e7cba9c64abd12070a87e75fa1c75c0d29ef7daeeeaa2138368f8179d65179654f6e0e2a543070b74ad85adb9a201be8c3dc90d9981f6015975bb119e3e6b9e270cfa48d498a7057af8924826de4c9b7d13edc7ae9af8c95d6ea7a44821b8ac1f1ded97994c0453a89296f51965e7f11906fe1cd2126c7c07b3598390bd2db31a6c6de0f3ae14428afdb864f93548b172b3d60d3b07eb980a3d546e767107d2f053ee512ae2cf6a584ced378a862e7c5f173f46fdfe0bf63ae323312ac30318c46a9e14d3085ab23ace5e01a26b8b8bf19352c1361926e25167d789282f9f795290d21afd6b5760c3f4799d6c91d0b6a3e4c015b768edb62ccca9ac4cb4b979c091ad3d164a97218ba3de118423cda69daf304d523931263ee7fca524714e55b1b6ef352dfe425857221f53ee594e67face489c69f5b474cf4123aec59cd67db377eba154d4f71613450a53b49bbaaef6f1b81e8f85cebe2aa46090e062129a784d91f018b3e14a9a45c16ce454f96ce01ed6ed6e1d7d7a71fe2e0bb4c48c6f0d91129a84b601e2c58ee64a98d465f60643e0c5e651a61d516241d0140df9d25f26902d7f7bb29049d873caf13000dfd744bc9f183b0c30522808195971bcf2e2fcf8c03f0b8657c3247c9defca1735f3ed270b05bf30717adf6c93c29bec708a1eb2672babdba0e682a2025f61d7daa2943a6b291f4f2b752d9cac274fae4569bfa134bb570d729d4fee939c9d07249a18b065f544a2c32033f732aa976cf7bc7c03d3e9547a102251eed2755c17a10c059d94b79a7fa5a59b06017d7d489a8b9e78a05849f1789320b63f0496aadcd9542d939ce6a66eda24d22fcf8a43c8f82d1e008cf47abafc4537227c461e1b88a86529f00b2f90185fa0a9feb0637b4bd619f74855dc26cdcdbc652271229ca74cb774013300f9bcafa93e8a081d0a5a16a7ed2e5bfa2711f52fcd05aea92806fd80bb2daa3e06c2501b0ace2609a2c7da6e92a4b452ce6d5018dce36156c9ce60c87632737349e5a06a2e770b5a730d15108aeaa80c77eb202f0b25d9a125c8489059c09457fd724f97165da69b9dfd462a3335df71aabe58677679d1811fb9f3c5cc211a117811b0034b0a9549a8094e1d015cf22ae82cfa053598a913162e13e94c453505588edcc9441045e79c609367b80a09ed0815ce43c66a084843bc93c44fd770e6251a6951707def6caf6cdeb76f5a87908e398351980036352b59873b35d8683acfae3220fec4ad2469642dbb557cd958fd981b2aad27af8797eeb98ef15aa9e64de9b96135959f2dac2173715465189d9ec87e0383f0087ec484a3ecf651fdbe803b011c2a225c5e673bac3d4fce4e84ee0363a244b072c7ad73b4c143b9da145ce5ffa640d2a21e75043ae61a8ec76a7fc8ae020803035d72d4dd12fda678ffe27a3fbc9824f4c51d1da727afa3044dea7ab78957f4a6edbd3aaf63a280708feb5fb261c15b250bd64c45f46fda1ea962949b32185990dd96e42d0fa96ddc4b7662636bf34657a7e3cac83bf5db02c0787d017154442e17b4b302c643482c4f56fb95f60ce8cbf81193e8be64e13e8e31a117a0a3b992f6c1ba9e5dec8025af90fab32d0d254bab97700bdad0b39392bd4b4986b638e906b074e9cf794b0c1b9630916eaf11d6c975b36fa2cd9ac7ef662616a5b36a92eec02c1e135c9892256228821f93012c8786becc7fbfa1f54d84413eaea4fbabec5ff1bbde5e02f9ec6a8f5589902de2bcd6eabe35fd1bf23d8566c918f8a7c229c6aa73a91e11ddef45691a5a3610c4420661eb319402f9a4b8e053415f9a609391eeef59d1eefd79d53fcc7612fd5315b687f4acc0d7c75018cc660b52746164314ef83e8d3871b5d2e8c45d256992f855b383304cc79d2c0407bafb6a78af7f368b94335b62ec770fa642e25c09afdd82494584079249bdcc7c724652c10c106d9028c3a44eab05150954117b0e871d8791d3ca2ea0dd06c1d584a22db1087f427d44ece9b2160208b2717d18dd74ad5cc9b48a8e998fd0058930f7116d29fc6c3aff992722f8339fc1bc42d2416b82dfd88fd04c5d881a47d00a81a82d2d6d58e46de27810bff609728ca91dafb550ced0a038a60ac5a75f4b718265992915bf94ec4d1d04baa396c6c5d51564786588f4080e3931d8c35f407e3de72331a062f7572e526f23d0c2415e204be611e3de34a650add90ed1ab62704a318153ccec214bde1ec2f5ebad0e6fba1054e8edf1470de6d8d2f15597db7cb142da147a7a39777e376e49ce7c8d39f105c9dbc6f3d28f702dacfa8d9b459fecb5d0818cc7f3d1a1012af6d45a7857a1ebfdbc6179cf01f51238c7bd71d14b52c196389dcf1e0c8b8eb156541154e675a6855de7fe5c664d7ab3d03d634014586330b97d49ff6e09f48db870d66ae50123fec369e25ad29219faf313435c61b82965bbef17d5aa8203365f2806053c09e7c515b421cbc4cf036b87429889751625e26af2ef84e6192428a8d2c2ddad50ccd76e513ff47e8bcc5c3ce0b2e7b1abdc10d06458a49df33f42ccf9fda5b76b1fc06624050075f9d00558b065b7835d0dd1b2c1f74700731d5b2e6648cfa38186f258580e56d3c839c4ab22df143ffd0d7d61140f8ccb37ab3ddec1edcbe113db03fa8d1e1b6eade2a410a5de6d89138af4fc7aa22d284057b62fb28b911a3bbb34570fd7155bb16fbdad5386fbfccae5174c2f089eb5e1b57cc49df0a991a6204102306228d71b694d8c0b048f64c0519cc069a0b5893df32208448fa7430f38def63f99860d2ba23158b90c56948d1565b04259ec927f99c010cae564fab1b1e871695152bc6e59678c8d6ddcbf24065463135beb82daf7e3daf6fb1857d80afb2fd582bfa08ce193d452d59b0cc4da34e61f0de99cc6b9002d6f254e7d236d57219109235dcb4d60877de4fa9bfe607c5d1ffa5042a2f3a65edae5acdde50edaac2816d85606a346e786126b639ab642b571e0cb5a97a1a2583bde145eb374229035e70435928cd13046c614901362bc0b348841981788c1e4564eb2a01041b462de1baa5f8cb93d7c43e58931a74bbea1eec3987bd3680e0b46c9335b6d2df4a5c64520ecb3b6460e449c09196eec370ca759f0929c4d21070c9bcc36e42b4119c3900f446542de3b4162d99be87461ca487cb59a0938c9109e88bd3da57f8fd9faa94615d17ea080927d5c4528241bbc1b0eb54878034951b2005a86ba2451370fa73a8eea94ad0eeb954a8b7d262f4d4546e2ce802a798a77d254061dc40afac47460a9b2f9744f7ff534e3eea8627aba32a3227ae9d136fb9e40c03f59e9f1d9e0cba863b14bb6afffdeef542c06be06ba264207f61868ec29a2f92dd0d6b543afa740fb3686969740ab3a3af1450236a7c21b4e296550724c0aaa7e899e61947547c0c952d585bc06ffbfcc8729714aec36c77bdadfc0ed7e130837ffe85ccebfaff921b8ade75f9cfcfc9337b09d8635c8cf85b9d69dbc43aa31ffdda670e0629ab27142417d9c86f6e34950ebe5d3f7e3ad70cbf25b6b0e5df896c1f8a2118a70a3a2029efdf9d767e2b7613e26d0a2d1a632827e31971a9021e0f55be7fee24da507104fd24d3475e86ac9b88d9f2b4c168b508c99d9c2e788b368adca1e544c1fcb4df38240a50f9d1d541df10b64029a1bd82f5c0639cdb779924d70329d8cf1cfb025728319e0107616695feaeeab7f8157306ff1dbf81029e905cbd41b3d3ba8d47781b545d2020180487d675245ce5324920ad14e73a32162897543760d853f9eae21cfd493d227f801030a911a2cbf5b298c5257285309653fb486ef9855464391db6dd147ab7b71e4dae580f61b1a8a46c2195809d8561de8f7ba68c81222a24aeba64872938155a52832ed8db98de22cf926e19c86079a402d1f81cceada67258bbb8af93c921a2fe7423ec20c8486bdf7876dd7fbd96a65a9075961d7456c8bad2f88c5f625a96908d911667f63f877dc649a8a6f52945c013a8f4b4ec8df384493da4eb1a6f679a50c331408dd937a2ed313456ee1a5b8c1adf0822995231675426e58e115356baace97fc00b6c058786b86f65154c1ab298959781a8e3dc6539f4431f299c454a5c16e910c5bab16d7c45f43f84ea217706db2cf0f667db966a5ae90b5362a6b8e4a90640bf602e787f52dacbe6ea6b6b1131555a17ad40c294560bc1e1dfd1a4fde86f402f3afb0ddeecbfd2880908db41fdca2d5234df06ef27ed7e6ad6733544bb61b499ee385a325a8c0d28ef44d3893fce176afa4749ee15011d07ab7cd72313d424632a2313d08346e91d6dae2509a9a96bf8b40e149e7fb27720fbed21620d91c03263d369256d9242104b123e51a36764354e74482fcf028a108ff5076c793bb02fdf68037419da1130634d91857e7756e7920f899ad4b426edfeabf61536831740c53f480abf46af138b3a8c98bad0e1b15f261461af2959af4f8a02a620967aafa99705eb4d220144d9082acc2b553c9b1391846bf710daf86aac7e1c43df0363e0987757d2bdec56946a78aaa97049214567017e3206a95fe3f8c5f2756764b67809b6dcc091b670453b80a367a3105c9df841f9767981a87290e5d7ef11be791055b66322f7f3c052445af3caafb9f29a8e5acc2060ab9e542761ea434405ab67b9a860adee981101cde495866aba49d8c61ad8af76fdd1ee0cee80036957b9cd6cb8f9a53e77e6722042f9bf1321aa9eac2862bd00e848baf9eb303b32c6bf2dfe35bf9426d94597029c1ce581306c897e7b0bd2bbd410d1ae470d5e70e2a0cab4d3dc2c9246036ee86c434379948ecf86b4ea754a385616897fe9bdc5ba7199202b408c975e82e7fcc47fd5ee0658661c60a0693782602ec5552e139dc0281c8d75243dd871dfb45babc5ccfdfcc8d6ae91a037513198140311dbde73dfa438e5c3d6dbe8497fad03a402da39d90f2ac95885d9bbe4e1f5e37ac79e4dcbcb31ee2e123cc41e2cfe0848c0bdf97130d033eca9499ac57ce2ab924ce8a17cd0fdd44e680f8dac0e330664008b9d56127476aaa4837833618518c29c191a5bcf08f73bab866d91a172861330c27f6873124174c2336c97c2fe38c9898ca76d83f28f30c9a3262d3cdc9e76f8bf63d37ff2e067b430c0843c61b422507f3e77ad0a651c2436515baf23f6606e6488d1b18cac9c25a1db68653a4a302192e44c228fbb5bc6db9f0c26c4c69c3cae91af0999caa5f69e885d945aea3c624b28ea6eeb9e89d1445d482463baa0614ff8802019a7ab9fa91bd970c1e6c975e67360d66ba98b5d8693293b348f325cb354eb7c45ac3afd9bd695ad385935269727583fa9469e9dc0d41692ab1e11748e6d41f68614c4e0fa6a7b21a69469dd41b052ac8a2cb79bcc7c07600c540978d3d02baae0a91e8670ba3c6f363b6da440a98b9f08efc98b0c6de7bb8371e900319cdcbbe5db2ea8d12bf4aba6c6f55bba16adcfa708b59525d088b28a1d0288c17e89d91c3f41910ade64c4861409148a6a1c94c028a2ad12bcc8e5cf2125319e24353c129492c3960bbe9b82072d6c11a49360b16d28ffa65d81e832cb0ffd76ca61a9697afa2d13b1e5ae6b80b2c878134dce93d2b47b2e501ddc638756e20d6e27bab0336e651e1c324d61c447888f553084fe5692f0430c7166e28ca272fb1695a1d3e654d268a3c5a555d35261614fbcaa8c66a64dfe10f783c1728a5fc014f423153959a58575142422a7d3857832ba502ab079e92f5f9384c024e1d42161923c78ed8282830c1e06397486a04a9e2e3b43c2d0271261547591da010bd319fe30b91fea4a0bfb7a74df7a612b1b9a293db3eef5e156fcd2f11d5f93e113c460059e35e726df92b956bc1c8aa615d02f987ee8ca53eb5890a5277f9f55033ff9694b2a8060cc35cb870bed77b1932887f6a2ddf7fd476621690531fdaccec65d422d64e3b7407a31964a95467ab7e6fab6d8c3c3bed4b2e50e91f85cd77aed3c609b0fa2e0d9dae0492094a7b63fdd8f22df87cc35abb1636610411ea205a8ea4bd64ff960e528d80a3c5d9ec63dec482f6680b7e9c2a4045030b32713cb3cbd2917c713878fefaa645ada16406800fc40e64226fb3236d1887fb0887e07f8620188f541d378f33f854baaec59eebf9606ec0c07488e62e4c22b3d6816a275163942632ce778546395d3032e4fe7f3daacf0b3c0bcbcb3c7fd32069198b2735aebd598db3accdaa0e2b1c70a952ebe21962ec1c7a129b9b34b8e62a50abd1f9d9d8be155875a1f5b545dccf47451c317ac954daf315227c99a0706191ff00ab3f15808f9fae0e9692b4301e540ce3b8ee61621c56467c4db3a21d9023267226958c46432fbdbe27c17dd328da1508aa0f8c2f447effacdaaa9732e95a50616fa7f9ce939c9f0ba49c4293ed41997a630914c2d3e613a7be5712ab7cfb6b0abaa2abc770a5bdf804f1d3cacc51c818d65131075ff553c3aeb0d2f69ca0c83200e0d8e841bbb8a3144bb6cfa1dc5f18ada1694223f6c3f13ebdd576452a04ad2e2145df061936d1acc867366baba3f8d50d9a4e37dd44598b2a950744c2d105a63addbe25d2c6c41a55d61661de2e296b83b544e9842330368d3c3927cda9c15a4c82ca7440d47d9ad85251f42407ec10fdf7ac1aef60b33709c76e25732b06d293d4565709b73f3e821e12534760f5602b22a9958b6368897cddd989307f5040f931f4e89e247406b3590a3ccb272cb469c910d2d3faccff816a55fcd6df1a32b2d2b344ee8af0722e5cce6732e73e6e6b43906380d0c262ef1d1b2d5afe7aec4e14bdcb9b6277bd639c5c97e70d90653e6ec7522c6bf9382e1b984f37885cc358f86d471510ca17261d3ec65a666d607af4925e3c7283fa69b42c3be8419e7f1b7c31505512f4ee74f8b032d38595690442bf14a0ee9c0264cfe18b0df618a8a3700088017a0e15389f15edb9a64f8b9817823e74eb9312ecc2a3e99b3bc22c7593db742f7d9e585dd544d07efd08afdd03e2d80d0acd024fb6cdc3bf4a7bbc3c66020ad93516888c3e0825c865629421426f2404f96a89da28b27134abaa783450bd2b9cc9c5f2924c0b6a7e5b6e77ab15de439141058e69fc6746e92cf4f58e68c83687cade7df4b054c055e2c5579985ca5a1bd4e9c433491756c4eeb645cb3001c7e9b37de083fbe58b30938e1d648e8c8ce6ff639c04d180dda7febb20099c50fc082fda19bc835c14e3f91431dcb415641dff44a999dd2ee427776efd6b4078da054899b251becca53a0b984a0a40433fba94fa0552b93561dbca3b7c1fadf32f375df52188a87e68d1b110263002847d80f403ac8196df49561e8829b920defa57984ac38795bc1f9af181944e482daf634fb40ace625f728d951c746eecf90fe7c1267d37a44cf80988715eae5c431fb63b4afa0e716a9a7647e366ba2adaa025895166f7f79418f676e379d834f4251c3e1e7ce669181599a9567dbbfa14ffabc6aca842ed9ba25a54fd55247c1955fddff5895c6c9549d8e4a3b784fc8a2bf6440b28c086840b664a7f3205795e4af7f22e6fb2ee947823e2acd6ad61b8c92f252fd278003df76b9bc71320f8c5fdad8ed55975c9e5ab46d1cbf245ccf38e94eb3f7f470423074a9e397fb364370a7eb6dbc8350eb4154b630a727db40470e4d07bb62e78779eb7d43b1034e72226fd52546cd3ce66455df72ebe228f967edb9980ceeae76df9d4a96df069f5802b0aab38de96715c551558bca6cd8302d31beef42430dcb85a3a4d87b0032e9f3b2da42f563c6c6fc072f0cee1562434fdc3748578552c65909dd4bde48e0c8cc01ba5724ba84dd9d5fe65734b8382dae0fc7ae84f8b2f70e27db79922eb2d7db5559950f354d44a73753ff6b28956afcd0d08c0f241ac5f1edbfae692016a16a6361ab782f1b42b5f2ab7a169a96d89dc2b11b84604a68ad83c2aa7f485a71097a66033ec8eb813523bb413c906cc1fe9dbe39493640198e0867108524ca8e7543a0d6a5ea5cc5d0ed96675a2d6bb43a6efd1c0d96b68574ca6a790770422658f754ce5b3a45337a010e3ddd390a8c3be24559d5e7b49a0c6b453dbf980f700b94b6481d495a1885dea42a2f67432da0831127be2495650e3b9a46b2c1eb175b55f8bba9fcce5e57c64ec9bad66c5d733cf7c6d834ad1ab380255ddd8f7fecc30a43b6e8eb4102145573505aa60ec875b5453366e6320bda32e71dcc6ac2bea7b63bbec70e3f9edf1ccf036582230e05b549219c566bb8bacc3cf351e89f2a71a9a00848bb1a1383deca2003742445f9d6d3f7ab569ac46dc802e25a9a32cf729aa1baf424ccf162eaf771412fe686d92b359930ff1013ee79b1ca120096d2ab06ef18c5ace923200984c40b97402806d66d31669dd846744f33bb73e0028fdad4c090f3ad83d1537c809f10b565db27b2afbb2e644bd7c226205811ba583881904abb6a2eaf63e53315171917b09ce051d01d07276205b1241348b4a3dffa24033115df6ef853dd608b5c94dd0d9404a13a7972d065aef1a7245f3035b2ed9d2c083066f0a82066f8ba69dc4634de09895eadc3bc12e687878b95d9f9f739bb3b06661200c0ca8f31621f062d2a881228148c2c2786f4a2a3fa8eb7122daca4ee143ecb57b1938fb37cc3dff73ca030d0e1facd9240d475291910b9465123168ec4330dc253f85d422d245bb05e9fa3d7844627216b9bdc2439735a84105722237b2e208a44df2e33bb8548527c806ed211e30bd0c8f8d86cedfca1b1d94c80eff40ad9b16adcef1b07e74dc2af07389ce44c037521f6e6c44a1aa47d825e5bdaa7c72507387bdffb169a40c6443165a28a8f25760a76c54fbb59d9c825aca465d5eced95b8b84345ff2209e2f3c3842e98a0d88aa9da2d8e4422021af0cc556f973476342ca121350ced7922f26369977acc0b20ad574b619191b592b79bdc3076d568d8293129992cc00c4d61b9133b16ddfc30e4dc04025c756f161e9e0b2fa214b790d70f516237a06cc84ad40a7d1b40dbd5bd92f96676274f4a6a2f3711efef22576e19de393352b86cca961e2cfc592f30c527946650092d7a319f9adba7cb00e6cf28cb35573a3ab3225cc394418492468600d52c4b88e2c0eb6eac4ede04cb38289172a4e51a8858551181eaf01d3e337603d0432145851d406f523cb60441e0a7b062919277ad43a59c2eb5f913153e8e34b6297a00b9f2e70acff62442b3e8f74462fe037e5cf70e90dae3970d7e33ba9209c74807a7a562da2a5e0839d97a269fda4089d40480d8cbfe2f439b31ad69ff69a39c9621a1dd03102043186c439c6007bb041667cc3c239c420d87ddd714f18ff2fce5bd86b3bbcb07af8f6dbee11c33749bad7d8859fa5e1716d83165563cf9f3635a08f6c722b310849c89d9e7969462996a447122f77cc9375af165cdd8015eb9297475941a0cdf2fbfee48e88930c601fa34592706b4de9d3a6599bbd99f186e0001ece2c5563cbd72197b2f64e9b3d5627e98648282fd8657b44d8777ff1c324dd3cf746fbc0297390c67ab4c6a447c9d19264fdfd66d638da97be71108ace5359001b05976b115c5cf90eb64560e6d8b75c061d5f406a30e40b9eb3ed51832839afcca19ea6cce7b60b8700c0713c86b9b2b62cd26b25456f35bd2ad807100fc72755e4db4d6ee2e3bf263aa46771eb44fce97bf164c3e869fb9cc2d3a232f9ee58d1f48c024cbee443f0ee802f6b42877f7731b5d351de57700cb548a082f7ec1e7d5aad3e54b9466ebb650a0a178909c8722899cbbc67229319aa2ba28927dfd4491d42a45741f96017c592defae69e0aaf8b0f6d4eab95a9b5d5718a7269eb6129189f045988fbe83854d3ece3d9dea62778e0198adb9b9300fde6c5e0f24ebe6253b017bdc39c742037ff611e40d697650f323d494ba1a9da468a59628b28018f864e50050c421d871e46e2121d7fd73c5d089f0fd73c96040d347618a55e146fad83098079b0771dca6c88847028911e418e7478057d566eca1ef217958ca25525cbaddc6f329c697d0b48dad5d0ab69462ba5d55ce9a11f89310c03881f82233b65047c4fa6254fb082a080382f4bf835c3048d1a81c735e2230b2c55d782698c91f44d072b5b9814812ac5f4b100bd7b3e7cfb2ab82a08c934460b40f615928218000bde5e8c46357e8ca69e477418d03dc02d278fc50d877c5ac95f09f7d324b342a707015f3793eec3322cb99f24673b1a669df86ed6df0bd4f99da0556a5617cde6f08ad8667f3c069bda08c025f6ba581e9fcb2f07e22eaf1b53f845c20dabe7ae20df958e01eef9bbeb33a1e3e711dbdfe8f45f39271069f6ab0ed2dde56c60e4254298f07cfadbcfe04493cfd12ca370676816329b2ab06f14c015dd5ea547c401e44941f892007844d2e0a426ab278f8332de6059bca46995fc56d65a3c263750ab24f3fe9994d27a4484e50efd3c6b8086c230d32d160f89c9e9e852110300a69a325b6c6382673e68d01e9b0cc390087d922d4faaf40f61000971a45e16b5a22603a6591443fbca94f71b3d0a8e26ebfc07d489401bb0f0908f62d6620124b70a32bdc45f1aa3ba48dff6ce178fb69265d217d2885a739e11d40deab1cfc7f74998a28e1b93450d0ad0a7478370e944098a4c8a15c8c726fdb002c01696ce3a6a0398c853d46ba8bae4839fb52000d91063d7d5b94654070335d80e9da8e773601cc1e20fb292cb465730f1a31805b9121c5a1e36b2b33fe2576cf663acb5271e4e7b5daebae068d02d1e8ff5fa9a414a1c544995c8fbcd5538f9d5448a734829ecfc62142b00a7b2b3ef5b0d5a89fd884904693b709da8b35add6558f6caff5828e7b6e6fb66e4d3e76fc6e8a621282385c4fbb34c215213de388bf823babf09fb0dcfd3e61511c2dd47b88e8a4706ab100a88f5d04748a233c19745844af82306fd371227a9836147408f7914119fe3c48d3f0a165b15fdd0dade16f4788757fbfc3f01f511f0afec1b59371210dff3a01187ecc809c0914cce84905386014004c0cd3790c392044f0811583eb1a532e8872500be0de49c24c173c2ff94943aec30e2920473ee886c5e0de48c942ac189d540fe1d5451044902ee8a24eb8b1a4d8c3279c5cddb55d30c6e5b42ce014171404e055d107f7458291f6574b821f292845463b09d2fc7ce490fa8cfb24a48cba06e35c208770e48cbfd69110764991d2f64e606647748bc3320cdd34fdd8e41e90624044812c20309d1b7e8c7f240929955caf9840c1e8f398f60e9f24b17bdf3ac6d4cb84d82441974a9aa119285d526419f1f48b4bf52d676a24661308368bee035ef3d9034a6daa4e7347c933639666c120c26560d5a47f8785e1fe3964d42519fc8f1e2eed90e6e6d0f28adfeaba0077f20e30a1adc9e168292335f8996406313be4900100beb81bc07a1436e6239cc4dc2ea72667693c008e19419aaa2ee0389e2d67e8cc8a14ae335c1593709a90da45c130d5a062241830dc40a481d889d6c12864e76edad67c475b9a5001cb3894d8f9eafca404225ccd81dc590171fc8ff29a02e87c00738fe910c7c4e82ffbf292455b206c8ee01abd6e1383ee5489d5e4924153ef8c73b4d5f560359e6521af8c27114cd9793107791419869114a49b9ea2e864d7b2071254e82dc71b0339484fa68055dc7154980b34859acd837c4fcee2fe6c7f68f081cd3e7334a1d82dbbbcd71ee3a6f4b1c9c88d51cb92185037bcdf65573f7418c2749e4401811be05ed481c03427e34e2155661634159c20a0c584b8156407a0eb5db786cfdd1580d385e9ea9a5c5611286d09c0d822a49fd58e7fa521d3a7f591e9b1d29a82e11a94503e7e95e0be60264c52109757af3c4181bffb2bc1d3577c58191f1d58526575acb6f48122eb3682dd12c52d53952105f75dc0343bad883a035551cd6d3b83b7f540be92a3dab4ed29df723efe82087b5e9d766e18c47a6507fe37dc222a07d946536d083259458b114a58a43cd420708cacf5be7d8c6a38aa0e7d356b28c972b54432eb2338ee0b3e443ce0d2187bab061f976d06d09377d7fe6bdd2bfad02e99a1f1cb6d54c1eccab37eb356b570528450ea9aeb153d95e1293c5109ca0435bee6b91d4b234ad5e5d0b0178268c6d019a791d4f6050ce5d51079265384ea52effa7fd97585087b1aa8d462f83cd4d851de48a85d11288ab7eb6ff547bfa76be81f9d2c12a1c61b8c9cf87bb668f009cbe9abc1ed36bebf716db624add14f0704cb2916937c943db93adb5256497a4ed2db79449cabb04c204e604457f4d8c04c2f8eba790144b26544f76d1cee55ad6b2bfa714ca5412c9b0249ec2b09543395bc063b7a531054439c3b5e7404739bb3e31fba22896252c4b29fab5c95025932eb52b6776d5b90b739d3c756e48f4594572fdb6e8c5f0643bd3a6e4af874efe3a896770b2277baa25d11492a7d28b36b5c996c4903c99c01378c20b18c37c0a51e4682a89237832f1893c911775f3d791f0ae90f769d985403f91bf7eafdf5b9ff56f0f698ee6b5994c1fa2199a17e86f36c19b965d5fd1286352be12345bb40c3b0adf4659140a5551a8d90920303ef6fa11181fe75bd90590e22d6f79ab2ed121348da3960ca414d184d5830f9f5c4fcdda6eb8d50f234b583bd1d2ac4d09a65064cb404a114d48d245adb58455bfe6bd3a3c91c79e2b0f8f1d3467b0af368ca48b5a6bb5355416b8c64a26a5f57a02f06fcce2b40c5fd0544d627802415067870c63ab8a2e0a0d95625a64f182fe7261a18b279fdd2b4e207c11dc7a61f0b5f7664ca5b491f588b3aad3b5c8c5ccbcd67bef2db553a0cf6b82180471c90c7378aa7dda16c62d560f8ffd87288f3d8b2d7b6db6409505f61ccb39e70ce60c9a4c5e4f08cc2531ccb9d61083b69a17d77aebad5e4b1d33e3f6a3c8939f89367dd61f45c4213714d85f5e53d1615e1de6b28b9ef0ea312d2e6a0203a5965732035e8ad1f0cc944aa638a6c42ff968f2d2a429dde433a39b4c9a938f6e329930d8c94dcee3c1cce9e433a49f4c1a949326cde964ca52b2b49e3c3da1623c1ecc8ca3cfa07c34694847e9c6d16c916a41fa18e3f16086247da6c54993267b0b8f244d09a42a999df49a9e320ae533d951264d8b67930685323790aabd1647b5b4b4b4b4982048d5969c332d673305a95ac6687866cad2b4b6b4a5caa4515917d396d6be98b6b4d6b4a5e5d9d2ee5c485b5a5bdab6a555c5687866542ab35bd5aa9549b36a17b355dd2f66abbacd5635af55bd73215bd5ad6a9a56f52a46c333b35a99f7aeee8a65d2b0ae8b7957f7be987775af7957f7f2eeea5ef3aeeef5ddd5c5777559311a9e1916cbc49885592d93a6855d4cccc2f8c5c42c8c4dccc23cccc2d8c42c8c5918c42cdc8ad1f0ccb45a2608b6c016e862822d107c31c116089a600b045f4cb005822e26d802c117136c81196c81ae180dcf8ccb65669a7a615cb28dab149a34e1cd966da61edcc9c55fb24e8599733937c6783c9871717131695c78bbbc737171d2c5c545c8c5c5ccaedc5311e3f16046850a9f797115268d0a7f31b3efe5c5ccae3ca422860a6f7189d5f4a422c633a342854953a1c2cc3f97d734fb2cff3eac856ec2a431e1a119da947c16da842515266e3693cf429b29454f0a3f61d29cf01466883bf92cc4a5389938a1cb8d3e0b73286234bc1de9b3708782f4180dac87ba28efa04fb0180dcf8c09174d1ad14d98e1d085b9ee356df19ab698e22b16fe5aac18ecc2b4af622e8bc55c98f654ac4579612e8cf531e617c6fac9148bb930d64bb11617c6ba1843814d0c644f37082a6b1a9a35cd66bd3ff186a2a63b003a8825cc637c268bb904b82cee00ae006e007c85cf6455bc315828fbf0a2f017652fc6dcd565ddd675ddd78d7993ec4d265379157077181380800318202686002c06208000c4c83800c0062b62cc98bfb8c4a44071c2042ce6e56ab1563131291479ba63ec348ee3388ea30262617a71df6eaaed7cbb09a7d153da5e0aaae7fdb93fa527df5e4252022af5aacc01bebd94bbe8d5e94aba12eda226902143932b3c6a284184b4bd64d367bef1eda5da456b58e8d970234b0d4a7a20a4ed255b9fa0956f2fdd2eea011510647032c306931f697b09d76796f2eda59e1cdf5ef2e9b38454cfab7375deba4824fadac55f95d9e0db45a18b5e5cbb78bb683d927183567404048c2669bb88eb1304fa76b1e7a20620da7184c4e341e597b68bb93e73ed65c50a13254344109a2147e101f570be5d7cd267f8ede28d7a7651d1db76d15665567cbb78d368ff7e38bf8b5e1b91d6d5082a456eb8923302840a698343df353324f19ab830c2d0111cd2ce31d4cc7081123f702481210646696728df1e26d1f8f6d0a8cffcede14f3d7b492f09c3d0a7cf5a6534f8f6d076d1eef5c25b7b16ba680592442112a263e26397b6e7a13e7309df9e7d17fd40ef08239094d868e186b4737c7b48bba8049eecd08842a5071247a49d85f8f6b036c2b787ed39a89eadd33af9c9b7e75e9531bf3d2369b47119e8db73eea29dcb655dd71e701885b083cace0f21a49d3ff8ae47705666b822820e1a36d2f66ceb33df2e5ab38309393422194d7492d2f68ceb3307f1edb927e9836fcf3e7d8a48f5b4454549bf2a13236ad4fe7e46df366d23d43643b81cb80379beefd5b78337ea697ffc78eba0adcadcb4f5a6f5ba06d901431119e87c35bc90b6e35d9f60d2b7e3de906fca77e94fab6375deb6631ed8e7e5dbb1eda21687c337dcdbae367dd6947cc3befd06d5b304edb757655cbefd22b1de7e7317b536ba161762e488c1021e7c39a49d6b7c9b8048123b4166d02406a4b4fddafacc3a7c03c0860d1a922729dc80d2ce407cfbed29f2edd7a74fa47a72202889c8e857655abebd9f34ea012128dfdeb8cef5ae79ba6f6fa046c3b4bd6fd4f3eb8f9bc679352a8186b11e63d7f3f9f8c669bbfda9274c95c1bcf599f5f1f676d198fb1ca867a9da5c95717dbbe551736c387d92df6e6b317cbbb549010828d0a898b6cf6ca0cab4becb0b63dd023150e2662789224bd090e615bebdbc6808a6f0b024081d557c8ea48de5dbfda2f5c8101c22f058d12541246d97f519d367dd2571fbf604f499fabebf52484339bbbfdd8e777fe29552e617ca972ae52c0b85a6f517195e5ac8267ee52cef94afa072067e60f6286720eead873beb267eca19f6bdf5175f390389ca19e6a98049113f60f0048a932629e8629f0078703794e3c1d783d841d0617d768c14dc4de1a126c16785e2223f48ba00412cd64d49d6334f39bbbabf80510d4b6054a1810424bd2ef6798ffcf5f2c85f6fad90355a62b469341aad96de1cb5071df729f3e0d78ad68c20c44e68a7e446a3a5d8c57a9b747171267c7d62b71e1a351a43a3d14048add71b1e3bee33f67897a5e7b18f7dd6c74670f41e7babcf16ffa12dbc8150cedaa73441a50c6350cec61bcad68f72665d506a502b5338ca9791b2752bf38e32e6a2a10640e52c0c7de12fb4d9debac551cecab730a1176b5f35a831599922b77a6db66bbbd5261e295555b5d6bed850ceaaeede930f65f6d383606ebd803d59b3f3d81f149ad5968100038f7d36cb353c1ed081c78ebd839b63f5c1a47c81bafbec25b80f9a33fb24807d366720f817b0075fc01e3441903c8523991a4d25313c8da6d20904ab4c06cac043540bdef01958e37140707e3969fbcba6cf7c440da74fd5b7bf6c3bbefd9553236d7fedbc78bc7c5eb92a636d7cbb2ba89e618db0c6936f77b980faec55991ae5db5db976e9da5db48b56264520118312828e78b8b4dd65d3679ef1edaeda454b245038f2d5c0014347daeeb2f599897cbbeb76d10d1861a176c48e8f252da4ed2e5c9fae1e9d6f77f9f45954d46ab55a50bebdf5fbb5845ab78b4e401742162a2d28e9d5d206af7cd75e0d861fb71e3e808042dadecaf599637c7b4b77d12a440b9aa86074a306a39fb4bdb5eb335ff9f6164f856f6f01b56ed4330705e57c7beba685d3b25599bafbce422d9b6f17243b3e1d3cf8604497b6b3767d669e6f67f12e5a3aa99100250a4f081b693babd767c67d6b40480e141a3842e070216d670df5998df019fd50f8765612eba79ef9e787e5e3db593c583eac5c95a945be9d65bb68d6b16eb86f5f095db4ee7eb92c4a7e04d1821ed2f6d5509f59e7db57be8bd6f4a81da153fb091a024adb57bf3e59b48b56231c86ac60e887244146a4ed2c9b3e73d1b7b36a247c3b0ba7cfa07ae6196678f2ed2bda45593c3d2c2f880146518fb4412adfbeaa5d345b194289911f1142c892b6af6c7d82be6f5fdd2e5a43d3194ac205225248c0a5ed2b5c9fd9d7b352c2878cb47d2564856405b4ea55994a04a99eb946ae914464f4ab3275c8b7abb24d25a41afa76152ed767bd689d024391cf092ec820852869672bdfaee2217dbb0aa8cfd3b7ab6ed4132c2a52e57cbbea4685d367ad42bec1df4f45fba96cbebddc953da18bd6dcaaf48c100409245618ea3317e1b362d4a7e9dbcb9f7a824b96f8f8f69247e993ab3235c8b797bdf2d6c37d7b6aa8cffa2b6917ede0498e27440d1b9cd8906622bebdac4df9f6122715544f5047e7c9b7a77a55a602f9f6149246411cd03798cba574a9ddb7a76c52b58bae5ae0ed2842a526c351da9eb2f509067d7bea76d1ba84100b68f045c9a18719a4ed295c9f99e8db533d407c7bcaa7cf8c544f100788e36d3bea76d1eaabf2010c7a100d958093b6a3707de621b91d2fe8db5140a85e9f558808b76f47a190b6a3a0345ad3761411ca08f5ab32a81bf5c4430c91f3ed285b9569c0b7a36e1ac53e1fceefa2200d459ba1741745814f37440b5ac08226bb3ef309df4ef22e5ad3820e0e392b5576fc2042da4ef6facc2a7c3b2974d19a1664f0a1e8861b1874a4ede4509fb9cab7933edeb79346e44f3db11123a48f6f2779903e7de6aa0c03be9db45d14f378e48dc47dd7a42c3a5c20ca01dd60246d1f87facc2f7cd7d8489121c3898d273b4849dbc75f9f19c6b793b48b9e9061c7119b0b9810f5a49da97c3b593bf2ed24ce18544fbc63c7936f1f918cbcb1576516f0ed63eea2b807f78ced23eda29508114782aa0cf94007a27467c38d3d3fbe7df4e9b384544f2c03cb482232fa5519057cfba977515c13aadd2eda4109507208d203131c7ad2cebaef96193f1f0029210523a2b4330cdf7ed25d94a6e8051d7e04edb0028db44fbc9f6f3f019d6ed4f3ded3cd09a74f5b9549c0b79b921abdbf8639c5f87693eea2235042062610491204905b9a7bbeddc4bba80b8b8e294b7e4192909076cef97693d0452b510c1620e9e938b22992b629866f3719356a4adb4d3ff5bc4137c864ca5519047cbb29a7d12bb4f3ed25a18b16c0c84e0f20d496888188b4bd34d4670ef2ed25df45718c0f46384a72a33344da5efaf59971bedd44bba8a90a0f211c0c4e8a62a4ed269b3ef394423ddfd02ed7cb59dfd02ed7cbd9ee7b31066ddf8b3108660ce61c86a258224da7712449142a052bb5940860c2a9e26ece563198436b7328e6d08a25db8b80fd15a71a339dba1601fb2bc8d848a250b8182a55abab72bbbe596bf1cedaee7b310645dbf7620c660ce61c86a2580a6dc9741a4d762451291bb3a9d2aa56ab14ae578b8dcdf0b358ad59ccd7c76265515914713aa570f5de95f545d877c7476e27e4e2767ae8620c82398760ce61288aa550144b2593e95432994ea771244fe3489228542a46c678eb281a2a75d33e8b64d703caf9744f52e3d4fad6394d4bfa0979d21b82b213a2b33b6f6d8fe5616bf6c6dac47aa881aed1db18cf76df8b3168fb5e8c41306330e73014c55228964a26d3e9349a4ee3489228548a44a55265a952ad56ac56cbe57abd5a56638db16258ad986b016f67b03083b865dde758fb2471b7bdf582a8aeb1b60049907090764ad17ae32c9a46117c4623a4c41289eebe9726e223950f4cf4b0965d09421cc3300c4511e88a93d36832994ca713104e7d057265e71aed951eaf1847bfdad1108672258696cc8238b200c338574e3011bef02b5b924e8436e019aca0b8388c8369b027297c5fdd9403c6621b792a8e6a5768c8c3c6d7ebf56a69c102452473f6c4e32510462c46ab1cb1d257203f108cb031c79cb1fc0ae4772362d96151c284150d3acbd7cae227f4f3e125e4e7f3c3b5386505d0c5611c6f31d9e048c8e92b102c3d1ef92b902316309187b5ccc66ca8ba19373cccd6caa271650104c926e6f7fbf9ca13ae1868e2572047fc7095b9de0e5699faf330738cc56231d37cb1b0c1b862c58a151b6ce0a2211b39205dd8afba193e1ed6320ec812600e481795453b076404ac8cac6e65a48b6be2d809d84e59811cf178dc2e56996a528d2d23bf022982f1b0965914d5ac696b801a74c079d5572339b420fadbd06b15e27254ce4a0ce21730936c05e9a2dd058bf962c58b3c70623cf468a0c371243b730a50ede505bbd814283a5c78398781a36289ed05059c14477c2e3b4c405184a6a2478e13447629869aac6022490dc5d0cf062cc9d0091a27b408b199d0c179f1e083d540826ba76b01626b15c1bd7c38817584e61a8288daaad71a42091254466cac114c2879ab9c9cd4129d2a7703f52ba92c318114d24b5111428551890e05e3848446aa906322421b71d0514aa23b39118f98aa20ad101aa19572e4c839d10614c09d4df88214302d1305a1e31ae1812251969b2e612dd810215c67d4ac784db188d0255d88172dc5b77506fb1b84881c7f1d9b908afe62c58b6596b2feac84c00b6c17462c2f8ad3ea002bbf0b533f744bba08734c8c6197a272567e0bd6679f417234fe7aab6c9985b10efba1747d0d32438c07bf0681627303f8b0f831b08709592933961c2122ad2ec628f1ed6b72964089110557a5882869e8bbe8003ec8e9a173838c138c106faa0cfe11c85e04a1b7cf6022edbdf629c660df1ddc52ec852cfc752c34435f2c34422a67a12fd449adc38282603018ac5765ec8d6f87e92e1a0ac168172599ec2019a1c24e920e693bcca6cf6cc2b7c36cb0db455f42b0d121079f283b2c91b6c3707d662c3d3eb01c10df0ef3d1e7f8ed2d48f50c7ffc482232fa5519fba4d17017eea0e0723b1e926f6f016ad495b6b7dca86788030e2d39dfde72d38263ab3236856f7ffd2e1afa68be169b6f7fed5e3da18bd6ac80c809384b14f5e400a5edafa13ef3d1b7bf7c4ae0f0ed2fa3d74f3d431a6878ebb3978f6f770dfd68175de97c24d10b8c9da8140b9b2a72184506211a11080900001318002020148ce56892032912063e3e140012629a524448389b462629100421884128846380310020420c01c628648e94410000642f7052bf026e5f96f66db77943f16bb70307f013e0360af747dc83df0077e0fa5dbc388ace2823e02cae385803089d0bd4b5dffba06bc32f14169400d8bbd26550b7e245cac05616fcf577c7710ec2a2eff40d10875c704bb94999c05c201eaed0bbc75fe870e32d4e1fd270cee1475589003ac77001f9e9fb210a5708f88856434009269cf784eef4dec330b8489f2cbc5870d4a03af74d2f53ab0009b8128bff287f0071d600706f0ec5e4bf2d113290a5e5130a6b20a8e837749bf51528f82d62a10e013dbef54ec81b2e5530a1210272e289fc0ae89b392f82172a40d2a118d6c6e01d2c88ae164ef12458e1e987fd8689806f6f946159dda4023282d1ac5cfd4dc2d9dbad2975c21303542542bd457d12e80db951346fd7074b7427a28e1dccc67ca66f1a1954321d6de785ff9b90a28576ab53d87ca429d9bab432c3e5b776d2fcad6dad46bacca94d4d05b723a1a8adcae44016f9115059befb5811bb627992f7f064b03b67357202c24e1273188943d89a72bd4840e2c4961d8fd36577757e71884b72d9dd698fccbade9193bc4592d6f46f45b4b7cbdd89593bd4f31745f4089dd8569dbfcedbf80b7e21dd3387ba7ad69c92596311a7ab4fae50082b735ce770219cee8a08f52cc16dd1af84a4d693bd2d7bfa9e78b497172bbf4ef6850d28e3a88d1b5de1a43dd1aa4c4e6a2c2095c854a6f83dfd3ea34543fc80d17763909e1ff0b574326f0f4715e289f1fbabcd325c5b812ab84ee6916a3d5ef9a711bd3324b06d6606bad984ea809296d74895e262084c24894d41c1a2945443634448d908141025a134042f52c6560c05bcf2ecb454dface7a36ac2e40b2928595ff188a4d60a0615f6c49b5049e9b0b86bd1d04c8ba2561d08dc85ec6113e85ba0f095c20f217234108579021c356f81a9d97a80d184686305c57f9f8520fc88b2a982254399fa77b84f4935aa2023ca2be8723396ebc67dc4b39595969ba07e1383ead0d8c57fe1c4caa944d35335db0087fd5cbccf4ae349a88844e3a7c9f12e76d1689a3b59d29a4dd0f9bc9fa0b2d97ec1dae2a1c48b2f609c5335990ac27ab0d6c4468f7f8952efeb2e34d346e276dfcb8f9ed5e40d6a28a68b78880f4186f1c2bb4678943524b544f46b5bfa6ef4de8b8bd82a79cf5bde7685035d2b742a66d6d028cc23aaa6584ab8c4e46aecedf39f26ab5a8620af244494b98aa98219f6065183d63d0728209737020ead141b74abd99a5a8d00a9fa77f68ea5567485b59c198bce657d39f0b2068ba87e71ae5648b2eaa5f5f6c1e1999493c8f28ffd9bf59702ccef2789814577313e381c48d8d5a5ed9fbcb75dab6a9da0315f7f7c71b80ca507bdd59f43b5e22a04d63e510b465b018e256c0a0f5db3ccfabf0940b301ae2e55ecb32dafe452df107463c49eea89ecaf6007d449395ed9460befa4fabaec2116eaa43ec5faefadc7ba96214842ba31410249e6828f2afc13c246183d8184040922d5ed0c4628e27803735c4a1daa0f7b379f226c2d3524d430d671bb02c295e544574da35b1ba6ba4b23d70d4b45adfda3cc943c762d3367a7923e8e4cf3caf5a44c03082edf4af92141caf1b3f37a9e30e14d24cb91cae1cfaf7a469783cd26b1be00667b460051e4f53e5c03c63af5bbe6c9f2e7e2a385a80c0c9557f3a09073ba072300810afd8639d9bc49746821950db9ead23ca8645eedc22578acbb53b9fe64218493144144563446fac8bd0c984bb9b783585395ae382bf1dde44ee7ecdb36b8ffb948fb33bf4968d64d32046fec3b19bc6bc7410d03f216ec2b32fc6f7b5485b104d0373561b48f8367be77c84015f65a6f9c507102ddb2c44b7951f5ab4b4626f6c374fe0326aa6ea88bae35667766dad296e6b4da693a99ae7dbc361ecc4a5da02e382c6b730b2e68527ae1e576f0dc53aa4f0435aa6022cd27678f2ebead3f788aef105124082604c3272c0a68d026e1fe1bf1c25571662ec6157cfe3b984028ca79b5794ba63296a5e2eddf9033886f2b43c44814e3b008b6df5459f557cdcfecc60a70593b610284fe50f4862d64b3ab06bd169aca68a2c0e5c94f87a799944924690a1faca9b52512c617331603eabd11fee13e146fa1bcd5c1a1d694854f8a643258f3d9e0f7637bc492814313fc2f5064059d7034fe233d537c038220d9ec3276d1809c3c4545e929d7967387f509ba2880ae93105bd5adec87ccc4e5a3acafa75aa1bee2d2ac18aef21ed13da0e7f0b58abf85954be1fc84977cfd6fa8d313eb84d2f01dbd803496882b99bd06cea74695200785aca32360b2b0bbde2cd2df6b2469de24d6131846aa785bacf833f2edc85e7663ed7822d95b3dc6a1b1a219af3f1cc79030546f292d90ba7e5f1979b0bcdafe4055ee56cdf5198f935e4b0047c1418f3aa025aa1c86ae1c04cbade33281542813e26e058f46248e13979dcb0bcbdf86dcbc52d8dd178ebe57e85bb0db8bf65c80924ca581ecbe29160575c641db0876440691b9f9117bea2cf2df769be4e2c08219c3020aefed99e827e4dc94f7c2cfe135600091dc1b7206df003352d72206fa4ab3049e4fe8ddb851c6e85a75c0b5d448d74bc956a37b2882bcd687c65d71fd272fb7e32bb7bf6e31df26358d852b6985a51655e73e570c4f9dca5dbe1358b6325366f60b1e3eb7698a1e148802f9427bbbe857000b1b631beb903819bb3c158c4aef4ba08013f2eb56b2800b89bde1c9d970792ffcc01744a9b44a1f4e74e5a8359b4b66ada88264485ab42dddb005da157bf75e98493225ff7ed9ecbe504a57d5b36a64dffde8593532cde71b0e7becdab5b3c1e7349f6d38ec996b979d879fa671760d073d71ed9ace83cfd03cdb50b84797dd3b0f3f59f36c43839e5d77ed3cfc1ccd331b0e7becd2759d079f379fabe150cfaebb771e7ed22864c361cf5cbbec3cfcb4f16c0d857b70d99dcec29fd078bea1cef6dbb747f588349e6f38ece16b57cdea4b6855b50dd36d59e2af97cddf0b2fadd8b332d2dfbe3d2a466e9e55c3410f5eab2b274642b5dc59c63bd413a20ae6a6944dfa07d4609d1a9e3ea2f29a3843e0e10d003ec42317923ce9052ab8cf872320f744a3a025d3f88ee901da65bedb341a0afadf191ee8caf6dce8ef748ccc86e3df98a95652b250d995175a9c18fee2aa1b195a57c747cfb2a26af782da42663804952b7763d43c4017d32451d4b9b6d6afec46eab15f0d62b4ddd1483a732ebbe2426ff1a426d51ebfc230bb917e5f130a1b426b4ace935fa46cea850b6a08130ff8581911dbaf79241a2c82ece1a1ac6a17ee44cae2c00db4cbb55e58fe232fc6b1e50c781325a29b4c9ba51a924ed370f9c1280620f6b0542a37600c971a9ceb7e0470796aab8d2e40df50489a53ca3a06623f02dd264e2869b5f1a59a513daf5eb8462d2b34a55866655d9756b7f186d5e41db2044605843c20e334538eaed6fa8c9cfa2b3d479fc1ae1200771c890357af9d4e14f4217d72f6dc53c618108f3d0c0603fe5adba8a06d9e9f08f59a3138f03fad8f1bbe9043eaf7f35881cb7be63f2121a8fc6e1d7aec4dab21563f87a3a8bafa5f7e8796d002fbad7683d522c03a2678252aa59398cbdd6e522e0b5dd1913037c4f4c48d08648934b9c79b865a108915937b841891a22adf74e7f29b29e2828fa40ca323cf8c81467bbd96e98c3a6d60261b03f3b40202b3b6bfe34d55b3ea9a60d7579280741ac4c6f6a6540ce1b89db6745dbf511b639497c5699d527ec4f3d33b9893df724a987e40593c1e1e4ed04eafdab35eca60e914d8be4c27d42767d46ec56e5953335f861d19debf62b02c4fcacea0837cc4f6f59bdaac8aa0e64eb1a7f904afbb81b06e8fec9400ef2f8e6bd11b79c32b054883d15ad60881c246710bec2fb8bebfce6dc72209476b45b311f380e7033d322733881373b7a0f35d9b855954290fb4c6cc6f1139276c6c5c7e7ce74534fa3934880d5cd7967cd77543e0d7c0c994681728ca0f18a3abba8c3f26d14336f56d8e1a7f45276711ee5fac7307460da68b1d436e12188dd7a44b47a282f9d5df142f0834b8753f2f505b41606c41ea3464286fd9cdc83ac52362c4a69283207bb52301d7f77d3f701ff1a6e500335b0484fffecfab7fb8abd6cc6e4e96dcfe54992a81f60600798c6760f453daa48cfa400e76100aad47de581ca534c33f3e231324b6ca1d813a1d6865482234ea073dd4a63cd47090170a15aa3146483370c938c4ca3ed10261dfe8bb7b471cd08fb55ea6819ebdc242ab7eda462c7e5e182b4fc3b741a749a89e8d6aa21ea53ec267b8277da891914e7cdf0b33f7d9565005a43f29eb500d778dde04ab0d3e688bfca76d0205d4246d9f0d174d47ecf2570b2f51764928c0e613fec1ef851931f4eed6253d5cf2010d43a36c141b8f7cdecd15a91554d25351a62eb04442644b106b8e3aafc2f93a5879cb7809e30588ef9278c9d6d368f00e6cc6c4224cc9657905845b030e178f1c1c937e04568fdb74256727b70ee8477a3f2efe48f90f42d2613928416e98ae5dc5b72441ef0c767450a32a9fac06f5d8e8d8a5f16ffb2a3b45aa29b89ac3cc7e309c39e815172f9cccc62967e0099051791ad4cd04f61ed49a0697062ff4084e15261fbbcfb54964b7d2e88b3fb77014af7f78075637c101a7034bd8b18b7b2df62a0b1a7da478d179a60a47bcb8d19216ff1c1ab1010e168b3684ccc92adcb1648cfe30d08fa3f7fe8aeb0a8a2c63c4a2abdb15000bbeaca33da91eac7fb3d1a6444690feb3a3ea084598a220b7a50cd1f2ec902f745b7c330eef26534ac69ea26eab629f24967c12228efaa4d83dec49aaf387916153543085c1a65dffc9540e539ec38bc21bb4106406a3b9cc7bf2af58ab8bd01445c503788c67a4b292c59a1fd665e6b66f428b9559b3eb95182892d7d49b04603b092baa376023c6e90b72c88e5175fa6999da0cc186ec0990c7183cb1681ae14b63def01cd89aa8fb9a8ec94ccdaf42ab4337294c54ec2cdd281fccea1fe29ab7a00777528aa938e6a4e1c367a9b1dcab337f617e87cee8a4c01048d050968f2d8302a833551d60c9888bd4606bb2cd91d5820242e7da17fec793aa2ffe8b1f88959cc787ee3f8adbe9a20f3b82e1fa00d28bab29e10b7e4d6d3b4ba423bb4ddfc9148b43c359e28c673ca9c93fbdbcb051763bdc9e8543e890d228d21416e514c0952406b4e79fe7d7bb8728f366f3103560aee11bd567157604e2abc85ada55034ae88597c94dbaa35b60ddf666f0fdd4972333abffa674ca73772d2b9aa6be8266e835acc559c3d3857fe05fb473c4472a8e4347b4b8180be384822c9eb5852fa9bfa75bbfd37abe1ce54b2fde24ae14da03ce1ee5ef626530e3eda7482323edf3cac6380dc4c747bb58f41759c8e169124dc030c0afe64356686c3d5c8f4086d8cac273068626f2bfa0d5e815b78aae3292e84f5610c7b17352ca3444295de79f524a2c1593347236bc3b57619136e0ba0c64099a0f374a78ff5c8d4d004e01a84286232e73905a638daf6e6cc8f7117750e84a1cd213bb03726de2a1cc6f203ae6f253cf08fddbaa807ef81510a8a2a383d2c06a19828f0c23aa040f9249d0353dce42531156c6a728c24a82646d04e7e71ca64510fd720d717401abacd54cdd82a0e3412bffc01fc7eafcffea97df7ecc8b56cac32f8ef0632a0c02739527e72ac5ffb0233d624792d8dd831ad812dec488f2bdb3a58793b59d2447026b928e3887fea701a7d26ce1411990b3c6984854e64589e04450c477a658e2c81249afe640ab6f78a9dd5cd4fd49460cdb3ae279e0d601f8fbf1f7fb5f7ef93123588465e277a457b2f085e407a50389ac4621625911db935e8a7238f8b69ada2f749d54f1dcdedc5ec92d6783f7d8f73ca3b0b2201aee0eca3929c90d4e4f83c90084b54eb8b221d3e06b64854e3d70687b45df7b9f7e527761ff7be1ab8db2335dc6fb1de2839f88da6909bf19db2602df0c44aef1b11ea4cbb6b7dfcaa9b3b89516320be67fc9ae5a54137533942c934b35b5ec7c3a0c8a6e1c09ac77e280df99d474223e41f01fce4c418e91411324de0c507de21f0f0896fcadc9230d13ff6e3164d09b1bee152dfa3c46ca025f4d31790b50232ac41508c578b98d9753faacf0bfb455a88280bf39521c8b4bb49cc5446175484926df44ef2b3ddb89ceca315820f2179632344ca315a880c1c50d06bab87eaf9e323314691c9abb1257e44dd918eec53b0cb18d1c07a39f0ca223931cf661a02e40ead2c062b3271d9c6759409f8f90caccf06949434cd187118bc0909fc2db6c19580a4c7392ab6b4d5c0f5ba5fed8029bd4d6e161d3dc5d77c43cfc4756b1291ed49a2cfdd346422d7fd89b0565d819ac93d1808dcc3c36d7f787eb93ebbfc27627f19f9abfcc292f6c50d014719fcea06ab92630ec0e0315764020b80cc3a86102bc0c1348cb31480351e8d588a0426cd682e34556d01c2a6142a74fc3081f2bf101b58a4f4d88bf4222e98474fc08fe30e641ad1d0dab7f6bca5efbc09c356afe6bf18762aea43b7155df38eb294aac3160f9d5aebbc23d37b0c5ed4c0345982ba3e9bb956599e94c9b66744d4cce91165ab4440bc1f7f21a8464bbe6d1fea886238904bd8e16032ee0d102738bc626a05485df1b5e5dfd2bf23c2b4b0efe4b6193b0eeea04b69506a306be3e02be1e6a4bf59940d5325035aa05604b266fd89a0c4b4ef746f9a60b5b3c71d33179604e98ca166466e5fea3bb5bf7f22144fca28b93029901eede1c341f1176854ed2db86c77204e7efbe0b76738742e15685995fc8dc368ca75ae123954d8e0ea9002f21eb055fa1bcd40533cf72cdb8fb2b9944ee59f1a4478f9fae8a18cd5a504df502d72a1b1b35fec6f27ce1e7044d90a96777106482406b6896ee34598673b47e90ab89ca29443ac1497e8dab340105b9d93d048354e3ee26cfc3b451f128e53849e3ecdbdf185e5531703a43e2dae317ddde8e8ec91eb8fddfbf60f80942d8df7b343a5b22a952bf1192c0b3e6b0817fa3448037e532fc02e43530b6cfebfc8a475ddb3844a3bd4cfdd237b0b0569a0467dc121fb1a0baef2edc87a0cf3e4c55309103b28d3993ccbc72818178ff5b4a21b45539101af685fddddb9af53684b81da45e3c8f9abf2f654180e0942faa3af262c703c90d99ec82188095b118325252044be1d2c59c6ab6f56550560349becb46a1e6d1d28494370c62fab344e5a45f4412151858c4fe713146b2e3668d36b736bbd4b11ddaaf5767fdb411d80fa8ed95f9f2cab9f6807c86c1314a37dcc357923378df7cc384296046551b7306c734f7a2fcf76183947b91099c5104066e37a9a9fb98adad13b3dad1387d69a11f714cf00e022d9b0105a9c4d8a0c2de708eca1046bcaec3b11a70768bfbcc67fa32d69973d40872a6ee3931dfb7ad4201d5c3f784177a1ab2624f99412c9024bb212ca4d2544658d62cce79a5aa33e1ecf4abe48558ba5a9f3fec1f3a189103f298a6aa26cc34e9bf15c417f06bf9a87fa9a4ff82573acbaa647cb7104c28b631e596502af55b5eecb90410f2fc85f26d563ecd4af0cc1d9adfe4f563e3b042ea4b9a80b072ac763db6033fab39bbb3b4e0bf32b1261bb6f5478ceb21b0a22232768286259ef76ccdb6472e3639ed299f9d8b1f110342268cb715253f5a91e1e049a8ca323e14488e4bd8c45c533bfe65c16c621430e43800c5876513417e7d241af2132d4a343b0c5307e81a1ea9601d4281463eef2c6e639b1b2f238891e015b877cd2c68405ed11a3a6aea2d10fe141fc1d73d78d350e37c394d4b73960ef8af723a60442504f3905bc048ef72d1e32a662a1fe3eeb04249f59b8097653721863636a17b1056f8d7d0784130ef59e3f8a6fc710b5bda106230a8056994b61236e425616ed3cde7bc6e5a41ac2c9cf645e574e08b4a0ae03f959015dec5a287d53ca97c8cbb438692d16f7a2f836e420e9431a6740f42843f8a8e1704f39e35946fca9b57a3681b428c36a83749d2e8922aca7d0e91e94e1f9b640ee7bd930ae2b2ecc21f955303225042300b39049cf63ed71e5761a6f231eece43cba98609a9f52ad79e10d7f93bb68c437281a6ecf484d0f7ea4b365adf021bfaf166655345ec38ed5a41242ddcd861e575e0884a08a621b580d3dee7dae32ac83c3ec6dd718592dacce44e66dd841c78146a9f10d7f1dbb68c61f2c8e99994fd6de9b90c42b2ffbc797df4a4f48670a3f1bba9927128799ebdc3de45c3e7d63f95a703235242300949059cf426971e5741a6f031cece2b166cbc09b580ca5bcc08026a8150a8521e17941295480813c02c0a32df43423a4386d1c8b3a9aa3ae49634075c8883f58b6937fd303b04b8e2d884fee80571042db66d09f5878e480db6bb84a9c3dfe9c2814d15568e6b7518df841519e7e60d297fc56d6bfd3aeb68c107974a23b82e19c76e02d95e04a5bd53fb4455addfc0ca13395b006078c5253536578ec1827eb9057ccdafd09defb288615c2263fcfcda92f58f86561017b1ffe0880d2d14ce050851077a408c153d6f329e4216c311413c2e8043d17ba487f04c5b93fff03fde5806ca60aa8771e78544efc08561831685f13ca65afa0157c536674dda2dbc9804f8db29ddb8304c7664b326a1ec29f34349d6d7238694f8858494ffb2569542156898b4801e7d2ba50f0dc8c5960e020dbff8c75aa8f4d8c8cca792ea83c25973d9cd9542d07cebd4da7c4eade983536b25736ac5e707980cd64af2dbb3a54a19ac2a138aaae92ca8a590f873b72bcae0514850b28ba0f7d5c51456e9a2856d69d93987300ddab24a0f4bacd2975beb1eda98442b1727a28d52b9538439c2c9c98d8e91d289f664d291a396f57d14e23098eb0b8f78b19d7fadf00a41974ec4d71dfdafbde8022c4d07369d7261d9d1e31290679280d08ac12cc0d10806f837d7cd179d7b2daee89852188c00f3871748c5162bc5b9edd2a2e5571e89958f58329181ccc8a629c740de2a0d07b5d3f300ff551869e6ad85be3207679b8278a52977de1a224d2d2a4f0dd8572c44e72d09d6d4a2f6c4f0cbaa6578de9a200ded544f4db64808b6e0162c9778b18667771b96ab554f9d87775abc15c88140eb9cd19abe7ff2ed425222295a1610f4cd81d46801d87569f753987d5d31923f0dd5eb12dffe4400775d34fa276fd2755de47f0a4d5c57dcb4f920faef77cd07cc1a00a28d2825b0a51903e0daaaaeea72450da9c106751bd506600887158568755157dfc04bd9dbec96b205244992244992244992248934488334ffffffffffffffffffffffffffdf10ad2e91f8390a93d84455c6613110cc8accb0c38ee259406ddbd6b66d17b084292360626ddbb6b66d7baa8c010083d314ee49160f52a2456a07b7f8d8926a80dab66db550caf4a42472cdb924794f5116a640780e0347d00a8bad2570700481c5a841ee8535918612884889482022ba01124081801489b220c28894185227f1ff4a10ad0ac301a4cc3dd75d8f55f6de7b3dcbec73efd387bdee3176b11692d5e2f2cd1124441a9ce00023340640c280f43e86de726970934dc616bb6d77d8229ac6874daf06474147a37438455867a5c56c59a0462f15a2467ccc6cbdf2e2b6e30a544ddc49dab8a393bc23045d518bb74bf25a7a55d54576f6de7bddd36a73efbdcf65ec3ef7f1d1deeb115b1b4b926af1d2bc618059f2ef3d01da4a7fd9e36d24f5b243481ac5211eca466476f37bb472ab65fd5bfa318a934753f08ad9636583827fd3f933e363f96d9b2fb7d1071b2cb48e0414e400adac6e585252df46b8e709e21ce69a873b5f127c70ba78227f9cef6863fb763ed7b62918eaaf6023b2140c9f8e324ff4b2e64a694ce933cf9cd3cc4eea932cd6e94652b79e13e015e6f3985ecb0448ba5528c50ceb775275918b71bc940536271894760bdb1c4787b92cedd67af225af601b4c1e163db9c52e8c75cc73c9b7f3d878e5f0c326ab717caf3ecf6bcc99c38e9ec35359f6e38a50ef55cbfe8310420005210f5d05bf483c2a8a2eede5984381f8364024e10b6a3dd8ce0b2735c90de360b0b29b1822a3c30c6109bae43ae0959877c05dc80863ac78283fb80d8962bca78bd48aef288b46e3be988ea14ab2c490564afeb656ca5f4853962564bdd0c280e69bca8b569e386b9d3a856e3a45d27a3d8317e727782b0a2a21e7fbdb2d7de1cb77ff242f45ff7db2b27b2459ec1e4c540c6197b2c57a6959579434738394873a39a55250a92187da979c6e33841a413c5dcfa588aad93b16d237ecf73ad9e0d08975a59f15adb60ebfe1a59bf26f399ee5208f179f21a5d7f4269623f7e25155580829726710fe19564383bcf77a264da57def7c7f94963bab30cfaf91ff4df1c4d8f8a9157117671e46dc46111d2a8a953eedbdf596f704fcb1016a386d405f40d419a903e5be84f75390e7373643f9278da2ab5a8d47af19445fc2fe92df26dc56984f9cbe275773767d9a3d2e67600cd478cf018b1ae603c021df6485fd39d5203f826efd8f1e308f3512e5063fa6719fa859249bc85d42e4de524a2965db03e7032d04de58011a340acc27a6103a1a413b0705dd706858e0c7cede3e6aec70aed12f02f2bd1aa7d292ec594920b44ad67f01c5a64fcb35a8fe98acfa35875e7be095b664cf4ade702acdb2eabba8b3af7a567944716f1745d84feb55e54ba617f1a0ccebdbdbfd2a8ab3debfb65a3a2d49df9d5d619c7c7355ca744af1cf11e33967c5b55e1b2acd0620331d374630fe194aee58c6dc7b5518af8ad89883d8041932ab173b8c31c6184f8c790c89b3a8d6c718bf8dadb56292679724c993730c261766ee2795381abd3831b9f0ab29da73741a8927d5f789277083275bf526e99b51092353898b261b73fcdbd68af1cc3b76055ae8a0492d7248e9ec1d3b46a3d108ac18e379410bbaf0c1c6bc04b52691c00d9250760992504010fc7e6c7176b0cecca798ce2f559d3ec618637cbf5bee5e6dade0cbf4f9d202a6318af8be6f7e934a528a63719655524a29a59452fa15c85efc833b0debbc7c43c74c261a8946dfed03350d6f18da4a4330dc29b6949286954c27faa7930a6a857ee5a9408cd86e4a8684826c438eb80df9f11952a3327a63366ff4ed4fd5294c4a5fb4d7e2ceebbcec8946dfe8033f4d0a49e10e534aa692e9645241ada056440d2357740a2b522c2a162d1a468a2e3f8e7354d167a161a44aa7709a6349d3e9bb6818ed5f0bf8771c6da52375a194cfbfb24e7ffe108a3b91f604f60c6ef2d21c9300dd3e6bb2ec26670c15284a894d77a8ac92a2935d521e4a29ee3ad8a4b55a6be782479725aa3545b1f347008c0123605de0f773678c8c2836fe92f2d8e4eeb2c49e5d34ba8fffa3e3783b7daaea1ea51e567d1d4b48ec92f27cb6fbb0daef771dd500ada28b38d8dc0912b48d8dc6ea9701ebfa38e56159f679a4d860c3662f77b7a1974eca2792137a7d51b6f9423a6b9ca8bbd21ae5a142688dd6280fe5a1b59420ec4ed601d8cbcbd1ba56b0f1f3fa1ad0f1787d3ca7c454d2f2d4992c4302ed3c3fb292d6080c3a58531e9426eab165b20c601b1bc56d7de3ddd8bacf1e284076f2dc284f5892a21ebba432054c56fd7247a0525eb2489062a8937dd6408a58ff6687f31d59b052d3e97bca4392759421c904d0b03345bf2f43c71852e68ebdfed4973ffdc9b5f50215d2e7579e6a270fab03cf8bbdce1365d137fa34a84921a5ba1aa1cf27d52152b86ff4393fa5499f158811db4d49e5a9402a4da8e6a8b221a13a9b61482868c811b71f1fdb901abd4175d019a5d910ab3fd5f6dc5bedc517779de7e5ec65d1e81b7d20a83589a449e14ea125d34945059c31539c2b522770a248d4ca0a4847518648031d1d1d1d1d1d1d1d1d1d1d1d1d4fc7d3f17472b95c2e97cbe572b95c2e97cbe572b95c2e97cbe572b95c2ed73de99e744f641f1a4643826596a2df275e68d8bcb1a897bf14656e63b2eccf21175d63c6b0bfb284d4b056bf4f6ad8b4911af602c38e2c0d9b50f4fb2c0da354b0346c050381c9b22208e058d79ca4edf8d7edbfe81a2a5c180c0da34f6068d8a42286bec7c91a2a5c920f18bac6b802d761c368d874d2efc368d80c180df3a60d52d7c0b8a33131314b74abd5126152c942083acd2db0556ad956abd5c22dafd54a69b5c2d6a8b5bf56abd5b56a8bd4a2269a02127d6a5bb81546c73757658bd55772c5a3bc23bc9b87f3d9f469661e5562ce3c3611de1822bc91b3cb70278cf51197b3cbaf86ba75fba89b757d34d42d677760d3eeee1044ad438028205e64db9f7d22914148c71dd5a4ce941f0d75fbc1d59912d5a4db2f5137548b0c75c44422c30cdd7e78a3baea2b9ca1db247a89f2c9d939bbbcb204dc16507a189b355f8c729caf96f27e5e7ad8a577fb68a9d492548b8cd22b6b91c97236fdcf138d3e1fbedaf79e0934a0d784f733494b3363e4ec0eec4a336bea47336b463e1bec1fad749e48a50d516fa1c02ec3d8ad7fb90ab79f50f02af93f6797a99af7b2ff7960ce7ed1c4f6fe86b1aff6d5be21b77e65bb4cd5b665d915ec3255cb282014d028554bd5b248242af96c96143cdd4b1a9a5933ea958fb81d4598aa957cf6c700d1ab45d622db250aa8456b1dca46dce638ecfbf4c35db7ae6fa26528eb618e6e5f84c3be5f8eb81117ba3063d8ff4c26a07e13c6623445c16ff4e5775206e4299b65d9fff61e89a2e83f9364aae6ed50897e7eb95141d625e2295be61e0aa8db0f75a66bc44d56acce785f86b46e471c0ddd962109ba1d99ccec44b73b08ddf22234c0fbfc99afe07d0b2fcc53359aaa8d369665a725d154d2be280eb6f7de8f38ebf27e5a645f8dae6097b9db4be9d7229bd27ba9ada4142e67a752b7512f53b8af66c457ebf67e8bccbaf2d822cb9965a6f23cefcb559f60cce833e22a39e250b0bdafaffbf8bba79fefb8bf9f35b5e7ec92cf16f58f453340f4f26c2d23ceb26aecdb95ed92c67b3be2ba7d8f8fb8247619c67061acdb291a915ad86e8d69f2cd5579eb9d2104c5f441a73eb3c6febce16c1049d6190debaa43355751a447a0ae5c71d418ea09880004277d3ee501759148d8a0cfa748a6eb004bd42136233d34467c763c426ab4035897add57a6eb7db6d369bcdf2d0d0501dca61ceb592f4f77df91b8db5d66a75dfea6c36ab4343b5763ca0d40910281174408d38d2e75320a8ab0e59567dda439f34873e9ffe982e5ba33fcc1af0e7a37e3ed55167f0531b6878bce37446b3aca0bc63b55a0eb2ac205cd08de626d34b5f4572cf262bffe61fe599cffc37227bedbc5627c0a5671adfd719f2f93d897f9f27ad24907f99df4a663e2b50c90a74838710f855fbe55303123c7604c9a9a045ca05b559c3427760c49396113374fca93ddefbe3867eefbd7766c52d5204ce04255574fce256f981921d3a56d2f1af2c20082642c02304153ce4e0e1053e5234b0af440683d23758bcb417fcf0e3490984f8800b5548115c86d8a578bb49069c3a534e9f4e9fbe04eaccec2afae612c18475d23e8498482266d0f197f40d165daca0f59899bdfb945b6702d0314e6284129224b9c122f67492c0a00a2110d880c30e1b07638c71c883ad75a8aa6bbe900cdd20c4221345d4d004c80b682390810e242ae6f8d1d38e9723fe95a42f5632673e5f58b4df93e404243088487efa7d957e8c67911efc90c112266a4ca0e01c700acec1e8484f2c09e880273070818c0551c86a3c281c90608cf187c4104028f5fbfb24aa7e45c6c8c818c204fdfe886655048a1c475e986187a19924bce188e7711109420c51e2080a7070e407304288a0dfcf320360f283112a90c2d6e40331c022c641b1580c068c7b0c758c31c6d89b4bf45b0449bfb81ab080a50643a68f91991246a0f4fb32ea8cd86feed2d0708314473801144100f1c38c5eca30a15f1b86d0efbdf7deeed61921f9b6c00328073b7482f001822117069774f1df7b2f0e1fe8f7de7bef25f5d868323afeecd331114588f8d058bcc5623110dc52260e0f2a91b68158b2831b5a8230824411db8eefeefd138bc570e00df4f0418f1e5cf02106b157993b0ed2557a29a3e33700ceaca11d3f8d7589327506f3120313d7f1e71dc506f97ee161cf4e8bf87004932243769841fd16f9a147bfafaa33f349bfff756612496245d69959048818fafd983a3389f4bb5ff42dfdf92303650aa128b72851a24c2114e516258a0e42516e51f0157da026addc8c774a4983a69c73ad19e30b849f10c242b856d1076ad2cacd78a79434683269fd9f7e919e44fa174417dd8cf1bdf7e28b71f8344a29e0d8bf909713e822fd1f8904f292f64f73fa37e30bf484d015c25708a34c271594cac9c482c0ca48270b7fa711f0bdfb29ea38befbc7bef809a1245b6866bd8b2d0dcb2fc8519f3b1457e94ea66eecf8e904ba7d8a1fdb940a830935d16a33783befe75f16e81c92217109f4efbd9e6834d237f466f1d337f4b307238301a035208eb520ce9e7e48e12ee993e84f223e6bce9554597900c5213da0a395d251b75fb3ceb7823280e6530f3c3e349380992e51060550029849705c81b4393e3be9d4354e4d523706aa4a4151225242b0d8d549bf4be88d161b33865532977841d479f904fd7e8b86bdc0a02b09f36eac9d8eb8934e4d704c21628c604a917eff356c4ef11a46a9e09f69887e7fd4b0d98351c3689397914a947e9f6b183502d7b0d9b322c79429ea6403aacb23c5490260ba5cbab576e64a975e92227146b7ae6e7f45d708b26130fdfe8b86752f1a26d3025cdd5f691865b22ab3c8c68c613fa56b701af4fb2d346c56d142c34a98b3a61355d7c58915a844bfef42c326111701d3baa6657d1cefcc76ec4e4ed7f17f2fcc78b17ccb4fde49a987f1a1cbb35eff930f8effe2bf7ff916bf828c857b60f5f3c5dfc58fbe695d385e98f15a3d8b2f3960fbfe12cf8ee0ba7dac03d330909ebce72442c490bea24f2244ecf40f8336d6e501fef35d542c5e522d3f1404f483bbbd65d91f9f7fb99fcbfcfff8a50c8e8d86cbff97f39601cb8aa9dee5cb19b44377623c58bcea4bbaf3c2290f0ffaf22cbe05122972047bbe58de032cb07c0b8fb17cea53ffc2652c8b8fe3f8a3cba81a9fb42c16ab61b96f5e7a1d77181cc7ea5b3e247115ba8e9fc571ac3ef59a9724c971acdee541fe82e358fdffc75d701cab1f7fc471ac9ebf88e358fdcb57cc73ba9eb98f15b7c1f2259ebdf2169fc4afd9b4b6773ca77be13ce771ef174517bec37754e3b4ac49a46304e0bffc023e547fdfa65ec007cbe3b7a92c9585050b4e6359b1fedd71daba6ab4312d8bda60f98f6a1c169e639bdac4d8571b19eb53cb585b9ffa0627f53635d6f18fa98595fac2042510bff7734794769b2f2dd08cb738b2daa04f9879842dc09796c7095f5a9a095f5a1e5bb336025420d7973568e6cb3a646332ecacb88e7b82faac3be49cf4c7c52cf7bc1104fcd797d91beabccc37dbf0199c8449d6af0f93bffee5910bc0cbbc4fe0e5164de0a5f835dce6bcb728fecbe002e03bd64569b827078097796f51fc27c9183cc7f0326f185e6e51fc27f90b5e675d4d46e65f14c758debb85ab384b57f368f56564fe4511b56d349b58f268369be83f1446faba3bd6752348e953eadf1c7546e5c3af7f4570fafa576796701abab259b387507899692cfd1ebb1e8e1a60a1f4e1abfc27d2372aa5924a89ef11872a4d3cda509f5f63b79bc65c9f8fc2382709a50d4ab1bda4c2672553c6d96b57199bf4f9a7b109009496899076d3e843f62f033c0ae3b4ac9451032cc47a89fb3000f73c52f821ffd9288cf37565d6f5b3532dceb244ff1a71fc2b08f8e1ebffb0bed19d3ec0ec20d7b487e36b9c2fd2383b8d75dd9cf716c57f9247afb8bcc5af15ef608a29a698e21ddc93b7f8b576b1d82c368bcd62b3d82cef5a6bb7201992fc17c5bdbb2059ce7b8be2bf47f368b61af67cfd9f1ecbcb23f7f2e27aa517e7fd54bcd3f512f7f46a710f0eaa377669ade29aedb30beab5eb826a9f63397bbae8bd1a76e9d1f4587a34da27c8c75b9fbca4dfbd48a7401fbf8d1d8df64563f7d4e33e5e6fb50fd9bf5e9c852b7b05b19fbd1f9bca2a42cc9bee2dbe0c8d0c0dcd22e9839199eb9c34df7baf78efa529e9f7de7befbdede818637c73a2e3231dff8b9a484d86185a70030974d04a11720942c7df9257dc10030b1d2ca1a107914fa804aff6c4ac658808120010007316000028180a8804a3e114c4611005fc011400106282427c66421ac7c43190a220a50c2184004000010000428ca199a26da301a003cb179de0b6584603fe857ca39cefb8018603c91aa8d0c0259a0a217f8ce70e8fbb061e3f54250cd3d9299334701d8a84199255051f9b66458915987f569df3917f651c2c024a1fe4f755353c09fadcb0072644b559914114a30022feea798217926625af1e0efce849b51f34427eccc92fb69977c9787d3474ca8cd79dd3baa5f15a2996c4355e273468c5a617b3f3c0f843643080ea739964cd1ce5705ebabeefce280abd23645cac5f47faf0a9cf95e7d5cef7ed77e1965df0d486fd3b7b32e770f767af522d9a724c53f7bcd2b7ef21986e18033c49ec7fb2b25121988be68d59af9b4eb42e5a5ccae516aadbe51783d245e7f3ac6da7c57c419e29cc3b12118dd3cd096255016e1ac32c4e42d06a2db93e56c67a14e3bf8acd636271dbae3066256cd49e105ce005dccc6d36a215f1b944eb0eeaf6e63ab327d4e17a658678444484dedf18fddf3a1e112bea979a86855625a703b859a0866046ec4b6965b8fe52c09e3bfdd61e0baa5a5409cec022098107254b73faed924a5be77d6aad1196c687ee5aca1d797894a7799b6cc46d7c8e95e4cb2f14a16424534c3b1cb50fb8ed0d3e5ad9a12a4a90f766be057f3016d2f5879d89b53de188e158de31119a7f7761de98e5c01ea83cff00f7c6552fcdc9b988c241c26d05842f6bfaa0faa0bcd091fa42d12e613fefe05b8316efd41da6143427da1aafed141058ecfb01790a8ed358445b19d56a36161ad5d5a1b49f05d5545b16e6cf7096600e036e06c5519f23643c7b2c3c988aca7fab06ce38b7824fd4d0443695ea59846c5a4b10233bad0843b0ab332cd421362dba9d0b8d4a1f9b06cf29a27f2322dd9ec12d8e5a69841651cd0bb7370e715128b83daf79771081dba3a2a83efeb65755516d446e2f2527ee6a3a6e6f83b6c4eda371db9e41d59f9c6d7b4e34aa731c01d582eba72359f9a9bba8acf8759ab73d337e41e9b7b9261676f1db4b35d7a976b7b7e3be68b86d6f1c4c9d2c677bd63caa7b0c6ccf4b200aa45a9190e0410146b4bdad2a0b3b05ca766533faa0edcd1526087eb6874d32615453d91e30463bf8e4097a91bd41cad7a71f5bd3f6a663a01aa5eded6fd6609b3e39c1502345dede7f50d18872c2b1db60633e6fb100be41185cd72dbdc8f626ec19ecd84b50e655e011b69792ad106568f723547b6326a8379a9830b6408babaa545b4690890bd679317e0721d10592f842b3d343227bb9a06458adeda8ec0c04a1a90cb3d046dcd5f414d3dd3438d75bc6214a418c05e56e24959a7ec05b2a626f682182a9dfceda959a6e1182d2cd59b309c1e556266aea61f5206afa06400f35c5d920919a226fefdb25fcb941cf4af849786cae642400d2f7a9e8757f94c7b1900f96b2e72ee9f334ed785ba3ec99e482849a0eb7ab6d9038db1de0c243f6ac2e8c8450d3e2c64e2b7bead748cd80cb07e25f437c744e6be00903659606537a4b063924129ea6a9710dce4e6d789a2ebb4a50f66a52d847a82910eed6ed7527188ef3ca86acec91d73234ea40342fc014f16b74484d4d1300a20ad042e301cc3f36907c99b81b2b97cdeb5974a64c7f78f4c8789a02a0b7ebff31789a36998da0ecf5b7a5559c0d36470b44b10ee57300be9705d2aa9dec1bb377cdcd3d691db807fb8ccf3083b07a67bcd833d615b1da5f8000e9afa9396ba584883deeef0fe04cda8ccb9eb8fd6b4598ea30443b15fbb8becc7b0766ad17f256467bbcde88842afa8cbd5cb87b20ab91f80f1ef3541cb5d4fd35c597071ce98bac02b329fc6d36fb592b4218876019e037f08895febd337abffddcb2866fe375709caf4659681a67f4b04b94232a3a41ba430db7f44b44c306dc9c35ce80a88e73a9e0674d723d474525a6a042d286935326b53308ba3764ce9ace9f772b80324b8c27b12a0016ad4b89e71560c6630e69272647d6dd7acde2f170a706ef33f3bb4d88d5bb0c3a071838d4cc7560f78145378040148c231cb6f3a185ce07e0de2a3b3509d7c248a90850922ae44caa415a8eed9a656ea724da3532470ec1ed4444ac7fd4706043cd1cdb6aa33d78519f23873aff1974d046c761253cb455e89f8a93213d6bba519b44db39c0f4a7464714ed863e490657064f52d4844fb1bea32dc02614ecc821b36ef1e870bbfd7fe43e67e5531eef6cd93ae1d64912061cff3fb5bb5be06d8510fd6724d1e4107d0a39d4ba03e61919e524e2fe1b1afa7e8f0e3794ba78dd0e7534eb35f0849729227e46cf9f444e76b9f810cb88b892bfa5a9222e42901517add00fdc8f485ace80d6394db0a0bb43941afb40b7fedc4a5149444f722f4bb63b1b837d1558f91fb01e0949882de2e39da4f90f445410d9132f3ef5369991aea67c70491f6a0bb21c60b72692185effe94e4caf2b80800b6d12172ef2f3bfd28256837a0b2ae19e7d2e57a5c3940d89fcb89f50e78e49c54e0e18676c8734e1e6a839fa50a4b699b90d72ea6e4cc934b8741713cd7c2ae16ebc7551a0a71f8f760fc1c9f50289d060a550affd20930297041b03cca05cedd460410e09fac4b5b0a97084adbba48c730c7aaca9c7841c187ac772480a77618972d0458ebef004955a09d243563cf8a7d9f7d5c83631e83628f4ada82f302425330ff118d95d85d4835fea74dfdb1002171bca28cc2f516d6eba20deb4d46f133054fa69efec5a7be2b2efee15475b74b7d5b404ff73cdb8441fdb0a17d1b37538ca25e08b26aa07ac86b3d7ef54a1047f0cf526cf70e5c2ada6bad47d2af4ae0eb44d3b56ad83b456853d69e5876982b20df1c2cc59aa2a65e3ccfd94c73f7f8f92db3e384a06821d5d707deeb2f53641e32543f39ad51c1dc7fd04308f0f8a9a504eda350a236e2d058c9e3777aee79e577378ea17f708b6c28bb1190115611de0c9d4ee23684391f3aeaafe00b1b40f7cae84bf8e827eac642319786706b3a80b545c6c77867a989bec380bf119ca37a7b70c974cae69eb709afc1d26cf139345a733fc0fd026c3cef3a415edb328047764f4e5eff14a433b34bebc949816d0301679df888075dcbc5b694db02b4d8b36b8b0eb6cf44341b5213b6a3a44cb093406ff0303a187a1ccc3b4fd944a9be9236d33af18d5dc4ac036f1a6255a638668deddc01484c4ef05510adb86951f5cada69a3f9fd9740cb990a552dc8c98a2a2705c3fa15781906f1ee67c2782ef5134220ac0aee6c92798bb2134cab1e8d98422f38d8191bd3e3eb0e3d3d7e7a126f039352925d5c475dca36ba40e42b5141cac5f384afb21368eaecb881c174a5d31b9260bcee9517810e4b41d7b5e7d443bcea2d07ae76c04480fc87a4ee9eba266e2c2f8224eda940e0825ab6e2e899353fb9168a7714da30dfa42a8e4954d825eae848d8cede5028b808b43a18e17f83e7aad1e0794aa834884a22c6fe8880b9551a674b6e329072a2dc89d3cddd6b463d1158668f72b0c4122dafd439629d0a2f18915a512e22f113ef981c6fd55841466949f17cd189afb44473c1e7d3eb3b24df9434c933d08262f809882ac03bffa04d943d4afbd2af97cb517f28e064646926ae0f972ea89379a35d4666c8f28c0d7524da07c6dbc295f4d1b09312b72f017b51ac162726916d79cfca7b89f1f0ad0c72c466ff6e5de3a612140962c3c69bfc26d9b37022a45e43f59309087dbdb6ddf634924edba09da8b916c3e9b307b7f5ab38e5a51aec9d931feaed2dc36906242fbbef8556222a96d036ef4a55e602fc6216ce0c21cc5173313f60354615a0ebedef7e77dd47aa59bbcdc98acb504773f9e444c3e17d6378b350296b7952f92ca31fc7f0f44c732911f8115880fa48b3f3240746566fe8194cee266ee13561f13bdf8500a59ed95d07b65f991dd833eeac6d96d25685f2fbc47887dd072101b688199b1ffd7bf1998222ae0ffd2f9f344eb680b20ae6060d050e15f7350af14c65dfdce866a89398a675584013486932595d15a3d08e3c617da84a6bd62982327da44d8ab9ab4e1c01921b65d92b86bcb93af8856aaa53c83a1f90fdeb9493e5ba1831545da6bd48c923cc81c1a88199866cac5b4c72102d3e0c4cd21b22c2c4bdc9b2a83d93a69cff72024562670dbc0303b1405a8c4c3fbfabca5be53da0bb61c50079415701bd8ac57859d5020e05ea1f11328b3f8ddf49f2ae5bac14964d8a2590f710219e7943e2f135a97145207d856e2dce46e2907ae2128dfd4014b551dbd42aeeeae8336416b077e0dc48045c06d19bc8d4fbab47824dfc73a9160ebcf779033b7b3121eb4f86fdf42e8f8120184ab85933011b4d7503d2602f76d6c5260b318d4838c9efbdf413b62302cdbd04f622d71f201d8f78115e6f355807e0f664cec77e1d5773003de5a826077024a84937d072716fbd91a0dfe0227c53de811dec1b454be8033a9cce757ac80a70a10f1f9de0331bb1e55f31c03c3dcd42712b2d3e8b386b70724b5821bfd9c0ba0e83b8724768560ac362426bd237d8a4a51dae90550b4162fd14963a5d3ab772f43e7488d3a9bbadcd5108b44dd78505ce5d93395576d930ad9020fc7c20182578d8d2d8b5530b6a0188747fbd68a4d7e9b656c0714418688b08c04fa0eeaf4f3ea2d0e1512f3c4367935ec5bb6a5f3f525fbfc8d616ba4ca6616f3460660634671621d0bdae951f55cde73c58eaf6eaad11f8b2a6d37f5bfb03958c8a14b5ef51977a8e5da1db58ebc0a9cfdb8760f7ab7e1b195a72e532449edf744bc3952cd911a3da267091ce2a839a16d4d8a57f70e850a6f84d415bca24e0ae316ffc8924e53b8b4916faed4b4bbda1323313005085163e96a661f858711145e2cabd3ecabe599535525e4ae15a77962105b0fc6ba747b089839b9ee968a2325890461c67db86813b7d60c15a689bc8d619a552e2aa4b06ac004d901aa3a11a2b2eace5d68640f19c3b08e93b75b52e8259c4240a51980ba59192efe2608082cad167bbb710404922c02e2f879619eac75627635b730865c6695d69e68714002c2f8e2e49dccf54d0032012123cae389f38162c43e149c73675c4050aaa963d314a1856cce2d7554ddee5a8864ad4e8bcd1e49e66a8fc135926602fdb427b2eb3e2861183eb5dcedda793a0489e5c1833d3ac8234c22f39c93bf0b157a33b43cc4a5fad4ff364bb949f0e6da0e8236ca872a44fed36b40eda073b607fde1c6cd52366d03370058b3dc64b46c71bc4248025f6f34882689006180a3616281e4e5b685ae7f90d9d012d356b5d73fa8e74c8200acdfe287aaadcf51fc0cdebd36c9fb9564d6c428598dc89b5654eada0805fc6c28352bfde989e22f2e69189825e80586d87a8675af1e623911c04fb024819313a3bee460504292b26de872c1e1821a6baa20a0a16f5ce59b505fd9c0036921185639f2906d806b3a54d70d4ccaa51818a84797572e84e9b8df1dff9d91e62093bb81a6f40dd26465b9518ceedbb27a4baeeffc72f16cc8ade3371fb1665c23951b9292f48e1bc2f297148f21a9fb3cff847be2a55c3248603f418598bfcc899b8d531d3fc4aa74b69cd4ee23d252cdbb010812882d606c718c5e48cdc29be6d25b59a51bd27e7bfc3986e386be0765de7ef83c710c92ad6176e2dcf4b8083ecd5073ae59a414042df73d247c4b6f4d680da64c3ddafb4da9c740610ac9cf003d816d6a69f81c359dc8600940ea8187428be4801ea1db73627f820d8262895311a8ea8e46fe896f0234db32dbfe80a6f243e30c3554812a3a219d6b85ae64245988b219448aadf93ee7c3897e289d2dd1142fd48ac3fa60d027c555dda24d38426b59ef673d04a3115cd14da9aac4e03ff5070a8b34e95ef34cb9b45ffb22df93b0547ea3f751b1a807c0cf6c193e1ef8ab36811dfe55b8f4669b99d0c4834028024e5311f913e2202ab4d06e0bf88b4228adf0a9ce078866fdf0fe8d9d487fce3c52761c9f8dd9facf136e7843eae71c1139413c0fb5c8a1d9f153e66962452ce70a259df932b8383629e1a4232debdb71e601eb4d0be193ec82f9e84e04a3fc4697b1db2ba7363b4f50f763babf86ce6f990e0f6adc6b8be143a209851076ff44bc80261b564a5d2e81ab6ad0c1ef9bde7290a868874416e53d544facbad78c2e5f0ee0dbd8c896c65f34b483b409806ab5a2fec9643d484caf1431ab7c7582d60a88254ef57561e93a14ab80cdf25e36be35f6472ea61a0861e9c48f7951066f6b2ecf28cb01c29c9d65b59c1312ee87039412f6daa4edd29b4fdeeef7f05e929a279eb97f2786802a37d0c0386844a039762ea4f89a6583eb922ecebceeee7510415edd4f7697b2d16d4c9151b73f2a7a0e08f72ea431b8ac0e8d5420ac7e0652a631a1d4fccfcca482ac18fe01a3d7b4d5b96e65249f090240e46db625a0fca77f3a77fb90efa203698a399631d6f1040d6bc8ba7c7cc9e87324b5ae14ea2b0bd23b4cdd55a99aebda72d71f3b8fd3935ef2e4fbab00c56afc38967c44790d2d023774306df928a120232bd77c1c8e3a1aa30bd8bc73c0277e5f9ae9efd8b891525b4d798c4bcae0f2ac15faa361ac8e34ba239ad2a7854fe4f018a0defee3df1e1119f140fd0d8556d973b2993c85afaa7a9993aea8dd76560d828d0a3b19a7ecc5fbca0001a821db5b18dc21e921f60b19334a183508216035f05f9f6db0330abd2e034c4c0252daa3c9f418f0a6e17a4026d7b74e50271a448ef78f8e190688f3e0686e88701d2a596e05d0d9646040a06ccdb2cd39b0c98aeb44c591be8a7d6fa47fcb9130a64d0aaa8e1645a077f8a17dc52cdc4e8ecb87ca889b94e5825aac6ed4a125d7578f344fd5bca7cdd5aa5240eb18a1d9c2f9cdae5f4fa619e41f7cb7a6a80d42c8e5e6f937d85dd1f1700d493598c5a6ded75cbddd2fda0fa0a2a804507f23edb00e0f67620b8582b60671382596a5987a91f8b367c4b943b5af93d47ce9038db16ba38197d4887c2a3cfb64b7bd1507fe741da8aa7a16066d096acf62e5eab33e575b8561452fa0056cb780755974cbefa66020f3b9199005bca59a76fbcace41b1e9cc88402e17c3f5cef0cfbc190a773d93834c5666708fa43533d250f588e462cd4bba6cb62d23e334c728b81eae02f0a671ce4c9561c9ed77b2372635a305197d81fd59a63ff38dfc6f34172b7663716a2d71eb0afbb44c590f552083f866637bb482f41bcbaaf5f5c418f17b912fa0e3e375d517dd83ea4aac5ce0e966a34e175c2caae57a84333a1e57c842b368c9e982ac512d9c7b629753b0ab0396096f7bf167ce5f996b3881ca1d40e2d06c5aacfbb31f92c551973d093750684f4174b0e85d93f9afbd733ccacbec15612e15479c57e62a8c5e149a5eff4c3159759c91e0d30c85bb2502505e418f34e970c76d10a28837e583ae638c6121e7a967f34f25280160d2662e55938fe34a780df43414ca73837b7384e02281fa232830a7e9c1260643203a47a5e3e26eb52a2ffbc86203615f9755e42799bf6308c51f5fc6f9104f42cbaace2a88b8a5f46aa3854a6f957799037b1906b304c1b4014080b48f0c400e90865a510d72dfdea81fff270d66837ec3f39fc1d69611c6f98f466e0c98c1f4a56dc38113dd5d7ab9189f4ff602509322698f629ccd724b4d1e36feab6ea85db95afc29bb462a028116909f209462e17283aa10d267ce9b992c27b554528a51a42cf1e27f60a50c74f2b37c96e91aa15b14cc43e6739bcb3c3f16f4904dbc10a3438017c1f3e2a8bc8e500604b96c8875add9a216bd37110c73efeae17851c5162b421903a1daf27f8cbd5aa0d6c1170209b6bb5c086c13b5ecec47c08dc895634b003316fc55b1d5ec6f09439b7e87d86f1a916efff779bfb3feea9cfe114e8a3efa43a2fb73360cde4858a07fd82ffdf3b50a317fce835084c8375bf84f8a6a00e6b623d8bb906dab23a558003d41ff59d1e04a6dce623f1ff34d214106ed1e45361ed072b08d196955029ebdd64dea16e5798963ba5ac76087c990ba6b58104329c51bc5ea1df2bba53119058622061fa606f7186ce89f018b34063ee8991e8a2eaa6e3c3af7076293e4b0d639dc5cb5fa9ee884a0d00d1193d4d2594779ff16f1618d880b0eaba31de71e94b4eed32ecf16fbacf7a7845dea7ff59827d7bac121487bd21ae2afa0b6164cb86960267736f248b6e639a1bf9b11dbfe915b05dbdca92076e560c7d73a5964ee1d1e152c757c8bd4740e5abfb26506af8d2cf7dba32e6dc0c2d058d2a2587a4bca998335b7e5bfef436670dd21771de99e24e7eec3f2688f5c8de3afa18fa02838fe11e257d0df8ddba25ba051cdde438e8235a2391ba13bc0f81050542b45601a8986e120abe3203a63642a31ddf295bb2c26a6e7780c276865b64711c5ec824f2bdb7ec6ddadd447147194a350fbf021fce3652128815ec48afa34946b1164aa043e15f64afeccc19dde6a78f6a4f7ccdf047a4c3f9b8826c1762b36a28b79874df62def4a2f2701cd6fade4d30ad7ef5328aa1811b77531a34aa62b672bfefea0eb5206048e761c4c9f3870c269e3512453715fe011a10cea62ea2dfea8400994db0601555c1f2d39f5756a940aefa2b294dd0d568f3282c3facaaf9af7c7b992a92afd165a452eecaa4ee805667661677291747404276f193b15cb667a7c4f4e0d930e894ee55db088e6fa6bc86e4b1119031d8252521d003522e641ab218385776250b194148ea513a6168f7f88980b3890b9bc4ece447aac290aab0aaeb8eb9200dbec4e858377201bbc56e7eca59f75c07f9747df5d64252cdb1ca8f223265e27892f48638f7b9a154ee0a7a3f91cdc817156a25186259e4957e3a2db4a514bfcd3da0c4128a19bcabe8d4bf8ded568411288190db0906d32ea2a1715c338b4556f1af26539d40305ca42f316ae158233e178660e68e25f693428ff64ff73029043c3f5161f985756edc7000a45277976838dd7ad5db1758013eb5c9c4223aa37628d03ba30c251643d52e30a18edeb6d78d2f4502a192c8c2c03d4a6ebb3b2d286683c53f26a706c0a93788fa07dcfccff94cd16be45f45aa195142cbafaeddcb3f129779c3e66435d42f6d1b52218bd38f31d1cbf92855e2815e6012e299d6bbf930e532e3f293e5826188ae71a69d1ccd304932eaa53266d2392d01682debee25c0a3ee596e961bddee981ac3ee9f47abefc115ec0f276812ab059e8e2f13162635c5f1f8310658d86b70e9d7e01242ce354001cf3a359906b58baf8e17cd1e699e7bb450639dbb6cb20cb50f186997de11339e46de0e0aeb4622840e9ca8ffe5e106bab3bb44511054bef02c70e508069d8d96b26d3ee9c8821936aa6c7c727c3d117053c2c3a80027d982f1b0522b4d29428aa9c62d95d8cd116a9dca7ce5932abf9e1c40c4c42b2d4fea19dd170c18f5a2fae8c863919d0517f102119e84a82fe8b3d5a835340130a51311a42d8e0d7f2b3833cd0248c8684942fac85fffd2bb5eb4fb1d350550eeb847232c7eaa9dde08ae090bb82a690b31af250988675179c3394876c8aca399f910c44034a8b86e9ea2df80f2284ef2cb5fd48d08a86566b2e8da423082f2c05768a86bee37bb7870ac05034f4f79563f169a962adcbc8e81f05b5ab4eb4f9f6e5140d29dd302ad70a8ad818056560cb5f4657cb6ead0d996e075c50d6987cf6a3dfc291642e7ac06922a6ec79e296dfa5e6fdde7fe9e3b5a2db22b6f6cd88477f3ff8aaacbf44aea21aa16b580f519c0d894825ab6a182f65a3248dea5299066d83852739009a49bf61f008ed0644655b1cb6a971213fece816873ee5938cb457fe8d838e1900b337e38b58b4271ce3c31cae6c708446d8537ff032466ff10e365c48c8e7d83c95684762d25b58984346d72857581739f13de6581a01709ddeb5be3433c9d21cea1be943119c013fa2d20c5da0c0cbf71b413ce6d3840e9fe2fce3ed7b381c0083d061e35183385a5e25b226d5080aed5d061d2e7257afd159e6780814170d1849d0a1c4575998ff82866fde050a4217004f648c62d4e9995c30f254f85706171b078065b27e36a392504963b6651d209a41fade257c83d7ac43fdf6a0e57d3b93ee3e7a0727106ebf225acf59bef56524b10ea77a15702a0aa89d877578ec1341630e371118c13ae4a0fe734bca9726fd3746d3f68ddbaa7e8d706c4bc73dd02c7ee099d7cb9c93d6642b09c3f53ab40ab5a01cb93e3b01ce3b875301cfdc8afe621f8b74b17f4f30dde391c66dd8a35bdffe580288dfe429959acf797ae730453f118430303c8ae5efe1ee1c2ea82268d6e982bf4609ed41361c28d93934b4ee2d2c2ff96cf6774e32bb87ba4df5b04e8868bff08619c572dd5e2225ddc60d58119fc6e8bfcf8b68818ce01bdd174ab1ab2aff5b660f0f0f6cb0f4c12f1a60a7378d3c6da255e79a4cd7507a2f5275b499169ccf431a85dc338457aa5b155794af76208e3dd89f4ff3a7533b4603ca5628d6dc368c1f5bf524204a4602e852e55d959d2c2ea568e0c779720fd1b414009fa4f28e9513bc7a5676b56640b983bc36d13f6d03fe431df0ce80df260ab58fee731fa86e71ee0d80fb3d46259b77f58f2363a3599e874d7ccd39d8601fa33dc69f5e174827ecee9cfe069e3d38fcaf06bf402463de18163c5bc44a63969e079bc07153013cbbacec215325256dd31e33ba57919f918c971cd231885e9f43069ba2842318012b1585b760e48f2df7fac85fde0e44d6452172b5b135627001eb5ba148a4d55fede7bb250de9de27fa0e182fd78d8dea033f7b731261b3cd120de471b9792c5d67e9c3f7fc194f749e851f238199b486fd09259e6550c74bfc5d84f39c20348a78096113f1b3cf5f708bd7fc423a94a80dae69feb6635b38c261ca4118c4c584b381b2dfbd03ece26b16282a7fa4f98518db0467f7c8de7d7c981dedebd1490165221e93c0c939326916c91001dfb34e40add6a9f08975011eda5cdaa5d2fa0f40e9764803372c21a8c3d93a3994f5ff238a5153273adbf368c4cee865bea27e37a8c85aa617249584bdcc0109fd43e93e26727d1be8458d0e9d5c73dbbf817c3e558b87adb9cf36ad749ec4defa660e8f923f80aff62861ba50554752ab146948214864b57c99d6336e0d0dbf21790e80477f0b68b86d0704bf74d3d7f97eb6e4b1a00991fe96037f45ca6f954948ce6c2753ea56c47713a9ca26cefe37df1b20e56cf34523e1ddbc39fd029c063b5e7e87f5239d425688ee3927b0b3b2b4f58a87c4c6acc7cbe433cdad36ffde8d78950c003d824804c6ecff9da73ce602ab71e1bbf51540d482618815bdc2433df52ffc83cee80ef0a4ffa37629c4cc5e36782a17d9ba5db170ddd489168d07abc8106918e673d961336b8df2d456b3c3ce185b37e550a6af76c74ac3873550a69fb94373911878830a307d30904f30f8b4177cf1a5ef734191d330bc0dfa22a4ec50f2bb0bfd4f0fc7f287e1941728caf058b236ae0703560b3f5b9a7ebfef656494f35afcd85934928a3a8199355a6ec6c157b38fcf37995d67eaf338410ec4adb3ab9b08827bc6f68298daf4f3427f32dea9c5e410e1ea4ea51bfb0d0cdc5f49f0bbf1494bcf6c9c8d4fe9b2399c874d8e58c896122b7331617906cc26c61d504a59f7950d1187071b846512856b093ab45c3059dd30d6b789d91eb64de5080d1c5b3714625582dd4998646de4e6cb4b5a6c162b0aa639bcebea58b8df34e3ca157479cd1aa4aa6bac2af2af22ec99545f073d9418bee842658ea204e0982a8d7064c619301cc45712057d604c281c82ae345c111cfc5bd070bb310ab68419c6a28c07bbea610b19e612e0a90e7ddfbf171dc75039322cb372cd7719edc5bb05c0c424c4c95b7834227a2a248be910819f3df9238d95b251881e9c9f191460d5279a8a0e4e2f14eeb10799b2f0ac2d4b77b90964ec9ef4696f745f00fbc2e9b5a6f6e6e0b2acd618601ca47fa65d30a656208ca5b145d58a6fa47b8753c811134bc8d2affc5a2980c769df38301c672f4b6e683b1b97f05ddbcb6639a13453b023ddd23c61cc3519b2938ab38e62ef99222ae255e06fd31fd7ac3bdbbf0dd95d921f77c3025d16813c46ca31ba38961c0836b3849dcae10f89947aa94696c6e313f3742fba6a7cb06d62586104da5f35cc51588e99835bfc5bcdb367017b8f4af8ce040d8d4279de3bbb897c374e254e32b50e2d338b39d5a4ef070af6bac2bd6a43512f4b932e94076a47e034a37b749738b6159af5d048d5751a24af879410f3c325e06613c05d8d8be99a90413efd931b5a316e31e238c600c37a5eb54cad2fa3734da5582e26dde05f1eb2e5349168508fc6fa922ac5bf017696d8c76806aa8195ef3a3007f2c4ba0903c785c5f55cc54ef2f2aa073e2cf3e78433c59c1642c65fd2bee287a8d72df0cc8b7fadfbd9146dc41825db7df6d8fd9bc058110c76115b4346c57c1b154bb9c6b9acd0f2da90456895a5bc8841bdbf96d740a32d2f946d579c2db8bcb028ba2bab322c468ca5379a291824b623730452b5388b08ed13069b77eee7b6fbd523d38bbe43697495243eb8df36d1f3bb77e9a992bb8d63bf1d5e50f7b07683b95f803cc050698cc28811029742e490d6f4045c64484cfa7777b24ea5165d61cb90907a830f56926f1ce1853fcfc5bf5e1f4173db6fecd5a968c51af59ef3d4a74d89efcc779f2828fe5809769bb47653eadfb70d09086275a8173b142d6fc3a3ed5d0a0131f7031f5a46e23dbcb131fa87d032b5aa6ff2d32bd3ecd39b45a14ee466688fa6bcb2a7a19df0726323522d3cdc6325e992d33b9988d37b3f0c60a3720c4bf14d2fe676edbdccc560578e21fe53495203a45746bc5231800014a9faa41e796cdcda937f79adee5f7a150075c85601b7b85e7ae960d00bc128b3d71f705d4d45d74d9aa79cc592108ff6c38c70be5c6ad7dd4594f6337e6b346bcac31d8b0a8f44dbc34aad6ac34eb5be8dcea5cad7d053118db27ff5c8171c08c85e5a1598d21bbb40a4f4c93853958fd2db1054307afa636abc0b16bba946fae8a8f8d2458a4cf5c8748bb3c6923d808deb40354a8bfc66a4450d94e3a43db63b0b63b95f50400165239556edfe8d9aed122815f89e6ac549f2b1c3b729aea4bb18e8e4a31a512baa5a1684e7602f88fca8b17bddc74a07305e16058bea3d804823f36bb577ee666e34e40fcbf4687377f587378a78bd57d87a7433753603557d4f671c22521ddfd03ffce614c7f3b2829f51d5ab3fc5b891b3aa23c54339df76fb547cc68cbd7ee7e8c6378068d08ae5b4b17691bd8048ef450f9c204def75a65faf2003c9579ef45edfda5fcf0a13f159c2355887407bfff20874fa7812a1de720b01fadca6826d3b59da74ed380fe14e6155d831c48e23aa23611bb641ada7f803e97309a7d4ab716b9a495dcb4bfff75570a07ec2172639bd6458d6e78893ec64393647204928ea54b61ae45cec81e01db2ebf9c811f3cd25caea9edf5c229f392ed3e59b4bfca50ff5b944be8c4d73652ac9abec976e38223a01409dca5e83afe5c61012c2cc7b4542df992d629d7d7d95d5c16d208c6d284dd1c69918e51777041d85f97040114619a7a2886725d0dd858a3d35f4669be265b984795c3ad4376430c95bacf3b647d25871166e7404960e628e72a3818ffa3608da21e606f595a48803aafee69a5b3090326e0e14017d74cddb25fc83a5779e2ca992241722699ce498f616b1772ba8efa5822417c4531462e28318431e52dfc5704b8b0a044110f5627849f084a3a4b2f5e246fae53e52b9d49b19d97fb4b62d64b4b4b4b4894c29c96c0a62094a09b7641ed45872306309d6b144ddb27f1ca88bda5f99938ca75dcc17ace1cf5edd307cda351e3e776ea7c47c176365a0b9b1a259d590eb5625c4bacefd187c418df48a3ad4b28bf8492ba8257df995d62c882475bd9f6a3cf4c9e5b9995bfae227ddca3e631ea1ae22d650cb2eeaa27665dfb176b94dc217887ff6bed32e95ff8c6952b5f7919f304f9b71c43cfce434724f7b234389e140d56cc950ee939e26b3ef46e6f13173cb509acc4ae6e1279789dc3ae99a7993912e9439d0093d2a293e29456b6ba99b65b0d2813e9b7156688bd719443918e2b22b3ef85c1f775e81d2c5fdb22b37b32fa81dd7453d6024d10f0d6527641ccfb730b63079f87b3f95fe9fe03524acc7d0a73ccb3e952ab234d73ff331756bcb3769ca6de7d2ff3876bf6f866c947dc6a1ca5266b5377d386a5028a87a4ef33ca19a65599665bf7367f6deb4e1229a9401b3d79e77fcc43c4beab72b777bae8aedb9d56f4d2c01bbacdf386df5320f858f1997e56599ad2aea84420a979bfdf64dc000cb9d53dcd9c41247f7eb114200c0c93ee69d0218001884f5d90800e8c1ff218000c2e9ff352ed9478643f87e100af1689ae448113c0fcc5efb2f1b5f1071bca723cbfeab01b5f9a3b72cdb91bd8e2cd39165598ecc665966b36c47f65db6655936f68b48f6dee308836c9f846f66db0901c0ee49a56a155fd3b49f09295091f6a55674b507bfa440da19d3e6058ec5dad54cc47f8b6966b4eb68150ef1dffe74b225dff2fff41a977695dcdf78ed08f7db6baf157d32e1109692e5a67e7b0e5348fd8d5008f7db36ce26c151c86bd888abda876190be48c0eb7dd9e372de97e0e33802feeab5a740d346e6b5a7434c9b0dc783372624b2fa6df5dbf6ab796716f3b45d7d637e1b5f4222acdf6c0c05005356aa78bbd788a8dde760a396d4a75d7e65645438fe06c7296dfbe12a99ff07bde9c3d3ae1caf3d4f9bffed73fc449d72d82a66dfa190ec571ebec077e6b33106be3337e6b310e73f1b47d5c740651ec7839ef7f64b2191d5cbd818f8aa6c99fdccd79008eb415b6676b4aa21ffde7bf6c8c67a7b64e693f05d519f76e1b0a527a55d2b7bc4fb69d74c088642bccf06e4691384f5d9cf1f677ee639c451c54071bcf62f8857b32ff3ae9088ea391b03ffea49088978afd9327bf07f380eedb3d1aa86b07efbcd1e0159f6c8ca364f93da27e1abb2eda4498d0b83701b321da865bf646cb9fd8dd79e16d12ecf1ed96850bb40fb4d72af3d180e497df65f2864b3a926b9cf2cf7cdd3aeedb5ffbc769e5e464235c9fd8dd4589b8c7979184b9b7cf9ecdbf562411d3763ddcc965cf97233a310bc59f6347b0a9651b327d5cf2cc89514087479cf95752cb952f3e16a4f8add1f2de3a45dfe9a2694b19166cb5622d4a05caaf9305bf48db8d4caa5da0f94cbfdac1297be37d2229a026545953e05baf452d1d2ad4b854b932c46bbb8bf19a594ae2e6bb636c9b654e16e9f8db6a457d334eeb90c498fab7d36c16de7ce1c3acfad137c93a69c4235f4660efdf7e8518267333da80428c184769548686ecac71e0448ddf904182ab87ee71360a4e0aec000622503307c98d901e3c9cc0d60d8c02a038c19562d303a8389516c1533ead2c4680b4b054655b0b630c27264c4c44c0a8c9098f1c16808d691d1cf4c11462580621482991e8c6e60a561d4e4d5258dd5135d74c07ad2058c15155d8a583474b1810d5da4605de9d2c48c942e4af4742162a64a1714ac6ed0c5042c1674e981a2cb076672e842036c8d990d98314618ab187041c58a29443088c10c8f0b903082954395551b5f4461f57cc1c30c0d5fe43073c417af21da8882073d8cb1b2824b07b0585da1410c9e6081408865040b7e8408c10fab30bc803284173b44e1850778f062033a1c99800c1609bee892451559663c10c5ca08062c1b1cc1920268a583294cb8906026092e2098e1818b139608b830990942a34a0eae305a5da1050a6ac045062c2baecc384982b502152011c42a8b2e7c585aba10c1cc09bac0618d2e38b00335667cca5899710356175bd000b65a620633403871460bbc28220b15212e4eb052838b11b060c0050fcb0a171d587dc1060776b0e2428c191cba6039b9220453cc1031e4821740b182991158c9420a952d7ac8c1163ac8608b1ab06cb143450f56443860f5c00b16135ab8a0a20914462cb1c24150102960a50088191414f9c06aa2e809eb034536ccec5034c36a8d33c888b1a00b4b8d2d4754b1da02cb8c0a98000309160e86f8c00f0b0d2d4ab092428b10cc08a1c50d333668d1a40669f8e8400760ac868a6660039650eda46041a95d132550623545edee7c620b115a6ca1b262634b14a02d3d9460cb0e636cb1c1045b98cc90060b8732565d84c1ba41174060c1012a968882158509295924b1aa220b227eb2a062258b284464d1031b59ecc032cac28615972c98b076482389327408634a17ac33b070828a950ba2989981899920b424d18616229e68a132d3012d51566568e941082d3b80a1c506d6901626ac571a3794312382305839e8620a2c6a40c506a258c198982101164988810511ac30b0a002022ca2b03c80450f4a60b1036b0b16369081051356511a5894b1f2228c991abae00116ac1350b112230a96164cac76704512ac195c41c40f57505939714594150daee861e6872b7630e30a1b5e700513d61369acb028a3883066a27431022c88a8f0218a151a4cd8c08a2458405610f1851554b2581185a7879d1d6ab021c80a26ab1ea481a50c56ac7261acb454ae8b2e5a665650c5aa480ad60b62c00321268e60b54005b7ecf15ba8dc551375bbf30998945bf6983d7a3e0183f2a23d9ae41f85a8f3963d685b21da21ec7c93a6cc8aae77dcd5b95f83251cf58891465f948255a21efa42b8cb34c04ade6edb52e772b7c7edfe706682809b1902e17888bc35e42d173a0a8a0119fd14f9bc42f8ac27ec3e1c4bbee1d3111c4bbea0f825c599b723c2ddd27fb34545f73af7e5ebd13b92fdbc32dcecab95b6301861e17823ab57fd683b6765f959753cf20202da68830dd3c7bce9f9865fe0cb5625c4f4306f7a98ff18540d31997ec74f77397c81c7cca6fee3d1967db38761857fd61b195fa5b23956605841f538de08eb57ff76c9cae630e11b2bfdfc75b3e50b32dc52e7aa84c4fc37c3207d637c816fa9f33dcc7f0fb382ea594b56afb2295b8a31e0c3848f520df99ef4241b83df23a24de2b7fb3974bfa72190531151d110c77684767882787c807c807e5a6573ac18513deb9d65735ac86dcf7cc9453abee4d88e2f7be7832f9b87fcb27d5a5f3610085fb6d08d085f36bf6a643d8f0d503dcbe6d857bdcc98a37323f31caa18c07ad537806555df802ecaf1f346e6cb2e5ad231eb3bbed331fbaa67d921320ce1ba17cb3a373324d25db6a5e93bcbcf63e943948dc16f3987ee91247e4721de2dbd08a383307a8fb7dcc73f187dc7e841a3cf8c3e34e65072cbd27992f8d59e8e6512bfa52f7da43d404142d729d1751a42f8d5fb3bcc8b70bc8fefef47397ee6fd298fd7fcfb9833f33484f049fc768e3127879663b39c91e6e0781a42b0a5dfa62f33e6c83c0d217c8eea6908e159218caaf1a5fa0f5e667ca99ef538c697ea77fc38be54afe3ed98639c194be311edb3ff7e7c3177d996dbedffd13fce9b0fc6b923895f6acbeec131ca8c6d63d02ebf956a5f40c0657b84fb2974b31eaf59fdf42aed779ecee4867e0fafa94fa908fb29a2a22fbececd174375ff62a8a508a339df0e624237e00ca965407723c23ea21aaa7f832fee40754ae42da675a44241a7a132c687017dd3c24e110a2a780de9f93f7088da7cc3e1f65fd7b108f31af0f9c5a2764d91cb650f62882ac6f078cb54aaa2a954c520b4984af55b3495aac8574bdb8f284b935ca401e1835665047cf1459be343062a10ba015fe7e6f35450fb8a30111623456d1106bb313c4d32a06f4e416d544ae435a567fa29f0c5712ff004be2e3f88823aef0752d48e77c3610b9307bf88a596a7a019f39a0c8d239f1d46195d460d5dfe5390d79ccac8c1144243414597cd58a30758766eca93d129768f765eb3c8091a40c1b37353a27c2e9728a04b9ab144d04d890aba2c74f914f429ea5a1884deb6b5c99b2e56ff0a5145101874794a2d3999d8d7add8114744d1418a142952606842072952749022e58a141da44849238d3482823c1f728812254a141798c8214a941ca2448141941ca24441030d345a518a6ef79f1160e6eabe6c5dd29fe9508a06b5f42376a3b6b58821661e3b2a4693dd3303d50035900c3c7463a5df93b850323005b7e3d19f4659407fe80fa5326be81011b7fbeebb27b7fb9212ddcebb1dfdf9e04ae51087c9189a3c32aba449238f35d9bd4751bbf791d6307974f4c5a8fbb58336b8dd977568b6ba9fcf51cc9a1f4cc5edfea361b6811606f34a196a5c5a9244edea5cd9096e37af9421c6edfaa6fb39b77e130e7a54f587b7de8f9b2eeece5b9690ea31b134d975f5b2e5a12d8ccaffd197d7d02a3d3baa043b51f94b76a169436ff70e732eeda2ef4543dd77d7df7d0bf14df7fdea8e62465c74bbfe01ea62b7eb7a6ed7fdbf6ae55acbedde1b1968e4229aa4357c0324e3ba66762bfbfef9756454c61202691bc4bb7468f2e8fef4a8a758ba8681e8503744abd09f1ff03210ed4cffe597869e031f359ec6e92d92c97676ced6fcecfff09aee93740b4d3aa3eebf316af7f376a0edd0fb19aa50fa2a4d7643deeade1bbb27895129d067e94ff7f256a79534cb4d1eaa5fe735ccd32474dffd093147de91a0ce5b7afe8e8cea5ec9aa56d034ab9aa27de937953ff8dcf410a7de1f4eea4b7b6937a52ffde7fd0cb90693c7a8f240cb2dc9e154fedca5b714321493875b254d721844e7a6bcd57dc9eadc154c5ffa22a692d5b92a154a253b3d4546e5eb5ec73c4d76ef597e35d97d48a57af711983fa60dcfae730b0377cf589a87baaffbd95c96dbfdc7e1100e6a524993fc2574df792e73ea524b1ee221ef867e6420a85cc5f5ee274d678fd022aac375ab082184e86890f1b9fd1f0e2ab5f47e2acf0fdda13dd4c7b9b811e94b8ff9159e36dbcfffba3ba340b8a7dbb66df4ca7c2f8fb4b55efb6f329be63333f364e669cb9c1ee7b174a31289fb4847febe9f7eefc88b5d293fb79f04e3c1bce5c14cb021182d4d427f36c21471e00bb5ebbccff3b29f213b035d2ee2f2835c9ab8986063cf25c1bcb563448281655c6160dd21735996719bb66d32dea66d945219df34ea6974db4c5c80b8504b9351d82448d324fb1fed813efad57e60aadc7e100826c88335a9430a0f46ca42a2daa6819c0bb50ba98561986deb86d846241b110c8c0d3c273036d0380dc606d36686e00b550346b4e7f26b6368b4e7ba4f1bae4877135a1208b584c9b85c18a86bfe1bcfebce20e688c48f6ea6dd6c9c229a6097d9825043759f5b8a3ddc48cac2f3bafda49164448addfeaea4a3db2ed4ab59125193503c98a7c52b6a57e635e2b7684944deaaa5971a371fb7ab8d261f93145338fe08dd7e1391036121115d21118953be39e9cfef7f34684d3fdea2a2962612d16d0f66d2d2adfe300442ad094602819872786ef63c961ebbfc9487caffc31989c74c45db68823509039b3cd6a825890876fb4945ed2a6160b7bf9f44d4aeece967df4fd2d2ae12891bf5c3c0a6cde4c903a4def49617665ac891647c5ab18febc29c26fde527887ab13928145b2bb5c736b22b992d7fced9ea78b6fc0065cb7924820fd80e9c2eea7ff47b0deafd51f07f796f71761ebd9cecf416ca72a8844fac75f3cf7f99352fa78dfbf93c489807407d017cdceeb911e66f504f43eae6a53f8f3b12387b72f79771def09881b9514ab520f38cbb6529a79617ae9e4c2045a8a7139079a7abf4f30b305df5790460ea284dd6ac41fdfc14e6014e3fe769ba72ccdaae6f72c523986cc9dd55ea7370826578e773cfb9ba2f3b140af5a52a0412f3df38c51bffcb9c768d622025dba685a48fe346254dfaf6f2ddcba3621ee651af2403b3e6c52ec91951e3c9fbba18908b2185a607c729a7ff4c4abce5df8d6c45e9270fa07bde6912fc95b40bdcde9fb54c9b5a83faefbb9fd3c6fb922d9986eb8faa4dc01372d8e17a0e10debe437521907957e5ccf507c19fa1129d2573849225ab2dbbee721dce012e7d5388c363e04c2e1adc46ee32880a71988829a710676e2981dbb8715ffa97d30e39dc70fd57df2a1b73c2913770fd4919981ab065df72c6905e50a851bba671ded2c8239873f2d86902530397e0fab30f7300fe39a66bc824db75c29027ede21c26791a97cc1607ae7f0d95c0bc84380c25dbc6ec82e394d3a3460e9cde3bd9250198c1c704f66276a1f7bb011372167e3f9935b638df4f056e1998a4bfd8fdf6dc77db6fdca60a7178ca136d706110ce8283b8dc7f2ccff36e5f5688c320083263fc7339cada58cee258ac66b1582c0e0047c6e5bc4b3ef93e51749f947a338b22fd6676774a29b54924c1e140a9edea447929d4ea4ba12a88aab4523a24524abf3633a52b208000028818ea6c72da211d4fc83ca94000d194da12bcf3d758630d91320840df2475a899cff63ccd385283776613ce497d72e7cfc950887ea896906527ccff7cec2c4d54a43978fde5adec3d75b5266a52eb572dcb0244b4f4f522b565ebddc7894f5a94d2aefa03beb257e624eb39fdf79d46bfd26456f22af683a3aa471f7ace8ce6231fcffaf02d8d25ea92c65751ff14157d9676f567dfb0d9af17cab35773a76eacb4550d61b63da4d15aa596fd439dd0177dd2a4cfba3ec95f50d02074a1a02188f6b46b42c1848842f12682766ed945b309161cdd1abe9957d6c872b3ff28e8312301bf4f0367c8cc2312f0f2959b7d160ec91ca88e2acd7a11f37ad0d0b5ae44934fb85cf1e866cce3ad8cb90429aa65fffc7495769d3efb0ef23efb1e6a97cafb794dcf9d5ec35299879f3cfb709fa9b89fb7f4d94ffbbd8c9993317be95069a897a8ef1feab6ec6cf440253d8988662c7072a71a77366104cffd1ae43048e6a4c9ec2989249246981747ca23441347d493c697073ffbc329cde511061a97bfcab435014873462d2b4d096a5969d028a2081c7c7c7c7cca2470f0f1c1c1c707091f1c7c7c78c0031e6419d8aeee2c1909826fb6a26017796eab646a6ea46260b41c41b5a41b38adf094b4c788f3916fbed1a86833129a36daede7ec8c29e806ac68cfc1134b2c01c6b4e98cefe44d68dacc49fa4637f296c73aff2f8540b48ae2bb6d57c64da8c9feefd56d43a6a26dc85bacb9a66d42ee6278bf6f9b3572e7b20179a552e9ab94036ba52613185bbd51aa1e89d5bfd963ab374ad54bab1bdd548943d50d68da68da37fb88868cc140537487e43123e6eff3c982e5f68833efe6469307df0f6aa825ca87a68df69dba7c3f9e60377205275732713e8540a8a1f2a74220db8aadf3b4c9e87bcc8d7494805043dd5a503d7b6da49f0a815056f7accecab011dd58b93ec433d4ce82a89bd0f79a36fe9367a865754e91f52bb75d6957fb6da1deb2dcde84ca8d686c4ee6badd84509785b6bed132dc6016442de9e55e91449ead7784f14d9a92ce39c11e0d846cf2d46d04c95c514b87c160d3614344a5cf1de6eb1781f96a9578cb5fbe7e9197af56e7aa50ab5d81f4a82f427ad40ae19bbe48f8a6fa454a5f6d7df18bd4179d7ba78da5496fa21ee2ec10fbce2d9b0706c6991708c7f5d012e4113f442a886a82a1115c0fc5f71d6e8761bec330df6198f34c1be63366cb6bd88ad9f20f40005aadae2b956e7035f5645b3179b85fc12da71e988144e37570fd06d5b9b8bee3b0109c0183c160a89183a6b74aad5241fcfaf386140e5defa92932bc89d82490c4a8fe0aa954ef4b3f62da70005ad7e31e8759cd962e867643759dcb712653e98b904ae21711491f7e11920d5fe77a3355a109e99ba0bec9cbc37c4fbf89f6dd7ff6deab38eb30981714e97d67c7ca60514b87f9ce85c11cc63d5e63fad2bbc897333dcc17313d4ce95fbe48e95fc4477d11f151afa332123ee98b84dfd38f6a98b7c4d18dfc34aa5468127e13f14baf7363facf349ebe34925e1c511f8e2f37a571de88372f2f2e7063b942f8e2af203eca2eb1c2bd6897888fb24b44ae0263471ac315481fda1c9d1bd2cf900509a0c006222ebeb8e1c615c227d9252dd8e92d87b9db6cc23085f4dc7f1a789a427ad3288edffd609eb1024df6b3e0df82af508a1969715345d2f3c76191d9c41037d35bec83b4737dae739ce59e264516d4d21ffc23f435cf1c363f063beebacef3bcee6bf0bb95274393cbbd92deb9dc7763d9f908c950b4a3e3f3e3722d5ceea777b38d36da38badd735bc7fd763b5bf2e52c9824632e04e2d932e77ecf8d74f4bedc97405ec8b91a11bfa5ced5fcce3bc3de993c9a8dba9f7cafa9efaf4249def2fdbdd5df03c86b1d5554a992122adda7fb047bc09eac749feeb36fd0148db9a5fb749f5a06b351d15e6e49a953eaa85bba4ff709f6f0b4a24ecae3adf93f3a3bf56c5c67eab8711be23eaf047e9bbbbb2674eb510866622585eeee4324ba93dab6a03bfff4810e56f9b5905e34a853b0c7554b2f724a3dab9fd79d7c4e4a4f1fd8280752a7d46793eeee314a80b62a1b1190f933d3feb30c8dca4fdddd6193d217a5604f25a3f2670ff6b84ff7d943e646ab6478051e915250f91d097d01990fd226af53eacff18e26be495376d4fbfa863fb1b3847b1e1b39e63422e4f0615980f5a78df3c6dba17affbd0734e69e7ef10f3e14f4c679f3751e0924fdf7dec837f39b3cb97352f6dcd3af9e9e7e7923436929d79f05f6c123e01e268f0c487f0f491e8d29afeb3e0f9c608a8caa6524b98d2cce4a59f09633ce2415d03873062c380a93f4298a3938632716e327ddd62f7ed2af17cf662769ffa399871e269760729459e382b7d8879118f79c6ec93dd9f3e532fa56ec4027c2e4d15db62ebfbf4c78859071d40843114920e9fd4590f4df6be07bbf02f82b90feb32c804a2c09df13ff7b5fc1122b46be177f89f7e192efc557f11b09df7b23a28a2d03c2f77e85f03dbb82f89fe5d80a2afd19ea00c8fb216ea2ebfdf21a94ed1f37b11df9a67f9ce36a4dfda860ea21660df713bd441f71dd53459847530966d46551cb09bb40ed2ae7fbb7e035a0f84e7a7f186a70818981a9012393995cffaf544320dad710c7543acd93d881aa6da49117c7b08472e4326293f42c0923c91f4de3f9b27f5e8d826923c5752ad3a53511b37fd8070a3c82afd1493c7fd62faf61137041d4215edc3fdcc3a00b28643716f3a6d67d3a5b7fd0e59b34e5d74e79e8728230706044339d217220428408912c5940faec83eedc139ae4402d391e24bf012e7d122e7d26b3b2c260ddcfef85401aa4a1935ae4cbef222899b8e7c625399caa6f3e13884a835ee6388ecbb22ce3a9234c92e983403f84e9d27e96a47861463ec98c7f744a211047bdcc221e3eb0e3f3025353303156fc7d4455a95f0c082345ea06e935f326b4a27e37c0cf0819d089aa6ac57dcf26a1ec9ecbef43d59fe53f3fff6923ffb04f939a36462dfd59f09a70b6e8d3e7fa5997fe0becd298db5b0624b3a6178e4f7dd5e35c68d27facf9bebfce1aeffb53b3a6e33e8fe3388ee3b8a7a1841bcef2375a2e62986173fc6cf5b42e740e105ca3fad3801e12d55f87efe04929cd9ab437d4fe1e729b005d332769c2a545572efd76802e44fd6035e79c76ce3967c6f938581366ce395f509386e638994a55247921f875dcdcb4cc7b321791ca16fa678c762b4ad56c103330481a1b61bb389bd326e93bb32c03b349b36a72524ab3541d893eeaee6d1dd76d27202aff9c933639b52fcbb24c039b9c5c966538a4cc4fc0d4e26e5598a2720803f091835aba4d0534f9d7bb73ce2f53d49694669452a694d2cf9c86ce3d419b13e7e48cbe8f2351e5d7b22ddb4a1bef0083043ba2ca48f8e0833607fcf0756e264d2913ebcea8f3bfd40df5a444d7346152b5e73f057ddfb48ea45aa052f7e9c5d5ec11ff79bf70cc993de0c18b9d1b992bc27450671103ba9b16e82948467cdb9f7d8ecf45e24547faf9ce10483b933a4ea05b41dcade3bcf1741082e796a721caffc99ca096a7a0f0432b16798bdf8866ffdd0f0515c026197423a5aef34aa3f81e442dc117e8a43f0ef4420634c0478bab891f07c6505d3432629da83fa7a093d069e884a55dd9f333f802c19708a35866cd0b319b000e51e9975f6eb71461a725bea98025a638b973891f9428ba730920a8dc53d0b489c0e4c1cf3ef86460462ae0832ab5144ba3387398073556f0a3637aa8e5a9e788fb5350bbb669439fff74a55d7d4937029545180df95d6af9a5a723c8fd5cb642bcd788cf4f7a4d7dfe1eedea4b89445893fc4fc3dc0f7dce6bc4a75f0395eb234d898742b8bb6915f09ade69a3db2af0111fb11a7ca442254221419550020a090d85a0ba708878a9378abea32e75a7cd93b64fd7345a7c93662b89194dc14598985445ad563434228840000298d02191ba21f6cf95ad0a91440251a8d58a86460402743ba4100c39202e34a90307aa85a1100a66ac191c342bb03b4b713a74990dab548ae6bfd51793d19830058f617919bd11a6e03766f8c3110e719a432f8ee7aaf81b5723828c534dcc48d34603e7243d1b6752f09bcd4c267c62219a4630b8d3e64e01dc0982e57eaac12549b77068b1e303a74dcaec9c3cbc9f9ecdfe3bf22c6d32b333490844b32ef4a09a6c6aab1295ff048eeba66192432fe91c576bca05af8941e0ab939bc4d9397964bf59520824070d651a1d9efa275d201951451d3b7a32085a1746cd4e1d5d54fedeb919f8749c02da24ddeacfb146e5525dd4d29c3ce83390d73466f8103443ffb6bd4759b0506ac931ee2a2876c22394c1ccd30c35b80997d29713368986fa49d728118100b69c63f4a9a6856dbabceff7e9da7c8465dfb6469a04e71c61da9299a749deaecc1cdcee7e16a60ddfb6c27b193f2727958a79316ba4c9b620a944d3a4f73c6459a84946c18293e37ed25eccb3cd0229eda24297a33e3bd4c9479f4c9b707e3305c11c4bde66188b65455cdca85dde8f4c88631d03b53c4d6a754b076a20a01bea37635ef3625ba8b38884b203877ac4fb241c9352b767524be6012afde5453810882387da3f6f497368514bba6d259f31e5e5cde89a17cb31e69893aa8687427470fda44986815e12c7260ffe26b5f497d0658f798b9f9b144abb4aef7ba6cd7c7e3a82efbd39f2ed4222dd9e3746f59ef2386957cf5afa1143686e5b2f82633dbc45c3cccfcc3f382fa2bd67119e26e558367b85858e38d695446892f4a5bfc0f757bbbee77727cec33e1a0a8fc0231fb11a4d72c83d69546144a1c90f6ee91f7c5cbd1ce740e1f3b319d306f49a169847e4d4053ad99233d9b2a6d847e94bf2cee07edf8d504e19dcef6f8c4ddcef53e3f731e3f72f3aeef72d78cdcb73b52517f3a2edaf5b30e3ecd6cb188eaf0374bfff3a236def3bed2a99c79bb48b9f3c2bd1ae397f86cf8d254c132689a487d73860b6fa7fcc567f57336eff89cb6d58aa5a91435b526e92fd739c9347cf563f3f3b611f3c47e8e79fdd2f11788726856aef9da4e0fdd6ded6df977cb7199a707bf358983c5442b84b1fc97663f017a1492ebb4b9fdbb8fea970bf1ebf1932a0c7cf7f38eae78346ee674b2493e8e5e7f51e353279f96c2c7550ff31c8011a12d94a0dec5cef392cf262994c6f758744b6ef47a14abf0286eca2b852b325835388a149814ead038b78454502891d7ef8e1871f92c460871f7ed8e1871f9cf861871f7e50430d3576ec20f64f9e35acc46cf5cf2b584a566a497f7adca75fa8e42622e26c398fe80fef2c71fbf5c4edd76cc93c53708f15b79fda2d6e3f5bfa337974a505e4004a93f37e4d9aec9737712747558ebc49d7645a9450e2887f8032206f35f3708fcf90910ceace1ad386abd048c046e3d034b081832fb628a10508455425a3b3c90ca87bb28f0ff354218319e39d2cd8d8d221c081862f70c08336a2cf23a5cce5d3e65232d1a907952853a25bfd5dd21f28b0ce783af6629e193b2a9968c80a8d51220a348b266c1295d0a3d62c8b69c3464c1e25c706d74cceb670cde4974fe1a07ec15b525254273817c8a0960ce532cf2d69e9b3ec9d645978c2bc19b5b3c926339e21ded9a13fe58c95f4c788cb5fb2955bd21f2e464481bca66791f5e84f677f7e5a40f21676010f70f0851352d4a0839aeca26aa53f7b5dd9fec537390fb879f9925fb3c8a8b3296ef7644adcf6164fa7433f5ec329d824b2e514a23fb67c3295a23ff4e7fa7ff484096b20178e8e62312330e61ab7bf7962445e04830d9550428f1ee4a788542bd0dcbcbcca48dfe450e0e6e5e9a57f019d3be5c50e9520d42388ece13815bc66de70752e71e7dd39f50e26c452e967cc97a7eb5f9a3e268fe02fefa777d47bb785df8dfe5f7f9fbbc964f2dcf4dfe398eccc4824ee9d74f2bcf7c7f150e2f72e867dbbcd1e293d4ff6e1241f4b73047f193da6fec78da7b14e1eeef973eff977a78799b7e3c6797a9887397da8f7570941bd3f0eca96f31d7c7f1cd0499b2d471f91a06ee97f78cc58f66d210cee8882e5faa7680864ebd2859bc4ef11d4bb674bd5cf3085d4c394a79779b7e58d9f47c0377dde487a70f446d27f1f8742c2f74422a6077174ae3f88ba241249b44174bc27954aa552a97bee71bae76afd46da24f8957bcefbce6d9d3c3cf79f210aa717fd494f8fa872fd61a05c7fd495239c5cffd47f19088edc10ee4dcf2111cfaafcbdef9ef4a651e55f7ad3178656e536884ef7a12d91dcd0dddfdd1fa7ba0a27e65f40b0f45ff7a0e96394b8bfe7b83f4e67dd22094fe0eb0f9ec0f7f43d6741a8a17ed623727ab7474e2fda2330ef1fcef7c6f2b34850f7646993de93607ebe874318c6aa6c12bfa9f7de6d399bf497b1f4864de21795429842ca967c51ef5fca2044fcefbf6f14470e85f837816bf23b432294c3144ad28b5f26f18bb2e592ebeffdc7813eb68b9636f93dc926f1afd4f176f9f6eee30daa7fff6835d4b813f49088b7bd9faef7a5e903e411fa3def69bb4eef3dd7ae1bef3dd8ae98f7be4e1b98f7505fbbf71e1c3d5bf2051f35825e593d5b22b9a4ffdaf33eeff3b29713e94d2fff62491ff37def3dce674922a93a38f64509f1dbf105d987f7de589a2354afd64fd9b2eb7f3123ccf8791e89440abfcffb932dbd47c588a237ce8b02ffe5c5984f7d0afc181818980a96de7b9c929d4d56b0a4b7a6c042b6adbb5d377ede7fdfe779ef899ef738a1a773bd11a77ee9bf4ff4ac2a88c9f4dee398424ff4bc4ff4b8dfc0ffd1de375b59f84a90189782df58222951d76b9264cb7abfcffbd538bb66f5264bfad538bb45b2e53796a7d75e1c63e05b7a0f85f4edec9170083fc7fd8ffede348a6389e47adf8ba3692cb96bfaef1b5541ea7f3f797cb5be4948f7a8ff466ee3ce300c4da617c7b07bd4a34cdfd59fe1675541c2ff5e2524fcef71425b278f6afa3ed19648ae091c4b9dbb81ef99fe1b49a6f26491a02ef799ce158188ef8ddff889a32a48f8e27b2fdaf0c5c709ada8733d14524db6d4b9a6ef7b6f0c5543ea97bef47db5b3c920e27baf1222bef738a2ad9347f89ead93c7275a9510d27b8f430a415bcae05924a8ebfd7c9d0bc4b3a54e37f2ddb6ffe13f7a1bf97d9c571b4b242c7073f573656540dd588981af90979ea1a8f46b1677494d3a653312000000a314002030140e080604b22892e5890ccb0314000a88aa466e581accb420462984102184100208000000030023242311004bb9d7ab6bfa30bd4913b55529e9b8b8e7513c7a057bf88eba4626d4d60b87740401687ce1e2e7f97a4bd926f8294476c872dfc63ea36b33c4d67f070ce0fe20d75d99b909029d3b4958715a5340ba99faac50e2c9ec9d8b196f4893070760cc39568a38b1bc20831572f04a143fc83aa9669a7ab0375dbded003fc9a247f756414f7c66f294a3d00ed88a1af450964c319470397f5dadf9944b6b87be9fb79e9ca5183b1e15e4638f6f215f40c4610045007cff080f2c79c229945fe0414cbe3c8d20cf7172e99dd282c7e28afbce17af1cef5597aea02877e8d757526b78f998c590d95c36710d9132d44759795d94f3396c7de6043502d5a4b3ccc9e6a0584cf45ac81902eb670c759b2ae5d52b1214af17aa2889d1c324e17c3b09e5ece686b493a84005e4640d269466d4f494db9a783e8174536bb83e5cd0c1be67ff25b835ecb9162e388e265ec3e529f98a4188c3f030eecae3dcc24e200a6d202d277d67190dbc5309142995cc56629c8ad1b004f4618a6aad8eaee2039454e044d6add1940a434550cfceb5d337d6d797569792a1c3cca100eb0acdbb7a86f4f53104bb75b1a9d7a5c673054b694c7c0758c2c5e7efd6b23b3d5eb7214137b7c17a69da2f99793bcba8c13bc48cf585825a6128d95b09925d39857bf0c193f0a384372acd66c1d59bd96e52ef8e3d9e0eae9f7147b4926101f6b0815aa2656d4b24a8862d7700b29a1ab19a687ce458b232f3030410bc60f292e3b0c565cd8a9c3e85a46887e9d6f518ca86b6cb8308f9002f18e03b2640c3cc6eeebebeeda8e6a4be964a256ae74cce9cb500b5caa2c281040e798a21cc0eabcf0716ee73083c603aec04ab10be00c2c66b7abb697e6dd2a2a785094d9cf220d19471954106f7000a4706cb2bf02d80f42611b8a2fb138062180ab047bbf0a9f8ff52e26354dd59d062aae39d5099808287af50de382dad433b195d8d95a1af6f3b6021f8cbbaab467c4ae22d0268cb4bcd2c4c696939a30046f05b576596696b92436f099aa39559e22db22be4468ab8ac26e88d6b77c806b1d2a3572c753411128af4fc02e988c10e481c03a16ba9d3c112b4b7c7d52bc6044011787ca41f0a0f52b19dbc364937ddab3db0fbb7759f8b8e5ed2e1ebd9028314ad7a37bb4d965d8cd00b8179e164e526c14be44521e390014bf13cc1049cf21e8f62780e7df9a683d5e16cd79da788fad024144075d8294d2f143afe85d3cfcff6648a10728e5211a79c5cf15d752fd6e982f522091866591650f0f6be8625ed51de9879208db78b8181b0d09e209ed699b8a2177c707fc72fe5cc958bf708aa579026682da3de02e06a52b5122958f4b68e5ee059e36a426f51bee5d02396fc6eba4d636eaabe3dba25f8f1b793ba74df8103f914070191b1fd4f5f5793865acba2e88ba577a028c7e8502ff2e89cb7cc1e26808bfcc584c60da5a3afb64e9f8f458b200f4f028f5446ce0bbfe6294568f346d974ff7778167569a9687f60bbbc0bac5837db73be2a85e6af0854133ebea2cfdc924ee1a18961a358761e227c704a5d3e4813ffffc0a79f31d7c3096ef77761c10c40792ea49163b40e942f97b7aae610c2c5a847dfccf96e70789063a6e8718e3bfa8778cfdd9abe093853e0c5d19d545ea3031a06e8e4e1c67378971eb4eae006b8d99585676e3492b9893b3e42c7323a417783334b2005a304b11d5fa23fe4c08ef30c01ab37148dbd46333c91634a5c36fa4dd10c7f3168fde0138f8d42971b17476d2f75b9740fc6b7b6f972d8b34eef369da4fbd6b4a1a6365240d9655024b03afe4e5ad828abe8fe8e9e177dbebb2baaf74f92e59748b2c7d840f7d615023fe3f3d1fa2278cd5995662d99cee1e3600103846f6caad27af5df87353353a54e877cb45294cf84d64f08c2d4554cdef1892bced2c0f0152e70e9e0ba7feba33b0d9fa302fa3af5e388000a1982d6a03750dd4c9250207756cac4d66c95bf4924b1ac17a31fdd6e9a972afe535913dd3da198472b6dcb8ebc952f7f070a1c9df1681737580d00f24ef5291b3fe34dbf01ee4670afb4a3c52201fb1d7c947f72ed0e342c82a5a03192c8cac1447775fac78791b4679903e49a54e963ce15bbce6b927179673111c3976fd1610ee2faea163f914f4d004f64359238b3a496273388a9627777129b2ada0bd03212cea82ebf4136c08192cbf3eb0fe7953344201ab2454cf156d4644cd78e214ef24b5ff854af2a73dc3c929c722cef5f0c82ca5f6a1fd2de418f6ba796921a0cb6a05781e395e295229ca095017e7ae189d9a0d9520619308141d3732b8a2bfd2f7d927fe459d65136880ea6214f7bf6e60da5c5f58e7620ce93c96853e914d338882a04979be2595f29a619689097bf7f4cafd93093f2113c9cebe8b32a812c282b79f1a4c3d55e4a77ae984411898088d22d549ef8837e95dbde4947b8b332aa045050ea5fd6d1672d4efb68099257dbe86129322520047a7357072ea2a9d78dfbbb555bd0c476c94ea1e44c865c8782170b551d7797bcbc8ace5bc8de0c3a43a5018a3439206cb85567df13054c187b5aca9b4265ec22633e470b0f950a6aea41605a2ed33b2c6552ac50cb7c83860235127e59dfbf035ebf08a6924ba60b15b61a0ed7d3d27563899eafbbdb310b61b0e13642566562988290fab90797b85f38b4653a8a00e008a88b8431a762c8cd6aafdcf496ae7cb643f3f0bee62040b72cd44d99ddf232ceaf1c86ddde0f074c517f18f26ed3f962e36026190e2e80f026867b0254a9997972b91be61ae49a302fd09286b59813d43c2c949330fd2e89ca8e3bb7aa31b68331285f7d3f42cde14178bbf252624963f67e40c9bedb5419af95dbfb789634e94a7aad9c36d67264089b5e4e6829e4824d27749a9ac84ba82168445e326868e8a7d164ea9d0e9ff13610a5dbe51aa2045e97928098d3ebc265b26f65035661f55d83256cdf37d4e28b0032f6c6def0f0eddeb9346fb098dd3bbd7b5c5fea9647220617cd332a4df55cb065681ffb09588309255f1231a5d9ab06e83646769eda407c385022bd7e2b23c0f79b59a805e527687081e1a0c09c408703f8d1d4d0b73aee4b87e9ecfd4edc95ee1ae985d451cab15e43becdf5ea18954b4d7bf5e42fe27e5ded4d487d095f14e9a30b083b7d317ed192ad853ed8f7e83e9de4a752f14524c7f034119b68fdfe3f3f174b3fbd145bc7e9b295084619c8844ff364b954fa0a5888b008069cd26b75c634c1f0d0ffba6926ce4b02d3a22df2d8663418d34bbd2d6f10cb5abcd1e6059f6d95bb0633819944f009b64021b4ca37a6d425940a698beb5d105668b5c11ea405162d0335c820221c833e3d037ea9a522a0fa3c599f035e7f5dcdd2f2f020a992fed00f2d25f8e939b054bf3480d4e0bc7175df83f5c7f9b39378af1c820fb34bba7778e96a4d58c9d03c41b9b15364c5794a8bdf22513c7737a9cc4d4500a284bf62ff9584f2cec96e7c6667a332fa0fd9d6d3b2dba9b901efbcc8e8ccec34dc97d0644593ee068832fd56371d2ee0298acb1601afca123efc6cc8c6941964c1100b1d692c66a9cc25334bf9916d3aa4ae15d2ef5b4b19f4051c406a3c276068142ab9d3bcdd8ede9dd333a91df4b95343f3dcf9cee9620ed7bad927e8eae823d83a91e30d5c482792191712f63ec6574e3f8998ff3f7fb9ba2e49ab0d84b70b4bde8e35da95aac794f7eeeb3c444a9f3a23abbc34c8bdd6418339643fc68a6fb66009dd450b8e99b747b32c948237204eea154ad6546fbbde191b886abb72a56d7fad340fcfb4a9ab4d41361d39aaeb11719189eec1ad6a29bbbc4c961652663c8cec5812979fa53a9d2801fb270b715b7f9955d253f8d5b9d3c8891acc9b5f6e86ef09bc646383ba328a495a293f1f224442ba0d6916cf9433246d63b62ec638723fdf87c3288aa6a19d2951228e8ec1452ee0610d9e3ca2ba43ff927511b104eb279097d4af2f01c23212939656acf3121c6c2bcb50f1466de662d27baccd89ba71273786a8dd011a6f1c2fd13485896064400c57924063feffadbf4856b924ae1103d69da72db8931e77649aa657323ea6d8e29ed159afaf7841e8d30b9b24291fe2cc3be79a8cf532892ed72afd0d20b4976b51d547639e2a6fe10b239c8e8d523ea4cfedaa3a0d6f366a657c782033ab5dc8440b7c749edfa228b8b207a6c311d02e4c8f0a0fa5978a367c47d204515598237f6c8e7ab2abc0d8b34847a575aee490dfa80f050e662289796c085e4c6a6fe43442dc88ae833722fe805d8a35974202e65d39900316e7875075c61e130fb61ea88df1542d08915740afa3c458199df087d01310a869ace23589ec87234fb8c6e183236de7b3fe7b9f5f8740a1b488aba13b776368877311cb13a901d322169a189a58e2f1137288a518e7cbe3b1040370c92ab08bdb386d4c500beba41e555d0c2e1a5a94acf779d0dcc9f2d111c1e4724410571ce9df7d87af1b82d2069a3abaa661d441803247061b5294f69a0bfe8201a9739317468ca413819b7f3a4ce0d94ae44dc61bbe78c10329df83d5f7b2d42f061482e899f18feeda122584fb20e30ece952bcdce1560ec5b8c7c7d893bdb98444ec58b56caa045a1ef2b295db08799cf31d5ee54ff77c22c309739e6f35669dd6dd986450f89c46a6577b862e18de1416fb58b6df4e89ca82473269913748a8e2143c9655b0d7416a8d3571dc9c1d26c35fe9a9780cdc0286a95122c646b86e191dbcb4731f150a6690327003fe430020f6d8cb54da2d5e91cca3fd4ddb35b16dcd2c17cae67d726327f211eb2a1c86d69c7f76b6662b8b6734acea3d0fe03d0865a2223dac42d025759463bca4b888247ab6c8c20e5f1af8e4157977d953821955a3ad16ed5cde4461b19459c4df6e3b9b93048811275b863645e57a4338416a10937f414eecf762fbe161f458da2338ff79dcb81f89ffa3f6c4486451c7e4978a9f3802507480a283902dd2903e39c1684b772f7098ed6dccf1a7d3db45f7a0551f29aa16a7950043bfe8b678ce6f5bbddc65d576812628cd72acaf5fa7e3a5e9f2f1242d07611f64d6407e3788c5ef022b5497f4408ff46fb12fbff6713337248b2f1f51ee410570e10a12b2d8dcbbd9e2d763f915a06306d4eb083081b7600d4fbea2de9b38fbcfad4ca78502444053dab1815ce19a1816b82747093391fb80c012674434468d8c04d87364346423cf815d962fb545e8867219cb676ae70a6743010ab2dba90de9849f6e23d47e21e0c83836696fe0fa469900be94d8c5d7179200b44b10d73c33c4e5c50f1e51d807eac8801797542504f9a295e5b04d5057ea3b1cdde3e4c2704eb6d08c83e4945995cde9bd87f6e4b86b271185949e74cd5040cbfa2d6415dd25db10ce07939bc324509fa39fa8137e5f28d81595140735aad626c3d28c155ceb05ab870c8ea3b5ad336766068874ba58569bce452dc666ee00adca8847d7573218df26534934111945c482164933a781ff60cdb73686e4a1b90eae1f5fc36f390df97a23105f52be8c05ea42a6c6b05b9e6ba5885a7b494e3617f2db5456c16a0be89a01115d5c36cf1ffdeabeeb9cad415c961e2f6f8370357c1c39077eec19ec6dd3df4aa07389421c799ee600eb2c8724f074ebc444460e6d2c17f84dd1a9a0653a6abbd621a63cafbc09dda024d32912659f715b577c52b2f8a04f5f2a12e2cb0adbcc41273a93be88fcbb5c2f547d5a7969f2e979e2d9c12286d77fd9274c9404d66281809de2f36c3116ddea9653721ca5a008a5f899af73078e224ad755459b4a231c6d2d5fc7ff524e49a85a1704599be4ed00893d7e229c44e2dd64171bb57c9e1c30a8815591b2b0b462d4ffa24ed919e187df189f56818e486287bd510d22b3b30f1e74e9a958921892c009f5bb9e250d7b2777bd28c9d915e1fe995473a495c1c369edc1a632d21bbc8a025eb4cf074031b7f34d37c9f5a6187f25faf58ef7c9eb7cae8ddaf936780ec1e424989bd1fa98c3df0e3913ea82f4b8fb5a20c12ebb9fcf653ff49358268fd11f1e4ecc012d008cd09699cfd266495c1437deec7e67100a0df904483782d49faf49f5f79639a6a947fae2227ff374d46ac6050228a14851ce7b38ae62a875a38a2c34a982a705ba2397a2949abc4c1b985eb0fe6475d68ace78c336a5909920b84b4b2add9e894b4ae6f3b8926f967a9c7f00b470f0bd7773a39cb50e63d0402f61e58feda74b60964b18ba5d699fbda7b343a75c3910aa456bfeaaa53728e1e58f2a70573f6bdb932e6fbc3531d032d7e51997ad008b1b75db3a42a85e8ba873284965845f73d40525b510c34c5e3dc47bcdadeb698ab2c748c6b4d8ad2b54a9f921b886ffd7ae9251c5dd60c314e9798bb1a9284e859df328b343f648cb481ef3d83d23e0ba729b0f4384c142f51678b6fc096049aae328b2484b5e05477dfdd46926ab61501260dc80f57820299e43b5899201553bdabcbea4e02dac6e8eb9a4d55eceaa6d863eae5a699db6d8a604d13e06e54ab0de4349a3147efb119223cdea15f59edb397cdb6d2d9adda6349c631ba15d1158ca43748995abed53ee5eae3f2942d7dff5f27dfc2d7305aa7ea37880a4b954ed85531c684da745e48c3d9c1962444398c9c4459230ca0519a2af9bcaf68c53a697c8153f0825dbf35dfd74977f341e41e7504f48cc5d8a3e70bef892f06a7af63a075f8b217af9da89f979d23b1a5f7a8d6351ed7c254cb0deb9622d42697632d921178ab93d11fbcac23a3463faa22e5453242c966a2b7cb555eeeba6e30d202b7a9ebb275ca5ee6106403ca0a98381863bcb63ee2a15bcd13ad4a7387ebd5e6ad91247d804c4ac9105e705225d7896e4c14063d3bcf7801373438786b658a055c2b4ec9e1ea0a23fa27fe802d8ddb67c451caeffd4dd128fdb71e0166fb24570031d559a7d3215e14c45f0ebcb16520dae9df060e5877c239e548ee780921dfa3a7434f5b46b203822e9029e0255dd5921aa92b13a2d275847c00480dd5d74fc612c182fa3a86f7aa869dc81a7c096ce2d6374c9295a936df9f6400055e976494df7431f5fd648f3e0dfc4e20c4bfc011c184dc461872afc78718b05de33dfa1fb6e33f26689826e8751389c179aefdb583b64da37cabbc0d83bffb47091986e9619f8ea1c418a4f11511fcd30fd70223086b2b80813b253e96141650ee97c75c5a84c92909451b503bad0756d9342c7a1b546731a0923d64a95483cf942f0dd4c032623cc2bbf04e7b5c5fb7e3f47911022063b029919d7fb8f0a9865b225bd0850e537cc04595a7a0bb0940c837d5f1d674c9388381f13cc88d652b6b977ea2020751f90fccebcfc99bcd41c9f85e5c072740f757815d47eb70012e35c876ce436fa232210bbf086cb59845d3e81a64ac3934be9688e7731eacccdcfbb70a1e94f8e59dbaf82c9c9d2b038f537298bbcd527212fd4c8ca4afbcc67a6923147e7b586d801581bb5a11b6a54aaedb62a1275899703290d08295aee149418580d827d199c1f4d6c5c163bdd8ed6a5631e2e3923d6b4196b0de2988ed6a47f8611b347f80e026ae8f899f980f23a388b2c35756a3de20afccf8c2467d5f1f485e436fa67e5ef82fb5760a0e1b80eb58c7c31baa17026264204d08de2b9aa0be08d5381e27e1d0eb1c1471feb9266f260a9cd368273a31c082b6d649dcdc5b864ab50bee13c3e91974a8758ded0d7b952bf42f052911e3c6feadef0280ad65d5ae0604743542da50a0760f4254e450160087e0ce16d5a616f37bb2fa836445c0690b33224225dbdb12de8dd27bc3f21eae448673c0cbf1ee462f1f3b97049db7f30f47f091fd85f11551942bc8d34685da9f04bc7aeaf359d685f3b98ea1b4a1dfb2bc59de921d839cb7e809c7552d3e5845c27600c0e5bf4bfc3d64fc9d4b074fdbdadfe7f4db62144924d5859fa02efe9d5b2390042d17c99e0889ccdfbf31ac2a6a49dfb833eb3845c179b8d150bf8b1aef46df1dc2be2e4412244e19bfa6c67622efc3b8a1f1184a5a53b30976871a93e5cb8cdc8e9e9d0d81f7f3e3f952f49078e0fff880bfe002be33d392776e5c3ec25f9b4c1a5e5a02f81783b82110c1e183f9c8d1193ef073a2e89713129fe29a107bdefc5b27c81cb8a34a1621c5489c8eed8937243295b2f44f2865bab248eabb5c691f31476c1fd5aeb0452dc177b62e625d0d121fcfda660812da4cd02774e18a3b4522e2ec64bd9a231b810cc68f87f5c1078d17de151061a49ae0285b3338c0347a7ccd5c908e271df05c393e9801effc6e6f2b00a96de6e76362ab01323e0f1646870b6e2eea22df0311a2114bf62eecf1db7c8ef1cc64d2a31fa92ee57980506889bbb196d5890b624075008819da13603cb77628a5f880df51731c13ca8b56f2d16166770fceb0f7a9c50859acd0478f482bffa61a49f1e91c74f401f116bfafe4b592353e0b21c290a921bf1f3db5ecc1f07ab0071a10a91f9e35450c7a49fa70a3d6a147e3b79f9b2deec9f61a83db2ef9290a213feb66e61fb42ae6ea0d011fba89c7d7666c5dde278319fdd945ea369569cbbb227597f3f1ac2161445af931378278f282e41c97fd120b0e4de9311c8a0c577ac02320f25dbdbfbaf00696c3019e60bd1e05ea2aad40b31706aab371336518f67ab2c1d84183871c20d544bf4625b34a2242818e3c999d024734185e69dcae6318dc2a717aa4bdd96bc5db3a24cf3d979f1c808d469f94b36652018b1d17350ece30228cd27664d1b6f12e77074b76f4ae4cd2a7b82687a9d6412283aa885062032cac360d5f9ef196340996ff95f1203b395dfdfb68501c74b094ae0d90845a1d3ad8df5797988dfdf6353d833f916802e7587387135b61c37af6dd48d0cbc2e8acb12cb6c79c718335d1db4364bec196a9ea9ba2eb51329a271982011fbfc83dbf700a876a09049fdc93f3e1b61710cc4ca412eeb3541481141f88bc254c27691823ec286e11228be480a6fac9e8f57d4c453af56f8d72dd07b5dc45314f1b5a21e41907c3e4ca8f952e61ebf9231809f6cd1b824ef957c2c1344dab473af50dc277422a61d64767b03337df6f9275a09031f875f222f32514552bb619cf0e1c210ab9ce4a9e1bb7de944f5918431d061f47ae35e506e64f0e878296f01074165f00ab36bfaae609a49d2102117449070aa8bdf7ed1ee777f10026f8855078fe6c5a9a0b043d69a02761b2ae7649958b2b997765274f2e76279550c766ff4e2e3b492a5fc766e7375d86d7743ddd032b42b14cc55c8dda87d0dfc1c391c097bf776fc71b6ea1f7ad15d477945697cc807192047c048bd08c7ec20aeaf518b72faf2531e888c9a80952b16e2081d3a00f709fffb761d1b4857a253db0636c705c7f91c2f2b831ec12b02bd038b55b9962cedd8e4e4195dc08dbc375e6c269d074c8ff1f9562fd771ce3322c5b1f3ae0236d7e4de04b3db9db2aeb1376a4e939775d3c53778bfc3b4b94bffa43d3e7f33c5df11ad1261910157df7064d9023813f7bbe8d8f31eb7cb16cc45eeb563956f6262e273b6567686d7bc233ec27b5138b8d585f6d38a533bc61fecf6ef9a763063e5bad26fb858a9a0dd46c8427d655627749e6af814e3c4fc0e9900891614169eeaf1363b5c030be19572a6845e3dab47ac30c49e0dcdc44ddec0e0be25bc8922927cc24a4e07e30fee1d519e8c6ed33abb87c6f3142bd6e6676f702eaee147eb309c6a5b102a3abe43a893eeee5e85f651746590eda4a20dc14b2749b932e21161d06783aa88f91953ad3e79b9133cfcf5e6727d35178a0a8f7a36b984153b806b8377ee44ea919649cb8f777fbaca6a43dbf143871fad74b8b3bb1cdd27207e68e1d38dd65ad2f23c9a6971f412822ca2e97ff750ff8146ee20ece8de3f22d05fe7bb52b486f4f0d5117a355559e27d8b12955621254b5482ce9aca756de78c952a318324aa686fe601bc925dff4aead8dd0e17ce147d804160add5ca2d916cd08f1f0382c8a6aea2aeac055741b5be38fbc01435af3d784a3d7ce0ad248149ef6c2133d0b718323150d4bf64ac13242f1602671aa410f9994864fec5d9c2cebc7bf6b2cecc8bfe214a671398559896bfaaa3d6dd49ed6093817d8c074bf32cb19f1e58bc77ff424428736abf781377fe2e737a618f4f9519f5c34b9d34487d0abe83f93cce6c987a3b02dbaf153200e13e7a382e6f3df652c70746ee26df60616177d1aa8dbb3b085ba4272ad73e19f05fbb670701806d7411210d415780f42d39455d2367117c91efc0ff3552ac2b50e8b2f2ba4b56454f5f450d99910f36696d4cbce9e6831ad57b70519e976c37a4840189c7fcd5c22bf0df757218aa0b7549ddf1e7775add3c65f169fe77c6c970cc0647f0d1d593ff4d005c22a3f07cb1d671ebfe3c2cca2fc61500a7fa04b62e9116ac2fda09b96f2e863828ebb78cdbf2f42aa8df203685a15a05c1ff28fbfe2401757187dd9be1a784c75e2601ac1e35ed4e2a63c2cb22a1e0ff7d8456679e373c20fc8df814b44ac4243d6ffeee048593213f185586a66b441f479643712df5101c5ec8c3a632faa419b6b195e9d3625bbc1a02c7d5f70e9b8fc6ece3a4181df386eec6d8d80c69740130f75da3f6583d2f0cf24c397406286fb55462506519690f2c24d313ccbc66cfd30e59ec5abbe03773d074f8401635565994695e1d048ad772282217490fa6c19a02d92f1d00e80a1f5e8f8e90b24368bf4531c75e5454dddd43547645641ddcda7bf3ecd4c1b447f2a9ecc1721bcc3830a61ca1b9a2272076364856c89605904592a8d08b1246de059fe789d1f318894eaa2b2a5968587ae7815ed7b3534ef25dc5d63098ba99a7f2b976d1b06ec20fc0a919bc840a71f7de219f4ebc40447bd87a69db749a3130554ccbd50e8adc4acb5097ababb529a64b0132e79b4bd6b8012f7a76370e20021a6e449a8aae4dff799cfbfaf15f9adfb70e3fcd398fe3c036de91fdefb3328367476c6c89383757b1d02594bb6e6c370396ba07aec94df23480e4402b0faad63814635db31ac65c8061f35ad569aecb806d02ca7f0c4f64f1a81a9d239037d9e5e6d137da12ed232516d13f7bf00677a97e9c911a49112e388a04fa68d460faf0be101e8823da2188920960c28c2d3e68a0b72ba7ebe5ae03b4fa257f8bd1ad4e6e97483db8e13a58e2cf072b22361a03dd4fe3445a10ca392a4882ec5fbf330c0a71529fffc920f5b35b15d4f5b344f1fac4c3f27f4b86b4997150ffa2d41cf767ef98dc5c932e3db2f24b422d163f6559be0e25584a97586b396b3e6c9d39eb81cd9a5e40c6d686d20104e2282e867fb36d8e213999dcb402be335a99d0b8583f1ed7e00ecc62258e14c19309f306272fc2c326536781067afb1f1bad2909de652e828c11314de14c8a8e0ca67994c98fe96a4f254f970d332afd0d08e8cfae0989740052feb1478ed039d49364376ab0b106414be1d65a67c9b20acfdc1962193cf07f0b9075345106a3998eb3b5e85782d41b25d9ba5a96baf9edc754aa1581e51b5072b74038a09465a4d391cbed42cd0bd4043c23a5871c886de6b6ea86872bd70ceee50a440b1ab4e1e6c0dab1c1702fde858aeb993219dd61d63cb1e41b00bb971e655f8f389c41e5d5ff2903bc020ec5d9afe91ac9dae18e97d40895c599150420f98a4387da8d8caed8ad0596c6ba61cb86c5ed869ffe968e436a05edd74521c5630bde345af85be74e963c524748df3484e1247b8cda00aee73c78b2e78d574f97523959b8b0c597d6f06eec60d5373f97d47c37243b56077dd6252f60df5e4b95db4f9ef961acf0eec266c68fdec27687d6e278a576fa3bae614ca6c08d8717c6be24636f38198ec8e342656849ffbf11034b0a4f4009708bd701eb34f3ea22ab76a33ac142405656d041d00e5f53fc5b69dc0da373773aca7da0404c516c6d7acba62f534b010cc82c32dd79f0faf438370c7c42956c9efe618f1ee4960f42f7b107f01f7049d4d89e0a103dcbf35e238e8da4912cc74a8b799c34b10451bc544e3dd9a962ebe2a45591d81efa57c8d6a76eea9d3c3872d156ad92d6f05aa8b7d449ede18bbae53069d559750e68701acacf4d83cce5917ad33b4a2dd84e138c9dc053138de697bb29e42920292a724c64f66d26c1673c44534d22e6816320111236775f69a5a6a78ad16a3fa89195f6e6573dd717c794a11b6553a9b430d83339beb5176dd287477caacb50d981b1bb8419fd71a2ced08747df8cf7f81f6def5993b5e69dd053d4f6fab4008a0386bee2bbf6ba906d5d5363ddeefcec7bd1190b334c54880be5cc8fbbb1f10040efca13f3140681f271dd8342310e4e883422856e4de31d23c81b7947938ca1272f4629eeabade75de412a9b0d151484c7ef44cc49f8e72407fb45c801a2143d96646945ed0a2e903e058c59bd69d5ac7ac673e397ee9c0632848422cc5eec45e51fc5e12d1aba0fdda3b93f3c0ac8a44c910b89a8a8bcd49ba99f5046b1666d7ebb3fb66ab8f75b0f3d0c79919eb5fa7cb6cdd537d13feec6e9acc13935a1b1ccf20f981513dae61f98b218362273da84f181ba8c7d59e970c2a50f4060e50c449f89c606822109f3eb08ca31b97b1c40691901993eaf78f1e3ae46a2b5b74692596786cb70dc380272a8135d1997756c3a5358c06e004369f40f57484902917277a23f09d860900d8b66a07fb96eb005e0c34383b599e94818b38515578e509868127e1ff4ac3e1008317f79b9a70bd44cda40cc06c85fd4b11627d088c3411de11a8335f7bdd8338da027769ab9e123379611a9dfb5cf35b201423f4f112743c472343a8d7b9536850594c05dbb5ead7a9f5f5ee9d622787c51fe1841a3fb9e05652c4d33c1626649d243ab5140365a9b8e62de9de5887b50424b6e6390086e9b3fae3490d7ae40bef9645ab1424575d3dacd3503599038bba733a125bb5f69ae3a78f53eb61b03f7422ed3b6c324be5d1aca1ad4e8c9bfb1b2e17c73e33a14f764481bcf32c5722981e1bfb194081ce865ba560ca01c5e22ec7a1aa01baf246affa024b2d1f9b3a10f83eb6484b5c07f692fc24a778807ce8826734e2e2315f98461544a91e157b807b874b316652024ded80d814f2c878beb435d63a2f0fb8fe805a93243ec448c34fec58212da244a96d780eea74a05d24d7add40e69977e0319a2e215001d153a41d890a68c2b1d2a43f6f89d503364d1558653c8df61490fa1b69eb214d98e25ccf3e72e713b4accc0a44233d6b6c86f65864684f4e49d2b47b11b050c56cbbf2a0dfb0ea423a4313af962b2a2b2e74458d904a5d464304d897456c3e80e1ebaed26ce5c2ceff564a3363d0a10ca4f206d857978242e5dc0dbc2b73bb0c4b1204f160f57d3fad8ffa46cc83b991c69a3a094820b6bb7d20033a13a4d27820cb912c418b143b3c25a38977043305f6218262542760d5abad5192f19cc1038c236cfdd65b70c16dd259fd3595071bcd2813df203e81983415c96b4c534d6350a40e7e0350cf00c0a62b79450f0517e4bfd68aead2dffc2ccdf41cced16fdb146368c7278583195091641c05a4d3d4fac6b44ae49931fdaff1e65b1acb09b0e977d3e6c71263f8839919b140405051a2dc48d4d31203a18ad5d6d253d177e573d0abba891e3d0a1dea55ca3ba8821ed075b47f08ecb0da55edfd5615a1a7c3ac90acf296c7320935e9891f4e77dea4c8fc441b62c12a5989f6963786539660273d53a110e21d9e4175126ec2dc90204c830f48e3a850ab16c05f943be0031144dd556003066e54e41a0a84ccf369e4d8712a7d02e32fd05d7d28eabb25a1a7d340906209cce991e80e7e00d7d243820e12da5906afa0561680fc929797efccd2621e87d4c93772bf742e41be0d617489225de69cb657d9913777788a5523edc8751fbc83a0252a734304024634e9e047996068caac258cc0a634ab55b6e7c10eed9909f43b33612e1956cab70d942ee178136d6d379f5979c049f46b4f8eff4b601e7fd5b8026da8552b2c8d8d63e46fa3c804728672d65175552dda8745f2afbb1f504a91c21461c79974a05cd683dd190563ff1c4e5863f168a72a326d876313633ea61df04313bb38cb1c7a6707fb2b82cc513f47e84904da69b5e8dfcea99145716e7fba8e9542a6d5dfe55888f8d9acf8b288cb3c7f98434dca32a7b6c17443cef205cec511a6b94ce6cc0f30b0a0930082593e0fdc3bc4f00941f4c01822cfaa5f40905d3ec68400dfa0c0b7e741179a3aaf87a0cab19978b80509933180b37624a59a3f02b5020e8a441a406df623345287bdb79bf74728883c8e4d0db8edd7c7ec93b4bd327b4fdbd795e281b55c032e2e482c73133060a159f05f9e862bdc62a2a44c1505703e8a968d97f8975c53f4508786cca68fbe9e69708b4cf7afc4cf9f9b93407a2c9270957b0e60e078e682f28fe1c8bbdc242bc0b53e9c93d9504007925d4cbd2748c4cde015a1bb29157e7ea58cc24a9b3ea6aad4f72df237b2796f5475bd4ffe074d65af0fc4d3015361820688956c4d08ee25d08193f9b3c2569d0d8bc691cbd8ae08d594c8a93f572209794d700f9be9697f9b6d0108d1a84672859f2aa6b98b5291382f1d210b9140d84332f1511ff9c21a18e08e803051a3b98d40b98f38b0c47e7a16d76413fd262ef4a20b1e6921e81e639fd75af8864c6909d1f86c37b5bd36ffd892038d5904f6f87c0dcafd2805c6579a4b9367010f5f2a71643b2cec3015c553025f320aa1e8d86d909aa12777da545bd244e8b1ad0eacdfd6e9e2a8b7881eafc87d4f78c728521f5f1cbd50078e682301cd20aa757d0e4915b4d7bd3d44f58603f35749bbd81cce0dbbaa5d8968791b419db78e6e2c5d3850fa2b571ef1dd0071bc958154e4c7a58494321c1cd362e09cf517ebcd4b7404280bc41f1d09af732195f821a0050b7ce1538e9f873f4dea5b42b96509ecf2f56e04f229a4273e10374315b038edb35281a3c9b172c046e4d0d3b406552481f8eca36d010594301500c3a5ee0362ea8d1e5672600bfa43528a22aecffc40060dfcd95904324852047f20a708e49006cb4d2254d5a663c7bb0f06029fc5a0ff2f22ea4a83ce7ec41d663cda0df718c9d51cb389dfc26f526c82364c8532108d30b013eec8b278f03d4a0fb70ad153bacd28afd60038c37d4f83fcccc5656da86a5b6109ecd2c8fb00238230bcdb8ecc04d1ff8d41c2c46ceacc587deb5ac180b2702f773220dba877391a858a8d31b3c41744dcc4e72e3f882070be9447647fca7d2897d7c5a582d49e82fb0603fe36473833ef584478fe799e12f850ffae454beadd5f8912b58e47d92ad96d46e34582223aeacdcb71c073a8aaedeaab481f045970bb788eca5d471fffa8e7edad5fd789183c1c872bafc0cb2de74c1f18cfa33fef9fd27ab155bc146938cac64a7a36ce085987e7e480deacdd353dcc2264e82a0836e3ea8c583b9804eb29bd1efd9d3980b16f76383ed7ff3705077bd6467637df011fe081c1dc3639f1363a106495e0d61bbee92ddb29ca4cb2d93c0fbc038fdce6fbdc630a8079a9f53d7a7e43cc5c1938f3fb9e746336cb2a9c587024b76748b09146f37b4028b3575112e4bbf47abcfaf6ca1b2f42d4ac7c08f02519400536d820f57d4dac93449651ff8ccc316a610bff347a5037dcc378b72b55eb7e30349a30dd41c78dd25430791a826e8c303ea7e98ce03d8048c077f2c192c1f280704e3549f9decb3b733520f0a9dc10093ecab6c4eea402e2ee1946c91010fe92e3203f465d63104034f9fccc4b180857194294fb50d97e875c883b834531895efa68bce1c9132d9e299a65d41bf5d34280c2ee76ae643635ec664003c26b84dd3f2181ee314ea58df76ddd342c7b23bd2101d82898877003b0a86c4ccc269e617237db10e29b4353e09a27e444b08ac08291bb8aa12202b91aa8eddf363d870458e6768a3517f3e2a5add98136f96871d6e86d4f97c0c9468be87d103945a5e8270042b80bebc45608e31cc1eca42d07eb4b537307563311c3a9a1d37ada0393154db29b20c6b4fc4c00a3cf32f52da5a5eaf11e6e1f4971290a3039779c491058d71dfa410636ad7de7fb8c0a529545499b55dab6e66b652d31be39d90038372d969ef48064ec4d2874755737562d667b1e0772433fed324edac88053583e3bfbe87df3ac4959b13fc124678409111d02f0caf8d18e0c6527b84959c461327878d7144a0fe204021a4ab0c54f05fc819aa2c08b78d8043dc2c4b21be09029a3f0ab86a6321f9d76e309a28ae6e4a9666a0b937d84a0f50c648964dc74d99ca315fb0a1f4b2cbb3fc5a3c5984a83acd5cb6bd67bc868968efa8d413ccbb850a8b3b91f996d4d51eff6f77b39f648a76eb4882501dc23191d2c42ae0a7fb3bed1e32d654a13d4f21c703ef72e8934cafe8ea4d22d017530ef1ea8802cc4edb3c870f97354a8dff38c11f9b1cb69e884aeb4ce1e1744ce663273ca13bb75f7e134e8902fd8615b5a5b814e8ff56a8df32a875bbbdb691ed0d54c302251e1d775fa256679857b6c601a18d6830e0b7b19f2ac2cd082bc457c3df581a3a123623b5a925b454608175e3b25325897ea8ab27a0fd762100470693071f13a2837fd2a3406091d050a4992c5239ee1ce57560bba296a92ea924072b73cc45aba1b88d15e3ee35d4ba8080dcc57890e3468aafead807aa5c56628ca1f39e8e1432400c5c81f10cfa96981eab7f14b14d2498afa44c8401aa238e28aaf55c419227c521ec686ae57aded73fe7e28ed39c9c4c0fbc248932e064976bde5e16cc851ad0aa3631297865475192968b80c061b07a0c9aa85e9f85aa73657a66ae2128a34ce80b17c178b5ddcfabcf280d2b34a38e0a2e068fc19d2a09f5e8863842e7d57fb3f12b7eee479d2e4a7f82f226b20702b126324ad0089827452c596c091553ac97d54b78e032ae7dfac2aaf6c261f7185ad57df9f3978bab0ff8b72292092d790c7c6db52083f1119f66003338d133312936aca99953314bb57d7720eab0b8255d7047a1e479c59f9ff47a7a36228add850ac79aca2130b1447d65218f7fc7b960607513601715313285001c04a00f51ea26344fd075c482f9a9543c9b5609ae7ac1567c063b1c0676dc1419491777c29046c048eb7942ebb21669895f628145f86609494a1147c241977b4b9a3e76199298bb20792c90438bccca68b3304930e2026244b564a44be191d8aca0ff3d4f780b24546299183f8a4a06f4cf1bb132cab823a36dcd13e51c12ce02d485c0cb8208a00c1f49a4f76579035412b0f3dde09b9fa97e317022385075646229f5e466ae67554a5e20918421cf62d981797c1c085d8d175746ca6a54cb814fe9f82ceaafeefaafbda0dcaf2da45834c2c86984bee8b88f90b65c1bbd475681a38d042a80ed94ffe8ff3093c26222a8dae08830d38cb33c4a92293283d8a7e6231ebd96c5ddc6eb1481d4a129c55e2145c4214c166dae8f13499874e8bcf8cc376f31e045820dc4d0e5527645cb1415f165d5523b3caf54d02273415d05d4e75a92a732fca57bc833584821ce901b2736ad3a27d1092c329098043e1fe1bfe7b5a5e43a74eca84f9fa15e8ba97db7d3e717cccf0d14e2833888e291ecfa50593b2ad335441ba8e7607e4da7be9b11f59b91683de2c96c3df1c90c506a94e68ff0d3973cfc0c7ac6956c7618b953cfdb9b31a89d32774ac2b081d255483c85517fd8d0814a3de3244aae52d2ad66d52e8ecf31d3ff4a72a5d0df0ab6494039034c537f9c6ccb825dc7ae235efa084fe188d7978d4f7c016ec08c3a7c6a241d03b86d007baa134cf0da5dc77156148e8deaba779e542e9f21a29bbfa828d3db40c02f77452620c7575350070a00934ecf58c90c21d07356e2b568d4ed7ad8680d2178ec6f18408d3b9a8578197df5da67edb1402f1231eb74b10ed0bb4ed091b034b45b049a23df012118aed0b5ef98e16add090fb6a8d2b9aa766cb179c09e8bb14955fcd884e5ae483abaaf9e62b66d83116171bef3b55bf306cdac67e293c475273cc0e78b3d2c0c73b340039435e80fbc86989256cdea34329f42c7835001ff3394c75793acbacc7245cbffe0a7a28887352f4c8f1ba134f62173e3a29b1bec23c9f5c8ba3e14daa92486affdd096c9bf34bb1cc30174c0445db7e5671cff6143db4118efe98711d22ab485ecc7da39c2d18254d1accb2902c81149a51a4410c06d06b3caf01b22c419f4c5548eae2840d0bc418aba28635e496bb1b844535b71637a49a97359fc473df77ea4f2112d3ba5f17f28bc2b5be6769b7cb9a3b599d528c7b0d0c78233ce86582b7ed99b37127eab2f2c1a53dd95e90a18bad0e1b764405c0bf88d99c417d7cd64a38adb76ef9188261038da4eb5d834002680922fe75b1edce5dd5ea0b115f44c41c11398149d86f12679943efc72bb568ee08853c263676190a2f8564f8fafef4497715b7135413d4407ffe870987797907271885f8e44aaf1c60ee506a530a5016d00932256a7a81c6466cf083265b5d6986f685adfe2bbab2eb8272c1108a87e7118cbcb89429bbba38b406d64c4f6f662ab86072e37cb0e1ff799fdae0701e4483e320c908400b90f83141ecd0af1888cec6edac8b0a876b0f01441b8d59d689cfaeecee4b63e39e58fe59919e90bb3a210024183facc3b77796c107d5113dc7c7aa167eddf04e6f4054e0b3b2eb5c2c980f7fb6d9dfac9fea7890da0a087da2fdc2aa59404ac5b81f6f70c695f44250e27d90d767e70a0cacb84684b4bc52bba06aa54ea12860931d7e8a7bc580842c22edee443085b0847c015301a173acdc650f193e77263a4f622fdd65a7a507e57f33551f6c5e90ed928b733fa2980e2ad8bee08dd3402f609b14eeec3166591c6433624a18dc99cbe19e7b6a01874152b091111c0b8b44ffc2fa5ec456d28b95d84dead8f2ef92e55ddbc350f94204c5a7676e571c695a87beaa6a12a97f11b20b8511ee6d61d8f08c4064afa256d83da681a7de071c076f098ad10710d87b3c145811043133e77e959828ce9c7bfde1808ca356b12439140a7d3218eb3b3ea0f9ca34fe37ce5b0b886b0c75cf52517e44772dfad0c3f82cfa3fd66d0a1184c94c55c8cbecf2e74beb5bc8de4d972b98800883f583dee3e41540fb54847beee9dc5b3b5f25b2e566751dd51261df418d3a3320cbcd96ae3a5d6d3813160c9cbf2ec3dc99565f50168a9eaa816c61ce40c3c8d6113d05f1ade8cacb265243e00e5e51857a9a0e567375c1d774859391d736b736ddec2a00e99968c5862fb6566e6771bc144e0ec2298f12b7487e434dcf3ea34d390df6c1022f93a3236c55ed6860342a13bf2d61d55df5aa8c27501ede6ad11e0277a4b9cd73f6423f9ed68ca67096bc05a39e1780cae18acfcb63ac1ac457e73cda7e46d02ce551a4c636c0660dfbbb806aa0d0d8d9173fc510a42e49d334cb1d92554b5544c23af650685446c520a977de16f85c396ad8a3a2c20b49d70fc05e936935927b4180ab4c83e5f1bbe06369cbfacb868487e64d3d1396954a782afa32ac36f0186d883ff873a3713959d6956a742b3dd036992ae28d3a8be9c01cf860f4a0dfc28a2857bb49b192bdc0b15c024c18cae2ed5f19a2359c53584ce42c1105d29f64b3aaf844921be837ccd03b85f82ab0c656bbff818b8faaddabc7d800407a6997383396c784518e364a1406b1e45cca35316e953ef1332a7679580d7cc1fb29c05a9c2396ac274f8955704e557595c6aab4894f491cae544e63aa6e2d4f2014a40adb4853f38047d15d8d0f2bc490b2a0b3921cc39fa5193ad687c13112a1dcc7b2b0d1ca2decd75278664dfa4f46b75dfdc52950abd03a9ae2141559ed561baee4d4b62760cb9db2a694cca9724744c7333a28e87d16d8602f7fe07c2e4ba384aa2ef45ceaead659ce742e41bc94c6966c0a0d2474006cc262166b610b1db499d39e6bd14ec2543d9febcc2a9a00368244bcb50a7124607f0971f695f71ddf35c364971bafca86a5593d9766f59168971579bcc6354b44008f0202bee1cf9c1c10db3845f549a57161d7954cf5b5580954479e3018c64d9ac902f581324295d392ecfcece076f5c768d68f04c7bcda2f6323ba02d0e8a654dad5b630e4810fcaa8d50960491da8613972f1a1aca5efc880bb96272d3143370f0a861d83ce746e47ad8303ecd33ff4e0dc8496244b045f4bd46ffd8a32d749680c596dc09644b76a29bfb3599b02d9429cab6d45d8325ad8e471b7731e8e1a68a1c8105c0b751663b57e57403f1110b8624fc5660b7f81b71243193022ce33249d4bc661961e41b58beebdae929a78569d3c87453cf63ee1568754519d59bf98a5a9d01220d28544fc3c3d091d1c79a05b658b3c1d9e9588b8ea22270eabbf53a34654cda33f2f5c7ea2f582d197fe1b751743655fb356aa14ca0d7d99aabb7614ea2be048cdabfe7f8a861e285113fc3769258d9c4cf9ed6eba922741d0510fa40a884ba29157d201d2e82fd03eb871533995948612a42dbb9f20ad7423c40ad29dbb9509e55e0560a41e21ab6cb45cc7d4ce427ea3cb8729ac30c21163b5d35c561df63141a17fafe96093649b54ec140ae9a93fa0563906d658769c6cfd547d7fc036a26a563289521c90669625a2eb073b32a2b9b2be48bea3f0804e1949b444cc8ccc23a57567d96ab32bc14a839a3d82ce9d75b1b7475a1ba9267180665d39c0df59fb3533b16fcaf13fd070d514bf920eaf7fcaabc5720071cb1cc0fe699e7e2843639eae67261bd2dc3bd28894f3336437659f633fcd01c16fd409160c345845700ef8768aa737e273c0b911a8993e1480e376ab1da0a17f75b603e28b224aedba13584f1c43ef235202404021061d03e3050bbc1b02726ec584b09e955db1fdbeb09167b7d6fd1c4bbda894a23bffb77ef9688bea8557747217532ac958c02129596c49066a3d165892366481443e16bac28f54c8c7d42582e9507f358f206e8c7777db57094f9271773b74faab278ecc1e6501e1053b6cbe3cd9004437e2b80f2f0b3c6de8cea29cfb5aa676301125c79e1f9331d8a91df7f1a813e5a755481edec3586bb53fee05eb385eadafa499c4e03d22b639129ab640bea64dc1eb5d1504f250b4fafb7719f3d5807e78c518a5f7daaa126b002b1713b31c30a07e9795b8b0cd4f23c60e3e36f908fc78988b236afa2fa0264ccf4c5c17b6f9c18ac2b5a4dab9a5b4083a44b697f720e5e9303274eff0034e119a6ae49411f15c3a81959ad4863162603987d568ce690b3cfcd07b7cb53d093b58e7e7fde4909d2d754f9641a786eccf6e67bc36759bb27320e432dce22f40396f298882e8986d682330cd3b20f7fb5294e635806e7e1afc6cfd522e298345f90b6d7b84a83b126c8ac79ce4c4e36cf445f260031ec99fcc42b6988929442e38c34256e6a9fea46d1d32a9286583c35c564bb1d6ba25e8b6469a4aa56e5dbaee4f5c5cd91ad747d0ee4d26a60bc2ee2ce98b8ad3f5600692fbbabae736ad17eaf43fd1828641b54da6c9c9d739df92b0991c86280185127de8e592c8c17eb23de5af4e4ac2491bfb1c3b5e9a18c9336c9f3d92feda93cc4250abfc23bc3895b87666515701ea55287e5d6a4013abc60ed1c849a637411f78c575dcaa03892945460a67eadfdd8ec98c194bebb62e1b15f471bc8211cb007b8ea00c4233ed522fc448f277f5069e958a79c9cb576e259aa536a673756f815814d70e5c93f25c83187b7d7b46898c4ee7445030853e7d85f3d2239577e3218b549df56d006371bcb7819570aa7fc0e2af99633dfe8111b9f0054cc6e85e332a28f717a6693c5a0597987d0e2289d8a970711855aa8c89ce9fe9592e6a1a114b1bca2f03a78c75374fb25babe7e7e59bfd5e12eda63d186e1958654bc3a6f5492a425d0ffd23e0a8b484d852488b43840e4176351b659d0f616843a482fb114bc713f387637cf314fbcaed94b92351759b25f8a16803ec6d4ed014e89ab9efe62c7ad9bac41ffef824cbae6bd2843739d28f718eb12e9885805210753168ca45565bbfc1c317a6e4e568d890ee5e8bd2730c868747a03c0ab3f0b1f5601f1bf7cf4bfb6efdcea87c5f33538d233ff4c61e1ddfbcefbc3f200466d4ed469654e31bd0c649ad6a500a1ca0008a30d52bcaca8dc368d9f1efc2b9600fea8673a98689d6a15ff35139062e6d70e0d2fec3b58992ea6047c0c741b9783ee6f921ca0fd057c80c43f9cfa5ba7e8b1ffba9dc17609eb34d9d698e55d6af9bcac506a8085e0ad07d6f1d172c42006397aa1898c02c6f5a4490dcdde0c14a0b5e30059276d9c988805d21e4dc752694f60da83e60db2fcdde656eddd20e129a90e8621b370d8a3ff5c6d83c7cda0548311555da3064eefb141b7178235177c504192ac760f9786797c917db88edab22fa52e4ffe9ab1adadbc3c9ed946671f313271dde07c57a249c4e602c42a96baa13ef49256e2bb0440611923bf8542c5ab58755732d6f8281423153c4f60131c30401ccb0a6879e88506993ffe0105394290418b8edae84060d6533ec46bc030ccfe210589890e3eab6436894516108656a441423ac35b6788c8c0017d2932626868bff91fb9721a12f602262513d54b81d05e3befb76036b5c03d2697836fb682de982ce907cf4211dff2fda1c026eb74f16c0dfef3d97edb2082a5715b89a9f06744f0cce1f690e76687582d74340f5a9f33e498ccb4ade4aafdff6d0fff2484244ebef0055733f134e0b8c1921736c6ebb57a980b743bf56cb5151186244e19ed38833ff2c9d09ed5b30dbc2c553d41a5b2421149798d96864cee9f4a1a0696b9e04d226cf5f66225635338f0adb5b16610c11944b1fa9880f1b060fcb329263fae072baa51340edf374c4dcfcc4d573049ed27d2374952ab8514e9995c597912a4e5bc62cd233af8c1f9945077668359bf0c799e6e82e603417c20358c54d7330bcc561adf9d394ee744e746213fd0a137f13fdb28c0ecdf49902b93eac56453cae64955a3b24d7fb10f93cdae5013b714744ef63a38928fd659f2c08c2dfe3a1b70d5073b4a3ce89359cd2e6e016e0fc069637e5c23db93f174a3dd8dc8211511c31e2443b52393887df813e7599f21eb172b556d414c16492c575a68c0d0fbdfe5e59e14a2e80f454c3e08d4fa868e13b58815415edd3c4fa08f6e6fb66a164f24f6bcf2b287d74f8231703ecaf35c14f4951cd802e5b94714fe8df7c13f216eb5e88cb552ab277e83d53d475cd2e031886af422be1b004f219308a4d774e69bad5403d4261b5a7f802f16104a58499bbc13e6e624fa581e75954f8c3d7bf15ab588d8bebdc5fa2f2db54d329a50c0812339a46fad8baa42d24b8af56de5286c75aa560bd6bfbf89b1809b3a9dc560356f41de1030ab373d2e7cac01c32d3bf492086fb5ad702b16c6c0e8c232013a5c12682f1ddf0eb20e04e6b95e1f78011c4127265bda45c6b148fe0e69025e9e19044721184bf8a728870876c32078fee2a88f5e85f0c1f1cbd08bc56465451181433ac87608b7a705bf64b1ed7d1cff2e17c0d0e78b94128cde23426c3eee113edccc1b1863bb937016941ea2aa1086ededa8f267cfa5cfbb302cbe96365631ead4fba0522c9cff608f6bfc6bc0568aa1885711e2d4b99125a354259682c183e8d056859e3b1533940693bde4c239e33cc18abcb4a08aad9a59a32890048fb9f7b076b1e6c8e9253a5863f7476174c28f87f1b2ba41289b1adf4b73899925020f18c0552f995f193007359447feda9ac5d82cc1316db792db10a188680da569c7a1f8bd3b05f950e5cdffe1b1f31d6e2102817749677d846693ffb588394044bea0dd9b30b58c1d5c13fec8b3f135dfb1cf1f33d471aab019e3f0c4f5e33a3dcd50d35c5303f76389a9fad8ffad0e3059a08341300c76934fc644e33814e2e3fe1d58ac922d06d25274769609b7d33215b02d7361c431d745829c6ff69320b2a52fc95dee18ddfe2c6afb4c9935bb3472848db4e286f7acee94eaf60b16fa918300c35d3d3a95d1fa56a1fbfc7310cc367b04d0f480159fe618c869d8a8328025f3cda62c005510e9ee9bb8b931f39ad9f6abb41079ac1be178ffd0b80fff112ce145c13cb82f47ada6f92f6f63cf998d4332a0a4df0de3b96dd920b2418efe32d2b4f44665e522f5adf50153de08c6cdb6a11c5ca31ee21fa6186dbc21dba27ae9641d76f9818bda5a858f65aa5e30e7a0664c6581f277211751196e30eacf49679c9bff36e6777b994ac0174d2c31fe8fb83fa65dd275eb90d0e86f690121db5376b8625c3c15667aa77274e460c05b7dba420ca12669de150668f8acb5a6e91bca1f22309937c6ec04a44f937feadd895e31b257980c154176be4281113e6a246ec05d1bd05ff790595d666d84d076ca0000c0c2e4d3baee8bd85dd1195f039dad37f0e5d865c8108aa156ce56cb11548abb27cd81347471f9e4b7f76de06c529cf86663861223add5f1c07032180ed1f651db2fee0b2fe08ac56d4020ca407ec441cb0235764efed66682f2580c481cfa1a60a1dfd771680155839631b325a83fe57bc27cb313ba925ebc8d21d9a1973e630e83d75ce35060daefe8032184f6c9a754f35cdbc4fd71a6f9f3f1f8560157f3e6bb6cef0c665df26fb75ec8cb6927e82e8b81affce81bcc07494110773274d35af5b1e8ac78ce52991727c1453025d30d537faff15d9333213ad1020448ba61a6fa961079c0163403dc764ca4e3a896750d469f9dca378d6d9b064a812cf76cb6374f068c58609a539288d67bd898b33a42ae95cc144c42382bb19ec6d84670c8c1f060fd5795224c3ec50d0a6d1534cdb1eef79ee7b8ac8e97d3c7bc54b8d14bf877c9a6bed1a63fc1ba5fade7722337673ed6a9b834f357a73bae1b36d7d6f02d336e6f382354b2e215e7b33e037dd587249fc3a729f6977512820587ae5dba54273dd1435e4ff3f9ac0c7827ad5ce9b154befaf9e2b8afcf605679eec51887fae31e0e605715e25eb30bff3b031d2939f782de6a0b0b997fe49e74af3a27c528d7f16c395d6751a88ba8b53ab6d5e5129f497976df9055157e16c3e6d6cde263d7510ee685ad95f2b314ff133bf69ba573d05c29ed4bbd4b9ca1cbd4a7f9cb0ed89ee4ae3a64c7f844f71dbf03d7cca3657bdaf48c973a7661cd69fd20cee839ea2316f3ae96e0f423c6752f36d1fdf4a349a3f5993a078e39536fc0ede78a6e6694ffb1ce0d69378d1ae5879b310906c8e7f82e7512b07a5553af024f85178eb9c2fd63d677028c43fefd0b9437779b32f5f307629ce5b8352e650aaabe37a6d7c8417d2f7720fe3c9367376cac8547c1e847927e3c94eebbfbdc375d31b544cb96056ec7dae1e32dbdd0c3c79d6545bb6b0279c19067593bae6db4036dbb36e89b5e85ac1b26795266df6333cf64c8ee69e567eaba795d7abc0bc4fc4a3b7d6b24b82df697bf0c8653a6517adb64bc9e7f3c6ddaa45eb4796de9595af40f755204c3e5fe4acf3c8c8d0799119e5a86135198fb370cf996c502ff81589a66beda30d348653adba893bf234e6f0dba093a8bdc51f40c43f378589107987e7423e997c069425bdca6757319fa928bc42f692f4a69539379e7787081ca8bf7e402b5783b60f45398a69c5ff11d1d8d97224aa329b4526230778a777656d40951b384ac092061f38c009f3c041a86cd01b401989de6002fce80dca65b4977668e47f369fe7772dcd5af0f579ca0563c7224672b7b8b55917eb4a21af4a4e3144321c52de6e1df1a2ab1875c41abbf4cd32a4625168a95cc674a2dfe11905b3377c93db385e8e6698b179627dbe798c48b8bc624a4a411de6744d8c48a26528661481559068372e24976f39a55e8c523d785c66c4a26b48510bbc8d25f2fcb0f3540362f4c1cb8b8a25ec7865833e04821fc17d09074d88dc043b4062ee6b08233a8045989600f888cd744c262150f397c65e0d3ea417575718b3cfe3843e9b7a82cdadd094ced6e18bda152803e1c4b9108b158e7862f27caa4e16da5a383b5027df408140fa6e39739424aad71d8b2d3bbca8e1bf5671bfeed5c29ed98cd2b64abb380781b993f54981bf8cead4e03b918aaf4820fd250103baaa6924d0952120bf2f1d0ebc9f1267665ea8bd286f8c678bcc4f7865f122842022ad7c4a418d65cfc64cd407186f173376bdd7be9d6b7dfa6b39f49d2ea801ba937983c715ac571ddbd33912cab49c483c103fc2e41575cbe05e61f7f520ff64dc297886aba84486f9780811bdceff163833852ecc48b1dafacf71aaef0440fe1ac999a2843efcb627604310709de342de445848d09ebf9184f3ec29abb205d3505a245f4f1c2e583f97ef8b83585549bef744a5f301b9c8742f4f338da4603c35418d736ef9b93f6aaa8431f11ebe8722db37af68b55b991f2ab13b42f01b698dda5e891022fbc6782d91fe35ac854e270f1b325cac86c61b240489d0ab67aac23fb1672893fc27c33bc90f8d3c72e5ac2cdc6de75a2c99c94757190ab030d649f10872425ad39edf94cc42df3294993897426dc73bfed7b438494017320dc4d47ce6497a9b81d00cc5b2086f67d25712afe0b84a95d9a1fefe40fd1e7a44013c2d01d683011a19d373b38ba9f686270b930fbdb7b98430ac2502b398c5fb75cf967b28e3ca6de2b0f692f7421852993154b606244d03eabfe28a5930d6554d1bfda03d6e9683443dda837f3813a1350783ffb8ac730f011b32f8dd815f7af8813daee4b43f10de56e70bc0d71fa74320c827d7c5617da415b928ccaad3ce5cd5fc76b93cde2ef9d596fe365ad9469656f6e69601aa088408950831881d8d80b72180b6217e3c03993edb29307d76d43f32f61800daf373de8aecfc71849ad9b08ce9dd9d43af09bc5d24fa94d2fab7d3e65e7fbd2dd5bfb74545ce722a7ded17beb245d5e9702bc8b49ce53ec6bf97d1713a34a9ba208dbbb9f1f69dbbb1f11bddf6868e19b2a11da4a9f999ecc3c6db7c55e5b763865abee537baaf119b4ce4c6dbb0f13634111bf546b6f15567948f0b3e97df482e9f9a3ed48e64a864c898f9982167e5b757f67b199d9d24395e5fe0d9ef638ae0cdc379ef65cca86ab4fa3511030a3873ed6d0ed914c1a93353300aefd2b7bc0b1470f64dbe50b29d1323946c19b673a233b4638cd45d7fcdaccea37d23a350361ed57351482e6a4709d86d991d991e67cd90e19da3e99991657aa4c01b0b100b10bc61e9a9d11bc52e969e97979fd11b7d7995def0cb6b969efddcd53a66486badb5d6af6766ac62f81afd3aca660132c17e2e3d25e031c245a688fd5c62b8e0a2138385fd3e6a1620179d8fc145e7572e3a3fc345e7675c746edcd05aeb03d478948f1b4fc3d3a089d8f81b1ae5c3e66ffc0d4d8486b7f922384570dccdc9ef2e12aee6d9c8a81bde8ea982ab796fe36d7c7d7646a552a99efa4af5efcecce8d7864fef720c91ab793143aee6a954333333334f7d35f3eeaa9e87c70c391d4e35f333326864a8d1f4cb5933ff5e4771d60c8f3f86c8e950d188613583a5f533640dc557335903f9ea917e23052186a5a57d8dde7e6b4f436f2f83de4e5ba3d12bdd92a167e88d92006f2e2e1b19a5dfc6dff8eae2723a200ccc3b07c3244be22b97d3e1fbbd8b8fb3321e5fbd97c2f1efa3112cf3a8c791331e48e3e2723a9c703a54ff4e271830deb91b148cafaaec3b262626066a990a5c8d2abb9d217135ef69c8314352f07691ec1b19a57a9b262001c2715b644106433836324aa56f78dbde4092450bc76dc1c5068470ded5d987cddbd04450fa6d84aee8c1b9b1032514e1d898b68beb09d8c4f21b6a6708b5036f1c0ab583dad9cf9bd8feaa3c8754ef6e4ecc145fc510f9eabd4ac70c41c12dafaf115753e42cfd32b0eab7d3863bfbdf46099d4becf8337ac37a3b1db1b7b8e3c7d01ac98ef27376db263f2f3c89c10be77390388fd8db1cdab29efd3e266fd90af67b1817d74651a81d175710df5bcc50de503ad86e07f67b53dea8cfa10d6371716d990ab6182cc898400604fbbd1633b4c9b882ccbdc50c6d3246a07ab88f1f75919de5ed3dcd2a5f3d20d367c7970f4d80e34bfd110561cc50cc949dfd5e068912bf9181c735f94267656f31445b46673fa21d08ed4d66673fea6222494cd17e4f48d99b8c91fd1e7abcb1e32401de6286ba70d60664baf6129dc7b1f938c503603344145334c5573639668ad33c9bec7062a631435dc0504fa2a198a1fd1e8b00bbdfe6d07e5f23b37800cbe099c16788f0a0c4defcf9230a6f8623870d3f587becabcbcdc15ab09f1cd57473b2961871689a06566a51a5585a4ed88edcd6ab65980d8e1c36fc3c12e92975a124cd83f4a3910b842fe3a0984b8c3650afb2cc454a554acb27295b608badd1597534a553adb60d0efbd857d2cdc1dec35e0eab6dec675fb59b939d3255bc39f024a18cfa04433efd6a6f0e3dd192d475142f8c6eced3cdc16d4c0bf1f7e2863662f4947ad5cd892fef8d5e4e199c75e419a53748a7b7c3e6d5f0df2e7c0f976c1ea5db8de9d2350172505e51824e3b300d32d8f81643dbc42ee0cd49e9c1596e01be1240f6a3c7320eeee68c7e8e660f58ce6100be7a31f67b9761877635f96d1bf85ccdfb1b357a7a1c1f7ca14e873b1d6f6799cade288d90e4584e784ac5604465b9395175c2311881e7afdc1ca9ba39b8fdb68af6f4155556ed5db7b0ce38e7683a27a7fcf9704e8a4528a78c0e933252985d4d01726091c1546d97c9118410aee49412ca082b9432ca1c373600091fc227f396219cd0e77d52460855396e29a59491a49b20553293a3915fb38cd816302cb089c9c88521087d55d4c3eb85d12d502c2816144208758c1042884595128ae61c9a432639b710b188118bc8053a04eac80539b11c589c1433ed1f1bfe8b818528b6ddf3a1e4c181915dc3764f9840d9d5cd48b257db3db94117fb09932576ddf623d176a703ff8f738253be2ad5d4b0371bb2791de6ec4759e2fcf2a32cffe56c667f07a0609c307cf95a2d866198cd3f48ae6298b52effb0ca83fd2bbc1df7df26c437217e79b07af34d7a9366ce39e7c3e4d4d497c4f21b101c1b101c9345ffc09ef493659b78172122a1dc86d8f3257c1e10667f21bef244ec9937b8e17b1187ffb6d8c5de5c5b00eeed6d4cc34dca17e23bcc5fd97cafbccc24d891e6c5dd0c912798ec52af00c1b101c1f1f48ff92b2fbd68feca7b436ae91d64dd1d4850b33800debc97cba360e853cb4adce1dfe501b2a6bc1df39f269a6f83f1fe5b96b7b7b3c71787f94fff78bff2a4cb837d1b4a968b2e694db790f4ebbd4317a94bff325fbb3840ed2f9c747ed527ed4070d898e276f85eb33747f2ec3a374b761b9bf365f98f07b9e78ac729afc6fc797178f07940171ef0bdec6f2e39384be51ddd2a39fe73b9ecd70bea8dc2c4fc769271fab3833432d9419a98ec200dfd0d088e0d7b90ea1ff2ed43924adeecbfed4108a1d49bd540706c18311cc11b101cdbd3427c93f40ff9d86ff3eb9b3b606ff5f6a64d0fabe3155e8d27c4e37e1a457ff4f38738f65cf066087c43d1c505eb48b19f40706cfb1b101c9bf4da6f367b24c4f77c9c4faec6fe0f92dedebe3cd86d7f08bc7971f47db4a1c111080e9b3d37211eaff07658bd5da0c8c6befee8e7cd1911ed2c4b3937dd30b0e5a6812d5fcaa775633a5ee1d598da5b27d74d9c67ceaae26cae39881d619413a3f66a31870dee87284888a7c7e5038b680beb403c848568d0a9660f0dfd60eae1455f34428c4e2a23b4d4c989d16c4462cddffec5d3e3f2f929ea79484e4470482868cb61f303cd68a82016211621d638fe89cad802c6b4777cb5fb7aaceea1b9c7cf57744f3f0c0dd16c542db6579ca4e028d869dc90d3b0c1f15ed9a3f8f4747474744a4e535835f49a81d9cee472a8bc222e5e989edee383e3b840f1565c8ce089ca13414fdeab22e8bd2655040515a93cf124e8890d454545ef1515151585e1c92a04550435096af24405084f9a3469021fa682509d6a5b696d7ff92a8a74183322392580b78c281b557b3512565961299950a92148b3e409151111bdbcbca0f77a2f183050a9132a05d30213639a494269c60bf09611c59d4802cc71a67e3f906608471dc75179995a31437ac5bd9e258f874708fbb4f898ee92e772c140c55049c997d00f6286b02adb42469465c1dd782bf3c2f69604f0e6adedff79cadea450c95b5208d3244890dca2ac67dca1f776dece90fbc8b01298618704617a3a77c96bcd58592af626852a5016404ec7285b00028224e0800c44c6fd2106eba3075ff9cb60438e1c03e0417373a8342cbc9992480abd29ad7837f76d524833e26ac060b33add1be28633a480df571a5602b8c64a21ff80b71c8d7f46c40177235f3349b845f2056f6ed10c44bef29fe1e6645df86acb886ad8dc30dc2247e37fbde06e3222a77160bb9cf9017ebf49a18c68bb90ca49ad61b51478a34b28a4894248e8169d368c7b43dc52280bfc7ebedc255a143636dcc68d77a3d220b390428ec67f0aeee6de222db617a99ce0f7db2d4aadb4a2c798024639319a8daabd1a09abacb0944c2aa419b357c4a810e917daadb1ce20116dac3256124414c82d8aeabd408f984d1798d1cb0e6e259f467c7bc4186958877183a845b792f7023346c66492c639c2b8c8b22cd36e94e9386309a8548209fecd7f133e16239166c086ff26a69f13a1c550451f906664b8066295b18a600b19655e528b32133f7b7e7d576f3fecfb2c4520a97fda74575a6dcdd477a5348ffe6620a74d213c7d5dc902fb45f9c0c291791f2c9cfb3e6ab8420b9f2778d16a15812313c4b67fb34caebe6205c6db3d016f39f63c7d3ec1fc1e2a029ca5f2f2ebb314813727f476131928d92eef525d5860f7648132657eaeb4ac65653e353d4b4602dbc72ec06f1fc13af85f669e7cf57a30f25a46bf1f7faff974456f14b7e80d9f74565ba766f3804fe7851d20811f8210e22cfcf387382bfefcd7aa31dfc7397b2cdff79cf9d6628037d76979d77156bd9151c10176d0419a16bd09895be5476ff5a6f22f7fcad169489f65eb2bd2dfac91dedd1b5c4824d3fc52de1ed09eafb27909f6fc17ecc35952e750000438cbc50de0cd751cc602ab5081edd33f598c05a6de737fda69c3c9e61c9987afe6cf7802c348e5eded547cbd8ef09a3668f9d36fee3a3f71f6d9e9542b5ef90db3b0b4e42df5a837c1986262f27d1893cda5522abbbd52b7b75f5ecb5bc62aa5b7c375b69376c50a4cdaf1e65ced3d3aa07afc1401cfa61a0500233f7b00cfc3e9fbed51ffeaaae5fa34b64a129c4d81577ecbb1a2552764bf7e4b4bcbfd7a352a07b7efe3e0f6d5f7b32fb269dee2f636fdcaf2eee2405fb3b9c8a6427cb36806bc1af579c0969cc357f3331b7c35ffe6ace893e9b793df7b6fcdfcde5a6b2d95fee692af4acf039632e94d3948b4c16f1c0e0ac6bf3c0cbde17fd128fbee7d35e7bb6c81af761d5fcdc72d6c9fe6913ee5174548dc2efa05f96ace28d7663f2293793875e1cd75482a3fdf759c8ed19e2b2baf129d90137ac07b3dbe9a0e68d99b13a25fdf5d1da7e3ed596bcdfebde63bd7def96af4dbeabdd7d2f2de7b3a474c3fff2161f959faf9d594ef97f2655959a12bcfc3493fca4162e63adb7bedf9356f59056baaddb32b5660e9ee37647a3bedec47d3ba0c1b41e1cdb1da7b7c35dfa336be9aff2284eb6f36d3fe10ed6bb579b67c659fe6adc8a6575b00dbd477e8f3f099635d0789b3e8911d4fe23cceba1afb2ab3becadee612ac39481cd1cf28d5aee36ae6af5881e7de5c47450bec7f726cea1fd98bc7400115b8892656a0609d2449922481800d749224d149928489243a499270c105173190c4e8a6ad4f56ebf5420c048368d8e0e84145e9ab685654666fc35e6d883d841ac44103c23c9a3872a81c68bbdbc82063e56adec72d33fa116e99d1a75467393e9552935366f429d53bd21c3948d2ba6fb72a4d4ce56a956384717473268e31ae4aaef2948fa2931a9c3f996729f5a4830d0e019d648438a30c5f90c61dbe249402ac0264023c023c027c4121f81a6574ce8fd1c2f8f69451e00b4342698431422921d048a546fb2ac244a91f3a95302c7aa99f33524d9ee07b9453ce098ba44aca9524c2b097518bf0555b11be30d7f68f0283a4c4a20f0cdafeb5e574c4383114b294c2d7cb34a194efc9183ac01892a11786e467bbcf0bf3d92ff8a2300a7cc197b37c4fc1a05086f9d0802ff8822f0a5f30e855a7c7d0816bdb8dfd7415ed1ab60302153fbbba193b4030c21010a8e0d975dfd9da95e454ced98c30af30cf791e7dcdd37ecdf35f1e3d96b587c9f063727c971718a8540bb45fabdf2244fce9a3ce57f3c8fb913d11db5fc4febebfda41bf8f51d2bfe7e19b103ff140d29befecb6dc35a5d7ddddddfd7ee618de45881031ff31c17efa3cb237cd5b9e888d392db267dc9a63db34b2376dd2161e36df2defd57f4e2dc43736e7a4fa07f62dfe53fb39e79c734eec277d0a6f609eea4d7b7775c0bea5e567deced970342e6f28a17cce5d3fed9846653f5f73d12f3050a916bdd5e8e18ff1e04cde0eec9f6e61f4b5f9a311d6e23e3f0878f36c501a867ed12efaa4df6bdafbe9b7e703b383345a0d36ff07b5f35f0ff6127b13f625ec595654f4fb93f62ed3fa3f97bd39eedad9c5b08b61598bf68fc9ab818d5ecbeeb6296f362b96bcfd4ade4e2a79c31bcb21e56acb1a0870167e47fa1cf26b58bdd558ad5ed3dbcf1cf265bf09898f524a29a599fe31ff5228de0ef8f8b18e5b9b8fb9f7de7bef6bd89afe319ffeab615f9f1ff71e15dcdd8152a74ee9ec71dfcfa759a3b2206c56ab3f9d3026a28f0989fbfe2624ee1af6dd80d4b0b5c7ea93b2d59b90482f0ef77f68da5e1decf7b20a36525831e18fb0df03420d9b3ef6a0783b2e7dfbf5dfcda9ad3dca726734cf3967dc19d50f8a57039b52ff785ee4e49905d5e69d6a93c1930d61f7d581c0015e64177514732fa304528c126aa1f995ce45e72c84f2e404bfcf46f461963715c55c8c314218e56866314299917845ea1c96393747549e20cc18d2c428638412429734c60825de82c60869208e114aea9c7bc5086384a418ff2d81df47cd460821d6b3ddcb2ec097313e0ca12c6501bf87ce91307e9e5aad0422025485bc1d510ff1a22e36c4b291db0288901091103432e4ed784570c0d5c0d60a145aaf25f47c5ace92507c056fa4cba0234f42793b5c077acd0e67f62cb1a76b4f261b4e241b4e2c38f83fd308a15904177e7e7e5c129f952a89b025905bc1ec707e7e5e3f3f33aec0dbfbf9c1f4873ea2d43cbd20bca0c91444f8793b1e8f08827490f070b251f43ae7e369bd17ac4001c3bdbdd623d9cc03c559a3d77dedb727c4c3f32eca87eb43fb1c5ae0ed09e9edb71361c2877d4d13d1de3e91fbf5abb52b50c0720789bb87fa6efbb01a01d90de2c37ed544723080c3e901d2d47738f4f688bfe925f6e925a26a26b267223e7673321df5e617c785c84d3fb3f6e68cdedd1e30cf0a3060d90f912200ddd13f2c73a8c5bff289abd1b4eb2e81e26866d88f0383cd4f89d3c0af193e91b7e3b9c0d58081ab8190e70478934072c859dbf39141528ab3306701c1ece1bf2cdcd3c2017935e0bf27f4b2b0727346bf5262b939a3af266772a8bd1f78f3a4e068e057816261c39f27e46a6414842490a52d206f8774355a5328668373b2b271b0c5c2e039278fe06ee4a90a1b4229850d99b0a92c9a2d3d58e849201ae00f60996dbf3e10bc715de8800936c0620a38b8620b1c6875d56faa01de24d09640120a9012f06ff8d1c6e6518a638c1be6e13ff0460ee1d1c0af02a8091bfef65ed20af944020949a0adc8be2d8d84ea54dbe3d93aacc3e82c0daeb4434eec197935e03bfd3cf05a0e883a1adc8e6c542d46312dbdbd72c293ca8a734e07e760c9398125066a6fe828bdf77e7837997e465ada44e336d376b76655b7fbd7841ce635e2e99a82324da347f2e2a1d092b5e0942d1c172e34f9e5418a5751afa65e29c251e184613dd8b10b2e232b53f3ced732324df7b55af43d810286b459382eec4bd44a579c7070423118325df8f07dad1cdc6bc312c040596109185f715278526698ee968fea57c433a204a5fb5acf0957858cd351845bc1dfe46bcd989898085ddb88303255b48d8827fb614fe1ff67ef6fbfe2681b0108f0a0d82f7af6628a29621514c031ce773c1c6e346ec9433242d2f11afceb9c18466996dd9c25f625d1ae7308760e5f948e29f11afc4719ebf11afc27663125523e015f623dbe0a0126b564948e027823b5eabd617473e46317087e9ad4ca484620cc1e6620d88ba4e32b27b556b6a83b2b5b6cff48a3ffca16180fac3b248ba100c3b740f00842d7de20910f6df16e0e46b4e5163bc8db773f5d77de13bc915af0e14f76b520575377e08d7dabeb0e96516c63b06613cecb73c3bc6434c26280b7ba63da75c707de5cffd95e77462e36c319915a308864c469e66cb12fc7ca53915c1f329caaeb0ea4f18f016f75673ba925c569fc61502625a985c10df312fbd26a189461d5242355ca544a8381c131f1af202fa6492d27905aef065382f1bc2081b7bab37344455293146ded1fa1ab1a11f58c05242021a8e849d0131b8a8a8ade2b2a2a2a42427fa1565781c01b86ef79741a0409618fb97b7831de9c379f83da1429679c345a5894fa3f954ea51496fa3f954ea514a6945a8a634bb55a7dea532a20b09fecc31608bce10d04dee83302866fef0da6edae953e0586d84b9f80c0db038129a9443a418c5554566e0e84104209219470baafb0a860161616169617ed3d10ecb5e13f982980bdb6eb1f4f17992f5b41a22e178fc6c3772c381d350fe15bfd6817f68d97aea669ef59ab5f91ab198d46b9a2f46ba16a7552307535f0df0cb0ff0cef505ea14565b76b72465d8dcaabfca641156b7f88b350a8af91c8db4388380b95d99a0c93e06ae0d3c8308aab813f4316826e94866f6845db2bbf697b7b43232938f52d0e61b4d067c8f008ae063e4ace89d94929f63009a3f80aea70ebd39b93a2364b3d2a8f3ebb39a991cd50b58ede88de9c2152f0465bbca5657475b8f5ebcdc9d5dafca93c7a7b73f2b536a569f7dd9b33246fa8872f5703bfaa4c41ca16e23bf5a84fbdb735d9edb7c3edf7347aa07ec8dbaf7024055fe76a6ed117ce42fd7b6fb91167c9fccba9d4d77777b8a47f3747a5df17be7295df1c954e652d46a8bd2fe083504bfd0d71a7f42b1a42e4b59c95fa17c33f9a7f32fc53651d6e7d787366e8d7f2d59b116fce0c69e355e5d157f7e684da6b39f924d49cabb13f24e79721e7fc301f430cf9fde6e0767e1e1ec386799a2cf3a94fb94d419b8a36256d6ada146653d4a6329b1ad954b5296b53d7a6342dfbae3119e63fcbbccef96364989fc9322f23e7af325fa185c96fca2382c930284329190add1bf0466918054686036cf3f074fa5fd96c1bed1cde2ca7cdf20eded4d028cdf2a36ae1431ef6390bb51938e08dd26f8808787322272a3d7cc19b1a8f72f9ede9c087327a3bc1e80defacf3a7e04a13619f7e7b43f1c7d5bcc0787892d1303aeb0da77490946dfacd89608d570df61fe22bffd4678ffa8d5288e9025c4dce325e26cf3c4c8ef1a86c377c11fdd41cd4bb9b83d2d65739cbc87c7e98aff1e6c0d09b83db32dac2bc5da7cd593f4cce8fca6ecb6477633c0fcf39fa2af5555a5426ed3a2d2a6bbb621695efb6bbee3ab2a83cdab55a54ce76b51695e9aed7a232b6ab665179ee4ab2a82c77c51695e3ae2a1695e1ae2c2c240dd543dbaad7b64a6f44ec18daf92af539eb97c9ff3039e6513e88d4789bb7a1f0a6c6a7fe5d1f446a6822359e429ad43b542aa35035f2d04e694168a7b490b851a8a7be4a3d0fd857292dc4576ff5de1681b0e1bfe42d26217ab19f1641a209beb6d25e81af20f0bdbcb5b99157b4b92f9e119ecdbd9c93cd6e4fc91f1aaea38812c57d5ab60c146ca00a5c3a5195172c5069e1892742904412492431012842904412214822091c2411822492e8a28b2e740f9e3c7912d4a48a2a025bbe9de23776054e2616573c2e1f253d4aa288766a27404ea044b14b3ebefad9b202c146dec3b05c62f2deeb988e40b284dc31f1386b944b3dbe32e9988ed8bf99906c1e5f495752b2bd1434638a08054c602c45290515396bc35ad85eecadf44529089682b6fc521467b10cc11be85888726613706bbb9b5a26232697290abf41bd4c479298741c6733f1987a4c4cb6c4d94c1891b336dcda43ce7a5dec52175b89670761b2e5f76c893ac01da2d47238150a938ea95601b74c3af1e19b5a261d7813b583349225a805251e670549536b9f5e5b6e27a12db7d3500f46541e0e417aed256a6a940ff8e31f007fd4433031848ac69a4568cb3f401c026aeaf4c612b4e5af48804d2d7843d2281ff1b58faf699617a4d1211235ea007108f8f11d8ebb0880ba147589f2ec2dee38ebb45dd45c2c70c9f9a283a4c795051e19c480097c1f1f3ed444a2ae42b508de381c982b11a4a936c99c33bf6c91f84ae6d4af45335b25be923fcab667095fc96a79b2456293581e5fc9af402e48234d2d48233fa32624be92281f9088694757214823bf088e34b57c25a785e2acad343473c9573ece82f1b2415760170b8c6cf9f607d6d12c0d396b33b54a539c15b96061eba23c60662b944a046f9c12b748e00d1572384b589ea1faaa3ef5c7ba8a9c8ef7f29f11bc995a5bfe665d272057238d6c6977b6dc4c2d21bcd91c60056964d48137573fa491275fb54c81fddf5b97b3e496ce091248b67c2b34c56fb21f1b85b39c1315f06cf96eb3ae2dadcf96f6b5a50ddad25eb1a5fdd9f2b1f9e24e8fb3a40cb6fc88240651c996716787976f036fe2cb772aa97fbcec50d7d4e5b69b0f0a81b177d20a81e7cbeb438633fa2c17c109c2524a8aa93dfde9aa50bab25939a047711ee6726937e76519e523fbd18fb42e821399f80ac61881481f1836cb28f8d917c1a9f40822598cd88beef8caa3a64872b44ce1bfe3ac237cc9f6c75e4e87ca7e8f45f11b8af31e93e237f83df6dc0de5a940fb3d85817335d8fef8e63c777dd02e84d7ce4bbfce2599a614c3a6a531521aa18c124a19238c30de1c196d76e5d7ec1a20c3194597af3cfe401aff99a32b7b8f466097c389419b67c60858c6c8022c7ffa125846d708c2c0f81ccc48a3aeac83143c994daf0611428308a11bfb99ebc76c5f66ed6b9473f432d7afd392b28f02f8007c156d26e2f22d3dac208da37c7838364c546086ce5e823a40cb105e5bb26721832841382917e0cd0525c0e9d84d58e16ade8edd8490abe1b6bf021ae058d9fb47c0b148ef3f01a783beff0fce823ff3f3c1b182c8fc8b7001b7ca4484c0a20a1cd3d71addcf8edb49b18227768c3e51f88fb776dd4e8a1540b1475f61cedc05840d24850a09c6db6e27c50aa0ecd1576947f939f11526fdbc24b8d516f0e6ae2b9cc6df29c9ba1074cbaf255bba76ba6453517cff1af38c2660ffb9816309a13b8810bcb19f3970372d3f704d9c0ef91e6b5cd8cdb94cb21dd9d16854b2cf522a95bea49febf978116ee54f3329bf2ff2bb80d309c259de812735817f9cb5bde7c459b2899362054e368e6fee649431a0849d222976963320c5134fa0c126e529842c8a70c4a639001be618e30b39eda8df154fa809d809bd25a00fdcc1dbe13b3ef6289cb502e451e076d7f6cda16ce782f3f7772a81cade5e9117e1ee029511b0cb5dcecadedfa3783bbc88ed3ef0c93ede9cac621aa6b2edcae879385d51a9310789503fa0f7f39c20b1c557e4ada7023764062ed8ee0af21c3b711a858f4c0536c0317d2dd929df0eecd5f0af9907db3f83f8edc0b443f16af8bbf6e9c2f6afa5ca6273e65f271c86d5a9dde5aeb763bebf3fe17460efef3770ac4ce7203b0e5c0d172a8e305d1c4a5070b17ee7d72cc469678f6521e8be983be156fecec45917ba93edefd2acbfea2e5f31d1fa09eca4e5e2e086865059ac4b36fdca266a18a30a77391d4370808b1e9e1ddfdffdddd49bfb6cf79f98fd89b77227aebb5c8d7f0ccf5e66b75d5c24eae2f06e784da6b0a3b6801042e00d3fcb429c36fc53eaa13f2cf9aa259b9ee6b8b15cf77c51e37062c38e3ae52b531e820845c92b35f595296e776d7f77c19b982a44e0c5158e7c21c9141c7ff78137309cf8f46003549ca00527c0f1f71f67c52f2c21053dd8fe8ee6f9432116cf51a8eefe25c4012267a4b55f0bb6936203ae5d2bb5ef5a0821095a1249b35af60ddf7b55c3342c6ff455ecc2990da1d3388410421cb4469da5f2dad79ba3d189691642488296449211ba256950d3155aed797891d1bd21eee82bf8d15970a45204270500b6fb1adc4db4c1015529c8e3823792a7e56a617c3ac5d748dbe0abd7d234d9d2ded5688f3d0f8f2f5ffdcb230fcb08f0a67df6d96fcec3a324d3348d59f5ef3b1db41d7b907694beb7217c57b735a37ac0bd11b14bfbed0ae19e79a35bdcd0623ade1c88ea01377cb8a1de88d8da1fb1eb43ed61c5afd9d7b427d587f635edabf6b508251b6f528efbc404763b7eb517660b90ec57882f0fda43ede16b6ed7aa5fcb3fae0eb64765d1aeb5aa95af68388f2b71d6467a95f71fa4c7ef2befef2e703ab4f7af9af62a4fcadbdbdaaff0805fc3af65b749597b777b688f9f87af08f13649bfafe0abe48df4f771fe417aede9d5e1f620694d77c095b810de646bbb3fe9a5bf34e22ce874d4fcb63402d2bb03fcfab5f45ad6b2e9f6805f75b50fad964f3965b3d7346d0393fb5e5f7b875787f7ee0ef6b5873d2a29bf607d1385c1f115637c59575399c0a48f7f6f70127ef85a8e1b5e1d489bf415672bc50678b6d3623b298a60b2ab8b6d5182b7b74fb6650338fe865b94e01ffff68f93afe0471852837b1b62e39c6d12264b30fc391851f37db385752bb2e10693e5cd74c5de9cc78ba8bcb7c1cc26a5154278abdcf7de2ae59c18462986ddeac4117aab1347b25b9d38a291301ec538fa389ad9a43febcdaeee00c79578aba522d651adb105e625b5d6995153bd2d4becdf4c32e234b0a2505648a5ac0003638551e6f90349d8420b8a6e7003161c514209259400c2e788124a1c5142891c2871440925bcf0229d6aa8046c582a8b9832343302000000003315002030100c08c503a214470355d6e80314000c7d96486a6a3811874992a2280a32c018430c200000000830c60ccdcc1c0068a08c6e4cad1d4118417a4482af576ada8241c05579bc03e753233d41344a2080a66f8c3ce5250e1a77dadb0618381a5825f42a5103f744799bfe1912ac2d6d38a53a191fc895bf545b95e914074cd7da272742025f578decaee3c1bcb40b2475869ebcd19e8b47e95997257461aa01688ecbee22d019f22bc9b8aff867721a165ef664cddcd93980061becc6cf74c73136874e59dbb27d3f330679d63bf01e8965efa69a884d18446a724a9154b57074dd121228ed739b16c52a98019fe35390ae75b68614703525409dc214888a3635b794c0e787a66241f5e7a3391f8fbb991a6bd197ed3d2d4df4015d4c260e2d3f99694181d6e3a81bc841dc7a51d8760eb7b26a546654da83fd3a4293d14cc51729008bd8af01d2fa7254e7c099a122e2c69844b6ac829d9580097f5727c187b4207e80c04a357274834e8276310334aa2124695b32657bfe3c9d5f1ea3df2949c318a1224dc9215dc39ca2ae8dc5059ea5d99485b97f3b9c3421179d52983b66ed89c4a04634471e265c8817a84e375be42c730832e817a6187f9d968d0c6f800e6432d1790bce2b199764ccad03c1b60c1e45929b933f02a296f4419bc366195c46d67b2bc434bcd62e6cdbec136e977ee11eefbcce5a345101bfef64ca9db1076460ca3c102153bd1150c32edb3ac85824d03f919c8138309eae35d4d341d1cc5db4bef6d2f0141b51730b4dcb51ff501c7caa92a740ad1e9e193ae201c9e612c5d4888df4d9c13e89e0b2e6fc4dda872e620c8cb08093c4378cf7548be6ebc94490a87352a12edb315c151dee62c2e88e0589e91aff6bee03592e437b9f6b080402eb747bedc14161f501b904c4fe2bac07ec87b1b13f2788c8c899943c91c35708e2a6a0db4d488f6e373ae5d7fb6a7bbcce480414e993cc91a5cb362db3d8a4bb36910f79468e459a28a73bf0382d00346634c769786aee4024a35f9bdfad330fcce13165f7e2a29cf126f47e4b41e71165b481642af0a22d9b8468cd1b1faf1556f06c56e6244545120074d6952b23aa36f4c3eb1224bf1ce19285db638e624ff563f48dcc3634c09a5dc6fe507b9adeffdabc13f695a7b230375e74f3ec1ba85b1342520c4d4b0ab76c56171d9621ebfd830713d54ae0e04eae6d9d2761d9992e3a5c3776a68bce01ebe79b5b81326b6e755b0efa66a9b15a2b96e82edbf94c5f829536e1f8249864cff46511ab943164db29f58bbaef74d4c3380140560d65a10afef838f5555bb18ed11ae7b995cf74cb0d2b2d5235d8a0c71c204abd7bfba4f6c233c2ebe43318e5ebc8c2799120f8985db77a632c206c4a7ddcc4128e80d0d5b9d8c0722a306f89ddbecc3248a58115ca2c3b63157d8127b2f3d787dd60b702177fe45f0777c3fcba96d6c53c85aed202534c0e0d7d9a352856a0a68531e7211a16fa16bf470e739a13882b2a16f03fbf76c245a6bc18e7700f4ad87782931a60ccbf6308aa1529d9088caf956c35b0064cce917d456a4ebd57e06f6f81e6bdd10e488a9aed66cc2e4c20436c630b6838c4c5d10ec4c1ec312eb7c00a756293eb4f7f0fe43fa3ecf27a147a2dc5036d4b17566c2bc05fc23dfd1623f6d62b872168227f1672cce237c2daadd7a0039040a19df9ef72f76ef5e8ac8609166c76d37a516ed04072ba0a696dc02f34ae76381b8113791e56bc1b5fb217afdc579a0e1fd6919ef64fd3912dfe23748c1e49db0a28394fcc5732ae98bd5948739cc934b1af050b0d95c626e7953979ba625109ff8fc86bb30e0d35377f3597f148d6a3e39d78c5d6a151a3362256b66f524edb2bcc79230f7efab89a18accf18fbdadec86b6289d2dfbed5fb5b862f7ba9505a791f26f9a8899297f579f7457771d4142fa1a64cadffb0ce12608134e3b8a1749766c1dea52ea58ca02524d07bd60b99581bf03ba0199c950a29e8fcad9fb1bcaef118ed6daddcb19cc81fc2c55e1ce4275bffcfef1921cbf4da5b6aacfc9bdac41768865bf91454c356d3c10a19bffea64a0dffd7cc91b12ac5bdb2174f62a9cef80110e2d9cdcd7c2bde882982672c04ef8a7e705d703f33a08f8305d1084dbe9ec038e86d895076ea6ca1219357add81eadb269add9459a2b072194829df9de23c4347f3bfe3412a6186cc4a21247e7b440ea1f2874c32ec04468d1ac964b614df7a6b1e89ad2f27246ff2dcec9ebc4185e8ecf70077f71e83c52fb0d719cf24796852838e2bb68d1758ad509d95b12d69f636418054e78bfedb1d4e162b85e062158686bc73c2937867a905f0875435063bd64a43f93eb00aaf22004ee341cad253cba28ddc4e4167c1ed9bd507b17b7bcc49540339bcde8c681530032823a6c5355cc81a444b1d250d649546d729f0537f6d4ee98bd200d58f5ab0f9662bae0954b03ebf237b79388443e4a5672925778dfb80b13f4079852acd2b0acdbea7aa6fb81531ed0504ef41046ce7e84cb7c4b9dfed4e8cace5a6af414d325270b404497b15ac5080c40a653b99970b79f939b665a0eeae50b181fd8fe2ba3fdaf2373ed30de09490482d0b6f13407ffaffa9b4000459cb77bc595e7a0c58df980fe1431609b3abb47f3f7c8369ceed58a2a5c0cb3e6b0ff59672fcb82b3c724214ac13eb7a2e2e75a1aaf4d46afb16c4716909d1c209993510ebe96a334295fdaa01c0b763d935fa826137a81906db5ed22c529afd9a881d3820c9b865970d90aae4c3ddbd8b0dfa9b3aea8f37dc426d95dfc296418b283ed57e19bc22df0099942b1987a98df43dfc1fa54c7a4284b1495bcf380d078d834c5bca0c624c795637c5ce18ceff08e81bbe28e57b5f71b3456ca1ffd3a94fcfc0991e233ced74cd260a68a493126fa9730fecf3a154243699db742b3a487cdc45a415df62875c95ec4e898b382668c5863aec15c2fc0cc4a922c08f7ad0f3475b0c43bccacf8fee55021f7101e4a885dd862035ade6b08cd178d357272d74d5ef5df8bbceabec408262f6bc1777b686665ed9975322c4d3e5cbe0f7bf4b5190e55a27feabfe9340ce618a78f58efb7024d002d2d38a02323fc47b47251bde0e8ab2200bd7f0d80a204bb1b8cd31a2bb87e3a56411101f5021324a807ba373160b3ab78548262c9c1640205bffc28394b5e4c813bcdeaada609afc5d7f6962c00f56ba723169b10a7030045c3f8e4fc96ec340c3caa1607365802f88b011c6f1854483cd218470a9162427afced4fc208ee4ef457d717c8654a22777695ea1ee4950c153e1865af0c48548a6d706bb9a4569438a7056a7da0c569ae1c8e0de0ee9733da270080fa01ea0e80d7a348c4d40540f1defa24cab17c876e14d21083783ec631ff80547961a8d11c043100ce74b886c224552319e8ef2c93cd2cdce3f2aff4226fe3f0ac9670cb38f04bef4e7b997012021cc9f088823e3c9eaf0ef2102dac4ab111f5c97212b06af02645b38ede5478ee540e8787401ed5d1837d63e811dc61c85fa0192138feba3d92eb1a2894cc8559eab570b1de7a124d274a024b54ce0e280359ac8ab3ba3c7f328af9fc210f606385140d776a76243d5e20b46e02872812443780bf0197bc859c1b1163e25e2bea1f49cfd924c316b1a52281ae751eed61b0bf962a2abedf479deb36b6e62823152249f2160271503e0bb872d46685822508c06e60e116c002f7909500bfe8e337f42f94f288f8f8180a2a1ea6b23e670efb215fd61c06325c9cbd38606ee88b1df99c3b112172b0fdebfcc9cb7bbb1202b67e8d80a56aa32fc4705177edde713cbdafdc7d151c78b956458f97ea23841c4c87ea5685982f050e13af83c771a5dd1146ecbbe8c12e3109638b9cf94bf864f667adf62739a94ab11b4340e4d506c1bf723e04b85c70636bdf694d99b7023f52abcce137170f9a0069b482ca1c8886d20dda144e860ce490ddf63987b66bafc2244fe80fe88c847df69b428e7efa6f6c7d9064e7fbfdaf3984991784ea9731c34570c1fa5ce29866a24b90cbbb433d52a6ac8351dfd5396b9dd5f1dc592ba2a7118056070498b0278e240ce0a5b7bc4a981a66df8474096abe07fd902a6a35174de8bef46320e5e09ce6038119738611704cd9b17b06212645b9d8e308c4783aa6bae0b2b7f5815c0f81e988a95ede410568f24c99a31bbd55f092e2792071b4d9d9cc11419c881ada81dc54b10ce73e11a19d5c9044f3b72673fe39320adb9617a859d0636743e2c066580ddb7de3ced212e0164c9f7d6e9a041fc5b1ade6093c66709daf116298f44818f517a246d272be7c87b52e7c8bf058472264af82ef440420927c90607f27f05c8b35aff3ad0dc162145cdab7d9f0083030f892191040e3b8ec60b5d0814d6ee8d4e5838b5dea56f228a173de6ab7c3f20c91502658f17d9bb04fd67242e33cddf305d2b2a9eef198fb834e4a4fa4fba8a2dbdf1b9c5a65fbdcf151e786fe880e549fee2ff5fe0437ee97347fe9cc2e33246ff6583171fce4c673115c0f5cdfbf91224aec1e3d2a9b2105cf500056aff4b9dbd275b53d84e2bb787a273f8114ffae50b0bf0314fb85bf50a04cf963a4ac09d478db68ebf0eb8b1d22532f28152cf6082b54c8c8e37a602a6020b6592164073f66eefccdda52214a7497d6a9f04d766aa05b8eeef42725bdc8a35855b2dfc8ed15553505fb9ba2aa322c6f66bfddec64c5cd32ca6b7ab044b0a337c7c1fa2aa76dcf4a646b035dc83e0548c756e337c530d7ae3f0d412fe95a233e6c606d830f998515ade5feb9af6647af12448d424a94f26f4059f46395dc2503cad8d76a9e31f01921a3890f1d5ee988c76fc7bc24cbf3632a9bc6602faf12e8f71c7e3e941c64588a42ee9c879645412eb662d8b83a10d6edc10ac153624966d90163945e28501c2264662de0496b23e86195cff8a60a386f405c9c08cf747dcd2e62146a824e70187d41415e966102bd5db52e5b1670d64eeb9b08177778f258ee91336dc72f9d1ca469c2dd37a178baebc541887931285786cf6605410204ca105d3eb2f4bf47bb1bb8d39e9c1805e78a5c803e7936c4837dcea8be2e3dfd9b15d132940f3c19009b51e9727fdb23494f9f39d72e70bb2ef81514996874661ad4b714d5d7c5f4be5c1bf9d36a98d0235f1f94397aeace4af6d551c031bf0f19eb4c8630405691ac9ae6157b97aacb981f08a94ff8ec3069259ae043d61f439c8c8084baa490b1e2aa1848f8ff0f0e7bb5ca138bc4a731b3ad2f864e06062465742990f41d4a44a391239d11921e8d47617efdc6e0c87c395c0071f2e1299beffcb6be416a750be4ed90943f27a2e856e33f1fef80fb0724faff7007bc175051ff873be81d079cfaa7acdee081ad2f019077a4f5794c0ec9403d66656534c7ff907b7756636e763591503ca6151d29d2072f6b71262585fc7f4c6c1fd94f9a48f9c105c90fac67d2c1a99736d1256fa1af69befff8d33e852b9302ad08c182c4d6c803d02acdde18f118458d13c554f411d010a87460133ab98f12aa93396e62c7f8c0d35041191e913aeebfcfcedaaf6083b2ad2a531fba6a2ad5844c732065191e6eb88cc6faa6de999eaac86e032d1673f00f9e73995652a1db6d619ce827b60d00fd020cc5c7ec0f463260aa6762061721aadc196e4617b2b61902f4e75e6b4559ab10ed6d049894913bc6ed995b49dead9ddc8926fa92563cc55b2ebc97da0458103ac2366b3493fe9ce91ec1489129bac6a2bbc97a98733fabcc562bd0310cc840b8259e87ff7497fbc9a35bb2abe02455263c5677b94bb29175ad751cc8e1c952486c5714fd58574c8f57a26330a54bbe6111708be7e29a5c096b2f4616e848a2afb330a6e6f981e5f413db4a6fe570e61f5e3d6c6003b785410ba26115eb0fc84bf1ef48916570df2b666fc1244914d92b197bd1c08685537e257a06eebe7d9d93dd82e07e39e44ba46d07758213c4b34aa06cca2eac0ed44e29624880edc3268ca7a5e8e4a2f429d5641cb5d252875e8294964552eb948b79f171ddb6ceb26ee0171380e8a1e149abed9210b40a3aa5b92e7144d64b4b9f0d0940ccb22633b21015983abc88b700a04248290e54e4b5c1bf04d28608b4d5e9f9faf0bd194a2f536b2dc8c82321b21a516c7b0a94d439eb495dad7fa950df5c285dbbe41a394b593aca42981eb31606e209baf0b976b1396b73bf940a8193a90c14b35d44b0a516e9f09cec793f4841042e0bb0cc658ccb886002ee1238cab6988a5f23c20b6dcaf94eab2eae625b4dc5b702c90617af9647a182785fb0f3dae3d98a951547f40c6e41ffd78811c35b0ca875e30f2fc77d413b60d46f9c7f005622f00b610d91141c86c66ae4a5a375d333f481a8f2c2c524049c001b24d5c27d020bf109a4375709a9e3a723a4114a3b8fc431fa04a02b06d2abe12e4bb9e830fc841f979a4fc411e945bc362200a34a0c10148a8255968f1981a166899038c64719cce7324576dda3218eb77065de2cb7eff7911e644cf28a9a24198a9146d43fb40b67ec394b277f8c852f21c39c11cc7393492badf85e1cb2423acc580bd695ad49579a2a62bc81fa12804b4d535f7bba4a7c0522a711bb75616f665efaafcbc60ec18a309e3f2d09fe342d093f3d6f9c3c603a337459b3b87a1ccabe3a10211ec7dba19c638e22574bcb1f818cf9612d76361de5757afa73b668ce450e8c371902df0f1d19f2130a91878b92dc4a889ed6b2b107a9e62e7312391724cba31f0e2136df63f9042cfcb637b8050dce8f7686362e8c31fb355468bd49550cb30b1467080f8821f13ca4de49403ba796bbfa68847d86cca2c5b0f29ddab08f60f57af74318e369d7a1da0179b12c3c6643f84e4df6f1766566d558a49baed11648185dd1a98b0e86008b265563f9aa65f0c2da1d7ad1a5e85a4a22641f0fd8342541871691590dbddc443c7f969d6dd4865ffec6c530c2b6e6e2868d0e62e1bccc63500f0e2ca678e87135261151e1006989f441c7d5f1d1de9ef002ea07a7801bcc85c3267c4c0281d7069d5e5fcd730674e1e18b96e152aafe7953bef18f316ada6bb8e8bb1f814e2036650dbb52a115e1b1ed23332f232abe9c08e4fd646816dc157c3d96f58919ddccdad1e8fe73e3921d89196d0a3d3a95094342ae65af31e3c9f7d260f1e31078197a7fe20b383a4963353984b4cb400bf8d22e88ad39443ba75fabe35031dd762af7fe66dd3e8a3567dbf97ac5f40374ef44fc0c9fb768fcb4cb6ed78b8dc066f6444d4e5f03067fca43a9a5958e81c6ae7455640ca8000cdce3aa7e594eccc2d08f19aa6034121203c1260546f76ac8206c0a6821390336b63f15d65b65a9a65bdd92c8f4fba7bed12840c1a8e008bbf05183f509997a082505cb7876b7e81a6afa20eb142589c2b1acda5f98ba4ec9b67d04721cd282d6e6fd415053cb358094a06fa79d25f482e2371843d80608ac59d0e3d0678b6e70b8aad07d52d60a71f85ee2c3042fbb87f860a2ddd4762d14a21bf111062566968f89c4a83dcd624225771cc679f59b9646a682bf4b70f32912a11249c56e968f8c5745c8cabf0981ad8707ae03f9cba2e966d9d82c131868ea4836409de109d782583833f1c20070c29e8b91e042062fee943d451104a472a519ec21e20742beaaf6d42c74ab2747e40df1dcb7433b4cbc5a001b4e04c9f5e4cace8927648b35c648aae54daf25632fcfc29d111996c6b1aa55c320623aa3caf854bb56ebb5630b46bc8eea1c0bc59eaab5b379bb2aaa745afba25272b5f2a000e721b59373151e7cda96da36a455322b168f18c3b4f89cbdb3a3e31b1cf2ff33c1e1594e52e520c9e618fef0ebfc242fbd99adf5861be5b7fa8168b38d3d1e4a1c8c65d22a84b2f08d25792d8d2375e59c7c0b6557f02a42d84d8aff3b322b86420ae16172cf5f56d4a54b4c7919752f3785ec0819e8988d5eb1756357354d3b4f316010cc3a65f917f2d3e0366ce5e23582c1113a606d08bfafc0444c92dcc556bf648668bc5e1f429c0a76838e2a2dcc6210037d3ee6da3ac2c4efe7542d779b338aba675c0b511ccd610b90d4c3e824a6ad42ad9161d12a48b743c1016ea9d00f83887eb8970e636bdb6f88ace88b816e23a97ffbb17ec91bf78078c45df625f5a18b9caa4fec65032c266ce19970be7e99aa08ea7d70842535baa0225b810ed9e5d35fe66b2b739d607f856e4bdf757a43aa49ec44677bf770ba9bf36d0372a268b69d1f845d1963792bce293e2c2aedd4e50dd4d2174f24219a5a32604dda27e894c13b76488cd523661e0e3b8f5c010019462f0376bde81508ae4a15d5a75acb0c518f2ecaf390a89106b7c0d683557b57414daa4e3c4dca49df43333a35a80b3bb3b584a80d3f8a7c7dc2731a143f8002267787e30a5b16bbe885749b2405dd518727f11e03c0bb9092f7c1bd476802a22e1d0954e752c4e5c0e42edeb359925dd29add8447affb40c67e254466efdaadeb7555be5ee75f952f0135d55521d5f9c813609868ce1bef0a91c365bee7f13ef81a88ffd17c064c08b560df40476bd723c3fbed14ded8fd5f761ff6f79148a9075e9a086eaf69ae560561badf8e719dbfeb5b87078b447f478933f3f14402df0d6984793d7c44ab5ffd16a8a1c1f3adcae1912bdf5b58eca724cda39dc96cc788cfff15a1a9db914def949ce519fd34f3d976923e412017a9f0b6a8511e98d1318666aa340e16fac3b46e919d7499b40ac5fe3843fbdd1683b2fccb062df942c2f588cbbbe8bd050738887ef571b48e35496b4eaf4ee28794b5807fd932271ba7ea63c744cbe2145be9c3544b08fa74e968d00309ea44b8de4bf0251a3977b01539f5b35df56eb81017fabdbf363b3a21bc8037f5db56176f20047f9ad173e16883612975b4f15e175aab041bd97dd636b863b4f4e82abb8e8fab2e76984f182f99327fe5c7a69f12ac448437355f004237b0b367283e69f0881014f6cd841b56dc3cfc605cbcf2166c9f22fb6652c8232eed4126ddd12b8dcd8ea9a81bdee30ec6f5e888adb06b12d446deedc4c6c60372c42603a3809880174a0a8e28dcc3d2c5734cc2ee656e717b756945c2a6d84dc6cbaf5b9b1d3117acee4d126e036c5e38279774f2b40b10acebfe2831b6bb4dd6b4bc4389fcbca90e84e12680871f59916c8212705e05036f06e952a9750c14efd81066bf17d0fbf9c63b4248a4e848a98c4b670026154d26170d62b3939ddd67105b296b1a34e81838a80412914ce78e9ed64765cfc0f3ebbe73dfddf5c0054f00859aa296b90d51c5448fe3e545fd17921eac3cdcb20d0817f21a75bafbe31e4803060f8ff08bb1ddca3a72ead30856284229610ffd69fe0020309e35a82c479623383d3339d9993dbdb3106ca6b18fa7bb10e31f234b76e3ef8831ede0db1d6672fd9e2197afaba462bd7bf2aba0cdcecb1724b7301f03187d90e34e5c9f326d303c6836a0e6f74846310fbfd74f8995bf5497aa7049c9c1333bfd4c8ebc41fcdd1ccd651d0ba1de564ba48202ea464be48bdd8f830f013dc76fee48875e2ac87758d32fff62b3ed2c5acc09c7176edf6d8a0bb0da0c6d0b137f36d7d1e753f51bcbcdeef142d209ee3b5937fdec3faf6ec2ef9bf5d3be71e88d266755ff118b8a6be72c95b9881d57d2bc621fee77a5eb6309add8ac4e89ae1bddeb74d14cbab5583da09df715c7f7ca3dcb688db9e57646a4b4b39fd1d13d07dfda8c38bedb3a5ceb0ace638d31f545a26aed112ca7b332e70a1068abc9bf85f38d7d2bbed50fa6bfc8520c1c70e28e7d6d040062f9e51705fc36ec9d35b67f59ad6dd5234eeee1174eafc6758ececba9db0d1fd2c08cf0d643bca5afb07d7ee8e2fd0c1b25c94d75b881b1a1b0b4108416dd2c5f816dd5ae34b3a6f9264ac226443367c29b862532c8d8bdcabe9480f2ce04c6021e428d4d38e5941480526a3ba937fabe273af97789b50a0f988211d9be88aab209418caa2231c38c0431d509d9d25672155701f8e355665d3bb0a2fc58d0289d87c300f214ae623b475bba223919ec89b87aadbbf21644feda6eb983dfdb91adc1a245470c5491740b9b0d3928c22eec69690d83f2ee5f78268ad4b200d4d56d8cc472656e787000a1b1357ef0b352bb73482dc7c7f71a7d96bdb54b0f49dea616f7f3a951bf630112da7ca7fd563fcb8f1d8eb4e24833ee7c0e5b346b27c57a3e0f55a99d3686f78dfc1930bfc9fe82c8280cde8d2294442e6e1ae61febbbe068effbc757e0eab0c93e3f55e60f4a404d73cd5b0ac73537392390393a6407954d0ab453e53d57d36db86c5accedc402ed148521e4e1f0b59f21657bed2e4679bd7e1bab8127b8cb2a2eefe8ea5eeee9cbb3a5ef4c6d61425118654c2fa7fddd21fbbcf299c0acac4e8fe61f67231b90566bfd0095c46446eba4d1f14cc2a0a596753270aaccea2a044f952e22cbea39de0b2f62dbbb3edbe54be27f0b30dc2567b26f3edacfb18440a917fcfbac51bdaf7cb85c5b37c857b07e66ef9b16942aac395f2ad4f95d5f3242eadf1c97e467f2bd3c26b49523dc3d28a6b599afda75043a38a1a4d1f1276094c2f79795a73e7812fcb4b9351824ae56ed49a935cefd98ce9c2a76bf316d391fed1a31de37e8b4f66d5271a4ce9516a1b13215de97bd080f07b00eace14c4e0b8cd53287d074d7a297b8bb16168c01000e5be1fd6589cdd078da80f725cbcc91dd28216ae8e8c97faf609aa41abe270da15f0c5dd9e934e757c782808173dd09ee62ef44e2e5a331ac2a7e8f8fa8dbc70e2e32498e4659d8ad03bf47441ac8f8cb23fe8d5681c9102b452d1632161a1310c09d2e60df40bfa7709e07432035d8f1024de7e76cbf905b43751f6325c2abc688b83a4a85eff1c43ff2ddd0723e0efbc1dabe7c87466625700d27fb5bdef0c64d34e30d6ed208e20f1b61896dd2d7cc22e70d0d8c42fe99ec3c0565530dc2fe8217c6d088c6cd24cb3e082aec9b0c4922ea7f00e9e5331a52ecdcb59c75a635b166327825fab2cf620958d70aeb2d7fdb8a63cf2466dd75f04f90022233e36a3f201586b22114a5b8de123156a3ffcb2a4712f46d5527b42550cc8097349173c891a762356394444aeb387e5a32101466c5375a5df2c08dc583cfc614693bfea0d88c6c5c3ec0cb27152b4bdbfddb90e8e5f8cf3305470ef04bbbbe8222314c18c109665e397bf161fd8e755d9e3009a6452861783e590f36c9e6f02eb4324ca48e0ca824df95fae80fd6a95456d4acb70cc7cdc9edd41230dbae955b8a5225fc444cac17afcbbd6159768ae8f40f0cbf5118992bf8d08d06e31453df2033293a29098bef7e2666890499b335712328affc0e2abe12b16cc0a80f932aadbde811f8ee92f80f75bf35ab3d344bc25cde92b1b4c12b036ffe186df823ab6e10b0c1a019e172894f413229d6d7c0e1fb903ca25cd08262aa1810d14c9b6bb7ae9f8bb97525f286a68f28cb4aa74c836bfcb2f822d225dfdfc34215fc37f891c6c401a6c45ab070529d74843367c5113d903c802312ac14afbe6459da37483390fbaed93e2d8094a5778c2307d9a849e0d1684c845e8d0114102ca3b94b29a7d601ae4d977fac5d41b9ce329c95dd0e771c76f68ba6b18ebeb5975ce8b7a0d0ff8299c4eb475291f4df06726ef0f3e4c4ef4b6ffe63b5fcc7a8c1627ff0d149a837109387e7d7b8f16707b86c69b2d49b9923624fa817fb90459da814c340143284bf82eb1d3172bd55d3ad22e6ce12d7bc2063c4028b752ab5ae2e59ac0f4fc3275b6b409eef8a3c5ff824f97cbce89f4fd6d9e81c1f7c327dc84dded0d74458a56df300874c2ef209f779e77edb1f03fd9350a437fd98763d97d453756c95ffe3e86eb5952388acf44c7b7d83a135ebb6b8deed17117160d0d4bb86c9b0b2af729e8b8e1f6a8c5757969e0e482d9fefe73a2f6fbc51dd6047afa4481fe1022358da85c13b2ea3b19dea35537b20eda3e27ef9a38c9add8895d64a033a40b75e375b310a1c6ed3aec135528845134b707188741c25b0e6fbc4d208fd5fd7c29cacd31bad33e3a4285cff7e4bd93fc0b5c42eeed37c622f6ebab0cba308ab505648f94e08fa8d9180cf9baf5bac9ae813abde9557a3035a84fe807e58e8dd712007fe5e38c637653b1f6b4d7b42fbdb630ea1393bfea0e82fb20bb18dc9810726768dee09c87f2312670b892b5a5347beb4244d6b397944f44d06a4361f759d032b19192ae37b37137d524837dc848ad00121f72888fb2dfda0f77f164de6a29c939d9152411e33f247826d7986a582561902c00f6edf3b4245105f6a30cb0996efa75ab373c5edafd8afc79a608159ab41abb91080e034d2d4d9783c875e9ff1d9c1296a53300a9e9d6274b465cc66e00b5b96f90cabb2fc0b56811e6519596fb82d4fe9cf15e323c2cc5991d9aca92b79785a1e4340c5a39a3f7cf4b85886954d4092276406ea04628342fed1e8b15cb1541f8fcef64229c89dd49d7c9cdb8566ec55e3fd2e9fc2ee74415db2d355aa97ec1242f52bde129e907fb8005065d44b3b993ccf3d58b73e84523326ba044e2f627a418ada85d12f9315b5fa095827bac29c164f5357378995cc6b0dfd6056a1d0714958c2222e749f07a220d32487c21ed6870e65d4ee3ff2d366162841d117949b9b439572f3e8976a943a9a86b5b0547942ddee8b6817e702a6569fa2d401c528d1c28ccd67e196a6e16a8ca3911b993ebb7ce79a8a92bd831db65f724317a0373f9276eba58c3e3078f8dba779fa5fbcec9af60c77c01b1d61be08a1a8013fcc183438d3b16a30ad192c3caca6d0f146e6b12cc943c57ac0ca623b837e44346deee930f51b18819a4a7d4d7e9943adae5c26f0d7302600de692d3e401596f5a864cf85b2f425b1161bc9e6a57b9a57a59eacd4580006bfaa0c60f34e2ca8712c97748b789fce66f8abe2c5e76480479d4be225983910e440799b583a6476c5a84c3c0fa33081560c1759e049c324aba8156704904b64117a7e3248171908685c7c7678925e02225042746976388d29379dc63ed95a5e48df3e310056ee8309e9d4d26082426f4dd2b68c7be2f81f5aa8432d03d37b9c45eeb62cb2e0125718a683850f2edae32a30c8b4c38d6aa60913dceafb5e6ace78a6d68a2c6c3817b722302ec3ee0d2025898d7b1335e54599b3bcb0a668233eccd4445ce6110fa4f7d4623c5d09c1d97edbc168d39790b647c6ecff2a2b93822e6b5c299ed21f3cc6a471774b24fdcd854b2f5bd05abe6a0d3d08564be09cbc45cbfeb04af466b8c1add93d0d7aaeb01a5273de0574667e32d214f2ad21071c432318da18ad332135fcf9576801c95e738e0443f8a3ab35e122b79c19f3864c08295f36abf0d309810caace3673a7a1f7831c8ee4fea9d1c97af1bc43441896bb3dc8c37de8455bc0b5a9f14caa76ae034b644b9e84dda78068a7e8c15db9e0fe7d6e084901ada0b3b2fc8bc942b15212da42d2895afa845be36107eab0183a4acfde6d9399e62d33d8e833a01a1df433acceb772314cdcb0a4993914f197f99737694e3964a1c4cd77378bd2e90200f390c582bbda53e9ee28b99a4f06ae0cd006b2b2b1020f4bc70086dc6000c91eb234d8094da0730567de343eff5e3291845e73e9c6fb960e606840cb46791d49a2e590b2ab1dc472bd34cb0c73c90999c962162fcdd75dca4936e978ce14b971f57d4b43834d6bfb9a59084d950d70cef39b96356d807365c225ea0da85523af7eb6a62bd74d7f6c95e5381d6d572149e400e1aa3785655de457e4b4fd6dbfb03ba2e4dd5ba150b40844c3ef35c18e1011fa5185b176e29eff8828d6ce0de5265155101fabbe53e2e173505948c8cdbe539321c7600a850e313c357add584a938a3c4508557afa473daee0bb709e66bdfe15c44339abf29096e3c91987308bc0841244793aeb0a5a83c3df91949e811f0125408401aca76f803e7d149067ad4c8999b6eda70b2437c95b1d762989aab3b692bc4760ea67b80195ccc0286174dc27d155990da84a255a775ae2b182787fc27a07aed5de417c02f58f5f5340958124f651f60c532b0a2d69bab5697a5830da6f206af865d352a0ea342a87819098d0c40d02d0c00790bc5e7ea32e00847ebdb90dd4509b02faa41e2111501ef81fe5bae9b50f033c435444abd0ba83605d8f83c39b4fced406f3d7a16224180f2829bd028c0bf5f64cc9975f7d8e1bc0649db122bf65920acf243eb3c9cba6b4ed001a915bb6c4ea21bed776e6c7212cb04f9b6c977af4654040657c14a165f0da85e2d55e71313c2e4e37b71d525ac989f82ef33961c3caa74eeec9d48342b9b22209d262633c67635bf6be38d621cb682ab05a7f0100583576f27f553e7b3384ae27462b63ada42f6c947fd12224f2a6ddd758b462c75e1c84528e315d42293298aa7a29d8bea13d095129f863332450b7e9234ddae494c81d982169724713032dcdd2ba880fe3a077521bf49f77872a180e84cfae6182c437f838b6211aeeb555aaefcf5028ffac9b3fed80f3dd8f964435363fa94a74dfd511809ff5bebb0b814b64d4e142885b8df5a0750b319b375847238cd60e311010bfeecd38928b2391285724b71406e7d7cd3b216986de7799c1cc46ab7d5e02cd2f402c95f1e1f910bada3a29adf8e0cbbc642c3e5e794f8ac0984ca6117c45e969d0d1e008ee475be3486699e4968011a6b5f1e697cba3ff8638858eb805c9376ac87f5b6295c45512c8f0f301f84c04f68459e849ac43e6babe8d787268806b2b0ba32064346bfde0455e0d908a81ae8f0ef6c65ac0dd7d768ab98a5d89fc3d220cf4fd656112f3c0e44615125f209a356fb1ac449f4350f8bfdfd16c19dd9540375f8b29ed354a566ecab82ad7f436615cbdd2a092cb1300156eb8c33c398c1ce2f4e1ca8efb386f5edabd2bfbd4f445b506fea34e9d721debaa88132c840e80c62924c13269005ccfe840724196dda7f47e038e676be1165a33fdb66230ac09038ebeb53cd0e4c4f68aad4df7291e46be71c74d2ef0e914d73a888be1194a7ae5caddb9f1801fcfe6b23572a64bde4982192d27591d9008f0fdb6d411bde7296c5d24734e31cdebbeda3939a222c0b52d1448bebb73c75148ca16876e3397bc9e63cb2f9265bec70625d640381ce93c659d71bf47f71822ce9c80b4445d45bafe3d1e7dd6180783269c16f569bb32ba6f1d473831c3735bcd3ac5169e2fb2f112a29f16438457d509f4ee012388592d365dc12eeccfd0e04afef7d394c70bc40ac17019500d1106236e0dd024a1127e1bb83302135b8f58298f6a6a66644eaa025933aa5bd15e33499462178f4240e3d0cc60809c43ce9c313adc35382da20e7152322057010de1bdc25a608cf054d42674059511eefff7a3a4f349247768b6b5cec130a4d7d1ce88d2a7eb96a0ef5b04757af7de717b20f734075e43266a80b0391293035008e0cc1029b541a4d9ce3372e094494cefa4b4f45fcf1aefa36981e10be641893fffdb73410ddecadf8e1e55df3e0bab69cd9e9655a45c0fade1ef169228fa4fe2a7960c08f1112ca8cf83f8f8f019b3a4530cbd86686dc43a8a0816bafba0e844c34747098070c504c959533f177d06529711d1d3b8f8150942b9c6bab8ccceedbc93ce1985e8411361fb906d834064c7b4bb6a1898db1357b2bb010d7dc4b0f83bebbf4901b8272aaf5bc28392b9fb4c88e81b592f965d7be63631cf9729256334cd47bd651a36c4f4d51a68a3c1a02d4d2cc8d27cea99585ff144d71add37b9a837a66b0afcd6a5a2ed694db8af44986b62849de3bb81586c5f62c60b50617d4c63cf2d2c4f0e71e71e4c613a4dc6fb292f0f2404011716508f78a33a92da34bed8b7065f956f821b53113104cdb3dd034f59613fbb9938025c595757ce25ea213ea0726c8eb63c137d910bad94103a1e9ea2cc0770a637fd383af677df77a2e1232e803854cec44b3ae0341149f2e7920e4f3a1ee40fe429878f73e14ca98ef381d094f071108e1dc1202156e2d20ef886c31451929ec47fe81c0857f0af89aa7fc6a9971252e8cf81bface616010d36f04ef4e576e1a5ed81540a79d94d4f7512ae01e43bf4fddea1cbd2c2a5c6410baac30de6cc20a7243546419d7a0123f92935f1c5dd9c96503de77b4fc75dfacef284bae3617f431769e69633db5ee55f51140981c8cd461939f20840400925ae04e6972fb2dda0531b73c741344839c90f8611c7801fafba2358c7e31c7ba063f58e514c2c006103c7a9291f0712af02cd728951c504ddf51743ddeff513fb4e5852bba5e290e48dc61205a1526090bc35d9eb487ca3ddb456df63e29a68611f7331e352dfc88629b125ee9712d1498d2aa8f93745fc4c7be7f3e589daab40b418a0348f22b42efed4ca51c44b2e9b3e312fad98882a1c816d4811af85fb2a4e985e7ac44f330df755fbd5b067c5f45043e3679b2211799bbf63ebc38aecbd49f8ac5c494ef69aad82002c0d8125f0a2c996528189947e5a91aed6d8bcc97ea9ccc3c3550a8a25aca1fc55ac7965a98ad079805fad87abc175f4b395b2220ee5b12a025256ea006c44bc31b277c6e65b484445c8b146e95445f87e051914d9a784b1f1a8cf8f4944a12982ba25d4d8b492229ef5ff85dd4e1082934f10ac6051c4ccca1f4edc6b4ce7aa2a79ae9fd09c67be16b0e8107b63513ea48df7744dc791888d2cdeec9591b6ff34ab1c08763912acbfeb4f876046bab72dc01f127b9d68e18d98272454547c7ab3458c90737146ca77571724f2d0dde204f440f7169080bb1d67b6a40d847b69cd51e2ad66fd281cca516b421a9567028308b710b8a56015084a04c736c0c94fc2012bbc54a95b027a32c7a64461714ec2863197c38d37096ffc91256492cd7e248dfdd15e933051c250f985ff98e59944b46ee5692a56462b5460a73189e3688abe243eb795c2a770fb4688ae9e57d0ee44f992b81cfd46ecbcd92343233c104e47147fa16e38408512132ae579e617c797c42b5514ba4da48c2fe3e7f6a890da4dc65b45abfb33fbf543bbeeaad7cca814be1873917b9334c42859adcf35aced66b204f4adc9801753f64eb2010b80561072eeeda333fc21823501988a730c86211eb937caf7f3188df273b94923c1257a1f6e10f5264727f64138e814d4a4804346ba0076ee41965906352f58e89b01425bb2f5980b4f58455bd8e57b52d29cda1297666f14a790baa9d453e4e6058ebd7553874ec4036688b62ffd89574b04a296a87500c8321580a3286a2d8af7ccafb156f9b26ed46b1d7f6435b4400855715aa2baa5afdb127a6fe300cdfcba5e1a4ac2e958932fd099863fccceb9c415681461e2fdbbbe12e436bb3436426436c05920d7489428f9f55442cb6543260b915bf0167e82e9a3a4f439bca82eccdc22a99433f2411313053a108259097383e94f2cd62d9028c27049b7fb09ba018fb15c5b166e8a1ecf5902330c173d0641f298d58419f3fcce67d5aaea6c322f02b3170331f9828606c046d0aa74819aed4bc100255844ec170d98f7f8f7a3c2da0c77200fea7ec96f1dda137df829a71357c008a099ffd3dd52391b25230a9c7100b9bbf3fede312d557bc2d75c7a6ca85cd81aec84ad07b1ca9d58863b8eb62cc8453ed61a918c6be3888579fbdd7100e38bd5636146935b064fdfe588b53270c92cc92aecdd08cfc5af94cae62cdc60fcaaace076094f05faa05f49c336f9ba797b06058607f78f79b0a9635739507c1f1bf8133c8ff10d38713b0231c551a2e8300ca85b9fc6b50dae69f7a67d2c2bbdfdbb194293d197d7c75d36cc6f6d2f53dfa5eb67d51d321ab00c0f2668038d3b8a5811e943a9918615d5dc0d147c5521429d28bed82cac92579d77464d15bece90c6b60387bea93b13ac10f980ef778dc62723749b487cb67b73813a94a63290d543108664c008d656e4de1384dd68c1e0a24eb03617c8d04de489058f0a42ce8b50d878e61f8baeee9b0d5b8be8717247ffe45a68c2d1c09c4a43107a9010b62228452e7b43bb67909e5cc1d8f680a22306e921fc106685cc7d84a8fa37d4bdcdbdc3615ba76fb982c52a44f179f08c2af6b0428e3564c4afd88b1c3402b963f879deabc7d8c9a867eb64b7a44ea68ce3d91f3bfdcaea6969c8d8d7f88d58360af4c66788674e13844cbfd027a38fa8bf8a64c84470a179f085340719b2c7aabc7396ea2eaad1ff98446ca5a8a8f8d60c9a219cad187010f070f5f4ca5c540b2a10132f8149525f877706ae85b18418aab43d932626c03644037e2865f5ec18e5174fb7067c8ecc42e80dea4e6d0d6dd0515f1cf9b2e157adb4a07cbf31b7034b59e9b2bf6df8d92d7f455da1af6b85085f5beaeba75b973e8a810e50bc2a1547afa28a15a29ebda75766e56f5f908ed443d73983f8999fe05f88ee079070c5cdb3270ffbec467dcad3f9ab20ad77cc32dbdaf76dd15d3e7ea1f2f875fae1e7895097eef7f150d529c3370a4d3c72ca406196e11ac084658626ffeb75302f431775d1412e77e27c519cc4d4da1007f872bc54b51039ad944021b508e4819fbe006409cd31049b40a3fd71b700196f3431180fedf72b40b693a57dfffe4bce71e015c5d3d5a10c3c5d1bfc9b3f217aec1e84e4e20cb8245e30be4b7f096c60ec01eee6a4e1642054eaaaaf00f9abd2af0a9be44040b48a116eb1ea89b8a39c72e529446c37d049741e0c543338c80959dde3fe1c6e16db96cfaadfd912db607f62d7576255fd4b5094c9e763edf99aa57535459c6b9612bc77089431af8e1d6285b4575e19b38b1c3eedfdf912abc676c12142f25df8b314dedcf500d6ad5735d1059cbb78833b824a2d26d0b75c417fceeb007acd99621ccb68842235f37f358a2457b10ec422abeed7c57c08bc2607acc2667e6498c916a220d5d610f4e00e74dbd47ba357fd7a3aaacd3f457a50c60ac85207987ad06f046fc9d0f21af0da1609b4b2223b41ff5e0b08a3f702997c4928cdcb8cdd2eecefbd939615e860aef0f9b6b157e9db10cbf364e3e8cbbbdbc8304d1e09e617825e73dbe1d113b8fb34db78ba1d4daa4239b411b184d71b9fbb897ce69b18b8a7bf3fb138f949453c4b169c67fcca38f267fa1782855c3ec523d4db2a0d74525cf8359e168d651727877f099ec68980de7d23b3d68e304e90918a6a30c39438ec1508a6adbcf86c944b127b99cb3ca420015466734edf1ecaab1ed50c6b8b227308729407ba8a72c7595c826f78fae90cf20e3e0e0c5f6852469371c8d498e01cd573fcff5b88c74eaedb13ba4508f2bb36ba948d4647ac77ba546b90b2c6182f35d4260849a40d0d123548ad64ac4219f2b92823fabf1001ecfa2d7e5f6c65b761151a16530af3a3dca484f0e1c010c0cae64dec4851a4a8d17a996d45660a820781b70f593e08d0b16bb6212f20e03d8c018c3e5b968f4dd4931bf10a83f41adbc2a7ba36c265f3531791d3536fa1b3e5dd7a886583af9712f567bda79f4270ff3f554310a6ff62e6ce440981b5c2022df8f01247a0d8b662f38f5badfebed6dfde2589117ff2877103e2ddd593fc78709b2b94ac2ab55686310fe60812d1488a033f30f8bc806c7a24b14a74af1176e1a1da5a20f9e13d879754e248133110e1f0c55468dad7283cc6c05e33a3452cd751e68e74d14a429afbd14c33169b8e053f9bc545c1eda0488e763701644d4c733f8afd90177344ad994026ec078ae4f3135a67cf2f5b1c86010f37946788fbfc79d8fd1d6e3210c2ffcef9699bf73932d00c461186e968d7a3070f53bc9921fcc7333ccb3d01452b778e201089fc44366941abc630ff82ea9371b3967fd3be2fc8c8552e572d677b9594b4543de3367e7c84d1829ff0f0ba49232a9345071041b7edfc8351501a59ac709fd575f4ae04caf6c084b49eacb8948f528d591c77ea09127346856641089e001b09f92ecd4a73c712e3bf6ca443ae61fe8bc145ee5ccac17c26475eb16d7819b36dd0034e6e9a195ab7678e7546cbc6922d64f44981ef0d0cc4e98911bd632479bbae6d136fc51e8acb7d8d5b66311ba038b6694bc03f5947a354da0499ade46241b35d9358084e0c35a4135f0a65df1f16be4966015a699ecb7d4cb6efe603d78a6983e403e8e1fe55696837b517dc4a51fe79e885e527032e20a5c3801ece81ad4bc480490289ec4f975b54c40d0606908a4315a54505058dac0dabba827ae7fcac77e07d3e34e5e90096c5d6257721fdd835ed3fc623eeafda6dd5b8196fda5b56dd4bde00f1e7e747028bda0179404e5b0166af15c5e81ae42462cc1639642a10aa6689307e14c939e895672f7a8a00f5214e6b542701cbeb48f8533926509761f50227d96875bf2a99a1496f1a9c02083c5535e86912db6c1d299f7430b9b77eff6461f2b0ea00a04d7c2c246be3838338b5852325328ae2a196e403fcff2f137db6425d9ad38c326f3d633efa9cf05c2f41fa7fa6af0fe812a341d3d7407bb306cc53a0d5b49d99de89bef14fb8e7ff84751c2f0e67df4e5242a7c09acef16429abf90cb596201f06fe86158e214c1b120805567c0d9b5436e594e66536e720bf0d337ab6b83f55aafe5ee76fc97352be2017b8846b9801b1adb8e5b4820c71312ee00cbbf233fc0e92327bff2aa73c021df4adfb56cec4af7d2f50de43e08b449cace27f9e0e7d640c850e9395db6262564091f16476a9e4f057168502f979bb88d9a6a4a73b1536a003ca244a250910d32234859d3c11d2aa4956f115b4bb2432d7f2d3aa4dfad5f597ca6604d57f27a182d5e4718a5f2c45c55512b5508703c962b564a05ac46706b2c53085a7d92cef880c8b1609857a630abd2e525219b2b440291d6f4204c7228f2ffdb67128b54d4a51c0e4160cc4820594d69c72c7a9ca2c0edd64118117a566915f2932e1ee65f44df0e3fb8693b863342c6d5240b97745dc1b6ce4420dd3a0428745848d0b836df4d60bd3a12095bc722e076eff1b67534c0db32d2b61412a6513823439763e48a12eee08d64c301633b0b7104c13a0361b76b7ed8880844a55d975fb00a940ec217050c426366ab933609573b9aad1453be8c06868f0e69cdcc3c855346ff789a16ae19f9e13c0721cfc18a11a37a56b91d00a2a02c127659c85477afd27c9e7d5ef7caa608ea8735f3447d15f28b5a9a8f7ac8be95f0d4d865af047d4c10d29a183c477a007a22feedf243d064607dd03ea04d5e9f401ca77a00de8328fdf629f4245df41b7366a53f4573c6bc6268a69e1f6331ad6c27649200754164305780271924b03e26829e9bc08dbfd7fe0f81958f2b3b90e9884312eee553ac0fe2a63d37e8c5e63327b4b0fbce81441ddd533f2d95f021b3843ad78d91102eb326bd67552900493c4de3f52f7934334c73982061308c091571d7c7715271a73703f3e862351e259518d67d2c99708dcda2fb808483610e90d400516d8814f2e395c00a11475ce307aec7920eb8910ff78e37e57205c403a04061fc6cedd0e30e07e890129ff0be7efd1a770db7172c1fe5965b0ea242f0f2ffe8c7cc92d0629458892dc8890ee3c95f9eaf5dfcd54b29693d3c41837a7bc2b78352bca5ede02d17f0be7b910f95f629ed82c0056e683659afccfcd93950b6c0f1cc0b02d06f22b183738b541ab6c4f6ceaa1c8eb5e0e828286f97f3728b487c85a0be0243bec2ce1e8cc7857c118179d413dd383d7cc72b0025a11f74d0b1bdc11b6b50a6caf17f5ab49014662028f889b19dc319d5e7434237c345ab53b9543803a0dce22c25db1321f0dcd01082f3e60b742eea5bd951d4c4e19cb23e056ca1dab8e02a6a61b9bdc74cb2636def8c91b73432e5eb2c068aa2727489766132624ea9070316f4e2a75bd7133e52130f733dec20b459c287dc782523054205f7b60e799d71830deef40ca157b28196dea8847a128652121299e168af483e122b03c1013167c3e5ee568a42cb4c46be4ebc8aea18fad4dd02ccfa9590de15ba2134f690f2b5046e84520c83433c122743cbcb14fb835688c63ff92455cb6f82a3d08d9a3b64ac3767e766e8b7ca0961400c8c80792b7c82cc488beb3c16cdefb7a809a827b6282cc00b233049bcff5233980e17477bea16b7b1ec98baa9cf4964d3d31ca0c59aeb9345810a6022cf9f9449af477944fc064871c5d00f895936ac0f170d27286e29b0fdb64d03b2a5932199ac80f512a5d2272bc3aefa3dd0ca07d761a5551ccce1cf6bce2649501900dc656678625ae69054a01feb41409060e5249018a8ef218d94c7ae14c181518d560b2f654481ad330c4044a71ea9042850e97f2494b8076811f685e0a9913c8e345161c4ec0a177bf02464359025c18075d8700819300d794843e2ed8ee43eaea648b304487893f1f035974ba2fb8ce8e208498763cef8c7e2782d97af97b482ec359d73934b4f49ebe3aeb0d2df615406e5fb97fc4ce510234a4817d59112b90380ce2c44dffe2a2e179791140f3a288462d438f16377003dd4b217c2f5cdd3e4aa31fc840368e83c0dafab6d00debc3b4f759ee7ba026e88d1a93ce1a58f9bf365eea6b01b872c870e5a8c42058ea415a5df41af4830c8d3d293d37363a7bd6d4278ff3097a0392f10a1b41fb7bd20ca1970666e6ff6cb8ca0d3683f8aceb8fcd66d022e33b18e5eb84d1dd8d02b81773cc1fd2e952c403113fb041b29886c3cd959a24cebe44e3eb4e1fcb9c45251c9c5ee3c8a1b80f1b84ed49c9bce9de1c9d502995ff375d3c87dba8830036a0c1b40664d7f3848dc355ead0ae2d2ed076bf6efd06ff49b292aa102b90bae39ec893ce1d329a5c2d67e92b4724e31058b66f65c6779781274e98b16815312afc5b3b6f83903c52853cdb020f6d2959f99f4460fbb87f42124239a8ff99426ab1bb5a14ba7d86aefbe497a384016d1a1fdc0362fe3e8fe0c32e9ec80122a3112d2c16bbdae5884b8fcc21fb2d060c963f4c6505f885e2520c155a630d30ae8d09538405faf00b0c6c77c27d249d30b910b5b047579e3d1759150c10ce064ee0519e68211ee740a3bb6819e4d0cac303c52328209a617c970104adea7030f54c9b592f4e1f8f426e0278abdeba70a921af2fb45d86422e1bca5adedb5d331f09923f04b22c6e3d5073a1089bb9b170e325582ffb26b538a710de87852b1076744f66d0c1e3e58aa2abae5d3537fef9023b8cbc1587740a23809dc18fbc28e3011cfa95acf1ae9f4220e8711ed93795de05bc1b665ac042da254f170e85b4fd8e8ded7c9cb92d4ce25f616aa311741136dffb64ddb1acab97f67be48a137b13c29038d80d1f4ccb0b70f3733d088dababa841ac80513bd07150d03d9618fc7d425d57d016e6106879a84111964608a241b41aeb47b753de9d9ef8f71b534df7c6af25254fc3e0ee67d8263212fe5103c20db996833a315fd7991f08316994405c4d4293856de8993186a61179f7a419f32a680a13c2cb1a9651fddfb533d73e1ed1f6eec48cdc5bd70c002ee538f0fd00c9c42eb18553a5cb0136f3004c9a5df9945b191b3af0570926554c070d08403a6addfa14454f6c0f6c2439c5a5d05ed278ef06e7c7510893ec5399dc407580c1f64a88f4778b204e0e081442edef4111d167551694a0bf35349239fc2367d768cd06ab6f1d48eae31f7d2341279bf13673bb10f9024443fffdfad5dc9f2e2af9b7c6748cff7d7d199adc231d7f9b13a9db3f17260c4b2db779d4ab6fe41d4f619464cf614e3131c9979d8d5130690358d55ca35e785d9b6580525a2543def9fadb4efc0d5ec140738253be8e6119b3af4ea89898fe5d03f87fcea15652f7f3e8b8b919963db5eac6e06d525ead990d2c390ba78c309e1df7fbc30371dd488cbd4a17262198059fc69d661f0dd8d47d6617770926340ec4faae3c0e5f4669c1ba66e35fac45c4f59bdedc182197ef38d05b510bddda7b698509864f888fff7935a5a60d3728bc1ad33c5fa20a6c6f475d3628f3f0ab7a7c759b7bf809ed3bb759bc7dda6d48607a5808ba82c8143d4c6325bd1f47ccf0573ec8f9c38a3de7adffe283399e4cf7f9699e2c24b3d2ad8ae9fb4d2111d83018f0ae6ebb770bc124a42a02c70a1889a2a915af1321cf6db361c1eda349ec0a5841197e23d89b347402df936c851ed1ff22ea2f5083f40702a15959fe79260285d99283575b5b61b6d125b0205ca1e75eb340cf85c24eaca70f70e0f2631c97d7c01b1684bf808c47c0f8354143eece0f24e008a052992bc02ab9af06fdce050ebb9de2580e34f52efb8b3ca11d62cb3ace743dfae09d1c9f931ca698093f770183500122986f6ecc9bea3033bf628a6422dadad488eaaa28e4f7e49d1f770f43134bd532c2961a18910c8ab1e12b843d912194cee5dee15d4066ec20d066bb86355fdff0cd6a835e9d7b043341d0125e20625b630ac81f8ab270debddb46b408113be9f25663f00cabecfb731f4fdc776926f0586764952dd427ef2b5d42323229ef166c558c70d50042891fc19c2b423a8fbaa49b2e6dc837ab7cc010b77954e618e902f5bb1466ad42d7171376011a2a4dc31734f446cfae36159b3882667f378149b3cc74e9b6167f70afe75a05eccf072da22f9e4b431c45a0dd3cf1b700c91d1b752e6f94c741ed0c68f17e0eb17bb1be7e56750519166a165026b35d6ed7cc94bf2aa2c85beb5c5368854dbe35b66be26d65390a4fed8fc802b7b0b5d1145fcbb56814e0d658340e7ab0c5b0da337aebc51a1398e30fb8259470236d51f52b6db10eb6064bf949d11391273cf8e1f140cc949ea2efe1fe10128bbfea53a9f5fca22c14f1139305b327c2bb5a1ca0fcfd8c07f745be14a781d0f35d8a751d8d72d7a27b9f17e8316237c71191b3192734d86db124be25984769b88c7a61774eb6164021a6ae5091a087856d91f36568c482642a845bacd42e0627ca3f5d66120e02815515cf2fbab34613a808218abb976aa854607b41f392b426994c6b350b7182f63bea1e840e50535290d8259d82b5bddb06c9bb44164e70a385661998b212cf9bb16b65528f8ed5291cac77e737251cc4b48fdbb885707c706b4a2e60d3e207a2559e22c00446fee6344e12096e6722a4fd38a2bdfbce51c5414c96d104f3acc6eb504710caadf9c897729f748a2e15632ae58d8d5408e31e747fe62cfcc552c5b018788c380afa18d29c31261052adf186bb0f00b1c91ed6a3532bb3a431631726475cf7681c818ac05cfdb371806861ab5a202b0666216ac2680c56ed1119a4c1bd7084066049bb7b5470f91b702be1eb8c08cab8c963501ee42d13eae6bfd723050a7b1698a0adb448cfd444c012898d22727f7133d57818b0b4c50a6945a036b9209e38d1f9970df3ade37494b959f2021e6e10d2a266929614d2cdfbb36292d72e085a3f5d9c91aa23f7a9170e13ee05d60037036b59dd06287c29f4af68ce3150f224e323091982d3b45d977b81e15d19bb6489491a5c1f8a9c579fe816b2db994bb3202c281278dd58df4b60dfb7ac9cd796b13da02d083bd443041a7037ab59309a15271d793695d06e8db859711c13b167619ae54662dd9a8c19a32c92edaf705dcf95ca517231b81791379ef3af02e40edd40004674428e39c8b9e73cf31c79752fd458f722ea1ba2ff66666dad2584104208215bcabd03b90aae0a4a0af7b8187d6a712489112192872982918d404a9d32882df3a63a67105be66d9d34882df33575e74d544e56649c4a3562b8a0d421a38b6a6bc1a779181be93b617c532a5f94cab754e33d899754e3c8f68b4ff3608bcec7c7872dc514bd5563b2546046fc9d14af6668ba66be75106ff09d22bb12aaa5fa6d7552eeb3550f7899f9912791cbf304b185e51252d52f32b2c8731b48880c053457c6e4b243cd09eeeb00184c060681dd84e3f6c0a7f982e28a398f3d04824ff32c34a061c4a11ecd0acbb0c28b2b61c9c59f11cd823d825df724b7ebba15ed8ea3b9ebeedff74e823e30414d0e24a64f6ef21d2737b13fa2e0ff30f949b3dd617f9c0089e12e5190e2e10235f989114685f1b5d96c52302a74ecdb0da3489fcf9c3972699733e7f370e49a39584c179f301e7c32f9c9bdd10d0d6990d2538e833f10c5074caca96f7294a33cc57ee0c49ada9a8840b9c92180627208947ef293e8b1911c23169fb23bba892dd8251334a4aecd8686336774c34be8e8a65f4e8e81da82462e50d59bce17d22175431f2caa21902b7a833944f73adaaee156b322d07e485d3f6a2e73a34790af5520972b8fceb923cbf206692374ae86a79b1b3a8e16d518e25450944e5c44704cc97657c3a9bade41d4d5af4f4ef85de91dac3288656273655dea8694991954e5504e05aa38d5687bc8a93650c5dde6da5c5b924d27d5aecda53141c391ab14031a8e5c39340addf5878fde40c80774e6bc18b5d3834fd8c48251fda963049f30b63c6490d6ac54f1094bf1c9e4a6595e2f1d9d8d088e31b19bcd17544e7e3179a427f56396e8611f8d020d399566b394d208e8c63cd21e8e5c4b2ef72aeeccd96c42291a722a21dc0c57a37de386709f16f201f55e56a0263f79485d29393df884fd079fb0ba6d3733e70a1a8e5c3917fbc8354ac2288d2d7652aacf0f376de4ba583862ae336cbb3198a32f537c2c861f761e25170c33787125f422148088a7be3c812a9eba5daf8d887675f7f99ec7188cad8988ee9f43c0bbc77eece7dde7bdaaa359fa1302d546dfe14cb3980da72ad539a9ccb295319dd339dd9432738f2187779a05885679689a65755373db09d51dc08d4c68c112d79b1fc76d59e7481e32cb29ae59382579682bfa0a1174ce1568f67155c6f08bb5e094dcfe7c996481ca738e8c6f63c1a7be065a800e1257e7f0a95fa0113cf833826f185f31c693fcf20195b115716210f0de837874749e574e904d47bf70ef47a05f36cbf553daf5e254c4c16016680ddd6ae8d8ea0e666116ef03fad05d1d2e2a6f18e977e204b31636a0acc32fca04950ff9b58339b3d32fcc6deff7ab5fbab71377d220480c4a2befd7241f2f1f49f6b0ebb73d0769b82369595e40e7a71ac25ac496e64b5047cfe082869df379ef84ad33539d63658cdc228b7c29a75d1e4fe76411657bb1c5eda92abda4a755df8cd644aa734239c4c5a8b0abe82a424edd3711a818ef3b50315e2aa6b32679548c674dd29a74788700a81305168a6084552a15d33dc678f647143bbc77f647142104622c812646040808c28a01412bd18ae99e81d185a2b31fe0eed956a215e3bda36185673b0b7342401056cc76ee214c1009466a432cc8ed79d6116fb08e7843dec6a2ec314496fe16b7efc5ed872075f9d539fccab0ca6dde0a6319517cf4d1475e44d2c3ce0cebc67f3db4acd4350cd7fc1a2b397187d35172d9b497f8a4717711b4e5038b87e153cc6e42052aaf9ddbb8ad579a11cd52c2b052b6750d3ec5530c9ba48bcd9eb369777fb5d42c7184cd392fa7968168f4668c158841c88875f913c3e8cb6916c9715644163e732f31dc2c5c976375570615340725b8486411cacf6832225f0e9803d3304dcba49661319ebae6f2ec1327681691879e8936f8251a707539065fb8bc3da3a9f1533f6691f7a69cb3b1cbffb06842ded04c21852019cd87256b8a280cc1634d613383ef75f9b3654693d51061d4ecc1e521dc302b322a4223d880a902efa91f77d32cdc17db0481efe041fb59aea6593a1b66e1bb7439ef8adc7445381d4e87bb2221a7d3ad1cd74b67271547abd14a6744b3339a19ad3c55cbcbd95aa3950ae268156f48141037446583d8c20f3bab41b4d1031a663bdf15b185ff59116d308908147bc8d5c49ceee5b54e2debca6874329a8c26a3c9563733ac0ee7bed4742d7ee9381378ad9a9b801bd7b5c9f138067c04757c0755fdc231fcaf7aaa66013d9acb5f8e690534f45a975bf106f395e1050db32536fce20961167ea812ae8435ba222f1ef8cc86353cc76cb8f26943953b6a7d37f4549f978a476705f46ad80912c1315e6b0b341cad46ab7ee95edbea72467384f6c5175fdcd9d36e3aa0a196cae9176e8b84bc3f886eb653b7d4ed5efd92d520cbc196f9e072f7ba8c44df347f040852573e5e094eeb03dfb69d8462e7ba3d194d58dab0e0bc0f0b1967a09ffd72e6290ba88c37e30f8bf8d25f921925973fd7e56fe73298ba0c0ab9fc755ccf302af454770867312392d1f089e90d3315a3e21451d0028a5e4ea5aeb4615653ca68620b968486a39b9c1c5ab791cd88d5f183e0c595b063ddec1ee8f9783e603d0e8e30dddd388d4405f106f6ecddeabaaddbe8b12a6b624b76ad96ac90ae0da39727932874c642ab233e9944d607be22ec66e723acbed9d9d52f584c1644d2a8a6b8d95987514af8258897a222a5e466e725fc12af4013a950adb298eca290c6338c0af9e6669954c2a7ec9e9ec2cdce435a0a373b17619b3e7233f9e253f66e030d99e562146bd42cfbb1dd021a2f6808d4248c2e39d32c32fbb6515a2abda626b6e0685ac3ceb9d94feaa8de1ebc224bbc5dc396c1cda8b8d93b5913f60a6ef68322624b8b863030070062f36459f7cde4d97bd52fa4228c6016b3580991257b11cc8ab755dddb261275b286355404a3a887e2cc4f1402ba75d76d1d4d57c3a76c331131fa89fd1145f71f231b9ba5b33b462f8d2c6d961550dad97fe11de85da50759d3e7f182947eee5179b608e63075a43aba493d395777903e7a5789207d647f44b1d91d263fb13f4cfe23b6adc1a7eca44b30c729bb5784113c3aeeb3801145c814a3422032c5a7ccc4e4a46ada1e6348f72a12b3a6089fa0187d54630cc98b1968c427d3c7ddf47daaec2d247bdf74676f2237eb9a9b656de4669fc7b91815f22a09a3980432661b6d96597ccabe6d5d26a90a68894f1df7ec3d18d529b9597639afdbb87b89c8927547d7ec5e75d77def3aeeebc6baa67bd6aadbbd552da46718b53d7bd8436ed63475e353672777772c0f5f0b1a8dcce4aa6f764ff2945a8a629d7d3535580d9fe66b3459335943b873ca6904292710246b7e0e219259b98a2df39e366b66bc6805c1dbbe530d3ecd6ba9a9a9eed45677cedc790966987cc596f9ac869c221263425993ea792df57ddff77ddfa7fa7c3e9fcfe7f359793c1e8fc7e3b91230319e4f1004411004af044c0cf8d92c49362d60ee9c21cc923b1fbbc0c30e69634e57e90a340ae164c28d406499f3330771d6c41bd9e724c29d0fa70feebc5cf5fc063acb59b6201ecc87fc6ddec3c021e41237b3326c794895491928db0c48d5ac0942aa6e0da3e6b5543df1693eab2e7c9a1d4fd90e799cec5926b34fe14513770a2f76ee9431f3f38651d3c83c770685cab987a707a43c9a8e8363e9718213a02af7b2efe442440f7a06777cbef8e28b2f625442201c3c6be6a6b596321de59b0db7936b36a42a765ee6f4fcb49f9646962db2906c58fa80a8c650a5a0bad11cdac703d65a8a2c1a83806c2ca30a2fae8428ab8bddf378d010e662dec628941b67a7e3c2686a70307303221ba34eea8c0192ca52b3a4ae3755a48aa4b294bafd0172c22927f0e24ad836d7f3c020502fc61b3dc58c116c6cba3d21d226096cd333cde2ddb3e12541ae17de7b6c285029f8c6a6b217b1c5e39dd8e2bdb551cbae9107a66f06b5326c212b814d6c7de0cbb3c8f5ce2ed6825f621ab88b2117c9f5ce377775d1831b9e6eebc81111dc90935c8f59d73bcfa661540ff15a0a66f1eed96cde9b30af77a699f7bcd3edde6510a992369e770aa9e7699ee779bf8a523eb5a775dfb6ad1fa5877d261fbadb99e7f10b7da8c28f2ff1123e791eef5029a8dc2a4bc127efb46e2bda2b8cf2ee424bfd42efbd460ff18676ef67948c0de3bdeb8fb63d135b3cd043ef21fc720066e97bef1924a3231e76cfcbbe6dcf6c638d1d07cf806aa7973fd9a1f2dea9e749d30efaec99fd216b9a6503071223a9e7451a59bcc78be20bdbdc129bae07726f500766995a1304e8b163d6040576faeca6ede0bf28c11fe8651b21547a949edea39f0ffd549307fc3ef063336d1bddda06631852d819d010e6fee07d7b57b7ad7b771ccc236e2211701c2867240cbe9017e8076c40b7fdf3b9ec9a404f7ef28ffb402050d7751dd8953eee2b81ea093ca9e165a01f423ff9564fee658f991197e32a8fd2e5be5949b371ab788327e8d1eb799ec9679544b639da50b00d056543c1b69188836cdbb6658f3da3e09e7dbe88fa74378d019dce807236dcbec2a78c48bcc1d9e8de956c486fe7b1e176bbecdd0604a380e053f6ec3a5aaada63b76336b4b1b57cdbb697ec873ab159d83920a9865f7f6a486a01651f893cb086fd03ee3d302a64c3678739000e20e6d65b83a440b911edf6b6eee4e203eab982862b377bd69793b3e0bfea79a0ef5ec7759da669dbc62b60e5118f6c11fc81fe436b584308cf768f0d19b5591377ae9654f894fd040db457ed790dfed05dd0ca1939b39dfbc20adced38b8398efbceacaeeb9090590e6e76af256edcdd170231128f74b69bab3ce291cb7de32c9091848144868c6dc2b021900be32a2a8f31e499aba0b40487407ac112070b29c750c261d9946a288d943903b80b019edd2340e59894a3a4a49c46ca71c8a1da192b27172c5c4d827843009e0e36dcaec7226d58badeac21d5200180048220a83aadcc780c8ba3038bbc124c98b00b4c04504feee27201dcdbc01c02d00470e3626323002db306a7860d37f0eaec48d5696586c5c1a904a83246333de5fcc6e1538cdaa9ca4bf8c47fe50154b66996ee31ba573b63e5358cc8389fc1106fb480dbd5a174c17802afe7f3d81f7a3fa5fba1335628a88262804003385f3e1486d019428f51be099b145aeae8356a8db7b46c2d33356ae4930b005c74b02cb6e3c90621e240c386a5153bc35a3b5f5d6d0c1bd2db01c4a8324e801a6d0650fb355538af1a558cff9e06e63827e332640c6d476b9c92dc4ed2c6862ac75460d4be4aa8dd141bca31a0d43087cb2fd510bc2735e424a1544328433e1272182e3f544389851b4a9bd30da58d9436d226945584d246dad8b8b21ae7b4500ce0730016044c1313050371611848c8821b689608410843a440574f3cf1c4131950c2ea8927564f3cc17a62f5c4135e78e1458c20e0dcef828e752a25ab5b801ba9e822e77651d345aa8b9beb5d792ee77a9f792fee2c39d1d20aa33e8fdfb8acf63119ebf6aeca6b957b56fb1d2ab5e771d7759d0fe62a036218869db5eec36141f2e05d133d13d99035d0634cf3ac0c1f7cf6d0cbb46335a4407e60120bb92437ecfb60194f769a7629ab903cc8631c1637ec8e2fb537764fde075fecdef59ed590cbb99d51136e795ad6996665b07bcf64dfcbb4ceb48d5b5f04351e369c57b326f0f23db2e116026118f68cab42e37264c8e548d0332b93ddfb0793f3238f8826e4f185f307ec321ae820a63d942fca274d1bd966358f6fb2301b6a00c8cd0e525d8f6bcc2e58e365ec6615bbd8330c6cae0aeddcbb62c7d11acdb7499c12f6699a128dc491f3b4ea2084c62457d3b66b52d3fada06dee38fc3828661ef2e2d8fef826026a554695a5b0e0b5a0d797c173b48d334737ec42f11e86ebd481b935c79f09eeefb2e783b7919f053299fc0472026b9da3db65be02768431edf9d37e3b02079901c16b81c0e0bed52d9c114ad266e3ca2c2b9a1b499620a2f30180943112ea4585d593ad197b61cea8aa69bfa3186c6175ee9882fdd72899f6003645ca9c32725520b3e491df94a010d3140833b435eb8f3fc6ab55e0be0024508a1cc8286dbd5a2ca1712a87cb56b44e9aa5f9a0a91453e8b2bcf63b8f2bf21afd8864ca3c2a59b035a63e4f24ab7fdaf645be374e5bbd5ad788355100624dc3725127e913458f11046c529a6a052d9bc98f0a71d6ecc6c6ea57282b89630c19597a13cc19542523b50159150b8f25222b955c8878d858ca25bada497b484481ec8286e38896c61b7c26e9576d05c241246b5725aad9cd6013218182868cfb0942aeadcb05bab1e260e5984513637363637360c6820e40ee28daa434d3a562c2b938eecda415ea9b0d494523e4af96e754ebbbad53badd66ace4c9a6ecd9bc9928fb25b2fb50da54e567947112a85306a252f57fd1263a45cf1ca04a75bbc72c1a540b722c027f99c1314610113c41bd60953ff295d8da83cf824978837ac1334071765562a75190cad1ea4aea9870f9d6bdac08f51096818774645a89456065b615ca3d8b2ec335731dee83e3369767268ebfc58b54eeb4c1280f3a3ff4010b4cef7a973a65968a64ad53aaa9c6daa5aa54462287389ca13c4715b5c79feb6499dd6f976623457670dce99499687b6924e52021a52c63c8f0704f59cdb47bbf9f97cbda3f38556545e1ad1b971eb7ca215959746bcd1a9d2b6395d6a704d9077905702daafa9a23ba31a2ba7ad5db304346c9debf2585abcb28cb524a42c53c16609a8f69aadb95c51cb361844bab7ced75488a80c279ef8110a979999995ddb4b07e6a95ed56c36f4a6c43a4e8eceb6435325d557a7991b5d2e570e0eeb6666c665e714dfca69b55c5827981855a579eee106d62c27c3c172b02a182553b06748b296874d0c5bf1b13b4305d682c2172e124675123e511179e82ca20d99511151329eb0164ebc2175b29c0c27d61833cf3de7d72fbd6d94964a3f4cbff4ce4eeff4ce7cbde68b86999999995d5c4ea7bf54a294376666666666cebaa0d8c6ea19c9b2773417db645ca3c33d5f980e4f9a7923533997312ca7652acbbaa021ad614839ce336dd418c61368eebc97c3901f31c6587ff0896318b188252fe405dacd2eba90a2478c31c688d590de6edb6386ac318207058ae0d3042d800b2d76f069322a7e7eaa6c6abcad05a3e6923be794968b681a0c928ae80b798172379c5ca032ae0786bc404bf73372faa4955159a58194e286b1155a828e80ce776abe55b31ee117962dcbb2fb2855717bf06a245cc8efcef716f146282fdf04226836dc3955b1858fc30a68f608428183656441e3e5fb66990fed80c61893eb8a224ad440934ac59468bc20c290334051832370a11333af6284b6dcb3659c1858a38a4a7a08b14668c63521f53e0fccd17da3c713e37455b9bf9ef6758d713d9e326a1b6721125018b795443e756bf1834f45f825c6cc930f59c3238837fa13c69c33c84da66c42c6433953baa441792889a43c9437303d9438b00f251438d07818250f393c9448e09a66f942196217356db8f33a18e57d7e07a3bacf790a30eafbbc118c0a7d5e7a21ded03ee99ce027ab18a75f585ecaa13215c6d69d0fa514773e9459b058ce6996f91973855ff339d4290269639e469d21882df3231c6a8c2d7c71a87c69545ee1d70c3b03d9393b67cc5d95f3576a302ae5dc6a96600e14d3c392c9647ac8a88e27d36564317d3e9a8ec9aceab0c496831334de94fbf09bd27d12cc71138ce360510d459f71520d493739b286d5cdce3162649f61f2957b226e4695d78b600efb08e698b14232597961f90c5b57ee99ccb80998c3de04cc31e3262ba24ef4ed9e8a49c995e4a505a36430ea379951437969dc8b608e1c1ec11ca77b271f8a1fbbabe8d68b868dd9ac9ad54718a5bde3ed19ef635230cabe319bd343ccc8cd01b3c18edcbeb66d94964ada2a32df192cb93d339e524d751e05cc91c351c01ca7a3cc380c1bf9c43fe273d98256741a67d0071a4f79047fa0713e579369d34c42d078ca5368a05658fe1d868951298fc12819efdf864f52f089d4813ecc38dfa4ceb8c795c63d1a7f12f3c6882123c68ff8dc18310ebaf60c1c227b0c9b84bc326cc817d1b02621663cc663ccb038d8237d52445a599971108d951ff1b92bf62ac7c021b2cfb049c84b9ae010265fb149c84bc386fcd27134ff005a19d1b7cb94ee435e937b275fe4f70c9f86d426626bd774113ef5900bfe55ee28619d6aaaf25565922a5d52a5ca1c3e55e1a22937798e051697fed3a67af251dd406d155bfa1909688ad54e50aad6049ffa18c8b2d52f36dca889054facb6e293070a652bd45656c41b47481d7088ecfc6614e87d1985c8ce3749425e131b921e3aed8eb4238e26d57847355e510dd98d4f1589d9ff541b24e6122575fa90570b3f9b0e0e6ce24192fbddd0a7168adc0228b95ecce108cb8a212c2baab8def57ee47a9f1ebc99492925f66c9332cb64c857b3e13c72d9caf035894929ad102cb78b7577f787e2ca3d56eeb1744212853c203f64b409dab62979989f387703599467a0395350526cc8f3c8cd4a36dcb6136bc35289646d780ad9d0e5365b7935efda437ef66943794ddb65bff4f8784094770d9841ccf310cfe611e679641e01c11f42da3f7088efce69336943a2d852833f316992289b7cd1c11fe665d886de81437c231b6eb404da930d79ecd0d919e2a692eb7935decd63f6f81973266d481bf3dcb10aaa727e99e461a373f6c028ec1106db4182dca5b7cba527d0862e9f0d4fff3298db320f77b8dadc6c266dd04f6a4ddae5b1f770a939dd30ea80dd353adb318fc70e37bb7799cc76de654d77d6599f60240f9e0d3500249336a49c472e37b539e7cc6c266d60b624534ef0812c09aeaef7913492c80e2dd1cb54d7d14aa27c593b5e851b883b060ae1aa0c887d308cc3ce498d0399901a47a90d597aa0c7619296b8926406853038e486ed1d0437abcca010c903834d488dd32473f43e34a9352d5dc9cdb233b96d29e9f1ca63579f05854870c5a18faefb3ee6ae1185421f5ac8422e97422c338c5463f6919d37222b6dc8a334e907b2aec7711c0732010a9136b2ae989c91b36667ce4f9a7e9937cd324f29a8ea2084cad4ddb812c80486699a0f8d96b88c721fd790855c4e5a900969833bf612674ddbb5f7bca1f4867b761f1a0bb95aa9a471db05e9a74e1f1a0bb9d9b7066df8814c804c689a06ae6ec7711c07329132449aa4e438494bc15d8499fbe6b2e49a7bd3223f3e41478bbbbd933c41e7c8d566fa2532772f1a3aa0a136838313348c61e07ee92246a4d00173747777b7e4b8eee6b80c48c9033706c97d12cc6c6884c62eae824f2f17d0b0436613cb3311ec1a3e0181ce877d72f93da47be48df65bb3eca9b486f476f6bb723bc2283e23615498591e253e46c386862d55394041a5ea87ee722bb6f0f93563588a782303c316c268c5152e47e132132e1fe1b24542f2f9c5280c26b6f03557bfb8744a6b5d6d461ba2d1684458ab615411cda65993e26a379a91cbda9191dd36d03bf3c7bc7d9f2c68285f600e49bb53fd6262e9b6d9c83548582a50131058bb8808fc87d508048a9d74f9a1daacaee9221f0b768d67c33672f9a11cd078440b69b861a752529bb95653db863dec690fbfe6b2103ebd2876f91e17e153db70d73441b9875d43c40d2798c0c20960f0842431d995b300d2fea0ddae3101e52c8c0124105f4a4f80c949540215247ea95f4af664db4c28e5388edbf8c471216d1baf47bfb40e240bff0745b8fc255c7b840ff2760e620b3f07c7da4cebf44ebf5a8b257c925d030a21df70db4bc110831773686a6c6e58382dd56ac6b5a5a8aab4facc89c6a586b5e1c85629e7271dd56a86a6c6e6466707e704e372ba76f0e1764b9287ec214fda31824370ef3aae5d5dfbce6a25bd32c674a7c1636d4df3c2347eb10d96b1cd0e86edb0b0c9922a0ccbe998d8ca561c93061a96301993d5b0f46d3923e8f16d73466923e4af6651f6342981051640200219ca70c51552dc90617a2fa566c9ce650f412da5123e6558d09ecd72b234e2c91b20d03ee8a7bf54923744a0fc0c64b96976ac2aa18c23aa7c84f6b8a37b714ed0670f7a1ccd0cfa83d826b3e732d8e53d76822c90a8855a6f59e639f825717efe63e4ce87b693f9d0fcc7037380f359e8281bd880cf3479e9d386a4cb1bb001a14f99bef42638c411f42661ba1a0072f90d626b1a5d0674fe08743e88e7e7fb9e1af2b52fc0e4a03b80bb2745a24b090e31ad69f4f9368dce971e6b1a5920e235d1cb783e3af57c748f9d7dd0b9863d7adcc9ef8090d7e417591f4398bcad8cc94156e6e45d7dccdbd6c7bc26769e5c7b060ab1bd8f81419c7c5eb293647df40d1dfb041b106ac0c7de0bcdaeb227bf4133348f85c01ce0e79476826c88cd9ec7ec9cacf9395fc940e74379238db03c0906d18107d5b0c70579fcb9f14bca9901f4b3f2437554c3159195767668f4d0e8157451fd3c8241f4ed8f9e523766198d4ca279d13cf669675b19f06010a00d431f93e36e1f077b3c9707d910c805f5303de5d823b5e166aa91594636dc988549ef0eaa49c86b720683e0db56460ab1dd73cf71301027e0b1da17d5b0c765933e363ae82755a6ede4d308c895d78e5ddea486ce5524aa21c97a9e83b2caf43df722e880784da3d38f0eaaa26395c31e8c5d64e3699561ec86fdd0f75095f19caf495ec6ea70026a0a027b1fb3f320aaf998f7734dda10c8f558f075fbf46a58c4ed71b5cb9b7e9931d9252bfa98771e11bfb049c8090641ba9b651c3e65d72ab3ca404379236fb089657ca355811e2902911b6e37cb5eea6da3b474b36f5faf469c5284d4ed392f90ebf15782a12e37a76da3946f78a674cfcbb553cead141c130bc65b65afa2a363b294eae484422090e9e1e8214f162b70f2a29b2ad72f2525468a8c1f29f647cae7f9c93d299e9bdce339e9a47bb018325252521e43460c69634acae8a1d401854e49278d4ed7fb04737c5c3a45bc7ad81f51ec48398cc766b172d52c7d537499a28e49a64c729592b2f2949b4c29299f80a4313d94341f903634ac3059c96a9695a7ccb9f2149109f380a7a72be3a32f07915df0a72a5b3247bae46b45b67478a65f628ccd55c25ee59df236f54b8cf779e5b10f39479aea0fd395b0b787616b4a55a5bcde54552987f118559572d3c12a23a3aa521e9ba5c698daa690afe41ac554992d86f118ef60dc741930ec075eef61fc1c9acb58f04b0bfa7ed968a9c8fbe50331c6e369a95f641c06468c1887f1d025ea88326258da2cf22a356ef37e98127f8c771609be2cc32af1a760bfe918df7240c643ceb99c539261b26d6253ddcd5ec71d77dc315ba9caf16d9bc90df5ac6987e71d480c782031f292156f30eb8384869d9a373635343333ab946a95aa91cd6a9c6ea5fad53abd23e579766144837031a65a95021abb5feaf78976ab603294d095ff4456b7b14e51d13bb8549a0545d22c2a5247a60b49b7a2a2092ea848c100e60032a0214ca79a0847361d22b870f400031a464cbe832831c22f259a38450fb4b87288c90d5b45c326b861d7b4148d358b51974718c543b872668a1eb06e5f9ada02711980844ff20aacb0570df38332c4489c9d25f27ad87796dc3e1fe607659034320c3474e3126ac8701b8b1ed002748ce070f1048f36e20505156efbe81e3a4b80628bdbf647f3b8a3cba8be117998ddb16f1f651437aa51504c5ab9e213125b776e56247c70dc5633792f8fd195415882d070de28591dc340427b5b8bebfac55282d5bd0373741cd7b5b45afdfa5eafa97a29798d618b97175bcc1078b1c40cc118b67879b1c518b6788d618bd7ab757aa75f2c244770b80e47223982e381382c9687793a6e937ee84b8785e4088e4771582c662e029da91d508d95d355fac5ea178b06094e9621398213c261b13c5e5dbed65f6775bb5f8e1df8c4387aa09f9004d17c1a98e3738f7790d9639434558620b66c608eaf9321882d7c0e8b3788882d1c0d1005705d56a2cbc7125f68b3300fdce37388f423121d08205240211c1806440f408452b0941456b1104681e8b3ea83af2702f1fdb8a0c3c0c0b8344a09156fa8bc8fc51ba6a7bc6dc8e300b7efc2a77943f7bac2d080823fec00a3526590d8c237554982d8c24fa9520969838f5265a94a1d27363c9d493ce2b9294194443484d5ca71c517050ce189560fd8e003250821862f5ff10501a92eac50248a18dc6421868fa3074675a882cf2aa8fa60977ed960689881c68b7d6a4af25badae3a66b8e88ed8c21f7141a34c55964b4b4a6964893048710530a4624086b8c40746aa90da0113ad9bb8850b8a0821053549ce20838853840aa9253b98428a048c3dabacaab3ce78ca90c01ec4bc180c2b83f0897f651099e2133f023a64aa0a9944ca4c46160e25b858030c749c58a284340061c10aa0100231a45a34363b5290062d66f044176cc08604a4200b5dd4c0e08a2e94d0b45fe4c9cd3875925ac9eb451c0c058c7735c696ec5c95d146f6adf68c2d191659b2abdc8cb383aa1d3305c3662b53cee95951896325cb7a6ae80e0b302a74d1c1e257152e32155f80acce90021ee4e00810cef08518be54c597cf0c4658031a60e005912e625e80c8c00b64508210288ef08628c4f0e54c7cb9c00c6c700527ac76408524ac4cac6245e86530f2042d702e006e7c021968aeceed7b6f2bc0b4a9a6f4c79aab7863fad86ee763bb1e69aa20f2f079cb8d25b3ad4935d4d524b6791313cf040bec863c922bb2f0ab5f5a27b270ef5cde5aa41aa317b2ed8a277e450170df506d576ce1773589ed9ad8184fd3a45e71d98a904772350b3f6532762ed550f01fcd57c3a8221b98b5868a4f408ed02e1fc84764d6af66fb588ceab0afa811ce1a2426e81fcd67037aff23f2d5dce62ffc6eae942626926914fe5977e0531f80517c5644125b35f8d4d6c507301d81c934a023e66c284f3e7148321d48cc54b9e93b546e9a96ed0e18570112f3b94481e92af1828c42d95a308cfabc7f00462141a9a04b1c7c3e35a8fd33eb0140cb8f71183755135b1311a6ab1c02301ee32a37c5c00ea36e43f8d41b0d9f7a934cd070b260e6aa5f54dac5da66c2c9c201e3037a9234a4fbd8eea8bf0d39b98fed96dedf66e20d7e12f49afcfb0683c883c947e3799d27aaa473cdae0e4b50d2f927f71acc71423a0802112fe984645b0b3e75123e618ff1a3e997dee9d6229e463589ed926cbfe2097b4a0dd23a5100d8470082544c4a5f52ed57a926b1dd13db49e209bb374f6a2741c207fdc2c5de59441bd83dece32a2fa94261faa8422132d9142cd33ced8a2dd89962206882393c21fb5943352b029d07814095ce0a1e44c17fc0e3684f0e30dc9c689d6eb2ee773798fb5dcc4e7e89311f9d134e6181d7490ed37adb7a621886cd6eac1b8b7466188a0796711b6896f82e6a1bd703c5636a1886cdaef4c6f8e2753146ec0386c67a83c1300c9b5de7951836bbfe6e5b49dacb68be118b2d198661b33b0fa50c9e17bd3979722c3766d69aeb8d2d91ce994d0c639e19333306c3a2cc937eec9c9767a5774e20b62dc6c897316b589931666c931c5fb61766e6ad9e9a255eabb12dd3cb8f8c92c5a41999d02aa9105b7696f44eb3ee8e4705a593a094505442544402511109c6c804c60c4944ff500d4317b18210e4666714948b5e4555de5fc6ab09abbee4f0cb88512fe355857a2875812122a9a0944e8e883e03071a38b08eb0c240e74aeb9d5e3283dcfe4aabd56a75ebc781060e571179e8679c411f66dcf408fe30e3fc4d4329516bbac9ca5092a8e6e0a28252c281c6cacf17d55b7bf224e6454129a1fc88cf45b1f75c3b21a1d824e42dd9904d42fc2847b995218942336afd3db6d67a189f4145af96140a59194a12d51c2e23468ea84a2c4855ba92a054a9533a017d03652b0914e6a16ced4012513bb22e2e1e8f27f4cfc76e93668553a6e0c5152f768c601728ffc3c109daf71a0727e807e23c2f6002bc8702601a1a9ba2914568c82c29638cf1d56dc31d247ce256a5d7e3c8597be6c5ba4ed3b22ccbc007c4186fdb5cfca6b154683b2bed4bf1a9919898173fc99eb9b36ddb063e20c6783a29d56d7685fcda01c11cd93d2fecce7d8713e0bddfd57641c0b3fcead4ce0322eb642d2c6e5fb3204bf68420f064187b420f781ffe7c24f7f9c4ad0b5c1736d087ae0b37e46e3877b07b360bf408f2f21730883bf186ccc16dac06b7e7dc9941f885a9b829b6a2092a08919769fa0b2abd1976e0b2e4d89e10c89ddc4dc39a58166e88856062a9b9236b8043c3e9ea9719e47638756ebf50af93913d4518a58451b39f75b2dbe1d4add283db1fc29684db77c2edfef6524885f455fadb0aad717b879dfe9110139471583bcd57a1c11557487133d9155f628c1c19e57e46df3d1e4a8ff0699e56527b17592944aa804041ff989b2302159d7a229f3c9f774522e4231f6e824ff39fca27d5b0c725dd8bdddd21bdd4863d3e9fe89fe8a0bf92643ccf5a24fae83f7a49edb41e1b02c14821e6c9e6fcee7d496c3094dde37929047a7d1ba65caa1a00bead5c9d1ce56d43936bd6737acfe5f716bde93da27b2ea5145913497492e82051b73c8ef654cfbf1a8a8e7d012707dd019ecb6ba3d1695b13e97d8f8974d1e9f75913e97399efa47fbe93fe5952e493e7a27b0ebac853c31eb745df3c27a71f591d96a0d40e71728f953939c8ca94eee91a52eb63de133bf9e46366a010d93dc7c0204a36a6d8b6a1896cb09bde73cfe3698ff76ed1e93dd2a39e8ba447da5e31aa3d4f2503ed29844ff372c5a7e979227991e9a253285449355c19d910c81d9ddaee263d44ba3c89f4cf5f411f55d0632291469791ef8fec45ffd8e85d643d56c6fbe77d9ce734fbf79d8a6a48afe8232d898564c3ed8a44a29b7c3bf15819fa2ffb47ff954e3ac8237a8854e53d97a4835eaa3224ecd27e7e524317d5512834b1dcbf7bb4ca78fe91fe39e9a03abaaca27b680d7b882e2fbafc4846442f3d0fc95095f9ce3782f21e790fbdc7da1004f73b86c9eb819ff5b20e3b877dc32e55f37235b5eeeece32cb33955744a052d53da54aaae454f1691e2982922b27bb4e18850c9bceed132f728d3744e72ba9106f88aca682d8d2368c4961d32d4681b478236a4d30ca746d888c9546a4d562196730478c3398030688fd10ef28a61fa8d44cd675494d9922110000001000c314002038140c06448381282498cae2dc3b14800e889e4876561bc9b3288629851021c41040080100000000009219060065342d4af6dc35f9c22022628029b593c8927093f92c2958aca1ca694bc5094311202aa9a04c3c67178e0ed8ac2355056ece503f99f42c7db636af1a50cd43a5669b8c6f10a043dfdf37447143f748fd21c06030e4e23c6ea86901c1ad36c397c5017ad7f63cefe80dcb9bda14f7a357ab3a4b7fd2d47221137f6c7031ad993c4b550c989733ac4db73a2ce683f38632948f64dfdee8c6cd38f5501c05b519299624a3da9866190a6fae349874b5a17706e9e8e296a8c4b584c3b89d0823dd58581376084429fc45b2cb64f0a967343806480847fbe2480c4f5862d2bbf194e572bcce07591b1bb6c759123f3eb1ed4bb79a636419e53dffadd4be581fa65ed9e5ff03db75becf5a2e868df9709dfec8b68eb07d458371712058af3526e5473a729b08824ff670a7be70cca201e598b865c18aafd6c0f8e7c09e26533bd84772365a6594f25376f9af0bd73cf06d1029b40bddebc95ab2b7e0d23bbb6beae5112d8a9a771592b6d026005d52ebdb415325fe5d111bd881d25a3b880bd33781049a605d28b9b6d255dc63130fb791db2b0247832b1d775ecc68a2ae20af28e3a02e68802e8be7d9960c789087e4f0864baf395f30ebda18af66ddc5e9f42f8e10e4999796eefc0378696e8bdfb5a644a5b1c2541d090d1e3b2464b03e04e8c178a1e01b603b92474d30d217ace9ea8beadb8cd882202d7a5f90b3a1fee90c8e8897f9913078aef23cad438dc6e498e13bc40254f33dcf3ad971355e17a559597599f9c2b23b8305a0285c9b0fe5e10cf6bf2f077363c42396a957efca2cfac807834a35d8fed64c81776c66ce7aa3000b66af82285566b3adfa23a0f8eb1a15670aca596962df0e84a8de8f2d861afc04b49a2243f0c99b906173c166fca8fbe3e2afefc8eee15849f3285a7ccbbee42b9b7f30a06955c116148f8812793694abbb4ded31e1f25fc14bff28d63eb79bd11e852695934229e3bcdb06f3e6f9fa1d30e89fb370f1649ce2044cd1792cedbe79fefdd97152f565a43591778959def0c2555283e9e3267367d91e629fca3e49e942f24030932dcf5cefca4d893629d2be20cd68c7cb65bd6ad4e6809242e2d016acbc8fa4a2a7b2c1cd15883856193d07ddd623d038da6a65d181bb7aa5406092b22853f129ad8cd6083ee2c0c0ee20b9ded6dda32e7259d561a4c895e9620b28c795d15a524115cbc4873b22a51a11b11922c0fad60a927e97b8e6c9650b7b78d0f209b3b2c1292b93b16b8fa8ee909e397246d8a2344b192bab89ac7998de19659f950565595a4781abbf0d49c832e0cac22fbe65654a4668374270019cbd6fff2895915edeb7e798948c45f8194dc1cf230ec57480d4b7f16a66fac9b8bd772c3733b326e7ecf038434d3eab707b929999ca3bf906a763667cdf69f16b6ff7f7cd297abaa695da7c542798997e64a5d6cf611f237495cc28cebdb2408be9d097c52e78fe74653e77cc22eefc4cc3b5b7d9ce3af454c7939dea70dd662951c3f24a9edb8c021be5f1446f9bf9a24238511ef8b267e60a3fd062279fa8336db3f52116dccc359c5bdc1e35a9ebd9075a1a5d86993ce87aada0e23daaee469f83458bbbdc5406ac77df70a2fb6bcabd988106abdb5473616bb0d39343f751e914099981e078a01cfac100cda2a32b08e28029a3f43c0cdfe840f78e982de8d03532847d292f0e2b07b780d7292ac293cf4cf980b370809e19b9432d50a470961f66ca828e5abea02e9fe13a66ac158499ac3e652a656748f5538f29d846b97b61567e993d757b3a01645bb5aaa5c30c12b317bd3e64fec2ef42338572a53a5d64bd5addd74a674fef9016b5af8fcc25e813885c3d01352544659dfdb3951771e4e350190325c5627df5a0f108a72dcd41f9e786be37af259f00b3f19c5bb4464f6f1cd913f104eeb97e0d6592be48c55b36a2f85be0f44d6d6c3decae1dd3accc7e2a7ae33db615cb824193afad1208be79367fe88eff7a151c487f75d930856319c9119a9d58bdf40b7b127f5d5b050c85829cd9c2c94f45b749423fb84e4e46da369f3d49c153cd21870fe4b86a0eb0b5d64ec1207da6166c30e260e9e65424af29f75751d81adae111d09e295ea0c3ad2be43eca98f71c166e592a5cc01514232c147a9a9158977db1e398f72c3cd01943545e419ded43947c7bf00dd27005070d75042a5a1d4a9d46c87fa633e2c2b9e9f92a89238f17e6b57a1c6593674ff3447252a78e3378c46a62e1e134cae4df8417f07887d0b0efd61a54eec46ba1b872db4f0fa3b026c432585b848700220f8bd2c26b0ca55ac47d73de8065f50aeacd6255d715eddf6dbd8d7fda4a71f15d2a907d20d4a10b7414e082a3b41bc93585d710acaa6651df1753d9bd50692dd599aaedab684cc63aa0920c780256786015031dd42e00ad9602c787339264f6ef0ea5b2a8bf80ac0ae15028e4f3597ea315a01e2be496aad5bc04ba0868c74c26e7bc69e9337ca08e546187ad003f8b8a3da3360778baeeb7b689c117fce93e72e27128b908b15bc989edb0055fca7634403ee59c90b59dd2e87a5587c148e226740309213aaaacf6e49f705f8019001744de0d7f4d5e64139cd5d92ac2d49487d591606cc1caf18861bdf156dddf2a6f7beddb824b3159b037daccaaac23774a5723cd00483551744f81d8ff6666869a9db8c9a4dd4fdc1550a0af4cddfbc43f79fe53c86be48eea85f81564f0ceee52d7fd0763d5ba8e1f945dc26c367546188cb7e1c40aa4c6d4f4ee2f0e9558e8a63b44fe7f30b3bfff6c9c290e608153237d68c7e11cbaea8a86eba0bfe96514693bec064a59b404cb72e5704ad6ec1ef1cb011465ddb5f1130be6e347adabb0c4d82100a7516803282b33c635c3a1636af89075f515eccb8d058c691ed40c60d044629a1da0977ee943263178e1300e74ff8b2620fcd497a1ca36176fde9b35a3b7c12cb6866b23987d12062c283e89e6779079c5f97978789bfaa4612d50403f2f6b5d97f5f9a18cc112e3b95b75aa0871d20843e79583da5ecbbfde0e59197888f1b2b115e74fdd1cb5dca21e11c016bf25003f35ef56bd8ad9a8f11dac04f51122db2e37cdf8359e171090aac2a5648c8c02f605afbcc1d4a806fa0a5a0e83c925015ceff1bfa5042d1f4b996f96782e93fa8e711fb7f5b697cf8792ac7fce3fbf32404914904e555d790776f1ac256e103b396bdb49328d7030d1af1aa987b2179a7f6040ceea6c2a22b575c039f2f20948b6bd98d24bb17f5ca9adfdfa882964b21806fcc00499ce68ec8af14d6829fb50918b4ba0be2e62cad7accd0cff2db772d645900eaf15ea95d5d8ecd7c4a7d34026697b0b0c81de12f230773aec5d72de256cd1ecf65faf740c7ec8404214c8e17cd6be162e318de766278c7166d54c1239b7843b77939c2702eb9b111ea4e0334d9f24b8c0f3cf0a56a36f31b8637bceec408ac194772f8a779486233353fc6c54db8b478543398c7365fe389c2f2fdb03774d5af99fb8698d448c4b8846f011606c1bfc900e83b3b33a0f996b5475e0faa8e926c396caba0e7051c9116d617cc1379962b540bbb8fcd76fc56931f290c8384b5ac496b22453075cd250c3a259bf0b9dda572afb47a07d4a65184ef092f0ea4036d17f35d8efdb8718fb99af1546c9629bdbd13824939c2287bc695fe845d594909aadae72559edd385abb92876d4c77b6438295e5b2ebacc3a582c860bec80d6502f55c051934973f03090002d91f2dd2ce4de04e7b75a9247e37827d179e9683aeef287fef3e6e96701be7365e742acc4f9342d5916b8813ce290e35f94f286ac65ee445c3342a91aa3a6744a7b6f3559d92182768050ba659797bbcbf1da7dc9698af62f63284d0cfb4eff0ca0e0e796eacadc09d4a29cb8bed5044727ee6a6e826c6f05226e6bee72f04322f00bf9b5af2d9a9766e4600bbbf81e8c69ffaf61b758701b9a91b99f95ef9c8bce222c231465c3afcfcf71b56ed30d69687667d5d641dfb7cbf5194ecbc6e0c35cf82a91301c0e64b6d900ffcb867ef412cbb0728006880c2010067a255115eec6c561157f0283a09147ae96b2d2fa0eb84a1f9e8d90e328bea8e0df2e68b24169bbac4689161f1808bec6934ecfa8d8198561274be13dfbc728f9ac34daec060245a8d202a304d3eabb9776eb7e1afc76cf0b698250ead7edb546c1ff07c134f8d377d9d55be9d426d671f00e28aa0789b33c338432487ad31e4f675950be7156926289df9f823935d29cdab1b0cc97d3273a532ce3aed6fab068b28080a11898496ae7f835189fff8fe64b22b659d34058c78201f149b792b101a29d3ca9bbe6fe8a265d285c5b81f9715fc8b03e66107caecc0a7f00547008e26037ef330aff84d3fd7de5155e26aa68e7bb1a3ebf99738d453c4fc7bec2ab1754d32e693d2cb734e448ce5366b0066ce7f196aff995b591b87980b0b2b0a52b39a0925b64c0e7bac3300a0da798f4a0c920673f24a26139ed70ba2503a35f74c96b82851180596868fad15be07042d7f69472b8c30f4149ff93349c01df0491a5914d68f277c995b311921912a2240074d37f1bd3237364df4c89fbb597ff64594c1dcf458960eb8406fae26d0d8dd1827f331ad8f10745b8f4030149097e10cae3602fab8d1880f482312f9ae54aebd56f40145a13f0a2d706bc5e4563af571faf3ccc4c3cc1b84324ebe79ae91aa8254fe66fc64adee74392ec5a6937dc3e7a0a7be445cff3041f377d541d2b19c2ccd42b8abb0864862ac6cab6e052d6d478eaeb91ff8689f322c3e8ac8d4fefebc7318647e3d7c1f57b4255cfe829edf7d45f4a1ea08fc7d542bd80167e857e3485e2efb2291416ed2abc33acea1308787191065807cb9b54bbbb57b6f1ff715c77e5fd0c8cdaa26bdcb7269625f6fef9b57a0ff593084e94d501bfc98e2e57197374cb6ae6ab342186f1e9e49bedf591f2f88f579682d0e8f2cf33e66737f1e045f7d9138995733b4ba58538d9c19254fdd50d4dfb8776d5b9594fb8efa4ed078068950cc285b559fa661dcfe0e1daaad6ed56e61509218bf9b52fc0a85a0e4b30da46f8ece43fd9c50f62fba355dac3bad40124a0fc6a0c61ccc2768093a5b7529f222677a28fef8e17741ec71056be324f9d96ff1d846b821d5b15e3061ab58d5dcaa7be2eef74181ea8aa49e128c40fec6806437abc63842a43eada926c2a66475adf3e80caf39de5cd7c4c0f6563d5e0a33c211f5642f9e9eadea8d99fe2c0eab2de8c5cd55e3664d45bd3efb790d8b5e50ae3420db0dcf03db9664863c5df568358e26c940503052f8aa1a1486f55c49261fe80a747a66c322d366f5819edcbcc1c5daadda6a2684174e59b71197066f301e97565699ed77f6909e1de08687e50b34f108c2c45020debb55d77fb35a757bab521cc976dc427f7812d25605869dc810a3a9fd8fa4f7a457ede38b2a0b9c539ac5dd9520621759ec09a31ac102ecadda5a70f6143be2466b8dcafc706aafc298aa50e9a1ca1dc148d50d3147091ba5fc61610534478a1074e4b6857e428995b4ed740bce124240d67252acb8617911f3df80ce25782e83a116abf1882f611aac35c851ba5364c278283adbacb5f1c32047cffb22a4a2b9e300ef269c5ae883f4d23ededd503892ad2cd903917783167e2092024ff85e40f1bfa62a336360c64879dcb67d958b2c6cc52546750a11bcce172778c4a2a1b21d2b6c67f17940e6769df028ccfc30b1cd717912682d6acabe9f17290d1e1479d22a15a11466843bcb1f48d29a8c5e01d8bc0d41e2a8ab82b116cb09058ca7b4936e2e11c609e6e08e4a98f439a633759261ee8b8d7e7d47406441d5ff7a5db3947ca3504674f6de78a85b3575ad851064f251f55900dfaa8df83cdcf9895a3ea67964b5c4bba6f07d281c7ff6d08874194dce06258d4e855f94619bf3571b08c2142f66eba38f0a72bfd204ea68b9662160f9efee4c67c6780b91023f749ae832f627127e4307eda8acb82c7cdba190d4189418120d2fc531a8da3b270edddefca8637171e21f6bf2e60ad45756257f1c5053dc2a2398970fa55e062676a5458abf5850233702272adc252f202433f9012caf804a0249414c28a4b9ccffb8caa925b7a3191ff3cb49cc8cf0858ced80759f5e3a91200f42f7a36679d4071faaeb413adef281fdce3cf90fa6d424c968114710688595841404a07cc6a1872e79a7217d7e062abc5f8eabc190fecfcd272d6255355d1522d751df00d11409c5a6102250dd8049123be691c4ba014c31bd4344854d6b6c155c6b0987f1d59075b7ecfa2f5e4e148d5a5af1282e3a643839796ac22c020f904fbcdf46d940c8fe9ddc47a5347b1bed8578ec8379c281eb35de01f4672af51f7037ba9ffc17c15ee66b324b11d7648c3d30b2c91b3f9b1a53f79953a2e927eec00025cddcf28ebde081cb923bca171b0d1fc195aa5d0e13c1bacd71cdc3c102669ad9510de72e1b4a8e64fa11368ef768c40864270eaff66d9f304ed4d67f7f8b2da518a2e75d6cee0bbce292d4f7942175e21a70321fc150b1c5a05e2a672cf42cac2055ef6f10ae2e0cd461d063bc74dc9b45716a7d3364e3ccbc70640eb89762b937f2f6d48d1816aea4cf1797ae407ba0325a608158f6c7a897410900a2c24fc21b4771ef60e2cdc9595115a403c5b12b3bb01937c3089416e7a093eda7969dcda1d798cf49069746af1520d210e44c88ea23aaa8a81020492e8987e7c5f715c97782219df67e31e766b9b5569922ef78950ba3315209191a7a0c5af3ccfebcd3119696598dd9f0a9eeedf84e9eee1903b4a79bd21b34bdead6fcfc7aa7fb0d5a07eab033d25b86a3c0483864f81067d5e584d745e10a867f8ae3ecec9fd2f80bd4482c37903c44492a9cfae78583679ba7d29ae22fd06510ac25dba2bd508c4122dcd86dffc3f82cd5cfd3b7e304f2548071a4d19e031894860171a623916b34f8632405b9ca152d32fe05ec43ffe23d6bafba2961245a52f28993a11f80a0920e1c6da5fdbba2c7c6e3be3c01341960479fce17379606a06c295d37326e8c1f313457cdd3d236e74d53dfdb5ec884c076fc056636fdba7dcd9313706c45640160d47a3419ef730cc645e984dacafd254a1ff7c76b689666ef7c6cd5ca5c61e6f3e03f4a5d41d0a2d94230f40a08675bb997280aed3bfe823ea7dc7d23c75025d3118753e32f449060936996a708fec2ddb5b4887ac4d7ab44df9b070ff550a3fa6bfe02ad2ef436d1eb06d9d243e713fe029f8b02301fd475967716d0ae39e690f80b899ee1fcff9b6b9c65b39df168177f7f97c0e4f0174a3cce076f5a426224e6e7967ae34d62b5d3f62167be8592822afc859b6b134da373c65fe895b2acf8fdfb70a6ce082e5ba1fb4928a120eb0b8d131dedf438c35606faadaedd7e3614294f1e876c254db19da79413eef4764fa392e303e4417b273842dbcaf751d0f288f05ddca656243b7d51fc05a2e4187cf90b21c34d519f24088c56c0f80b072554453b13f539c4d01aa476c7eea31a77e8492a5ccc84bf40e66ab04e67a8d958be1060d34d752ce8809aa3e7900664688bd892453a6f11b0c9efe6e4f90f7009e42f54d7142acb68d0ea6d5626efc8bf5532950ad84f70002745d7e81dbd55a1383ac8f648aada1f2327bedbfc85db9524f90b3233e4a0519b7bf90b8b9d087842336945618cd0ca5f28a538588ca7d5ad2f78ebbfeb6f543e6ad448cfb41a9c79816930e5e20df0aa08c65f500e0f02ca23c7b6873ff6d1932fb8060057e8e04d972a7261b0e35be35a79b508d0c1263dc5fd0d515fb15128e52f2c798bee03057cac4d43919b1ee8725830fc851d787ad0737eb5d7d1eb94e7658042d2f0a70b9efb9dde481d0cbcb24971c583a88aa71b11c714fe42c1c2b058c5ee74afb52601c5fccc6a4298b336297fc1864500467c22c3574691dc98ad8072bb3628481dbc97b35bf14311665aca1995268b5b5aa9c324e1ee63534cb227c1aad10b1f06e7a4a7c31056409771980c273d6bde084565b0fea95a22f1fc05ee31b1411b2d8e7067805d2dda00d5b569530a88f7ad58b08996429e7c40d50e9c14537a4fa89136dc1c8b3432fd74d0a0ab930b6720a65051bda3846cbbed06499e7ab1e73725bda55341544e9eb0a16d75a57e8968072fb5c601c4483194bd902a0917bbe3dc78c93b8872bcb69ee1b2a31bdfc113730d38c938220bf2dfe2d1514ca3090a5410549467a6a4a8a9128a023d2d50f0b3d88b7e8c0abee63aafff6103bbe135a7ed1fc47e7d0bb5aaf3a067dd632d50de58d088925f79982f817cfb9344bec5d18696f35c90b3dba6554bc15bf50b2bbe11e05b28a53fb6931f342111e34726e655cd25c55e5e5d30f4fffda3dd9dea4ce845f504481dccfee6fe56c16c86c44041928f0685d78df9846b11ae027d027e28c92dff33d39676b7f45101d8a7b9489bae1f80d4f094c11ee17780bfd159edc80db3de07b4389c0c1ae85d2560238d741505fb8656cbbe858a366d6f574c07b249b0118ca719ca9310ed2a084a39853e8a22f011b7e53dfb8adcb24ae9d69744ab983d34fa73950738395cca92c4f6016a1073f3fb2c83552d3ca6b20323680da3a067abd561148d5a9922e859efb926fd941486079483c7c1fc7a91ba7fe78b5efba2484837eab1344a4629cb8adfce4c733d5756c2fea9c1387ed4b2beee00ae602337280214456cbafc501a8a529a63da81cec22fb3214b78702124495211ee617b57fba61aec9595b3ac1de2d3c04355e2e23da007742b890e35175b800e897b8929752f8f259c11907eb791d8eea00991f735b4be1f89e30f7a294c1bc2baee04e8f3062f6f7c60519d14fa81af9ca0ff273997d2d71fd7ae9385e62389957b7d8b2e4c7a95a98a8b7eb6645d77c434a323ab53729306da839b02692d9c428a3cfc6638f697da334fecf362049136e63747186a8500c9d0bec05652b81de55311b0eb0a34c056e286899dac6602d04d1bea1552638ff018a4f1704420a47e46048922caca7c0c6ac1e2cd6b14a2955620bb204ceff572d4d860f9e163b207f83981e474db287406e547ecc97eccc86d506e077556a51e2536fa7cc559c0fc13b9ab569ce0c13cc1d708ec43b06cb4aa7e09990f30ea4922ce336042ab6eea13d10aaa4e3cdb77550f8b1b3c872dab91761f5fb6ac23bfe001fc6c5d950842837eac8d332248ffa9e56dcb79e5bc5b07d5c1599b8f00d8897a76a7ef30985dcedba307ebbf244481f709a715d9ef79c2533205c1bdf19d3195edce87fc3a54bbd09e6d85ae4a5d8d5817788ca606f7754b5afd1f2cb4624c09815c95d026d20e4c0e7a6d04801a5b283704d9e3e75c55ef7375483cdd52db50335430f1576877c4c1a1d2c521e2610b3ee56cfd42b4afcb214ba7e2914025f74463225922a3cb76d5880b96f97ccad0ffc7525aa3108846eba4621e7e41540d351d1b9611aace97499113199f01eb7b28f53999db2be0f4d2a6e457d4171b93bbd69165c630f317d159e9ed280647d3aae62e2e3e542dbca9a8f1b27ebb8243a262b9785d278a79bf8ce502ea58c9c5852c87763d316336712b590e9932892d0e230ab9400bd9d9922c373b2d86d43c3ec05cfb317eb3116bbd81a13ec02d21b1bd2722fbea31c55e267222a4e8d7fc5d48900870822395e53a6cda73310003c5058205f739c059999eecdb54a09703dc18fcd8c9cf1c785559bd621362cfd5367d1f7d3d2ff5f079da5bab3d11329416ac2db9a3e9deae9958897c2186b1dbec65501b9d51957a7642c44677e745b7775e4cb51fa996d91d1bba8ab58dd352224ba0f7242876b769edb01843e7ad9bdad5ed10b71ee92c410baf50e6bd698bdc472e80874e1d38d2f500093a208d8bf5ec66a2c2b13502a79cbb515a58dc54259c90427e09e9be78bc6730221c1e21d18b43cac7af9ae604efd58e6c60302103397f54628b350a96dc5be2f21096256588ba543d5b136bc425fc82b43cfd6cf2d36a801c9a9211aa4059c5410f30a486e92dbc66a1419bf272490718fc60dcd09c0491e75ff3776b15e474bd9c8f1076772cbb37f0b07991c1dec8162aed109f145ea0a8b37013714fcde28a225099a050cd4ed9d4e538d66f137574f43402894b450cefa4c148fb5a3ab97ac46e3e97ec900e26835b521ef03df4b70f1bc37bd32f681c8e11b7fed5296bd7a15d4c63a9bda18faa19a7ceaa06592cbf5ae1745d42612a5eb7da7c067dc0e799aee42e23fb88312efd170071869851bb4a02875608abb3949f09b83aa1d3469a03cc71e4d8b9ee7ed694555e14e2a0a582731293fb0b9fa9d9d00bc13d38ac29113d39c2b296e4fa4fc365266ec5f308c4f12674289c4a0a50dee981efd0b40fba7b9c6acc27cb34fdc5ac368ed1781b06afef5353950c445284aaa2d9d49808dae05f45cc722771f84931f1bab6a7c29cf8f7ce7f176a6fa88d7a4f97f142ba0f5950aaabbb5ba928a098fbeae2cc757fb1c177c509c3db47353feb73235cee79474ecc988793d207b73b85d369a94b68538552ecfbaa703222523926656e5d85d303d2a9c87858bd2349b9b158602e4e3140b738b5e9e05e89d3ddc6d06eed700aa11e76a408bee94f9f8c22941261e7e871ba33dd8638b05303ead919bef484997ba41a2590b0c94d4f46b54c8f17bc4f034bf79aa695febbad2c58a8c7a957e3ed13d7be33eec344052facd5db4e7121e7948d7b15e5dc388106b7b9408093768ec51dd2e9ecd0b58931cb1ff6b45842929c000d725b904e439fcd5090f3e33611e31ae934349b232475c1faf33d27fa4c2989077e79925a763ac3d2d204a4aee9c307b33b27f9bc61b99a27c48627caa8e81b946472a75a1374ad2f2bba5dda55d4f84e49eadee2436b14a326cb98d0dde176c3e1169e1f1a10930af422aa1c303ce9bfb01e3d518d8be6f4984f16e32a4524681d376997fc2d45128cf6f8f2fcec9c31208e3f9f9e7cc443e8804106d0c1b8237d7aba01a21d12d165886c40ede16ad64a70094fbb9a5a61618bf544536294b05634d2f923ee8f4fd7d30d3f7cdb6c6a9fdba6a31f6f841a823f2d90d1f96478664c9d0f167021dca6c3c43cd8fa1e75e417c8d6c1a5cd9ec8f811494e769a618409bbe619fdd0ec692e1cf06dbb249f9213cbd3bfc36210099d3006fa3db0a940ac93d9ea03c22655cb69d4b24f0732ad7762b9b481eb3daa217d3be0a8887d2f7bfe0e281548f4bb4bb006d929705b865d60264cc210787e829b9d089564f077ae9569f28b6fa7568c1da84f0f09393ff1aa6068e228213a98ed130a5a5f0e05f73c5601b67c3a36252e1627357fe68d471d136e6a691efb1850b387537aa75bfca4a51ef0294d9c1ffa8be4302eea69e630a124f6e59cc3da1297654e07fc927967f0494bc59a2941a09e7ff56e7d28bfe1e86e6c8f7f05b6a530d47d0aca8ac4f0f9f14e06302a8ae4262dd1834dc6c9f1659ea8acb31f2b9eaeb958bfa9b2452f5044b740f0101deb044872b30c8f050bb3e747e1044b38a69e55999b65a0db6288b998fd18874fea6c274e0cffecaf7bcbd66ad758bd6c7ac3c6cdcad04698165cd528075447969b29d99167e3985b707bc6773c95d93e6fccfd706e78aa688835d7ccaeb6d697342fe99ee8bad69a1ccea754706b436c1cecc7051cfc3040b3dcdf0a40305d16802259a5002ea35c577d2a72f0e4028006230963de2b860ac97222e123894b4d08d0f455a8d9d7e4106187d102254740e4608569775ca1722fb3761feac20aed8bf903e04ede9efc2a70294818633e4501a9153ab4c41ca95d9e4940c0ea0c276741eb596194719c949bcee8327d3cb1ed4ab8b9fd8ef9c4493274f19bc22227e9d6b210a1c62ef99b49eec1ee2125f90c3a1fd8b4819166085140a6567e775b2c2308cb2ce0a89d0f6b23ab2349bb8a618d2a56f49594ba95963d244fe3d094e4e8309385f7637788f44cc0de236cea0ded11d5cc1f320c2208834990ed608dc4cf11b031ebf8215545cb7f38d311b1e069f60ef4491df8671bc21a47970f38066a299a463f9851133728e7022d725e0220a5eda236b00a7b1e610c2319ccab5bfaf7333c075b62abda76bfe72e4c71bee4a302b62054aa9aba62c4ae655240a9089b8753d8cbdec7c991929d16f060301f65df3d48dbffe1b5d0b01b106665e649cc17515db8286d047b7732c60c3d2547478ad332a25b3ea73ac37c4f9e584bb507fa2a67eac6cc8eb9a6972624d2aa16f69a38d6453585ebf16cdac0207faae3ef64253328d12feee8b37b54cce6dcac9922b67d2765aca44924264128d71f5b1408bcec38c5796f63beeae14b61a4d868d106992577bb6f94784a9ec33eaf175609d177e90c611631c3b637f2ed9e64cf3cdddd6ac314c97da0d9fa000224fc6ce44cf10576ca99ec20da84452287c1311e71236694b587e4792573e762771257816bd8ca76de431ed53d8526dfbb3a36b79b81b57c78272fd514afad6bc661da42ee0367368b81b7d0e843ac5932180c8b5dc88524203d1c0e4e032edb3da45c117b515bef56a453dc9c7edb2bea3548b70884c7f220459a5f511df332976ec3b0c2f083cae82b5477cc72f9176f2822cf76f5d36c1f2859eae84a88c41e36ef9eb81f183763d310098bc363c760e23c881fc98cf2c5badebf5576e631785858ed7d6fb1d247fd7ac2212ceb8d2ef40acccca34be5f479359ee8d54c9a03effb5b6946c8a8ff95d197bf32546f62f96bf1baa8f6940d4eadf81368c75ab32588cb862d1ba9660066005938084c8b5ad6c7be00022984a4f2c39539a496ec2e9fc06ad91ae8df29bd8051049187902c04bb1457ea7c19fc4f2dc46b45c706268630c4ecb61fbb15a948b02e39d361ee3083b62a3c22cbc14009b20ec0f9a117b886149a21f6ddc60115931109f15a250855a2b7070b91d282ed04cd8a10f8be1482730ef7e2216e97776e847f569ba31f0423037074390d9e815ba89c455602060dfc2c30ad0c83da3174cd7e8a94e0f312a119ebc4592373d00855ab1ac74527af84f48d8bd695d5e58d764407e2346a949c8d8e24a3466e42326b1eb7a3b8a863bf3349f23648da4b40e9d9e2a4dfb8971e2730e1a7e5cad8fa3921a0b224651c095d392173f7801f728a59dfcf3e539c55dd7cb8e6ce70dcc5399d6fc40da40f107de30ca89d7235364972eb3cf5713120a1717d892271171c98f750c0f6cfbad4d076c9376687725f60efe2e66d7f5caeef1acf381560771b27917e60173843a253476d6b84cedc9726b9742428ad41bf2b744280f1e0bf7d007071c7061d3b64340794a94d9f1a10bb2c9d964076354222be4d52dbc1e80ba2aeb8ac05eaf77c58700b323fc24e9dd8416225ee22bf4c667e745676ccc30772af3f8815b2e1bbfaf252b9a82b70b3b18da8abc6fb2efce6d684e1eaf223ea02ee7b8d78664cb2e89d3e45d7b505883ae58c14d5d4477684217de86e358dae5ac8104962da57fec625326c3ad5760af7d8c8d6d89b328fa8890d4b4917f83ca5094dbb268ffb4e979cc6de7f93594660cfaa5a61c1b4093db6a8520148c17f46ae7dabaa3d39875bdd9e29cef4d3cd347ae9cf9f46bf87d3ef51435e460f4d2fbdf9d048be4ff1533d03f8ab57837dbcea0e81f59b76a057d92612db42e6f5b889c468b01d5cea42814e6e491598a5eceac5ca9629452dec9776cc7f740d8421821516d51811024829ad2ad34bc6be8ba237a0ed859508bd77cf740c1a1baedde8c22bcfe1ad9b47e9aab38bedf1bc77d0e87a27707285bd409387cafa0b1d34a83a2b2122bd4784eff7c8d907543be7abeb096a2e7c1cd138a192666740b2891b9706741184c7f44d02d660c305efa937e9c0b44c0152f5c6650f0b98cf56a2f1eeb3e9f3caaec42121925f65363adedd1df75e824fe4fcf151131a3eedac8eda2f5fbe2d1b8ebb3d958aeab222522b6017518aad40d1d8c1fa7ece78f13dc82acf30a8350d13acd251f2dd8f28bd8d0854ad898bc58a00a137b65db2bb8abbab6eaad082b16113d82c9fcdec3568cabb18dd7ed55b669c624bd43b838a1587a1946453884826367593e4431c8f898d0a03c096f1053195a590e54403bd61e9323ba450762be4681b5cc63d3a164bf7266e0fecd72ad60f47c53127a830efef145f0ceb48f60bd0b3411db857c1de91a3c2dce9a11ee133ed8a90b14d612afbe88363c893b0db1cb8c07b1b731f5fabb534b4bc53c5fb87b5a74a7c7c086d05ce6376c7b45cf368fdc9ca29885ca96a47abadd08cc1dfe8a57eefa8b33e7b8745bbdef3bc86484a1885f108e51eb27ab0b6c8ce67a3400d1df3fab107462408c2380c5900685d3d3d1922584884211b00290593fe4502c063ec8f05862ca0c8a78deef9c730643fe1d1db17b21a8742408d4ed1ff5a0a286891cc934012bf7105961f05622dd07f67e4c15553b2e29c25d3dd626b8497b00d3fc9872d40d39f521756115b70009b2ad3c21f02329f799136276fd15004f9b080fa94270716f34fa16e32d3926e7ae31e6b279b72182d31f4fc1a9845f9d77ee1d466e4ffa120de55d9aa45764734caa0cd6ee635cf200ba66156d6419621347192348a0619c068d189ee9a80bebc77a7e611525bd4854367d348cdd9dff1fe586d83fc460b0409591b9143562b431155030be3b869a86e96c346f126ff4cd9d20620c8ee6c5da88c107a44473abba21fe1793dfb9263d937fee473e3851d3911b46bbe78a263ee8fc7c180b7635f0552d34de793b006cbea909e99a92b02b4eef9c9e400c475362061e777462a2a0b67f151df94e1627b1b54edcbc02ebdd317e800729661fe1bb3e854eaeb2dacc9576eed071cfd4b6af83a30c0e5876d56fbba9c0c515ac5b1b4d629cf720483a639bc08d7dec66da2dc91e08bae0d77c6b80956bd7e51e0a4bedc22cae9c33b69e44430dd2bcb571147bb461cc43cec5cd03e91605a8a063aed2f262763332c0bd7c8509fd2993150d3b1be0d581dcaa02618de97a9e5840287e94137a932ac21da88bda153e319009ef7c264cd3229d84ad73bf1f8d71aacdba0989b3c3ee313df58646ea33703265a0ffddee970b77544351d1810929bdd0537a406748f56636110f978f21e5b79ef2440edca0b2d9e57b1724bf13d191f97a7e4624b24a763e4560ff8be174d72b294e474b0d4d4b040b4b5f3af11dfd03bfee888572811e2179dfb60773b90a24b020fbc3d625c3cea5073959a3cd0fbca9cba0b30139128aceb1ab4b63d35d125391dca14e058658cdf701e27bc64a2d51dffa2c0969c8e9f9cc3061e53f9ed9a20a21c73c3d59754fdd2ce5a9213a6c35f6a1e99bfe63bcffa09425adfb5b03308bdd2a6ce8913cf2a2eb67a97c921d64080aa43901fa543ce77c62272b74cc351a053ee86f6a0ea30a1e3c8f032e1f871c1060874105a10f76450754c09586492a0ea006250ebf6f6db72d5610c0ed143e64195df60757eaa16f22434e8ef6fac2d44527047415770c363a4b63e3ca621aea55c1d71deb0ce9b9915cf36ac138548dede090c6a969622b8ce43d9bbc676fed8bbad28189160bce266ad4944d1e7829e399d484ac75358f73a2bd4f969ab49f1c3e4ed5e6734926e0b4b890dcd43cf4617756fd6dde0b977c41ced6f8e3827a1a9c37c5a938435e8e6b7d380ca63a7601b39dbb4207f173b5533adecd09e760ede624d9c5676588fdb64f848cd5ae840aed7c156761e6f137beeab0734fa945e69a0e0a526a506eb8561ae35c744b7abd9e468c794176467819dbe7d3738ed0885d765274584146907d484dc89449cf8cfda01ea31923bf923dd2dc99d6db6dd53c9d496b9c3e2808e78993b2f19f41d2e474d7dad8a2f9e24f4cea5bab3953d43c8ce13457e86bcf0985b56ac87e5339084bbb3813b2616df34502a2fa895f3d8c44c959c77e420f108df508b0eec6bae0dba8e94f38ee8e0d79d36194c6a9d28c9bf7def4c8763912660fd4477e7b1789e1bfc8e7117be332d321da95b18246c2840c1f961f715dece2090b5b3a2acd9a42a96725e6e8d512eedff097b162660f8fdb0bf12946a0b8c886bafdf7cb987558738e255301b6dad5fbc7e09f2b87a971a06e5e2c3fd716bf51caa782d2edaa5e6ac9cf0d922af4e1c6c28dc51e24a091762740a77440c55fd952f659cfa807cd7e486558e7347edab48d669614870631ce5e730199f71b7da6552281c7e9d2f2ab687889d88aad96f3f4525966f1fe8ab03848c480b86312007044ebb83ef0a8621455b66487e4b96c568561658b71de5e7250b2ab2ccf58c3dac9ca747602b3e5e7ddf3048904d0c6e6bfdf85f8069a23469e38895c9452b1d6e1afe9d6d4f9a52327ccb3340edb06c780326e720c06207f00a5c44b4eb0607ca50ca32a967e96daecd4896d2836c7383c229055bb9e832923e027928e5deb42253f0e71d1fce9bad9dcd052ca086f38a644293153c4824fd02ce3ae1421249a654e86d3c41f3d35cc81b0aa8deb0ef20f45b9d568131305c128006e4d938d701fa1d57598e196cba6e424bfb730e5dd42f8d2d385c892f29447dd2866107dba9bb778ae77579b59e12512df4fef6e88252d9cc61df36e3dbaf1f8c66c0d0626b7bcb5f936ae34823959b78c7286b8eb1d36b6be58e1039d0833702ad385502fc618c4c81a1798fdb0b1b9143df01b5a4cb815ef9d2fcd4f207372099c940ec81f98b59cf42717e88f624455ca1c55783b42caa1316d0699bb6a321da3fad019f9286ca2a9ccb08422ab87090b06d21b3195893b2601928a595d6cb697318e4f2079e7804691d4016a49371bcab31edbc1f1a98fa83e1ebab3cee9d4ced724f43a35b02a23a3240ffd413d538d9361ed4f3e9839d2283baed7a12b10453bf9bcf9e32cb519de619d2c98b9647dfbeef600ff878e74cf3e33b5309d77c3ab2e056507990b4909bad58c369c82079d1701f5fdb338c313567859721da964f0c63ea9ec3078b15da736b06f84097e2c100801098226982bfafcdab9c4c15a5eaff4b3bd6198de31f276df73f16b37a09a525bbba2ae99728e3f85c0aa7d16257c3f410fd488ef7559d5888d319eb53abedc5d8b45eab8d9848885f1fea16a31f88b9a16afc33be7abba5518fe72f7efb0d9c395ac56f5523775d44087c33b84861b556aa0a9583eeb4a0096f83030c2954e78121454898c9011bd21c0ad8ab128c46e9efb3533c744e77ed7b7a6a7de610335d5cf664afed220d7c6e2c62c07aeac8e127f38a6670d8005c367be792693b727864c56f52d326ac620c6d9b877e6e20cd43922fba96d70369d0dfb9fe46dafc5df4b6f17a74051c5b5f6d70f3a8c6de52e894689bcbc94faca426f9da9aa7e1a3749130615da2fcb46333c06c1aa4130d24feb87190c317d812042e943d431d71100ad61eb115069bac0921fcf00cc68c0fc14b0321c4b3d5aa7bef6fbd0e84a05aa4f0daee4a1c6630fc14c4dd6dbc80b4ad9100075a01b0795b490e6cb72e689f2f428c8e181269de60d67eb8064264589acb8a03246338e36f01002509aa05382a2798a05eb3a3a78f4bd34f6dfe820f5b782b12a50b87334897fb224ef716ca3d30d95d8a454e11707f5d9b33ebbfb08b99d19c3f5845163a5b7ddfb8c65566274aaa07ac3fbece7bd12b380817eacc764d509ccebefdf767971414f43db99726ad32a595b1efc52fae1865a8ce6cacd79de590cfe0f46166ac866c07e2f7d91eec0bde33849002c53d1957c6090866e46b00ed56cfb16e734655506da26808314ae346de50bf1e4440bd0a77d883fef4fcd012b618aa10281d70a7fb49ec497a4791a4a20d9f5149aa4fe5c823de80cf33615923a8e71df02d5e090639e66a0a689a261da609c060f6ecd08dd3f72b81c8969a16a83c717ac059e402c8db7d07cce80cc5d40f2d0fa05e70b50222f2f85b39f01e11d0ff3369bc06c140ad6f1d4c24169e816afe7ab58647b7e61b2623a6d964fe6ebb4cc91d2ce231f30147cda67387bd009dda7300788ecd42d7558062345c5756c0264068059594777b5b93ab706a7058b6964e8783800ac2ab13db2197abd05fdae05138a76051b911f34ef360742faf02d2477f8cb22af0374493296b97970db7d4eb8c8beb8e8826cc81a0e0f0d812ec68019c0f540a5921c759a211127fa3d2c1e25968f5b0d4219b27ace05e90d5fee9751ef5a042daa38d8fa57004c4fa812e1ed7c04e1d47b5b4d496836c4117820185c159838ccab26c34271a67a8ae545a51b8eae014ef7019628e6c7f25094c8b051227ec2e35e4c0839b32e71ca00c1a62bb880acdc8ccd60258dacb3ca1422c414cdcd7cb93a6066932f360505a9044769758efd4406c05134a3454abc9c0706a9878e3117824ecf6bcb412dd421e063317e3ad7b860658c0864a11ce0dd5a21a805b373a82ae27bda5bc9dcf23c967b00dfd0d245c16d5895bc127847cf88eb2f8df30bbcc0b07f87b74d07fc0708197cd7044c4f9d67c5b3d93d32e602aee3e13ebca04855c150d629502ac4502d438444ab58bd96521e9930b7fe517d54ea9cc13a580fb268de8bdfdc961679951f471cecf528363ca0d8f578c54f8330140cb9299ee048f043aa4d21459e34371125824345383c318d40c9239e4a4a790e27558a69f2e0686b48571e769a6aab520959b3712b99e189a80023cb31f8b97396173f4ff319ffad5959be4d0381327d4b336a88240a381013ad50f2299fb9bbd66a514444392201aa8ca265f6e209a63e20dc7d6894b8192d668d0b095e772235be5992ab35085b853b351f4c9110d452a3aa8e4860047a010ebc8ef4596ddc64449c8b85f595f535045a6b45a463c9210f2b5809cca182eac24632af1ce4f523e78ec40c664bcec0d0124c59c7509118126b7e92df9a276a2f5244a8406c688b9a58b10a55012b1a55493201d69db278d8424b9f7e4b2648558de22ee62f2dce8d67df9999c3efb5e35f71712de4124f7de812de70516d9d8ceebb540f42911d82fedd35137e4119371200f33e007600d7148165df510ada4746a55054183ac55419f99a28b48a798b87a6c44dff8028eace9e8780c3f9608f09829452fa81aa33327e831339005644a37f2870d79572c22686b530cb1379532364a58664ab99299bdd8be8c4d36462a7312b1d106a5fa7d14271deefd5c09a8f738d66b14fd2739e3844def4574e101814bb1543415f5e8b4f259b1342bd8111993a538708ee0abacf184e9caaa941409b5f495550bca1460c978621fe678c1c6d2d63bf2e85ac115427847bc4856636253825cee7a4ebb848d7d41086a3cc603c168688440d43968b093c2d4f0196cd5c6b84f4cbb2b81479e808c2abd925af577d0157362a3e72518f57545461f9b405165a6c752d152606457ea2463f673519e1b24f5adbb17cea63eb2487dc4d802f2de9dc6a33e4ebf427dbce77bd479686e405c5fd78e152ef80cf30e977c9cdc2daff96733a61af1df87b9d881bde6488c545bad728ef76562b4af761c89ca8bcbf4ced1d98dadfc13bcc32fd434e798647236b45dc93763d484e86672ae36a718dc38e1601164dac6798e32466dd4182fac3bb0571b23bf810886ce4f608b92ce4b52756746997cdf01ad8b1d17e3cc15dd1193b9e173c8c6a3130b9c968a4aa5ef7f5c98393c1458c4668f1f85179ad8224a3eb61510f4a1be94170ed216348760a658726c0207d9388b2ac4ff149ac46139042c789dd10345f6daa871af55084d6090d4b275119888ce19e52c4c7957c82d0181b04956ceac47bd62939c857dead78bb40a386163846e8345a5dc9e529a2071d36bc6242328f7946470340dba1c0014491a0cc136e600eb670d4b16ed898624dd258ad679ae3bd12f9f6806994019a6af0e7afc88cb8af7d77fa710a41fb400b2289c5ff0ce055f0a0513e21b7091d7e4bbf86ddd510b1b0a7bd3100dae4839e58f834e82b1058567d2f46b177bccf65413cb22f173917668d65c81004ffbb5c10686a27bed37146ab7faac010ae6e1c51da5fb4f06ae851da7273c40534241d11f57907008ab9083a985a37d929caaad71ee4895cec2097fb92d9089ab115838c4d1096beb8caebb507b75a1aa78e2c359fd69c52542a57506b468675c40d1c032dadba8465643eb13988c9a3ef8c563eb7386e00499b48d36cb207197066d5318960e35c6707cb7759b522bc718aeab01143fc2ab3c067a097974611df538e02fa254adca4cd4774916a433e4c28d27818f8d9a7e648cb8d4a4331a5bc124f1cbc339857a9b392437af018ca5369a7687eb722567e244ef1dd2d86505083bf53126eddd0b127e29893864e6df882be322061bae470db1cd3ed6195f902d8b332c65d2adad57e2dd3ff46a10f0c729bd0685febf0aa741cdf5be8898bec2d5af194d3080b7e9298c1b8de8011de23ddb2496e6f26f1ac5da3d41e40708e281844048013a2388d774857193dbe88c2eaf4345864992cfe7ac58cfca19513da9d19dbb2f618297e47428158476199ac98a65ff895e5ca434a2388f7b8cdd0a5cfd89755848b007285ab6e48ff64a0dd210368fde63c21b0e0b8a287fb730013a3c43d7eafdb2ae431d498005490fecb8478082487e7a4237b2336a7b8f0774a40ddf0e5e276bf7cadb0ab9a7eefd6ea16569742c7a1d966ac44bb099b4390fcff049c95829ed2d8559cf26f0ef9cd388c5a826220126353309fde9077e78ca47918dbdf87b3683f876e84bc1c7ae589022ce227985d7bec22a3cba2519b84c892921ad9be3b92da9c8a2e15b893a9403ea5a25a7bf5d66b773a71af17cf3b7b3cee9b2ffb4680e2efaa34ffe91105a99c5b5576fd345d7630aa3426bfe1b5b7b2344de0c9283a7b0a089ca9108a859cf6009323db03ac8308304b5bd06b3911e476528ed18783d186b591e8bf40e3f843cf4d72b253651ceaf9559c5918eb3782b67b288aa6fe18874f854697868b886fb20e5e859587c7704f2cf40e5bc0e6386704e2bfa1e9985ff250a55fda277c5371f240fea57ae606e8d749d94a571967899516fc72ae1bfcbe6088659540547c9ee8513ca846674ceb11dc4e61ce5e015235c1d1825401911e010689459317a27e2b24e4e21e9725c71bd23e06c63a4b15681811e7c33646efeba81484744c385c6c856fd782f1482460a089fe089ad8b7dd8449529b888f03bbf9b9c8f2a789e191709f0bebdb313e1c04694ae17a6a898d20bf6a60ab9da1babe398492d9b8ec09a7dbfa30804523af9608948b6860f116e9c811f180081fcb446509ab30005fa6da5424ee7e064641593f5632dd871091ef5e272d0eab8b3c6a47a51a1f91fa9d602a6fddd38e30de5c0ebd6176dbcbcc940f6ee1968ded3980b74482aed8337198e544d4d891d1618476ca327ef79aa23ad34d2fce87cceb4a3f586645fac2cdb72708ed3421238c6f73bf8ed512417e940174936884ab508fc58a98536226017379681a8932520c85ae24b8f6a3a9ae0d6f94e1f04237006f65994ff94781c986614ae2819403dd631e64244f7b44bbd0b1c446f4f418e5f0eb6320ef63b263a087368c1825359f74b3e1fc30370aa489e3b6029ec6d38d50f8b8be0ea14c6caf0e1b78a1979dac97b62b4a92e4971055c67aac326072653bdc8fe991f38f9d460fe2c0474fea9301e8df5789bb0b8f54838ed33dff26a64c6430f04abf8307599edc83cbe9a9147c9cdb3854bb15bf529f71731127870b724494191cb50b47778e14734b8360868a929a960f3154cd708535476103168d58923d2ea4422f63ce8a0de9e77b838e689adc29532271e8d17c216f560ea763eb32d6fac817acfcbf6807aa77a2f9ec55be969267a25816d42b934cbf69046dcfb772a56adafe8c6bc79ce884455af52a1a410867d24ceb1bdbe6600e016b67f67c53c1d594e77158ca2099e7f67bf5394449e4615ea743157a453f3fccc759703d17e2e96ff020c51182371f0a85c05ea7a310cbab30fb0b53bebe4f5accf73345bdb171ad2baa98e662380ab2fdc41d4299838565f9021bddfa748ee9707b4f059479441069ecad26adfd16c3230618514de1e12b2b33ffd3b56056ff2836663d2ad111ba5b2e571aa3f3d5a548b441e1e3e52c33e642b82baca752461f2f4ed1e1ab6815ea27fcb6f68bca0093b294ba36055d0ff418075b44185ff73ea64a4e560cac078adb6ef9ccb89f4f3b3e67cb151da7c869bb8cd973de2e4902a05684702b9b295fbb4786e00b3e10745abfa34d4c37400480ab7774422d8b06e00fac6c9ee7e3cdaaf30402263805f999df7506ebdb98ca5f04c366023dcbca5462e09b0dc8f01986ac30288084a9d0027fd40de3a17eec2e0c02e5c79b21b2281a368a67333504a92312898e8b9cde6bfeb1af9c1e6c37f4d92c5c0f5056b99f0224f8bdfa84f9d54c0b25534ef0a6391d16ba868aacfc5b46d6956ab49aa810315a4d6cc80cc647f5e399cff857ff505a39d636eaeb1ab3ad8529cab0c692c037e0702d95d47c8ba3c0ec64886d42e0165a70d1a86632ed5f43a283e8268f5ef6deaa07b86a217d59ddd9e99e57c222c32894d35debec7a310713185a20725e4bf42b15fb5223b540f60aab40e55ad1a4612cb402d6303c996b95024eb34aae215a90921a7b0f8a088da6058fa332727192846f150e5d389b142d777da8a72b0c6587b57b262a84bf09021aaa3bfcaf5cf027c1dba6e2896c180db7283ec39d5b36d1861004ea8f75f844805b3014878cb792dffa72984944470f03ba577387da95ad49b663456fa30a5addf7c93a95db65cac5888839743893bab4bb31aa4128bd1cecdafdfb28aec396bdccc4a1b177899defd1900a972477633aed7f3f93919564ae82831ad487eb1af5ecb15b56f5672d769b8558136f6dfd3781ea427d2ab4ef4e6f02fa17761f54ea01580552f8e469cfd35f39d68f8485f891164dfa70ad1c7f9428ca1d72a7a8dae2b374f9162d1d853b78ed3d8f02959760ebf1482bc0a7f7769d663a63a0e4fccf63b7f04d875d331ef2001de2ea6dbeb3911747d4f049d483734c03ed689c7454f55b5edc85a185425bc8543185d91ff7f4060440403684e4c4d277ac061ad1dd289cc36f066b7ad19a0ce7c97b4124c5286487537deef8e7f19df8c0ad3ab1b4f80a447455571d3c20d81fb0effd808f0f984702b6b7a1ddd0ca697e0143409eb0ccad982c5e868bb1566a3500aa86b66f6b488aa50d27ac729112cd4d2a48c1cdf024106e2bf91064bd74d4e743fdd902262d6705a4e454b51a76896da593d65bf818beb97ed749920d74263425d39805f1f6be8fd1b72d79000cf28524db9962203b9b94e5f382c8d45fb14fe7fefe9a4213e2f0eaf0b5bca4b74a08f23dbdd2428d654482d32e5c1b6a853042c28d8ca1d1073ee0a6b48d752e07366f13975d812febeadcf180ff202eff732b0252cb872fce29e64f82007551312dc943c8611a715a6300236824345a8758f1fcbe4c673ea14456c07910807a249d998b269f413583cc536fc994cc3bf7b51d52cef3a5cd9091bbbeb999b1100d5bfc4edc21bd9ae3a3fc346ceafa2111d2a07295c94b146ab53761f619a69fe787abeb58dbc3ac5738bb18742d471858a38e7c821653ed13de1a11a052a5a158dbba819ef2920d8ab037cf9b1f1e3841c396c72e1f8aee6930bde8b8084ed6b028c5090f949f9826c132fafbf7230079040bcc59e2167032f29bd4848d230682711547b50e66791a5f88540247d25d9d0176fc5ecc8bb4d5fa77445d6674a0f8174d66b16e3f104e25c03a87e854717249030f215bb17fbd7363dee683018297f70f5eb1c119e3186405403161c494bd0ac07a79cc5159f6bfba052d3efcced10217f6df49c80e0629a708848244a52e676e91b6b5fef407988756855d20c1e5aa5d57800cc4671218c4a19f2db9533e6d194d81c515025d6444138e3a9ba0b4a594d6d84323b17199a87828b2afb175296259612ab921a961ca82acca0366885f01cde9fcbd820135e614b048e310817280aaa1a59aae52968a62ec27e41c5b15e78b73092d7ed43d58822142825941434718b383cd22598000241398190c0a040b0421454991716893249e518e25beba915bb6ec46ba9c4ce144655c601625a1c3c98d7534dbddb97b32669fe1b4dfaeff551c5ad92cf57973d39ccbdb400ec11550d73332f2a68b8ad558632e8849e9bbbbc3a3b1e8b2232c13076c8b2d20261ef613f31d4e1f2c4e026214f3cd3a7035eea634693695e0eb6af377eb31a51eb690b549a632a3dd156de66cd5ead15d496eb5a718e475c33130913b4a2191bafa520ef4c08c08e962dec9d8c4d113e342b9a8667ca04c6aa647c833016675364aae54177713ea8d3e338721f8ad34a114527e567c502644721cf50e10dbbd7304cabb1b3f2ce8163b1d4b727e5074c795272a3287c78c3c7779e84edb2a209dc1698c0aa575ff924bea95ee11918928d2f2b97dababa59364c1a622157ed9ccd624624747312f70d3355f5d45a7febf4f98f556b8542ace73eb1515ec0855caa95d7b8fac54a57c17ed06dc4cb296111bcb4f6a687072c4b2fa7ed43a85e96b984911650f1a83dce244cb09368de0a011da131848b5edef112aa4c6140b5d3e4249cf8c230ea4ac4b37767a4d5a19528efd7ef1d3fcc63457bbaca16d6129c30e87a4d50425e78ec85198df3900d14e1962ff65d26a5cb536cbab8cda6d20a3ef6814695a648ba108e7f14d384f54e3509a1f505720946b25db3943e1e37362a027163789e37e3b87d9137875eb26c4318515125a462684305c0a138d2ac2d406536cf5b52ae3af6e1f87f28c1aca1588331d76e7a66e4230937b841186f2d891e7ef17a53e63cbb1d1cb602d9d1bd677701ef580b0114702e02eccfbb6b4d850af220a6b59518f203aaf8162b688fe82eeb27378e5f468d6a0d8520cd15f89e1c0e5513499c0109434e89a6c1ccd097385d1c329bb7606cbd286e037f5f8109707512d1df40dbe969702d03e618e5e9b3f2f4adca9a38c06f54e90f6ae10e3a2b5361e04fa493bc4384f46a28570536e26d6b2748e700ac788050d06468789e5266896c04fab52504d7d77580dcbd7419ce1e7b39d83d1826ca23abf718aa6379895d7c061dc9796b83753303a7ebed4b3039a09f91c55b5fe6cb54a444f2e0a7105487cefe3cc918488cad6eb9ebd5e538d8124decb9d4e4808f129e93d72c99e10d6e9494674330ad8581c403604ccef4260a656c0e4de31e366841c97472ab362047e0da921aa6df31a8c160d678b93babba6c6d7a5031e10a439a9e5c2aaa6f0d81a64e3d3e99ede44c23626318a89eb890a1380f6d35837349845df92967b041a75e1d551d0819935a6be216f3c6bad44e2a4f42f5ceb1f7f093c9046d4af3225d95725f9f8e3b1a6839b3d848d7974bb46ba0fee7b5b4e01135f4b72e4d61c08d1a181f49a0929a58a676d55b9c50b971b70cece458e3d225544245ea960a18124b047e7c965444fca673e589f16bbf313e75b04894e94de0f7b60d89ecfc93f8827db64d74b2f94ac7392b05e980d4ba434511529e1663649d0e7ee200c94cf91f784f1c5d1438f0168864fc309fe957ac2f9b4fd36e2296ffe0adca0041c098b0f7cf47167ad4f29b6cae7bb27e0cfe2c05e2013523efeda870cdbcf9b6c224b4338114a1f82db873082455aef3afa07b53e594e70ca09df2dab6d606a3674265b3d7c88ad608399860cc565b54940d164ea1c46ef02513bb9f5f0622ad9018ac99e2caf16ea6a9acb129f8d6b5053a6da6201eaf8982102fad8f5a1d3372bac4432d53469852603ddc6fbdf55bdbe016a98c685990b078c553d792770597bda46392691a5e000225f8243caedb27fa12be438cfc6ec39e0a6850937328d60ea38ebb6cfc98b8ddf368e31cb2caf73e190deefb1ef7ce9b2c02c1644005040c6fd67462c149f985378003456247c5e4b14d2de6600efabc5a4c2e66dd33bf14ca60d22068392e30aa3af3a28e92e8cf8fa848f8727c76fca9c4ca9d3475112db03a90a9d56e0dec4c2a10ce0e2071adc1081d3c08cb3db0daf1038fc14cf43fea32b6ff7b77e457acb547f3943e3fdcbad52ad554669d30aa53cd7689b57c469f0a06cb2ec66f0ed0aae0006d12bb81421528c9baad0a609077f48c4ff64ab6a5da9de1dbdf9a6866d1bcf987f09ea7f24bb591f60e5ff7d0545e3404f6b28443738ceb87917dc3480813e138e1adf6bea32b446acc12067b2ae562230bf6d0cc35921ca0f658be66e21126d6cfe76182748aaaffb4b518924389a21968627f34d2d6163fc117b5fea0239c00b1d75327ed4f314d96e17d33f43d8e92e2fc3c552065417b70096cc092dde2d88982974222b320c0da28abcff027d5ead4ab5c0ec7ba8a6a7c48b78a1c0b595be6e6c40e8f8a401bfa6980aa5724e0437ff1725008ff9300f02746da3c782c347c5da5ce66d05832eede37137133399b8238ecd94e34b7d48c02cf4a5b4b42b3462b005f416a1118b1c9d235162c68babef241219171a7742d100f3eeb20ea1de29054d2edf3b5df0690d20361821dda807080bc3771421f774b953daa50ab01e520208793f2630edc434dcddc6d901a8044de016141fff80ae11844a127ff0bb89347e6239b16f6c6ded9b89b0128f385f34d0a1e30e6b8b401354366bb3fff97d7a3f73b144ab939e926c4cdce57460cb976ed92806498aed946857a8472191f2982a50ea0a5b27ad7535ff86dcd9ce3647e540fdcb3649bbc1b04959bb5a9738585ba9d8f057001ba980eaa322ad6fc97211dee3e98d24e0d4a72261ebfe63854f84cc1229a8e9473bf5f7974015f7f2b4be879b755e6c0c4973a671cb9281d88ea5ec61634a147b76c471012d74cb4828c04184d2d4b411b50b199198d60c03b5824d1ffcaaf70bc45e0ca6c24c0fcbc785a0d01e1d350bf0ed84d84127e5ae460101128edec749c64f8781067e1f64c6b573903d68280a632544da5725070faf72b2f912428b615515f641d5674e60ddd52a0b95cb6a8d0f887b61c8ac21ce6b25d0817281872934cb6ebc0482adac0b7d329dc56571508036027f931ce47886ab4acd1ca2c1077cbf41e8e14476691e898955043996470bb06f34a90af5bf736e33fd490ff7d07ce9563113e967057255e21efd42619d847ed1941c4ea1ae3918c18d1d91dea59d2c9b482bafe532c0d2468ad4d6f32b70621e52021edec91975eaf45e141cad319a2000c8382e41e01d9128f4b82ac98f6d2c00a577c18f7d6e4f71de5b3828f3fc055dca6189a4ff4dd838d29fafbc88bc75fc40731b9fb0393f88a5a2eaaf196610a0cd7e3c26601559be64328550126e941c0f5a646256fa9c6082bc04c2fa8bbeef2497a058e2b1f7b46c78e0830c5a41598445d73328029155c52975d0a53d8630bceb23fbd51ca86726da504a1f69a6e3ab5ecda0f9f15be3e10b7924d89be2dad62f8888a5fdd177d7b4013b913cf4d25a3dc9bc86c9551f49f1c38e6a09c4a90c1f6ea0d2638f2ce339c48a14cab49eaa9f4772cb27a8ed81aa53eee081f0c0a6b9141ab088c8a0a529cb1e67309882cca38b5bc08b8d743400a5522b043cfeed74f9dc23295c2778a031a48020cad2a82be166182da2dc0ac0857598d379054e9b27a5ca18a37d7e0545b58810266ba1b3f6161c86460f8bb556b6daa183a90664e4877e5d8a43a1ff94d6a571ef6beb4268046a1bab8484449607faa842cab11fe20a5112d4d78117cbb2cb241e864f54208af2583eaa4e98c31e85cde6b9f6f77951103c81347f210932f8b9565672f60d659e76a73781f25ecbc412fe5609431835d131e66803527203563331dfcec1e929628a4cca187d7c9b205990b978776fe2718cb28c8e21950ea9621761f869f6fa1308f5cc2585bf59803424d05a16c8b9162bb69a13fb0b42a30a50f1cc9245c06b917e5e27c63650ef796ad491de7c06854c9f00e3be52d8cc8e9297e93a4407db946b8e070af96a17ec6229e37676a32ca90bbf2cbe4284442602ad5f18b179e58841971bba2edf819b0f4358beffe8692d973d62500822052c53931a1d561a77db7713fecb6c549feec6bb091645b5b953b343ad1e29745a98b5bfb1f26b85f441ad56a348b4f4b02d42cc33558429d12c48d5586ac6176c8ca10515d4cf15de40353a7c2e56200430004e5f6e5370568fd322fbcd1a806b3c9c212d8f18bbf6463ca89dbec9229b7e48f72141e71d51afa3087839acc3a2dae4405833988a086deac865893cf7591935a004df23ac05e69a531feb2a350cc8f819468d79c323abee94af496dce1c7ee3cd058dffdbaf0acf01e6147730d84fb7949f78ce32157a72f4226696fe95993aa49787a8ef48e4cc7a09316b79bd466753926cfdb65ec71ad4ed7af5cabded2658f16b67c406933f1242a6085b36ccbd45795ff73970d388217fd3549dec5c3eac7dc38280faef9275a2640d43a067c020615c534da5daad0c10f16ede4a95f0a54f51b359f1a6ea352bcd2550c69f40130bdc62247399d8b72ce365a97b6516458edc37224db962f19624f89e63d2d97f0b958d00f350ec4aa129af71e2555bee06fbcfd98f8b0c9e02df3d4e0501e92ee653eb2214feb8c6608821a249ed7bdb95b086186e8ffe35b801b83fe181545c9434143989097117ad35f9ce1bcf75185e870739f26941e3cb39b75038729d827532396b7bbe8700eaae5d587e685f6697d15150a8c9aed84adc234b5514356915b388a00fc5f693873f571a842b8c1fe009ce6991196abe94e949a4808c8cccd1003b0d16fc73733657cb396062043a307c48eceb5886cec02ca93ce2d55eaf347a7863f60d8f4ef4007e358f3886106a17a49bf6ca9a723fd11dcfd69c2b7f34ca418d9c388bd07bed1a26e1568a0dc5ec58dc2a9fa314c99777e59cad5ff223d0fa1667aaa0d4a5c31ae19ba7e5d1bb4e793cc39ba2ee896ef8def0e976b992941dc6964118293e0bf5c6422d05c04e43ea7a563f981f5ab002683447ca15885dba7af5cc5299ce5227da8535aa4631e6990ab138aaf1d343871f16647f6c0c33c4455724b21cf94fe8c3b7403eb5c7fa333baf82e0429910a15282399cd0af5892811e2836f496825e7921d791a185f76376f133937c5bb09c96ae054c2253b9abfa774cc97ab296243a6a1002e38181b0e6c0ce174cefe20972feb3cf25a6199d958877042b976162d9165fd7ac3c5e68f97c406bda4264bc260dadfe68a6f99aa7a045a96a8bb0ac0a4641e6a6aed294be16dce3cb6b34afc521c8b4bbf49f77d889be0247609ee11f5d40613488b90b9fe03ed31b984469b637cd616348906746cfde59db07998712ca3b69ac14bf6627efe8570860dca9fb627e90df1e916b5760a4b4e454505c1f8d27f8f9207eed71e3733ae2e31ae6f0f99baca1e27a471c758bd57138348fad252fca81c85354295b8c71b51195cb00f9a5ab32d50513cb221ded4805fc0b81bc61782eff5ad43e44776481e7d49c4b0118867e6cd7bf9365189c581c96d943c3c1dfdd99259f7a96cfa3bcda7431e1af6e59a84f83c3b312db494cbd00981495e041a11ce9d26cfc6107ead72283472e7882d2823ac7d3dcd4121fc1e475d164c3a75ca6ed1f3ab2abd9c999b7b9f98a0960326cbdb102cdd6e014fbfec0e2abe8c2bf4a172594389f24e203821d31c276ebdc9dcc5f132dd745732938b590450b1b783d448f2fb42a9884cd72905824a8d68836b528357d649b2638de38e1962f01e4c4731782db9193d36d80d4964184a248a1aac78867985603bb0ba41d94f7b3b3e45c24c46b19d2e875458ba74ddf0bc476791f0421c0941fc92b5632885f21c9e78f239a1f535a84e4e23baf580d9ead2c72b2d92d8a39535a6db649ff94744600a85a14bff8ae2bedeecb2dc92591b0da722fc870843051c00cb7e0f3c073834ac69cd8a8271b0811f453800657ee8ba3905d04183992a9c7f45ea83777013bbf0fd9eb57768dbf3bb0cf57ad4f4a3edd4751433a92a59217bd60baf4ccba7c0efa99fcdddff34afc466950957a2fb61e9fae1d625d2efaa715ea4fda85c58d11b2c3dda991a7824e4cf6be47f5152029587b1552db1b750aea00cdd120e255d348c806c05cac0411d78547fc014ec19da92c32a827c6e814ee3e855e2def3b981fd4108f9d9571f8a12e43e9a338473bf78bcc8415ffbf0e8217e16c14263398bdaded58f064517cd051c7cfbba9e79be7b63afd24bc2c2b8ee1cea4e9d6c109548ca552700e81937c7e4f6fa2a60b0d70c0b7033db45ca08310610e0669475cf34a72d0e567a6d6d9913e35ffcbcb4104adf85acb8b2e6e5bd91a12ae7e16b486e96794476cd3d71cc9973894c1ab6dab06acc111752a58412158cb7ded9ffeaa4f69b51880f0bdf8011f973a1924961b9c69f6f4c7840a2d1b9f0b4fec3888cb1a20c1cf7a3ac779335a4434b901ddfde7ce8b34e66ec88e7eff1c255275315d085ed4248c2b818d1852780a015b43c8dcb3ba910ec8898cc4aecd70f718c94195c92dd831b570d0047194a02ac4c99b05b796c6e474992c05d6d536d6521cca0e256fe0ef407c8447e9cfe85f4768e26c8b43abd7085eb36f8a1025c7ae3c2cc223a25f9c8f125f0c01c5402f4dade64841bd7e14d6d23b8238b1453ecb54d17e355e5a9c2daef076d0622c8402653da3a5bfb6ef328cbf6acb53a0861432d6e3f5f6286715803f4fcf51a3bab3360ef6e8a4fa7d4741daafccea9fa0e9d1feab87f3eded24d9a2a8e085fc539bfd74211e91ab4ff1f0b12c9e84c79dc7d413cb5556584ea8a2187af7a29c7d3c2dfb9ca89d1e3b2d44ba5b32443468cc5ba0b14659386024ba1d17fbb03c8640e1d54bcbd3848fbea24655709d83a06cbb8ea89ef44a15ecf09f58f4fc3ed350d814eb444134a6c7d6045ef909c6c78316d830705f530645666f228e048a0df068fc1af60e0691767b151a41b412e138626d964da5b6942117e147d22ffb564441693991fd00c92906c635456a833629abff9d5d2ccfc11eb503239d86853636bd96eacd6ca21d60d3e89e9fc0c2ad796906166d802a161dd6548163e660549d5a1aba41389c61a5e2213bb5cb98eff191c4739425f29adcc965639bf353cb596783ff4b0cb55a28b1a8b0d8a17b7fcd5752ed8093d27d9ec752cbf30765c20c6408161118c4cb2b0fb4f93a0c7f992a99725f163f32ef893b140613d1f4e282f31638331ca035d62ef2e32daceb5cce9f2127650b6c653623f2fdd86e4accd8f6b9921fa0a8b9d7f5e0ef33bb6026041b4629ca601111a0b156c9c7792e3efd5d993de49a8749ecdfb6087e92bfff0d0af436c83e8452b700c1687cfbf71cffee4436b5229a6c0994b9b279c29b57a345a6251c88497b8c412a5bbe39073f2bfda1768b7dc01046b302b7ed172455456c6fe363a809b3ba5b6c6621d89ddc633cbc80892544878b8b18da8ea1f95d1b50e47fd3077f56b93721b01c369ca73c27a116967928e12a4f588b51ff9e477a0e0381162ce352a05d086e419e3b744e26553e77f7c47344353c1aae8ea6a63e8f3ce679ada180891241c3eb4d3d80f2d200b4d765298b6de53b9aa8d419d8dbdb63fbd5f8d6cd8605fe13ea84f93891d1e074f2918f28d30e1c9033b1b792a2dab2a5659ab8dab5b4f002a53b524ee98c602986f63527a179f4737633b8395237af9597739ae2db2cf20fba358e76898888c1e2b651df0e6dc6e195099bf19b26127b76a07c92fdc0d2c7e2b2ea5a791747f0d291d3aee06d0ed287a08b74444bc656309592c6c9b8bc3555d19120f182f0ca9c4b6c4974064dccacf501b853d0bd6c3509b72d59496b1a04d06dccdbb9381eabe406c3d594a85d8086823c949abe03de80a80a827b45056416a17453befac35dc3d504904f1c147bbddc042c5c2c67750fe58cc0ab09007066161664dc805914f0c80fba9017dc72c8bdd8ad25a7a386f5818cbcc15927f06b1eba62c041002847400ca0d251b0fd73b42bf0068f97839b7bb87b4fc502fcf45c90cc9a925883405db3937d268166e284d9ef60b8551cc940a55739cd97382505eddb355494e88093ae2cc4c5220f38f040c8b5836636e9833c3178f99559568f180496b9a9632ce12ebeac5889c9c7cc3595cecac5b93d5a8e6b0a26456321db624339d55382075cdeae2694079f875cfd3b7d4a042a791c1aa9fccd5d38c23065d46c5220bf5bbb0eb4754293cccc14eaedf145cb2c8f2f2276482ec70c9e870e9b52291644179c630ec185cb22c769eac4d4459d0e0600cb9b12e851d15fc240453016ce05648672c3ceebd566f682204edc1af114d830c8828ef4587275b1a4c66ad045964c3648615dbe0970cdb59116e72c90a864ee82d27f82c0730d421117c604803b9f53c57e9252b9654a1f8c68d9a3c612aca1f7f1f3e624eebf8aff52539b34721328d79aade34f586fce83625e586ab2fa096fa87c002a0981423bd51a5c0d08b9a4aafe5d95a5f6bd9440bbbd34885ea58acb40bf3750fd3d30573888efd4ed10e1b37130fb9cc8eec9b70f04a818914b95831e82ad0b388dbd75dcad9d0fb018c05aa9f17481c9f0338f4690f776c33b969045202c404e8589502db406e36f0038f679b2ae8435820b025e0ec3c8b607e9b11cdcc0c25c58fa0bc102f43e165d89b5cdb47ab306650e3c21b7fbd9c5fdbf4b531a29b14c3e5434cb08503274b9ff45e3789118f0e7b645f51041318c4807e3c0a0f932ec2a6e5daca96f51963af06b9c2c751b7cd92c65052cbd05a7e09c60f79cd3f2530fb6ce5393b567b3a4830e03806bee19959554c08eded7ae039afb2402856dbbdc53793545b13b3251b0b249aef3db518247ec0f21a1c3a0c84e69dff4fbd7807e4a2b30818b33ca7571081edd60cc18840aae47f8cd6cc5cffd5383c96548cca4a7ea7cc9d97aaea2539def301ab72a10037a586d6a4218d37467c49ac3db62680f39ea27dfb23fbb8245159e5abf630ed6a23749b3ce101dd4702d647b4459e8553ee49439de606a0e5a1515fb9d9a21b88c59c425d0ac1c3c09d59a47f04c17eaa124213b9880e1fa8c19e312416dc99120a947d68776e72c515c5ed0892089454ec8f8b272b429397bcdbe105f938798023336fdd246fb102de98d92a42d64a024127881eefb6ff49e182d83c3c3e846605b11e9e8902d1673e3e671bcb899246cc6bbec7284e8138da1e20218399a737b9300e96888637896bde0d52e93df3bbccf43797eb385eef03b3905ddab4fe21b99251597f7992c0acad203708c577255a97455b3bb02839ae5e73cd303e794716901f08965e264636ec68b07c14fbbb28ec546f3004523b98bb4ee57f31090edcc143004d87de42fff8fa45a6e8cc34a3c8caf07a555911eacea84be5fd039dbe9df103bafb066f439601cc67353f6f7c3f3c816ee28cb951bf5a182e690e75e375b615fee9e687130b8ffebe5eff826e6984a73588894d2d0c30d02d3ac172b1598ff501c08663ce9fa52b53dc9301b014e610243bf286266ccff61d595f01f5c34e61ecf60ba67fa2d3a0c2a69fe79485d85318a275f03278b6256063a8d5f5872556eab0c1d0d6aa0741b75306ec707dfd014e067a2e9e8cd139d36c52302b9fa981e3665b1ddec264382993c01f46cd60ae5999a7304c24043a2a0f9d56309e51a5039d2e81799a12580a4536494d47eb37047d9cd06a74a5713c5d02073750c5b4e8da592c40285c0000157060540030a5da4ceb852dcfcbbcc4c664568ea2dcacdedff3b7841022f7de7bef2db79452a62403b90993099d09d60df2b257aa379772ccc903c0b97b620e5ca1530afc538ae9039ab6a73f4b70823420ae3ecf21605aba960d75f38469d38b849c1f737e589f5040d374037c02d2a03fa3149396a06652014f7a67105c99958d890930a892210b2c113db5938f55edd90a64bbbda5a5bcb67a5909aef47fde22e735e7d4b4ec92946e989497cca4d4346a65753302143cb8416721052b986047df6fa149f4fd1d3485beed4814f22e4b2c75f6106619dd8cf0ac72b55ed17b95aa06bd2a23b85fe2ed31c24d0dbdf8d6d095c176014bd0085c802588abfb3d0f0b71fe86317fde6235ef9e388212927ec7988da0c0e619585a2158923a7454ff60f5fe7d4fde1297a8c1faa37c3a6f743fbd34d621faebc4b15e9844637a7bf02fdeec01fe750f965f6385544e78d86163fcfda55f0c563fb0ecbe7e822b49b0d97f1c154bf2ad477dd13b2d0590cef3a91381346af62e269db5fbc73fe95e7849be7cc7aee32d519cbe983f8594f517dde33dd8093a717dadd676dd9ffc0900306163fa67fa87e487f5cf4c6033fff1c25bead7fcfcd4182eb0f221cefc932f630b9b1df5b251ee3cb07ca802789db89670d375a1fbc99ff09337d1236b21fec9397ff827a79fe08aec0a77bc25f7a37c0a4823beac927e575ee3aa0de1de550b567ebfa78660740896ef5e6701cb1652bdac2f7be8de762da4a707ef692fb094f287fcc691d5e621ffb9cd778b654f86a3f0965ca747b29ee5e11f3d463a2b0270476fe98f6fd39901832a9936c90a427bcc461e5fe895363190324a2f443f3f7d043943fe51344c6a7fda08b4aad64d8643923a2a95092c9dd6a9716118be943f4520b10bc3920c61a901dc1f9f7a0d4b527a00f7573c7bdeac5bdb80545a5534fed8b8aa566bb5146783501e5a850de5ccac566bab2984442849abda75ffdf47898846190f0258667c3dbc4a9762a58dc3973d7c460f299664755dfdafbecffd23cd60144dd42b2411b11d04573c68880d5cb1b123a4918814b21c6923691946baac5a91e89491e4a426c146c1966530842bf2475cba4912300c66106681878f14f831446981c21846331db87e7b53bb11f18897234e0da6ca0e82f416e9fb49524c3cda41906ec8729b466279fe18d42ccfb276bcc57a7789249811cb7ad7602cac7ad5d3ac838098bedcf188d50c42130c189e03c5927c1dbc14cf3bf14c3c1f02c37e1dc8762337775f2f0c46040700439416a4406d01a58522188bd9f49142628f07692cafdca9a4ef2c71aedf80c655a7688fc1b836526467814cbe7b084d275ff2109a501e8e1e42930e1fe260781096747808af27791bdd2d891deed1cd1fba960302f7c8d3dfa0c7830aac766566e026b9d8b75623c67a89fbc6c46b3d5627f6a71dc47563eaf793de3521fad2f68174476ea6a937c6fa89a336c4c4d6a5ed835f51112b2a72d236ce86443cd1e4dd47161ec01509e47a929b59466efeae27ddfcf5e6ce72f923cf81e08a842ca19b3f7bf3cbaf3e36cbbfbc1c7b80e5b78d943a6e6d0f6bb76e8e88ab4c73a5f74bef41fa88773d985274c603cbc72aa9bbb11e89e4355928abc96ab21dd6561ae6b3ca6ab29bac26b369cf78dc54d54d9435db216d6476b39a2ae3d1198f2ae381fb2daba314553fea8a5455238993edc8a4c8766435958d4dd744bc9138b2ab2adbd1d90ebf893855965dd54dcd76643b68c623dbd13ed02ba54e091630a8923fca18dfaa6855d12c6a6060628314742871b0221d6411050c48526060258658640105dc1f051e242d4659746123ca620d4c8494e0615bb083a3810ab62864a06111830c0b5bbc00c3021a5a709d6260c5800555072da886a002aa841a4c212e905a744183785b0b39dcb8ed4850062c30c997ea1fd2e85a7dfbd7555561e1b3035c552a183ac1426c658c8182cee230c4c247074f0cb1f00102cef6ab9f40414fb526bb4d6d3474110c5958887450e4e1d1e972e211b082b46bbcde7436d8bf6d441e1e2e401a9d851cdad46ce89233e14c380a1c0572908319cc00063074e1faaa8a51549456f48a36d18170eacd7d336f0f4f7c11006c29f2398b7f4e40db3822f2608f28ecd96b7eaed7442674a14d8d852e35a14d7d842e616f063380010c5de8c214a6e0355e93bda6fa492b3a1d28e6e49cbc261aa1c76da2e98707f53dfdcc832f5e63239a603c828707c50384a7fbf9a92a4a2b3a7f6a5010d00f11dcb1f2788dd7788dd70001040bcbf79d4b1c932a240b8e762443528ab4ece6c7d9cd38b0bc39e344dc67f6fbde91e438eeaf8fd13efb4bfbec3591952468fd8bd75bff05c4421c17c22e0dc6b231f452bbd9e4ab0601ec638540e8e5b531da639814bde46ecef13889139c6999966522d1674fbad98bb20b5f3ef79797b3872fe23c8e84d37ecae7ecf5f23394eb456f6bb5367728d7b501af275d4ffaeb92449f3df7222fe3c0f6332fe3c0327bca918c7e723786e44537a6e4b9cc9b99987b39b59287fd1cf6da735a080b8530ceb39ce4b2b7cf85b490066359ee33d1cd1a57fd8bd6cabc315819a3f52f666f3deb495ec68149587553a7695fe82544c11d7b6bb62e3124fad0852efaed493ff23017efa2e9e4e543ffd1c328fa922b359148247f249fbb72b3b21b63fd75c3ba7e562bb3ba94c5f536e378aca5602d0573a387de42d2429ca6653bf2481be94f382f8f3c7d114976f55f5789f59c27fad048f4dc8b9e7bebb32ff16244f7e699691f3eb7bde68d9ec40b85aaebf3f51ca0c1a2cfb6277de68d9ef3ace6651c58b3cfbd7dee47f7372fc6721f7a973833431ef71af7da73f76617fac76d3793005faf610fbfb1755deb63bfa4c171c938307c896fe702584abce4879418dc09c2d3e39392281c9ba01b205b57204f8f4f0a154b3b38393a406e8236d0e3f0e1c84f596d55e921470748bcb1a9a938308807e5c2f2ff3d5dcad71c1d20281c95f8011f2250289639ffad90a951383838380d4407e7d436f0a74b591f0c7b5c626987770bce112036364e34b90301123dacc6ae89a7b689a5171ca91450ea88186f863c93ced7e177a81eeaf8b27ba49bf8e89f3bfd3d4a52b2cacc70f61eb19879294f3d2719797f0cbb6874b05cd935ff42f9ce3a886c6af3c444fb138a2333f92a33b931d56b4fdfa46974449618714cbae7b37410317b9b7cfc1fea672bf6c0fe1a8d34521a9fd63be3264f3f5bb7ea2111406f761313edcec05db1ed8789724da20b171ab1c41e319ff4c0f12dab4d9a24b2ff430741dfb30e717e3eb928f1e4351c11d3e1e619d87ffb1494fbc3498c31ee60acaaaacae4fed03e384be765f75e7ec98d216fee4cde75f9db8d6eee50d25eeec288f138a2dfc76a8dd58cff3063069e3fed7c396fa673ce4c7ccdd0aebfbc3ce346757f681fe2cf6f2d425869ef124d3824ea870ea29a7966e219add19f38b447c0cf0e109641b046e5673ffc107b60abaaaaea873ef1ee055d0469020c43d250a48b21a713a4d15374c71863740990065c91df3855b35957619ed2c129795a524b3e7ff973972db54ce8a537488ac80357ae203b5f7e3cf4abed72f71f05c214a50223e8bee4e10bb5aa37021394bcc9eb30b92815e8dee44dee085e7494bcc9d58828b93596da3b0f0a1408b1a4d9e28aba54cd66145a1f6de8579bd1ae5656a484cd91c786a727fa00e52e52fa251ecd4bc48940aa2b4f255f8c4476bb598684497b472fbd4cca960e715f637b120e7dd6616f3d8849d04fbc9be18b506a6cd766b7c675b38c2479d27389a40b4b304d7b12acc49212332921117d37826da397436caf859e84339bd9ccda47b9c17de86b70a14b83adfd1a214b93699ae84311d03efb795dbfbde66519ac712fdfa2701ffa6d3442e12ef72837483ffa1aa4d1a5c1dc45b9317aee6b84eccd3258be669f6aa2ed2f4df4da8d117de8c690bce6c990b0f6d2cbdb952161d1cd48349292cf5ecbb0120cdb364d0b711a96719bf636d332292d4c4a292febc2445e96c1a2a8c15825d5b32c7b122ecb5ab2ef11e96bd82791f0e8b51b334ff41cd638727fe2919090bcf62835ece52e0dd62eca8dedb5af41025fbb341873918518ce7ef332096f5c28cbb62df4275ecc3411863d89f525a4518935faec4930efc648db48241912e6e5c63550b81f3d0d0e5d1492e6853e6baf86f6d993bc1bdac8ab117aed39ef46e842fb222b43123500e586f6a1afa1dd100ddeb6afc16dd9bb38e635b6ac6700865f512fcbc893931f2942099a3881c5113275203cc528302c82a90a6a163df073e5c9d10182218ae200a760097e9ea898e201cad36702fdcc140ece1065836033cb293e0eec9ff296c7b0bbbdaf21de221ffee58361ee9797c53f991e301052b674ffeeee6ef76fe9927ea44ed4fc0b1687ac6b15271fdc35b8ab50620816008655b8200b59851241f00886552811850974b04c8371a27aeb0de81b93c48c35fec1be9147080a7bf9683958b4b4215a05325d4312061b6f0652e05d3e309ebcb8847fb01b623344e126fc0786ee03f8f2b0c707a67e6a505e72d760cfde03054407e7e684817a7c523f401de4a77e004db4b101a300039c2f1f07d06088c2420d385f3ed1e6f2a93b3a7041cd8b0feefe8726eb5ef5a2f8d7cfaa8bf2fd53836992b4392850bd76754021bf7a797350a07e56df6f0e0a587f5d1dfd627dbc14b81ebb3afae57aec826fd90a2d0fbe449b58825f06fb385f3e50c0292523d8dc615bbd8bcf705375af212cded26fc3e22df2f2f10fda601871543e0836ff6d6f08a5cc92e4d753fe45f84afcc0b00a259ac0f0630f8f38f007868fa5fc8344fc3be181cd9eea7123c30c36d71e183e56e31ffc7ad85c7130846f5341116d524ec44d0cf0127c4f45937c81b0af8b7f10c2870d55e08dd1744e7c649ec8cb4660d18814e230e9c5c877ccbd0ade7ebbd86794d29b8dc03440f0267a6c08ee6df8a7699aa669947e883e89de1177a111dfbbb8f5a4e712b3ac82337c1915dc6fbd915188fe88fe48d5602e3abab97b38f2f2d610e94b481e8e5edeaabdfd1ba2a7dc536d88ecb1d736b9c94d6e72cb2e26b71779597b487a6c236d527af4354f247a3b04bd28dcd3c750b8cfde6adb86c2dd1bd03f2cbbd8cd4660fa9bf6d54612fdfcedc6901ebb31a1df6454f0f6d4cbf6caa86012ecd085ddc8cb2b49ee4cc423088c2030727363236a37ba61547bfbdbe84a4e83b99e520dbb59d24d464aeb455f7e01afd7382f1b81b98f1acc3592992c16f2b621480ffd1bb568e465c8b3bdd6439db1c3fd3604e96df867435e631b4d261fadb5d6be8927bd644b6eae246ced8fdc2148d7f5d885651915cd8317866937d36023b2ca63297a11b789449ce424c98e386f3331f1a097b81cfaea35118661a4dfbcd193bc1ba3cd082c3591c7719ee3cccba15b31ec394083e567d8968db8a15df8927b97882f1915cecb24b8b15ded661260eca18c0a960fb177f1cc6b7c5d7f79fd9697697a60f8408cc0f061951acc3479687249a0f20205898fc401c360f652d8c18fe114516803ee96343439a206d3b55696e33812c90837dfb52130cc914846e863d5a3df3a959ea606435d22e7851e6a30a19b696ac5a0b7b4ac1ef5208623566510b634cded85ce425701e79e02d3dc49c03aa4c8f0fac6f3de8be1c1f0da9b77e2d8aee8862ec7d2f3b68e7ff375f0bac7c311e3574823f491fbec03f7a49bbfdfaebd34f57b8ae0006038454f10213bd804c32984e4602c66b387b4893cbca631a54be0f9add3515c7af26fd213ed3be3389bdbcdf027fdafe8cdd7fbbd3596e2c718ddfdead2198972f2de933c84a6fb329e44677851bd0c0fc2eb4158f2bcf76278109660c41be99b5cd83c96e48e54ac5dd2cd9dfaba3000c67e45072fc5b3f0ce483cdf7e7df7785081bdae8c01f00cbd659f722ff1bc31a13bebe7ca3dcd9ededc4026aedf47e820e6db774d8869b19b69b21bc37175766f446024fadc8760385003e2fa3520b621cf31f578e061211470ee5a84b7f40d798e6f208deae3731ef798bd397a0eb0086fa10dd8be2bf53ad622fc8bbf7946685e56afeae1dc373a6ed547681fe6d3d04069e22559c48106402a9c292a7780c36f3e0d815fb034453903383e2ccd2b894c0a1b0ba610545b10c5150d57260970fc6ec290ee0a4138c3dd3b1640406101841a1f2c7ea083c50f7ebcfaa0d595d7ef2cd8e8f316ee63f5ee75f3e8f16bf73eb73b62a3c33e6f4f6f776532fa79e476deef3cda9bc0d9fa198fd9aa761e1d447b0fcbb7eddbdfaa7ac6f1cc9e5eedc6ccdf9e7ebeaa456f8e6f6ddbb76523cb30585d62b79e259a6c8444ee36ed3657b775fd36ec43f9248dbef579e4bb79f3c895691fe9a2e9dac7d1bdbc3219a65ff22477247314c6628c71bbce44fb60398ff6813e7dcbe381d8c98f6e174d28972596e49fb084ae6d1b5126d3b6f78eb15a1f3f6f5726c395896f66d6e7fafdd9ba3219beae65750db6ae33a1d5b6410137c1cfda6f2f93ddca821a8ef872bb59bb32993b13154ce536f8b22ccb722620d088930461502557367822403e4b0f2adf3dc0fb29245b67c0c04fa58395bbf1092fcd99db7154beb039eaa8c4c1e6a8139f00800d2cfdd0126c6f0f9ffe0c0196e8270153541b30a53a57d81c737a889b7a5a88b7f8740ff71be42edd9cf660fade6261fa312702411a6888391e61ac355b1a857ff44954675248b96cc2019ab8db42ee0a94c0f463108b84d4a13951b84bb15de85fad3a42bca5dfa2d40890460169d4a74fa918e80ea6940998a281fa604a7f32dd02d37ae90f5ca1af2203db98fe6c4feffbd5620e12f25ac1661a04535a9d6810a9dde8afedb510ffa8a80b4b31125896c1ccc529a594d21642bfb51b12d78f5accf1e213fed1b7ea0b6c9e4141de5231cdd30b48b436517085be8b4f147dda4d144461fa33289aa20f6089feca9b7439566f59f4c3d95a6fd186f0f0bc2e7114a59c16b4eec3b859115b17c215f95796321fae20ce1ec59f7bff9c652bb0f3b387da8df93159764328fed93fc6aeebaf87fec9d86149d03fec92607b7b093acae80269448ca2820b282ab85004ab604805177a300acbbf30cf9a979769f0856118f6d5c2e6434cc60a205cc1302fd7b7deba8285df41348e1f2bcc0827d15874516ec439cc016390fa96fded377671e9b51731d8cf744c7d59ffba3e4763eca51532e4c2ba40c45ad2163f200a084845178610a1e22d1d8e53682107c7efc14dfd42c299d445e2cb2deb96b019a2600b8abfe3c6f119e02dfeffe2e20c70d3c847d8e33d601fff8334b28f5f8234e4c7ebe5633fb3ebe5353df9d22aa5bc4a128d2797556f6929259411920ca9a918236a02cd2f6690b9338bcc9ed910c2aed5daaefb87ff00f86761f99aa76b75f35537378fd337779000780a58721a7e458fcc01f6898a59985f3fcf9b2676f074ecf098749cbffc18be080c36eee004007e8747a1c00e1f800fc0d5d13e4ff3423518221a005ef7705eb01c95e20b7a022a42e4c73f5228c53f92974f479a27db136bb1c9e9e6b11eee1d8386241ea4420641f044d1229046e3fb321e422f860e0fa1fb09c9674fd12270c5fb65dc1c2386777317e3c2d00188f6a19f289e1e9a17ff99f21692f7a735de92f2a317d5ea37dd6355d63dd1045ffc01e0c1974eed1064ee78c95fc4856d8c848495142955887f5e7dfcf34fb9b5c73f7f204be21b8a9f98dcdc7597f4f449bc06e2b514fef90e1e7c217999972711ec3fa23ca48755d50d4561ffcd43a13c0772832ce8bc585ad8dc371f70874d067b016882341ab7603e5148744fbc31c69fe9e68e9b76f02b18c18b2e1c508427e007719e41b07fac3294f9775d7961f5323b51139592e1dd0c361b8cfa60d8f5d4a7aaa97a5022d589a66850c583fe60174a032e7c41e8ef4031dead5a1f455c58cb4b6c60b9004d1cf6a743a80f5d032d03edc2afdfeae65d432911ec32b3d24fa21feb4145e40fc7ebaa17e6c97cf8fae8c520ff3a7a715dd735b1e682450390e5f54307f2b199fab8f5d47a697d65fdb4b40638b6fa3eae2fbdcaab1789ef1a1ede52dfadf77865be1307c2a13e3f2cf6f4e6c0668aab1a9f21de4289fc502fbc257bffc689a6edba0321213157044bdf1f669e03f957443a1090bf48068dd3d763de8c7f5e67e0ca7537e09f166cfbd054343d05a25f788be388e58b7f95aab8e8201c7b11ec990661cf554fe583fda30ba0a3019ab6dbf98834c0ee7e4bd0b901fb5b57a6dd08016101780068b2af80ed33148317b80742b3b77162c99fab15a7fbbaaeeba1d67da128104d354e34512d74c99f0b3a061d9a062018cdc275a98f03511f078a41f50bdca7f8e3c522fdd2a33ed467933498772dc022d61ea5672338114e81fdafa855c8824be90056f5420cb2eed285ed585161bb542a25ad36d88972a982d5341817ffe4d7223695f280e8379c5eb0508e7e41812fadc3462ce5a801310c7d1ca9140c8d025cf1db4d5a793a649595e73e7dea408902f647998f326f5791f3025f74a0f4c317f8849c178ce2380f2bb0ff52539e9d1e465252492f5867c2d28d134bed950763e90970a56f878932e92d59e5cd172c25abbcf882e990559ebf6030364eb321d188349261178c12f8129d248bac533a18da7991545207813d7c0cf3ea635e7d2e7677638d61bda383c8b0eafaacb2ac6b5a8ada351d45acae7ab9479948a957d709027b8ad19b63adaa471eb8eaecb9167da8f647134bf6b9796409a10fa117390e5dfa59ac32167bb3ec54db0969f8666d3bde64628c198faa65b57704117f4ba299c0f346accdc883c78efe8fb85f26628d473381b1e6116bc5d2dd3acdf588143edb0a69d0bf67800dffa60fcd074388348073c8aab43f5fd4427f8e40a880d17f2004834230c84b41edc385cd10e5361e4084b7d4eab978cbacc1009707f867c3bfab885873bdd89dbf3db58dc4f46626de3c16ffe66bde8c68aa0f8038f34f867c6073fbd46a3b04e0be79c6b1855d6e0d5158663284255655998c29ac7c2c4bdc12bd5a0e84b75cd9bc2c98f3e305a27d6686f9d4784cad1cff9ef0daed134bf3dbc7bab9d6f689f742b88265d99c303cacc096e0ea36d46e94e078fb87d6306e7d13cd60e54fcdefc7842dc1b08a1ff4e038435a17d637b1342544e1beb1dd7fcff2f54401e1590d6c8641f3e7ebf01658c50fa4c0f37b091add25c0002b55833a60b883c9621835a9ed5002db3e130896d6486e2271058c3ef780a7cac8e7143cbf476c2575f60e3983cd156f5ed2040ceb965e1d4298595b81e0cf8c44309c925699a5fc771dc9d69a552b4f2adff79fe21188b401d836abd6bb0dd8fc1bb019a7b284ed9b4936045f04dddd1d36ec6f400ace0103f78534b14b7a1e23996ccdddcd4770a267f12f7b2ec47132e32497898e90e9a0e4acadb0c2cabd4d22867dcdcb1dd632cd66b7fa67adb596b3f9082cb228a4cf9ebbaeeba29048b76647604e6433c75d990e5b6b653a6cb92bd3596b1fb39cb596b356cb64e58ec0a4ccdaafdea2bd25796b3fe4651620b8af9fd558fc2b11896ce625d18b9ec493fec91f499195e9388ee31e6a1c7704eeb0b5d65a4dd3348ed3b417bd4682af71777b2bd3719ac7592f1f812df796d3445dc83e67b9b7b7fa27d3c97440883842d2ee058a24a4c0a08a7ce99fcc2eecbdf9ee35e6320deef97e7d27a1c540ff4bd25c49d49fe1ee4b7f0d0296fb9bb94b832f2febc059fb19cf1103c76c0f71f572c488b91e62cfbcfef6aa673f7a81218658f6630c665583093d3663bd5befd7b78d06d3010155b30a6a87274b82cd6dd34074a2a8b56d324d54f9a9c13831f279c6af3a44eecb011a4c1a82eb5bee5d83e9bfc20a1e185e51454d87e1155400e19d1e3b3af8ca6854aeea5fbd6ef6cfd773cf71806608d25fcf5dda8debaaf82747355e2fd16371c81d5fe32dfed7f7a997b84623d2136c4be17f411a50aaf8277fc463c15a23edc02596e410151027a41d581bb225034184b7e44e166184348d8004235ff2242f1f88682ab9a79127b94ba0e05f48bee4e57f2557f56242ef9a04e0cbc88c7ff2c6dcf74f7ecc75c54e10ec37fcb9ebe6d0f795a15ba5d4c0e62e5ed286bcaee7de7e9e699d207bfd55775888bb75247e79c9b93f04ae6bfd93df351087f1eecb0d361ee0ad835d9e63197fee2ff764fcfdad2744c4d7739e0cf728391a5f1fb96dbb18c05af65283c9e69c8f793cecb0fe105f3f3598cbfdce38b6ac8b2244e3fa8debf59ff39bce2b435e22061f1ed804c32bb4003a611a6de8d76a6dd7fd29daf809e5fef618690b9b5d07f3f8e86aa55dcfc825ddd115ddd0b597bbb5baf9bb31a82b2141fca33bdd1d2bf8b5e60cd7fa15a48ef28fc628c015faf10ae803e5f9c2153008d14974c2310a011636025cf1010526a3fa68828f23a85831bef88ee3a602fa80b11dae160a042950c10506006ce2f9e2575801bf89b100643eaae0038bcf0717b228e19c4ea717f85803f401fa284317a2ada4c1340f1a4ccbee9c157c3e71fb6803fc20bee1030e7005e22c71bff5e2387a52004b541f5fd81e5ce7743ac1c0061c8e3d2a8fd18a880811863081822864c1451703183991031f48595604f80121c318cbc875bddcd08113a00f1009b0d4618c0024fe18f6ef1f6ec25e6ee880077e3d453786b11f22d0e9746ac1156009e25cddd041105882387ea7c144ac00597b8dbb25570cbda0849b279ed0df69308dc16ea3a1ddf9603e06a584104208a19450de597d18c2784e4e4e4e4e4e4e4e4e4e4e4e2a2795d2b137a99c9c9b79930aa56c8a4b6d292d95a57264cecca139558e9573e5c04801fb87b2c0fe960bd89f835d60ff4d836958f132bb02c447a7ac3939d13473727272728490934a212127954a89727244a9542a959393939393132487a63827b9815b2115839115d6f002510a6810c2b1489801378526b62b8c0106da15e220830c062dc074c0e30a820b2c27d8542acca01202861750214132984cc840fea841b49a70e3b6b32e16707cc14bac31c68f71278b9f587f0e95015a00edf49cae0ec31d2b7eb0a3c5890d9d155658e103832ad966124239292621949ebca694b34a6b5609a1a4124299bd7c29a5573f6b2c75c3153aa76545a58fe794724a082594b0054a296b53081fda0aa72623e65ad6738b3bb65f42296bb0fc4d085646d6cc896d5ab6699b7c0857e0f4911e6050255b38d7cb74b76fecec42b9aee8375da4bd6820ecde440779ec8e8ded60317dc1c45cdf1e168fc0b193e970ccd580eba33b518382f8a244f5020507246e31c0157f182d80c20ea6480101c17971ed86751ff058c5fed86160ff18222eac0ed853b03f56b1e0ad77f1fef11637796fe9bee4fd2d1b6456116fc142a1c66effe0c0e431293598eea5066312822ef97bef68133417363e8907b16b1f881dd64553f7e8eed13d70ee1a676f61d6ed16d81fa67d8661783d055c41556db0d207fbdc3f3eded2f9177d341a751d24917e041bf1425e44ee47dec5a766f2508341c27a0cf372f809636f7939e4e9a49d3cd4b8a014af79fcc3271eccc9a7a4c490420a3cb9bd33041be281cdfd63798b85595e8b0edf62bd0eefefa7140f25e52146414102bbd8cf54cc028c7511200cb5fe89b16333ecd1c171caa33c76b2d35ea0a4dcfef10fc83f9216ecc9e5ce603bff88a080cb98789d57e291386e99cec33d2ce7a11ce7fe810d6fb96eb3381183e4a57e87fdb266336cfff48f85a383936851df4fff6f7996855df913b36a5996f4c1f025fc4af260d6576f59365de39fb7dc1f201c57557b5cac8f0588af1556960c13583ff51c704cac27d7018221aaf39cf9368ee3351228c84f3fb1ce5a6fb62ccb823012b1429c24c54e9028ba5a963eacb5de2630fcf104862f6f0f121c082184104affda6111fe7529504e1f1db0a79c3edd137baa16d02483e4cfdb2f33250a653c5b3481b7cf5327a8efcdd4993a41d11473ecf77925a662297eed503127e68ca2bf28babf8d4cace01c733effbc0728047b90f71933f670ef1834acf104b0272ed1f10638b2a02451264456807a91a8689a3edd706e014d2dc44b31080e09038eb13d4281e36332c86b2a84a04946d348fc7034c1710ea8e98d88019622ecc9dd5382b30c92d76f2aec70eeeff99af0ea76091ede63fa148944e24f4c4d9f8e5fd95cf1041e38c3a19fdee309429ed084155ea0acd84159f105112cff481df148231e897af5ddcb1e622ad96358b42ccba2d59300bbb52cf71a6a85ac35e3148544373b75bfd67e96c9ec8d893f43dd3df39cfd8cc7d82701768b52f7ac7f326a59fb9d591eafbbc71b73f30c119c3d74ecd7ba172150d18ba2cd396b9a88d7ea37c6df8636ff6c6626e6e6416f28bb9e24ca42590f8c458a2bf7ca66fe54ab41bf7ee64d88a77c786d3491ae5655fe5dd867dab48a91d23cbf2debe6796532ec73c4d98db9d19dcef48eef8b52b1dc131e5460b3772ba37fb154f7be99036f35115c29a5d46fc94955c03901e14702e0876d22270827ccbdbf0d0e14405440f163ea97fece69dcd304109c9e1c007575f158679c73c69b3780e3cb6883fddb0189e38d71a20d3883f15b3d497aec393680e94becadc5d8cd1bf0e4c7c8c7b2c53ec649a537b3df1989e96d9c1b8b581421fc1d62898261fddd447ff3b41037c5fee12d70e7a6bb836053b64d50f7f0163fc112a7f730a4c2073dc0244e8389d716e15f1be15fbfedb0bb4b9ac97f2a1f76c9116ceed34604d312504cee43317a39c3f4a5479f0715d8e8bf714fbded43de1218a7c1c8dfe2c67137c69f7b175702db3418ca39217a4e744990bd40315f3a11ba4a9060372754acffedfb8dc02c4d08ee1dc67ef4b2a75e14827ef4f24cd684a0710fc3f20c9e5e2609219fde181421e6cb9742d060795184a01f3f3e7d471142c6602f1f62a8c1c864980b5d94f8f0c5082f79b78822f6f1187aa8349878bfaf7f74137dd33856c09f192c55cb9b5015f63b7657210700056906b80b6a07410fe81b1bfef5f350f1630d39ddd64b6650f5c8a0813d9d4e251092d2fda4d94b605025f380c2f5b3e86149580821bcde8210c286103684968e9a183e809ef5edc9c420090385b1e9c1d95834c45e98d7f8f24fc2e6cac2b28410c28650c70d863f3dd1105bad2d251a622916801dd82c42fd78e1df12f606c93825613366832b7632a49b0a0bdf25b62753f59cf8f8574f52fe5539c45649c870818c1a6fa97095a1d3f900571fb88648a8004d30aa16760b5c2f491870fdbe82cd3efb4cc2c3134d273e7ee29365d4d4d69c80f54f7c4e8654121e58aa0f5be6f7573eb0bf22890234dd9ffb73055c278da6eae7573d9590caa74a8950d4eb97fb857ff5033ad8aa7af07ca7c2f264aa9e1be45f9571f2af769a13160a36df205cff06dd2f6a0acf1fe9c097f92440908686e7931421092a39798be3391f56d389cf7c0e07d218e1f9f08484a7da0234c9a839f902aef707d7c734980903852f286c16a12a147d178f5bb83f5bdd52b89e9cf88850b8c2d0892519d8bc015d50d82c637d869182c0fc06b27903c2f5b71f6fe9afbfa5bcc5fafa1b919e8cd908e19824887ff5a306635d121e121e19355156285cdf638ae20a23154bf5338c14ae3eb87af6b592f0c452fd4cc283ab8c1a5c1faad41bc343490e30a85275d12d0bfaf44cecb2a24f4c515a55dd3d8136619745e2a2bf7a086389884a12f1f9c2186d8f5e1b6a194c3f76af8dc3feb2a2fc8055230058fea6d5e82a3e5bc325d688a6efbf02e0d81e12328bb02728ab428d10a7d5805e086576c29d0e0176460f187691749190385a2e3d3a4701873d379b9558a801ad50e5bc44b02139031cd26aac400802e8c4153d875126b506c0347894241289d477cb34245560b024242b656121155b4441c5163bf8f18c40db661fe2d0bb38f637931e6a37e467ef9a1023c0244c7a2c4794c309638f1581eb631e12d8cfbfbc99c6d75b4f2d8bcea63aa8d42c9785452c55cd0800000100c314000030140e08c5626130241e2bc3e81e14000d8ba04274561a0ae3288831859001c4182222000000000022d2260094a940db5ae0fe07c9394c16e6654d67346d8d426a24e495c853d491ca0fb43ee96aabff8069daa5216d64b94f8dfa2375fc9276b749b9690faac1f09b12ac04c934ce883aaec1a1469d1facfb76a2c7aac0996c861e440c8188a6e69a99bf3521e1bbd777933e5db39acdce4e02f4d5d98491fa90c7b74a4c867e4e972fdced43de5a7e36bdf4bcbb023faa086237dd93a14cc08eff3f33310d0177843642582466cd51aa1168ea48d6fd94552beb3ae61bc15999d325307a8016445421b3c6a56e97f140129f2891ef52a801eb2b346b26179ddb2b50626477ef736f656390b86c4d8574a202dd46a6557f95bda3cc0a1a519547fdd21af0e0728bc8920a0e6d2d4a0846eff861e49ad94e17d603ec1feee0a5d7a4c8dc85363eb037c5896e718540e73ce343ebbcb12e1d334f686cb2a07d4118ee17099c69f477ffe504b2c38727b11456f9acf4fa99f320f9f58745c23cc9f394adba1959d9560ab2fc3ad81ea1f8db03058746c862cc689036a305c69de1b65b47d8f9d61537c20f02e64cd903aeea92b93a724d65c6d6786840f51aa5c85f9b9af45292f2926bc1cd095cf777177d423085b04ad918c3ce5a503ba3612de3bcdbe3a63625dde85095a83e55abc5985ecd3190cc8d1006464279df54796534adb5278d82061909b31d21f343ad7cc8895140f2c159537b145b001e4a96357a2c4c4b02b760a1fe1b022581de52f56c7668f41595e620839e2106d21554e47affab723b7c1b48317bcf2303bbb789fc1fc6ca4729ed9ffe746235a0c3288cc983c514c6e0445b445f76427a5dffb4b6b2b8684b2b4e95133f75aac7a45da95c3c07a7ce6a9848a964c51fb9adc7a418456efcd4ad0ed394965c3cc9b53ea6198d6cbca95b0d26a194a4e21539d6c734a3c98c9fbaaa23131ae0caf0d14941490a2b95bb2cba500dbd668962711c2ce9e11dbd1a715dd7303f81b9bb4b79f715b5a500e4a439a7b91a9667de7d472733bb42c4a327605712e11dcb80058d1aa7ca6340aeacadac2c95867427b5d76c34b6e4d5ace5cc5436ffff50b9bfae5c8ce54bef651aede595ac4a936b76eda649e3f76887d1e0d2ccfebc93f4caefbd0058e954a3475b2ded7a53860cf8daa47e03b476561fc0c9e7468fd7d1d1584e3eb20b44999c3b35ec49101cf0747428a2087bbabeae89a1aa70f47aa91ab41277b66a3e0543fdad199fa0d5d345c8c8fce1f865fb3e55f08c24033ed5e1f492b8e5df1a77bf5d414dfed75748875ea6874d5683c83c86483dd7e2f105c8397868a14cd4be4bdeb7e48175ac5191332cef7deb462aeb1148044d5932b0c599beb8c4eff8bcb3b0cc99b25d9cea97640fcbef1b167763cfb418d5808cfea15ecddd1bc0695794c0531054a07d3100b2301c76c8ead7a7d867c94d99d5dea66012e1d4814b199ad313912afc02052512097a6439508071a8f9a24ea424b2d2a810d615f7c1127cffc41ef7f04eb87609e3d1242a8d60a63f74c9de2c2354f4101800fec74bfdf9f5f0a9e87388031551871a3923d598eac1a0c8b4f921d00bad7cf913422fe1dc97b77c798b438c0f8f235e29cb5099ee3c4be2f24f103f4578dc2ce97229ded8b1f7c23865bb8796a657548f1a8288b5719b6b0c7750b69241a51db3efbefb86df9940847d43c97d581191b56a902bf2eacedd8f9fa56c4d36827e51c83e8b9ed0b8618aac578ab45e6586149dfe77b3b793f4eb4b8e997000fb8bd0017e6a9604cb145efaa3176634c8e68d1eb471f48a89b9b546276d0dd1ea48cd133b8c9b179d91e9b606b4a31706525e5d1f90a41de981f29c0815fd96314bfea88598e0691ce1f680a7aa8e224b7b019c3a87b459f27a68158d53fc3e8efe374ce3b2230cbb6794cee4929dbef1f124bbba6de24a4284b3b7e3d53ef1273679da6016a964b240855747c2d392c4112a14ae6aa0f51ae670eae71d811880823712ddb7c2ed0e53f6d16e0272ac50ba4c8747fd1c51d5dedc27218f2b193a6badf092f20dc2ecf5bb06b30fd2e5d6ee3365fbd34b8599f89d79e352fd5fae4f90001f82d91ecf81dba22be6426fe2f3d2196dd2db597e7c02979360bfd5328426a03aec23521ba64dea0969cec1c7854149e74b8912ce844883b97ae0e6713dc158f5b22f6c98591073a22322a14dca7f4c5cc0088b8cf172c94dff3ed96775aed02e10348238ef3f8f592678f486dabe65f38780fad044a519940adb3453d681b6b53a08deb0c7e76d44a0ad417045369bde9760d05861ad62f987e6ce433b077333c29ee0a53870dc72c6414e6776a2a2a1907c9e86216e536b602fb30a562a8f090fcc02de95e9e2a3557473f0e30129e8d376733d83f744f0eb7d8e794d9ea8f644e2467d88765a20df8379bbda92c881fe33cbe7fe4e8432889ef1e7584dac09333dfee01476d4840dd6b751a9b97518b0dad1bcdecd15064ee08a6946f6413ba3f03f4bd242c065898594d8ed0350eb3c822b80406533065666ba6be6bc1b50a0fc913a6621fe21ae17bd188a7100c151e30e6d7a274bfb0abb6d681fcad23ea0f7f082b8377fee39cefe51ef990168221e6707f18a07c523ffa451624ad92de0d8c5b112adaffe413025d4fa529256872a410e7e03eb9b46e9838161a36551dd522c08c6d7823ab784ebe091bbc9b9998cf284b1aa90d26264b9862aaed9b772961e05a4eba0a6a946766ebac921554e9272e6dd532d5fc20e7d2d098b4cb59f07f2bfc519ac7d7e71dce428db0da2f65cee6379d8367808936ef91f16c1d276290f8544080f5712ce7825d3c9ecd984bc69455c94f3eefef28f29805c3538ed45403adf284871e23278c070db0bd220ec8952854db4c36eb2479351f8e2ae26e9f72ab84fb1904bccb9edad1054e76645bb7e2668ec350d66597f58d8ae50c8fce49e86cfa222d721f205764ae0a703d2465ee0cf1124f461ff3567e7b09d7500ce9d37d97ec06bedde9b133c3c3efa2b104a2d11561fecd7badb56a101dfecd35bd837961340d949986eeb1155488263ce6539ce8e786ed6c2b25219d943eaa1935e404d6507a2c177a587d240904bf67e01dc730754f15d5bec4218d93592d8eac1d7eccbebac8f376570d7f43b36928d25613d5ecfdb7ba358ad5791126ecc1b615109e40e7f8865c1baa2c0159794732b8facc6dff42c1b3327c82547f6117bc55a5d62a75839b505301715b76451451e72a0b8c302395530d224297df7abeee4049642358109f357a1c05eb126566a2bb6bbf3e5cfb24e0d71996b3e6442574e3508b4cd437a82b92e1f23184c54ce2cc90cc0c76dedc20e01522eef0059fcc8eee32c74ca60b11e6ae37f809d1ba97ba498ea997033146e4c081f170602af5c1f8c276679806586546329cea0dfa587739d107e3acf722e4141686610e770a30cc784323c4dbc9546a992cda5346e6e0e64bc69747cf8ee3a5841e20b2649f0786423ab4f0973d5bf3281eea7fda18b67eae78b24b5f0a187d3412f333d41b126837807d0301c40c40e2d950edd8371f126e383978ecdb70a507d45e8352c9983d07fe610bd05a3ae30239b6707ac83e1dfff89bf0ccd59f33818bb41cc6f1ef6f499504a7d4dce2e2e225020658d4db29f67a0489ba3ccf8e864839e54d5e20f0a34d2d7a72ac3f48cdc359142e667c95983b93c95d5b087a76f2478db8939e72333d916d979d9d44152eb0ec7f9ebfefd0d12873e0d28426d45fab489d5bb521060c90b358bc76dd67797dd996e00a916f111c5d2bd12b1c1a09208b101c42d543d2d7748438e460f314d76f9b3391150090a315a918344f980fcd50960c376b75fc970ae949c3c2ec7eabd803ed91910664f65387a8aca155fbd22abaa90ba07d83cd220f38463df1da36ad30e31ea2152d0e7861678a64f4408423047d88ea608a10cf365e8cd63540ba18c18515c91ff5314a87ed5140124959bb1168127bda655eac984925f63a45065afbfd94967a848716fa09060cea717c16b6c69d87ab8dc3abfb5fcc88b506324716b895978f88ccf20f3745a32d0362e0efce8e0a7f7d16f4a191f9261ff53617d2764c07340fd0f2e611b06df78c9270cfad3a128506237218106ca7df72e7d6b8f8de8cacf0ab891a76951955cf9055b607709477c072141d55bcd863c320701b731372999bdd360d2e57b7a604172409c367b2049ea1910e94916cb26db0ad3197db315b439c5604d38f269585fddd03e6e08ce86a75bcb49fd4b7a6aa1a62a79333a2a247108e7bc3ffc9a337eca1616438a00999b5d6a4a230303b34d5cc2812bd494853440395d99d54b59fcb8c0930b273c8d09711f2862fe3691cb6073f2d7220f68434c65252d6f70a8d0ab30833fc4c2a0000384e4842432dae1ff6fcb0a00f37710e247f17cac10e0712875aa2c2db37245efbb36986923c0ad0f20856f0b965f5417157cdf7b8ae29cbf0afd6cfb3f620ed833e6c45771ad029a0fdeb87c0c0e28918324e5b452933b4dc104791e4d66ba6325207ec021d077e560f9cd7fcc270e53356b27f0ad735a2daf94117e2a5357213442650568e8451bb6a3cc75ab4cce6f8e8d7704fcd6d93973c6fc9a31a04c53c8f4674a272209d8ae39677730c66b8dd49918676543bde89ed028a57a79d4aba36b14ccd6539cc1e739e7972c6f28f8340191fce4a24e32ed209f4f1e8560525c52db47f61b7116d897b2d473416edc853865fffc0ce214530f628785424ccb5d1b320b2ce8ea7c463310774fdc215b57886f5d5a297f3372a4995e00165716a6d8edfecc475d60fb264406e2041756e397d139a7464d919b9db3c727327992231dcd353a63f6ce6b0a481778610874de09530dfbb066c03bf98dab8919abb7ee296c22752133c8d4e8364a5648f4b8b29af310195866faa0406e5175fe3de9adb7273300d32494baad06ba907b9582fc2af144b78a7517c63e3ec9673f95b2b3b399ccc8afe95c32112ebaceb9fc94d841650cc4e4ef3882d98fed2906524cb826777ea24e25bcef06fa9d7f4652a3f9f50869dfcea5765548f41e619e5b2692bd90caf6c6d5f3663aec945525081f62ec1d9b2e41599ee35083113d8deb5b6ecaa11b64c5936b84b6faabba249d838d9f53e7fae239359bb56143c00c396cb3eb05d7733577bff17af14cde807c1af8cc8260c00585e1f9437a631c22409732bd8cd193875fdabcf115b63e4febb094b0cce5fc92513c7b0be46d8f6c2936562ef2d617613ecf2029171339e6846aa144c48b92285acdf3e9c63fcc7b9f033849a2e75562026d50e5fd211c56ae2df7fea6a3135a6f1250cd0c35dde4268d895f8dbe5e736db13c6174537c0ab5aa0667f1d5966c29a08b591fb99e55eb7a5c8490db9314f4b1ae0ec77bf0a6cc1bd02351e451c6909078d0ac96c8b7f798e8a052cac50435683469fc548aa6b1c690fd737a97d002cd8bfbd57d24026257e2fdee993b642e6dda047f031e571a9244ec485bdd321dc06b87b1658695b8c2c96999619d9b0a01ff315a0db36e669a6149fd4d0eebf4b42dce41ed2633481d13825496128c3a05d80b4ba914b043c04d7e05b07404ee09286924f462c3ea4d867e23959a879f598568400d5d8c61a585a01450f8f4ec13e8cd23b7f2a454a699f19c40c591dc4bd8110d2807031611509639bc46fca00ff0f13b0f29150630e9746b40c91c9e2a461754e1051819d6c8e818e9fb1a58017a11a0f35b8508089e16eb3c305ce13e007757012c2903189317ab408b0f790d0793c93678250fadef3b0b9139c8623e76bc84e633611177a5dacfb366d9e156e6ac7e0984358ad944b97997f574963c66b746bdd45c83bd89f2444a3b3d98a0e1276b1041b4a2780b697f5a23d2e7a8c5095e5563cdea1d50ae3e55e4ba59cd804f146e890c286129be765197c002666e9b329fb57794ab38bcde3a4390334e974e79556106cfc5231cfa07aa63b8ed06a1fc5d33a0828a008bf719104b6889e09f9b33387f491c8fdd6eba99035fc252f724aebc2e770e596450244b7c53e4ed6f785182f2bf7b0166079df55c9c1b692a938ba3078768a13857a4da4b9c01252bf0243ed078e0f6bd47d5f4b4cb7bae44eb8121b995c9473309956bcb592450ee931031a624cca429fb981712eaa9e6c7a069616e2a975a3cb9a3975e2cb92a2629539b612a729f151eae0785ef24d8e432af59420c849c3c2b614390e5debabaaff5d4e99ce5b4eb4e3602b76c9db702094cb20f51a60fc649c2918722c5b306c7d1f7977041cf25f9db601ded3c8068da69b98ea4062468061548157dc420a7fb018f1dfd81093ff4599023b2170aa2711775dea582509b6151b803b612da97f292b79352a83e1c999ea92bd4a9ddf21f388841f3ae7b69fd01a17a36152068a28a55b9c94e0149e131db5c5a46c2eaaf365dcd7dbfe0f85db0a64d225c583f7047c40d8ed239887fb800fc750537248cd01cdb563ebd97662d368f4880c39ab7711c4f126663260df2af1d0e56747c41558f476eab0f3f6b5c732323cc47dfd94f59a5a79a842a74ef1454334b6c1482cd610d9f86f5c6e7abec8266dbea59833e911551e2df6905c764b0cec0da08350368db64f8e843ba55026cc692b0174265796d69e80e1e0c97ae3bcb3fa7f7e650e300b62a74d9dd85f56a1f01f7eef06a1f8977f3f7da47b6e13e0988d4390007f4033271ce6fa675aa8cebc0340e8065a40ddbae49d2987138dd1ac9dfdff67d02e6968d1ad167e34a3a9d1f536b9904eb0760b023c859a96c505b8a87543ce11d5173cc11105d60ba27be2b0df97ff2e6278129cbacadbbabf340029db4738ed5dd557c0b5d40cc97ce88802cb5b7265be908d956df8a0892141634eb6ba194335132cb5891378f5c25021ee8e28a76a1d3754001907527d5eac59ab13e935ebde97079c894ba6db9b96abb0fd4b2faee74122433a778023a19f50d53ed98973eefa30d3f9072d96c3b6eaa2450aecd048852bbd32e50f1d88c8213edab271b0b3f85eccbf3a5b11865691abc9e9e87be3d47a130ebe6c2137cee1496c863912bbbd1600e85fd67acdc3a1688e71de80b0da9df5bb6b3b532599824adc4bac0c2fc5dc5723fc49f10e2bc2ceb043a1d0b01267b221f9eb89d0db4e8d3bd79c913a3d05f60537b207cdad9e78204c4a05ebd4780ca9cde6a8ddd26e717bf24bdd8455b5a6bbc5ea2e529b9c60422f0e6ec3b812c8a35814ac0e701cea760f39e063d0cc4d9cffc6403ab2c6d8c641eee03bf90dd4f38534f326008f9e1c11564056a2d13f527253c41eeac055964a98321ecaec0e80f02d0a7c188b29a587fbf6551011fe7057142c4781f1bfe6c68c9a3028eefb45ce383fca6862f2684bd5c2ae09eb85ffe2c61c99d240a59cab8451050a347ba263b101efbf787e33c3c69ab5fb3d66aa3459be07127ddc98f1996c511de64d9b5217ad06552f53cb25040ca845cb5f561fffa40e9cf835d0a6b410e3b5c831e2ee4f5d1e15ebef4a760abb2fab8ef9b8489a210bee4e54b40a654b0461d10d155d52f7b345d8b3a640538de062e4f1274e84982e79484cab84a0b13b8a8f1f2231426da79300002a74cc2a3802dcb5849911730ae3b9688808aa70d4b6931d69a2dbeb129facd618ba77fa83ce117089bc2f035c63d59f03ac4a688763e12ebbc310ace476eb1ab0571579554fff722045af8f543377da016506551112eb1b94d786c52e7ad63938376aaddcf15f65a02e42158ee166184a57d30c256569f9efd873e22c1ac689cae4f9e3dae44a874d6f51d7fd4d7a2d3cff16ddc93b2877b50ce6ad6f67d8d11278ed3a7938a1e3da934a64fac4410fd1d7c1919d37fa184df53f9fb667f588fc58f994aba5069adcfa83d574754346f8740399a91d8612f3daa841717d22fcb42baae4d3ed133f0afb40aa383f81750cef7f6d1b1d3f2a7f1aad8f74778e6c764fc43d296e354cecbba63a4e1f8e97ce02a9d552c862bd1f27d8f4eff2113d945af2db0e8b8b7a78ba74281c4a03b15600c11117eea28ecab86043295cca0d461bc950761c9a042f4cf29a01406834e90e714d401008115953122f841672eb37b9114a2ccdfb8e381e7bf81fbfc5e03724d15dec1784f8b2571b5e9fb59e740531db04f5c7a3a306306c6af3ab799a1915b163ff75e8bd63895ff03f627f3a34f490d47fd47cff27fdd13e18d9e357346c8c2ca60a1d5d0e9880bfa42bea37fa7ac85c0098bf49e58ec436028461747a7df5cc1b37dcdd1b40d3a302996eb1a0716b66bfc08cdcf6e708ccf840b50dd1451ce72d29360d8be134fc71f35dfbf7816a1e3fccd6e33cd0ddb21b0334cc8249c4e8a69bc925bed96bd2641ad22963dafb06f0d9e36985c62a01fa725bd54d32b109b6d04d6ee936f1454c6b983ae6201675f7b8e4a657c38f0dfa199a09d057d7997dc7c2dbec3d52dbe65b7d857f117b9553f09891981b51b790a8ab9b8a6f40ef5ad95fe9d7bf39b7d1b3f34a8e9685e01165d853f9a78558a4c3ac34a3e7a9df320908dde1f8fbc3866d7c55bed567f43e915ff958bc421cfc072aaf4fddd795cfc24b71b7caca4fc9341f1f22fdbf9ee3c1c5ce00d3ecb77ea1b1c11d84f9788c820480ce358a8de86aa1b35395d402a041e45dcf1a0da81cb17ba48aa03808ccb1c0ce49db6929554a27d53e5f47a1589a2af817fb87ad625dd835f1d6d8de73e890c747ad56548241094fb9a0be87b8bdad13e5fbdf94d68ede5d8a8003de66b8d30818272099010a789beb3944dd48a381a9b4e62b30d700f4c644abb64ec226e1e4b8bd1f98322a19e1542a269ce5d40a7e521b9a6464a4aaf131d5ce36b7d2060ec4b371e47c08751790798d875150dbdd7ca2e923c81718cc1df584ab7e03be7aa687041ff21112d3bc5ce7ad5adbcde3973981626a2b0c95ec65ed7f0b80858edadd076a9c33b8bad9c1a5a52bd30be2a461944170940441780fb49d78f308502d14db389dd3b51739235700106fb540a932cbfa36f347a32382918e7c93ccfdd853e3776bfa9d2b3573d52b642058bbbb799a443fe096ea2a30f4d3532fdcb247e7dbf701ba56fbce199aa1af76b724ddbaf65f0afe2706a3df95a8d1cc261fd193dfc6aa4793a0ee424d54ff2f5ef9108449e11f2fd514d9886e256378150d4497349712b68c68e47e82982cc83b0e2238a64bd944da069bba84052639c555e9d156edd75f45376318689c25f43a2430f45a471a7bc55bf4fe5e6c13e2663a4854e9cbcc6f73b9d49a6d18b60a483db9a6ebf05d7836c757ac4ec7288ebd65907365f0afca3dfb0fc34b12dc3079397412ccfe49292fe1ab312f2ec9837330cd52d985f80ae18d88d6f8d32820d8830c9015fb963ab47ec855f751bfe5ba31e05ee45cd6d2d89abd82046958ec56ea28150012972937dd73f20380fb4697307ce219845bebc3d3be58dfc2501deeb421891c95078e5da31d446f049b67a0f72869a900b26b9ff1b78507406308a52781a6d164e8f40dfd007c7012d15b17eb894a2cc8f48d32b6d969a3505b6a9e26387561ffbf344fd98f16a88fde5b3a6c5e906d9695478cb5fdc43128043851b937df0d70a6f0fdc2fe302c2f7e5e8a9516823f0aa8af5cb649f3b0cfb4126dbb7a8e5d3df298f75fdebfd831d65fb4ebe0436f6509f7c837bdd4b087771be02c535110af42333bf2d46f290577c947d0eeabc046c27b72c1c94ab3da97e2e7d9339dbb28098d0a0253abcb0d2da1223958a9583e948163835bba0b51d99ef13526f4666b6a67c05432d461aba6ace702c86ba7bd98b718e79150b1d53e5c081e2ae4f390e698a702836a5cd80dbcf5ff734ba0a153066d2d8e4a069f4ba491cdb4db0ade44654156756d965aa94b7254e0216443dba94230d51546a2912028f9f0ba1f25d6d3c52629bbc5d2e469b4e12b5936f40d9a8ba83514b044715863e40fd4bacce7a9b0e0190211ea60825d097d31c12d8a4568787855e5e35e93b1abaf394cb5e76bbcf5cb1c149a836e7e967854e42fbdb1bb2c37989d59f5f28b4f162745b627e534ee6c658ab994798dfd97d16f5394a0ecb9760401f3a3ca523687b2cb1530614c96848326db84ebe18eef8e8fb564266f4ce62baebc383d37aed29180916ce57cf2a041d09afa35201166f04dfd4f31e98a55a1dae3190b94e1d021a7009e981bf7d6ba1c40c48bbcbbdc46113f51cba3db39464fd77a58e8359facb9027c9a864f83fcc1d2bea216e7c08f02580474bdd3f9c97eddcef4ee17dad1dfb34e92ceb1c324adbdcfbad6304d9e0c0af1fbde7d20eb34d1bac29227dcad8329548cec025557aa0b2bdab02c3d21464c876089c605a44347d4eddc3a8de819816e9f452975e2fc01ef4d5c68ae6709de32521a513266baf2f78db835bcabdd1f58abcaf0210ddbcd29acf6e131b7e1defcbf7815c6264fd27863f10cf830252a9dfe289890738b8897c23f7fc21585d58e24692793b60e45def6036d8246e0cd2d117e5dc309effea15900a54e858cdde54694c4d09c0a52a5ea3f4aecb974b9c7735c00fe18a4b7323253de6b2392cc952530dc4f50b873ff0396a0c5577528c7c7176f8afcd70cec75269e3abb7a4041e5dd2dbb74c38a443752b1e51e0ebc2e4a664e287ca641edf35b7933c4c84221ea1f692c205d548c520b273e8b5cad2f7707163d6df4a7e043caecbf9282487af3538c3d5abf5ce9d0be529eb5c571a87d5276d525c963f9ea694b4cab9ae3ab0a4d21705facfc9ae90b31722ee44fa6b29f11a7f6b880f3843a0de0476bca01cb2002f7e9e1792038db94f8e2fc25d2019c4e8ff645da98bcaaca08340841420aa10895241a9b3264d3560a4a2e18f59c66d414881d67d0a3a1b95ac9ad678f1ab27eebf4e5cc51b0c11780bee7e5029e0f6652c70131ceb58b9ab68c8af9426c81794cf322c04ff9a4a15b782e8838ab0af1a06fd75f3abc873f77c01b3aec80c333c71e197c811ea6097bdc95cc0095616de75e2b897596aa8d175a0b5398212f21a9d56de5110f99f3e9bf98ee8cd8188ec9dec83a9cc50b4f3982e90b0fd836185c038d90531003e932ec12c662cad43a5d89734431d4422ac0ffe8b125d40545cf74df0eba0f07bfe9df1e5e12ca2eaf0b4d7751e644e213b2740524cb4985778cfecae501721b934e6804426d0605d6a8894531753b4dd0d6591774790e0771eea7c570bd30907eeeea4da12e0a4480dc614c247da12b03df2f9e2961c21acf001d564a7d9797aa20a7e36b9c5d7941250b508d369ef2c02300a8e010d6e689df5396d57cc3fe99a134b4168afaf9540a1d637fcee542a01290862a2a0e3463dc29b5888a922c574bb442f04340a42ce3ded625d4b35620c04050330735664ec06722cae036a925ceca9ed9e3b224bbd33ae59fdad62709b26af56981f5d377e039dbe381e197a11b34e0dbae0d3549627400b9ea55fa3a5cf8e992c0b788cc5a5cea79f3702c4c76ff6e8382a564535711bb14146dbca0239325ec972bfb59c1b203367e0199cd16b98e53c402d905217224c52df32082a20a12a73ea2c86a7f97dee0d0a02413348c0b12fb912ff05d9a4d05f28422071fbd2f183ca31e49f2d286254fee1fd786bd504fc3bdee930f209a82099e098f504dc94a9ce1d45ed9f37889c5f5440457adc48b801a524a13a043e330926773e547ad47484f3abc84f9ed2a375ea894e921e0295c53c2d749e62ec58646bc99a69b5a1df57565db29c64c15033079363b42fb368e2ce507d33b6f7b6e938581ac0ee46cbdd2b08773ee3dc9506044ed2c2cc3019571a9c9826200b519ee767e0c8d3db11359481003419db0cb33567b066db3e2b0d0267f88aa793fba3d5be42f8d930ca6d25918e9557934a03dfa0d716087c32bb90809d736f27c0e49032a4babe9a092e02664ccf164783151bffbbaf4a13cba6d1e6947593dfd8436db0fc5ada3308436774300a53a47a7f78ecd070c49d0748a9a71387034b1e1171b219a1f3d825888e749c50bfb211c9c31f855537a9301b885fd407a83e41287f8198fe86fdd11c40c551bce9280086ca316c0ae730d3eae1b62a26d83b5a3da38863b81e148be20950cf8b8ff2a623cb5a859f8d4a7c566c9ea4c811b78ae55aa2424aefcc1168ef8af0c6842f73eefa3199a12a1302b15642271a1c3b4ad47a0212505dcf25a96104450300d418b2b074b15c71f0b909b1282ed20ed63ff888f17903331754623f27d323ec9a3f506645363e07db68df0bec1b09f069791710f5512cc31a205dea0c3eef85f016e57b153bfe988ffd279ea9d7a50714bbb025753c870caded87076466abc98bc7c8eb46a1ce7c9f20dcdfc454aa3b39448021eefb13e88340d4794d0d860f353f6e3802bf531710a7d48905c6e5f0111843ff8e325664d5b5d459e674389109f60bd203cb68b6628893ed03a23f00bdb1cb1d8f0057b8c51eeeb32f22b00ac16952d4edb3e9ff7157054255b5cbd640b1ccdc0f0fa18f5e7cde0d5878af6587e83371f01be0d0628b518e32b1565301d6014408227535ba2acc2590aa205dd434fc2606268407ab0305045dd9473d09c9eae53b8b836df2475550b913a39af71d7434677176441a23037183921643fb46d439f480e8588f324d19c8276f20fbf51108c51adfe7df8a2bb19d4a2001354319110da1e65410fba98b09bc7eb91cc863dace4748986a1f3adc7e9ed1890e1e4e6a77cb2f1fca1918a750ff75b132b71fa5fcd0c136b0c6f0c8285b598a0f37ed21a4b3193fb76032d595819fae35d521dc9a6d4feb9e69113517ef56d6541dc4872e7f3b5b546ca464f8eaacdd32fcdf6b40ebd2431c1dd26b8c55741afc1f91fa5779830a236602cd31f0fbbc8d6236a0e8bb08238e6f078f0547f80c6bff3d7078dd7dba6e78963203c33efc3f024698ff1f955fffafcc82df2546baae5c492ee0840a58a6b33edcf8b1585678697362f37cd7c8451f7af066094c137b4f97dec6743cd5bec4b94049233b19fe7fe2579c542e546b00fbf733d746a8070d1900401f82eee8b411cd75002560aad5143d7120253381a0418ae57f3880aaf44605c45624304511df49a9e27906a1cde327d1231432a0366b4b85ca96b5d970224071530435bf8e84e20dd4f32ec78f2b5697b4739edb876022cb30b8c6b6d65af35603dab5973b2ff5399a4f2bdd23d02b2bc77f544c99efd151e39d2316c6b291f6aec76950c89f084d390fa500c980ef8605859256130192fcfd22491870b4c4eb68d520492a6e5459aaa8b6fdbe7f5d49ec4f97b7b82bec1680a10399ff038f7e92db2ad6459584e0896589410e651c557464b2e2c7fe7f6b090687297e263ce6490faf290fe7d9e50e24eaa37f7e15489571484d34cb4863924ad03226822bd97b72d045cb8871ea892634314bb6e916ff45599f525fc40a5d8e47a3c2ad2b80ea831368ecadf054a53ee9d34a472b5f33daabda04d3836a9a04b616b817a9a86581603c0bf0a213425904e780570f48240bd177c0972d42b97aae4af6e53b5777fa018a63ab0879034a5d80c80ad63f2148d7aa178f92106228a4573d31a4ab4bcda05d09deb1d79fe1b8b82891e81692c618cb126bcc0d586c697b5425b994f020b33840ff825dbdf0eb5fad1bca1126b9ae49989658c25472822849db549e3e867720f276d2902b180785dea6f601675a82a77c6edcd0685cb1682b36877f3a2df87ae60e8137692e92718e6329941614ac4b634d1016f2f49fcdaae0aae00a017eb6e8e3156f9f05d8c369c52e95ad1beb817874390b84e0b88ac5e4324f846b8a4489012986a920064b51b70d24448dc7e549c2243de7b48f086c79b0a93079f14fc04ad73c5fc080e7b7f032cefbecbe4637930fdd36fbd02d415711ea7f583b956a593b1ce5db14eaf04c51a131d4960b6acf47c7c01eeaf8c9c42be920500fa154eb4d8098e07a07f1a5e7c3301a802242f116aa0869678041573592d62d3bb0e15ff2c95d8a67f76d0657f3c7e13552d033b87156de48d12c42639e89f02c042603546efcbbd66d5369e8ee743631d1e26af6641a62572a267ab7eed174ebc8e0d09f29a4b1a6233a50556a8795dd844c081e10db3de9b7524695b382aabb218ad3f13d28882cc04ea4b54fa241fd47d7d49ad1de88ceee1bb8e628dd72fb4d212e3531215bdad589444f0ad15bd65421e89052e8b5a95895b91bb0fd8cffd00ff4ce618a82294bd9cfe04f54186196b51a6f4c1626e299d45c2c3955d8d497ee84f24b08e574021406febb33d2f9078f4c0abb6e2c457afbc3d348d04b8afd75e722106a5188a75ed47bd6eb804d656318d4338d1ae04d01315615295889d8eb08eb32462e2b8bd3aee4277d90293904534c6fc91e03d6799f7233fd109df92ae336002565fdc27204aadd4ccfe6472d8cb98d25c1035972aad3e1c8f42caefab8c0b0e213b98154622a92eda8a84149a19bbca49767472b8cd5a496c6690a8012ee13f02eef89c0a3aa41c02fdfafe02779c0d63d3905fc26acbed0ee69d314c95f75ae1c2b6ec9e2998b4e8fca3a18018b6da969d3695c9f0607cb3501a74fe2a5a14e44c52696fe4c28863f134ac47c04610fab4e645c5f34bdbe805e2daca424c9006896272da44ca8e8dda1f960b6dcdb804a3b346e38c0137a006ebbcbea498a45bc8d3273a707cd339a0ba698e9af0ec8c8f4c8386956eff6d3132fd4084b6004fc0c775a30292c939b2fecd27837ad5be12460d5796edc61d18280784279d1376b75943a9b9c06d6f11e02836564c858309ace87c6d19cfa94f89d920489903a623e7de5db7ddf87a1472c7db56c305ce540768fefbbd200c7c55dd5de40b64657c0395950b768ca638f5ae06c09a4eebd8883a5a055f2fc4cde2618ae5a051c9383f146c868afd74ab9ae1ba05c6a360d4a339bcd6613b58d09b82ea9fec689b03bf20e710bf829b95d58b25e5152ddc0f894d92b6092e97935f1538695117a52235c72c707af2eccf7e5fcf5332d19a563ec2c0566414d10213fd16b56932a413e0f6f3d5e35cf0e1fc08991c3750766e083be207515dd2e09a4d339ed06f7e487a335d6f8802d45b0ba4dfac805c4998a281271224eb5602cc2e6ca90fb4f0523a2185241b05d91168b8e6e749430b8774dc36263059e75089ee2eac06e35ffb4aa54c9fe55b8a396a2cc23827ac038bc7a2cea161471325dad3b8ab8e28e6f062490c4254ab420401cdc7a3c12e765535ebc5d790951814abc3cf2769f44af85bf65a43b7ed363b4e53c4d0be8c45b276de0a2f8d08e21d8456f54fba7d5c44cb661a052723d5fae172e303859d6b078c05a455baf54b414362efb8db83fdaea1f286ecc0c2c92d0431472521be487e2a260eb2d280c66fdbd1e9f71f2801cef0abdfe73521caa145f6f29deb3c17f7bcd26012b1b90e7ad786b84d02720e542aef83e58bc93553531a1203dee67505b9624daa7f49de73b93bfb80ccb2497c78b2746c05d26a86ce5955f7cfa27307a751029236e3a7b88e7378142ec17070c32df99f351db33a636582fcfbe7f801fa43b6d9bf3a0d8c00ab89e201c47d97e62b1ee6aadd762607a8f9c10fb14c7f180896f7cd019fedb7abe54c5711794b377bd9f3905eebc229983d0cfac46a14dddfc18312cc7cf86a1c283e73856c8ee4bd04a05b33763fed8a1026921d14d8b91ca1f841593a6a3c17f460bae1592a913f7215f65c693af0bfb21944d94fe51830c5a5acb8d3e42134ef9a8dd045035d75ba25d26170d36073b411d9f6c35fe32b1e7a7ad2da3f73c0873c426c7d599a2455b402c7f404564190e3aaa16d8e01fe6174de21ecc641e9d586f4dcbc5440e0bb0c47fff83cbf0fe53e9549e31067aefda7f73c417622638d664960d2c9c1c2ada7214037b4cf9000e289bde034437339272d2d4985d75cbd19a3705ffe806a1df361194d039a16525b4b919a9848d2100013891c713c9467b99c647716f0a5e69e007066aa600b038bb8a5777ad7471ee70226371a38547723cb14b24f2856f8dfc01f24b3ea592b84997a7ae38fd888eec0324ffca6aa597552119b7887b8684f4453a7e4b915e21f8b58d03e0fa96194a55fb97dca95af2c0ddda0f99de4420a8ca48e19b14bb0db46bc1289b5709944c4dd785a3c5082184332959f1b987ba9539a145cd7cc8807630ef1e53ff204eb73d618f43eaed889274b92744970e7a417fa58af339ea441a064b48eaceb4e251aa44d6bfd0c4e740524844d0608aab423fa1943bc9432cb31e6fbcddaaa12d78c555c79826428d32b1f651ad3a7d5d9e74ea67906a9f747a4916731539c6b8cdd03ad1c1fa62be2461673a84db928acf54bdf4190edc4a7a183f987401f87581b4aed641774c6834f23bf5994063b48e9e7672a2e44f16cd57fede42598e9034983d16cfa84bd761e43977426476fc6f3ee646683f1570d6957485cc6167343302abbf7a55d4adfa6a0680b9823222dac8a2dcbdd240a78e3fa7f7524e824a1a7ee2286354c903938aca286c437d932bb61f3082d0dc5481dc946eb066a45f350ed824e92bf4fea008ce4971f66d4a3099d42810510f4c12bb7ecb65dce9ebd80b7b31185448171714ab7f88e886d577a2fca157a77f7a18e7c1a9cf52b3c024121f6099c02a2b5fad60a528deb902e424a7985c8d1687910d9c3096145f8c8a367fc1203f96941f168bf8e1f5d101581a2cd56bfcbb127040a6b94bf834e2b0288901e0ce3886d3744ee6a42a7c4bb769c63db1c283379a55890b8c28e500a5ba1d08e235ba7a7eea4473d8784820122994d7b5b96430d9c6e1a817e4be040b239eea44a8a5925e3837717546c9595ff41f09dd77d844cfe5b12ccc57dcc3d3befc5e6590442defe4da9346ee1f23bfad8feddc251377ae4363752b86f2faac049546fafd231bdfff5cec5862ef0b126494c6341903e9af7d7cc319de6aa78464b829fd742d29091b19ec328c32d832c224a136d21c637cb528343b5aa21ec46a06f7fe34cda7766be0f5682ee2da4c5b2a90005e97ba9e0a800e320dff108795b71c843f6c26db4f72094af348f6aa424a9637bf8e3ac21727c47665574fcaad35c5c46c59345da87a3cd1470928eadea77b8aa7189a4ebb0927d7ba4d084293f8c9c4f54480298398ab93049dc9bfb18f38d21c3b999749746224e7952c2d68eb96d3ec420268bde4a7a51b519be579e31d540a2d7efd1497cc9a2eb239e8d747c9a7da6f25c5d05a9b680664732bb3fb41979335263158f5c359d8c0f0106d14ed200bb474d845c875d770d2eb50703225896756bed19e7ee27c29cd747c383bfd0cd4ccd67399b51605e6334fcb1f43d6090288f8df80093e815d66cfa94fdb769048727ac058ca4eb00d99ebe787978eaeb6a09dbb10b419d50d7bd3ae6ca54dc17cfc2065206cc1cbaafc0707cbafa6ecade68c6c7820191b2e851d1ed68f12f9264e7e4b458010a12550b81e2e800d696865eb9b380b276680fbec22bdde2f29ea2bd9c9a25357e9f652cab81c545c8b1ed4045b9ab3600992c23eb0de03c8c3bb7e58d28f2049e6b15463eb3ba36753fa44ac4520c1a036ba5b7043a833dd5bf3f253d17d34dc2c7f0873ba68631afa15d5862f43a3cbc68fd9484cd16698b590b7f7a4010e02d1387ec6d42fe125c643d3e3be19aefa52900254433a17c3667bf07967a3ac1c6a90c3df833af3ec460206f60e896bf9c2654b8313eeebc1278485b5316a348a63582d0d79fc74e5cb21d92375b2366687b9f18f1fb1f506060a625871e6244e77a2b916212c4339f1cccb821afeb562947bf97cd5a963c8239f9ecd75443f6912fde7442e4ae37e9c8fa7891f15c88717cbd32895dec21c7110454ed61e4fe87618ad833f41422692e542075fab258e489cdb9ed4e55ab12bbf115a96d08296f4a862169f8b20801c24e8a2303109d91845599b62d9d8f6bee8f6bbb5c425fe27148bd7dcd62a8cdb4407c0cce7588a14791e9cd3f645b8d6c0e11929847444ff8e054e275dad318fca5bf0067e0862f2032dd53969d4c91d8179baa2972a09aa562fdbbcf2b2386ea5803e9070752116308b1e710a9f4564ab9c608cf8f862600fcec38eef27372fd6395c8545eaad829699f2a6cac435a59b42a0cc28474e993604960f0371953286eb49b4640ab3f6be3a1919ea754e5abd0513faa4e22e34dc811256f168a496e8dc89b91442d25d25d13b540b75971aa07c286e10cfe31043d65219769d1cffe69fd0a9c2c439f15da71a692a6222eaa4085aa0f128f4e32bae3e20a73e837414e5110cb626ec915381c8ad5aedbeb87588b2ebc446649499c65552fbff24724dd96184a9f97f65c8e91cd8631806412e06ff9130e636a73e919c6da2dcc92f3b21065ed7896fdea7c167f218ff91dffc09402cb614e801776da9522e9e78b4a0386db33ba702a8383b27f4420a106c22ab0a551240fba6589d295100aeceb3c2b435e45588ed6570282d26a4ebb981584c8f7a82263d4e91849661671116b4fb4e20066d66a8143ea00fbd73ee01640ce5e09d54993d8ca9a69156d39c8629a90bf1395110e9e91f794e6277b107c9169ef4a06d592d6ebd1d9e14a465452bd11c919e52fdb5ca724f974dd781319418b7d74df7d2aefc3df2210568dbd3b7964ba30cd279ca826a9294d48f9c3862864eb5d5c3e7305e47cb844d5605a97b59d0ce1b0a3ddef3dfc6cb8cd785e5592636d7b3405dcfff16a96a736a7b5750fcae3ad2f26c01633a915257a57fef105f619ebeb5becaa23ca7d9dae34df3561cdae32841efb9f05661ea5f8ac34f8021f0a917bf25f89e22ff033dbedece6b6d5b578b775fa2443df448ab2e6fef03583951e0b382cb5d6bd934f9eb77818143fba4ed01e6ea3572628fd825dc41bd00f856fc891ed5a85a4048a1a40ec72b81c02b6761bc8401a6468ebdf51bd733c9083c1ef3dbdc86f6e23c54e2d96a1ce06ef8c97e1fbebb70698160a534c02ad9a21bf441389e8a70e419c35f51888bd2aec16d6d7b7516f2a366cbcec52f040097261f994af3f881d3bc81eebc9aee759be1b918c30f9713800ce25577086e0af2151c6909aeef48b1c2b204a3a8484f8c5139910dbc5c4de72589e5a8fa496814f6dad7cc74fa022152a3f87ecec0043ef2b79bdca31dcb4894366759b397ec43290a664f374d9dd197a8b33712e9b3d782c4aee26df6097f0ab3a5f661686cfeecca42eb684cc1a86540f8c6aeff024f8a657f848a0626552f5aa86ddf03f9d833812ee331a53f3b19f6fcbf121a87b4f30ee4fa66744b923b3e75cd7aaf6f076e7d908efecdfb95ef812acb57483a4ee2f4c9a9a9b34d08641ea54003222875f6f2c0434584d9dab46450bd5e2d8a593c37a9a2ecb34991ff5ba3ce99e01223a9ca80907b74626a6c3cb618c392bd3fa601f6260423b8dc52a380bd2d431d645c775943da4ea55da26d7584f3c662c8362dc10055e255b5f62e6b0d2916c4f761e3cb10cc197a031b65607ad735b022a7da124afa5fb3aeee146be9618ddcb2f255b348ab4c8c50f50b7ce3a0ed215faf0722cf94de8ea0407a982677695d1d09a6a7200b389ec20741138152fd9d3fe0b7a35b6046564e95b41ddd6b4bd5226883238fa1f9796924add428a83525e2bec844ecdee5b33daccd55eb7e22f8f692169705670671a0d3c17938aed872e54e7a149a12f93797e285d2e0df11d54083ad1fbb69825a7e341d6edd6368cb0241c658b39c8e19ebf87984387839c955af528a7f6efd4957fe0535be05fcf28a56735d939320e6b7e6fdf256aeed6a8f0acb8bd4a773b9091714a5a80ac50e259e6621f7067a9b3fbbdd8d409b7b9882fbd3edd51015a2744fba99d06a7499731bb2e869537c706a9abb999b74d74863453d1522428013a49395d582a8631d30eceb2a0a4d6c53147993f10ef32de10832ef80681376889e8125edad00855b0101b241ef8f1dbd8b073f7cf859b4d83709456a1adfc2519a59f90e3c7ccb41f3b2503f24212eed75df400a4d7ccd335bc1edb740fb903dc7081de9a5de6e6045d91e701370b91b7f9b77d51fd3b94a3c9c69d4c5d6b5e675398ab9bb48358af3924f7bc04e6c3678679931e814cc2402334b6269228dd1edb9e55974e17078d5a5c014a7740e7275467a32200640ee972dfdb076387845fd7c4d541efe683121ab428c8ab58315515736486e1e185a7a5d86fc30b0311dda9471786695e5a06823a7a5269f65df12141928f37361964881eb0802a9eccca99d861241118f95cd2be0ab06730911a236392ae88289718be29fba07824127f0dd53f085d05a64951e5baae76bcb30ca59d1d6f6817b7315425060c0feda7c9161d25835deeb363ad8cd9c4e4ccb8cd5284c8fc38c5553ac02fdeb8e3454fe53b20c567c935b48ba99b1720a271d862c78e4ccc2ed5519744382bf363cac2eb082126bc6eaf12e3093d01f95b9e12ca0a4d3f27f6dc8116ec1a610189378647e6dadefbf0e6093eb9b6c5ed6cc5decc504b567b380c22aa8adc82431f0beab5f3a6c6cbe9129ff5c2c46a267f9957ab7114b8b4e743df1534dc31d31c0d62273faeb5eaadf6f479ed33100930a763379e228b5f6142432b3ce46e10340d7747e41e19037819dffc8b595148a13e8c0eee9be98212af000cb8fe68b0b4777a0927cb195938a519e4416fc86e41e2b2b9b0a0d8091013d3e1423e96ab7b65bd5a00e634e1342661d231ba0da77ce44197f4d8e38ab8d040c21a9cadef02e0d77b4af8b3d9c32ba0b007ffa851d34eb01e119138a36ef00df89663c2f21a2e0823f91c4b68a9c4ff4d4558fb8246169ee1f05122a247019cecf39c169738061b51e253a459b84ae9860dbccf321efe36d8bb3b64eb7e6dd83b658be9c609db5b579865edc9d5f17f07a10cb90b0ea29c323a668392139f98150a70f5f79108b2a721a260fe53eb200d1f6853d8d5ad0665e413c935ad9c927b8d92fdcc0bb7f9874456b3bc58e79ad5060d1940edbe136e22fd843857220c9f51e130b415458c8beb17bc127198fd63c4b477bf5a6e1ac54233144589b79cd2af5746a431109a8b9585f9c664e5e911488ffc353ac023b1ce224dd67888861992e23b38f4cfc765f774b04db2d1383eb085c2de86574f794b227b78b8041bc76969a7bbd7079246db8253ce45b03f7916514c6702ad7bea775a56a2f344a77da8c91b5adbad8f9d0f2ccf35bc6c317b8b3298c11299bb1e14d31bd8dc8d3f6da578330880982004a76561ec7621206ebef114cb1044000b3b3c566032b7fca2a4e45b45d4001f5e44afa40bb3bf016cf83b1ee4f7d119b1f3f75b16fcd1c4f692eaac660f4c536231795da1e61da7535a15e13ead8c0ac87998472dc120839bc0bb81e9e3341068c67ff40ff739e7bf17049e1f1d5bca9b78b70b6802b988ca6bba282d184dd7baa7a3e06ea816090f16789fde939d2dc6cc8b8e4a7772b107d31a160bbd071ce4bb57bee82ea58a6a86bad30452758e21ab152761f779a5598bd2d5fc1c6b88e3de741e133b14b21ef8414ed35052a6d77c2df78c9153956d41c987e0671a5c1f569b16dfe8177d6ab02104e306605a9be9647edc1a6f94c833f17a6d857ef163d9d185c6315c8078114f230b79829128345e5b867a7922cda01375a23ead24dd3bd61d07e9215c09b05b71304fc847757ebd132dcc5e8768562e2e3f86d1d04d41a3c3b7409a8a80448e8c7524b247dfb45446fb07408a9c96d98e2944b0467364d042fe1f3623326f4d373de56fac805eacc922fc205c8d63ff6ddee45d4e18214c135266e55637599ffdc4c85ae8a1e4aec390d84c19d2a5d35ea8a09f5f58602e2b7234b2b9a23d376b4482a316d7f49ed54d04c9c8334dcce1b10af96e22f8f05e7119f4d8b9a68f483ad444f565c04cc932914f333e77e129531954f367b44969a20fcb76b078a3a9b32da8cc9655fc54a4c309b0db7fde8b5a3736b427e3d89d270b6548977d854769d24f01e86c0e0bb62ca23f6a5fba1e1450bc78c2862e8f806eeebda04eecb89efb98ab3f98905a0e8594128eb6254eac5dae65e6b945cad48b5df40de08545791714de309a3a5c2e434dea4d553ccde23123a5e4763e0f6b2ca27a920a658d8df685950dd60df37ee40aa8f74ac84d6a35852c6627735122d9bafb7d2022c4f5b05782d23391564b85e080355047e9a087052ee38b79b201674bb855f989421278a555d8d964dbb49c892b871ca4d5b03b89e095d1e4b4aefc0752eb1534dfc27fdde70c105b67712bcfa4148070d7de8f18dc90c9b96d13afd4326ee196e8574439d54cd991ccb27f9451f03f14177502703c2c7d379b29917ba6a0086077d940ad904b6a82b5dd2088be967586f8f5ea2bdd22afa25a33f11376e32754ac98b971d0cbfff5a323dc895508e134b6010ad44b10fdae0d6824a644caa294e4c298163a32a27b1922ab2893b59c49125484718b94a1242b80c49b1a5f12cb1afad9e1f5b3a51a4961ff3f0c0de80f75e060457e0cb8e070d080f15d3009871ee98619eeb8a2d261800baaeb606025294ad503c65406bfa37f757876c55a18a98801c5a7ee37cb46c266614dc5ca7944e9ba3c2a96dbaaa0065a03b44b17374fdf611e40a20f7ac1909e3ad8985d30de2d0d7401220aab1fd4bf694e6efca8b85c752dcf92813230c50e63ccd075b74c6da2e57ba058fcc36be3df7fbf4ecc8aa6c207cdb251077f10aaea66fdfca06d657851b6f06770b726c3318080024b80013afc894a4ac52b409429b8088b7776569fb9a877a2454337757e5089da30461666baaae1057336c2b579ece043d6c5bad76c45cb2260270fbf1376f82b4934a58ed936b30e9eebbd52cc922335ebc3913ee9ed4ecd4359e98031d32bc48b0401f07d08e945d3389f079d2122b41223e41c97a7e19bcdf0a43945844b3440e617505a6c4f3297a0a7ce528a2229dcaa5c28099648c53d2b344f14019bd0e2b195fd422cda7c6713443a3cf28581e0623481d003274a558126b83222ab65732402022a28d750f1075be1b0c2781e9be1fc8d40a37ffa8e5badefb6d62acdb9e00bc727396263d80197b05fc4ddfe173bdf24f1de59cab758c72087fa566885ed6602a33407056e79fe0fe55f5def26ab49c7b5746bf92bee0cdc317849e79e41f035cb97caac4b4df825601f782d77682d14d9dbfef3d9eb809fa4acfc443ea630facdf174feae80d619d93e37eaca56ddbcd4aa126af39ea784038e5410e98ceea4b8bc3b14ea452d8c903abf52a87ddc0f9aeb31757075d13ced0bf151743c4e90463ffbaf104ae9dc935670a3ac1a84f8a30a81e09d10185c35d165f8c17122b5d4a80481e2b8992eeacc47ecf31e11a3428525a9c050650e3a38b6f064f4a2d416756b3bde60aeb0187744b0dd6abfe7cf0c445fc099bbb3cd91d386d0b62d9590edc6aa3939dd18f596d4203019752609a982b3411a77db09e68ab888c971cfc2dc38c9c8dbb78a7b7c272d6cdba3d40b92e5b1f2c39e39244584e44118e4b0eb5831468b9b00f18d26d0f94d65c1f5f5bcd65dae3db7c479e96440fc9a4d3b492c2bc5026a39ad8bd18231aaa71db47d1e351514872e653647e758e6a1110199e7042f20428e1d0ead118c7fc155bcab9d04c5f7fc95349a406bd69c84cc35c33615a27852eb9874a00f7cea6b83037d825f585e1b1914e530da4da1e1e60a971e7066fe09ba7f8e4b835faa2683b022ea688a68adc541dc7f1cbf40b02ab5120fddc926f6b862a4f42fc3bb1606934c2df1544742f721123db170cf5b2f104a273333a4c615ca16c6f342b08d10dd3e3c4b6b599291ad4e07cecda0f4240b504403c59909146e112f70b35e54740364fe7e443f7eca25a189aca82f615e953d10f138b47e1f5be150dbdc3b45eefa2f7d79a9df5625da666ea593a07f9c3f0210c408bbcec2956db9e9237e0a115b378ab4a2f40f6fb7e03ff60ed5970ef46fcb50ce59e21b880519bde589ceb51b38460557c66342ad07a6b6326c7320256f305e15db9cb2a519de0f6e0c4aa96b49d4b52b28b1d86dc804f8e064cd29253ebd5e7e5f2b824e34258a8e84340ad2ec66a4c1834289e38b69fce9c2d6c25e92368fc850616bc0b11d7114e83725da97e566b87f4411ab578a16ef32b8e0e624b9e0143dc6a9c6afe50da48fb4e4863ff9d96046c4c6dca262626d3ab4f202579604f405673e5695e18f4a53e87a6408516a33167f316182496a7ddc6f3b93b02877c54e006385644690deec9e1eb82b9f95de704d50419019bb74db6b813f3cabe4995d0d74125f9f119460485fbc702697f485a7361090fef9e207ad5df6f51a50467a953fc20b057b87b01654a310f4daa0e1b6c4ed111990a01c2b633ed29a6c0c484eab40fc148d326ca7af5f940f46131552cc4f1ab1602110babf56b0b5edde505a1cd3b43a80ed54aa15bb1daa0afd04f3f98bcde198db1bb33a7d1a1f76155a38caef33e82a8733a265fd326136e0ed907d0e5cb78030065b28c9b2ad61158dd1fec4dcf7061525a5d895c07c52ad00aee6672e2c1a05be8f3a17bf5bdc592c65855ebd6a9c48318407abf6716a777840deb66da5db19f7a23611fb51c461490040d9f43eb5e7e660d6ffe4952f1f8932c62eaa6e106a51db083d33310997c84aa3ffad2cc9313817057eea37863be6f2a8c73a823e11a508c93d8e475c0c5d328a02e0c019e2110ed7ad6806d8b16b0d3f2330c00f5c84a132589d851f0b9dc7b2e66df4db4aa46f59b4e41ff4ea1e9b2d20fcbf5c9830aebd5b5902e93f8593c8e14b9656cc18840e032962d8c9edf31f3a4928f06fd81621bdb2aa1d4304c72a51624b933a1f761524706f37bbd591854968c175e63b9208df5186b88d391c024acd43e805377c5774502c8e4385665467b19413a7b2385d8aeb95abf4e4afa1f6651f54b28607a189a7ed16f772163b24cf45320b04fa44307b427822f4e33427438638fac9916dba2111e606efef04365df884fc5b5d1379c6c7beefb18504133677d4be80f7d12904bec800a0cd0abd0f44aba686d481a37633c64140fe32a96250991e9daa1c5d2632220bfd77995c38f984a3a66518e104a35d0414f3ef1ec2646cd57111cb28f60f4fed6d9ec2aee6dc992fb03b67ded5fa272d56ce86c99a7d2f0b6e37377d3bd92945c54e4fb22f334e95992e1ac2356a6d2e3afd3a58553b0b1081e36e7855c905546485dc8fea7bfe71b4de73f6e8e9d51dcd59c7e51c2facba2f58308cbc00bd608e93ed74c6b52b0708c4f63e857767050324614709ba463b58251273052eb912d17b247c892d17220cbb950a933bcb230ef25b3760c27563cbf26436e641e571ffaeffe3070c4900df65e2418cd74fc10856662cf5fdc4063069cea04e6d12532dc606729c6aeb7c19c3174164fef8b4a0e77250d9db2e7daeb56b8d23a240ca12721b2aa2e63deccbf8804bfde0ef284f473756a878614fc46afcef945e72a3d62370e1d9272c052b85eeb26a90b4fda890130fa238f987561953cee95c820eeab89bd7e310cb0035b407eb1ec166b24cd305f45c9978d35ecf435f67d12cdabf75ba3588a4cb47a8621cd0fbfd998d86dfed59083cf385f2c2d9c4f168f2519258799ae7c591e472e73b7b9c5dc13815106145bc8beee83361152f9f81225186a425c8952f7f3be8275d211b844f6c5410e06ee736e0449641bd80938de5038a8a72f015a9579061d36c9f35592cf3958b8286182920c0921c85c5c56aace8f4be22b62c38a897aec2a91ed1a441eac8f60c0c0ef52b1a18100f1efdf467c30a8ca8f15132e13778babf0dad5f0b9c5921b1ea7447858c917e26ec067cdb4998f3b01c8f98df23a044a1e5a46f66a144970ca5a54576e40c2e51dc0e75998ebcd0f602553faae3e1d2919e993cb019ddccd37845103843e3cf64bdb5346564b0c7339dc9b00c7896fc1dc92247de02340980d2f28f05009e85da9504fc5b9e61654ad0cf66140a9fa2639e7faa2342b4b4f47e59fb86d979c864e7129c69136a40df38df28096f5cae93e3496e727ecf8715fd85c3690cd985d7837e6cc0609c58a10490b81e3c1f8ecb71355879a41578c15c74c5e994cee61a857cef5c873a155191ac98b80e6c9dac765b8261a0e04ba7d0f7c4ece150ba68ede2a955a1e5e64ab3f06382ef706c56c06b2bf3c7c855b3d02a24f017f2dd3bb52a4d3ca255e71a9aff8d28dfd0769547d8df69ea07f292d9a23314698ec4e5d2a704884d7d447a76573fa39097cc02bb3efe99481c599cf0b70e238134486ece1cb2643f1c6928671beccb9f2b568295ca9a013c2637de3dc5a92ec702c2e5c596bfa9d8a293c90a0acc676c88a166c9011cd7910b905b18deb6741c441d107a360219c1ad0bff5867eea032a4a9110a873fa860818099fef63ec4e18d19de744e6cdee1519a33f34b7240a3c64c8f889ceb454aa34deec547cf515afac3e7c6e183b89e9ec04723221e04b55adce531dd37ffcc55e87ab54093747a64482cd7bcb4f79f99f44e0ff92dd4f3a3861682b4f7d1e82bfcd64b48cc70e492d0ac1ce13afa390ff16f1acb024228e1dbe04c2701cdb756532d0bb2783c4ec81455faaf96b4a009c9092f4889e334a3d48a240cc28c16a552c34d8596eda2abd99df89199fdd8d4ef723bd365a246a414fdf7869206305b13abf2ca502d6bc5c1aadd8aa1bdc0e1d74d0dc4dbf82a72e9749014679f228c3a396cbb72c3040fa3ce84d2628e2da2b4174212f32b7f4fbb162d8f84c98a37937a6cf3ec81bf37ab8c8c6387c4459a8ecb341e431eb62a791120d0f367e69c466a4b39376eb4cb86fb034b1918746593141e374b93c587a2bb8d9e59b694a98301f5cf7ec1c26fc011b8609119309f538d88e90682e73c4c87a506d85d9383e7f97b6987468e34c65cb11959c1708dfb9e5b6a512742d0145914903615b125a633f990c7a89b34158f65eb365ef35e13f755d69df7303a0d90a09d51028dd88ed581c3cd630e1ad6c1ce0b5b631a266a410224d94700a934cae02051cca5b45518d1024bd2f5be0ad461c593da052e5682704a3632fcb483b4b8d20f3194133609dd6d25864f2489173a967ce9729772315b4f2331edc9ae3406f7e2b645384b60e270825aa53a132259e3b2d526fba0551f70a8ac8db27a8a317b6e344480e3929f706720716c630412bb63b100c7b92ec8f241229d852778e40c9eb3c4c8fbf1be703416d6e622de87f7e96f68569e76f3ed3062fe449e7c1273d4078db93b21f022e8044cdf35f35053afa9a66d6089161ac884e8c068a00fed16effbc2f43e4d58149ebd042415274bf22064488370b2923960bc8ccdc119c436bf53eb1094d68a29db31717a9d806d9302d5e50962b5e134fe1786e426816087b23bd337a93a2c968adc38a81f40f26f87c84e45fb9e7f3da76335648a12233175f1579e91b97f75ccc11fd843c51835f45bf4359c1d8a28bfbe6f0c1398a43e0d51417c63464e6f2101464503b9148583a81887d12a6b69d34081c70e380695eec32fb07d9d8d618c38f76f23a179ae3488a04b9c6ae78e4878f170fc5f8031197bcee8094c9a615515fdf8bbcf90ecd037f48257b1c7ea7194b0888b4c8f6de120c5f486f835aa10b4ebf16ed22f7dda530033bc48b286af529ccd5ece6b4ee1c5e78611a14a109591b8618038ae1b9bb65aea2524ab5e3994ffac33bfdc085a04168a83192b083a48505aeb8226cdb9dbe542b6b284327027a86ccac8d589b933059af70c9b46896d6153d740145bceb98d78804bdb5d6136fc10abea22f5d9766dd8915d3925d873a9376b9e22573c892b85a81c5090618179241af7f174fe190f7c0ae7027755c904b3079aa95eea1109aa25d82c0c21f4ec3040109a425ec466b9d851578321f3e9495a6669c89691a3bba2d5d513ab25a044964be9e66f7ab3c7d8c512f97d06f2a09f4c2823a40b5a820b3418961d1b94ebdf633fcc3a0c9250a05c05c5109e5287f8100daf8bf5702f95a4236a1380bfd299ff81bacd7df6d70d61b8a04f742f0b41bf831302a759ad00ba3303102ecce3470c4fe5e612bec300aca3a53c0f7374376e77190ca09fbf6d2d604e0ecd315a3e7036559a2be32c04aea64fb0dc238b0fe989cfd82ccf00197c024ab2161859e942a334c9a54ca3952229591c08888452f6dbce04c8b089feec8175b0af03a79d91a2bcc00d8fbb347d1a13e5cd5db497125025694b2a429efdf3d4b69f8785aa63839e6d5f2c8a17bdd670e24a0e7f8e05b01b41608832055a40d5401fa82d40d4fea056a3dd14439a1506b64a4e619e1c50a0997d903f779095f3439c4ce3d7462b5d7f226326a615be025993adc69caedcfc485c6b926dca60956dd5ded23f7cbab1e27b7895bbfe2ff2260f59b6ecc90ba46dc2ea08c5543f081fc401e409d33000f8a8b998bbc186646626ec948dbd6a89fd8b6a7f8c2d390fd819bb6896e0759de65b5640893009ef8238c232c7d08328539923d224adb538f56af884319b4e96877c9d2a999d5edf0788e12be739155c0f9405084c6eabbeafffcf43471cdcbf77b003f4c4f973d14da1cfc5a308eff38e337eb3d3babb92be68cb5ba11e81cc10a331cfb2aa2ee017834bd5d76d068fcf7592929356f153dc05e2294e7239ac09aaf5f4c68e6aa5aaf34048d0a673a1a72bb5ab9ed05bebe56af5a9e2d62cc6fa0f13f20db839d5fbdfc5952dd4fa7d48f671d73f01b0c32f2891feeca5612e653e489830492814aabf4f115a8ef80afe95f8eae0fda92e0ef076376102bb3e1dd9200cc19665290de69e8866d49602432a921818b35a5a304d408568251b28f8b74a1cfc50a2b89e1b312e01b90646310735fc740434cb29a8609ffc022e48332401786a34dc7ac89b92fc93f06ef734d9024b7e8df3b901b7b7eee32ab68b92632ce0986928c6d28f4faccbad67e0053a587ae9a5fc0cfcb9ac1161d159782484df3c5eeb4ea79a75a334373293057a935b553b516674841d4f24fe619705bd4be3f714e419f56e22786ef26236db14a45264a2597ea214f0c1e0224b2ad2415d34fdf373aa80c1ba021af80031ea3b362ca63a5d8400f813ddecb41579ab6126f8d5c6aa032dc7978fc38c698c16b41137f2f69ba3d0dcacb3674b3f4b2ead2a12e936c7492f88da79a98308a72f19aae3a9970f464f1184ff5987c51ca8a5fe95097298e4e26bef1aa16d38c565a7cd3ad2e538e962c3ee3ad2626c3123c032f39587fcc00b9ae026e66521419de1f0c19b82f3ba97ef5e71ac43c6f695bf49f06861994925d524e475827622640491af19adf4896f568b626cd35acc716e9454dee6235523a48593d0133e1e097b1e89ef406e6472829cb64b799995f46cf55e1ee9d54d620132593de87fc6e877d00b618975e7dc5457a97210ad23582d84fc90d7801d53087c3cfb5a67456e087c575d58ab0dacb483054ccc81c257c827875ced42e7c2d2084151a3b4de8ca68f83d91c087173500b8ed3047f4470ac3891e612cb662176eb298e450058630e981fd1a1240bee8acd462c5d07ad241e7a9c2be648c2bcfc662bcb59350743658b90c2c96255dc7fef70b07fb0cac2590bc77067db566b8b03375893f6d05ae34f6b89b693ac509df2983b7607c60c481d8843006b20c5c1b887f514ef59c85aec0abb036166d6bc10bd713bcc5b94c87db74a13cbbdb50fdd9b9c3b2b970dea2431cf3d57f27d7742e15d65227260b4e8d7dcf82fbf66262b6a88e46e0cf93f0465e5ae1e963defacdd3c1f2922748079788ee06bd39216f4285a236b2b7a7a5d94e314b8793d7bf0111fd30e07c7043c96579be6b4c5c7c8f3feb55d3b5f36fb2184125e37d4bb74a3d08bd1fba8cd116399d737aebe829fac73165143965ca1b31136871dd10748de25b64712e25af3fc689025b156fd660d40e11122dcb856a094a4655508f7cb975362a6d25bee0f59e02dfc0204c1e7d0324b8adeee39a8c7318b318bbc7e6b1798525af2f758e2440b2a4fc0861a1ae7e5748bb33004965eebe19969b3d0d62ce5dc9360469875db340172b79985675d9459d412227322c61c010741a236cb51dd8774c96bd81cb136378c40448223710f0f0197138a82b9302c32d02d515952b8447d70effc7623bc3842a2384fd7348a7672d54ab6801ee3021f427b2d5f97a999055e71947e6df1ab3fc9a5ff940a6c7b9603a5da7f0818216c2af9820f0190a4429c6808d1498cbb2a303b9002e9c4548197236aab111c2d15982f2785f9dce03aebe91a4cb4d97ab975b19c4f8cd264828d9456a551f23312d0e6541da743dce6d98411e2d1b77349f322f7ddb8da47b12b738bd7b6cf6d9f4961f390449f21ef4ab54c83205fd287f923ccd1937df0360a6a34bdd2e5feed62d4af4d54d4f29a320c73afbbaedab9c30f9eb02ceab7d1d7a424f5e04094e0af9df3668e81c59b8cef40f8e6321e2d3ac8f77be9bd44df714d025b997bc0f5414288435c7b423e99c0c8e075d6025c725b96ce2e487105dfa5e79f50418d702fdeea664530bdd714b030025c3c408c1aae6f38a408cd9044625d10369f0105987b03e6c853f957b18bec2c3cc2dfa1900d9fc59445bf7755b720b9222c4c8994d9dba2d917511b82522d802a99ff09876a3d4744b98a91233d17d2bab07622f2bacbb20a88b66f84306707c86651aa787819dbfcc2d7fd768ce12b3cac8989c79c951e74dbfc48791b3a5292e9ab9b32c718c4754effcf8242a8d605992a32c37a565896872b914c6446a86cd0f2daf049d412d0572c28889c0e838d2aa65425fd94e348a4e4fe36969fadda795c7c02c5c097ac3bb0f1d5c49965cba2fcfd0916fed503054f477872b89c44285721a095a15a0b1ce4492576659ba4212cfbadc0553b37025c0679ad1c5892bc9c8197a61d9c5a5bfe4facdb91200fa14b20e383251a7d484bb92accbdf67f3c4adcc54f2c5a623ec3258caa201c1219385ea50339d5886c3132e045245124af0cb281e9a55f2664d2d2e75cdac4ee4505be8483def4873eec5bc6551e35f42a3239d14bd9cdc39052d9f9856d567854d79514edb954e49ae4bb8d7d3c0d5a66134d4bd6bc9b087a9d81379b89593e8093c1394cb49aae0b064b97b37223730a1972276a0fa2d08a629f24d228dafb105894a8b10d1b1c4ee5227dfadb947ffdf24cf62d1a37e3449a76d918539426f5123dd406ac4c357ad0568e8ebe3593c1f6fad976a5f2dee08d48b5cb3527b6bf1b501ac50f44389952470ee8f6a06d5a70be78e59c4b2a42281b98108197351a322618614cdfc54e1b1dd189be75bc218101b0987f0183dd6320241bc42fa2bec62198faf04783192df82c37d667dd1368fd55fb7e62271fa42946c23f408f2427e9fa4aab5310bcebdcf45c35a32c540f9a0e68c2ee669cf5964125ecb96068a2a15a5cd1e28f44e173d54916425c319b64d5647ab1ac10ac495d308d796381bd79f7e482e1d2c60f9ad485c5724199eff8e4a4612088b1d4a75612354bfe08ee2e9599d072c2ff9aaded33b7ded198331a60d3a24f9aaf396ab3637aaf3051ac62ffc5cfec0e33dc48c151de7cb23c3cb8e8cb9c26bacaac4ab167cac431f037cab176f002050fcff07ea48d73dbf3d16ebb4f594d2ed75cbd4dc2a0cd6757eaa1b536fc75103d293f7a4123bedbf7ecb9269734fb1d53874a531666955cb29bd10ef07a515df495009aa07ae3c25b1f485f65043d56ffcd0cb86ed1d18b9b3e1bbeb95af7b04dc9a4de9f4f28e08b1600d9c0d45435d426df71568b67a624b439d2c39530313d152d17b50cb2be9a9a5bb0f7b4bdf79c906bdf7488329a6384cc921accb7919dc24a7e500e81904f19b4b785dd1e5225e2fecb327c6dae336cbf17cf604b6e1d7fb8138e48e90791cb6f70e7b98b730e56fe5d97273e2f0f64e366e5a3b1c00266ee0d685ee21ef88260b9a1b1f0387bc18b266506a5cb71e72effe4ea5329b0df05c4d20905557a6dd0684531ffb905685ac897800015e3e6eeca606f961819f3ee32f94c41e5572fb72ddc56b0c1b1e7a0ece2f45078db5b4cc8b06b80398fa303c7f4f97cc2a32848f10ca77bd87d808a413f076195caf3b78514c5e06b57baf6fe7c1b6535f2bdcad5c888b20f143935deabc922b8cf2947453fd92214bf038947462dbf8657d1d0796909d29bd5903a3e42f9f90f5b2285b88e24d3f47d214d1f79668928f74ddf8666447430a053c41e17e52d270c2292ed7183adda241286c0c6237812df125af8ba89dd6d2e5eaecd36e9ae969a0597754d7575540777eea1b5493e939652596c3b5e52c8628c0a8d1fb032bb2457715d663845009d6b5600e9d5201554fca885596dd8e1c4fcad612859223dd323150e3926e215371b446502a1c444ee478119ebd8651fd3ffba967f7402dac53d61842642855cc50685f4ae1db2982dbbe8e633935347f452877b703097fc56372653bb440671d3da0faf3e4d3d96b539b430bd55eb58d2e60504accdef3a7a34ffc2f7a66deb157768ab7af7e1f95c0e23241064abb61aa3da595fe66606b268a92146832a12bfe0fed40a79bdc0138a73b925c81cf257b4b9df900f3e86b4089dbdbe1860f24b8792c71f2c51a9659ccade48fe14c5cbd89bbdb3d8e3ab69b477911b97d4489db6f993aec86b7a4418acb5eca05eabaca0fd4ed45abad074a486116beca7de959db553f5209c810394875d4e3ec4579277c7ec0579f09ac5912cb95522f4fb4144cf04643793df55e0db3467faed76f2228434877645a4b1ad1563297365baf95c4fa1f11720a54ae0b5fffcada59067e29bc3d13b7a4c2b60a71b6ae2da5d6b72e144f37ef214a93f6d60dbddd083535e51283d8749d13bc6a1a7e8a05887ce524aa307e9d6ca65f58e361d8909b7fdd49629b630dc9faf2752a7d33b0be3f5caa97c431843e20782e28c407e1f34d3b76a502d41d63484d12b6e5e0714cfb776b30333cc14f040a7faa0a09e11eabd15fda40bb01da5e7d28d7fe0e92c2e2c546ef18ee3e8c12d8e62405be38b0a15d125b39178c623a3840d679d23a10499a81f4a63cc9e1675984477863c0a5bde103a29d46791fd9af9c26be38b28d88f36d7377354061f41a1179cd3d7f8aa8235a1f9b70785ea1d880d0d148777fd5e13b588cb5140f569db81266b3b3de182309b4ea8defa9b73257208d75fd68ef3345ae69d4c820de02454fd2dabd4297cfeba00df684dd52e2efeffdecb380898f758256a6ddd572b06170df61e8b3fc7fd856e15dc4c4875819a6f0e66bf5e965dbd6686aa7d92904ff13cc29aebea75246f05f71a4b5ea7bb1857bed9cdd8be59e60615e56e24854e3fbaff705798566b723f6624784c8ab5700e24f80b2fac821f0e43fb6803261e7f155f913edd11a3b243dfe5d227d7d3ba379538c4a473bb67afc262ad36e905815a2bd114b8b6ad3bd34b11cb178c4b52e40939527d4e221eec53c064412d7efac2a1f93426716bc62c9ab62c06136ba43b479d54708049d6a0b949a322f6c72147703fab8a2875940d815a50dfa69a7ae54dded14593b751e0a57bfb88d14878a5a39d6eabfd4269edd2baba6ce85f41580eab7a3e9c743c7d9af13fdc5f605cb8a0a3f9f5aa398e5dbb913454ecba5097c567edb5aeb2689446e2229b47273cb2f087b086b08b09a46d6f499ae31bd48d7a87c96a1a9ca5e6ada06eeebed677a5bd1b1a42dbe30c636cb44a2fad867d8d28730b3b442af9fd96c51c54c8f61f761c61ee68098f498f4f6499af4f735479146f9aa982947479146f047f0ed6795f6b016ad34b3d976649ff4373b47914ea5972f3255cbb2549e646d366612bd7dd15b528d48534791ec7d53c68f65dfa3bc957455b36589be8a487f9ff4358fde66ec45363b7b52b63faa7f730da6331da2c73d2c963da629a61dbd34b540066c9c2642689d94a4f455a451ea63c7ec47ffa26c1d9565d826626bf1c8faa0d4870f9b68136d62f4b1479f65592612a170262abda8f4f74bbaf41829579bad944aa58f3611631ffb629725cb01efcda34c05cb3209fbb089d126de90838fedde5192133939393925d2fd8930080bc10d65e327e6be9d9b447a7f91c3417a7fe76e8c62f09bde5f13bd2d8972e947b9daa6d2dfc7255cfa5ac2259d25c90a2a7aa0c0283d39ee121cb222a10c4526ac9da3f6083bd9ee49566c47c576f90d897492156df5be3686322abff2fe42f0c5ad0d852c106805150e47f6fef007bf8f32e971aeb628ff1042faec4b6f4925d25f5289a4a5a854bab04a76ce00db8f3438d27c5b472373229c1f49c5ae68fba26c35ceeeb259be300843a1ebda3cabadb3a140f8f38a541267f9becd71632fba35b87d2fa5945accbeaffebd84ff36ba3dccde2094297512959f2a5a084ccd1c317f4a59b01ed07bda3fa09722e2e44569f2a6083d0dba0704041deeb8af4b76deb34fd35b06b6f630432df7d076cee1396b40db9aaeb1e0db7177199fced0e9edbdf6393ce71e9ae935a0ed1ad3d7c0af1e460626d59bf2a66dd3d7a0584d1a25763a9dfe3f873fa01696f77f4efe74d91bd6f613cc3b059df46b02ef03026af92a5b5e5e1a969797a6a5024e0aae099a024242364e8a9352fff4f554757e44ec3c9fd36fef73d680eeafd495fb56564e2dffa7d3e9ffe472fac7e3b64ba671f918315cf2038aa16364e7f2fa1571bd1094fad9edd72428bffffbc7c82c31deed17be9ef2db2c404ea79393202098ed0fe8e43bc63f4b8ccf7f7229e2945f93cf2c31f4030a7a213f273c2efaed00bd879141d39e457b1859fb2aadf6ee9eb47394a637d343e85b6503013929257c7504124540ad8c777554250d0808673b000cc94f6509a10aec20fe340168bb9fa129dbc6763f4c50b2ab437f9b3a99d3cbc74ea6e5e56b4e86e525a53f604a4fb9253f4b76d786eafdc097f83072fc934b4c11197a7943e0cd7f70fc27c68859385086528c35ed1f858281d936f62d82b787133fc68fff76ecfb0f91f81ee48ef56623fbc1f486da334680dd0c8c47b1761f8ed5364ea7d3e9743a3d086ccc9c3e3ec57fe90d156dec9996cc9229762ff24f59732f526f36f2f1f0a065ec5ee8af64ea5ee86bee850a2965ec5eaa2765ea5eaa97aa8238d74d3cb83fca97f56dfd571e59be3a2c9dfdf5556f411c86f110c19afbefadc5be3e0fac5abd0d19b2477973b744a25ef5b642e14795877a3379fdfbf53198ddaf0fcb1bdd58a65974589f3d0f2b830fabf5eefd01192612fd7d2b6f41b675fddfcc727dc67269161df6afe76179384765d666bdbc22a76b487f1fe6adea485a297dfdab62aa0e28e9eded118499953df6b7d2ccd25bbd955e53a6b8eb6f0eb245f4475f71ae9e3d0ffb99e641fa12cef5b14c6f41f6bd59f435fbb65f9f87d549341e24ed31ce6fb3e8c8fe3e8f4cdf11bd16b5b05c73dfbaefee631fabbe9a0e4376fdcdbef35c237ab72debaf486f42b608ef0cc336586f4136f6b1ab02727ee6f4dbcdaeef5c0127ed6363bdbd9683ecaa37fb987b9a6b7ecc2fbef8c28bbdc3dbf8e1d5f1768d97aeb96ff1b86f7d253dfd926894b7203caac69e661ed7d727651d22ed68aeb6386fd6eb3064677fd99aafc7727d41f6fd518640d5a20c81ebebdbace3d2d15ed97a777764ef3685386f425874d4cf9e47d59a870dd49bab947e0ef85b066810f8549cd4b3b3a31cf9807d20c962efe6543f55934ac88ad76fff1549ff48256651db573fcbc74916d529a4943a7de8968339bcaaa69bf35d759522e0ed112965283bfac4b778e06ebc1dffc98e7f0dedf8348b1d1f0aedf896132b68c7bf39305a40f19b5cb652a24ac2d570232ea8daea1d138e46fc2a5b3b7035e25b97c6f289269097e23824b07ce73295128ab54a8997ded29b0c546f30a8fcd49b8ced7a6bd95bd583ab254dac682d2a2fc384824186cde368c4874be00ac8db1b2a87b41f0ecad1a059e018e36fa8aac7d1887f7576fce8e3e3a868fdf460ffaac451b1d215ac6005abaab4e1cb4a29a5a52da1d4554fe5135d7cab89aaf2b17e4880e5579583105696c690822bbd5940258cab9e58bde6a8a8ed68f9c460823ffaec18e3579511f8eec421d855a2f04f088e06247213f30acc3611fa58f102bf177a31c648014751418b225cb1dd4ba89dc826351be1394773107e35feef0a21844a3001850db684b006324a2d962cfcaf5ec2af919a3aea692075c4e779e7dc47ad4b52aa93513d56f452c221841590acaaca8201b52c2b6595546b6d46049665d9c8c4046fd476e168c0afa3f71e75c7431b5e9c0d3f1553345572966e749baacacdfc76732c1a60f8eeaabccba22898cbc2986af32584897b73da7c37b5c6bb027a3310079900223f33f287cc40fb9bb607d0045cbdcc1207be38dc9b83329a02967b73506e88292eb08c30a84de1a4624c8137bb379adaf06d142be5e66c68539788a3e01426b0c48929db03aede0dd9d486b0d4e3ae8284ea64d4f7ee35b36a591865dd246aed55b3cd62250c1696f71b84ef2104ded7406b470addd1e2f1386ac7da6e7760bfaf9ee5d2543076747c4138383840ec6c41ee70715f80448880880fc48873ce38112480461c6aeefa440841c40972450318e835b663f28493ed3e1ee39800218bad80f86e77c0b3e753fa146786fee3e189407cff09449df366defb4f8008081630f33ee7cd883efa382adb703f3fdcd0b691dbde6cfa9b8d3ddfd11ca14c065040e0f7a2975aa7757787d59befbcd1f75cc3cd1138f8477d13df3505e0cbfc1b07f2fbd2f9034001befa879b717e802d6e3a3f07b46e2666376305d99b75bf52eb6668de2cfae3edab3778d1b7e3c7ec32e30e7838db46cef726b29fef3cf6e73b7e9aebdbec4dccc7e667f3dfc6deb655bbcf6539105833025b41aee33a7ea445081ce4a8d905de5c67cf779ff91e04e7cf8dce6f1162bee7b891f74431964e227afa30959a12a3fbd3f71621a616f31de9e9475700e9e9d3d1d3b7ae80d1537777bc0d0407f895beb97939f0657e10f8321fea23f0653e1009b89987035fe6ff90809b893ffaede98cdecd4c7f37439a5f3d4316faf2dfcccb2c54fbf3303ff294b4cff3e17997dd0c299b7e944bff2ecd0d4478380287f7a3e7018887a71f906716fa90857e7cff006061d225fd84e0cb9c8f0202579ac5929ac5d22c37542f013753fd04de8cfc37239fa459e848b350cd1201fff813780f5fe8cdb87b0391f8fe6fe8f2d211f85117646353e1e4477b553c510212263aa8411146381afc704a01de6ca0e056c214b694af4217a0159184a7bdd6f2262cb654c207b6fcd2a591ff0b30c9a08a47b22209486cf923005891c511aea0893148f0767070704420c4c344688b00609102e7040b295071042610b0e3c3c800c511a4ecf833788cb322c64181842876b4c2419185101b075d49a878315934c216b67cecc4c510505c44d1840c501421ca8e0f83c7382140610426767c193c66013bdad8ff369ae0c5162948e2081136e822f63c297d006f281b1ee328cc0076b0dbf18a12ec19b67cdb02275c54451c793157fc811325b68c01c4931da7d8b104032b9c10c08e3f314f13950baac2962f559254d144eff8f10580e5407bade56101b6acc20534128614300a860705154ff68dd7dcfdac3c713a9d5c4e2ea7aaaa5caa3fc1d3bb9cdec5c5e55dfef47f9d346037d4352e537b40769bde83d1e54f0fb30b3c997eeb61b7cb579aa6b99c5c3460778d69d7543f81e07b01bef7027d0fbe074f279e534b0b8c96d3e9746a39b99c5c4e9b05c87bcfe54fa707e39d324b0b0b0c68ab9705a4b37279a620f4d8a22c8e22fe6ab18f588e565f6fb18d02a2bfb2c31fb16c84711cb245792b95f67bd496b288331aaf034a1f352699a8c6f9fa982d292bd980f1be34cbfdf8a3b7f7458fd5da63b35c3dc23e5e79ab5ff1c01f6bccf6ee1063eb3024875ff7e35f8fddcbdb00d3e39797be19ffbb0f78fbfa4aed35e1ebd235a6c7ba86f458c5ae89f4eea16bf631bdade8a8e280ece3bb9bddab5e7f1fcb6cbd97c56cb5386f3d36fe6b9560359950db96b6b5199bf2db1a94396138b318ced85f1756b17717c3301eddd34824cabe7a2cc2fefa77fd1efd486f3d4a1bc355dfb7b8e62dd33d4afbfa796179bb30ec66fb58c57a942add97060af4289166a0c5b67bf4d50c298694ec036c27c512a6ec25345942114bc862d719381b0bdaf2ab942a5f5ff3bb8fe5ec6b7e13be29c787016bf55a6badb12f64cfaaaae87bf55efd6df5391c7b5acd29b23fa27a7bcc7a4545bac6374a87dccc6acaac7e86911a517def25f532e5e1785fcd20b2b74b45ff6e9d53dbf8aee6532853fa3975e5baa67ad19d81b3ef86024205eda9afe851f7ae032cfd4ab3d87f7f2dabaaaa9fff92f298f7f45fa6ccc099739b81b3cdc019fdd435f3459f8d2c6bfe7d18a3d73342802f248deeada8f5d9fc5b8ddebfa466f4585b55b3fa59895ea6bc1af3abbb83fef537579f03d24abfa4b274189b3cd009b5d47afaa8d535d5dfa76fbd172fae3672abdee68602daef7d0f28c4627df6739b3c5bd29f36d126a28076a685b6507d532e650ab4e7dcae295bf680422f5e3c1cefc58b97d48c172f5e8d8905655e1a41a58106946b97ee52baf412851096768cfa29a13b3a59c8220b4e5ecf9d31029745f8158c603285ce967a8381d9a8130c71212473b8d8d95b4c49d931e5310e0a293efb7d9ce2326f46e6ec6764bf87c2100310b221002130171c8df7b10b57e3fd6603e8470b5a30a2c44181832c9650eb2e849452cbdaf1ae7be1ebee700eb53d9485f49da3ee8e1d90fedd41355d82a3defcadaf2c9aeae7a5819ac5867fef44e4fb47291e237589ea9ed84204470de425013f1103b64062f9005bdbfb91e1ff31d5c3226790831d350a05936570d4fb9517e00d66d3ea8608586a1935007fb6c38fa922c454d0dedcf5af07ce5cda45c9e1a8a87bd0283b4895a58818b0450ac98e4f03142923fbbd9998f298eae7e667c79f3c9fc2976f5b9fc3b7836ef9cf3c64cb1ef06743d73e1ce5de73409997847b79bf032026efbd1ee93aa61c95725ac0ee8ba84ec6e63f7ac7e34df88b5cd285cf764ba4f0c06cb7440b3bbbd677b337e128fff125954a51a4c9765376959666f7f9149515b3d8a5c19e65d5776962f426e8bb0ed478fa4808ec7ea59c734ecd42ebd3fa0f33c2639ebbcff5168df6ca5604a403757c2cd779fb1981af5cca7ec3cf79a5f9ed07e5bd288e92cf08fa4f3cc6ed27f07e0e689b6ca85c670e288f713a66596967477ca6d3281a9e6e8181a461347a10fcccc8aaf2d23ccb7a341bbdae7d2519ddbff198b747bf3d225b7e75759489503fc0a42d9b7b92434539ca7da67e198e925f4202bfa7e17a3e8eda5050befb788c85c927db010189281a72b881c165de11d43be24d006dc98277e42119e2fd7c47de17c1d7d3d90f89d647e6cc6fbf2349f0af7ca00c9247c43be268c89110d8df87ae9b80003d7b52de6c3669f4b084e90dabf5ade8b54cfaec5f1de5e8a8cd595f631f7b4bcf1801b69a529b0d734092cb2eac82af0b6a978ae9574ad85a0f2bf6d90e31325b350ba93ea9be4853ea28f8f0ad95b76a7a91298bf033cc86f4f0b3b78f6516d2d7c72c4bb390eed7584ffa6b3de92d4d3575547df7d98bbe065048b7145fcfebe9a28b2e8a54e7b1a29775ef3df781f79e3b9218a39429987352aa735d57adee85b8f762d810186391c805efbdf7ae94a9a3e12fc50f11297e76b2143f30d89aa34a5ba03273cfe2037eef68b8f7e4c3d9db9c6f3e5949372d6b5ab38a6f25adf1a7c8d0deb4ad8492c1c64f91a0eddfe230ec19e69c1288fd57bd77e5b561bbae773d1d86e03060c8e680b66db41db7cb77cc409ea341df26ee9aebe7739123058994fdf6db4c6af0043ee7d8a5596c907207ba2d202e74aa2dd9509ab39a9776a539e395751882b3e7d77a193064d3f90e86152db4bcc73ceb27ad7eba2f790cad6855d18a5e36f636ff5d5b7d006f6c4396d8ef37fbee42206afb2f97b8c035d1bfeaadb4a97ddca4b49d8dfdded6f490af81b230659fb603e2a26757ccd2fc7076bc5363475941e04ddb4ea7f5fe027838aaffabe3faeb691eef2fbd5dff76b8ed43fefc0d489a8b86fecb3bdcbbf3b34b439fd6f6d578ef22f66a3cfbf8dd0de7f6915255ce19040707a7875d93c4ca50e68688fbe2892558410b5ce882175fcc68efc39b2932642667ce68dad568a9c7d4547ffdfb5a457fefbb8b9cf453347a4b6f715b0e63867bfa76a863d473eacdfafafe516fd6df213dbbce2fb6fd98fd0f1af50ea71ddf7aeb9ffdcc74ffa0af438df5a2afb1de339ad19f9f599fc367b6f48f48bf645a51791615ec37f62ad9847d296f6e081bd3f84939c3d9ced118e94da4fdb3ecf336a467672efb8d6eebb3b79e87f5d35d1e7343c0fa3de9a330eba00fbf06edf8c3fe1664fb0ea77d1b30c4f50ffbdbfc1de04ee201ed6fb03fe9d6f48fab938440fb22ffc2dbd7727ec1390368dabf40e18b7c33aec90fb0fc17b4177408b49922305ed321a033455cbe08762ffe2c5fa4c5fff4455cd0ae81ef76f62d2f5f83d2391836f8956a4560e89beb0544e46005287842083b33429c104f178a3879728517479c34d6b1a67a5b678800df7f5feccdfe7c7f776e08d877bd5d6d7512edddd5425cd0cc11998547dcfe74c75d5d9a1d30b00dd91b987bc8767787fb76cd62c37cffa91db0c3db97a6d653ed9818a1644b263608daf2a3632963f5ae9fe42528d49af5f8c10f7a44fb4214dc43569e9a2f44c1945a8a238ef642941e3d2280dfdbabc3b45d131bfed7a3946925f7dca9a453df7bac2e8be151e95aee1da93ebcf71caaf4c418a3ac568230e79cd45249c2755dd55e58c0ecbdf76259b5dd0f125dc01863d168e40389442a993014a8a8a8a8ac683106a7d3e9048385ba1ba2ed7e7a926ccd512eb6a5a5a5c5e5fe785fbcfc83c4ceb6b6fbe9f9e9f1c1d6ea6531131193522693c90b801233c8944ca5de4bc9944ca56625e30b772ff2da01abb4d4624a2b2735e70c10a6668b0a269394ca09525506a9e8af84a3c18218d8e0042c88810d4e6082121cc1f141aa624e7787b17278ce18a38e73ce4ac628649c324621632563e6c4ac649c5144313327e6ac648c625632664ec02a825242a96b24c2d67650e60809b8190d3eaeaaaacaa49450c208e9dcd163e88e31c297ab1d3d6687dbce65b983620e869f05ed97e37629087d202c022114300533ec62473d48e7d3f974daaaaa2a2bebcbf053d4370076402308f046695c82696abf4c9f5228f30523cef4524f7532b617dd86fbd9d9c17158bed9dd61ac609c65bd8f7779e06d7d84f2e1ffc0f63721bc34f24929ab1977707c64405e1af9f2eef07d3db5a0cbb0b15bb211c0c10033040a478702496ea8e41c6267e7dfa597e8e8ed39d92e358ecebc34493e87cbe136de92a77787bb412b191c0fe7d5f0df247efe9713f935917d1e8eb70357c3df4913261c0ddf503f1f2c073e957b432526542763b300e8c19bd4b97ee18d57deeace4baf75af5bafb5f7625527bb477876b02670cdb07592474610f87d0e7f3d3c11b0667a6e1c1524f588e0e03c23392f477447366e347318ea816f06a0906ee9fdbc9e87832723795e8f5422357cecf2a05bde5b49b607de244fe9aabc1e49029913a464fbcb113819a923754eb0ddca9942f5fe348a9563e5e8c8215c864ea1299ac2e18620938a4442f2481b4825b657957e3df0c5ff067e4a5ecf55b92b4f6cefb1a0e4e181d18427074c6203bef8634dd858d11c06144a061818edf45a344dc63f007af04653fbc2784bbc1ef7e2af8493a129267cd4056c294dd1292e238de47081372b67bb95631971196984bff8fb4b9e19e092ffbdd809f662b65ed6c56c50749314a29ec93267ec8943518bd8448c423b7e5412637cb2638c4d76fc2963a414634dfb47a18460d5424a7a6403788b3fb1c7d1a8bed22176744b08cac014c69af66f094198d11230bc01a66080374bc87ae231f12d2108a1ec2df65c2d7031dbb5821d4b30748580861428207c0f76bc72b05d47eca8377ac960c7ab871dad2e76b4b6a0292b0a3bbe05c5dd70b4084745b9e3d31494b93e3e1d823297b67c34adeacd1550b1e523e59470f6a8d25a3f3300e39413ceb9a1f6d4f41f7c4a7732d549459ca823218410c2fbb3a31565c76af94019eb08ef257e137ea4b063b4aeb0e34bfd43c7db16168e467c1aa82d2147235e4b28f240199882b488280319ecece8e81c3992934375e24718656fb1074a71d4f3d8137b443d26218cae00826464fe7b7f6532563cde4f6d030ffbfa9737dfd7d757476f659b51b6bebe2c7a3ffadf5c94379affe6d7bc11ae6188f93e6086bd83d05123fae89b7334df4d497a92fe01f77b1abe08d8be0f1b7763befc18ee0e9334aec1077c914f6f317cc00c7b919656dc68f60c446efa5bbafca75b3cc6bdd4ce5fa0acefb9d778fc377f7bcffff9d7bce731dbbfc7b88ecff97befdd9bfa72cf9ff7f060843edc0db85f9e34efbd373db3d8e0f4fdddae555aebdddf7bcf67aeb910b0d4877c1b8f992fa9539f9a8507fce28bedd83664674ee2429d9f63c451b37acce907c9764eb165e51fd76af15ddff8478d8ada8cdfb7366ebf2c96dfbef16dc75c66a20b0af2e1e1f921b21d13279cecd97a77692c7fc29c0e25263e1c2eba1d5f67bf5c23144951f6015f60dc52eacd26faa0d49ff0708cf48b516a2bc57bcf29dd371aca135e8d1cf0079492c482ea64405a7a4a7a3a7a5a6b2d65521e6118866118863dea4ecaa5d28fb43c7ad38ff44de9f1df1c81c3e84bfaa654d23737d91f81c3e849fae6f4a337fd8d832f20783337a5bf2f84f4dac34b83b3cb0ebe947ec3b7f4a327fde849cf9355f24a8e1b4c269dc31138981ed3373731d33726ed03bec4bf89373742b0d7fe4688e8efdf085179d20b59f95250e93737b4f26e86448a98fbf1e1cd8c1ed21c504544f3cfcda4ac652220b031832d919b5999191a82326e666828f2bc1e2813bf441ad15af5264494a13b007d9ca73300fd0ccbf8d6a09bbae5a32d305841e8beaa6655555555551574afaade1bf2a1253e0465f0c33fdb9d8bb2dd7798b81b523c1cd5fa3b12b643bdb90fb0d8ee7ec5767ca1e06a6377c3dd759dc350a66a928593ed16bb1b4fc693d83076155093ca490af0bb7468a802729497948049745a168fa0e0f91b7e93e5e90a88c9d63b986a4b9be0dfe8b59f76264249b63b15fe9b0351fbdc3ebd3bee0e2aecbb438b7d455bef0e6782a3e15f65744f4ae952c20b7b9fc3ef0e1ff22157e238783592f01e6c6fc239ea7234dc871cc81da80918fa037940ee46149ccc7dff8a8993b91ad545b54545c5762cb6574cd840434015101501865b0554030a68ce397b8682b6d3d400652a29de8b7f15db8fb09be0862093a72ba00a687b0554016138d54b585032834cc954eabd944cc954aa9a2840820449298be71e00efdd4680fd325030583f4418e26708494c41633698bd3de903d60208316082b3832dbe4882132c36d5dbd43d6036a594524aa768721571d283282c1f0290040f280dac9d4a88cb6901e8091a08a1e7042940a28a298c4c9182abc8047eb005143420a28a1c0481842e4cf1c38d225ac212d71517a8220650926852841f9698a15304810ac7c4fced77c8f86b5efa5fdd5b69d3964d656c1a53804d1f1bb1291196d8546f3d601e07d8eded7110defe512f036ff773851276b5ddcf15427b7b182b240cc23ba165f7f29c83597394fc1a2b5855b182104218dd4c177b7320b62cf2c4a3904680e2499ccfc0dda0a72796b090d82e6b2c9076cb2ca044d9f27d064f865a01430454109cc03ab8c196ef2678ef0aef6de16e540f0317624b17c196fe812ddf3d4977951d2cedf9dbcb9640dedea80e3bdcdee1a88605de912f6985b1a63d6a436dfa765e1159c87f46b828cec977db7352cdd019c463b6a783e33139da3b02a7b05ba9652fd9db43b2a5d41ce564a5bbe064f2bf2838a903658ef007a2c8962f5b483932a229e1e490f84a5520d94b48a4782291483424d1c33c1ca617995e7e0c0f87c9f4a24c45224a454f5f5e1a9a039af229878b3e8687c36dd1bf4b232269981820128fa122ea48a418e836c3a6326caab7f7a511fe18eaf3872a5a2579621170c787803abb920fa321124721d9dbcabf972a2f2b976fd9444fc2322e3a8716eb9d73b764862de5536dca9be9e53f1ce98deacd46969e3e29cf080116691bb94923bdc9b0df5b7ff38c1060ac6d7c937e5ba1fad28f9b44dffacd466ed15b7a9361572afad236be4572571fc3c361f57bbf36904cdabe48d750aa6378352a6d650caf8694f3fdbb3be63f675df5bebd3f64ffe5f939c0ea738032d15faa8743f9eab85fd9cfe1d9cd163b4a6f1a8696d66e22890167c5492d401591b16551b64f2d769428dbdf73194434589754a0ed1febcf0dd507bef8134739142873a89ad4bae8d5712f6cd7decb84f16422ced31107ca542803d8a25a17ae303a06f54bacb2a441688532b31f1f190dc23e73a8f25428735e9a2494562b92d7fac0d828fe1071a20f4e6606c5116cff20989a4141341a94ac47d35eb80296a97024e22ffe0e47ab5a54285a857d7c60d1488b1d71b4ad429943736828680e6973680e91ac49e54171284f6c15ca1caa50eaa45994521299fb1194c7dc6ac88d1b7123981f71edb70b466a87dcb8111fc2626ec43a126b3d08cc5a3fe238736b7fc6dfa207616375237ec48ff8912cf32070ccbc6ad183b0d65af99edd0896dfe780d16a9aa964d2309b8d9aa66937ee6be5d643b3d57b101e04adaaaaf220b08fb270285db418cadc606fdf5e7a639fc217483516e0e7fe125f0e60099a107d47f4111b05e6e1c8cfadc0a56f6eeedbaf2c8f899f1937e3ee8bc2d1a08f1d01d33fe29c0b807b891fe3c7a8838f87c3faf840dc8df9a60dfff9b0a3959fabe1afc3766e862640061b306ca81d7bde111aa58c18608fc976f4186cc7bba3b5d463ea8e1e73518fb176f418baa9c74c4b3da6b2b45a4b3d26528f813b7ec52cf518c7aead49ea4399aa9f12ef7113601e6eec5f5f7fa3f6ebb4cefa4b7cb8ab6529b6abb437b34ce046089cb99f63cd08b97ff511db0eb77fc4d8f077907fdd095cd77525e066465feb1de99b23e0adc0fd91bec9e0e7709e89c3fdec71c85ea46f8ea09fe91b68e1d7ebd2400bdf9eee4a9ab35da5f57c77adac67bbebb49eebbeb6b5eb653dd35dabf53c77b5f556ac66d633dc15db9acdc7f6d49b902d756565c400d36c63fb6ebbebbe76bdf6656b57ac66d5963bee4ab2f5b246f0b10df52664e3705fa46f32fa59c4e155e03ed637ef080ef7317df374e04bfcabe7ebe9e9c11fe33b42a3f61a467d06838af4dee0e08bce8e65eacaee206b48e52426608ebd5f323ca67aef3de9ae575def5eef89115de33fe3b3d07da5efb0af35eacbafcbafcbaf2b8ac77cbf56cfd1b707e5babaa6fe7c38aeaf627c4f32cc5db5b4c5ca72fd8381f8ad18bd8a314a8a7dd435d145d13ff3ab860a53d71be648ae6a5f315efef4658ed7299681b55269bba04c49c33857690de352e92a952e6b61a00c4c695f3d4abbfef535555bd7d700b55dab9797555555351242ad1906028af1c3eb4102796ac6f8016f98524b238e16e307bcd1d703d0bf1e4a998645efbde7eff5508228a270242f80089f49a884ac9795450c55d108000000e314002028140c080523413024188ae3e81e14800e879c44744e9708d324875114648c318618038c01861063c0c0904c8d025c3157dc46a501fe37d115b3578b1751ba060a08f23a0ac7ea5fc3031bec58308d856ab818995791c0a6cb1f9c311c66f5b7625a350b5110d2a32e90dd1908d09af240addb17e4aaf3b312f98f69a6e6ddba8f270a99ad94a2c3aedb1a54cb2a7ca9fc6b6147e7d3775a98dc269b002657df97eaad13e84766dcaf13064431458a9fb11c98fbe8749ebddbee7651381a2637853cde784fe6c14628a603e8c869ae0a4080ff45a9556db2c23881e8713cacbec739991d31cee070ac0e01b6355408501f739ce1676fa2f468d37c26f51644f4021dd5168f1c53f0e32c66a387660d662fbe3e068e85c1f951117a6a6a6c1172e2707b13b694d0f5e3a0a729c740abadc7a06a73b6f6d113f60a60e2b064f25c90ae8285e4c76d7cbb2032408c70bf76d0740f6c32eab785e8ef97e6f23e744e7e37a17972cc1766e81b77efa85564068eebb2ccc8e22b9ea4662c6176b90a7f8b53e1ae56185bc6aee7c40fc0e801ca6ca6f9c481d444fab98be5aebfcd370d5342244cd393f14aeebe58107abe513e0ebe699db6732add4191dd2fb9d57ec6bffb584ff477791886d8efb6e2d7b4de28e11de84bb13cbacd5e925a4e968f2996bcf2227c03bfd03f7f72d47c6c4e2f1bfc27a2bd0385ec14d6af536138d10840d6602e0e634300720788010763942b149cbf719343bbf9783c751e85a92eb177e8d7c4f5123d855f4f41b76a606aa0a34c370c7baa97684d35d946a44af454b28fc9a5a710e395187178a58b23fdc48c37fec29342b0e54483c0a792388a30afae5870acee3bac86c6c45abd7c14163be27934e24fbbff22629e5232fb380de4439cc6e7e26d7415c7888f43dd522a61c4f5175e46dcd46990f9897b2f410acec791f40bffd36784d320f8f7836edf5f665ceda8c27f94208bd9e8f32e54297fbe7634ac0b3284625f555ab7d7c97f43133402e6bda05c58f759ccc2c3cca43da7d3b21346d179c00cca3dd6b40900a66c609967767d64ee8b37044b2b8d2cff08f9a2b3b51f938c514ecd7b79001a5c4d1461340372ce05153bc76dfa502e2493152da3cf3116689bbd9084d1d867bb1a12d57cf1d83de8d43a1e57ba0f9156cae19b81199243ab917d5ad27b23852a1f4023c000e1c32654fed73181c77ca9e0280b1af20690dd71035e736038ca99a5c2bcb4b7127fa4288e94bb78711415ec51181dc1e10a4bbdae478a02b23a24de915af705a5009790929852a96f83dab912823928addb0c5bee1600b7e1147eab97665b4c8d9c4b372bf856945ea711571ccaafee67c64936c1cc65d1053ea38a8ca6654ab08f7895a5d461f24625a0e2dc5054dd785bcf583e7e12442978062b21e568200027a2a137c941a12b6ee5a84411e51bb966c4e4aa27bf80469899274d34213ceb918d1379197d56d5f44c2ff70881293b7cd5c510015869c1f8a04e09a310a8d5d8cb0697bf73a8129286e6129b95aa92f5213c8c9132ea36cef376976a05d2da6b670336a871b84a6a0d57a31734e6abaeda12a721603e807436741a995461f9ee77d3fe0bd6eb457ed8430fa488ac9d4a87908d7b604191be44d92665f8fc3237e6bf56d48fb3b516f43c76fb4a1387e1e765eb9b04943505e248e3585e84a5464483d9178f081675e97e074528b25ffb58f451ea0a45a989ffd030e89fa27a0a3a2d46cee950eb23e975ae848a00014f9a898b064331f681f6c7350bfa9fa33e05cac966a1c113636c4cf0811c181c9263e7b15dd3f9b8fa3f99db4255a53ae6460e22b89b0a0eb9a474341514546b89954aeda33c71545216f45d6e2f8317068dbaa45ac5c51d0cf44b1928adf21fcbd3459542720ae9e27d0643fd6b9c87192620d806b4466fee63d485ea671a4a89baff71a33a5e5f360e4dc81cd5773fdb0ee84fe25e24d82b30ca6bb253030a753f8bf24a7537223e185fb21626b14c7b830070be3e3582717c46b72c6241ae31e43519e1be3aa023ed0d7aa88ee60207f0ca96b1989e9a72b61806fc2d61801410101cb83e386455509f63e7b99dc8073bc54daf5fbd9c6f2749aaa9ce9b7346372205217a6b921dbfd38bcff74fa1f46705c7ff5416c0b1cb674a28b0cf2ad957fcd49a4ee64ae230ad2a4f82cf2fbe037c1984aaea7a604b4160ace5c16c96202616ac4a81cc8c4cb999eaeca86626b0441f9bf99b6406cef869919bc7f7bc890352d4f3e37d8268c40f3294ae546d729f0d4411689c037c99108aa4b1b89b0be6b974696aad780697416b8c19251892cae8f0c2fe439fd16da760e67ad121ef8235aa17a4683cad37a3b6cf663f188ecb4118bb3935f591b8d906ed6659a6c4a083ba42ba72e9a5934bb3f459ba079a330429627d35726156ae73198f33a37fb2f708b262ec8b5db8935f0157226e43079f2ce65b805802f7cdcd95fd7892b3e31daa4d0f112f874478286040544187fc59f20d98b01b41b517226c6ee455633efa1444cf87025accfec109d42090790d59a6ddcd41387c78d0cdeb612859fd05bb23e918ed1043bcfe7e68ed22f84c0f1d78b9dc8e2636e74e4ca9fca3ca77e1d19747aabdb5864e64f276afe68ce51a9339c987378558886d96572cd483213b3da4c82a8396634879930cf71f9f965a41b9bf27ca519221f87a4a113ca8216b86b952850b1cc5bdb1bce60390b5fc386b5d0a0a7f94d394b4627dec584a13d74468c89c7f253749465df8700d48326907609361953edea888d3266c544a17213449243873f5dc5bab45a012c49c0fb3c80a250337100158fd017592e8401c67a6b25d059d8fd2ae637fb56af2e03f2f88ceb016293b9476cc3992c9ab990a96cb40c8116476bc5a228512f030f36ae7c4e5856b3247f34e74f02ffcc0778df47f583bd231f8f91bb030b253fd5456ae715350e79163cfd829f8c006e9bb763516a2fb6ee4e71180dc71c09344109f391eb4e4ff83897d083b411c441cd630fb2b18892109e2c34940b43a52906ab0c53834deafd27302f4a71d74b2f6ab9ea0efec21a8ac9282a6ccb9c8fc6a500ea0ed38b9698cdca522c37527c06e5ad325dd412ae019fd939b897712885f30bd08b021316271427ccdcb1eab44c513e263813dec0900b280d54b5a0d5c2d642011f05d0d5473410cadfd318bbdabd1eb40e3e52d4c50fe62e6f81ce4ad43d0e6ea94573432c0683a58aca8dbabd69448b2fce2491d699d6f616b1770c52d3e9f940f85695d62e996bd9d30201428191fb8b8d88b9262ce27b87158533ecd84e1948fcb53be600fc344d2ee43f6491d12569fd0724a1e2ac1bf38199c14861b5a4cdaa485bf2026028e09499259fb6e9a4636dee52d1f13adc1f59bf3f9813e7dd6f3badf2f8a0e434bce5a0a18673652056bc44fb98cbc58d36b3814075bcc0e184c3075d072aae9c360815136fd0f65dbb5fe9468bc43961ea4e89ec6d40ba80a7b06fc3c7d6b003b24c7295694bbb5e441f83705a7ac29c717e4f622f341cf05856059a960fc5cd24fbd4b622d08231abe95e0d2fcf8a54af8d615de33068902e9d94043547f0d595d13c1dfe71079fbb97f6fa463c0814deee3805b0a220fb35b7115857c82e24e652699363e3035b2c3c94df04453b0287ce7e993f1bbe14a25ca3f5e58c7b4290a47b3b9781c87ab306888000d0a02bc3fbe1bfc771c60831db135a5bdf68542a508b8d8c63dddddbc4e5f184df8df41dee8d3a140805eed56af83cc10ef15090f57fb40dd705db973cf391dbdb9a9cdfc4dc4e3f2875a9b1d64ee00d84f1a7d742933bb9efaa94d810131bcb55cccfcd32a8889b43e73f557a6c7e6523269830ffa4b1d8850f6f9093f640d3064cb65b20e8520b763ae37505306687ccd483269bd75582518179b871acc4e7a800ee394b0e9d3e936c734582fb061a1c008fb754a6fbbfa552549e1f6ed9d45f049262364398433bb87b449eb2a50e22ca10a7c3896e52b82b4e5d4f986ac05c7dea10e2cbad5878450a996456b7fd70938f68a8ee61e8afe0a582caf3e0cd2fed12faf64fb35eb6d043dc94a9ebc09302f8499bc67f8d57a8db991c79d8babd71269ed03003d5f499416b8035cf49798360c6af60c322a3363071cde79d00cea50f3b7a8d8e8acab7b5acf8214debf7fd1ae6788adeb496e7e89e3459aa75445f14738448d5882845063d98d041f2d554b64ffabda9c02f679133234f439bd568e21da456b3791c5a0210dfaa9f6d8e821274e309afc2ccfc893ab3d7f4b6bcd2dee2da57d809ef1023b19b8c20915a1abae4e3b5b096326f89ec45c4f20c219ab397126bd72ad7c294de01cc4a0c4231e82cdfc66687c006d6611cac466ca23e221d2bf3960ce06587493b9290091a099b41fcee57121eeb6289e6baac77306a5421462f592f45d0b83c9d32236b992324d085f2a92e789ba3fcc96e96a6bb3dc381a28c5341888aed89e30d2292f541bb8da0e48cd0a2c3c3d2d040959533a8df21fa4d44c06f2b762903d53e13133468401a5ff9c9c39dc7ba31211ac67373cfd95b42fb5ce59f0b09b3a347a9b965e1136ca073aa3569bd4638bafe786bbf29675885d1b8c0d80cc45cb9c275f55770c848514acb938f2c2818361f78e31f45be18b1499f1f9d1160992e6f80908f2c952e1efcaec111ce7fa59d9ebf9ef9ef0d5865eaa57c8aa8d427de1362a197010e970679c4bf168765fe9e7e9f53d2475db29567ce19b89832954b04718330d2b15ea6ab83255d22cd221224a412dd58c90de80c632b8763978f54efd329c434abd83d796003247524c744a79ce385095da52bf2fd554e177acd69d7632751c76069783f0e30c4e0cf81c4dd732079a3a71cccf3653b54090b6a8ddc0cb070139716b1cb60ba129e2113b307e23de6a58587d30a410ddaef8a7c07e24fbe06825b7e2ff90bc0982c376f376648696c423406b4531e935f2016c2b6a878cfc3ca572b22a844dcf18c1a75964def1d66bd2f2ba4124dce58f3b90841fa0c5f325da3eb79928a0508ccb388e9963952d66c757c10618de61cf94709fbf08467e839de431275593c8e9a5273927a5601b22df24198f9cbc7b3285e4f1b5c402bee2a11bf2c8518fd4d1570237a51e89b707720457b1237f1735649533185e3e7718a279c3678e46666b3e7fdd6f2dc1661699c06e7992915feeac0ef6d233646436e017cc3aec6a99889bac8bdcd1d3d5708acc6c47324214acd714164bfce661739afd2c12fb2be335abe8448e37a6673b9127c1aa3d88bcd0123850b219e715dae9f3399a43667972f786aaa99059284b18bf512ab0338f765a2391d985e6cd316efa43beb604553163e36d225a62a0568c87fd8580ef427636e29185cca0811fa6777d37ba47d552a0207fa2e473af6a13587ae668bdb81cc4a4e22ad50939d880a79426377fca23016b9059ecfb79fbf2daa38ac1dd42296402d8bba1b8939e01e1d713369eb8a1d647d624379a107e60160699a909f2af205da6574e9444c675c4c3131b2701320746bf89c32cb11f3db0427481b15dcf5254239ce8b8ccfbaf9b662ecbc768eac70ae27f535a8da533837cc419ec817ad624d76340f2961f056957bbca9957c55bf83ebb6f1c3e8a08cd40421fb5f217b49637109a4dae5d4673d14a2dc052b208451e1d0067c44715bc9b8ab500267dd71107baaa195ccd25243f3bc5258c3936d6310990392a80794f1e73e5e7a8cb7c3213252fde4548e34e66437bb32f1bcea5290bca98c85ddebf58290f954146474ae4cbaf2c936e6a1c69db33c6b5383ff44c0226def4c2a7e801b1f226ca35e203f0dd61d63bafa72bee209b7781b9060a87714d9f04a7f16a8cc419eeb298929318b04324a07cb6b802009fccc6d0091777fe449a843e4554327dd4fe84b5d0dd5e99b1ae43ec87f52565495abde489f500822c8c66c2c6bad84b33dd77a2d264933d55b5caca38d57c8e20729b84f963bf336554e3f900f324976945dc4be063dcd80c7aa287b01e2c08917d43533e2eeae344dbfc01d7316b99cce67cbf2ffc99ff92b05dbe561af4bf9074f0dcd01a38e150facc742677d3d6f6fc3ecbc71595ecdc2bf94a3f222df7d5bf390d72237dd8521c62932a0ff237511dc55f8319600961dd94fe29ea41cf8097ffeb0891d5f9ab283a4a84c51f646546875a9047326f66617c9066f02ae0735ce10c975ba2bcd333e5f45e7c1a5f9b5d7216b6f0736b37bc170bcf96e0a45f700006a7404f18a6dfa1768f73d0bba11a071847e81c8e68770ee8c806131fc134bb404c7fbc09cb8026e51088041e030635609ca36b042fee60d4692431fa5a082d0acb0eba3ba129296a6e5cf6d6764a0ac875f2360fd9c5481983766c0a58d4fa87361e2c2a4a20f18f45906f19ad816070710c843543ae3604a118dd569fd59ab7d69da5c76ce5e13e2f71e9acc6fa8601ce7926c93b69df9e4789f83cdb4325f55813aa10c924b2c550bc2038f3307037e0cea1474197cbcc2c10861213f7f0339779c7d5bb29b6f64a31a584ef52fd11064bc1919b654600f958794ecf10efbd1db5edb1a1a114dd0f1bd807805962f1e1aa043e05d300c0e59eed39e36aa279bbff676d375c7f0da868fe3cbb6081ea0733c9ede6b30b1da2d28502d9dd41ec26c0ba59b28feda190e2c366241be3d34f93a797f9226a3388e1ee7fd2fdd13091e2252eb0e821dcbc0683908f300ab0bceb83a1e3b30bd0158490f7289c3c437c96153fee3a4a5bea8fe3151c0a2dbfdf8abe5955899b07457b28231d2065b7832dda7457a03ab98eac5db04c32c4e8914ac0755a6ff9e1a7174a10167ad71e7a57aba22e2efc992e9412cdc7192d997aee55daa52a41b4a7a2dfd18dacecf60c23295189fcbc184c6e7e562504e1978ebc7a9d3b910c70756e8d6cd17b5defdc17580df4240f5d0f7054612f463ffbb42b9194dace7d614cfc557bea5ed83efbf231338deae6be90bfc58309dc5bda5d128e173f4d3376725f18c00eec28ffa6457b09eda4aeea77f3751c001f0260d8323228d9a5110c080ff60e889da31b99df3c393de72812cad84169072713cf4000b96b045c0a81f62ebd5488f5b01fd6a8c090d54d598d809c57d47c09827b9a61aa5ff6c9e6c1607cf6fe5da2ef5d63fc7f2d4833032141a9438a18224a8bba25844065e38609f15835a54bb7b54226d23040aa1085f2de603744818d79ffd23024a7883c27043bb485d14f22862c3c4a83db3354928821a554c55a32d6c183b3a4105e8111ed771b2ac8d2d329f0a02986bacc1360eb2fb88384d297076ef3e633b95bd2ee02b678b262b7eb382353b098ad8e81bf4ac0969919e40c9ee7fa233c77be76d2f53f327c87d32d04cfea7c10bacfabc30b35241c234dafc4e18744cca510452d2d95c1e039e0e293bd19f38cc15a304f46edfcaab9bf77227ffb1147ac48192055a590cfcff28c07d318063d723752898d1ad32b7818e3e2eab30923afeb16237276eefcd0775d3d86c903e66a5358fbe94ec718185baf27fa0f61132b431968be5192ac4167e67afdef81611000f205593761e2c5ce6f968c9e1ee2bdef9a6b8acd49ec841bc4fefe5e5df43b202c8e1d867da450e61c9cbcc2d29951ef9d36f68550a642c0bd471a58e551fb673062b8fc31d8a707c15e8a2ba39636f7ba9ad7e6d55c08ebd9b3c1a9fe6d582f3e86f10e60d65a8457c8a17c57260405fc6cc2a09f84bd94c8bd8263396e9d1ff909077f60077f600e440eec2cb3c8d88e9d26832aa3cef8af6b85f4a504cdd55fac8decb197763d7761b63e2394990bd3f1d12333e12a06a72b5c15b6023a565806d5bb16e2a55f62873b1b4f903c9c13edee602689767d8c081b473918ba6262f0540ea9b8b280efb7f3cb6fa44ef7335e0bd5a7b695a768387044ce9dbe913adf4df1c13107b6f7dd574111deccfe8ba8e3fe14af0a5c3cb10dd273ba904eeea702c717d50be35cb6d93c739def1730e31c0e650b3415a569902c7620b76a97ec09d14ba3bd4eee4e6dbbb0b066084e6a194965b285282a4889824ab013cd1d7535fd68913dacb783e46db2975f4e4aac967f85d0cf54956dd53f0233624aba03a83d996091342f5317a6b1b3e797fc8da2a0a81bcfcae25a4092b9c40f7b85db10eab6ea591dd8bb61127521820d338080f60bb0943d068f3e4beee6bea44cf7cea0270794bca1678c68a28e9b1721c4431214778fa87a099d490c9d95d4a990f6b92e2d079754f383b9bc510c124bedd676031023b1e6e18651efd5ddd6ae68b0c2ffa205aaf662530e1bbe10f8e9b5532670426aa1ef0d13de35bd7a929178846fd297f111d7a1cd80c8f4e380b36edc5760c8373c9d49490343d4c878bd8f67da3a79880fd81d6cdcca2eb3cfd71df28aef8a24dd36190380138fd03247243ca6caf2b22362697184e90c2848f0c47212f5695540564de3e58277a550dbd82ed3492b1afefe58f53e251ea811c34dce5f3cbf6091382ca009464958a1bc677c6717e6038a5484c49fcc33f6c5772d8180cc3ea40af34e3361286f71f5d04667bad2ea3dcac954070c4242a64319e90db70cee8aa35a29a668685272737712de622063de0a931f4b433799ad11eb8c9b9551dfaac05d40552988666c40a590f397de594290015550de7f17779b680d5b1b8cceba0f9623720044962cbf2a86ac63040ad2eb78c08904dcc814af71d42e1e538195b5cb3e5c6224931d71231b7b9a9f05a4b7a1d52b058582051ab499eafc1e013b20e8ccb9cba49d2e353005e96959b30c1729a5061e98108cfd5a5a0f8b40e02b1bde9f9968dc253c22048db69e867caf13c6017da742352d263d9832bfe7d4940ca8ffc391dc01180ee2fb61794e0389272e3b456f062057298268b0e29996af99f702f7776bdae694bfd8ef1329a990db70968befc4da00f369d9a2d1dfff48f025d9bd6d54d27bb4ac9e16e841c0a86302a4a1b3e733dc6eeae0ed7a4628389518c38b0aa45d83f4d6fb1f0ae972c73338cdb4b1f397dae4fd17e448f76c9cefd3864b054f3a37ca0b3841292412375e74c313cfe9dd7a7eccdd6f8f573c2c9516a897a401740dd5054c745b1847de75e22c420b7d667ecbf5b950f16b6af668d1450fa1a67f31af9d06a8e7fd0ac539af31aeffddddccbee9c8ac85fe9323b14a095681a82c86c5da25f981931d42e81953b362f8df60db2b7c67473f32231ed979e68f6ce1bf2048c695ca35ab72f79fa0e16d1bdbef293bd7a171aeebea2bd76db0f495b4e922228c7403d3cd5ec99542fb893350b4d12442b19cafd35d78c3234f0381cea66dfc0eeaeafaab3c6c115cfd06e0d5761c3e9bb10432d454aff4a9d6a749c7d96f25fbd5f32641d5bc23e7062fd86ff749aa18cccef46a039ac08b19511eb27377a0464270e6df181171d7c18b9bb95e3fc97781d78a1f396bb17c016e5cbe48f313bd0a78c1425240765b09407a78d2675e74c50d2e7074a6a22fed9f57647e014448e9e488bd454954630195550af9fe4462dd47d832ac5b0ca70a39091040e9b21d9cd2a2e8f1cb02b6ea344b9cd7c14b23971636f828bf6c30807bdb78955fe0e9fc58b0a7ab5d384f6abad6739b9c313f1b7d0dae7c0fd4a7f309d5466337d2f464d636e08d131876d6026bed920d424b400fb2e223b6d02ed149eecad5b07856a5d91c4b12b524272e4451f9ca9548239cd6f446b0fff516f1ae0e3e4223d17d853759b229f5d95542010a488ff9bc1d00c08951747150894ab6b56150c0c9bd1d5e8b72f6dc42082e52c64224381910ece5a144ec04c9a4e8bf588bc1309e6edec313b68ccc548049e7f069754a0c8e0babc607d5adeb3e3c7922c7822eaf496c079f03c1f8acc23107311ddcc11ef4c1d3c12c41ed5e85e16c7b9cd662edba397c0832f48e6cce0222de8723e3298bb69e555a5b47a92f99ada6af6701d58d3ce7ff3e08ce2a135f358dc4e5421afbdc5f1e4e753e0293e573fdcd1f39d8ead1082c4f53f7187e983f9983bd2f52a8f5d0ac78e55c8443fa9a2db74a1eacea303216e7acac03f0300f12c76b3f5e575222fa63f2b02ac39198249f317ffec9c1578f3ea27cd43e8075609e065212d9b7dfe7d162e2235f670dd1b4cf3b2b2b8ff94f84ad9eb6f9a03d02b570b4a16a219e7e54bef7ee4b5d821fafa7574c90b0bd40c2ffcec64a5dab57e3c2a4e9503b7803737eff09ce6270c9b81df583ba33955223eff5b8a88fa9914d078e1a3cb7c6a62d58c967117ce8c66346e3bb69bedcf42e106f74203ea631bac148b00efdcd001712ce2fd73309d6761e224d082f5cff1ec506d9e6124e15ae33293c9b3485ed74e7c36f44293aa4348d2bb3e3fe0086f91f57b96c269f5b0b6ff8cfe02302a870130789a5a5008973e3700f43ca330758d160466a3f06c6f99f2f904aab52701eaa42afb8b68090b79f1d2e1c9955ca633c08b887834fc2dbf9929e040dc8f4eedab844065febfd975e03b7db4f8715a8b93d1c8ce7c66871df4592fb15e9ede1878c82245249249a30440789473cc9773cfb5a23afe1fe8318b12f9148af1e6c7a0fe1a207be34a124e86547625343daaf467d3b017b167679137c097e442d645fa2187afc1b51f8184d615fd4f88bc1e46dbc22b2e902d1c8af965619377d4c29fa91103896355eab33b3072e659e00b18a805b70570adcc7822949eaad49a27fde3274c024e69072f571ea6ccafcdedc418efb696718bdd7084982178882d2d618a4986b44109a7ee1a6a16e336bf7747dac31154d3db467ad1c48531deee5a00c11a8bae8abde663b3dbd043faed3027ab22db077ba26aadbd6fe6dab19f5e85500bb634258144a3b29e1b6c959b634f9838c0ab853b425990062fa0c2705d7e94bbc8759c1f3e44900bdc38cc06058657ebcea040d5eb80798b2224b7a4a6133b8f9383cc19a85a771cdabe318316af70fb931c08d253746bb8df7021cf2c85cac47908a0069257b6b2e6ab68337b858801af049b9b8fb6662323568eb164baa04d58094a21d9a782b083239d18be94daa34806a20eb3621b5564743236e073ee4dff0aaacce8ed43404efb8d49e6433b64ff6779076b384dbe40e74cff2af586dbf0ddaf1969eddcfe6a8c29d64520bf5663604b77fd203102456a7a4c468b04e2939c1d772709d121b50809fe727a91a752ef19dd6131101109cf71fe0ff27eea6e4424a9dadbb34afaa08f5bd0277753ebb7bdb3e1600334308cba67562d57ebb1fc95256328c9789409e08693b4024edfdf634de49d55344de2353511e991e89bebb846a5a8ed6e1825fcbef5f516162c274a1be6efb3619a60644720cf29d1747629f246e67836f0594e541789174d251b076fdae97a5f4bd45e415ff06369ca817907ca3ebae71e898e2223e2adfbd3f53d7dff5bdb7a7f47a9411324ad4f1056e0b6886da535d8eef963ff61144b6632ee51ec703087a48764a4b5162008a210104a21473bd8143a5ec3b36d61f38a50a2ba4117176b30fe71ee4fba27b74ec57c5c21b642f6c0ef8cfefa04de1c9bca2133c16f607fd387cd5d408990499ad3a267b061ea1399c79e2429261556f2a330c71538be4b63bc944bfd163be767447170c090f401417eb32187f12a121d71566c9ca7733a4602a907708f532233860564187f83f8f10b977e6637c5e0acb0ea7abb42a1f24fd80d69e91830e26163aa84777255de57801cf5a4f29d91dd93232bd1e68309c432c4f93edcfac0ea2adca08df3544d2f0532e1b0b07770d6d1383c46511aea36b8c9ccdacd6deac53a8db1553f8ec7c086ed61e761bb1dc1f1caa6bf4105b8d4d0f1c794915315900804be7668145c84d2eb2c08ed84c9b5dca00d519016dad17069c2012018982a7227bdadb00e4c54b9214998da34f3e5a1112ed002f9fa745594c3b416947f0f73118c9ee5b97d15881ffdeb60625bf2c8c6c2bb1e540f0e62a571a0c312f70a4c18876753b805e6a7e98b988fe9fbfb518617fc8f8f1687a1e9203b5e8d4efa43d0e53daa3adb6af52205822995c757ae1f2dca2365e5710e241be2a2a869d28c1028862ef6622d8e0f3c62bb2fdbdb9f7cf8b1b324161c40288a7cef1a1b89b1fb3f64152b15ee259369a887099ba873e1177b6b88fbdaa048d3104e1c26f03087b515d2b8fab239fbb43de1e8ab815cf75ac363f824901ba350811b28e909b9bf332abab952ad19cfff94906181abdb5124e4271cb5cb47b3834b71db89b5762156ccfde85040931700e6415fb6e2ed07e2bd6b64e36e537726c8cfd3afec0b82a5806da9d6abb4216f73c6110ce4491be9084af50e20562abc321f86f7fe26c960a701b49419e6e33daa56fe3b6c78e42c028877797dbe8908388c0130d7dd89a9b57b7c47c6877e82b7f381e56125d0c2084526a64f86db4bffaad12fac280b0ae5bf53924331ee7d887e8f7cc4d2d30844881366c88effd9cb28dc06524b6182723abff33df45207a9f0c461aeec25c8c8e1b2c2c7b1f1143094906a53b20e78c22b2f428b1265fa89e91f36658bedd3e126e6fa2e270370f7d1783d85ac5643f073c31ef953b82950da046a69aa16f4f75eaec38f92eb6ccd9cb01178e8bb6940a146e241286f49e2dcb503239b009a9ec8edd162d7bdf12e06f76eeaea4755eff583a630a9d6b47d92aa8d1a8749e7e5e47355e538c3badffc9268fa8224bafb58b7bb1c8c06867713390b1e4c62cbdd6975a657ff5728fa138ddd399156f430f3e0c7f4c695b28c9bc3fb44615da7d031f25a521037342d4925701189c570aad0a1dae5edd2c647ad71c4ba6fa15134289029f0a61a8e74993b3847b1c50947a17527a2213116f9757fe3841f152e19813caf127a543ba2003e05369e93701e38ea83eac05fbbab2f65c4cd40ee9423db7604ed1f9066eff709c844b9983e20deec1706350779fd97924a1e533b19dde14b283bc5074fbf58b58450c342a40cb023221513def13af239dcc1991751443dad2c10f1cac4d6414811aa68d13a06ce819116782caca512d817ace893f60fd4b2781a5a8b100a3eff8c4eb476bbf0a47c15d4451d79173a225f26ceec6badbc7453b40dcda54ec85e33a05918643eb3e1e7d47fbfce622a7fbe6e1e4e0d368675af49b8efb3aee598fa8ca2a03f2a510bd17e40970134c68db9383956536f2261806c3c40f2550f294807b96c0827c6a26bb71ba026521a071daf219c451290aa6f0dfe8476006f60a249c4c1f1b2dab14248a81dd2a1f5d9a01ac42629ab4be3047aaa873b86736483262f8b2ecf65f3f03f523521603238338dceaf055e3856c7203964a53922682145fa6dc8d6a935ef135c34cb49294973074c0cac2c46198a9c385762b6dc19ed8fe01c01231d34eb9e56c2452a1c1b0beabe149ce3dec16b371f43efb55e02227a5c80b78447298025f317f10f077e770f693919c74ef544089fa94ea4d03eba5706d3f617f972cada58482c4fde4477ee1879a9fd601a4c62ef48826cbc979fb0b0daa7090fb1cd34116c77a9a9f8728ab47b8b74c488613bd2ae02b31e647464a991031415076199f4c4b032a0b56f0b64b57ac8a9bbe2247a8c04eee83c5be9fccd62dc6d8211ec33ef8bfa2a74f66107711c79a270486de15f7923bfc82e22baf0273a4ef2ac5e305fe1075fa27863ea6b8b708e428589d2d57767bd7c963776133ad78b70203ee1c0810322464960265252ac7883e4ed722a2c8d158e4d829113e917ea913d5f379c0c33836104141c4c10521efc3d0b7de99607281f65d85588e18b253887b39e13915ab3b1d495094c89053b7a9f1979f419f4d76cc307bed27f00b59b641f7d2ebfd0f134461c634c59292106ee1126d412cc3d2ceb8d086389e11fe123498cd8246c1c508f0ce2abb9985a573262af6f48089c798d673af6615ddd2091dcb032aa192876f2ece24a51a356f21d88a2bffdf9424195c098a8e49815aaa259b2b7087f7c52685295a4cac8377c15113369d73422350b496c452fd86925f80671c9ffb38f529d57f8eaa754536e223fd6c014c3491eff28daeed410c3b5160ec2c02858e6d50c858a614068084c647bf76cba3bf70dd5311d52c860af148090e02e033bcc4ae08f0131b54a5cebb32fefbf89268e3986e25162e326e6303898b618a6c18db71eeafd9f187077393a0fbbb9248db01669f6845b7ede37d02ee7f69c02e7666357d7b6e1c28b98a28bb8f46bdee3fd8eb0a73d9880f7d0d5ee06c31add963a93d206760b9785cc513c2972cbc90ccd68d64908bae08ef4b042e123025447e86334f1b427171ce5ad519837bf7ed92aa9631f41701a0fe762d9762f9e4b93cee48ce8082423b027bf98cf02e6aad3a8175ea8bb645d536469eb895d5cd47800b2b56c641104efce22203c080ade66d2d39e09cc1e84542a3ad5de8b8e61d7e93629cd7e0e8dc463a175e153d1dadb1fddd95ade945ad71a4adc887f34bab9e01cf75b6e87a6a9e6b919d69a128116253195d84a711db71fad9813286f3a79798566309d8f0827c1f6ee4c715d0c6c8e0d6b00811c101916ee62f20a225405183ae7380d7151a3a022a97905882633768a9bebde36184559d271640fb2a59f5a3ebb5742ba32deb326fba0def54c9158cabb86d66c2d54a76096d1cae12824c6002210292a7e6d1a0e17b87d285776b6d667183191a9978e83857764bb077d67053e74062487c7832ba9466ab7d704ce96bd57fcd615f2d50c6943a346bf2fd71ff434c165c6c64a7492c8d5df1b340ec006514e85a83a36c532a0c244af6c6d25504f26976240b91735223dd24c6b44caca1221189fb460f738d2dc5360e2b46ef96824325d51e7234821edbad771fa819de6eb6d411c40d2610cbfb6e4353018f7bb7ee6f344eab4cbcf380eaf0233cbba1788058fca827208482c3491818923be49a2283ef92d2065026d730034ad3d07cbbf5dba3d13e04dba080d6e0fbbd0b345550ea2cec2f54be0457e716a92428d17502110709f66efa9da57f391a7975bc23fe052f8745b3b943aa05adcece256680751bb972ceda44b4fe361d9176e3bfb78cff4fb834442dbdd617dee23b63de015d6fdf54b1c5bdfd2fa3af1573961d5a1e44d0bf822436e30ea61ec2b3f63ce7e69f685f84b3404f7d3294fd2dfc6c9a526b6aa258f91fad9a4652988c86ba778407f80e8adc932dd901ba590366af084d9dd3038ac45df2102fe762bd759806b7b5269a5d60ca9cc7414239c148440f80fba5ed1c4dc35bba7374877b731173210ac389e0c80959d723d23b4778bc435143c8c4a1b9258dac043e4b74bb51b412c1dbcbb5b4738fd8f9b2547b98415e056512660d323d0facd63ab4667fd5559b075c6d7356b9b4b0fe55d8cb136a2c46aa98f96b35505c9b77eb2b55472fd6846b29ba6bae1661e92f5851e210cd219f835f85ea87ec625baeaa45246f6a02e3b47c3db53be3a111b37ce5a989b31cc5d71013523f300e64ec6d24419d6b41e4bb1c6a7c010d8d9fe50d3dc7165eeb789c35b7fe1ac31c976c1b8a4eb1842927117c75a4cdd69b3fb198295ae2e74d7bf8b185eec04bc23d8936a3170c52a1e1b5b4dbe9288ec5ebf28b86ae23f3f6c3d8a3b8fa750e5655c0ac6fb8e23602beba7ad04cef67d9e52bba6e2408450ea1e6cdc1d9105125f6e2d046d241f803899c5c8361fe71c3e8015062d9ae143b46c651928a755a8649bebd6076157eb7883fbee020100331b8f3418310bfc47db08eec2c7d983c37bac5020557af2d27ed4abd975bdd0011df5179065ee163df9a32b69f4dbd35bbcdca23652e377e45612678513a258ae1ed309b4870c83c95d8c33d89c0eece4c465f9430c241fe6735f2a65b795e63ee66e9cc7b7b4296ef4567885ae7113f0964128e3b39788d87a12b118c57214611016a5745b60699285c7e38c4c25b3b2a1cc749e0fd06121a6d274bfc257452ae5a80f9e320ef9bbf31e78d78656456abf337bb4cf4140cd221266120d4e9e0c7ddb29fd3d6806d38b8ba0050ee9db80c259b643509081f84d41b7fe90bcf0b2d144b6cb8525bd01552a7b2bb22f1155141cb7e811f9f7560c978b405b37b0195d97443eee1ba9d78c25bfc880b2c95355993bf661596ce3a3ee52727c809cb4e4b6019f76d0cd8355ec720a52398b3da80c7f531f5c8aad71cdd30edeaa5339f57c1918f8e8dca2d7d0c965c97820d1f1b4140518fd39098e2c32b446857e7d09dc1379521a4724e44952f8cff2d4c42b0252e08f556e62f742795ac23d84b9812673ec083a7c47967c62f2f768e9e984d9d5fe8ac7b0407e99dd858d889500e1fb47da113400d2b69e320f2ad1dce8604a3372b0e12ee1f3c702d74bc0a8a31484a97913a4fc66ae95016060fd3eda9b23da9d84d97d85df8ec863028020f7cc71cb6cf21cec3f3ad8a481da4f697b6722ea308b1984a9e0ac745b599e4543e69f210b95adee1d151ebfad22ccc2690c05df5a35c666fa2e9a75d4908c372bf457771ef51027d6f1173519a0230f15d30fbb27bfb7b66dd15ae6a22e861936c8c0f8b00d20f6c176358a25dd4c5735948b84a716bcf5372957824a3059a99b168b1e6428a16955cb5f82f864f7bb5b8c6c98fad5063c285b285f9e1677c78ebf0e0f0208d16928855fbe3bca29b2f0ab066e29a0dfb50ce89577d2b7845dd2708b8a42ed4e8c4f6b941ffe302ee5c78b1eeff3e4a47e1f656705eb45fa28e02b75f16ea6c3dd7b253272e33e3730d8dad560f28c360d169560f2e519395aa16e8a92957bb27e3133e4f8a14b9eee7e016338cf78de19b533b2645de76582d6f2d4353b2a21fb9eaf29274f44fcdeb0e8385013564dc1fcd730afd3f1fc29f885c73a88f3d0d991793d1c6d0d0ea88021997e3190007eca87b89467aabc87578668e532ae3568f45aa43b2c331ec4c0cc333f29b197f4a850dd741d29bf16142af4864bac63dd86fd971d59026a7d991325b3501b4061e2e103523f0b73306d007a176ca1306727ce520cdc9fce4fa094dc763b35cf53b4004149b35ff86467d063b8debf5c739eba9c08e5448301d78581f026bb23ce98a95e5daf2ae16c92a28baaa4d91524e89d727a8235412ce20a1b985eab4895492c082adf33c735e5ac950d5bf05258b41e8e69682c4305be7902fa75c642a460c2485239d52da7da9f50dbe4954c56094e7140fc3910d67d1945e8531011a364d77ddf550b2847be2de1518bda6e112b4c40fac1777871c9fc0212744e9413b227a63ad9f09a6f7f6da478f095c84cfd2cb51145d1da42b288a15db516cf14c8af610834224235c4bf245e7f2847abbcf3114b7464ccedadbd41769e33731b253a0ea80fb2ad52a8d0e4c995055434824f14940468f613fc936eb0d1dba388196c4bb0501a30de7fd4429df96f9e11e6636cdf4bc87f4c6aa3246f9f668f97b4bea46eef53d06acab257fef3f2e11d0973882a510d598ab1b66a3af6ca6b96e2b86e14fd3845d24352293b381880f0bad25e819206c170329e4eb17c300fec1c09746581833fb618e01283a459a44f4946c20f67d3cfd61e6ce5db3b18198f8367f2794b381b879f3650ebb74d4a032007fd92ee00ec0107d95d8ee3453b9a410a33ad845f199f381a8849fe76158b45f69c3b77d1e6ec5140d160969730f93e95d5bb47bb074849a5b1e92683c49a458d0717de33c6a785541859d8952089fedd62806849b7881d33975980cdfc3976ce1ad70f3c8d60708bd41210f91f4285c9f082502baafe22ad0f26c127e475ddc111774626956b1c17e8352691271a25bdf66b88909f7b75cb7625bfec09adc1a9b8026110d8036845df0199b35723880b32c27cfb7451a6a78245072731f70f7110e1602c2cd7ddbba9c81a78d606b53c98c8528e71d77cc7a2d330f983287b1b0ef7210e880246c9c11c2806e2bd46ad02f3a4ef40b4620892216224284a84d207166e47946f4f5ce1885cda3b08e158dc2cf25720b4c573adc42785068a6bcdead51d3d7244e0025b85be4e3a98250090d86564accfb8e5b4639a63ea1cd79dfb90ea8d350bf53e313607ec5bf46ec5ef8ad5a46f641b564aa559b43692cbe6193bfdfce0bc71fe12d6b1b2859303456a653f74076652b9d4fcdc1f44b1c77b55cdc2ebd5cd37f2c8e1d8acaf0c56e662526257c5dbf2201479f5e46558145ef04e82ba5ac44249fe41d62ba25976fdef1fe69d98f8098c7de48e3406d443c57680470eeb75fb95b336d2886e2c047db45c3a6855bbc0923bbdcad92db28ab1761937f4060730819e58521fe82dbbd4cce162fef034d501bd47fc47eb0db4727ac04f5397b841db151b125fcf432271482b8bcd3e1fdc4fdb3908229b3548c4f22f1d58ad8002b3cccd31594f06d0fb2d494c9126a40577340c91c6c5641433a77c6c47d10c58c9188c3ba658f2851d0e0f920406925301ea2a58d3ab8aff0b20e1ee56449b62e52c321c344bf73b9bb5a82e46ec1d8bfba7649994d7533361f4e20c98e29dd7d5acda320a1599350c7a0c43f00694a64dbe94dc54e4cd4168877d7d78565b58304728c2a98360460adbbb9100f9df160e0bea34a68194f9352456ebf5115b63797aba0f5e41beb3d23cb126225e6c96d9a7b1b810e1de08566693a785038f4303516cc933ec6236be0836447908c56b766f92d68b050893e13fb5494a8b14a29dc535612d0eaa9162a5997510c2d1028f8d7d5d15deb6ac8a8e3d7c4c87ccbc5c9030e427fc6f8bd630fe0bdb27eda2ffe9434418978b5cf89783d6bd1273bce561b9ae6b08f04c1244a82500457238249798b37ed95cbbf78273de7c9f3cb1bdbbcb7b1fec767111e80a06ab0b67fa86c22861c5559089bb962ce7bcc2a43e6507741b1485e5ae895bf52a9115add94bb6320e9f0447c92855900d6c43b37c84db89fa2112b2e9a3786c4f0148bb37a4f1de34204d2e9da4e17be65321081e0fddd080028e6e5dfece57cf2623b3759e8426de2d2e476be6d48f989393b4b592978a5afb35278759d75fac1420b6eca4d8edba13ee1c23aaa3d6361a77d1033b136a87628d419896f7ebc5752422d1d6770a48f5cc608ea62d3ead43a20e6aa628f2a140142bf85c630b756f4e90ab1dff0e0d7b04c4a59498b51d46c82972a6cbb6f2dd92ae4325abfb9e4656c3304e4dd1b7a62a8265f1ace59db762844a80057939e64acaaa286063d6f7d7bb33044c15f4f6b00818e3e53002cd5a3f28a5343d11ded1704d3b537096d5bd0087af4e8ba2dabfb85ba5d25b735c216f3db702959bc0bb758b4283bd60408c4ae5a537cb0c0c6d086f81c8df826994aba1d854ca8cdc0f1206a74e3be0e18bc8777509c42f2037b4634da08fe37f260351c4d1296449857d117af38510c52fea911160cd605d0edb39b761f6ccc3697143a5e1531cde3a84cabbdeba7aca4e70ad1b784e8e9a6d68d3a76bc25182e6ce943853627a3ca992e26d323241a38a950d414b53ef6f9770c8b68ed3c2a69594679a25064669f7a84c3cb046aff546c9f80ff357c7401f5bd4c8f5e716816b3810486bf765f7c8e9c4db47318042b0e8a2a51b5a3e3a8312a4016db58552320821d0a27dc1b61b332de7c56bf033bab50162d8062c8501183a05af301d59028a2e8b20c00637fdd4678c6473cd061c3948d0abfdc5563e9740b7cfd1438c8c0089dd1439371be43ad5a09cb1537a4141a0ac54a2712fa4e50af0dd7162cb65ae642852f759773ed332a5e39e99bd19a56681a145137e4479895cb3345ad20a3bab9f7aac0b9d76e541008be8304ecc4c66b91d036d343969ac58e0a6963374bfc20d58104fd43741a38a417f14847387095e314b1782d31d137ef46a235ea70c280d6ade38fffc0853cfba294753ee78cb4116d34464003e9a8173abb730bb31037958043acea49644b0133f61d5653429468c6ec58984d88f5beb0fd0d138ca635d89364f1cacedb987ff0da02f69a97a610af7f8aef2beed50b029a970d7ddf69b2e93b6cc403ec817879bfd6a2ce597b5f73c5b2b6fd245d112c60ac4b071107f93c3af4e25446153c21b48ac21f3b812bba1a88f4127784adacc5f74e73919c4dbfdfc0495c41d5b94ce7a2384b431cf44da401ec9b693705c2b45e29bd0040683c2bc10051b6b1f56e195363e11284b59f295075ed3810426b06451ccc1a4087ecafaae9ec54ba7388d4701730e7cc612a1bcd0e056a86e84a499e72d136268681df85dadb2d0c05d48bc963ca7af4785c367228a6713f8cf2849c87b43480809aa8181a98f275ad942d871e1cbd0f90578c52b6845343077aa0530a450a39788255b2b84c22f337fd8746cfaa185cfc544a411747983891b9e0a450b5aa3dcf86a961996eeb841944488e6917f7071159c9192f21f16eaa092a269b54333dfe306530a8e31b42b3e573208c2b0e51c3588297274185486774ab9cbe2e3d972293360badfa39306d02fe372be50e05b78fb500d20a39f538284ca39c50529610830968323d88571725e0642d11cb2aff15654c18750d41b3064e044568965ef240714d3d6079ab43a1b1fa76f7a6aa1cc69407cc76bdb8ce00c917e4411bc946e7ffe52a3fc203a48483cd5cd720f9f04cf81f7a80d928840b38726681b3e4ab34daf2c195d29577c6c604e8269908ddcd0a4e46199b0377cb09845055b663aa8ec76d0d3a22931f9d769770b53c13a431e56e1cb54fc2883b89af69ad47788eee19a46761a45d272245638a130a84d063618487d5c12ff247c74a334d3bbc747dac349425a16069cb6b032210f41c29ef8a545381a660e317252123c4f618a19c0f013adaf2aad820fda3a168cbbb5e9d0a5c6f9c47f11e7fa371c907688742cff1ad93545d0995382444e6a427606b8e4460444204b2ab8baaf4d2739bcf85d51fd39c2542ce0c284e1922f663994d211208f673244a57d0187b099118dc4c191c597bb9e34a28bbc7a766623240b704431c323660c914a9d6285d84d22b5f5f46a007d15a15270bee2cfbe8b6c7b2b07ac1e5f240985e92dc55aef1834dd8959315ad309afb40022202d184a17279862e6fbcb9f6859cd520ab9e5f934176e80547554d60009f118e7fc497356e3a22baaf8247fd21f64ad2163f1473dd6c2305f734b16b2732ca39da4d77600bbe5dc99d77167deedc2015da9d571436a6604a50f621ca5e311df9a850bff2dbc471295af5d3d9961a71567a16145b78b86ec1d759b2ea1513a0ad0b7f2bd81f54f48a99157509f04705cbc7fc56ea3ff7ee4a79767f1de0e2c7c5ede351fd271852aad6c5df47525286d3daaeb2bd87fffb168d23301d400fa148fe0668ea129dc3d813675875b248d26ea8898a80bc1549c403aa51fa750e141a5b564bc6abc7043b91bb86be625611006bf27a780bbec0824b93872be4a12f20b068defed3a3d8550d25843c62194908b50c65ab3691e435a6250a9c7c0a82f5d50a455b0c86c22a550475efe9ea3f15d2727605d992482cf016139844d00c80bb2c51256fc5ca136f175b5b5827dd7b5295edca01ddb086257f10410e7cd57e53b2876507dc24064edb1e16aa44f64004480f9d1e9d89b577112b139c76eed8572d296f9db85da34c6242f4d3251853de42573f993e29e6a4baade56649512ee56d54456214b1a22d85dd92f115b58c8532d9e28f74b4b78800fcdaebb487841b29219040cb58cee9fa030230e9aedf4825b24aa8ebb80fbdc9704a465e05ac0451a2dc6db77f770ac84a87884392718fa96325c76291b77041031b51676e14c94a38b9831e90152a39fe555682923ade92242bd9e18f559c9c7b5399e7965014d657e28684ef0f506f34b9275b4891a548b3023f88eb4a0c189fe62cb05a5a1b4afc731a524d81d1f9d249ce9a8282182800b9ca538b25f4b7b635b83c6b70c2f68a960554aed8d98f61467c284e96e7620809d65d7336edd7b1db939c019d9132207cdc6574c4bb31abe3b4d2fd16fa68042b5f83b79c711be8775fd161be2cf4c619fda6a00263724bd061b962578e449da1389461fd696c3d3099debea9555fd9b854f773d561e2a680a599e2984709fbd83a937a0f0450bfa6862d3286b0e507fa958e616612b0006c7d420180dd91805110856382cd2349d70fdd877a791431a1e0377082707c7450b40d0c22fed48cc26320de71f0e1136886aec7c73c9dc67794958634f4e1e15ae287f1d9040243fbc3d90b405f3f387f7148dfd40b0cce19c4bd6ddc075c1f8592240f0cc3afd1be72184bf298e65836bad9b84894297e61885a37fb47d8404d355ac02cbcdd434701604167886e03560dbaab5fb00dd7f0b1f0c2c922af318e126031a80ead7e883454fb6c94e340bbc95f4334ecbffecd10110a4b429f01cd7aec8c23bf9b8d33f4955c0ef12366f68158ae6d55519150b2e2ca4e7e85503a5fe2f807fbea75864534301fca9d0fa970cec6d1bfaca8200b2ed8a0c77b5a5df16db2015a3de0cbc8a93b73196d3078757977462b3806d61d5ab12bac4568dfab3492ebec338056bb6b343d2c02ffe8d05bacd82a680719ca952641209e161b9b4da5d2629862da31e93398f10314835a0ae6ee790d5b7906c8d30974a9a0cfcc2f79d735a649014f47c47b946992d0d283f4e9cbc82d8069432d1ebd063a25aaf8ee81954f0ea1032250816a4fc1b1d8b46fcc5d4fe8529b0dcfd83e00086fbb7a09682d0b1f29db8efeabf59944fea6ebddca75c2fea25b3698d8b5de36af1d4238d4cdd61cd4673c2c76fa8e629578517299be243e19873b046d61a3caaf60f4ba1f78855de5101cbc82b0b29e64db86f85a35842a6f0623b278c1d9ed2e5097c6179c4f3f85de6d49b9f85314ce61468fae87a1ec5d95a425e3409d2a02d470b191f2b16a7600b04444f22a68e3e8027c3739e35b07c92a4b043993025c3411e0ae0ef8acd99533c968060a32b67f391a7a3b792fad503e7c8bb7652010550d897421e8bb112a83b45a92b2583830e244e36902aa740a5188b23b07fa56c337f065d83da40357be5faee59bcb0d0226eeb1d34ebec15608049fc5dd841dfe1cfc9ba59512563bfb06e16e7e2c6f3665dea0307bbbf7b3a12e9ff08c16ec851e7dd26fa06530266c1681f251968807d7c63125fef7ff1b586a092627af54da8b9b7d5d0b70f066565fd8d2459cc1552a4c030e1eba8813879b94996e9a7da6508e0a61efb065bec5223dd6737db8e5019024bf2973c8749b905d240138f040c38163a2e927c3d6c8ced81806445726cc70101b70dc1a61397eda6f1812de6bc5f4e120ae8bae222d95c4f303ecf6f96f118ca96e2aa8aa26ac05a36fee31d78bca003d1ce867841222beffdbf06afa1d36b71040a88b4eea53233a7c1f23f4c688830ddca136990f85c1674b0abaf4bcd8b875bdf8c231a0d3850542f86fd54ecb022dea38b5ddc03dfcdac9f6ed2187cba9b17eb7dbc0e23d2ef58161226d600bd341ed1be8e7e70312102e0d4eb44f8b6723138b9fd0a390d4836905711ee09e6fa3f37d05d88fa3bf92222a7af86bc566d25c425b46191b0c622e12a643d4f5a827009bcee86237e2aff4b9cc4273750bb07243e15bb4339c1118ee183541b73078a16365f8b15bb38c9fd5b4ee1c3dc08d44ad79ced1516c237aa64fcf175ad4dbc33d56c5740145adf2fd808e925b71538c2de99c45c1fe7a04254e2ecb7a60afc8d52b72b0af9c909e98cb63c5378827ff75aa1ee81c5e596b66c682ba5a8175a7de058bd59af0e0184380e742a75a3f4807274fa3d589ae6a78446038b6230ac7af70efda467d7d53b6f94ba7846554ee92859be54d0c414b7cf2b64a9791b24bccb73bc1612014787f8d957538b7e0d20d7601b104e7533531f274111b1843ead0eee5c2a1fb9a1612a2e79ffa4b47417aaceb42cac60bbdfa6cc086a5700f0ad1f5f1dd81ef8784c7df638b29047ea1ab1e392acea9dad03723189273d6cb0dedbf212e394e4ee757db0b32a1846ec419a8e613db1f538b81616ec115e75843f2a8afdfc7bf18e8f18684dbe47e37f1a2c60c168d89aa7c25a5cf29bd5103fccd0330b2b335ce213eeff97c9f8437e7c7177263d0418a9d1b881e912943498dd339548125bdf475dd7ed36726e6a0e37e245d7acef2dc0ed391fa49fbe9a7e6d6a1253d15b321903e3b839110ddf53cf060f83efacb73d2e09c38835ea2c4eb6b54a2a7f5883463a25713a0ccbf1c25e89240c6e33a4802f07d4239c3d00844a34648b8c898c505e2030c55d2134834dbee0e755ba8ba260cafa7da81937481860b55214c6c95d2544a0aef5da696fee525b4309cf3099833017cc6b82d0575d2e71f680dfb7aac4bc4ec22560d2f9c286f396bb847e650051a664885a0d6f26035921287ddf92e2935e916195af4e8fa4df41d55ded14a8d21b7ee0eba5d465305d4a512d453c4f9b9315b1b04997e4adb546d543399671257d2881426c1eae5882601122e1f5cf997ecf59a58e548de9246e24d95530b0fa85ffa9bf0f067a9026c6a67ce80f0f92ecd276902b1854777b2a959882c554d52a8ae5c6de111c81846778428537f946e3a8ff101a39ed73e8b79b2169e26d61db813a992ddf381576218b82ac0870a38b75472988ec03afd43f9974e7a8834932e76099136c6000c870df4082b86fa38af39af390ec0fe19b73e3c17db108d7874564abf6553f89355f3a918d1f38a915e6786825a836dd254e6aaadc5605677b43c2bedb669f3093632471e55323746e1986a82e2d0777997ddb7614170e99c7b59c32e60f530f318a84e845218808c586a060c5516c4dcc30b2ec81215fa670a8af3984eed12f24bb2622dc25870efc809962135907adfa4187d74aaf5be42884e338127c5444030ba023295a54d72065889b62b81ab955fb88656300e89f328ff9e2eb6041242640788e32fa6c1020cd30b28ee5f2fc080e2569c60834e5aadf3e1e8ddee2a27204baf5f6e1494fe2f1ed83dce28e9b10548cde496eec2eae6e65b00d9708c613c9f0b4cada20bf066a4940cb8e9363019983e10814a8653938174976517a831f6244e03396cc0941ca76ccea952251eeeee166c7883a1099c0513d68d6ff53bbe03f655da822855c5840417bab539eeb8e6f8f43072eb07677e0717a4ff02f15062a636030c335961addb4fabcf4aac9fee83ea1e5e0199157a4bd7d44041a7313a4e97017272476e80f836f8b3fe9aeb13630abd15cf43a35dbfc98666923307240a9ffcb08a03ce214e9508d5bddc098ca89444618db194287442b62ba4ff5eb38137451b9a08ae6042efd9edcd771320dba873759064fea955d1366b552d32a131a7e8a0011fadf1605bd9148adc30f8da40c72c3a6046292743e55da963156ce31b89117776c11fd06c04b06ee210b4f879658e68353d91b7cdc8efbda60fab6fd23cd805532dd9319091cb85f591e15e2cc482202e4f300105c41ad0eec045adf3a9d721010156e8a47a039e27b9d1b2d64d0bef3d62799585cf78702279c2f244ae0f035ff953a186a82a784d59d9e50f0e73ed89b01bd045a19934e44d9bc2ac8855bfc7d122032573f4f470ecc384a6f3b5d21d45205fdb980885af1174251a55b1f80e4720c1eae1ba0e178bbfcadbe3197ea51790605db5f114bad44de873d0073466f1b911a95f52aae8cb3127b8c9cc140bfaf22e44acd5f09ff82bcb6d6b99e6a42dc8010660fc2d52dd9c744ac0f8d32ea14016b3a057cffb0435869621ba8c259f68c0492ef437286d0c28b24fc124c8c0c13746853ff28a61e7ded68db9afd69ccc335b3c2c9d4ae169445715804808bbe1c88d3606baba1f2c1eeaea357ab0bca07c012a5dc3269e1366d6a281cdd51f06027919753264242fc212c2e89a78cb0083a00bbf1871f0df32f124dae28432665eebdf243081d68250729720d951f01248398a66693eb7f1c36fe545e109c4f19914fb45fa8f3a107d56f923289870e69b6eb4b2d3bdff2200886b20c98236651525c41ed0f231285cdcabaad90dfd17fc9fe449790b877c9b6c4a51e9b2e52a05fb37ea40e47fcf82b30a890bad8f5e375026b99955319d8c05a823d85af8d436156fd057e1878c3ca3869c7ac1de4340204967624f84488b418052f51ec31d49007d6460cbae158336541a300e18876df2d865f7adb421d55c882e624d49078a419c6161f060d1c86866e7ab4b98f64d80d688b55bfccb1cfb09328b564aa91d7af7151b2dc0373b905c423e3c7d4e7791bdc23571fdef028131f4aebab9d274b9920d12e9e9d74072f3cb9a5cda2cfab3f399e779452e641990699262f0172c4dc9027fc1da7c00421f3954f2b7886ce8476d0c0c1cf221e016ed27a293a4967b22a0e02b322b2da6dd32aa807c734874060284090c115e624d26feb0bf754c09e9b70c7100aa87eaba3fb690d6340641457276bd87406e326fa2a1b19c3915f6dac47136d34a6a45555b59529c472f09a575e3849f52e981b03896a606a1208cf424372a3913956bfd4dbaaf2d92a620097d1edeb5416d15cf3321e6e5d97161e641eca7df5a325fe6e4133c889de3d862d1e90abf9c02f6587af62a8d61f626e0aed7c36d2fbf11f59a99d7095d6992f4ee4bccadac38e74ea0c0313e44cb351ff0a4fd3268519801ca78d74bc784c6247416572e46cea1e9330ab16dd0eb39517729793992aa8419ec80c97cfcd87ad4e0980faadf2ec9a83e0f5151d4035130ad56a382566e78c7e1ddb8ca8d84f6480407c7bc1db47153100012be9257fdb781de2785b62fde3b37218649ef47e24107357e301dd10108d17c3b4294a64936d5037d68e621d29e1a2028fec870f4b6c360b13f1eefa6a5b6f61547fe304442721fc3bc422cd462c2ea9e6e25187f6472e2864bf0513e1aec159c4d75a350cafb435c04544ce0668bd46d0f32e8446e5135a644def7a1f4324a6a57764e433466fe38fc49235d6ccf0250e00c506f6fd33fbe7fb6d1624931b3033fd2294308cedb74cb09d1c22075fee21bd9186fb46bdf4144643705bf009789c3c548ac3151defe6cf3021c9715e36b3787eba9bedf11dce3e136cedef4e0c5e40a70bbdfffca744e492aae11e8db29e6079a12074735bdf6a2369c5df84dbc0fa854729c479b37ab20a1f4c74ba290253afb8151262a49251c46ceeccd9688fc079f1976a5b02a990f583b7ee5863d46cd02e7309372d7c10ec5151b8b03d10430b249d05991783b491c882093473dcbc80ccb4d64f87a2ccbed2428cc6cb4c3343d6497d6b47040675de686c939d1831cba9f47ab26abc7c42b6ba9e683224adf0bca194c00e8daf6eb0b44130c55ca66052e360f3dc3608cf86f0ec08ccbcdce9c45935586b4949fd922370344a96894b772b40c0090151de3e659484f2eba1b89293e0d58627b2016b3b7b8debaf41c5a106569253c58df26dc7798dfa76021291414480f6bb60afb4f3310b34a6b14ba3fc28eb1970cd826fba6792590851b92807ddb61d6cea5e06be581aa60a3af098aba6f7b1203cd05eaec7ca4ba8ceea246b7a09314bf4f958ba615e05bcb1ec4dc914f859108e0a227174b7727e8c756f912b086db4f8563f829a578858f77a1dd1714e7e780a00805904a40571f828bd476a79583911e0c304f80f1221a8348577b20199c73302821f5b85425e928e01512a149b9b2e6ae68bdf03f6a4ed49270bdf6e1fe34e08e59ff4b9e4e0fca6cda0138ae2d24c103ac54031a4ede7058501c153507597336ca4c38c3001ba72bc280510e74d5afc20de51e8b21880dc71169babd1ab4c8fcee6090efa09906568b08c2108073e1a834a04013f876fb8d1a9e30760d92fb5b1657fbbb8990d09295bdb2b74c294919fb06d7061607309da77e5676da6ddaaffa8eabbe7e4af6fd1c88b74f81d366fddb43468196b31ff79665cb591bd7e59e5febbc4f0b558f00445436aedb798bfa2adf6f6559b8afbefbaff39db5ac8d0be32c0bf6980f15b5d9ea31cb22a9af6656e3ceb7f1f132f0b9d3b24c6f8d28ca3b1435294a621fb197188dde7c3a4f8c88298d791d23a201221599c73482612265c48c3cee9c7ee7758da0a6d579b17a18b59ad7f9ea61bf79d4775efcccabb64fe18e0026a8dc579f71ef7c82d99ea68db6abef386fab1e9cbe9a3a994759def4562e3aafcffc69d908c831d7054a298ceeb5bd6764f1ffe97c3a2caa4fbf9cf228dddda3b743f829cdd1c563279238b27a2ee575e58d8eeeeeeeeeeeee8de338389e038edb344adb78cf344ee3340eec70db7011660e30a3c34c0e332e6658cc5c6dd33dd328deededeede388dd33857f7d5388dd338eeeeee2ea57429713a31804490e35b9551da68c4d60326e8b5c9219f9c21a58e5b0f664764e4ddbb014797290c1ca2e0904154073ee1e71677f797de0d98230054a81facb138d050a9efa1517480df1eecee96f2a1c37a23882b5b071aa8e969a4292999f659f6dbd3cc4bf1c250b33fc066613028a3f6abb7614e8ea8e2f93893f95d82a4543f2862104d08aa8773f089ffe7495e5071f04995e259057d8a5294eab8e74f81c1a0036c5f3ff3ea67b4d25ab7fa1d9b02035be9b28cfb0a8bc135007bbf9cb7c287f9d9679605fbf9f04e80e455d820ba84738cfc8c2ee1290a29fe837ec120521f079f68cff0a584b605b55ac89a774150a3789eeb8a09c4918f0f55521a03754984399547e2adf01780cc0e6a5e543c4fe5053dabf21cc601f8643e8f56240c1f36e097b22c6da711af12523f90c7bdd9861c1b84e17e31c402d42833aac905350a5431e96164487d58535d68841becb85fbdb0e40575d44d81bafba03e85a9e832e501c5c1653a834b652e971ac56b1cf8827fbaa435a02ee1131ae4c26f26e0c9acb9b0867af0ba7b0886fc691209513daa243d21a21031e215627360104baf3f1fbfa427e5682443a16992de341a5114455dd25b99734ee94d1a9aaaaaaa4a7a2df381ee0de8324d4ece6814433104499074491a54aa9451a51790412697f456f80ac1f703351683b2822d812f78fa18d152250b5a91025a034f5c05441c86417d86c629916c4af703dd9b0f74d9614e5c055105f4c7653ea1388020a66ea89247d9d0a07eb4862a69345d0b20776c66666666666e6e0cd4c8ccddddddddddddccccccccccdcdcddddddccccccccccdcdcedcdfc150f2a73777777773333333333737f30509b99999999ff6b692feecce96a9ccbef48547e22b7736ef74d374565dd8d01e73a5563f835801db59f4afa83411e652efffbc3872f3c7eff79ffd42721cd19cca449aac120ff8e162a0cf14977fda7f789e9ef8e1dc5344d23416086f717001787dbe252ea9a7f753a88c5933991b0a290d8448d20d73fc6d49f590c8b0bf9e4fa2f22e13a8c1ada8f588fd53e303a118b315eece175bcce8333a85fa747746a391cd40f879b1a96f761d007c228002c711eac3b2d0cf8c29feb429dffc1f0fe02e0e2705bdc1a970d2ef1c7004489308035e00efc1e7f5cf7ffe019a6f4e6695a42fd62cc8d3114e0921e8c42f209f8f8ff8c462179ff1a8d4262ff63214f27a931dc47fefc1a7c52bd479935d4ca208f313d1854f5fd2016635eb6b1077ce131485478610c52e57f18c48f03dc61c5fc78f9fab4904197759c8ebb35d45ab5fae930a8882ba0e02a654590c1081ac29828020a13589d0f088480c089aaa304314614117a41112b5194668c08c16887cd1062568a90a69082153784be105a6983a80cef040f2f432a1346e49860c425f0aebca186676d1457893278c030510225b80b99d04162c2042ef024417730b5f501fa95e5cd9f6f79ac321fd2a9c493c5018afac12037d6970b39c88febcf39ad83515a8cb8093e81498049e23a1572e2ba763f265d1f429604182e5c8e5488e2c1275e83eb347c326bfd7cfe41a01a27547eae6994caae804054990f55564ce003d65716fac317fed3ab2af6f7eaa7c72a94ba223480101c98d5543391bac459c4542a7429221cee103f33b84eb9e0522898fe7babfbe1577d5d8c3205e1128f2fa7208c4285aa1c64cdc7893a09995313d6bbb05f51212a94220bd5ffe39ad0759a9a1ac837a8b63307b5a6a687973bd13815c51b5e6e3b01a5943686b4968ec93a0601a8321f6233aa4f61159d1fb5f2a6c3ce264cb706ea226511cf69228c13af6427dcf20ddb16bef3867a0afc2066adde2dac9ef3209754d767d775fbb578b5956d71cdfbb4252c8f004454b69f665b62b050ef972d3ffd0f7b6a33dbe2977aeb3fccb6f89df2cacab2cc671fd832182ecb4251d2460aa369fcfa2ee5db4fb53948ba3fe4c1fde1754bb5c8bb01c9126d6550a730a17ef3e6c65c4a658eca4552d353d4378f4697f403288d46b12ce5c9a73c4951f226a5a7a12675c90c8d48237d4d6ba45208e7767df9d410e8760db18cc90dc8e64b1f52ad7999a10af3897919d08c55ea9236c901e1fc4d1dc13afaac9255ea1fc11a286acc6c66c394626e478de212cb906eb3469a5826de846e770dc978e35d72959c1b5b52319d0347a3db531db14af42628ea67956e7fc78b2ad1abaa0e54e98ca0304d5324c22871d489249919981361526aa4fc8c4018e4e974dc56b50cbba874d1ac214d2a782e13e15832b9178de622fce377df9178b34bb810571a17439e767a7f6aa2267ff8e2961a458909b8502179687321fc1a0de32ab0c8854f5204bfc02882b1e6c248c2197221f51096ee4369bd28d3312ae1e1ae05a2ea821a5f7e05bb61c36ed8ddd0bdddbb3ac30461774bef76d9a99dce058bcf155321747758a7fbfdfa732115dde3e59fe4d4dded8241dcdd9dc0238410cac831013a88d9063aa0f00210c208a3f3f46b25b2f8ff74e2c72f503f7f7101023d8b67e1e2730108e10520bc62bd206446a2461b0d194208218417809087d9a5e03b7fa946273535841076337bad7aeb141ddb9bd99b3b0e2df3430649b711963037736b57a9c6e7ee6ea738295cdd63cf9752f7be0a311e30ab3db5307f40f6cfa07a7dfc14f6da65f5baeae55eb937f78e3d80be55576496f33eba80ce57ccb33ad85b9816447d7f6b457dfa5a56ad0c6a2dfb056171d6bb65593a5f2dcbd6e21d77bfdc9f768e699aa669ee1575774df3aaea8c725db6d3384d7bcefb5e7bec9ada33a8a3df2829baaeebde633b4da3da7571980aef9abe52ccebbee3c9e8aaf705c1d1e7b26fb32d4e29c53cfa9a0c6affbaaecfae4c0666a9bb6f4a4ccccccccccccc5c727777778f2fb088890b904b2e951a259660aca5b805b7259930d8a8d80ec0a0c9ff868603b0841fbe618ea01af161c1770c401796f03331a350adf0e1c29b81a6335954179f1cbe7500d1d02398e30a229ca5a988128f1fb76d50a70fa28c0ccbbee99b46f112cb9b926f01a244215cd21c659c701ee22e0377b0aa70fb53401497e992d9de376ffa066696644a2ec32070199952a9542a25512a9578948e28f5281529c2a0fe2544340ca281e97220a50ce235d34e6ba368d29ffff14f1bdffacac1e83e4ebb55dbcfb695fd6c5cdfccec67627d976db1e2fbad9625b3f1b18c5a2b8b3fc8be56cada16be5a665962fcc19c729a539431c6687db24ca27b33fda44df5e56f5b9de8f4a6a7d38ba294ae9ef6d005ce194571c228e29329dedc39f99d3ac41f4cb1f2c9541ba5fbfeee270f7bca795d36a7699abe169fb28f31e66376765e675e55bf4b1aa3bcaf525f794e7d0a7f5fa789fada893f30e19400f9e652a794524a6fd40b63ef9b1b862b447412bd6e277b21623e4c0645c75adcd2115fbcf09251cd06836a6897270106510088920568d854bacd9a299a4288284e9a2217422dab5e372815c5d0143989a4c349958a01aa37e1a41e6a38ae73519d22035405a48c2011e614cd2140142775093f1fe13229003c70120c8af93031e9743cece23f0710c8e319899dcae2f3195991ddedd9e81c4ad25374794e11b786299a4018c43f455c13ea854d8b52990e08cceda730cb74dcfe88b190eb3da043678fee59fde8f18841ddc4d7cfb4cf686ef65bfdeca24ad77473fb3f161dcf7fcbbcdbd3cd7b32d4edbfcf66bf7353391218d4fd4941cae044b29fff68c0667dc6971849a2b27010ae1949a2b26c3508d730a843506784cc2d337ec67890d7490ccaecd7326ff61f063d9f64fd0caab13e62507fac75aa4fad4a6bd5b4af9ac62ba8d97f4e9a3470070fdef993a68b4175200c6ad27c273551823b685ebcde00ba79930926237bcdeac020cd82bacf3aba799da743b779d36f9b950083fa5dc4a0f628c017989366503f1e918c9005990b6ff6945e91b1958faff60ea47ff32684d97b3c119fc03991ac5a3f277d1309071c3e9f3a6926d2d484731fb1ceda00ddede9e6d54bebe5c11db66fda3172b7ccea6f5ebc50886f5fff9b2eebb1ffa6eef25820800b4ab1ddec21bc59f61152d80a63d9e67111e08b9e76d4cdb264bf7db55ff6f53f1ef150b36d45fee6f9574ffe84d9734a6b2bd3fbf8729237f21ffd1308ee004fa0abb4057361005cbad86d81ca872e8684666ea4c2854c180109de2d07f573e1bbf7f5c0a0fe31537bc8c42322ccf6fd3a4239704cb600105fffc4001b9fdb0a1042fd4c56f8207d709fc23276c4be72fea00dcc8199b996a7c397796d7896ce71fbdb07f7d2fb5a5ef35af8ba1532a44863dd9dc2df444969fab95cd9a916b3f6caa4b76c40bcfeb4a55cf994a07e2df7936fe332e912662156e4635fb99dd5c523fb8abec456289576450c78a55da1692eb731cce56236ae7b555f41cf07f7d16b0a85b30ae0949e2944eaaff4afe86feeefa7ecf6600366bc7bf04795392740d224937099eec131f14e3b4dd3320c07775aa6e91f57a81fcff00cd38000ee105574735fa8d36dfe21b5503fceb9fc397c52844f9c5f888d250631106a7c69433ca4fccaa0cf57e53b84fe1f0631c7af1dd9b53f11c695503f9e99b38fc003c8bd26834a6a505db00b15bb16e4c0a0b61f2cd025d02570441081020a28a09091dbe544cd2abe34caf5315a1a8d22ddc66b2e9c37311479f0c9f41006c5bde49f52257d6054931268ce5a45351c331343231ae570082627e626073621c409992032489001027fc024608fb8043ce26189040171e9756519b63241cc07ea522f45f2d3969522295924864b5a8fc9c9c9a94a53a9246a1439faf08ba48b66481111d1cba578892b83603238665a2288cc71cfc9c989470c31e4b68c2f954a25223cbe473e824db8fce029e5a5f945ca9f68401b8bb91a35d854ba4dd114a5210d69e0d650358bbd857930abf5f2cb3b5d87a4d38df4f51a6659eee995657fbd86fd85e35e6fd90fc775edf2beeb334b0022eac5714f2d4bd757bb6c4b5f4eeb4846aece856114d330eca27e555ab57957f7d9e6659857ffeaac8fcf570671d703faa25ef358ae8b5e0fb10bd3b0ffb85cecbf8c85bb38ee3bb57658d7fdb661550252d8206e67bfffd82ffb0abf03e9632d7d5d6f758fc9e0fa8a38ae465ff3b2dfe085c3faacbba9a95bbabb7b7bb83ed116a5cfd9ea5df6f3985df439eba2b152f8d5761ef47458e7a93a0fd619e9aeb61f7ded01f5bdcfefb5d9fa59947a2bacdf9e3ee493159695617df69965358b72ef1af65a0b7f1deb166bda4dbbbb9e5ef4baaaf65757ed472f5a5d32ac1cb73bedb3afde662bc571eb37ef96d98b415b3fe761ddd76dbb2cf9ed51fa10dbaa065c6efdaf7b783dad14c7ad5a8aaf0f19858857819c228377eb9efaebabd32ba3d5dbbc2fc70ab5d96bf5537aa3be52fa17ddfecb71b5df3c1995d2cff8c2b85b705c39b86b7d62c2cc2f87eb1eecfabf842833e00ed7bbfd66dccf86c965890faf0b06c1c8d20f9afe86ff87a3da1b308aebc3f3347ab56a678018a8bd1bf15a0ef4f5d181b6d1def0ff2ac94ff68647923aa3fa0c562f21899ffbbaf8a4e5461c0e88d7bd2f881b6da4d2da30b92c37fcbf38f25004249fc34585e447bc0e90dcf0ff321bdfb1951923882add7724249e08720c11850ac9ef705121b13b3adfd99faabda1591f23eff67d90fcd5de37e34eb6e30d210218858ac78652a88c582246be1bb123dfc11d23b0fb1d23eff91df0497e87c7763e884621b1261d936a126350f1335989d49b3c0c06796311802a5c0b97f07310750df59bf372f76792df314232c23d09119ddfd175baee4988f0fc8e8ea7d3799287ff6914223ebfc333f22496888fca8e1125e493fcc893bce7e13fa4b99f8b0b4d74b8100970f4831ff73bc0ec78d283be550651efdb252d754ffe4451d62dfc053c51844f562ce0892270f4638e5e5eaef4053cd1305d0d94b22b2bc688c5db768af8098bca992367ceccb9b01c4cd21c497368649a555599b671ed72006640804b27e5d42ae5d62e115015606129dbfcea04c225fc949b229ceac384e3baaeebe4e474561cc27e28a5a75d8eac20c7657b7a9043b935783c3ca37baaa33aaaa33aaafb0f74675cea7d26261e8f4745e73f29467e478a7a4d46665cade22a9a803c1ecf8af7ac58f11ecf0a92f7a8f8a4183149f1978a141f6f07c9c88c4ba39cdae3b14398f8080841eecd957ffd40c4a2322705ca438ce2ae8000f5fe12985efe0f5045c70ecafa8ec94a1b3d623198276331ba6b6331bcade0580c195f6231a6d825db25f802aee8015ef831e0857605c367f8d14297fb4354f1fe81bd5eec87567129a5abf84fd334fd2055fc298aa2a81f2615f6e69c73fe40a9f84f37b0b1c1c11189ec74830afb61aaf8d3e66fb63edcc22e69b631dabaac90715d2ec478e86f0f5b2180092a7f0c6c85b1956e6cc5dde545612b524a89ad4cd3344dd455612b1445515475856a612b1dd33136363cc333383822517585fad589c5602cc610eec2bc49816a305e91e3388ee3388ee33cd615b118f2fb398ee338aee3388ee3388ee3388ee3388ee3388ee3388ee3388eeb3cc77da7d3e122b6c2f5e51e77b37711103ed92c679ee79dfb14ee3a37eb741fb14ea7711cc7711cc78d38ee378eb3b3c22badc31999aaaa62156f6e46238a04b88315ed07a3faf9dd2cd87fcdd2d6c577dd11ac05c761988d43182487dc386a1eac141f3d9691af7ece4f14c337efcd8c241ebc4df2ffff4f627dd7a2c3ba169645225b3cd6c2c36ea84ea7e3f1783c242d3ef4437d3e2d5a3c8661188661d8846158c422d6a2458b17a2458b16d8c778312cc66fd1029b2181149fc27e23bfbd02f8a4b2d8873de622ffc1a0a896cb12ad8debcea7d65756010ce287119fbba9abdedcc8501c1147ed0ed0e97890da2f8eba04814aa5fba818cba64bda93b8fd52464e3c269a78fbebc4883c6e7742f045e3a8968de543d548cd6d950477a06e0dc117fd43edd2a851baae6be00bfecca64b62a64c9df9d0bc0894d968315da2f10d8ec6395abf041570d162a5619aeb13f7d3f653fd89f3b65a6badb5d6da79dce655efc3a33a7d86a181a1e1cb3031d73dc24418181a4b04300a15771b2fd48f617068e6acf506070727e2d0802fdca7557d5786ea50858b34f3560faa7ca3bc3fc804426eab755e9366ba4cdedce0a318612efc593b1f3ed93c7ecbd39c528b9f6adfc168bd0e4477778f6a9a26f9d5f4556dcbfae96bf9baba4b6927971cf2e3472537107c42df8fe88bc6fe8f7af9764adbc2d7ada494bebc3c4a2ae54b7ff9404818e9c19bbd964df2e967963dfa1816c39f25939fc50782c69174974e7f8240442c5e3c51cf2725e8f00974dbc250c8951fbf8a51b20c1adf7ff2beeba58c5f0b4321f7b2d56f2d7da718d1a7ea81e013782b983ba7699a86882e18572c641148e43162c1d3344df25b98e59ae624254f4ca739f188ed71f2b8a6f9a1ee552f21e59223e4a1c94f792c179d938a4f31f51753679e93a78dcb872b5a31be7b34803f5b1efe5575fd954d9a6d7fc99f57402ea53c46f778c5e9a7f4fc274f3ef56209e0bcae6b6edf9b7d6c5e578c2588d3cbcbf67cd973ca9f261e7094717da24960513973e4cc9939179683499a23690ecdc9b4895a010b58c0821ed0e9e974efeb742cec921994e3388ee3b6a7b1fad6d6b45fdfc977f2f5c95ad69c9e71b4b0bf213990223a94f5592a4c62f2e763d57b07abec0d4b45a7a3a29382a4bbdef33b3e2f3baf3ebc364cb06afdb1c73e62949c1ec3a6c7a6e9e7bb47b963ce834f9f3e7dfad4c0ff0deb3f1cd72d0752dcec3fffeaa9576e6f58ffcdce57d6cfafdefde7a7b477acbd91591f44a8f88e8a4e474527853f89ffe77778b0ffbc159fce0f89e7b1b54b665897cbe5b1f45b95553da5cf580f32aa9ff6b3ec377d74be3b7608131525fca93bb3ff9cef3f2d65e564a58c7eb71773cca5800d3b80d19ddd8b58112211230e0298c8a9eeed39398e0087c971770fcdb983d9385956dfbf856cee7d1dad0f47cb4dddae8dd3aa4be67d94a86d3c1e4fa75a19d4b2e8637f792bb45fa15919f57a6abf1c32d72d1b6d63a36d2eae6d3a98a675894fb8bfbe8574ef79da6d1df699b7d94fd362ae275e8fd74218745df6aa347b61d86b3657abae4cabac8db6b972c8d8689bcf46dbe010e118e590691b15251aa7a281caaf3a2400440f0ca8e6ac6c545e8d264a416a3020a32568ae24667ac4503c6074bcd0161c366ad0b0c00cea076b6c7c646e6555555592795c69bba5bbc72863f49a179a1a1a48d8307d1aabf9fd71563eb28fd7cc9a8f88d51569c419679c6f69340a845c42eda4cd317c448c5547a47ed0868665855889bf3299c79cb185aa81d108523f58d34326df24b3262e84d340c2e6622ec67dfadcdcdc84815278414beb0abac34b4ee80eb93b4153d01db67409a74b29a5bc7129a59452be4be9938e4a3f851d52b07356e0436f97d27b9a145733ba946e79e0c663c2e031177e9523e45d90d7a574ff14de86805e2e1823330e35a872a26665a140f8841e1610512e28859c1aa3b02c6e2bca89635e8c87ebce508cc36450e8014ed70b9cc2f5d2283374bd5c76c32461d0ab6e520713132cdb38cf0104aa756e1d0a8542940baa46fd60cd9c33c4b0260403030303030373040c4cc50107b5fde38ca1508847685e30dc144697214f24cc2326cd84993313c88c994978182e575cea87efed59974b8dd230f8a50890d112524a0cc288914b301a651a75096bf7837161388c469944c0127e14c42cc13d19d46f866212932deb4e1ed328d6c4287c84bc13a0211c2232433c468d328b8025fcb38776bf69b482cb18298698994b1f2fe1838ea18fab70f9b110ed377b864897a79b26e61215c8e569f4e3f2e444a48abc444be54ca3b61404e00d8832d9189a56b8d382e052168a29348da4a43897a7cce550a3cc12c412fe144c244293069727113354ba3dc47b981c01e2f1aee353e436913b4333a48d9c3b255835a8a552a9542a954a560d2affcbcb4bdd3aa29792a8be7cfa7be1b17827d480e0a86766a6d32398e30a2224cd1d241d49c06005459094787991a51939d3c4cb8b90e804e9e505c35e5e5e5e62482412a90749078f238838101fb9c845dc13dcd3ec7af7ea6b567b5aedb75998e5fef1c29a6ad511dfdef36ebfeea7ad18d532ae52fad7b5011cee8a055c17d1e722d2acffe712848b3df67ed1897a967dd13fdb9e62926a1e7d883900f360cdb63db52c9c0d58b365967b199c859dc7ac77d8c78e5f16665df6c334ccba2ec7aa8ace774f3b1eb671d96f9cfdea635f44c1ede2c5ded22cc5b02c7bade66a9f7551ea1284cbfd172f67334fc36cf6db75799f6529ccfba8f69796b988086082aa59f487b8f48bf7b3016b2e86559f6f081c0c81e32272086b5494e87085c20c470cb1e9d0be98bf50b3fb3df5f2a38d7f3f28da3008c4ecd1e6c331c618638c424aa42031c61863fc0887d808596121294c0a82840f06c4b14ed844215c7aaf2008a12ca8142d1975b57468460000008315000028140a87c3025128241acafaac1d14000e8790406a4e9c4ac330c97114859032c400420801c480018119c20c0400814e467f303acd6114120605fd139edc933b7c30f0468629544f3404474090266968f94c34aecc113013985fb1517fdb4518a8868c5b3cccb91ba0822db7f4954fe82d14885bb07ad1ffa233c808784029c5b9bf80606e60237575305d3c19908d012744afe63c0656b249702573db20be1443f3dcebcf63b64144031f7a715970fe2dc25851d8b07ba4016b1c28cf5bc0fbe5da067f77f32daa199405030a0165da0b758ec21f5be203b4f1356a3f279c1cd76a119f3886b12d5ade579caa7214bb1aa7605be16daa21af9f79101e89196df3fe9c192eb2fb943174ec42e4b0c4c956ae30c1c6b0fd3ad9d7db6ae3ee9ed8c7bd072ed69745c21982cbf62861eadd53f8aee50a3ca0c671bfd5b62120edf2af58946c80714940845b3b02637cd1e2531b261848e707e0059bc89778d48d4c0078c958582691af520bbe8c05cdfaaf3e968bcb9fd8799d781577da80afc500a079f6021d9b138edfca5bf00c124e70d5026686026e9dff1cefb2840b789024f78ba438894a5cc96765ffa961fbfbe79baee546aa390bdf99be88ed9edbd9c19ac4e6bc2f81865da5504b6fc22a5b8228a8e36f426950b51238a11cc801fd6324ace08319b99208d4a8907d085013af2b2af7556dc78af4f95f8f0fab240ae25f0f6235c39b56d8155a135b8b59029679517a39fd183bbdbfcdc89117154af7bcfe52174e840958564b15609031446d16fd3d3017eb245cf8a8061270ef77292cdd909bdbb6cce23724cdf29998156ff820796fe94d61e6da8200f3a7f91e2c5c131c9d386cc76a2f1670f933eaddaa35998b53dafb6faf65def4b00dcab5815d8247f9959b05010da96e4356f3b9642caa72373c19510f7652895bec4d3097abe854bb14cb9be08c8f13f835bf99c440c4c2098990ae479bf9622ab5f0dd8debd58c31a6377b57e920ee494d39c1954f32df72a2aaeb3af6fcf5d77eea38a0004923b9a09edcc5b8346b40b441ecbe05e1c3fa8254504a27b6525047cb8b5ab2cd50778f0aa51248a63dda785ecfd409407dbb5366c9fc29289e34951fdb62614cf821e14b7ce693abb3e4bdf77ec9d71056245c8d8051c5f21b1c745ad0a607547cd40cdf8cb6c12b2be73a4506d054f3bef913ec1fec1d95c18048f38520ef77c50fa7870f38af9d08b8ee6934aced097a3f1b8ccad3961783e19631c15321e89e51a8f02514a53439b78d09dd26183779e6a8751f883e0f0c97a00d74bf140bfc04c7062aeaa2b38a48ba4f49fab8a89b913d21fbda5ee5790550f22559a9775ce4b015fdf444d845c9f8d492c3a7509e9021869943bded095ef22bfca81d44244e2458bc445e48af9db008db47bb3d211c5209dafcef2c2ef76fd35fe6774c7caf9d887c25a2d6920f95d0964a7c0252e89eb95bf40b88431c797fbb350fce60062e27490411d03c21e80cf9d4246deb41b5a17ffa30eafafdb2f23f2bbd2042873ddba1b3c7376dea3db2e5c7c137b0b8310ee856838b4dfa09e36cc44bf058f2884047e8c62fdd430e22777c17430c4a712a9645ba0c88401d8a70a6950f41398d88f7b2f052addf2050bc582b963a177653f351dddcf5d35146f08a6e896a6d904c8c8e2304798efe848f303c53730dac06e9d8ed7865a8b0f1389eeda3be4a2eb02241254b3a824cee50e8105c01de23d5f83f66832dd12019212e35f5eeda8a64d484c99d122acc7939430d05a97c057bdff713556b2b02beb435645c11ddfb0eb6acabb62efc20156926162015392d9c611d6c4186c43c8ae5daa91ff45d353ae8d3a3a9bce09de5dc423926db7545fc8afd7281b8bad592ef5642cc833d01264cbf2db1c21b32de34380df2164d83b7c263895cc9cf87f716f8bfab204f47a109179511fc4519092a5d0c6d5d055ec4bd00bf5bb9b34685d44ba979a0e9d192c5a1c25b6f789ebcf192a85a73f319b55f0626e8897f2ba12793a0a16eaf052116ced8e69d561d2bea8c0e4fc515456fcb41547564a29d7b76afa5d24101317e28779b29c533220e891aafae1f49e28c83d4c1223cd13ca1cfe786f299c2dcd202d5c1f8885c5945ee5b0bc1d5850753222ce274f1facec3c9c872640454a8597e011d947d7d5ad72cd1f0ff48f40253661d57d78e2ac500afa361f3619c238c7272d5ffd244ff4149a78e40e5ceb227df90f873b2230e228703819eb2bd02a29338505456911da18ae35dd17fad228d809939fc5fffd8a052b331eaa4beb1a7f6f127bbc65332f492ce7844673a8c06f2747b93e274dfd77343df3d6839805696b78a7b92440f02f1b60354d00205cbcce941991be787eaeb842176e439bdf97dc90604eed8af6a5cecacf4b2dd9c0129eea87d9d84bbc859028c62aeb1ce600a6760400017b1cbb2a4577e026d4eb5f9f1cd4d7a5c365f0404f46e6a3ee0c3023aedebf9b4897e54a1503c7fcee82b84d87765667dcac3d8c3413be672f746d82db6b15f0cbdc7210888d633fd27a49faccd4636ce4d4240fac0e7ce7b1c5d26eaa81010af096f0fabf55fd65e8a8539700d7f350848fe724e0b61ebbdc46fa9b03fa6fced2f7579d2a89eb518b0bcde0d1b40d882dc7cc86ef1c9a12ce0bc9672c091327d611af015e8d692a1b6428c07250f83ddba5c4ca3906f99968cc0fdc3830f398305b249e73e4775927275b6c153e2cdefee7a6e0af4aa50d70bbbd9f28c834a0f647ab5e104f440dfd1f7415b40436eec76260d4a2229b89eb4f93db21a1099c998f3f6a0b71225360541651ce958be51da1feb4ab7e2484c551e28f9cfa1c69de98ea3a0401a66bfa8cf700842423deca22a5915cc8bf9401fa1e1b5c45363187c9775a6b75f8abafe812e7f5d6c1b23896cac44d18b6046a52e72a932fddc5002969bff8146ef024903c1ecd435e7fa2dd248d0607d951dc5609daa01a27a141d06f60e344388e0b8127481f70ab553843580b600e2bc0650c361d0dfa99a7161d00e0fe79ddb522c0ccad6177841b226a8fd089b2c383754126315e4432fd4c7baaf0912c0dd1ed0d8c5dccfdd02ec7e66be93549e24f513e29f45700137d5f8c3cfd234699f6f481781f94cb385f0a3271d7c9cec6055bed1eb7bcdbfd05572eab82e2b91b9287f96b20b272a039d15b58f6fb42fe156dbf754d5bb6641843f2362b1009874c863e356a3bffb8f368972892d0ae721425ef4f426c44ca5aca8d6fb4f41cd0e5b87aec0bd32aac4d61b0e56098750addcebc6a3ee07c5e7925c519f8372320b53d21679c2f69c524b06a507d0040c4c1ee0745b28ee5941ce42cd176f0594fcb82cfa48cb72043a64b494690c7a20e33a0a661a570024b2509a868350220d254e3ae0c223287e9a2eeda72b90ffef7180c252ae802c0a17bba004c4391107f2682818c011c245f552cc795c49aedcf4b7ff7001981b302d00256fb22c809b2f2c2336afe955651ae80c8cbd5a09a09364004c57315a9e0c6c05a4bf9c3314e96504009ef5bcffaf45016a00a8bf67002eae926cc8c1ef318abd7c37fcd42f3ee1604e880cddc00dd2a9c3b100b0aedf05bbd8132c0ca9ad64485b52959216441ffdff38152d1970b4d672ffe71a12be2df70dff175eeeddf48abb5632307fddeeb7794d9a90e1522a32122ce3d8efd9a935e35941f5053af2c55275e1e21aecd9bf335701285caa84c7754da8dce5b18cc0372168b10fe60f45be00cefc1701a04a4ca52440ea2c0103e7d6d66619d0734301bfc880043810b8b1bdca3268e5dd8a65301f601972674762650828c12b0314225055063634cd7a184b194c191d11444c0859091c45196cec24b45b554226b8cd64f3dd031c5743ea9562a94d9266fa7111ce013733c3bb11fbaf0151d6a03cb08887eee4bcdc87307a6853a64eed92ea98b173a666311d1c851670b044cdb496c5c94899a2b14d311a735fbe98313826af35bac5cc8831c8622e75cc0d6d68c5601e75b5e17de2b03a9a242dcf06703829537616b318d3795b117ea960be44f62b421896915b9e96ee0dbc498f8f247fb8374b23ba57bea84ef8a8975157fc91b8b8c91a54924794e8f9998c83ff9e45c1831079d04686308112ceaa99f6903b4bc561a6b890ed8c2ac60e1d26f53f5b3be9b80550e9deacb172c0ad31125a3e7425048dcb0f3000b260a4939f99a96a2136a71046cf0c37a111eef0840a9b57479e19837dc71e050159640d119622c10145623b9ead57c6738584a4e7c8db4a2c15848070008e5dca6dfb651380009186d7c80e979464fd4e0a04731b64d2b9795e8a08a6d9ac2b9a7d668456e689555d008f7e0ee01992560b3b0f9aebe2b6a69d0f18866680389979e7f8d21962a8df9f3d0c292fd0f1e560ed2f8a4589cec8dd2534534fdb4bca4caad5a516ab6d81480d6613f8c9151e99ca69192b63836f57c690ca0d2acf4d886db13effc9e0a103e7fdeccf61a9c78af060cf35990a710fec212631f4453ad88d6f2b9f8c93a0dd2fc68245b183cf36d3ad8f39687bd6cd8e7826a425a7b850261fa599a0e1c808c697b002b999f43dec6fd946af5b483c061a1235855bfafe4355d93e7bc5794ae600b65184949638fd837c112e51e26b9e2823678f9472aa9f4008fef3da52b0de7f1fffce4c10f1823fe11b41d958854e6af1f4c69f57159c4dc89ad0f5f123f58e515ad9fa82cd5b9e36f170d4c7c51bfc202a6bf4f159785c409ac9f93855dc664188e28dd6bc3975081bc9fbdfd3773d1979d4029fea0b7e7e4216f8079f979a26d9019803310ca4fb37c98bac0269abfcfa7c59fcb7fd092c22ec4c8bf91c8f082ffe157c5834e79371e17430f2c8457c34bb1b28f323b32fff2fe5ac0d117a54e96b88046d1e95abc60572962dcbcbc8324f108ae29d235fb98c47f4e336ed828c74afd8afc19d8b5b4d82495cb977a8280b962377ff25e3898978e86fb7f06bdfc58a25fc338e15c353beb4a2f89247b1d891fbaa6b9cf555f278f6f0e2157ed252ee3ad3ba1d301abac19e9c63c5b2c027fb9477118c6c88054c6b18639134c0326072b94beb735e4d95fb1e6a5d4ec496300f930ec098e3096c894143ba3c4f9d688a3f238d9541aa5685dafa17a826e79d120abb90dc8f940ff21f753e12304cc0f9c1e10a74bc6395d3809667d580d5117a76b1e44ae611548fbbe275851679432fa1182bfe214086f7bea3a87291aa3fa2266d3b5df08c524f8f4cb832b5ed2f87e95f2d410495e8e1d959d6b8f67de3f9d7ae7df5136e645155e6b79fa3699105b7c72452b5ba7e2441b49b5aae3b140683f71dafedfb2818fc2bf0d2b87c376669c19b09d7dcef08659708084aed8bdf05ff366a80316a6f0ee1e687f5d3222c32d576e5c92b63ba59bae0c93463d8ca9617c40fb7366a5b30abb0ccec49b847f09f2e02bf509528a239c1941026b4d4428947774cb62fcc6b410d2b1b91b843dc31aa8c20132f13abc5a85ae1eeec2191bb65ff852cebd1706c25a81c2e255d2947eae0408c02b8e3d138efc88941ddaed83b7b2576bd5a6580fe74c49df6898c0105f181f04f3afee63d5282b456c55c65eac1ad1c24717873908c21cadcd33df0bb3726d90213737f1677261898714f0657687163bcc16a714c3a5f2d12140c5992ae9131d05d81f228a01870f384b27b3b322490b83f98acb8396f418ce94d2e032b7a167de45da5030b5da7287fca94575ce0201156a9d2c062a6d9168d702daf98c3f15f263c5c46aed13d2c72db3692408c3393dc54374f01533834615423cb22910478427283c146e016b0aaf1d6ba2384fe31b75fab727e36f55123f7c191224a4a29e30a8aee51d93c0e4251fa09238e28143533315d1cd84789a949f1794e9c7d0fed6be7a5518eb70185792273c564d833dc412f9301586f33e40239f975c990851be11bcf014f2f80cdf73c013e426721fa8e42da531518cf2b6612fa7f3c046ba5c60f9c2a3dcf4211353e81089dad1ab9be194d74e4f48aeb0fe9b71e044023054b4c4fce47dcbc373fa4e5efee13a2f00e2d4c3e01f30d8119687c7132aab4125efe6c514397107339b51d0d48755d32b08a0672531158ff371b7c88898f1705d0a074554a43b829cec13f72f808d64305aa0a536b67e7b2916385f7e9ff7bcaa3d1996f60429f85eba1fcf3b9ad16347fb466e61c6d327f84c427b5618bce05c4b504bda2289b5e10304bf92a2c0d42cb06c762ed43a072fc41e485a02c7c14b854b97e9a67ddb383aac5afbc5daca2c515abc8c57953da882d6134d80282d40be8ff0f43857a42a31fd374a99a2a6790646066d42c5ecdce4e838c2ca6463c480784746816829b400bcb26c90c66ba93b9c32963fc22fca3025c78722a7a22997a582da1d51517f144a6ee4a83da2a6562268b91c778aa1c18375ff5f8278fb142be268ef9c23965e1314c6b920cd68cc7b749977b27c11152ca6b6f6230623a575dd0f93fe263c2be56f96d3045dcab2597fe950126b758ea6b027fb07d2a42a6527f66d53a2fa75531196262abce556bd269c4580f4adcf7bb8d39005b759df259a41103bbfaa6f89a86d8aa06c5c4b106e4389d5785423ab10badb20ed01326774c9c05679510dddb9d354ae3d8a83a0fb1572d270ea17c42e2bcea267f4a98623ea51a5cc1ab1e00bd9d07c4b4f15989b4c0be4bfa11b966364c1c45b4b8dab7dcaf60bfa1cf7068d24dcc8fc50d15987ef38c26c9efb584b3ceab9e0adacdfe67370301985a623c499fcb057f567576bad9efa4d4554ab0e966f59d3cb668a8090bac29e74f22997b881861c46be852e0cec65171ba5925a5b4981498b15d2f4ad7430e8dc2cebb35557e96afd046f320bd0372e8633d20e5922e55d5510277430dbd79338514e20ad52c6fa63071d0cb2d3c170dc159af33fbd6518211b31e7beb7cb557d52be0cc33187358671b3325c7f95ee38080b331bf7ac79a7d99a1cf5c2d4650e988ed2261a9229b2160e366d50cebe0cc4b5628ff5161c42e9c91211dbdf79f048546bb5378211479463d7a6f0dcccb9424b89874359561fff39ad27c7c6825fff21e118ef56724af06fecd08e8f0dde40e251cf4326d316a0aa065d3f8864a2900470fa9da3d9560d84f620eac5e08a7f0c98001139abe942e61bc71160fffd4465c01afb81f6f9c82f70dac50a0138b1144f46f9661e10dc97af4ce9ba9881a5189d8adc74eb40af28aab167f41409d20884ae8d8398bfdf8552f4a85e41b11b4ab512c49dcb09f6d85b9ef46cedf0f6fd5191f4fb8f4818aef3dc4b739285f2bf161e7025d367a734f9b1be8fdf51f55ecf732162ddc5652ea8b2d11499d4505eba6bc7ffa91ea1498fb8fe7964ce4446d4c23b20a6882882a96e56d4ef26e85e4faca94d5e9afcf3cd15ac9b2873074aa8c28efacd1a7eba8f2eff3e4f293d19984aa562227ea98e7210b1d2828638f2c05843c158b8492b5e86f985f092ac5cad1d4f8180bece11c9f6dec9b0b8873407a29183c7ea7a764397ffb759f02b49209696a1c8f59198f5457c78fe3238191622c34d53563f368e694831b8071522649173f85b24ed63a2161140c3c5028d7eab1ff38981051cefa3374d3967d04b60cacd32c887a9a0f12dae7f36f723de69fee8ecd4268f4b05895e0ce0accf66251905be768ed883d37df3f52a4db152666c3bab4509dc8e99b8b3311a432aab177731bb4215d346afbef8369e12fc6a84c9fc421f38405c72ca4b1c2d8618d549186a1238cdc0847fef49de8c68265651e52f87aa5f832a1b7878b5140a97236afeb9174e8308ae3cf0b1f6c24b5cbda7d28cfdd3e39e27336388f6b166e0c8e44e8b030c2d6f792309e9a4bfb1dcc03981a0bd7b281a1a97c65ca89af9694c8d1995fbf6bd97b763b6326a5886bedd226a94b06e4413f3195d6c0d75ff0cb4ac2cbd4ceec85563cfad985669a35828fc684a72ad1ba37ba934b64cbc8e5049299e71099257a955af22a729cf71de6a484bcb008f4f39ad4ceb9528dacce8dda2c8001862ed82e47078d31ec10e25e54479015281088bea8065f191ccc202396254579e152c40c6ba26a2d62df2cb62f784df54a1d3a788cc2d94fc1fa3f91f9d9886a8b9315bc125d2f57f26c8e98a3ebbe70810689dc5158e316abd0dff9ad7ad4fbaddb5d9474fed6093e0378ea6f55baab8183ff0af38b699101ae5c6cf51e712cd2bb47ae26082c23f835158d48569cd6e7e13a5f6568d019d07ee7f0e07af571d5b0190710078087e985189cbf377c3dbfe8d8cfde0a482c5cd67dab47f6905ef9c0c01a6b509ae88e81a502380cc5f8cadbf10e57bc8456c82c9d78f0d09b6be23c420325dfe325745488b04e26d1a2a015ee834d03a51b532b7746ade2550bf7e57b7130c40a0a1eea550e32567c1d55b1a4be5ede4f248aabf193863dc23742f2c3b123267fc19a922fb0ecdccd676006f34a3914c3797660da9c2c5a5ddfcbd654f573f9d7cfc9ace45c9077307b55c9da102b0eb499c58c2abe55ce82a8ded576a713aefa81fe78e1696a881d76941961f608626156a5d57d1183058f4586f50b477eb705405955bca3b3718ade966591689b3c516fc90da9e4f6e75251c17bc4883281aa19d931b499455939756a294d093a1faafa9e98b6519d28606e62a3508d39b5dce3fc07c5ceb134815c14017d88cec58bb9f0ccb90f4bb4efa3e68916f375c2087152043bb48a80869ca543d0f4646c357c465d1380464b8180824efc44a8aba1632a3961ddd51740cff6af227b2d8ffcea6eae88448ffcbe6b022386bb0115c1229f46362965e196822aa8a017ccc80629bf6c552c4f590d40b83519a0e482e48de30ffd3158bdba7837e6f889182edbe122e77906daee48f252877f746e65bdcb6bef193d4291ff8bb4c185bb9e0ab51b3fda9b1749e257dd900826306e7c6f9f0b2ca2f70bda424b910e8916a37c879d885f2cd31421d2e41cd448ba00c521e7d16e4a1b072a72c887923f87eb70079f9e416419da8fab6de4adf45808252b9bb04ce12d036191af20e7268e5c4bfe9c20d5c1ab213b569c879f36465d5c9ca93e73b79f314ef0998dc8895e4668ffe418d66154fd16439001f17c7f4f7499104523eeeeaeecb48b80ffbcf2437581e2df37d287f12a884d0549e45226b56e5aab6cfa01e3ebbab08a6e55ff6b26d21b4b7df5a22041fa7d3362a1abe0dd881fecced1b650ca452f98a4a30fac8a5b13927da85f889a9155fc980ab893d934d887e7b39fa1111496c1fb4ecfab05d718a8901abf3387d8785f69f84c9c6c387db6b825167db0f7f56ff5d74bf0544cfd97fc2232814309dc6120a76482b204bfeb86fb00cc041f1d41da89fccb31eea1b8a1a025f74a546237c278fcd96e4187717fbf14292988ed0ba02c0f12439b435ed5c726d2bdd74a12e504dc2419416793a89500576427db1caedad43a1116d01361a2b84aa497559a11518e373b614a443100e3db89621452c7c303118f6344884e25b15265d1135453a04f04099184715792e53fc6f0a75e1cc2ab8ea1d0498891403c166157bd54ba05a58f36090e9e25e30336d794d6da6448a8f1555298b06bdc3ba87c35a4514e22bf222d28f5e2d2253b50ba99521446101f2ab9d3a56f2a06ac1781da6aca12ba8163e876cd3f70097f482470be8eaf09ccc43c91404d18786135944139e39930a89f8a887e661808d2412135714de32ffd8e976e179429316f426b04822ec9c2dd57b8962e55a2a282ead342800ebdd92b7297605d59cdf0ce3beb0f78131249a7e8fd33b25c61f93a252fa91cfca0ae3a1727e8c28e7849b847b35c60320cc09d5d68b65d3a12210350263d5ac250d28d6c8b1f4a18ebb5ff02bfb6c298410663dce0f1d0978661d59f2ddf8692067e966cc6e8f16e614444a65d9af2ca49f43b0ec657792f5343211fd000ae0cb19222ec41ccba6d13ca19b2e37f28d2a791120482edc46a4634d43b31795bd2d667280e67d7e9cc048d13274459236f0ff7cba8173718cb5e0bd7b09a026c57da285a766cb42fd89e1762b770791e2cf15be0555536fd870234c2d8774c4df15b948a848590859103400dba067637088648624237702184e8f611a0483cc1b6b0e8dca51eb4ff33408ecc810b05f5e0f8ca04dd0508470dceeff4514c40a0a0984e4102a24f5719b3e503e5b41a205f1add80940f1a573d3a99ab2544370570a9da994799473e77ba5db37ce07a8f79a888aa4c53b76b6864bb7661f9a0f290da0eb4965195294a3c33dd75fb8656ed3548858b1fda3a5aaedeb743489621c3d8ffd380e403324632609db117041396942ad25e759824628561c2e5b1ae2d254952978993a675d0b91467dafe94490a420d22fcd684597f3f356800f233629f601de28e05c9150610a2d4bd6e632b943d58a2ba216e55f325784ef404ef3c1a0782635f076c60be4fede9d3e775b47a8a9e1cac4742ce88abe20990e981a677447f888032d16dad5b80192231f545e7ec360883170bc848f50141f95b31bcad80119e946f335cd8294392cf5112f2d973130f5ec01eaabd7049344b2aa0fb128205f04232a34a7a3802e4020259643c7960079f07cea761924b0733d46a303fb33037faa77e161e3c786e77253c10453b1a9a3b05421d78f026a711edb0c2aabbf20552d38046de49894b9356581508cd1555642289469b493143ab2ed5d97ec67e40576cc927d1f580e9306b105c1b0139379e2bf3ac7f88a9330805ad42660dc5409b47685399b95f0161f68cd029d977872db1287e8404199e84b7c8dc780061f80dd6e02094b931c67cacfe493ed901f1a4308d2ce4268623b2b93f20c9355a96604f456727c98d41ee2f11a91c540a0a4b76e3748a12d335a84e7d4bb8a814b6af609400858d0ee23dc12f6399fb9b901dc5281b091c14761a9283ad8139379537dfca1632d14a9f9914d2e022eb2596eac23640d4f7d2373858769f7b53accb08088c4c94f9582388ceb2c337d25ad6868c0a7aaf8311ee82964327f40987f730b6bd73cbd2c7914a0edb13198360fde712322ca5911247e845a9eba56d9355d37a7a164db4c76ac7fbf267a3f5437b50228194cac43243fc80887dc4f1d010470f024576b18367a22f9b2612503a165a54bcf3f54de088ed741c7b9170ea86e8ee00325221fdc8b8267cd5f5c18963d46403a5adfc523ffd8940ad79d4531b9022584857b134394e39d82f4a48339388c8c42c4b666806d0b715fa87fe0795a4c24cc10854e7190403e4a164be17039d16f8513aaa435731f9f9b28108fdcc95de46f8790253e9ba38ab7f69d4924c58fb4fb210b59735bb67ad252f25f60a9f9c42de8089aa2af6e95f04e19d5e51497bf50194dd78c09e235f010f368b0b921a5a005c142c87f11c35319cd5cb5123527192d0013a38a0ebe383c6e80079861af5704163cf0708a89e69fe33c0b5d2ce350a65ba749dddd7a52396e79697ee29ec34292b119c0d41eefc69e1203f39a7c183003bc020948cbc46e2dc55df0950b21fb998854907b461245d97744469fffe7a15d6eb956f94d947d506423177fc0292abda8ba1a394e8c99348639bd39f3de5f18e424d98d68ef0e530f2510fe2d0024682c581b65212486a61e070440776052d353882dd4480ffc88491959a30cea85843a9b452ce4d6824cba24194b9106cae0c4e9389d1a7d9673c2884fdf6bf455f937b46ed40344ef09b2cab3687225da21ff76c3c7f626f744aa33ed33d9668648dd4bd56793e304fae51369f4b341260a2c99dd37bc296720dfa9c2f7a25b8d90d912b715ae7149c6f8ea2939771779cbb8aeb5397869d1823038cc35309259953845125444621e35606d8540c09e7b28cf32e75bd6db8f7488b07b2d10e567075f4cf0129630126af26e52168bd291cc5157be7f5d238121d646c5a79954f93f7246d09f23755aeab97ce381b4fb7955684cf6a951bf0ca7fcab75fff607a179de876ffe0b524f7a2473369dc76cf15d142bd0b218dfc8247d9e8fc67abeb109aa28986d2a0cb2e995c6c27d8c4fa8399356ec160e55b701629903d2514e9d23aa93278f2a88104a3d78804a7cfb5ada2966224187d2b4ae979aa709bc0c536763056a7f7e4ca835dbe0349eda345f50fe6f4c4a72570cffc1f6ccd9970183a96d7e08e201c45d82b21455a0bc95a1d1b533d9f3a003bef7aa86d07836f9e466c5a6ae0f16615da9546fc2af28cb8bc3b3ab33bdc063e33ed188ce2d1294d642c2a961483e737d51b3383cb4b6cbe53c6454efb8b324609db939470805f217254981ade884bd84acda403e8d2ec37dc0df04a38df2fedc51b2ae1fcb75c40067e36e047b062955594b01992124e94732af4cd93f0f334253ce939901446bc6e798b952c9280120665e8952814db6880d72649c5841a1d2bf0a28c70e468e116e727b2e150abf87c2d8acc189cb9dd87bf2c41fc2072425f6d2096edd5d7f9cabe6a98738f53586ab1d7a1472cd6c47f422febb20e5f95bdbe09b67a7bc15cd97cdc189523bda3a411f1506be8c25bb040de0ebd93faf1860d3f7a8fe516044901267f5c427856454457ee74fa5bffde1300d784c6c62ede1993a7669ed85aa75397a6c7e4f10cb1ebe16b90ebbc8be92698c9c47cdaf84bd040aae3aea6a3c95edb9a025c41e958b757bebf04ac86fb2d6e8ff78ab15d5aafc79d42548b508b0c961b2139243047c541a9f153859ea10207cfc91aace50b4a4012b127a6afb6d3907304da6f115a38e4ea0531571c6b89293c44325f3a0aee2e9e8510acfd7b93e68e546d60744fefed87cc4c8852494698422c7610bbbf1548d0fd45c588e9c16026cd013db056f5ce6d2b715984eeaade14fba8001e3dfa9bb0aa5c7b038d03d321e694a3861ce6fdbc0bb6aaaa841ddb1e163f115724202b5059d3a66b38e8e8c0ad820bb408b6d0707f9cffb23375751af5c37aa21ccfe72315beaeaa0e81d8cb0c0848132038b76aa27e9a403798b3d7a58a4159a08d3e3f138e05ca7deebc118c7d18effa5cbd8ea539c80b171e78df909e6837e94e3e37d56afa4e5cdca8a80626b2081d62437eaf5aac80b2ef9a99b86a6993d3b104cd1f38717b75b07d1b449b2db76299d915d94b0773779127611f4bd7f44574f0cf46a7f3c5fdccae925e4f0ceee6f12bd94d709e3fa4fd2bb9885c186841add04ec157a96e90386ee953893cee194ca4d2ec01d38ef4eff467e1d01419c375f698338b666e273928f21fa375134eb755cac0c442be5e8318320848208ec590d3ae3be5e6326f9fe026afe7ba1cfc7a5a7e4feb2d141974c219c2c68b752f38759d7dc614f0ff60dd4597ec18f0660773a83b1d05a7e38c2585cb5bf32aac784185b82309aab0619826f4544e88c01b3777da9e81471b52c881ede379f8585e4bddbba74a0022f8f855ce333adaa9b1b4a7f114c457d7dcaf4ff78ecd43924c31e95d8cdcc90157165b4ed2ba0d7a8ad152ef084f44998cc6df129748ce563dfc2d41c79fc666d1e75a6f59cf1bf48f122936084a679268af0152268d9dc32d19c9747adacf6f889aee29a5069a2bddf94a60fcca6f1a0277654ce118e934d8624b6eef69604d36ec47006722ec6612864be5db1240322688e015740bc1667b1b2000fa78da573d0e9c227d6ebdf69d5e85fe405e0bc6f3b4fc2b72a4495219bc4b85c5993702703c2d29124709d02173077575ea9f5fd11f8617722278a5ebd84c8e8f1763549d69b8bc0997ac454dd7d6357a56d7896a15a7f390c36960a93ef508aaea67ac25093b2c8584647b64cd64235ba700008299966f27cd47622e6494675dcb119c190dd45a0e8749e6912edbd3b75d78bad652e04517fcf6ae52fb42572883544b3c6239131dc3045e0273617f5079901d626c83f823ef42fe111d9438ac29ee1c779b4c78b54b3d05cea14ecc22d89ade0c0ed0385a87b653236dbcdbd89a720f8fe631f1481f434e83fced22ef451015b925eddbc10e5a95c9c3267ae493d6753f5bdda40d54b28a1c97de96c8ea77032ff1a0520b366455fa36be6261933625fa7a7e974f979f2755ce91caaf47c576006512373f9c225b2c4725102209950a94ad5cd010aa21f7b154ad0c8f658ccc0b78f3cec676833e78d5d87f8b13522f018ef955f3ada2c2976db32a47424c1e9262e93c656444c0b5cf461e92ce1d80abee9b93b0c6a71fbfba767a8b4c47d73f11a0cd7baeef79492a599ec02fb43263ce3df088c96f488913ca14fc8aac1e0be97c88ab31f617cec5f7374ba280e95bc0a06ddc897f4ec629795cf881016c1713a99082c2f437248c014a3e37ac413d113aaafac46edd3d0f05405c32e29337888a1d00abc16db8d95c736708c9fbb6c4b09a72714e5d746ef752ddad97e3b6edb8dbe77ab2fd9de7fbea171d48c6780cb11447aad5eeae1b9f8c30b3ec5321e68a1b79d116937000f5d8cdc678522bcb9edf5e68e783c3f753a7a27222690acdddf7c23d197b624ac0adeaa441c5382a30bd392ecf19f9eab47aa4a74d0ab8511a56bf69fd88c263a10d5c44a09fae6ef9b30124027cbab34c2e9b661acc3482b1334f1a40166819fcc191d097afe65534cea03f8f8d89c4e3220c587a1e8ce3d5e382f561729fa44f1b25d2e305d11bb46be10682e0b5d9f2cf409a78ce45993282f6ccf5c5648d85df7d8800c326edda270ac8a20116b07f29562060112b75e5b5a2b3b10c3ab8883bfed288ecd65105809e4115e2de463958da65422cd534846e2defc87cabfb9bf05b4c8a49742786aa924d6202f9db50cfd053cdaa79d68517f1715f02449e4d35dae18af045714fd2b90c38ffcc37ff6c9a08fdc3549e6d5e7ce53b420934e8420da281ce795ea959375b5d29386816b9147614b90c0f47293ff19f7f69c6bbf76ea6ed791b3a005691cb88a87a71f7cec7735394679bc7494ac153f4e365ea09740b5b335b88f309be07f68694d3941a8e56076f77e52d9655cb99d7cf81cf107e5f1766453084cc988897f7b9a19a494e5c0e8d6f5d8fa7451fbb212eae0704d6c20dff47a9714c8c4b821ca78b581ef0568f7911ea031a99a44184fef3a4f20897d9d924e2b2e4230da10ae56147347538fb789b0998328da42b6568fff90a4ee96b568d4a0595cfe21d89bb25828e0fa6762c8405a2774eacc5da8b84f156130455f33386221512213b3481423dcea762564a0c2726e08808657a07bd05da56808c884f0045a39cd42095a9fb5bd27fba83577569cd4dcc4cc697e1459516ec9c683bb407b4797eb3438548304c152b76482c3c81a931ba322a12e85f3d7277d8a5af6855e132eff2bd3a71bb47c570c1ff8417f1162df5eb7bfaa60bc13fa5a888e5a6f224745e23ef944a32efe4825aec1d912bb76b9916b6de87f1108a3b38a84a337020e59cdb819381224ead0320999726e5009998eb2cb863118f6df469bfe70e57b034e54694a9460cd9fed26f0359e7feba1c6d3ce54d584ac6fc077b3b99f7e860eeebbe5cd58022b0d9218c5adb7d842296ca6e2119f12c02a9685848f6e40539090375363b17429ba8546eee03edba9538d314cd419a17ec3a264d8d1b9d10ab778cec6799613319d4d1e707fb0c79413a9ea677b8a13c00dfcb261359b617d5d46e8b9c2c85de9b8d4e6b6d5622486e745c67432d5ae7d57e9ab963e20926ced97773f4bee0059cdaecffe09dd5fa2ef604ee6f6e870e1b1d5b7f811b903fe818ee476250e30ffc3e546c47c37d8fd3931e23c3ebf3357f086940def9abe71372b0ba1f4300bd773f774ce3a93739f5d231c26858221d82c4b3525c375958eb9a4b3ec29d130944e1cd1bc51dd50fb7321a6543e8dfe862be4595c094c227160a5d9d08650790bceac1d08d178a061acc7930e94e169856ac3d2691b62a20119d60cec0ea3c58e452c2a7eb29ea5c63a2bb34c8b8869b2177f60727a133be32e851a4e3d6aecd619b7097e1c8ad6e3b135e0d534170651689c32198a7010ef72a1e1b3f13e4d897126161e4c71920a037a3ec7a258160167fb5c5d78271a2918cbee6e00391a2c5085a07541dc7cf89c8d11c146921c5bfe53868e4e0474e27b68719f2f62963a88f7899372e343df3da1980d87227c5045c37dafb946c0e01c43cdb9e33f999de2e9f2b8bc00521b40527d9f9315cc662ac1fdc0591574f457707101819c53bd78b9d9b4f455b52c33e815aa75b52203d9601732816a43a5d95677e3ac44fbf539570e1866e0f89dd7b3e6337fd4228a8be2ebc264f0f5ce71aae9100811dfc84002dd675e17476a648b2e2fe95b33d241992782a46d8aaa4cf86e62ae249d0ca7947161286fa3b5380f8b0b68e019da06bde9e5f5a420f6c74feda5ace35de2ba317336edc0af29d4c66c033842bb1a3e5749f2cea6c8bfa05fc7d194369478f525c1e39cddb2e2c810287dee621466232c1a73e821b2861a8bdc3d4d6d14a6a3f8ca851087801d21d31d6517c8553860961790b0aa7f7b13fd502437dac31471fffc8396ab588f56099f7914e555b34dd3bc4e9e209e5b1f611a6b7ea2196c6a1d71211c5d25ebb88a39e397ae7ed96f42ca2ef35e86fcd53eeb57a05bc176342215dc148a022846d51c72e6bab5e998217879e6ae67f551992e7c1b3cda59e32d5f2aa415000f7f63a0684de9f32013b6fd4a283f5b8e9ef356905b13de8f998f26d02f7f4ff4ba39002d6dcc9af8c21e5aab41dceb07e0cee51776c760ecd8e8e403f950d092e2d0d421606a55ad567442c7d731abcbbbfc6c43404a7afcf7cc8dcf233641c497fb5d6b3431554919c412fe29c238d6e223bd61ee48a842d8d4592a40037ace6a0a7df0049303fe73c5a72a143023574474e98d050c658715e2c6f5d44d9c73b71877f36b34ecea088d92b658416c0e2c65db8f6d83db6d702bd30c978aa9258a231a273dcb8e9e6c0b5cd262b474e09baeae3147c1a55a7d9a3d191bb1d4341f909bb00f1c10a64445f54391a43f5213f054984aeb6cfc5ec8fea5588b24246f43f9be468d8ad5f93ad0032fc642b5868e749d74199adc0fcc9f4b38a3a237bf5ccb915506744df9f819f405e6da718a3eb20af6a48a1cb249f9c61e946c5706e263aca110044adb5b18992020b291ada33f8e874d6c1cc5770021da265d12d9f84e6efa89b2a2a3b46b6dcc7e5a878092ce9dfe84b75303e7c27872a8992545ac03a5068c982d15cb55b862fea9a31d0194a7c14fd2dab5ab0161c9df4033023d020250b6cbeeb9af0239755a95bd217e52a91abcb1eaa0b4cf84863c11249efa1064302b262829ba4cbb0521cf11dfa757e13a29a036428a7ecb365638d0390dc75480bf83c034a0bdadbe6fb1c2d28656089a4424f1fec2fa5c967347d94f132c8121905be8fe1cd5a06bcd631d98db4c59e84e145fcd26514a3347759b498c58b2dbdd47c0ec96c8b71ee56897f6126b5d9a44a5f6c132cf20131c1719dfc4c2433026e480fdf2f27b98dad2bffbf8680f21489a6fe34e99a931674cf54009d68d15c67f11e60a8e7ca410682c6587a582551da351fec234e5937453977dc3c3e10a281fa0bab113aa49a12c0f09a2e7e0146b0c39f126e47e5037820d5da579d9954aa7e014465a86e467bb5ee5e0f72e3d99137b8373c616d69d7bb35c2ab8a47968ae8af2856ba9f2107809ebdc20cc384340a9bcbb828210daf7aeb062812c44ee0ee29d21105559e2737dd3b4a86362170ed1b7bc74491c51e7951d108d2fa21bc9d7fa18f719d2789e65bf12b534c822ee8f8b4a59d4e0ba434cc3a5fc542ee1a910ce2c3fca01d6c6b55feaa34fb70d2fcccb884bdf34c355bca6fde7d0068f2bb92c2ba400c5c51f20f6bba4a5099f77a570c139d8b8f3ee562c94c67f56dd360bd63a97a379576bd594e087a6848ea5d2da200422b42cfe31a01787ac7aa535fcdb2a1fdb71e3b3e14826f2049be38f3a5914dc841aee25e663cc336f702a4eaddbf8047425c66563c9e0bdb0776a8725310744c0de37084f18228c0b942126042419341093857e53b3d6827c87a3aa606f1a464438d21fdcd22ac515260271ff3c869132b798a657257e520e4a08947fc57548e19392627579d14d0cfac68aa51955112bec92ed0bffc04ec7ef4c5cb3e27be2ed705420c6550011b7707b51c5bf2cdbf237eb963605b6a109c4affd78d123aca26964dfd4e9fa25f85cb88011dc7e7f1672eb1163fbdd2608d5b663e4955ef2b557d373e06c5ce560d494abdbe3c223733989f27af1a4700277aaf9a2016fd8696e74488380d4f6aa4986af621ce3345bab47009bfc96d44ceac510d804fc0205063713df23a776210af9dc1ee51d8c467183cefb37bb6aef2177c50d4212f665cf4cf9a84cce862553124e43a623928119b3888358b7f71945cb4bae10836f1a25a27a1583c9bb8e857b34194b117546c1abe6c3154965264307ca4642ca6cf6d3ae48211073717304774bb385d2f827b90df6f6c709a32e6999610a99b992533c8eee24bdec53319abe0911719bcfa2e7e7992399d395e37e71f77e5245fae02cb8d944492a24d81dc03334ad9e1ddc1f0acd95e2834ccb56aa6c1117dcba54314d07cb235ef21875d687b1f13305eec34331878baa785d5b2c6dfa66596fae90912b5606ac503003b8b0e3b765ba4522b64fb825ec1eb50a5b45fcc37a66e50bea3f17ad7d8ef4aa623690c3a8c0567c1549805ae0f3773b841dc09f8a6c848f128b341cdc4381dd145e8b21dd078deffa5e05d27a480ccd21e23487a242c767942f9794e47f0bebff331d716b32d9b2109527546a2910f9608477647580e027900525219295109c06b41264c9187928bdf203d10c90a4a36c1df5989b977e5ba4e40ccf6abed0e08d8ed5be63334eb5d383e90386731f3888a329ea83691eeda6c1d2559285e024277cf526c0da109ee1e63d6fb7231b0388ee72e8a014226b6b8248c0379178660ef3ffea57cf7c9b61b7509d5be90bc3b20e9e172a3235d4648f6190164f407e4723235e8e89d700b6d27721a5a16825a1f3e301c8fad308d42cbc52fce2b409b532ee9621a2463073394307629578faf8bbeea02828779f4bbb6617a6d7c5881abe7fe14cb013a4cbee10f48eb1642417f11ade92cace6618740202f01e42190ad226c935c42ba07a7a9de7bfd5707e570798f504537f8a360877803a0f9bb0d8ad1502d389ac53813ba4d63de4b5a6e0808b5088d48d44f93b67d2a56f9c836b3f1ff79d42b8d21b3a2812f2295160ad914f4e80bef0f20ce68f393a15614d6c4787e7f57d4cc401618d54a9ce20c4e22127a010bd78f9a7ad1c41d5febb5f0aa3b8a48585f5582270c2073b2a6c5cd8e5863ad5b66c8aece0cb84203d22241f8914b32e60700414c83b8324907a1e525c4e56d2d9669576af7820831f3804a899154b429d662b4646517112653005017d3d110ca9f6cdb1176327b7b7abeb4d214f981866e3b07d056eebf227bb83c20abe8f45bccf6bed97d56d7e6d3d3b2176b0026431f0cdfd3f20c8384aa1abebbdea3400882ab6422587773fdc25f9bd05c884a6812908f2406d66faf5c9a358a563654c623bd197f0197a2af74a5d5f9b0db5dd629ddc90ed2416cfbc76d335ef2510d97807e5288e300992aa812bbee7d8d9c079275bce853ea7f6ce03d46c328f1291c0219531abdb5ae6d3c194ae951e152cd8788f9b9c687ae5a12326c8efb8058df6a924c1e3341693fcbd8be6f310940019e26ab3fe0760c9b59c8ac2a5ae334c93d79de3ca89e739490daa79273ec9158c0f490b5db9be39f8df237c521631520f161b9dd514495416c9ef6e646bb3b6c9a7380d6e5f963c4ecd7a85f71bdd990b8dcb796ac667cef533381b4176d3b19d210a59723fcaff0d039471f3f5c6c64a4cb611d1085a7882e38894acbddc136f24b2a7555ac880117685da68e4d15395b5809d8cecbcc1d2e50e53c7628dcd1e6c2811093c0ead824f66e8706d544111cbfeab8c63c2b5c47572f0e74922f3af4fffece8dd6fa03060c54b2971243585bf3a01be751bf68ce0efedbd7c2ed29a41ee6f8ed3695a875da87826b84585e30a0b799e5ece4ea85bdcd47694e57abbe8928a319a8c84220540c63b5bb309915c06683fd67270e13fa6e188f27331aee2a96eb4d72f272572e3b7fd79584c64bb2304c6a9de1cc524260b1353bb9dbb859e98ce5d8a1769e6b5a856fcc3c61a8febb58dd1c494c2996cd0397c48a8e7577d31f64098b8ceb87cb07a7a0d2a87270b5774240858fb8d6674af803699708df9f2bf7d0bc83349752cdbdbf224df4df59966ed7447d79e9b49967f73ecf738870ebbfa6be5a3f69221565f81dcc98a9f98d641f93a67a85ff7415551850d71d0601b224dcf740ec87bd2786d6ac8a934dd9dd8def1ae2471df1514f5c9944e75e18ce67bcf06928e235546d9f9f0ef3ad02c84c7ff43e6a0782d675bf05bf513d8343f0387238afb978df9e4860afdc96a89c63f533602efd8997fbcf7a8a5ad176f3a088309f329b5cc2b63839ad50ccc428bf62ed7de431e959c67b69e1f8c8c688743dbc01e3143ff8099003f4a9cb9eb239cc11de8b5c14015649857bc57dbea6ac1418606dc74a22cd73ce4660abceac6c925e514f01e78ef7134ae47d2125aea2bc70a04b263f89f1421e1b15531415b2c4d906d1c8095680210a13691952eeeffab66031262894e247455cea24221e65959810d11928c645c14cd2bfe19cdbd2d02470481a037fb04c5437f61be7e4ac77cf5dfafb909048cde1bfd71f16613dadf822c9ba6f57b76c03da7ce49413d6bfb2325ea0d44cf6575916e8326aad818b41fb34821ce2383731ebf73b0a5002b91f1853bfe931a0f36d469b6e50ccd157372264c60defc650bc8eb849ac855e0e254a72999d6df64fc887e21e005d6f37c36f7fcbf2f6de40eae60cf7e71040f51061822e8d3c4f240bec19e4c40f54b38c2e9f80350dbb0a3fdaf17ad5feadace28cd35b56cf35160c166045a9a84a49c3aa6580967eb99ef69d27aa9dfe3c2ba2116102183791a42252a8865003e5418a0dcee55fcce654136cfa17f02d4aa77d96a703f1368c3be7adb9919674446087183d14d73fc273cd796cabe18957652397d610535a3846de93d6c80f42e200e86718ace8b573b36f859e6c417655d4003aacf90b03763d4a5f1f5a7d8c0ac7973077002de7ea9501d1976add4b35b9b71f2246dd557e50934479b59712d89943d5853f73dee7ec46706621c4e4761493203eb55dda78762d764faf0497b39f29bdc7e7565309149cad4941a2e1e4532f5e7fcfec371ee302d3f62bd9f138c48d04a6086a46489d4fca7b689f123fc659ecf7a6ca1a6cdfe875d60e1e993c4faff7e3aa94220974b9afdef004a73722024639abc55cf29d7c6b9187dcf87db2f46319c15918e44db31a003109be561341cc642d4a5068d9c89de83882dff9e3fb6cba3e803fe3016eb176bf9a1340968d5cef8739b4fc9537eec865a29727200b6826f431941655d360627a1466ac9f14cb36570833f40b4297cbf47848755699a65eb033b821f3b1f5f4bf4c319e9ebc7569b54ec24d46bcd559b5521ac1048eb3957b2f7536f29f93f6a49312604989a1802b13980a3b46f5720dee812146eb4d9098555b8a6700c1797af35390108d8d3b3a456ff065021cbbad7a460d100f8f046437328619ddc26767c9766c715ea6523444822e26459715ec8173a99f643aef7745ebb024dd79a02d27d68fb999607949ef659a00da9515a9481f3652a2e602b741149c8223ebc261b3cd43a7e9225aad98f78160b34ee335ca9206c05d59ca7aee9f2dc96e821de2ec38194713d21a179b0d6d7bdf56b46c856bbcf3b6643ec04b06065d67c860d060e7ac661d207d77432ae5291d45b6b050cb174d52595a4128fa277bb18d5879269c1900e9fdfbcc09233ad6df3a05125537df3286319d79e2fc70624273b9187abaf439b8b9bfada5ac97fa091ce78e415fd17999daf65ca0923c4ab511f18a0463bad1d196b2132c8823eb86ba389421cdd547a040e1abbaee55265009017e9ed2ea5758ec3b63e8f9194a0b4996849308539984a9835b6cfff6bf203d2565ba09c887282b7205a24c7cc67c187d58ab9b1ed834e9f8d4ccd31e84495654e2d19e3f4ba3e13805129e3869fd9fa9ea1104ad8a58ca9f42f4a3c9eacbc4e1518c3400740b6caf9f5fd58d4f285389289b31ae31c969c79edf9bb0b559ea3d74a596339264d3ff178407e803b1ca870338b392385043e0fa26931b66dbcd970ac445cd6f488e34b51c91eff0df91bf897ebc4c2e75c3e52dc8129e30a3648bbcb7a1eb0372aaf4494115a670e3f85d2489918c37296074138939fdde347a6e34c67f5b1ee9a121443094a7f42c7f460507ce4ad05de3f1bde312014a43586481c4310c08cb440afd1271fcba290ad862989531ac637aec1f406862b81563938424b89a0edc7b1b55a56b7378e1534666b03dcb8724204a9d7443475ac26e29686625c42049f49beee997872ff63e996829eadb038d1eb34dd0028ebd8b2c60f72c23160174e5b95c0ea2baa9b17cad413db6692f844175eade67485add61e454310c85d0222ee805159b7f73e285c1651cbb4da7ceebbe0ed312501f2e839f1560ed3d381cb838b677ef70420c6eb7ce82573c1733c120166b646b1c9b2998b345c5d9adb565045b559fd49bc70efe01b9c25762dcd37d6c272d7b108dd0f3e925dde1a06188dae804bdf2a9ba6956f3d1ffc01202841bc128c8e246d18b1455b4f2c5ef03d18bdc26ceee40eb41c52e0c7ede6a32f75023d150cf77052d6cc328a312cdd5f0b7db78eb1ca2db1d6a0eafa00544876724b96b5771763280349cfc0e858ef35f9ea36c012518781a96ca2e0179e288fd8dec4cd0ca98046d59ebc9293e4f6eafc3b85b874e8d0357edd56262832eeb63002d6616d333abf602c889ff5db930e62801e944557ae32396c707f78133d4b131cd07a31746e195e6becbf3837d5872ffc99610aab0185b1d371323eeb34434eb6c61352c468eda79add06f5b5c682dd734bd017ef93808c86c5616253fa05b5216a78a7bb10689073b630fdd726b0790afdd52e4276a0a43c457428f0b6f5cde62217141dd9ab8b0b87334110d426d2d72ccf7c4cf09ae286c6fbab7dcb9ce9630014c56047549e414797e0bd9d01f731562f07762c0c5d45e33b036281a89b700ef0c2e38afb5b61b213862c7498f09b20bf7cad2b40b56283a4224a85f8ab0bf52c6a439ed4887d65cb45c9631b5deebf77728604bd4e347635590ab9effae12a209b17dccc15b68f3a5a3c7cc1cca2f8460c59f12f87a07e51a69925d5cd13cefaa661976f998adbfc40f29aef259bba41d9ec3954c3e2d86b8112e7f4df019739cb27920ba99b51fc7a366e8e3b40b64f567304468597e3b890553a6761ac45849c3492090de4076ea4ce4f84df0cc66fba5eef98930d2a52b59e0a110b8eee08db71d6e0ab30e30bf40100839d266af8bdf76e2fe0ac8081b27ee6b20f560675960849ef785b0fbc9a6be9293419ed730cbbe50c733967bfcdab74e3eb5e20358320736d328cbb7c32aa2487d595d14d36475a0cfb95cbac59833a5cdb55923c127954c00b9c63d9b301de72ed2e0b8a9509c0d9d6b88bfff73010174406a619eea021c0939a87376d257886f3bcd76f33f1bc2412aa466f29db65e13b04fd142537ab274bf1512c692cce3661b50b1039f8d1eacb67c3790cf07a758ffb4fc0df1b857b95a2a37efee91bf954f28d5a18335e6baabcb62d1bbae3010dd5f069acf04cab45fa789ddfa658e4c9710b7cb574ce825cc549f19bb1a07ae9db128295a1c385e0adadefec617e5d121698dd700161bf7950f208e6e505f5e71e0c0711a057320a7348b4b131c3ed4e371c50e3d44696bb2227d7796cef9b8cc554f21ba5de6753a663ccc6dc8ff364dd5cf887d5aa9d4374a66491abdf7d2cab267499bedb0d7452d4c3a934794bc99e5354be7986357c57aa8f10a8a7c1159d900942d322838e060703a4a8203595fbbc1dcee687b554c9c7e12f6fd85130473f44002ec5a9a98f375d3c7aa4b2934ec34a7c2d913259907943007fe4fc67def3cbd1dc4a43c5443bd1cce6594403b57778fc7ea9db74cfa41b8c9aa112124608a07b23b744ee43f1876205f6d7bed05d427d8c49f34fc15e2efbf2eec1e60c16920ec3ad3488ec43279d2a3777e66e88df71dca5e09eccf278718ada3e7597758afbf28ee8b9c67731387f73d949be01e91006666a17dd9cbb88c6eb52a4917e4c1f376a618bc956f8407e9f2900a3ce80ad63255fbaa98fbcd957faa3f8e3c915af106c23b57e382a4e4abfcebb27f5e8a706dd123760234a9bd44ac08771e666f8c47c0f21d2db94c3ab6d0a4015bcc759ad71185529cd9c1200c3fa8adcca90dd485a2a324585248d2fa4671df306648531cad9f46f19ab08ab42a6fe9ecae90825856270d723a589307d9d5383e3b310231dd7b0156be080173e4de780fe922263117b1bd381b624745771c4c2ecdebd988999889c988f9f3cfa18e2215bcc39926023e720932943ca84b5c6cb8f8410733c2903cd33baee6a41f29412e97e8270b0e89db585a538e216048c1489be07ad7b15503a0177cd662471a630d2b19be13ea05bae101b50aac43b151efeca5193ce91e61f8aa98572f20d89d08cd04e29a76c76205fc2542fe06c97a33462040fc9099ae3004612f32c8b4d13fee751fbbb4aae1f1c00500e2a22eb8195f8321d7950e100c129f835d5485ae7f8309db48e27fcb723db790db7647689a86db910f282a50282831b472690e6b2f214bfbad6be7180b71c0691ade43f26dc33e13bc5c420f33d85be65575fb9618c8594c62ea34295583421b66f7ce15007004a82dcbbfe7d6e0aa763effeb62d43ba512da7339859d862ec9f22530e5b56408cc9b964978fa30ae84d9986e74ce72b929fb699a95994aff767d3a5211fb52e93bf36c6457fb5064d64b1496ee8a228590da70eae4d53a5119dabb3a05568bd86c7660b381e002cad855422771dd2f4b241b6e1d799d4e2a84fbae270564f9b2f063129a5112a6ebd8df1278d77e348c2a5cc4de12c70f50cd299c01e5d0534a38d367ead988efc64362fc8b4196ec685be6182e74bd401e554df1753e2dadbe0b0d3962e9aed8f8c8d5d0c5589c0ba816fc53261d6ec571e3731d4568cc3f67396ec685b40ba01e14b6f74a5a0b354a19596e879ee214832597be1e871196dd83ae06647070e1a73c58cc339185e828dbe659d3fd134cec98dcbde5740c792fd069867232a8b1c1a6c617c898de4f6c600dcc1b847a2e499a783bb09046683580f6be3ec53075a7af640637b4ab123a4f551d37c738f381fac735ac713600acbb41197633bbffaca73d75a9ed8f4f3fe5c71494bb0b7e9421ffb74f11e5bc01a7571938f50294bdba031a9bcfebc55cadb736e13a8b2ad29d4cff4a03da6fc64236980417e03c608018b624b2d041cb0092bb450d3f1a7ab6d4dbb969e2cc53e599b45f47d9a81168b996e8c26656fa36471296acece0e77f7d302a6b0c181c3c409c225b9c536c4a0abf15d72dd056996c66f2c0953f76a56574faeb45c40f6a3ccd2533f4d2cea72aca147d472634f6bf12d2ce8c904afcb18b5e4dccab7f340f2959b4d2dd4aa70eb752edef26339d1323e9bd71a247159e2ab7b92b6a3821bc8cfbf87c350f458640edbef0d22e0670f8a1c22553d2a591c3844e29ccf32aed0042d03ddd6e62d94cb9de3bd1db479673ead35cbf4a08b218fd3580b0f7fabb116cbeed7051d782992cfd2da442475b43f0da225708aa77df5cc28be7533aea4f1e0a15ff1c01efe43826331cc59d1533eb9badafe42b72aa0681e3ccf0b842a1342b475d533f491ac878f0ec84e121c4337619ea40d31fbaf6051bb6d5f34824e7e73b2e4577b76761fc0ca40a402678e7e43d4f5faed4aeec9390e15435e486d6dfc6d511ab6a12004891a4da86639125cbe73b80604511b9747c5f1e6a3d5fa90d3c3993f52d4cbcd3555c6d903f64671ec517f9c7adb10fa9c72c426528f4cac01a4d9f42154c9457a44aa9dbc4b39a008a14a88c53a45dbf5b065fcee98fab9c017866a562937f609ff8beba6ca4ae1e30bcd8d4b6744f0214d13d77335e81fc15995d521b497c135a7840f3341b5ec4eed2eb35dc2a69941c75038fe28e4ba296ce1891803cccf3932f1ff64ab68df660ce8418e7f61b9b6bc1a2b8dbd7adf147939c98ee90b2eff72fe9e40d9290fe42d9aee77bdcd4b88875fab825ed996f4a4e34ceb3af4ca64b1be65e9ff4826a7122e7e0e46285ffdfaedf27df88a5cfa82f6f5de0f17a07cc8a373575651debb5309ffe8b787f497d3c906f284252f50ae97a03ab7853803b19e8541d76cac3e9d208f45455a150ee322d4980fe44192c607d72955239d9045c91abd493a3941d543d1e824aabb8dab4ab3fa6d413b74d4cf59b595fb1b229c7f4c955e92fb50fd8d354cfecb07c217b12cecfa561a7a4b1671dfe35457841c03621957e91c6fd132a7755aeb0ac37c720041394b1cf00e26e8bde3a2f6c71efffcf940d82bc609c67631785fea0b5965345830f3103f05cf99e35bab95bfb1cbceb541d507419045b0c1d95cb2eb789d40161df78d674fd26d77503000fad6c5d579333bdac3bf6ccd17efc110295b2bbf216d3e4f0c0b11bb41c64fca5fe94910b148a6c4374b26bec32486960343994a188b515319e48c6721a8c2c67c56660840e2283e8f19ba30480a5ac369dc034baaa0fdd3bb652a60eb43707238e3aae2baadb9a77a6ea04108f6cf156a2d81e58890526b2b4017424ba5999d3fd1ca4a829d2a03da3f292163591ee1a212af20913503a8f12bd7e3fc49e518b4fe5dfa53dd551924de0f15e444b27aa28acdcc8b1e23196df9a9e00a14bf58a6a59105880ffae8b02d4da575c68db25b8b5b65b24dd3aeed62811e33f0d0c40c7a4c762a756892d0db0671fc255db6ce7a9edccbf5388fcca0a616cff2ab688d0b93580dca86ba99b034459efec2036d1f4474158c81d4b5b5fc89029f9d1309d3edbbcde9fb6321dd25e7a4ec18e0701abe85212df12c4b278945d56ece3730d129b88208b973efed9cd35750f98ce03d3e77ed5c874d1f7ea28caa77b6ebd41a9900cc491f43582093a8f9a88b055ee12718c2cd38da81b54932c431184a0d225fe8e69bab7ffc9dbd48da134cec3eae277b9824ec971f1b2433616e2aa15f7ca18e41de77fe7d04aafb2d98360e72e347516e06157a14a42ee04f1815e04b5e98c838eb23902adb6b42fb9b99b627c52b2d1b9bbc60ceb13e44664c290baf01156a605f98bfae2f92becd27241c1b6e5a6ad9aacbe3d050bf584b5924a9e0369ff96ce3b596c61fb5af6b8edc1c8e69a42e788a71fb7bc268aabb3afb8f0bc3aec1a0148fd720ec0e234fce3d718b567f90c65ce707ff516da70bb77b8eeba24dea650d25d1185cb3c208a7938c659e6b3ce731d6fd405c7bef2001807b59e3980484b03739dee3a84e36a680e34e63a65bd509b6dbf645b7984c4ac257217929793863d80c8e6cc934bb9cf4b223aa28820440b1d2a0d9dc907dd9a6c64ba5bff5740da46162c7a76506338980812dff4b3673c3cecdcb31563f0357cafc96f0947549dade157053e306767e3dd7a8f62629da86374c8c05ef7a7d691aaef4b1cc8e3f973ef0544c04018507437c0d8fc5893e9023caaa540ad3a0dd890f5a313b10cc0726b250ff39ce23a0b99a5cdda81e8e8f00760ca400c7e9326df19971517419835c3e6cf1cce0e543a019e4a115b261890247de532b13f2c464d9d6ec1f40682c9df57be74ff6d3118ce2c044011e26d8d30278f7b417f8d61ebdbcb325b05e9016406b3456989a979308aab430934be27099d8030a622a068312f732889dd7e14f7b06ee0f338897b66321c3d604bf6e1751cfda83a6e7ba5edb7aea38f91b2842667b13cef5969bdc0dc7e88be46d1a8a35ba28b39586a4626378e7f1754c4db0fddf416266e9a2c847a047ed3f59515cf13da0c2b9fbfdee3648f5b989a47afb68a30cefa6e61fa73c95200aa7a0beeebb66954b5a60436cc952aa43963549de2a571477b003a2a7e9f924950c9d7466eca3e86b3969c5537bc463e04a9a42ce99366fd564f6814a04c801b04d103aaa8828457309ed5a603f9ea1bd21cbe3dfcf40c4c86b6046f9363a9c1d5184adcca6d5b01cafaed3814077a8ff8ac407551ed02a07e0c998410b33cfdf91c84262350d328fa45580e2adfc5588ac5ff6f216d4bb9b7dc52ca94a40c200845082b084f29cd2a57cd9264dd805b248e877a140377a0bb823bda30ba03b3c595c96dfab9efe0eeb6c51d48c309c0dcbf70ef82bb9b39dcc5d401b603207143cffd010e10faa8e9f072e800210c4b363638f2107c6e8324d6aa00ac4c001c17e1e035f000703286bfe18e5e508902009768e052aa4f2f041f456dee4d934038f063e0b4a05c04572f049f45e1b360d82f4d2e824c5ee889341db92da884e685e013b1d8c8476f45938436be6d601644960e27fc2bb458e9a53f58584133243f2b8280b22208a59a1b22a4510d0f726ebe81c9885b2ba594317eff83690028e618ffe9b8dfd198313fe6f933e63f1d1f15fc3a94bde31918f69b3e82869392ac846a3b30fcfc2bad58d6b19d8e563b9aa59562197663e9a5eda098ce2e58e6bdd9f3cc60ee24cd6a29adc43b27bbad59ab632680866b3a14ec2bbfe9fcc69f74cc67a7e11274639458637a92cd6fd0703f0be189cc61495c189828e3dcb6d5e5f1a88d416c73f0a313c98f8a2c48c9373f2a9a5041050e86e447851688e4aef3a3a24915726d5baf4da6f37c29834052eee28ba31522f5d5987182fb0c6fe8802c96ccd2e4767165055b526e4755200a76713bea9f8cc50446098c227473bba865ac0db78bb6371f68cd0fcbb2255d3d45bcb275c2e786d16b9b9b9c5bd43137d751a99d0f7b58a70b925b47b5366ed35153e64c0df1325d92e67674738c9421b91d9dd9c60dda0db23696a96fda062ee17654c5c622f2df06591b8c9261449a2842088969723f3592fb933c124c07ac0a57543ed7f36074bc3f4fa8f1a914b783e9c1433102018364ec3b01c4c8d223ff7a22203cf4decb01036dc497a31967fe82911f05905d3e957fc1f8e382e45373f0b5f263c191bf7c132595af974088a08588df396c5727bf078d07f917f62107f9f47a8a3d867d5c4f573e504cbe8c0308b9d9cb18b67514fbd04373f1311aeefc97afad08a8488c97315a62b0a8dcc7a11df4f5b23df880595047f35cb3351e377f0713e38a1383f00d1c7400bd90fc88ef0b494c5f48e2179297ec68137e9200e073a3391921508514ae90c51661a0f7043afd893bc19c1c707a524a33e4c4d3e9e4273f9dfc144f2747d5cf4b1ccf719c263ae46f841eb94840497296c4183dc7949373f2939f4e3939a7d3e9d48606984c2693c96432994c26538e290727870b3501f8e0e039a69c9c9c9c9c9c9cd3e9743a9d4e737a8ee79878909353a44d9ee339947a8ee798707070704c444c38a619d310138d290a13158e092767cac4f1c44e8c760c3976327077bf7a32954ef76ef4e06903ffbd46ad65b1f7e22e866569b9f7b5f7743e6a1dbc43fd0c7bb44cfb7cd53e9ae7e5c72c7ba859a0ced0bef3f7b3191ade21ae20dfefdc14a4b48fa6611f1f96d7e2b4f1b0682cf6ef6b77c5aeacacdc957bb58b55abf2f96e3e91ef3f9883e5bb99847c71b7c3e36eda64ed0779e535cbb23d68a39b49c8da1359b3c0076b9807773fa64dedfbcf267b5eeb40dab4e9acdcdb51a9bfb2a9bca7b3751ffc63dabc67eb5290ca1ecfd76d0838256b7fefbdd3663e91bb1fd3e6044a9ca094823b6d268e1317d220407ea09b8fab29fd81c2d99462fab483c93ee05ff365175f3ebd26be2c98855b778300e91ffa41f157e1fb01e680efb7d687feb4136bbcd8ef77f19dfaf5ef3ef7d1ef62a67886ff7c49698cf4e5578dc7fd88b31be97f26c52aaf22b14c63177790f6f0ee1e3f4c8b35a5b4526f4ab53a699d75beb51946e7c428a5d406a3dc700684eeeeeeeeee307a8cd8c943502074777939767211a517f49c5feeeede5bb8361dd36926cc08f68e8d213bb6052a8becf348f62b64c7a4901dab227b6a8aec8f6df4d49c3f86e4e130758cccfe34e514459aa9ec10779714637c1fdfb718df7b71ce58e7755d3fb7217cca942953624d73a6561cc1396fb2a3b23fc945981060c8ff08a528a88041782ffe3b22c64eefc54dfea2ecdda347e950f76794457d35ba1594102ebcb27f571e024ea9ed0ea543fd36eb68d75ecdb1af9a7befbd17df7bf13d115c1836db64e4fa590cfbb0e81fe3d5d34692c72c7b0b7a0145f5fb410e4359beacb7dc3f3e6adfcd70bc455552dcce5751e847ecfb9d75313a1f7c226f3d3660f6c2fc302e8a21062d463aa4cc364db37daf476362e5b462eace5b2b44566a569a7028cdc5e8ace67ca5edb8456855c774aeca29efe289a8b71e8e5795549ccae485fa5d253d7aa6e4fe6e3d67832dc2d6ccf10a4a858b9bf7de83ab557777771229a59452f6f0885cac633a99d199b7e2896ea88133c37301d2e236795dc513b9db89fe416e1de4f610a491aa8e912e442a6571c511f8e0548a0b62b463c2eef8eab5dce8845afcfa24ec4e461b6ab0d65a254e8f20cb532e8261806748412f52ed8214845c38862ba9ca375c14693a049f086de21ac9f00892dc842d7c154b51249cb9b11d6bb8dcb8f174d46843fef171feefe5e1681a0333b8ddc86e4c9cdbbd56ccf1c155a6dcce14871c7f36b9ddfbd07f83de2b71ab390e06e686ccccdd86db3decee39a59452ca18e312504226e2275ef17f7b4087fcb34dcb21cb37de8bbfca940bb7b8d087abd9365c1cdceea92e2d059452ad3b762e4744bc177f081f8e2029b84bdc8088870366f727d9710fb23f6402de002ed17a2d1f9cf581526329275b2aabbcdaa6e276bb72734fc5ba1bdb7c5c318b313e563b7ed656c35dcf8a3bf9f33b983c3ffbae838300f9a1f3acdf0fef8977d6c3b18e4a492f2cd3146699cc7a401b536219ffe1e5cc9c9ad51ed006fc1e30877cff6e7e07abfc07df89653a4bef31710f68a3b68c51c69731c33da00dff1ffcf58039a027fbaefe8433bb7e7ed7c1329d3be801f588117e07032f0c738761999e3d6a94df0393e99c616db35b863b99eed1e3bd9c1a315b95d2218fb9568a6bab753f3b10be903b6b726d47ab9a7327cd390ffdf549c73466c94fbb3ab85eb1d0cad1ad118bb22754f6a7e1830b49c75cef5712d67bf155737176b496e076be7adb93a2bba11cbd245f94f2109e4fd0d922f15ebc08b7b32823cd5954f66f28dc6e3f92a177c75ad27bf11bdceeb224100d1f5c7bba62be6cdae6f2d54a8e4a4d7d353a18295b318ab31a0acc8f049f3427e1934927eee0134ffdce9db73d1e9b3dd8f39f4d055b19cf5a8dd77732ecf9cc66ec3b1987437c609f65180a69cf631e3ca7ec7eb0e4b983523849c09225f64127cd25a433a5e72194efc1f3eb13023b9d4b08844f2e4812f2045e9710d115f2b9de452ada867d7d17a9bc7fc5daf59017b91850f90fbd4eb7bb41ba4dda1ca5dd7d7a9f08792244eb8ba4c6ced7fa35874e06eeb2d7ee675beddc2cc31d105317e4070e5e7dd591ee181894e4f82b604092e35bf819188ce4ec638081488e6fc13024c75ff19619c3f330a467dff9ecb5d8f9ace2cffe9379324f967d66dcaf332ece21fbfaf5b338338faf3c9e189ff92a773c31fe7dccdeb51d62743e63e9fc0a8edfb1a0665bcd6276a3f6f5331bbfc343c55a2766de589d82af142919fb8e8cc7dd05e174fea372efd570cd62bce20b577c21fa2a77b4ef743e310231c54ec4f53f9ae6abd8a9a629c58dafc52d7bfa5a36a5b8d557502645040a88a9573bb4cf328f327087bdf53ce6c170a78256e7befd88240ba9d5e85f918599ecaf12e5c9938c7d4b1326d9bf364952eb65a1d7f7db799677dcadbcc417b38ef180536c861ddbb07f3f81ce7bb00ea661f77ade1f9be1f96c8607e7807d763fc33cc33e91141fc33e3aefc13e5a1e8ba48c755afe7d74dcad6019cf1a0ff555b0631b96d9c73c9f7da6ede03c64d85b0fee344cc3b4ef6dc3f5b7f81e3992e96b2e23078bbb20b8f3f00095f2e73df53f1e0fa658e6ff34878f5dd1a4898cbd7b4859b3af6df635adf3f27e3ba68256fefc07773fa2bfd56ef677f3bcb6d9897d877d567deb54d08a4a5ccf6ea31237eb7e44125ca180a58256f77b313c5bd457a3c3581bd4415d04807fddcda00cea60008069dc3b0304bae11fc471326060b42dfe1648a205e51918e4376007b98774f070bba76ac98072df3defdf439ac6be57d60defa4ae39b948c6fbcf229e64c393539e6cc11c198036bc7838fcbb99c4d6c2c2c2f29585a585e55b60c46889d112a325464b4b4b6f2d58ae58585cdbaee7efbdd773b51d9a6479f8bdc16e4dd3ecc36d0809d8ce1133d9094648c9fe3f74101df3a8f882c62594e65c3a69cea593ec9249f6cb89dbc955c7b4087bd221ff956435c6729a73d9cac9de4d926dfcc36b4e077f4f3200736cc0bfa31d782ffeddc34276a7888c07b9e8e9e0721543b8222f20c71b216ef7584fe5c37bf11f8016b7934f25637b9066834460139d0d1e690e491226257ac3096503c2581f2dd08e105eb6663f2908e456c32e8803c2add53e0cb40e8ae96a5ef39a31763cd466d8311d33337c5c54c1f5cffff9e36204123d7543a1e614c7d30e02a4562284aef98b2bea57a5c555ac0c9abb6261f48c79e2771a801a2e7c985861580e08b773c9fd2d31ac7730f1ca30416c89e3898b787a97082a7261c5b29ad91f28a60a91fb0354ab753a62676aa4d8913519b1244bd36a192037080a0b8a3475ceb2834059ca17d688941d926acd1959b30bdb02526ee91d28b9df08aaa6891c2307b77ed1ea18290fc7f5228417ab83dc9606b9ad12b9ad11a3e63e52b8d05bad9bd64dab0585dc1f8556abd5f2d68d2a09aa099411d41114129487201328ac15ca57374dd0a2d564891592640639e2a285cafd39b664472d17552fac0be4c80a91242b0359eaa2956aa56e70031a9a21a0ee40b9b66a0b55e481acd740bdbfaf4babd56ab55aadbc2567975ec87fe252dbe089208bd5a5e6010ba63989e93ba438ca6e099fac22c9932cae208512c4f115945e86276a1a96afc1bf4b90055990456b603a085d627509b21a0a5597bad4255f39e952125f29f11593214d9c6a9aab4125511265656665660c1ded31f89eabe1ebd134f884a6d3814f707008e189d535b005a3b0a0c0157c029f682aaf753466bee7ab0a66c5642f946d3adcace1b9fd6061c1be6a1a4b862cda63df1a05343ca10d8c36f60443031a3a7f43b5938ba0ca88f712550ee18d53ac920508fb08f8a473a134d6687dc9b052aaaaaab2244b539f582735a7b6ec90baeaf707219c4a9827df66cc938b9e2792e28c92212539ca72264a73ddca629e1c8afb7baf39ef5c6aebf5ab2ab2aaca89149e28934a1e0ef8190fa4937705992371e6a5c5cadbbd2395c4a855557592955c54b3a850b252dd22f7475ccf2095c879ba3372cee4fe388da8aac88aaa58535555358be49e4388aaaaaaaaaa8a55656b321bdb4456b23359c90eb13459c912c94a554aeeefec4873fd5549c5a9a9ac146b1e0e266213a22a42118d108310577149cc8956c4ac94fb65cd892a17d52cc0507f1772c290bb9e21f7c7dae4bd7455bd97aeaadc73a6450ea543235047c91d28775555d54a49455583b6a1545c1315324a118f07bad8b89072cde228ce0cb9eadbeef5326ad5ec8410becbccd5b1189c8956b300bc3029d33976ae0e966fed2040309791cb0ce64293d9185d462e332e13b399cb11304727f3785c4879d6ef62961277fab3c628905d1f5d462e332e241792d578782c6073845fabfc6b661a0f88d528b9cabfa027becbc8c526ebeeac73bdcbccb5c5c7c16d2c699b7c9723a4842fa1cbc8dfed5f2d97a261d9477cf8f3e36b5a8de27204dc306ccaaeca602e47b81ce1327221653ae79c2e47401b3248075e29425829082b635c17715cbe8b2a047030dcd77888e3388ee3bac4711cab733c34fa701cc7992cc7fd4b0067e3221bdfc1d101b810f7af63425ce7aa97ac39e7a4a5c6d700ae1a17ce3f0f30301cf70f02dd2b5f42713b4fb52a95aab2e3e4bbcdc371e3518794a32ca737e0ba2e1939af6b9b184ae9199694ef563c1ba3dc1a8f20d9dd3e06ee5b0c78be7e901919e87cf618e87cf6417cbbf08c0c7c1e7b0c7cf02a48be1e55963959be26df892bdf4bf2ed56b7eb21f9d906f2907c6c7b2876c401ec310075500f5d5fafad83a42c2528cbf953dcf87d331ae50adf83de99b1037d8a6704c92c2fb8f2af6d6eefbdc4111624b6a70b2f5088d3053b23012d2c014315124409286e9010831156a0c2068b272c5922992c210205b9c406d7755dd75c42c606556081092fc83005135658325a720456e3a9421135002d1183644297300123bf1b2531c82af9dd286943ee1e064a4c728344e228718cd97c2933540e507b297157df769dc75ce20ec2207b9ebe863b2835bbb2c5fcd136cd86e7efe6f687e7fade83ed63f5bd8655ece3e19abdc5d8773f6c94b562288466426e73de342e19e375bd8451887cf9909836e7300756489ad65e57ad5008444152c40fc61cd967171412df05daf02e012e5a1baebf3bea16f1de8b2fc20969707577439bc628865df429c6488dfd6cd8b1a9f774e8b0e368f6c746e2bcf7de7befbdf75a241289442291483730353812c945b0d522b548539ec87148382d9c7e41097f40241c1c1c1c1c9c2f9e74a265444915533cd1924eb48c28a9628a275ad289961125554cf144eb091c1c924a158327825248f7c534ce8c0d7a08a9e5388e03555085ea255a2d9c160ece4dabd56a9192905a2423a4232424a426922475d3dc0dce65437d35eaabf533019614ee7a988ee98f5c730ed32f258669ce391d3a068ebe5ddb81cdcf0458479af3f8576ff4a1c623f364c179b2d076c4585b870a7021888ef1afae61d93c9261f26b82146672772eb9836fb7209acb3ec6da3d608e49812c4fdca30345a0fd0f5a0f203a46db607068ee01371a905d96b82f55dfbf07204410044cc7bc0c5bdbe1c13328107f3e8ff83348861be4018364f7da30109bf622e81810bc1cfe2178386c00f11ef0f90fb6bdd1af1be6f25efcb30dda782ffe2fcf86bfca16777259dc20efc55fc64d0f1dd3bd29d9bf02411e8e071242e6c220ff8e81f34173fbe67cceefd1e33829b707f5460304048d8ee9d7e1e5fe7e291ddc3916eec21215de7bf0c139c3202f79c5f882c8f1dd1f8ef307a8c6ddfbd3e4fdbf7a2e8c0620c360f2a32faf0a4176bbd7849c0e2f5f5846e639b999612e6586b99414dbfce9d639cb30cf5cbe9c612ea5dcba78e3ddb8dcead6d1b8e4cb4103dae88fd1b3d4765c99bc64bca6a434600ef86c78f6ef02f09706358fbe540c7d1b0078017cdc22f6f489643cf6dbf69b00b6006c00d86ef8f732f69d0e19c39dfd39e4c24ce90db8b3018ad10283e53a866dc4086d586e27d322d428e0c9d8439bbe01771464037a87362cb883c14e7545c6caca0c8c2bae18cbcbc0d7e557c530968e2c148eb26f26802b5bd74a3695cd877f9cb1017371c785b63ce707cf87f3e7df78a2193f1fd6e4193236989e90428d029ebcc30bf52fa14d72df6d044f04a9cd4bc10c91b468c6f7439bb6c9327a067e1cc530327de803eef046f04432f0eb5e93b7a40bfccc907bcbf4039f2ffa986d0e7be780fa4ea17afa6bbb34d70fbae1a7e61c9e88709fea84443bf6715defdf22867be112c497fedd1c92fbbb7b71f32dbe3bca6f3c49ee9f17dd22ee607ece3f62981cfcafc7c16750e0f211ff8279d74fecc2305c73fd180d57fecb5ea4e5298c87c10243e5762ab530598bad1aaa65f41bcdb5a31c85728c6ac15996655996fd11377464df0f848bfa83a8b5d65a6bfd7e211a7fdf176afa428ea56f76bb2f14bfc6f83246f779b9d8684809389152fafd023f431520fd3ee2e1b89e3e5cf270f4536a834c639069bb007a010ac3ed02cc42a6ff36b8819adca7d9bd20fad7c351c748fa48e8c3211427a3f448a6970f2d203aa6fb4cbb270548c7d8dc7d06e813d1315c73f429a5b0044734cb02b65c147f0c99c22db21ed16d346a8112eee7ef7f94d08fd5e03e151edc7e4cfbce8376d81fbd17fa73742f101c6df085520f07f65401a1507fb5efbd7cb0074233e0f98b81c4f7e0e72a5db82b18a5dbcb2cdddb8c0b785e7b0d785ec32b702203f1b55f817c0f7e1e5fc3d743f4b125febdd0ef362e32dd411f72f1444f07ed225368864ce963d80470441fceb4e8e9a034995688fdc32eb4e285680e1f315cc7304cbd170a5399aa74e176724312f6ce40b10f6c24fbae81090759b717643dce88d1a6633a2689482294988aeededddd0d25c6184dcd752ab7cd7be9d9446e8f237a41df1dbde676d8a9a328cc88afb023d44873fd14f57018e1e99227ba3046f2503fb52263dfd126502822805d2d72775f1869f59e8c97e5f97b4fc2cbf2778887e9a9b99a51244553ac895f2184ddedddddddd1bbbb8d748c3fad7191b33cd436369f2cbc4fee27d5933e62a4519d6a276dd3491e8470ce39e79c49a6a99fd27b41a07f22b6b85d37aa4f467c079002e1120194845f42ee27641a85dcdf5cbc1a704b3c12206fc1eda2b340b5142e983af2703c5367b849248a2f4cba1e63d4de8f60e9ba66a96f1ad54280a1fe23d0284854e47e5207a14fd3d4a76982222c5e9670567c1340d008197e64e2850847f34340d7fbd4a76cf449c20a48da2340514579c87fa6aeb8a122fb3f585151e436229fbabb3bf69405ca89942547e4f5d4369d76d55c8572d96d0b4af15b552830eb21cd7989f4f0b131dcfef89d25b5b62a853e7ccfbe837694c4a50f6b4e73bed9911db59af3dcd556c5c27bf1af2db7a38e791a0c276e6783581216ec908ee9aaca963aa6abd006fcadfbb1daa11f7e65750cc47608b4e1a4e63cdb2aab3e1717fbaeae487608ccf1b25b99dc323f6c2e523fdbbe4269517dffbaeaa1ebfdba2e19a30d22db330575b5aed6e9c8cc2565643242a2712ce0a4e4bbdc3abfd7ef70cbf2cbed92f25e2e7c7df1281e927291870696ae2f9ea87549a9c9d97794064a1891fb61bb121a084672771390a63953155d5db4808aae161424beae075feb260a57eb6a5dadab75a34a826a02650475048504458409948bb542e527bafec244bc25cf0a387a5c544a8970d1e5050cf5bb4048ebeae26aa5ae568a82a45cadab8592fd31a243b37e3912cad711b811f0fc7b50463b73d7daff7219f7ee746227d24ec7dd5bdb8a78be6e456e96e5bf8df43a3cdf03e6702ae33da00dfb360b6532766a9a07af9bd337f85ee6fc58e3218a39f6e2753d75f74973a8b78c3ee394eefecfddabf04dca541c3528fe9cd15912535df871ce392ffbbc733d58e0c073a54e35b16492d2b1c86e8fee9d8c6d19cb43fd13fb6b3b99682519c9a4b403b256869282dca38c31c65ca3ad34b93f9aa429b7b4b2c6ccfd6419174e4a749d2e53bf0962256552b2568b14b7f39472bf8748c7743f4a1e1a8fa96320ee972d2d5f2429a5ac71126707caecb072ffecac7ae8e478a87f48735d4b22b85d2d55d223022bd3d8a00eb9ad64b7b9923cd495e495846d4f87dc54f26cad462c92b74a23c7f0fb956c9efc24772c1ea2e12d27bc62cdbdc1543ef755545454aecabd728545e57331169699cf655169c155b1c1552982cadd3cbf0202ddeb5bfe7c207b1ede95cfe77a70ac810586b5065084969410ba84587e941f4d390860408ef649ff7d8439201268c39f62b8848ea914df7bfe305bdf8acc3044d2217fcc6618cd2006298c13c9d478bc27d4022fe4dfd5d0e186f779afe43971f243871c8816bdb6009c7922eae43981a5e7844e3741c447283d8d2c9f5be15372fc4be3f1a62005f60007bc1020bf1bf2fb603fd077010800f49c38f9c01351eaeedf41231956ad010395213b18a00d142fe41db4894185db54e371030f0f0fd884ccf2785ae0e155780f0a682325b4c9b2ac7e91e1d717ad7f3a1d0e195a6ba10465e83903f53864a99129c5268661178669f7a346a61f1f6e17841062f4e315631c4202b163844f76aebf6ed8eda9326c261886955cefe60110773f1a9065d02d5c1d28bd1704fadbf421345560ea70c5eda0c9a1a963fc1b92a012f77d07af0ea954ca7e10b60339136e074dd0046b3a1bae43c0eb695c8cc7753dde805c2fb7ee3326ffda80e43984e73985f8d0e66c11d7b6070a375dd36ab55a2d6f411d71645ba419f71b2e30b1bd55f342fe8dbbc81375b762bc51d422a6f303a4b958336377842f5ee189ded301a38c610b7aa7e8963127c745deea1ce9539ea89bf056b79117c023deea9a1e6d4fd423d0bd37746f4e4e435153d3a39a1e59d1a3554d4d4d0d94ec2ed25b4ebcf5c45b49881cb1413587ba99420859eee2298ad6dec2280328d2307462318c81b8073ead7cf269ff34b706b8c1ed6a649f317b0f3c1cf0fddec88e85db805cc55167026db87c1be837596e22802ba0ca82682875158b94dbc5137c4a693a867e2c119152be0c28cb48d39c531a1a4fcd615911b78ba768c4e3e43bb181395ce5ef59c022fbdbfcae404213997e9327ba9e3e96d50f864d5ec8ff56dc412da8870b6886ec187681df0b5db8eb166489bb4682cbafa1ea89dbffcdb990db41ea2a51dc97a1471cac2f14f5d5f06a822b0fe1bd70bbff543acaeb3b48a250084ce2e160f9876fd530bac77a515a3eed6501d1f81a30307097486f35848648ea21de818b804a9a6b6dc7c53055c48526950c534252d0d4f7824c6f657211931a27a7272828b9a378304c0db9d01fec0e0efda00e2e82a90d66985a791048e53d1fc8f73d9f3f2cf8bd179515ecb99e08351e6eeebcb61581294b2b95b24739932c455a669196871a0fef26470c9574288b4ba3b9fe1a1de318f6e7ddf17e2ff3270b7294deb9f07b2fb3c3a323c00b5ac375e1b7832bf3bb29c30f2092242c146a1590c8b440c2bc90042d03193a65e86206d79018cc1c242181b04454c2109f4ec8d7754571cd292801ff86a5851a398ac8e4860c5dc8587e372c2eee165ed4c852c7747e5adc283c1c43c0bcf2efa1101e3dc28d0244c515f0a4f21d0c028996a0494a7ef0ebbf3c8287637ef66f08f93c3acbf72478388680cfa3f3e3fa46d780f14c5a742f1618f8d1c7018336d797e15e6f8278e1998ce5068728f15e5e9008038410fecb97f4764291b4920d6e33a6160527433685db754ad5ab19fe2f6753769dea569235931914f7cbc2853718da3447848be0aa531daad93f10fd69bba74dea36d2a1fe669149442ede4bff27ae1c15c30043fd580bc92d5d90db8bdcf10cb95f6b8b3bce5514a3328c4d954b295d243046d5f53067be949f33df878c914482aaa7f18832ca28a38c32ca189da8709424b9894f7298e0c407c8a75bd7c8c1edde8d1a6e8d34dcf891c628653b6e5473b13bf6a9511df3e4c7df9e083679a1f85162a87a2fd2edc78e32b68cf225b535c618e1484af9de8bff8e57f34a7e1a1cc548cac1731b8931c64963fc2bc618afbfd7757d8c57bce29b7f6d374616d09431c618638c970bb71826a30332ca8e3bed33cce3182683bde8ffb1f661f87fe807c6fb8aca3ffa9963f60430636f3fc33cb3ffbec5b6d8ec63a70364643fc3667870b3ae7dec3eb6754030db625bde621f30debe0cd6695806cb2d38c2b030583eafbd5d51f96058f6d85bcc3e4ab729d7fb5e8bfd3b5a7747b9e3e9b0ae863b19ccba0c06058abda3d10532b259b6751d2c83edb0a3668d32192c6bd6ed64b06c65309911112320a3fcfe51cc83c0801d2feaabd1c55603582e8d9365aa43f2bb186374257d62827262f3e4064a94286a3ab3fbebb3ff7cc769dfc164f994de0b02fd735c4903181e4203d97fb2bff0101aa86f3190203aea4fac81203aec755d5de322ed03a4caa8140d58563d7534030001053315000030140a0644e2403824209495657b14800c8594487a549e89a32807621443861842880103000000046446661b00c097b0980c46efa5d765a656f75292dd7eebc5a1d773bd67cfd3ea3fe94c02709a928d95f555b42ad848bd67fad0e01737ada1b402f507c0322244f8d6bcf931263c1f379fc59dc622da7bcf9f567d2d069b08b380313875799b70f049b880ce9e4c3aad3347f56a149649e068356aabbeb742a1d76cb74308d0cfbd503fb736fa44ee90458eb290e72e24d8af3ac5ab5dcb3e86331c031695c26777a1b669cfb522dcabccc52a4e0af413dde7ab5364bf5360e66dfea1836611cf12d825d8371a61468a5a5ec0e5d97fdf5faaea1a66049caf6681bd1a76b7b377006dcdca0313a9e81b5a62a7a59601a123720e510552c387084ea02b283d8b26d439ae7f9a15c5816b4aeef42988090e68c28887197c25300267b9a8951be15a21a38aac8335ecc36841ce60886b4c26260f86a46f1d6602184330d1d43e32d2bc36a44a809f8e12e515d3789444482ef72c1f8ae944ce0406dc8e7cdf8f4519e0e76f80409b4961c056742af716c30f5640d84b725d2f2aba954807f0672642a693acf461530b2aad8697fc0c672e02d9681ccd9fd891727c9c687695dd07596fe39face33531d3a407fc3c21fc4e8cc21399dfcd0ae347467ec771499807b0ef94f6e2f1d402a00d0ee19924096e1651529e43d8a6e9cfda9622242e824c64029cbbc1e863008909604d6b99e69e6d70059ca72264ff43fe281578f155b2cd2e94ec319e11c67d5884954b0c83cbf78612611ce253ea8c7560b6f2d329b5ee43b8f8a61aa0f867fceabd80713f4e80fd7f1134f30877489567fc0049f8ad8eb9042b23345d8b962f8d6b91b051e215ed8d1919696e9f9bd5d8a5384ff8875012c7f0e58c1a0d5713464530e1dca109531a010f9527708ef9fb3c3ea0f680d521816f7111db27588eaa2318498f06bd977a5af414ed7c3dda78784ef49236117770a27580424142725b84896d85dd638a31ca4e60a9fcb0367bdb481d578045e6001a79dfb8162e6ee883c82be03565069cdee4dfeddb878430ac0bcd9ac75f71e221b12273abc1d76ba2de6b606524f2291dc1209f72c8ecc6f4347f0a49c21c57b751b42f7a63fa57540687728c1201144f5dba90c0600906a7e59db512a952d8bf1e4c6c8036b5e01d5baf9f67d8912151624f0cdd2f9c658012c39fc7572571a10b9f7638374aefebc284057fd0b0cd8f197a6c01713a3ddbdb9bcf959dbda233bf606b3c939f015699513a5fc65fd9732dca5e42608c33348df9b090d317fa3d618bf20fc116b38e4729cdaa0743138c4674ac45998e5bdf72c98416a1b71f56f120a290183fa383cedc6daaf6fba57ee88405261c2e98b955b9d04cb904f725f26410f0dfdc1638c2bfcac080d6ee0b022b6a70fc3694826e1bd8b23327f764931b8374ea4783d8cf0b8ef60538bd75e725e812a4510bba531819aae43ca6e4ab447e3704989eaa91f2324ff45917a1353ea7afa0bd0b002a5ea73b47e47b836602ab3aea9f2c2e418fb24e24a333b852227263c3bd86840cd484750c442865996165cf63b6579fcd8dba4f6b8e8bc36f240c50c1c280c427ac699135b705b67d9cfb4cd49454563cf6e355f3eb8ae62dea7ae627d4490bcd433e106111e6c1ff94ab22a4c4cef22658b3177719265fedd649cd4cf1dfafb5ca90f19bb55d49601ded47b3e989c08e314cd0db632f3269d4627f1ff6112a11150089aabdd09498c79187ee02ec4dc3cacd2dbb9c5eb8650ae8c4f1222fe2f666e3e85c17263e74065469ec5a970f2d41b9fed0a979ee425699afd2a746d3fe6ecafdf64cbe8d354fc7079d1cf60279a7261cc276e45bcebce747350178e60a0302007ce760a247f6930dae9a379f03d80c2849d24e8f2ecf56c6eb43bb061a3a9e4916294f4b90cd6b24e3d11f60e2d500d3be66869e98cf11e0443f72466375b27b7a6bc912c0e228e590bb301b97f93ddf126c73b34841c3d8fc927deb3a0c623f7c8b0c637fb760c4b2aafc7a3a41a1d261e517444d3eb9176eaa19573e6a7b0645741ad93c0e0f3d13e036720842af9d899c0590d4993aeec77990596c3b599a843d4b1756c8893a48bf4109a7bf4eb8d44a22acc80d6dfce0e83378dce3b96f65576698dd430bfc8615cdd3fd5bec677a78322bf322919aff46792346a0a6d543854c979261cf341096c06723b45fd104c1608da1d7aa7976653ea17ca1f448f7b14d0454aff70d723fcfca7cb37468e9426cf545ab5bc8d6e43b9c1b85ee22126c87c16aa895e7d3d288210fe90ce96f80de347020e1a7193044d7a15ae450972396bbc3eb4eb17e9526f41bda4921efda8a58435e435c329a2e520f9617de823b00dd0dc57b6aa1b217431b66981ffefc1843dfb39fa4abd4322ae9f9621b34f4f8aedd1e9efc2347be29bbf3deeae95658f633d41831183e52e7559be43346f586215e52382be74b690e129bd248ffd259fb001759820be07c88333e13aff46c0d1ee4c4bb1f9955685c8856761b1f99485df22dd720dacb37ab4e9136d819f47ee54e7c504af8b61e4d6fe3647912bf689d47faf34bec81829b0293e5d36465daeb87e0361220c048a14d0a2b3a83fa4959583a32ec70ae9c818b3a9b94e62f6316ee03633f1ed51c7a6b4d4402e1954d1990321bd8490b2e894ae501ac3012622e7bc623c21fb3b0c2805bff0b9c2378ca81723ba06a232e64be23b7e41eafa62f53accb57e0d2ccc4fbb4e0c5f1c41409fcefee86f8f693b3fbada9090327743401f26af53e6ab8a56b8ae5173c5859299e96505d66d77ff0d00ca02474b4959b5c266f2823f5b830361abf30ecc7f4a89d6f3b2a823e90b4aaf30a5c21bb7ec508a95099d0852c45a88af1815c6f1bb850e534fc5b76cbdef10c1244a227d5ac3053411390c28f9fb839ab5536838f4972fbffffd8f6d9b964fd6c09dfc70241f5245451c2d4c8366522e4642c52e69f1cd699356807b5f41145459c9129c1c351489d0098182dfa9846869ed013b72bd30f50dcf0c4ba6e53cb2ce7b62b41bb58feb4073008b72bd9da50b9e037dcc45409e87b8c40d306f7ea32aef88f2ca182260b3bb568edb410bd1b7676349e41b33a25a14d9f9630b4fa47bdca8777f83bd6ec61777637d8c9cb1709ace063661d66b18dd2daa7e3cf61afc3b937f07287ff507a5ac647da194d909aaa0c993657c7f099103161b725d187ae2788b5ab61022b0c2649684e8e72c497f5bab70b6f0311568fda25365785e9e11d541b0213bc60200f5dc70353be9bea73861f2d4041d6f952aceef55c608c9c4fc6c484e6095a4a579e640a6f269972bf0e55f32821a5483f81108abdd4b37e5e0ee106bd50da754a993302c77db263d006ec0c43d4872f5eaafe8012e1e582e589f8dc291ecdd81ca30afd0f467a8778446f395e6375f83ea0d4ebea354bd742bee64839cdc0c11f439e4e67ab1e1cb00742d122b995dae5715e9b46d0e4d1b5446626446164daa5c98d3084fa07c3acfa97aad54b901715d3a2cb95b1bacd2f88b972e8eff825102f21c2f9443b3add1af65bdc82b3cf042d6a1b81f45dbb6c83a87b363afa441a90b1046f5e532ffc21350eaf3bea867796cfa623017bb62a5a124c26919957c52d23730b638d4cdbeec6640b70b2b463813b3fd1926809209158539e240c208ea0929ca100ae0603b810e24419a8a7c139d209621643445c288d53958de6b2d32fd2960251ecfde254153a425d95dee5980cf0d610bdea0234fa6976269455212d354a092b953ce0bcbdb2c3c8b4cd507443151a2e1da553871088279d0e5c9559ca2866ddadd2572e5d31f41afd1f2fd0c2037aa5e46f372e9c9e3595552b814c52eea96a1177b6bc30ffda41072e469902ae1d9dd4dc876ef79356a01563386b323edd08b0eebbb81a8d835413e352ab480000e0d61b7137c4c6741357d1b112c56ad336c787ee897e4a1c664e7b7dcfca9bdaf4606d6aab69c79311a8065b5bb0f846b5d57278c8cfa82d62685be2bcc91acfcfb0567f627a8c9afd4e2aa664c8dd7a02950773c060aad114f0a9cdb4cb07aeb382c35d3cdfd762300ddce892a74db199f511b4d4bed5cb1228c207936e62c2e3871698b26a64bb1093b9ab6d487b449a61d6ec44a3a2e1943c715ffdb2ebe29db7866cacd0c83615b65b53bf41e9d9066f4ee9d7270490e928c6b0135085f7e9edfb13892402090248b642c9453e71436177182c86ff000358d12a4ae3130dca91edd84373686b31e85b63533b24e9753ae9d67d1260b779f4c779fb9638abdf2a1f397ce20600e41a9d0744c9e556e4713890f88828973417592f12f5ce58c4c846e0f7ced87964f3f387d6a8e7c48414318f62af5cd17b2a99da31bdb5d460da0a39d8dabda0680890f1a992c16041027c3db2a4204151e81a1960db5daf470a0c422d65cc529aeeaa3f0d9b2ddf60f3e6c06e0b32d974962169ea97e8d154a46c80967de2bab18f1cd0239a0f895492c40f0dd59c76db47bd3cc0b89ff5a836e061ad7fa0a73702afa02a095eeee05e8e66b3409dc105c0e7db6ca9dbc6318fa21c7f3cd996e5ca84daa7561fd65c82bbc483ee0659b42cb436e0e18ec55ae5a60542df98d65ba6de6f9d156d3702cc154e757bcbb013b6f0e090b0bebe2a61f038da7f824789ca3f216c6377a4a41c483d30a98b33b16b0885eeae7dff0a0527a54aa488b130ea5840760f79a7300a3876b5424c9bf9ff28e559d3840f3c06dbb07cc598089dc3427c252c899c42ea1a40f3020fa2268f63a7fb28af809a2a885f0ad1ddfdaea75bbb68ed52a39cecb0551c453bc7cc1344962a0d90b5fe5a445082918501ad8945212b0e1bb076dc814d44e64333daf8d4aadebab62322611240ead0b17cb2251408a4751453ef7d87d450ec61ded5390024392ef732106a38902ef6841a30691d635a03179acd7ff052fc0ee133cafac91697d4e142215d2e4fe9aa317ea2077a3cc41b9f034e77f1cbf039537451353d6f658361caa8c33c6b5eadedae2545c1313920310f3d13f34aaebcfaffd9eff81a7d8265c38142dc3c01abc874aa19d52872fc8a768f316c64d66fca040ff7ed25d2fcb6a6c23d5fba62401cc9ccd972423682d5341a85558a153afa587fa1534d0dc276a8a02db050fcd74f6e6b2178d284c59165524b78f216f8223b4f5c2390d21951280b276eace64bb4897460e56ab6cda3917e4a4b2fe867cb98a48e3547eabd30d00a980ef3ff615fd521aa7414ea286a67a24dbdf5382928f635788f4fe443f513c8464ec94a1ed69f8ec9c7d8e192aec8bff52f07a4adfee58701f8b69a2630f0b5ff5a80529b43488b446262629c0c1e336e17b423ac540961fb33c147e057e08bc1e2d3125549a44192125d4d7d01783fd2a125f7e3a6dff81b9d27c91dfd086259a50cd4e63fddca120fc84488d44002a12266525bef7e4f26537ca3d4cf7270edfc027e8fd226e2aef8454a0644247776e0def59b4b478bfa36970bc2f32d708bb4141b3a3802c66bf5250dcf0948c203ecd1b117556e14a79830053adc82237abaab7013964cd8022d40cb6fdd16122debdf124d4479e099b0ce4dbf54ac9ca59ee406a66c635344522aa1b525aa2274b7cf85b2f61184536fd987c0bd559bb498da1a355b02bec5508a1cf527ec88313659ccc5b58838de3da5d3f71c6517d70a624261f505415ec75bd205564f95626c129c8c951223c3597d43844b819a23f988969f91238883783a24b98b0cb3c4e71e05e29d528bc7e1c2d0d7af998e77c5bb12b2c10b72f820f02e8d911b4aa5d1d1074a35f733ef641ad85d726e70da7097809aad9eb1a69fc038bcb15ee3a3902a61906a032f0ebb7ceba722a6c45f655698f42aaca87cf5f29e1a5cfa63c735540993752fead327515e178537063ddb6ac90b8fdb2768b3cdcd0dc5cab646132c6e95fc9addd50b85c5844201d7b07ee290cabb73ae2a4ee535d2b34e69e2fadb23b6d7030ef06190706f17e01825a8db6f0c686e2585c1cb5bd2920097662412e077b26d38f5fbdfd44d971b3f59830dc124d4cda4e370fe2228c6582a1273cd47388acfdcb2ff8ac5398a1fbac124bfe2b3dc8e97cbd0a5acc9ba8f9567d1d25cd3e00a24cd14bf4e74071b77c3d00726cd7fe212fb5fcebff75a91360002ba52d169e148dd43d0a6eba40f71dd50c31e14aef5d5bdaaeb47710fc46b056d2594b0165485db93fa69c8236da36781bae285f8c46b161e613dda2392305c1846c0aff8227ee286f4b6489dde0ac2b7e356e90044f3ce57bbc337a86e088b289ab9bf741e0551ec514db95dc9a33d2ad78efe0e42712a3c43988e7c0f4b775cd3f25da0ceee294b3ae274877ae529576ef5d8532f9ef60e98a932c4920cd776a2355d09e169e8cf2574f602fc81aa7e608a9525f056a6ad380468e6dc1dc4d8a9196f188161f32d4f0027e6251d4a34f92869c9312876233a43cb4a7767d9d0486821a758655e67a5d85f7d687596e241c12e5e3abf0b8cbc4b5097ba3a7dac60d1b04492f9e680c2d241945e3ab0a7b64e5a3dd9b57d1844d71d1d47078dc8d7703f7dbca5ccfa7993e53c2d05b9676f807ec22dc736669344e1c816034098ac0507c0c95475e3087ee1eb7e68d1f06b37d3a4318ab1946f79069ce390dc5d0f2f52db2e08ad620b5f6f72c708cc643829ee3854394cd4bc74aac41252a7942893368991ae94671392abb8ba3ed2ea4e6f2b7e14d025dea90cf4f80fad4309a274c29221544d3b0661dc86e11129b4cf73e851a19a2bb21164d52aee5f9501d2791239a5a8c80cbe1c29cca058fd6da9147c4944d75400bc92bddfb99aa15644d64ee2a1bfd39fe0b00b08844f12fc10040aa6d47bad7c3cfef9ed750f49648d8b4e2837b29d81272970400f96af0f2956dda903b27675544f986e731d0ab10964e292f8ea6be26dd80f2a71e942c11eb44ff4cca004854757380d4f72cb00000ce6d153253dde1520f5c2394e37293c75369e89bf9cf147b5d64414ca2ed12b6a07ee227811f706886585d3a0eb4906ccd5b537d0b8023ce9155a1330082ddb7bab478382be41fd75f58db1524baaa4166a350b78143a9cca4c729ad2e9d086a8670c5807d5924730f8c1b947138afc7d9a758f0b1935920841b9afd848a5f8aeb00b11a99741b3cc60ef919db50cbeb1ad8a0206b5d0207baafd308c682d41e7c504daa830690cc6652773d66110383b2df096244cc6729bf58a3269f77f64240e55271d23b3beaf0c2d1ddee3b7032de2ae7d1077cf2957e727deaecee9b83132c4a0d350877a4173da29a6b400d308ce0e197fbdd6e9306789908df7fcc40b19f1c7fb4629ad48348c18b96a997ba3137b24e50256cb7070a2cd04d88a3a85993e50013c832d6f4f60c6335408a2bd125faa4b024636544ce626b075dd620719d495c090cd760459fc33be7b04d5a12258e74cf50e7c7fb264d3103227732019bc5882ddb0bba762a25f76939c05fea686641f457eae94e6b8858e9c0334921319d9bbbb530cdc3c61e5d58a5489adf7a60813dada3821a702386b7d8e059601a738ec7ca19e7f65c4bf1843d05505e80862074ec1db9970bc22226b25ca2f7a6432506a6f55ce1a2168da8590bab946964d195d5b57673d89c0c9a7f1131eab9962124d6d1a869b7df753c0c8b007d5554fee6b114f8201edb3ae28384599758ab73e8ffc95174b28efe3d5b46c8a72ba7555895f950a85c4598065d2171389258715b2bd60452cf6445194992dfd94838a8291ed1f0074ad3c01547c07768354eb99939f2192f5bcfac4f04d7af0f4354ef574c480a18dfaa1a210d81164afbe9a53724f9bcef074830381026e17ae4545a1c5db63c78a85878c8425c70af5e224f35a3868c446ddebee0a2a0a0a30f24ecb336e7698bdf801e3a8a3986b913d4bfd9670875611c637cb2e69c2c48e7f0c9045384a9816f299fae241974fd987f5d5a10e4dc44edea83d2268b34ec5aeb32596988914c557ecdbaa20ff72ab4e0da349059fbd98eea3889c313e21f62740e804e398e8f026fc85f9bb3e7220df1079f0ed85bf08af6d9387e64891708ebf78ae3abc7dbf4f5cf457c1ad5fbe05b39b13314f737e77602c2764fd17711fe1b9c797fc7b3a4effe5e97d498181a0fb95cbb0346ab305180fff4bdebccbc86933aa0d020d3099ef0fbbc977ba9d8aa80a3b0e5f4c64e121076cd21fe64eb87548c018e302931523e569256056a35989ce4dcbd9b4b1048ce713dae69e95d20b1ede9682b6780625908d8101d349c5d92fe42b03e61961ac4f06c85dc5d4fc13393b091835b4daafd6c11081f5d0bb8131472547705def649440bb8db7a1e255e9772e14deaa10503083c76d557744a512cce6ab944e835752953a0a5b508249e8f7542ac262a5609242b9d73018b11662308c1c95baaa2f5fff55848391a48d1c8c4b214cd13b1f5d62394318ee12692880355eac88d0828051ca2485eb3ec0d406b75a8a30a216a7ee2aef6de0f34be63bf6417cf63ae7a08ddb51a08233b3560f05df2f8f5845783d13f5893313342ac640bd78896d84918bf942d460bcb8355a82ecc93fca24dd2806d58bb638acb3cc1c50dedeb4089ac391fd334171d49ac6de811f66773d786fe611f192f7c091d76e9c011440ce24a2e7171ab36b90cf1ee6991dded795b3eb8356a604c2e34a07f907be0be14956e8498584f08d75446bd3a2e517b86638f41a40b1676e303c8f4a6d4a62131d71ce199fc1cb9b83acddd26eef1637b6ac602950dc5085b643e439e73e00861f137e2dccd4c6858c4acd9712891d25b3986dcf03d7605ab380e81f44fe5e00c661f9e5d89cd28b8c6a2ca06f5ffcb8160c5ea28d99294556edb46b1f56d83345082a4f0fec69f372512369ab83031d2bd217974f170a1784b31e5837dda8fa0c43cbe0a510e94f7b69f7a784374556a352d005ca9b315814892dcecffd61fe5905c0962860d40f9c16428da5a51a36132f0fd6756601f4d0cfa8e6e82d8e731150a4299fbcacf11e50adf4a543ff22792fbca6b451d738ed84c763259b9f236581a80167da7c3c5084a539ad909fbb4803358ebc8466b83752d9f419c78eb115446fe7efae73dbf411cc3c026c9cbdc76996dd8401f03b735cca132f72bd233aca46a081810bebc33196072fd36b93d2aafb135ee683b6673263e5eded5d1661fea9d1e8709888bd40e1d20b5603b86adcb22e07904dfec9ad31d0b1bc49a226984d30935285ffad8bf00afe4eca99550ac8c8b72d1165515018659b39c89747f6d3c12b407aa4d45fb7d1b6ecd1b907a0d7a9f47353560251e65eb442f27c51922fcc53cbec0e339acb35d59a3aa67e1b03cc15db90c369478399570ea7f70bd643f36b92b3d3cbd8c42eea7514f8f78af990c21d99c381918d9b9d35ab6491da3c2a3a0e4683deef6babd24c487c978e42af23ebc91b0d3836435adc09c197877d1f142f522125761622e18042eaefc68cdfe4b68e7a8e6bdb785bd10a3818a3fb70d2b7a763ce8e89ed464348367f86448b08c3a2d2396a541a65ee0f88069957cc564d6f23d87cd6a7b8016a5a1028e44df06ef607745c94de472d1c1720b4f1c2074196873de9783d4970799e094f1da2298a1a24b7068a86ed66d3159f8de51e6789ec69f74e44dfacad82997b5d13a793177888734b982f331af3328a274b8b84604b0cd145200cfcb0a64976c0a652c940ec84991bca9b535b1d59f879c08136cf292beeb511cb072bd77a8bf3c4f841074893a1cf309ed33acf4e6686435129336bf2f2892d2853e7599cc02ead85aebc0e22b3f230bf48f931bb38cff24f0eade0672b03f4c65eb24c6716ac0a0e49a1d92cc914f8d9bf79f7780275039c6ce228d5d4d8047ed65f8081d25d0bf6d76e1d6e593bf0ed623efbe7a33ed2d94801373eff0b23f89ea8f383f8ef965b234d0d517f76b3da409b665d1b983d754fa91e03f605e53471e05fc1bf769acd0a22854ee0b451734eb903cf35bd6d93c92893ce8235248b89d2f749bc825b4968ede2ab345b061cc23f7cbb318e470dc2f6e35d476ddd2cac7e2019c5e6e9bb5bf292f1a6ba4d274ce33c2d358ece621ca23b8e2c7e31ced5921d6a65b2f28b338e61c9aaac4b6f055ae92bc3c886c64123070de6c2dab88f1974a668f882c6015016f0c62b19c21cb3d4dc7d185662ae1e9ba01716c4c1cc0677981e6c8f1d79e7f7b7f7abca0f394f360c8c640823139709a50fb179803cd7325b2e35c2d2517975bc5b95e0d197e6abb86b3056872bf56beb7f50c9f5520bfe8fd27e52383347642c539d5b651839a616b1150c8ce3b2fb5e23c39a54c8f3131fd8761988066376e31ec4779e3e34227e1651da50d783688d6cb679a7e564b4fb1c7539896ac3ead9a8b9e19d0a5396aea0ddcfa45247e7011db059e8eb481641e7b2ce85c8956e442901e0c09eca0d928582f0c85af6b406134525404737e28c29e4b20b95ac3a6f1452962ead5f1bcbfb0cac44b1f553cab372b188a0bb473fab3392ccb5dbeb71b6dcc8bc64a68512e6339759bade93932cd27174c9115bd5ea8a3c9d59c32fa674b472a65a2a9123afceeb4d1161ccac2eaad4e98e65e75a900a2ddd35e7d800a84e4f9164ec3e40c0f187e5c71f1ea17385dd225a90f9681cee7dd56d2373c82029ac15d9d5196158a16426e980e395a44b44913dc5ae3b6fa125f71af0ad56d0107292289cba1def8f4c6a75f1ccafcbcdfdcef53a8fefb222eff16726394332d4f7a99a46b31da6e16fbce5f8e22bf847bb06d4d960217b0d739cedd04f03b8e0cf3eeccc3bc8f6117779488c29926b4db6292ea5e62345bcd2ace56a2f2c550571c5414a01ca8a9dd4fe3ac7ce07b5a9bb5a24db859f05a33cf07d988cdc6046374d200abc2579b305427ae7048c41a93491dfef857556b607917579b73dbc4956a066e1c111e98c6140a1328856327a7a71bae5cd85ef517be0a57236c173d4c3c0142d452f77d68e9655029072673fa65da2da3950a15431e68581d66dd73e858bf5cec49d26c1c02c7b22745aee314affaf09d48938e39a7956f416c7e42ee709f0fed296ef692aae4fe3ee61caf7aa2a45b67b52cf7850994e46c9ed94f00c3f9a5a9625c944b282e3dc738116cde78be9c76e4a499739522f24d9f88545b5565041eab7f2c07727d59ccd727699de04a9c19af3e5f07d737223a9dd25a0a69e2539a01680c799a5eb731c6060ab7dc977c2446474e98d1249e58713cdca78196f0c3352d460faededb59cc19563e301db18114ad92a5d0b41da023d9b7c8b612c9103c7dbf1dd5e86f542b316fc75a7824ea64cb685ac2f9dc71122b1eb63e87ced4eb45d881bb07bc311232a60777a1a59b498422fb8a01c36c96ae0621026a6348b77cb7a89e991e652fb72973805f58844e95ee63827ce754bb1334732058b5a70b59ff923bb566a538f820c488f2ac2ac96d291cfafa37c11450f071862f7cabd51aadfdbb6d1e53ff132b48adda95fee6645dc48962f2b0dddf5fed59d2291857863b92bc70b04a6541da9d758586f6dbd27f68d4e74f26ea4b9c8c795c29b02ffad8490e6f84189ce56fed22daf37ec3a3efe7e826a391e580758c6e029f0f758261a7b4cfd28fba80f578b0809c208eba527ccd3ca4285c96a27d2a00f69f515ea1739d30f76056f0f2f124d6d407d4a24de520d8ffe4a790f484c0156fcb4597653485706fd47d32ecd3c2bb3eedbf72f75697da55662d475496dc8f6d651354501eb64d2f432383be879e73a8a893622bf170b1a1e4840abcdebc7e5a4419bab77c1a358df21266271ca5f44cd563283721fe88fc19f91291e7a0d57d40e6ab80c736cdd26b6791ccaf26679d86ebac8b4a0c3d2f70471f420ec9f7349f5deaade1951fe7ba30f4ef6bf8b615e40e7a0695106109cc2af2936a32cc57c1f87f20a08ff3bcb0c10c8e172717524d628ab8f5dcd1059421109db3b647af69786c183b93343087cfcabe976f9ec3a04118796435ae00ae183c4edfaf4bc2555235a1c32e69ee7f0f141afbb9c12a8a5af4a5239b5591f01688ea78ff8969049ee858d630c35dda22007b03f8c1bce81c9658015962ebe9c03caba60183c9b1c7569486ec0d1289960556a4fb072f004970b7f9b363409f3ee7162a49caaa2b17cb8f03ee5ee22c9b6bd82358707d3f50dc7da0b2dfa4b7817eac206436d479973363bc24b1ac17539a136f719f4138a7ac13349473ba2b1b3e61fe386ed162c9b895987850d5479f02557242527b31d5ab345f760637286c146a2200a698fa44e77acffcbdd86affe71168c100c648ee15080ada40a49ea3984f8543e238e3f291407b9ce42bad364b3df7c029732a92f1a9d1db9bbebd6748c4956f2315521205a5273f14ee4f7e936d54193dfa65b6151496f3d643e2b6f009eb7556e6efd6dea5fd8e7ad8022c28e4f2815614ef0509f62866f1f715f0be784a23e5d549c1ad99abfa18d680e1eb72336c008ed8dd7bb3f98213e221a99aec055804a7bbf99ad9945655bf5411b276c35fbea87d5cc3e1b11ac47af6c270886cfce8199a9dce3416090b6ff37c0e4ef0fc7d02c43bb6fe60dc05d7bbedcd1d9a0697ee6b82fa4f0155bef11fa419fd08d2213798d0503935cd21de1b22ce845a1826a90b7401fdb13248f70fd51c63a903a3652201b092425251ebf4b2f9107b3d592f8394d6766f6c5cdfea6e67d761a772755d58efab23bb576cea237e64498b384974a66d24ffbaa34e816041cde9393a6e13130bd36acf847448af528637741c5678663fb609e2513b53bdd63d3b4d60eadc0338497258b05f0126c74ff12097cf3f402336dd5657aef4c5b9d68bd42d3d614cdc7105a67461cd6f25845d77279a83e7d9a827e8de8d817ddfb5715339beda365fdf394e13295cc022a7144dc094c4f804a7f83846ac2ac7b01aa4fbe456c83512213efacb4005d39a259b9b446796055453833acdbf5b644600b8e383c827b0443110e4a22169b9f6862978bc783d538e207c4a41547d45c2f813e212fcf39cd721517d48a62fb201b04c8ee60bf8c12e28707ff41941eda3970f43af06026ed77b31718ae64c7b21d9bb72454c0d22b688dc9e9d8beb617ad3d9711ff264ee680d07551afb0c6654018b70834618a8ccb7ef14e1ae9eed6a64b8fc5aab21a004803bd0ca6b3ca244c940bef466e762324dc1cd545e1d1c4771819181c15a016988e4cd57392c8a61587686d7cdac3094d29e88389d9f6df4bb6da5e20730c4556bb0175abb2f367e8e14f861b19d6b179855d2b98c9853a1ad9e813c1c5d147daa5255f2b66f36f673261a4e0d8780a8358c32784e128aa551270b733591e9c49a997abe3eda3f9da997cbe355a8d5ef39ddc5e8a65dbaf9397a27140930559ce91f126338784044bc661ccebaf2bd9254d3857f210abbe06634b5ac99a689b0ca655f102d24017bf1967a005121a6b252b6dded1fc3944efc78164e5cf8504ce5025f8c3e8c0fed4a8f3c0621fa40db492f45fee9acac8222ccc1bcb3bac57d2357a742bf029823d97049b9cccde7deae7f35f9866080ca548d28144ac54334ff2783d95a41492a4098307bb8437bad0d838ebc9eecefc3475055f4a3adade1985332a37f731ca2705273c4a86f525b76bc62a5b922d1efc9d11f60f617c48f970fbedc072faea9ece05a3307ffc74c92518eff65ecf6b94147e9eedca51443bbfe8b5369849e671a476f25fd562fccb3c1f1b416c126848328a4ce09a34c45eccb6c40be1181603bca6c01cf790d5ac09743e9b5b6bfa4d2b390f306b3515606dd1922378923df6f9d874946471922110c24334bc036c01ea779eb5a6fa7129dde18d39fe616be2effc89a945dd060bfbb3527d72356a28bd0adaef787f92fb527b9bcc44a32bdc8658aa6fe608d0a79b5662d9ad0878d04495cf7c8d0fa9bc6203aa945fe8f1073e856bb331f3d6f1bae823aa384230bf50f3f574d56d744cde65886a31c46aacc4184043407dc476ff5b09b55943801e053c2cb379352191629dcae7c0353933cb135870e0cab40e25381dedfec80e4e5d22c7e1f9045652c9812ba3eedaa7d2c3465270982e8c85027bfe1688e8f715713ee1ba01aea729d728e409aed6d792923436a3b84745c1b5c8fadbdcca07e1261da2597a9934e0970f12f34a686f56701d0d3a82b9ae7c3dc51a259de1d5be9b5a41c49e4b373d1a41bafdfc0cac0ba9119d1f5d2ba1fd68bec0a535ad962ab0563a0c4580a714ee7b84c031dc2f3d01c9d01934adb7dfd49438558cac5c9e7b10641409f9f0bb2003fbd9ef2be7a8bed98c618bece6a8493355f2d5ceca8eb37665da94fcd509e1d75315ef998fe57e675d72bc896d009d5a35f7269e53316189468c612d07398e46c4015da630c12d06267b4687b7b4bf21f51009ed9e01c848205cd97f99c15b78937c887cbade8010ea56cb98479ca4aba2d92503610d72c052f505c75979b63d7cf6845ef6ae9754ae601031723cd66e59681c7659b22a95a1d92a354eeecdc57919188f55f81d3f69d5a6484a115c74f2a93ee7ff37b29e8eaee939451c21c668c156cbf0de803e22e91b26cd3a3a968a20cf6b5803e853e5f97b6497aa6f641efa46ace7d9a4f2128babf10aedf09dad55b41fe55c9667f41e86b1bc57600e515079b229b6278d1aa4b73e78da0939bbac53693efb1399fc7b30b91c0fdfe73b51638203717875b097e26c411c81057897ddc1664b52583aeb1496928a54e288e4b081248e8c5c90945f3d4480a37258f27430f86c9400712cdca223d8b69a4a693800196ff7759a66e860f7491ca97092497a3db0a43e116353597cdbe836c207b920217a698c0eb67e9e21767581755629dfd8c4a8964591d540758b614df4c7c211d2c1361bf166ea8ef327a5ef8a86dd3f06c46ee886379a6c430578d97757ab547e92145bd97c4de3f38fe618957e72a7c9d433831dff2d7b4362cfe26c7da5e3d3ab0b275d3269c59a108d7fb779eacf76f3b1afb1e44e4e3ba3cd423afd0ec177b4177b13961265cb1cf585bc3aea1f5e6b391bc2f6dee1a92926c66bcb5d2790bcdda167a7e12852adbaf08b2f1da32320f341fb6f2bafef6316946e03608256e7f1b77dce870d268efdac377e1d9528db43b1ff61a01c1cabb38e66f1e77fc70dd5caab049ca2b5e1b9c4c8898b74275b13f76d40ab241a1185fb87d21847a6d65862900ef6a21da2d8ccc1535d18600bd984e31e3f70fd8d5239f4cc8786313b5ea559fdcd86c5dd2da8e8f8dc08537dbd525f4d782fa44716bdb9ca37f465cfa655fe30e79536b0ccfa4616862e76dd3f65c0f00331240c9fdc08ad83c71c4873623144f83bb05ee8138d090fca479f3b82c679bc675305f241fc5360f16fa8d80e46c452b1341b25b40d7f4542ac9c541fcb0824311c2ac7f8a6bd18d175626a1c4fde3548325db2a1afaefae7dd90948be69b83c2fdad700d66ddff324e3e8cc3dd4108bf97035c0cd089b15e1c558c15b77e06292620719d2cd7c0a68283cb682b14dc09c48801a72eb2259f5f5892e8844340c151a73802d6a02ccf64cbceb06e68689ef436d1ed8e73fb655c013a105790181fefaf8490081a8a7db6b1a255d4d27e35afe0bd948ef7dddc4e45bbca4b9250a602b92b878f12a803487968e2941f6c379343eb697e1e198d44403873fc7b954d1fb87798dd164b1fac5b8479b602cbcf84601608b9dc04ba735c831b1fcbc25d6b2578c09c95a7a2f0a0c510f440fa9ea085f59cba301840ed41f6a25d8de94f9175df9bc8780cfbe29d84e0215b59c9bc213a465b8b82a97d5f20b004067e97db2c92d2d35e301f6c31f3854d647d47cea7901a888cc5dc33207ba95dd8698307aad285a6d66d0c8021aea2d9283b003f5e40e9e98f13ce2987be3b4cddddeec3d8f05ed94d96b0593d61729d98491f8bbadca8c6780c2e945252dfe7213f0d54f51092802033957df7a807e565ca030e9b53ab8bcd3d50496df9358c1581d25153ee6fc012dabba5ad6db9bf08acbb428f2507ff41e2eefd59164581f2860ffebca59b9e1575383b494b4956eaf65e6aa095e81d28f6fab61504e42cc2a3b0c91752fa74d86525e72b82c64a242b802915b0b33419b7b590caf558f7a7498bec49391953ba2d7f8b79e12d0e6e16e946851a5549dfd8b34269c74283d2d2dab3ff97e06aebeca55a1e4b49827b7d9050052ec3dad5f7b98988ed8c81b807ae07c4cef79b47efefe846dd7425fe1629bfcee41775e492d836341c43bf455ab22771999c2ec967e16fb9c2ebdc3305ab8dbea28f8d5ed5083d042c2a753381540b60497dbe739402053c76aec6747d862ed017d9a44f053d015d031600f78d04af0ffbf0388903cb8a00884205afa881294de6182f2692195e83cb2150ad2548f68454d9bfb8b6a08642f5db714c1335ec6002d7c2cc10fb035a3c371c325c7e3877b0dd5828e0511213d4193fd4d1c82c60b34ce047d7fc5ba522086cd6f0d5e3bd23eb81e733101f0928b9eac919fd1179c4df9951051c6baf5f25ac7690107c4ff409c3fe918388831093290dc71f0556e7f18a3a255e82d46daee24dd42ef7a6d4f5eb87902e95486965dcaef5aa577e8f96781e6203bad6a91534e9243daa090943ab69bcc2ec09db140b60b0c9d6baff5a215091c5e2cbbda944a61fd3eea108e3c948c7350d670bd996c5412ec908824045a2a51cca9c40459e7bf4162ea55642bb87cc35a20f00e535980cc3618f91d5735f3f64cc17b5c75f12e01c58a28d438844d61bfe7746b46db54d9031e1cf98e42da592711e6eb3e998c2c4239b86ae4c28ac8cc41b905926d5411e6f0c8aec052d7f46753c23b6db02acc3590c9a526d51491091b29d7caeca0783385f9bcd468b1a8cce0caccb8d22e0e78893db1361114b3bb54ffe3c1be3c0c918d215695588d3524a8f0c918978bbd26b00c2cf6a2879e10c19f38a709ba4de12d40c7a3f9041668846713fccf71f877d3f7eb2f83a302e774595c51bb4fc8839ac710dcd72ba46404f682fc7502f905eb9a3fabde7c5995455d2a88caa6833dbfacdfa1171562982e7afa1664155843fc4ee99c7c1a4d9e2cc7009113d3ea1124032134d7d40fac3689f1075190d5e6c4c0d31a8f62affe38dcab17a2a09402c15ebb976a7ac88b0f82bd80919391566ccec15bae86a91012433b5838cf9ac0609494666d0b75e1261b567fd4726403342f9f5b31a330ad25c3b71eaa41b19793c7d73124221facb99178785a3654e11ebff8447c132c8376fbf0a16f9761695eaa00527d76e40ade4281c195522051204ffeef6d7a0a52a73a0f3c6d3f59ba62a236a76fd04af09e637660d4c88e1d2458a122c97caa1a48dcca26ea52af35dfe3e89813aacfad42f4f3d04030c8ac775997c9e9d2e7ad775d61dc285f513245ac01cfbd5c7c59587c726c1a0353f6e452ad6791fa97a442ee6a6723e35cec5b9ffde8e2e7e450a445129bacb88a92fd9e3ae17cbcb96f811b2e239ce3a9c705202116ce4de3ad326f60062811d2d9daaa8ff4b82e7351934dbdb10f7587de6799c2e7c4b540588931125bdf657e8a41f42c959344c78356402fbd2c3f6d68ee50715c277afbdebe7973a977819614161ce017118c3214059a7f4216b80d08f5966af2cf4a6621437b2cdf1d37c963c9a0a3324e317e086c60a1ce70c9073427f5e12616143d5a26781dcbb2fb91516d0c93f6a3d017d45f7c6abffa0fc2737066b2c928cd9830c3a18c1f110f56735214a9634e97ff6f6378cdadd185f55f54af43b9e01c047b207543f0748842cf6b1b3e7403ade609e0ebe43e9f170eb783d06ee1677d5ff09231ea6ddeb83d07038c8a515354d7bae81c4006bed4fae599ce2225332fe2e7ec7d5c38fd7475b2cb74ab66011a4fc34254f13e8f8a3307eba9c03cc68a93c1093f6b28dd519c05564f5a6fc61e464274490b78ac43f68c108c193d0728ffac738fc184fd1f1aa5bc5a989dc2a28335cfdf223359a53bd70401a65ad14da2af017e87770d547395e79ad62e683dc73d0eb44f75e96510e4ba0ad7be4454bb77f25eae7a6a7f96aaa2dafeab4d733737c2fa8980f3fc2a82155049c2cea049de287803a81c9007b9825c3f05ae4e60583d0fcb8e2fe0068f786d8d63d6a36c46eab9ce6363218f2ce49c85e6cee74336a243c4d1484090a4ff43547ee9bf94c2d14eac3958b31deaaaa2ad9114dcc354e274c4edaab66508b9a094a01a951e42f5ff14a497378869368337e5f062c2e7c9e063c7ce55de9cd24397b11d2fce227a11e3995dcc9b0f02ffe1b2c5f25217e6955382f0fbf00bcdf06700ef0c08283e78082ce031e014af55fa238da1ebf28e999700ded7cbf68e1e954663f60be44ccdfda31d071e3245f738de50c66da2122f8feaf96a4c63fb03250f88a1c444a72d7eb310af4c36d9146bef8b6c553640a0b456ab463fc52f597d279a577568f40ed2728af99bfb1034a77cfd015f3ad44e8c164f2e3fca4c757b328e968c8f2cb24bfabbab39c834288ecb12a2f4663349c2cb6e85b0eb982168bd5e58e3c57ccd883846bef4e025ac565ec63b3a9f3205bd1fd2f1165b648d461f280788ac8102bd28de41765d39e6861d6ea97a9fb4ec30059b278aa20365055baf96c6250e5aed27ec1bb0d00fb40ec8af9ed97e4c7645bbbc8daac5cad42f065b99858681d0842187c46573051fef70bc3ec0281662a4488ebbe1da452b91a33200a309d781c546362544887987eab1a2086c5e9517abe5be2cbcf4d730a1d107334eaf5d05d722bb4e64c51f069a14e7d7d1982e30157216015cd10e3ab5024eb752c5afaf0307a0d7b472a47b75a5ca794730770ae70031557c6ba637dc20173edb6c284098a055ded0eff23e8cf8d1f2b71767c4a880f5ba0bd6ddf28a3a7b4d2463f31f0e12c275f80506dc1e1d00d815617729324d26ce3faab47f406539a936c66e88e65afa69d1aafd41b0d3f19e9803102788ad95bfd56b8276acfc4a3d23fca74db8902483a55939c8711f5f0f7fa8556560348264d5ef006a0d5258c9f5c91bd3aded4005db76abf0e6fe7843a164138a5a33bcd9114b883743f9318d4e1cc4c399760939ca02e24676f195923fae69a59b108aa601361a7117365ec6487513193e09fa0ce9353c09ad622ed28bc5ff1c1ea93e954f7eb8c2b7fcc5cc45c83b892c362cda219ad69af7ce8f66c2c09491684c65ddf5e6b3a1ef88008703d69ec48c0aa30796f0f9026cb008e4de02ed92fdca715908964129bb356b1d07303fe3b344364774400f1a6f36f9aa06377b3deb38c55ec5849f7c19993ab9874362357e1e85e144720a08b58d8bc563f03f45196800f6d5312282c7ad53e3a8e6f6ebb2c61761bbe693e2831a1a3d75f3bc84e5f98cf873a79461509ad8049487fd10f6fa1ac956401e7bfa3ea282f3fa40a8293ae4b2260288621d506ca8c242fe0cc66814bb0a64decdee7f86d74085715158fe1ca5419f78694d6cd51dc15f49caa56ce57425d5225f8635ec05f3d6e73ffedc3a07c9d383e1ea8a3ba79e0f480e05652f1dd710ffe9303fe6e30352962bd0ca71290141f33eafac2e67063ff954abc5e93b94018c0ca1c66a139dbba059fc32e623d5114b7b96f58a88f13ca07daa399c887391fd9df4ed1fa3b2d1e81528f2feb670463549a76c77188b09328dc89aadb1b6bfe7eb0c8bb4229ee17391b18d5163d29b1909752655f0afb5ecd5e500009d1640c4df4acaa927f8f4ee503dcf1e5d589ccf2f8b4c9a5325eed4e27b4b4bafa7169e827c791fb73e64e024fab3f9c0e9829a60f2f005c06b65f83f7882a3d1136ae0c81accb4e05b991404151af0490c4dc84662650d260b894224d319357506ccbda42707af609f36423e7e8a5addf08edc6001e06d585728280735f893a2c3a9a57c7941f212d682108c6c54a2c354cc36271ab0ad3257d91a583c5165093dc918246cf25bd80451596289326d97eb6ed136c16012343987daa052f34ab7d203d2f3fc9248551fa8e2f318c4ecad397e4025b94454b13c58950fd8cd74a52d5c52b445c1b8ce476334d2a93690047526252b34ba7bc5bf1728751e68ad291184968f4f432de0aa9be77c8e36099371307030c47a1598fd0865f4c9c649e1387a5c1322e3aedabb9b38e79f92ba90cbbf5a67624b784b95777ce3a3e6127d369c2e1be75c8214baa08b4be0fda317f868430e492ac3c8e2b7c70c1eef4f0ae94c7f712f7eae197759a70515341319d3a8ea1f4c57eade5f37e84996d83fbff9e0c1a14531b670c5b4c61571f669066b63ef599750b552b0bf13b9a37d3562f92440c0571377cf2019331c0d97068dfd9bcff5640d5ba4609d4be48b02bc05700217a7e2f7213c0391a4d20f2047fc0fa51cdd1589b0ced8c4056f091151a84e9099dbb2fc900d29bad92855e1d581260eeda27f761c8f46348d48e52a7c4146031b41ccc955a826eae6649a1339a3597e4d95c5280f4586c7a9801ee812501305e4ceacce8da3ea9261ca3ed2b5b682ba1196a253f47187fe3b1a77128fd569ae3bd2885d0e70869118bbf26df42fd300f6b7c486f0c5976b4aa602d994b69e10a8bb069507fde5713cb5262102795b7b924f132e6fb4c4c6f3668d8bca8d332184206f90d429e14d8677249164cd8d05334a0b89ba36925909482848af0780160299b2bba66a6bf298361cc13922a8d8ac11a92c1bcf8ee458d5bb0c9c1ddb32d34d2d4b938c275300c1c18432ccbb91ff2ae27b428760d32ae1c76971a5607e3b52881ce719111b28cde92e63d5722950d147e1ea3ee07c31a6afc7e783fe11bb7c1a9c72b867b82ad6b854c2ad8288b7bf0f2a254395c9e678f0d34495e3f556b0c3e0ba19931a1422668c23047fd452523cd1c136e83a6b1b5292bcf3c1198408ee5bf28ea11074dc7ea7e8df58c50b5512e18e30352ca3dd8923def0e7dae19d87a47a48fc9a630db05e71abc4ad9a701aa062106ce2dce67b4a7d04768937284841572339061d6857d707fb280be333846be8eec670687238fe853758e2e3209c2eb5ed906968412c71acc60b5a59a387ec6d47bc7140babebbc5a79f8081d27c30d692886e09235432eaa947abc3c6a5767dec24c26ecd5943cf3c2412ac38614bc5a564f2a92ffb366e8e7f80f7d2e0b8edd3cb67b8c9a214c041a76d1a5012b88f4b4ebd9eed38a086a47de80321ff3046d61728bd8d2d0e525393a119c596295b4dd384d18f0b66e80f878819d8cb359601f6f007d89e80ccd2a36a22a19e5c5d1e42d1b9a9ae168ea7d00ce199aaa770a3034319f3c914f0d8a25a5860241d27eaf87c5f0163b42ae6dfc56e9f5740eed26810aed1e47706219951e19157c472b1a4c3cb0591bad6cd62058f7388694c2639e63f1ff7a0c7a72de77ffc68a937b57d79e915bd1d40407649e8f68fc7151d64a6ecd1c2556733c7fc8638cb485ee28be0d2abd8c13ad1df79d4b536a09cedea859d0d8edae31e9fb1c3f546e0c4c68cda29b8ceb05b3b58b11518515554f6b14fd23c7ad958fa2d7f951b48aace4f9d291597a4e2fef8a516b668f6f685ecc21fbd5dfb71b52bd49a6752bad41d0f854c766fbb208b4f3d781a7b2ba484dfc469d214fc90736882e7db6353388b07db5a8c9ccd780ca886b8c956090fb50289e28c189d1ee1340e9dcdebcbba4af7fb7a34667e8a13f0448e7846e967c6e9af4df47b9dc2df05f72ca02df02e2df7eddedc80005bdfe991ead941618a876649de7f5c1bb1174e7b8cadced086991d507f56c58fc631df3d211091f9284537345bb84a669ac90660522cd657425749be98da36808f02b1e753786302400e8fc8a474a8a8cc9ac187dd0f5513b4bca4d13865baef8ce4c252c63be1ecc44cbabe7d00b2f58f8555e795c36c8bb71aee8fab73ec2dae574a40f0815898b6788f567c2a096e461cf86416473021b496a381deaaa38a8b8c00c7fe1a2721d17a13f012e1f48547ee89d0b949351a3505c73a8e4772292f98efb1d8981192c320c1cea707f214f199fa84330f3890f0c7239f1282db3b9a9c0bd34d2623ac03696462c8e8497c4c309a4b3d59b6638d16141f6904108791a15d63b0077800a54a0f09b883b6295149cd4e6499ef731ee908c88c7eb00440c56e9239bcf9d1faca9e4828d62a56a7f4ab655c046e7da546d6d9f242a14c231209683e652d6ac5e7fd39f30d144c70b114091b2ae54f575e874f96f9064abd8fb2d9a220cec102e03b6033b3e1f016be350d0dceb52406107683c1f3b8dbc421c9299262b81160f123421cb658dd5012026f23322f1506910715c7b62323e14736b29d3598d7a19f2250cf2ff0b4f6af4b40b71b2a6a338699a0e44998ff4be08e7910277ce48f39057d121cd506d0f63d2cea8621c93bd39584469abe6afe38a191f703e597ccc0dfe3a0a4ea568a3a7968f0961f5ce76d986d7ee264f32295bbf8fbc26a249b467f63afa5b2d08c2ebeb286edb8b7d0983f8bd22b5bd8e2cd57b5be37b7000141a1ebd8e94309e6a06391f4382d7b11bbad8a23d6f2ab4cb5b478508cc10a30b833f63361d7a08d68f51ed69e42d6766f0091502f6325120d68b4b305b263043203be7b9c312c4d5a95122ee209c9baa788bc01de3b9426951ad1ce3e7535dd391b7ee3c8f1e9769c7ae46c09730637dd1fc2350db5717a68315ffe1db6fff9891735b03da07330b683f54e6304bb335e0e9f678c923562bdeb446f067c7b4e91ff36b0ff5a7ae13dd42876f8699fc671c25750a23cebc6b7db9eb3957a10face0b408ea59580df34a52dfc3fe63fcb1567dd2ca097ed8f1507255c739ba3d7e939e411a033baedd090ada9fe14df63b55a1633fdd174e504f1efbf561a96ab976e7ed995a570b0e182b84402734db7eb2250877056214ec55ebc23f430cfabbdd0d037634fa266c0b92e14870df4002d858079a1d66091011a304187fd1383a6009f1ab55675cde2e7152e7c0c5fc60f701e8eaa6c4eee660ae275922f97c92c219610e65a348215311b54a7236e2260783e5e870e584a04872c03ce2f0f139b0fadfa00a2101d27ccc6b110ac792e8d1c93949fe882e606d2e52e8f4be4d21327c92080e37ad61712a6cf6ee6f273fa7dc52417a6e77b19aff498d3de4780c5ff73c6ef29622f3e71eca57d5fd6ba88a1863d5109dc014f7b617c2d8547084e0f787c3f2047d2eb401b3ff7e3f4c5c3cc3840fcdfaaaeb6bdba60f1f56844f97ff55a45c04009caa85f4552918513f3d8d418c34bf3cc4bdc407269f430005fb3199f701d8e2e715c1e34a6af1740897b439d729021f6527cdff6658fcfee4be930ffbf9b76052832919b3c90025d6c78a56431fb2488cebb371bd4ff3b89a32a205cef3ec4abd3a902609eeda4da6dd3416bc672c64ea786732af36f383946959c2260528ad086141fd96adeb72ffc5039ea670dd89207899858bdbb5a77f2cb403465aa9529d643df62edb8b0fec98dc1dfc14d1b1e70df8d11d78f2e9b9f938ea4fac1105194266fe9f3fad425d7a86aa579b7ee69d5bf0f82218c23e11d09362ff1a208c5428cbb0cd44cdb744f51dce8b3effe66b1c1d7f158b5b7c8708eff42c58290f4d4b0b20c3fc78ef772e11dcaafd772c7f0a6a22df80880790b8f4ef4c0bcac592087880fe0f7681876446333e0d9e82a04ae6526616c6e944e164dd40fd3971b07d033aa13e01cb02b3dfbd840f0178814c5b74c61057c5b19d03e6f766a9433376835186f954e09559c07ef730228b77a76c8ba5c09fc5d20445e882b7b2a468f08b7b44f6a8d0818bfc944e600589efd943b4d8ff411584e06b2e72ab416849405c705bba8b3d9302095d5a16a81bd52aacab69065684723083c993eb83ab76513959e27a4d9b8c43ce5b41926851b65395d14bb9e591dd7525068d4bfd087415ad3d1f633b746d825c34a11b324e09368e0ed4dcaade90656a2d7b8c18976f361eb89b6b99ca4948261ebcc97b2f9ee9fe8053e91344c57ef5183df86a8f0b7bcce48ef0c86ebbf33d0103e94f03e8da3a9957a01e26525a9d7ac5d768cccde313bfbf6fd7ab4689cef7a42fabce764e9487130dd33b1bb9e8b988611b24e7b10285c0d1e14da00b3b669c8659a36804ef02ac938e3427402d3054f2a7f3276afd44099e83cea7f9803243d23f9be4f25332633232d965b8df4b417d837bc994028f916b04f6a6260099739f9dd40f467ad0fda8902a3d48bfdac42052ea4157c2e8e69d6a55c318d9b05c5124217d1f6c020db62490d2e81a465a5727020bc157ad1f340298ea322bdc170671a50a5bd930b98c3ebce42a6228b55313b228b0d78b347979275df04d046d8637fef61a752fb0fb1423b9849ee96653ffd48caadf745ed1ed0f347d52b3e33a41a8d15b791620ccf91b54a9e71eaa79d37e231bde0491ed31e9a24fa54c24746010997167380ba47fe3d859c5795155dfeec01c9719c26877c2826422c846f4b89ed11e0422e1f1222d4c2c7b3de65c562a97396befa8ea60785492fd2be92c8379d70923d45043c479cff853bebc4bcf3e5e7eb86a44057c71e5c79c7f9c2c6ef7953541f83c4aff742c99125471dc6e9c4e80d9dbbd60914c7bc78a693ca4ac50e9d57e3280a481e6a1fefcf0fe9869706d055c4e4f9017886d4d77b5b3ec54d867c0f3ec39affd21ede729ed2fc7fe6be322828c9104d6bb938ac16267abe3794269ad712c7a9d375b23d0863ff8502e1d62dc6c135295071b6aa28f2d0c69936884e25335f5010f74503c9eb1d39eece04dec184d33809c6509d62c4f46ac02b202d2b979b6363e7c92232661b023fe0e266170ebdb6b989aa58723158cd77eac5ce335c5373c8ee1dd0df97a32ae90825e05bc2aa8e853cead1d4d49194f738ca3e4e1a5139259b3ce9ab617ed483bd1ee56825c52b39905322b094e39336b928ad42402a84a56689870b897fe6fd5b097fb2c1cab26234b072a061709c743931b00a0e67336c30e12b0cc732e87c798b4eae7e0a2f39c3723dc8899b4029efba40ad9e65d2c5e12990ec305ac6630cdbd15b2021acfe4d76fe159a6da8f081efae7117694d44c3c119efeab46d3e14e6375ce448f6fc249c1a25da0f5903f2a5eaa74f668cd00e66986bcf6f56139d74ff88a641b1673ec37139383c0fa1a0192ac25f5c27177783fe46cc6b60dc81e1394d596f35a2e072ce88b14302d21fb932eb15e41ace0ec72ff3c3b55084078acba43197316e9363cabd305fd80ae188fb1e2d551e4b87c143df8381ca8dd60063a077dbe827c42825857507486b3ebac5c7b3e01c385e1919daa2f2b31a922f849f1ee6c4dc5da5fab1064526cf57b5705dc6aa1c9c2939456cf1df2f0dba1d6fa09a23a54cb54c9f2c198a055a01b1fa3888af77d16a9a3a240e98c41d3fb20897e22d8bd9193b4006b0d640e1439a30b3263a6153c391dae18cb5202880c2fe0e647b77e51792740c0d4299d21829cca8898a23b4847a31cd7f732db2c2811ac60bd553db86cf9626bb268546afaeff51a6054c1d36244b1c3febf0cd751ad89718502b06c683f629bc43c18b497a7d80f1c1e84aeebdc1abce74e4885915b1110f7dd803b6f270221598b91572e156f9fc0d15e8594951a1a9f3caf0dd0d1cd20da3b4e5e44df56e3c64975b4c5d2604f8c75affedbe6854a7dbac3123f8c4f773c33c489f9671ace7fdb718a90ef9b307bf8029bd0a44c1ccfec25fd20901cbbc7150d86e00c83735b8348bd783cc23d4f359aea16de42b63f2ed1c86b642057ae92cb79bbd4a0ed8d6a03003a63416632f665c81c4785191c029037188105c628e90c2028c70ce403a5d552775192f7c59ae06491ace6b8aad3a6747dfcfde05d44d14a035acab2a0eba05fbd4fbe4834e97971d950e38862ca4a270bf6d90217e2134a67d1e61f0f1b69bb3862794ac4dfb39dee759db91c8ab2ed26f58c069a7be8d6105159b8768b7a3ab748ec22f6525c5a9d5008c390b72222bfff81386002882487ef49921858af3697ea4d9ad49d14c2f6a93e6486292495b07e043e641fef5d6856d899bd36156aad44ff66f960f239265b0aeb762d66455add16516cf5152474300e1db2daa1941b0926dc9644e4d540aa9d49a288242a04de3c9af133a49fc187d1554b48b10f2448e2705213c05d70dce393fde21d103df99ba6977d32bb47e13d993e0d3201ff10a05ab2676a0c45c886a7f18b75008393a2d4552356f597d6f0ec618e01842448094af1e1c2af1c627c0e675533408545160c2175f905041e5c776e69a13a6755a5f0e611ce10804e1dc72982e9859dbe1c25d3aa143ae329afbc594b2fadd92f4f6c2ed1f748c75e02e483501ede5a6676dfcc175c0a094a9a2f98107aed7d664bf913a8601d508b2dc894c466dc3032cac2f6fdb348c686e619e7003b256049c2fca921d681fbeda2abac1d0806c14c87addaef83ffd97a4d12a785342e8b773ae8fbb48694b8a9b0bc8c2001dc55bf1fa589d0c93018520e3ee476087065e8abe710f4f3caa062838f5cdf47a4adc7acb1af45edf5424b52ef069cfd471a83fe666922097a818fb6624831ed36ecf2309b5f9212ebd00b96adb09ca99475142761a68e06086af342d50ded6e4e437221aa7fa02fac820596118855d476e38e2ab9ed8f2abbe1b374ba6d01ed0b1e69cc9e6da6699b29a2dfa502220e24fd472fd644efc9be32db68e41aa862a9a69790b1ff544ad2a46f6863a00fce9f5a565d6de06e3f51a73683261b5d96e2aa7ba51e81d1ef6e53594d93c9c1f657d456f38238fc6ae480cf0411be7788eedb8d2b6f989f404e6686dbd61636e202c334490b3c8b482bdf2612cfd6795123485340a56657222a4ab282922685237b3ddfdada4f88bde2529002693253d9ec3d9d4084e3ba17c0979d50ed593babfaa6a481010a5920c29bf45aa238576a19fe4ba2eb6d6a64470b02e665c0f4057d9c403af11603a30203c3eb230a4e75bfcf92bfdcb8dd5468afba03d84b05ae52947a1c940dfb22239dea04322953ee189091d5854c2b2d24252f4f2e56d49e7f263a30a7ae7341d660ac5857bbb915505f9304092ed993004e948fa87cb4c2525c6b185bc755b5a9cd50740d257c43f0c6043797d0abbe5fdfca3caa9e9595b9ca4901671d74bd728143d1724c15faf3c86c3ed464d96e22a6c11456d368aaf6c0341ba7ebd5d1d86234b1dbcdf78d087df38469275e6e93b228419151b5dbf09e2853bedce63f90272fe7dba2dd4fdca5d4aa79c425ae4d4f0bf65281528715d77464c3b937b7b9f63a595f72b6779fe3341a2cee542cd0e859173d66f4ee64575cec0f120203cebcfa730fd0c7bb4de933858291e1959d93ef49740945968c53bc16560ac9ea70b3acab5d6db3b00c138e750a296227272f8d407af36109a7d630ab859b2a989b87572a28fda16f4d92b5dbc1f10d38f8a380f62132a0f4855e4918c6ae4936e7923054f320230f9173c1d8128705eeb9e19700c4098a6e1bf3b2ecb96cc72af69d338411392387edc4f06a556b19ffb01c151352169b0380f0363b8d35efe6a76c92f3896f414b02ffffd688053efd952ceacdd9cb2d09bb140ccf88d5a0de048065af087fcb797504565c21ff56a9f10bda5aa4126419f2b83812b46f2a9aae324ae15449e88dfa9704e6e0b5532dde8f393605ab96972ac11d47aaad789e0e5b505c090f7759555ba264cb8a079f2a01d4b70944c1d9f1b3f38c8e7cfa50c253c5d00e117bcff9aed306905929587607351022c73cc0dce45096107e76d3f78093e259242b9008f12ae7ec87174f5a2a0e984a99eadd8d3ad5fadc16b775536daa354bd1da7c04f41beed3cf1c6ecc4500bea8f79d8f33e222ad63b58443dd055babde6ad3b584f00f1df647405a427b6c6db1ff3feef3d0f218e0d2822dbe3c533a9ea47327e4c9ffa769b707052098c7fa946bcc73ffb0e37de24fa2447be72a3fcf72b7a591499533e540f2435d64876f5964ea01b01c67a0bcc0d2223299048c5a45207697f27e03729ae7cfb5041da261085c73b87d65aec332c2d2cba66ebdff149947d87cc01447b9e6e92bc4147c2bcafd6f6187089c62f86c7231d30422bcf78344d3b3590f31d3ac00fe497cc1d8ed14ca18cb3380a708239b25bc3117e5370ba9ea699e8c1d73099c7081838d464f28d20ae87785b98c4ade20731c622e2c5950ea378208662817b52fa6109c9ce8337b230b33540a543f3d992e3b95a85f51e18277053556bf8ac708681d1dd895f8a9a7e0293b240bcd91e73da60787148fd0905a42faf08d8784d3590f3aca3a4f17da11778d9885862968cfa03cddba0735f5efb81334c93331b44708b9493a596012d29e2c5d29c6419ea9780b02fac41e708c0ca65f60c27c2c6d7229a4e0c81165563b14153fffef64663663189a48010a7fdab692ec8c8b8144c5d4adf69e37836427e92d4f5cc0011bd28386ce739fa217dbe90c31da7088a1c63de220197dc6e5b4aa52ddecb3ab8179356fe70c991c80b55df5dea83a4aaa9b8f59a9e143ca04dea8c2617711384c7baabc036d2ed3d782b7ff1a26fe2260fda9d0f32f83ee7f9c9ba5bb29cd732b4cd2d39b16c87d5453c2479d607df5a9f350dd24cb437b22b14a84d43764c1b6b81dadcc64ceb37a11bef7256a7a4cd844fb4d37a97298944c2905f60c102e3b101679991740fa216da46e8e8e2552da69b0949d25ae38bec64dd16ba06cfeb08f846d6988eb550d4d2b2d1a32d99b951093b1726fdafde212637ffd28f7267201389f7e390c134486adf3c8dd33246828ed98e344f386e7defc3b6d9879fa10b9378b16bc0979947bb3b913ae067919c0b7bd84d694401a7db05f741cd94dafbcef25229b25e6acd48efe2607c34f9ae0964c2d273a6058d2857a1940a590b9cb112cfdc997e24a0bc01f98ab336112b75ba0a7d8607f1b1907c351c0730996eb253da820be9528784f5b3238cb70c7f1e1f27307a025b8892b5a5ce046af4180fd850c4e096aa9041dc7f893f26c7d8cae93dc41701adbeb24a096a1460667aaa74e72e51e81114c3fb312b2193e3807484e7140370c9d7eb2304ea52ed30d0d236f4a91f70a58f392dfc6572841fd48b78ce844ca0529ce284714ade023858112781e8a4fdd77de34b205967d2d8d7f16655d479034b16af01205b30889ed940a9183f0b429fa663c68f4bfaeaa9eb20b3b3fd455b62a5ad632a4e4a00ab801ca8789b905be5ba1ca92de20d7fd595bc3f95c09832bba6942e76ec0841c10d9ac14660bfb158281daebd7a459ea84643a4f90e4a3b3d3a8cde856a8005d5e5d18b1c83c30df0e7796b274b5420b1d6b409287b429d27b5e9d77f5613d66d6a5c2e1abcba2c7486424f32de8f11ab6bbb2a81d70db2469cfd910b6cf4e76461acaadd9e44c918769c5273fced3e70f5d8f86b3aad2f8d365ceb8d40ea4b3a3f644b89a1c618017a3e70f40fca99135db58828f05c55b0e8ac19d134718677a864913841c4a3a81c0172ccebcb7753333fb64409b60ca98360a3b2150ac02c7a8f8844624020afbf62ac3867eb900f6bb0626356c90ca40d6827f99b5a21907df44a74e72296af1a0171e8bea64637a7315c013d4806b6d61f6d7a389c2b993561335aebc6291ea8b27de64294ef6e6f8ce82f67355ba02b24128250f943395ea7348db0772b347cf3198478e3fbba388fa3dd491ddc2e8837f632caea19acb3d3c476a6076e1a0cbe266298518dd4ee6178021ff44eace3d3ef79d9c93eee7598b365aa2a6449e335e6d247ab1cfb555efe5f5fa03aec573f559ef26fd07f50fa1be0c6b0f15a59f3d2233ac1773135a861677dffe253e6535fa2250d60512c254a44392af1b7b0bc83f3925af5e5183b13a7e219141bb42c66cf303480aa408eb0cbce663eee0d1c885a261e5d13477b1cdb1412fa271fde16164896ed9df062ee60935746ec065fefe01f0428652d3a7a11da4aa582b207b4effafc634150adb850da0c151581258335b3f792d58cbf1ea73554217721365e35c4e8d5f544153cc8df6ec8eb0c9ef9f5f6e00462fada471891e7001da6aed40eb19a07d0a0c4a1c43fb9c9766ba334929cf907ed8a23fe529a90865580de0d84fddb94d6462ecb5d17c94c6f668d97d3cb0b40e8ee6e3087c243b46986d8544626e20597e4d51ef32c523e56e6af95f0b91143fcc9f6aed924401c4a3b70b10dfa1591acd15a26b6abfa38e03b68157481423a899dfea21e7e2e495dc0f4af0252769f9967f49ac916406b8cf1fdd7759108d433c9d6cc79d2b30a3b191e7f3ecc657906218880b9146af316b836bb6c45f12d32c49ebc47e4399b3a78cd6f577f961e33feeb69501d024e891d22527c1a46ff8361246529d641709d39194654a01250174c8eebb665596dc4b9a03acc11849b6234c612a3ab54a002f1bffe358bb1dfc4c7598a33c60244265767417fbc03319222b49eba77b0d948fe00268c9f62113ced083e797686a5f2eedcfbedf2a9f1722dd122d2dabc9e2decae5de3e271a7814bb395320c90d1d429a0071519fb11b22c4060e18d32ad9a4baa4cf2d3a9dcd72179c6f58c75d848edfd3bc2197c7c1bf189e17fc7ca88f186d949361ca910b604106d859ae12bc95f9c52a294d53c9a2af6e26f1598285fb1c65ca7fc44c9929353f3899a49b6cf3ae94f8681438f30e4b54e000d6006a9ad67ea8891e4bd21412929e2047ec43b098a74b5525e68a20807d51c259146fd01c3f9760087f3d98d25730ff6a8f9eddd8de8b998cd641f97a11c024d600db10c17f27a644c35768ad0dad99454b39fefb171efaf198a24566dae9a375d83818fe4c698ef7401fe4ef0ad711a28571b376c25ca54891a6aeee3294f00ec67423cee60076e5568e829564c830f470bf9db33c9b671a319b971da7dfe9265307a45918a9b584f481004fa43ce7b5e41547aa5eba43a3549f033ade6742ff51a40710097bc6d9b323e8b6da293a0a00daad9997306fbe4d3fb88930aa0c496d9b55af98d572d4a68fe98d525807aa20c6296147c214237dc2fa224148bab406ab8c195f3ecabc1c035bc6e638306725004051e34fb6bf0fc4c6ca42e8e319104d0946e491df4732b226714b55f883860491373154547069f87057874f79b063a95ca1a78c1b9afcb2fe8693b478c0227ae78d83b8d59b342ce29a3e4bf93d4fc9e56978d05638cb03848201559c844b0b3872e528b4649085d55c95a09cfb5754ddede52e61ff09490640a821adb261def71bd2af526ec39d9d3ffc04744ca3dc6d68b0330cfc9d7a5ef688b1965e4afb15cfa0a3aaec3c359e7eb771d31c503ca673f48c78ef5657d4c579e8c6a866a647e2b07688b1ea2dabcadc6cfb4cd9640d34d2391c09b4f46770918f1467b87d2a8c8e2ebd2e9e23183f0f3707619fe0c58ff70c96070ba66b892c2b51731f5d0aad0bbf355ebc4cc86d6bf09e529a2838a1a206b8b34d1a35b7604b6ac73a6deaee21a636e11379c4b6e336afb43b93ea44a949c131a04a8b9ba3a71849634e1f35313741975fd8baef96a7eed528f17906f2271047fb691d71442539e77377e6cc96383e8e8afcca7e3d434a50dc0c22b501b5dba6fcf2764ce6d43a07d85ac67f4a5cc8ac45006069d5591527cc84728c525074c84d98fcfd937a84df3cf7c7b366c2123847c60273f8934d5a73699ede047b3317b0a55455a70e7dc32aa695584c72066b0c918465b8613940d79a39fe4ddd027c9e388d6a4709600d9c03728197e0bc9e21e0c397fea9c3c2843be811ae4403ee4907a775f61ec3d9557bb10ad3680c47d43ef9e6b12380a9b6eb4259d5d3d15e003a1b78d20a720d1beca24bc9dd4cea03cb5849859faeedecfbc6dbf4939a17fbc2658e46f0db5a31408c501e9dd87ed4df9cd249db9b483bce268d4c3bf348bfe545cf6549fc1b1597948ac6cccd6189dc7667b48484d9bfe2734e5af99cc841f1ee3d07e9a4d203dac35e8c5b3014566d0e0162ab9ca6fec3cb7eea7119573fce174a565357f2a1a067b11dc09a8e662f94f7a2431200366db7e000bd9568e77d5e0f04be19bf9a0907f773ad1e0b5dcda57fc2601e512efb6152d1c3eccaeeeeee95bda54c49ca7a08a9089d08f265d4ae904d643e81d2183132a55eb830520fb7712eeea14da4545124fe945a3c05c39d93391622ba4ca98a7ef3305372094c10d5e008931177884c6986c5a419cd2846318a59f1ca1bf30579c3af132e2511416a010198b8f64d6400d921ae1f71b537c2f52c9b68afe16c08d7d4a72aa44c7d32c6b904d3940b842c32a5b66d9f284b12ae86a7ab4f1705b7a14c1df2067d6d8bfb1d413ea929eda66da778c39cd8d3d4bf52a64afa9a16862d2da20863803cde4abf89eb2f149ba093a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3566e9f934ad7d9e1e9f169b9848688fab5ca61f1f4f8b45c40414453c8670ab55c40415348680ae5a1d913f33a11fd9049e802fd09478e13ee7ceb3a38728f38b2166a4984350f91f354223a85a8cf5c551d9f2bcc0977bc39a3df09e42d70078ed36c8655eaeed4dd5f1a9c82633aa5de943ac572fb9ec0ddf4e42955c8da671f48fd4a3f8adff77ddf8781605ff1e39796e2e6f1b3944034ad866fc3fadadbf7193afe68d7019965e4ee1381d41fbd9ef133687484cf619e0b406619b98a3cff31e7fe7ef7d2cb013ef7dc556114409e207e0f48fdf17b1a2fb3469a7192b843f83637aaf0a5a723c4e10fb9518578c8cacff8de7ef69e00f2785f328763fa54c2392daaf0b54c0482e12321ee21fc2158dc6196a142428190fb7d384c87b88747892185e1938684a41f3284f4433ac4268791403d60834f4c4fa2278681f4cec1b814c7c9f02570ed535c8a1c9a7198f6f1145825b3df51faa5c928b3c8835e5c3b2d1522a19602a54f34a7510dd4f2868f1ffe93c8c4e954fb14a96de3fb64d2d127eb42dfd2198151f6d376ff5cd93f3ca6bcc8dd5d91fbb9f6c1b87d3a0aa545a80ec802af54a284905d01275f307b02e3322165e69b8420220659cac89f289032a59f2b1e36463954e3470965944e4c2cbcd8eeae986c3c0f19747fcc530b1e4fffa63bc374419325e1d186184776dadedfc452def8fea33b3bbd93c5d0d050efcca12125eefc1d9778bf773ef726f01984e1bb3a389bebbcefc423bd43e5c66156b39d45e14d2f9b7545c1db48c374eff48eed4479036380b674ff32fcd57f4e1e9eae4de4d2a014de85dfdb37d55a3f347d9e681d869a885c1c5e9b5665c7dabb619706f479eeb8b5f79e764e6118866118864142a5306ed7755dd7751de80292a4b0d60b7e5e47641bf4e1888080a24069c7c9dd54a69412b30273612d2a60632d1bd36a28f246671113d340e89f4073ce2a497c92e82bb868a1184f6d48c86d7340ee23be215829a423df17f7f3e2f6cb8d47de3072bd90a91794b4c43082898b8b5d81b5727f03359015b91f9362ae1aa8811a8836d006e4456c3c7db4f138cec6e344369edc3c4ea40c09f160189e2b373500f3e9a10ec262c2f47791f3050b0c7a05500ba805d440dc9582eb9a939dea5628cd1beb7a6fe107fe8c5ff9fe184f959ef4fdd2db81c474bd1aee3b0efc0edb600fe280cf7ddf7d4df75e57f3bd876db2ff5e7afe382c4fe3bf079fbba25773ef9bb08df635e15f6c633fc49dc82272220d11143fd15f0a69d8621004411004c10cf7e3e029ac7fc65333300cc3300cc3beff054fadf4ebf054899465599665d9f38043957d7f285ed14a18f7ff4493906b25d5c42b61240c56baa10dc680932ff2ce9976d9569e683e5dfca34ff3adb5d7c70f1cb4eee9ebf014f7f47950f772dc3c1396565f718fee077d1c681886611886e14a188661188661188661188621290cc3300cc3900ab9a06825d61d275a09a361b5ee3ce1842bcb28baa09242965138c193ada7669295247c7c724f926ef58f91cbb5cf204fe164444e0439a0533877854446918489540845a364143e5572ffa4d5d5a8d17bdc49a3da04b9df75747a7476fa64749ba8515e1d27a7876e9db965144e04e5a6d5a5d74afb445bc8b2ede50edb96fdb66ddbbb986db5629ba8691a26aa90dbc8f5f7fa3d84aa2f54a9843977b476f6ecdcb189bcab74edaf6ded8a0caebd4337fbd166d6f314a5486dd7bdcb2ed39a05698b2f95f2a7473d74a0b0076cdbbe662613d7556ab731a4f77d608d1578296d79aa2298f986b5d69f356c212451e93e80e10c0f492b342ae579f9e2ce8fe15666ccc9d19892e5871aab3bbffedd819b723dd2942ba7dc8c34e56a594eb9609632358940574895f4c5bdfed873174ea39773b87b39b2ec2ee4b0d973685e0e2dfb73989c8d61986318dd3eff1c8e1f5ca2eddbac28e8360a8f612d0c4734cf0257d334ebd1d7defb1dde731e878578afede01efc1d207d10fc1ddb831bf81d88df61c49829eed07ec3422c9e718ea3f8e626675f5ff368302be412833ff66e3b7bcf700df473c832874cdf3f7093a90b3799e2239bcc16d86aad1e8d57719c998e580cb806eca9cd9e1bed53ebc248f111edb7cd6ef5bbbf947a3348958bfff7dcbbe7c2cc4076747f71c54076780f629b1b95f71403d9f13d876d6e54df3bdec1fd868568cf715c377263a6f85a7f99477bc47befdd9bc1bd19bcb97df73bbae7b01024f3bbed392c84fb6ddbd1fdf63bb6ffb01024fedb8eee3f2c64fb0e479ebf43d35e7a3cbaf7b0900ebfc3cc981ddd6b5888f61db6453cd9d4ca53255b4b70a95073b999ee7798efe4e1c653db382c1da663b2068774e628a5ee59db4dc3d334714bde31fcb15abb973b74cf49b17e270e9101772fc58a47dbe228643581f9f2679c9b5d278354719c38e4068f536cfab5d69a82923b4e97a6a3a3a353755c3a3ad4070a9f1829d3d347c7dbc3be55ad8667ab4fd447da3ba70f8663e40dfa56083773d2a81a6513694ed726ff2ce5ec961c755dd794f49af267d9279d16155cdb59c3f03885728592e9d3776fbafa44ff87dc9a35963de48d1cdc7eda7f79dcbf087749f3b3eeccf064795dd73ed3f05c92058f8431516f755dd7755dd7bd7f0f7f1fee2fe8f094cbd7c4177b88fdbd84fd7978ca62ff1e9ee2b0bf0f4f6dfe3f3ca5699aa6699af63ce05069eff65e1bf0f33a17b26916cbb00c393c5328aab426cb2970c7d96a9df6f137f55c9ebce3fe530a257201d4fb4fcafc34eabe0402d2e130fe763a694569921ddf10e4e6d9832ca4f4a4af296124d893b0f5000172f291f039a12557b07210cf99e892bd94a29aad1310f15171de723a95a29a391bbe4e40d1bff5f5605e2157f0e7441f645761fef853d1bf3a94ec41590e9a75e8c4b04e396fbaadd992ad9907348abeff0b345b91cb99d819cbef2c4818fa4e9df53508c48ea931ecbf51752620cf1b790a204f14f29c9147afcb130787c14471873b73edee362dfb127ecd1c5f21fb8739ff7916cb9fec1388b67032d958a185cc9d1270834321733332e7c9d44c2765e6732f396ec653f3d4ef136773ce397dfad779ca934e20c809d44456c8e3cc19722223f712465318b97b4ec9fd134f6e0677a54fe3fcba2001a7e32bd6a4390e236b46dd2956fb31d995baa48eb97b754a29a5b4ba3b56ddddafbb74e92e3f1c9860aee002773e3685bad3b985148d042e9e292aebcef706484aa5478001923aa594b640294e22016320408a032c1100d5e165c588007c5de908ee3a1decf3e8364bf7da591d00c05a2e24a592145ef093f2fb82fbc20b7ea67b2df87ddff77ddf87258781d4dce7be3ef82e35df87e0db4c155813fef6f7396a3355a10e50ece10a3fc4381c86bad4bf0f6221482a06b203fcedeb53978a77dc0f1ffc0ddbdca8c010dbdca82e06c593c39888dc510efdb0d7b4c53df2fd57979a5ea9be19646bb5bac9dd8c0f39f47ddff77ddf375761188661188617fcacd7712cacbf2bb81bba55c65ebe48f7f7ef9cc2934931d9bdbf3fab7fd6c89fefeeee0e74922e1c276f8776c406d5701e9e1c76a9c1361d9e43f84675a39a69ae7a3bb8d76e54dd635e0df71ab6d19ec373688629c3546d98039ad261a84b8d7cfb16dbb8d08d4ac8be54f9cf21ed599e72c1b00eeeb797aa53ee4d6c1df7a7e1ba9f295eb9d727b3a6bb7be6d531a7eeeeeeeeeeeeeed487baaa28f1510dc540b18b29df649624dca7acda17094dd334ed65c634bf167f3f5ec9db7ba20d26fb98263d1e9587cdca9976a2064e0cc16e3fed173f2802ce34202650898249113f39cc92091141d99439505a3168a534135fbe4f537377c7820c263c3f6c3e9ca0806105114576f00495ca62824491931a2c9044346052248c2c94c040874ae40992140801020c97185288288212d4082b5ec0c2c158458e0441ca0a9200831c3228114f74a66071c11121f21881044688f0042647643f60f18385159d97c0bd914cf183d0122d9070533cf1e1e6f0800912828e70b46385163508263310c2073c48ea3fb8eb0035b1832576780571046b22fb5f1e649f220829b2e3d128b3b67a0fee4c8e74917d499432b2dbcc28134d2b0010e3a551d34d2e25420ce9c10d68a0d352790f4d8ce081d6c4889eec65d96427880b05c37ec37e9322056c41098a426bd8322f86896d8f6d18f6ddbbd0b9bd1860b099b55fadcca44b02b5b2156ba8f57b7a305417fb1e8dedec6fed63f6e7078a7f5625676fb3f0af46a4e4fa58480ac3f1ae782ecc56b6d9528c0bbd18a6b5efc180bdadd5657bfb2e74f6dccf787665677a8969e1859a1e36e080c32a22c98cf6ba4eb335602fefb71db1ef8f61ca0027bb7f663d18ec6773c514830703869b4ee9f56b6913d469810214e0821777ec29cdb8ada38d9a2f6b11aeb319b69aac1b82d8dc39734d33cfdcdda9bbc4562bb7d6ef1d67781617d341ca80e062abb980fe5ab12a72fdd20aeef823b693eb6398915c33203fb294373e8fc6803d05c1cc5aad981079c4746ab0dc07b3e2cc356a7d176b11afb2fa541fc77d5a1f5b6154e4d00d348fd84a27d72ec26b1d23aef348994622ef342acbbe7da751f2dd88f3489918b22c9b15cbe9daf56f0872a5c5236d1c40ec7316db5ac8d3e20c9337fa331610da945258c86aadf533c73a863656a9b7692c64ca610db390b18a72db71a363ccdd63bc858935689f43f66da4d8c78c38f2087ea6793fb1dfdc3d8d859c35a669f8007385cc33f7f798b900ff0c8fd5fd7bfaa3d5de710dee1f1ee9b45eab9482b98865cc1d9b62cc5ca13e4645dfc47a80b98095ecf5b36ea49ee10338f6f5eb18a4b10d8fb31ee000d4a3a92c64eb982831779ab18a0f3057a07ee34d4f094d900821b122af5699f3cee9c597fbbab1e0fd73fc91e7bf66ca9af6da5bad81ccdbcfbd7cef61790cb9a3049af8053cd3a7abf2a7e1879491f9e74ac5610f8f924af6559e6921ee28812491397190f9430671d5288fb2f7a34f31228e761cb6ed9f4e7d9affe2290026b8738280668b4f7d3a4deeadd5b8ff0f77789452368c0347cc90c7b0d0a8d91ea4f37c205e4619659491e7fcd9dd38c8d4e1b6e509777b1d3c6868b187e6e4d127ef1f8d9a1b76c16a7a34cae220336798069b59ca4a9fae09893f0f1d3537dd04b1b03185b81ea039795295ecf7205c6baddc14e27680e664ba6934c7532ba4d2cace0e6ab488a5951c4f75f7259c435ac9c9bdd3b58852e522baf8bbfc8daa86e8e26fe36f588efa645ab588537573b9971ecbab5492521aea13185483e6784a07ce90212550c8619ae4e52879214fa77e923743c90b09d30f722161dabbecba978366528e9a49cfd54ef30a70825bfa9294285e8e12150c92729484301834c354d978aebb9bcbfdf4585e7d92a1e56d7c4dcbdbb0a95163e3bf860d1174114b2de116d77fe45e3a6c7c4b90a76cbc1ca6ff7b10087c16ec1e0d3cbeb897a766943009efd8c0a5a1917b95843e71a4394479e45eb944c4f2ca6df29474ec37cd05c3de622dd8831c06fb2c2763ef475cb7b7c57fa66d804958cf64dfda2faecc32ab6c90b52a3bcea139d44574e7ac58f9d342cc8fb7f69f855ec1256c2f1e6f760e9fc616b42478c5b9b646098c3b873850ecdcbdbbcb3c873c25c19f3f79cef4697a286e59f7a0d881e0cf74078260178661f89da875f9ed7b1e9e4ce40d1cfa74f31cb23f731ae5fd68279146756f47d287cf71cf81b857197c4e1cb99d560e42ab9b9d990cf6c8e03bf7cadc8361986530cb1cd670901a729ce46c446f1a296f80406cb2b77de701f1ec61dba74d94f6c5de78f32be202daa6699aa5d3892e6b9307599b226b55a3dad47eaa40a6a69c3acc947c0d0c2165ec6b9f0129d3dfa244d63417640d05263019c931b2f6728e128cacd917dc99dd7b0f75b8a30cea115a71bf2fc1257de94719744b70c1bfdf7fcbb8a30c0a7fa63731f399d5b59f3d7d130fb10232355b5aa4dc36f760d87ec3da14d71f03e97ef362f0fef3b03605c8b9744f7aec4ba24b8775947e05888b0ce193be26ecde06fbf03b5c9ff433485509e390b0b558b6c14818edbbdf3c3c8a59ccb9b70fb8c8103ef83bc29afae00bc13ec43bc0bfd8e430dadb299747a34c4f438f46f56b2779433b654ddb78489999b50f814c4995d643d64890b50ddf3067b47f40a7a44a839235e9246bcfcd0a48186df290373419943579636e9b866bb02cacbf22ba8892039065145d38913950be60e214fae3295b246e945b037d7f5a437db72148ae18d5f2c4a3a535d0cfb82e5318e45c6114b2c238027a93a996b1a7ef4d84ebd14c45fbd47361fbee29f8e1fdf11486df9f74f4abc08386fe0d746aeab0c342a3e44f149ddc8fe347492bf787df95fed85c80e4beae7af213659fb80fcb7ba4f45374c9547401b10b94ce39277031d8203ef5498263dcfae3897a34474a3fbd182e3e02be27badc9ff9ba5c6c52d950c28dd1c2b85402401c889751469e9e0df1a54fff4c7d6a2b6ec5d2a4c91b7305ff29627305cfd8886978b452ba8c617ef6193e92f32a928d866997fa34576cea53e65ef7fd4aa26f0a5723eb9fdc9f24f72f59c2ca63b35a2ea9e227b713b9e5921f29b9bf8bb491dc4ef29825c9edef38cb6812d8c4fc93f2065d89cd125ba713d0cf614197ae26cb11776c56ebac9ad5a8228d9a333bc10532593cd94aa8d5a3b3ea55cb8f96e5f68e9f331ecb93adec5d0979ca87bd9850cb532f682dace7311d4f3da623579dd140c2f477c644ee6f719ed1f65c9fd6e79ccbcafd249d9c207b9be87be8d295b52eba72b9dca1344cbfc4526ca5a244151e4fd5309a459970fb7b9547ba42414009388d5a82c52b07e9fc019a670881318a64082861d5a8ce69946c62c52acb0c01a22752b2cc9f8b2ef3e50f1950b27c08286135b3e39c09991a5441a733dddd29a59d8e9dd4e4ee6e3ba34ea95377e92e69a5d42da5d8a93bc5ac9452b240f1acddab95a69f3bbf9b4ea9b36471670a5adcf99252777159cd12269b3945e8b61f671272f6e36442ceb29c9c654739fb39850d260ae6642265829032fd42d8c28a9c45314e1c986630b39773b22067de3857d3b40f62ca1a36f529934439fbd902e9e32924f491c820d3b22cbbbf7367f64bc635b1c227777b72b9efef5e70fbbb3e75d33bc11d674e75cf48e105ab681ae2668fadee4442a64409d3834cc1b480780ca90b0c8ff9b0933decc2009c56dede3526d73b4c0026d77f7b26b703d084eb5b765a725dcef469c9ed6f77927b40b6d6f028da1b666b4f63df4a1951cb3ed3c2161126b339fb3973e48dec494d5c3a46b6ad8f0b8ebecc255278c1cfebb84db31956a9f78b0ae39d824a2ee2257797fb9b8cdccf45994a5c454c7ee313f4012767bb7b97eb7eee4c1e6b3b1d9e8863aef71db6e9de6bdde7b08df717cfd820b1b1c981e3388ee338eebb6f9383f7dce740fa8eb3b2fbf1761cc7711cc771a4aeebbaaeeb3a0f4bd5fdf1437c2df889993480e5a4d087024ebe8cbe2327a5720033b8728992a1bcfde7ad7bda3db59db51e0d36a794f1be3e9d767613a5699bfc23e15791e33aaea785a7e9a42fbff71e141da74fdda3b3a67d4ae5d4b918c41fe67ec35327c76b1bf79af682ccdbf6339d03e8870f4ed616ad47d3d599392ff32440bf7b2efb8183f4a9bb53dfd0e10c0399b9ce225184a40c516998feeeedeca1a6d2445da55f4cdcd15963f6de770dd9775226082963bf9ff33e13bfee6df7d65afbddcff4971521ce9d3ef58833c9f471987e3b8df4a9bd4efa8d3779ea5c1fb5479fba73c713c877c00675381f9f6c28ab92fd4091b5322a992b83929393c3cd9e24a81075d72a3d85613883a261fa3327d98f106ed3993d21331fcd76397d45175c094507994f068594a139cb22ab62c9248294699309c3a65984dc79bcc944c8fd994f9760c4e1e3e3e3b3d2c1c9a4106554b22a95283baa4459942249f4f0542293b5f7723b1950d6c2e1a90c0713a63f8a1615b9332cb227329f9ccc27f3c97c3e22500bb7b7ddf625ca1c289590e54b39248441c176b0288d9a8f3969144b9e8fb9a2e4f9580bf3c17a301eac8846d5f8f9980e96e323658e5c3dd5081186d3a857a35aaa346a06d11443424115a8fe34caf4f36bab26d1a89d46d1f8f9b588aae344cda9ab179546cdf819e429a9129a7f1b25803c3f4627cf67a1515d9e8fa3857ec00bf379d0d0c3c70f1c563947f2bcac46d52245340adbe191327226993eb3355d1368064da130f20cf3a432abcc57af3aa789346afbf9cd4ac1082318c1c111562b20a29adf3b8daa43e4f9cdd33deda3449edf50703ff31ba8835aa8a5f4501379eae605aea12176b4e8a2c912aa5953b0ca612dc9f3bd48a3741af51561a451204f8ffb38148dba3fdf5bee72200f72211f32ca93469eef448d0a7fbe57f1a3469156399455a23b9ebab941134de004c105629c400a15ed994f7d1a35803c9fb658793efd695429cfa7ae46adfc7cea84426914cdf35dbe8647e352a3c6b7783435bce54d1e4d8be9593c1a53b3281183ccf2343c1a164be36778343466fc8a4733a357bee4d1ac949ee4d19450c8a4b7a4ef48350042267de8d1906ef8d7a309ef831ecd05c1ff3c1af07bcfa3f9bc6f2953b3f79d47e3b90172f784dc3de7d174dc6f1e0db7e9d0a8ac2171226b760154879c3de6d16499360a01197bbb45c6803266245fba92044eced2a39944d9659676c071a394524e93b3f828a594a2cd52a6eadbcc6166e4d1bdae60a58c6443ed6e20f7759ed77d1cb85d2db4a4ac84add4199486b348c9b97b4bd72da61a5f0ef3c6fb6bc2c9974d05779c58f6ee82e22f211d2e3b1de070b4dbc409850f8f8d8b0c53153ee9495888545d87f1683c1accd33c1afb541ca7d66d5ce5a8735c4ff97de34dceaa172d6079e20548aca009366802836c082b92c074260005d1125218c9416b490a749e18010681001228c9428826a48ce1842a544518551c754bf410451431709002a12658eefa810a07c50d0e8e6832c6132484f052e28712d02638c0842c8a18a104082a886049806082a1c007a01e9ad0600b1ec4804856e4c90d9e40b192651323a4804bfc6ca7d65a6b411004411004bfeffbbeeffbecd33fc5e0f094f694d68b4b98fe0b3a7894aa10db61cd6da2953096b6676464646464646464646464646464646464646464646464646464646464f47abd5eafd7ebf57abd5eafd7ebf57abd5eafd7ebf57abd5eafa2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2221e6a976f672a2a2ab2a2fa155d880eb913e78ed669c56cadd5ebecb4459de7799094c1b9e30f759247cad4efbf1327a8855c4aa3ba2271abb7f5bddc0cc376596b943b7f74a1dcf431d127c93ec9e21c32201512176dae48dc91723d1e1496ce0e4f8f4f2b6895b333b4ca61e95cd39f625cbeec35fde934f442a6a00b645d31384e317f32fd35dd1c59a506d5de19aa7368f6bcfc255bb5ca1d6d952a9fef81716a56b3a48c0c546a433e5a906435e50b282b29aa5e39917bcb1bd06ab51aa26a16cbd63c1182d10ab4a8a2881157a3681220a0dc3f278fa74e5ec3a347bf8f460d20f7ffd822f70769d497a5646be2dc9060889e1c4cf9f9e10819a82813476c6e93bfdca460881d642146098804d5406583dc3fc384dcff80467115d8518209b8c8820a1e22a8e812b9ff2ac9fd2b5e6c91dd4990fd49f62facc8ee24fb1088c8fe2f8db2914f59ca05cc3268b66679a144d69e364accda671e8dd6fa8162ce9d227d6a96e78374192591c766e129d946912d6a852da258a9469d667591d6699d2510b55463ebb09a258574c858161943918472966593a77498aac835d700f0e08e27ffd36ab5d2a1e5d65326873109c187cc42a6d459dad11d4dd9f4f3fffb3447d5fcd7216fcc6f96bbdc27cf395fca39e79cfdcad357797a0e4ba759d8c4e1783ad0d617a8da89dd3ed57777cf6aa518ad9562ef5e6b7dc72aa5b58a29986aad9462d5b1ae6a36d344eb305d2b7529ebcbfa3548afd9ac95e65abd2ca4a892e592164f8ec97249145132144940f161dd15473a471f79d4de0653be9f7703f8218da6690f9e44a37baf0bf5c7209d2f377699a3d93edbeef6a12873f85da7a80a7cf9dc7dcda3b92f3d172eee3c2577668d13ef4bf0de6b83c97a34e1839c77e17dc98935739bf8816fedf67d1e68677ab42e208ea18618fcfb9f7884845dae5461e2f892b5e764892b95e8b7d227ec6f9fb09fe98f05d7f669bca138330802b10f3e178a9a153b7f6066d3901b248fdfdbd0e5fb77a551e0636f6a94a5a25cc9f2e2ae4fb2d3e2be9cfeae986c7cc69e23c27d27f6bccf5decf282ccf773c87cb14bf83560fbf7ed879af8cd0c7e285ed1f64993def760a78923cddc0af692b11f55e0307db7368bf1a614f1e92e5dce39e74fb5f65e93e95f070e212ef693a8222153528bd315dfc4d44afa892564d0821f73c8872164cc2a18b67dff8fe9cac9c991443312480665f323e2e44b276597ca3ea5bb0fec7ff47bbf8f1fffc3061b7d7ad34669adb4f68a479f72a5e134fd2956f224288b592a79922453ac2bed707de0d0a34fd98646d177da998a92861693a73a2073481baa543c75266b16e993ffe7c41d65100f1a2610f2867f8f1e7dcac11d2710f9010d440a3ab8fdf329e6d1a70ac8d44c0e79f2cf91dd4fd4870d375402f0dcd1946968ef88f594c53e1cc61fc3d75e4b4f7dc2f0908fdba7ce6297527b694c6bc67d0b909505654139453229ab289950f622920d6555a60c0a92d2891e1e1e1e204a79a2581e20589b4de1c9a8f004b9a7b2cc8b8c25abf2238a949199100f4e242888064141411eb46304a788a3244e803297abd6169150175f8031867311141414c4423257d65a6b4920c771a0f861bdaacf21b16f739f87c350d25fd1860728866fc5b1067cef6b3c5b03be876d74380cb5a3fd9af0bff0a557e33d09dbcc785ff37d886d5ef8194caeed212464dae26e3b9476a0f17687197f775879d30c2677c3a3fdae87749f80cd524512a5cad610c4f311efe72b6b228d3bc3ae4818e9ed4841e5e1972a10e782fffd4cabec4a6bcf08d6bed5feca94f62699d2f06833d1fd2c934c4912469225243935cac15abf0eac75d3304c3bfd0b3ec1d53efcd2278fc13206731b3ebd0fb13e48189973132930e5246448183a9ef0f7c92b3ec1945e7f2c1a4ffa406e7adc5b1b79cef1254f15f264e14ba5f0630b57a4f1562cfd26ae7c8783c496de45c441b2ad3c8b8883e49b31a37b1a7f4b349e4483c68d99f1f7bfe7428fe623cdf866a8f092bb3ead3cf71b69655be1b8d2736f2dc95a8d929e45044027ceec22e220e9c04741c44172496f637b2e050ef468bed217e220fde7d15c12e9925808f3f77d7fbdef4bdf77baefd17425b0036d7c9f39bb9130c9cbb16d96d2cc75878258e36d882617b1e53b1c241ef75c8df91e0d37273763b86d5bd9666eb1d684c3f23cbc8a0523e1bec66657384ea33f3d17b0cfc47ecc7f54481ab4b473d06e66b4d79a135cb95c2f8b0385c809d0d051909476f79ededf747badbcd1165b1e9e9e4eac265359139775815e5c1e27514c50ae8b126165489829f1c97439913235f7675518e009304544c88290fbe5ccb4c89cbb5c49e4cc95b93257cd5c2c1f5b8485c322c2caa824e9eebf2853d963051800e68a2618d62304c4c353191558087531f405516de2e271f1f8905371b956386851912f9752ca9f3f9d3ac9d99325f6ad504aa0975228b7985868d878f931383c5523058097ff82267b76add5569ac45fb3d75472121edf3fc47efdf3e97cc3e39d91b33d9a7ee9e18e93e594d68e06a3b5568fc63b4786564d2187f167717201204e15165f0c254cfd14c4160953abedb4d90d0051aa6e50106d882e620dd12461aa565b44130b0dd77ae4fad37f4299407df2c902320de18e93357d30ccc7b6efc8c68d2ad2289d6e95faeb829bdf54da17adf22385fe04659396d3ddee45d02d885a2b86cd253e49586bb56d49505ee2f2589e25154c8898a85832f451f153b3a482490d4c5430d90199b4729654fc7891a95872946549c5922a2f524652c184896c02bbeffb3e29829349144a051320a9dd2702a31da8644d3775410b11cd4800000ab314002030140c8844c240302c1e16cdbadc0114000c849c466e529b0ac33cc6619442c8180200210400003000024232b70168016b10c470ce649f3aa5361e6a625438084f4ca2ed3ffddc5cd6707d5fe25fb815ea0cca09a3a4f3066238639cee2f6e3c9c519e78adebca485684c570626647e579a69d8fd69309c1c545d71d2cc93f4f8115fc7b03eee63886d31de431c3c06eb8a4485d5cfdb381141d3ccdac09acc00c9c2c026322797575076a0215c5d914069da9de4e7a98232f3df5469418a5064045ba8a2937883b1cbc00b938a2809826283d6135d8d0130d31cd507ac76a4d45cf45fc382ec62f7bdd7cea6ce9d8d54811dd7cf0e125c9910ee2a21e04d5776bf47be1914039269ee0edd88acd1a3d112c4332b271b4c500a207b0e8fa06e0c4e5d5db4b896bdb27965bcf5f2ba5edda9f082621e7fbc37f1366d90d325109d9cf1c92dcfe7f441ee982c87236cfdf522acc5306de15ad845be54980e20ec548fc9d59d593ba1b62886e68e6c08aee1dad950373717ee4f8ace9265d94071204777406e3cb698d5edabb9120714153670b74f7cc9ae2a078971b52d17c6470add04d702b174448dde88cc4cfd1928ed43b4242e38aa69ed6e8ce99b5f5416149deb0aa7b6da8cdce62bdaa84b125fe18962d517d5b6902b0421bbfe55d9ba7d8ceec6570dcf0f84b5a835eef7abdb81eb96c535b0ba432e32cfd35e855abc193a23c39f601c0745b0eaab4c963c7c50f89ce346be802d003e150d19289cb89ec439cd84f5f79b60b3a1156dcab1115bfc9da057621c52919025069fd0fe50a1235093ba0a9cb5ef38af58b46b81678b5b719ff1cf860593153327e3bc5edc13a0ea60cbf7b305480212b8e1bae609959ab66f57fc5c2a04972f26b5725f28de885806b4834894b64149a22f42fa5f0ad6527e3371fb766efb82eb558dc236bcb0af8b4511c1d2d56ce060a51f249a3b52d4b50d36e5c02f1576518699578f68ae568a5e6dd81a9df184da4c630b034cb441278098d924c09927a89f28dac7daaf766e5b9073ea24cb5f89ffa6df22adc32ec05a2e0fb05cdebd41d1dd6de499cc8e8d24c6290062b82a7612548621b9c90089c27d4536d2d68692216277fc6eb28826d879323813f110e276589a9bfa5679073aa930eb18d0aef10be740a07a2008aad9bda81945059444449b29ea0c2a820a22036d83885e8a6e68aee35de852a71cacf636494a003077ab3a07441233474532c45a515723f7353a906745118fa73e239550e0601090306201100ba2911b078d80128363e3d47c592a9258a5e35f5c87dd3efe2dce298e382aa3b01fca60cace43c027018375c2637bfa921aee4c420789df891e937651ee84aced9641bdfcad35689301a7086f1f33789fda666b65dc9a9c6a0a72d8da34cf5be184513ed374571c3fffda654235772c467c3898a5e07f04e4ea1381e12c392044898aa2a04f4552a601da9427b28954a597e85600683203985251df592768cbe3f406d94fe88f89642840d4a10ab52246001366aca8efc821c624ae9d145cfccaf870560abf82c75c5079a89ca2bda401ff7f858cf36cbd580c28d3dd9a8a5340fe4b55b19a7b32eddafd8fd45b752e7940dcb38cfeecd64a5539551047b906952156e376b2642150b84836239df3c43e772b4d359d59101d369099d3372d32e9e256c0ee386ddde1d4a409aa65bb9a010d257e7414f708be403bb44d123f527378989758ca219906a8e9a21207b373404565480379aa72f231d79a598bd5dd920598086a5facfef4a9ad12e31b2c595e215ee267c90b888bb066552c04673ee15b81a0922df8b72cacf2e16e3800b99789aed1b850327597bce663f70e3256f61b6d84d8505c9f171191e3ad9af7507a9bc2727a0e1067e198881f10a792d09595a7a3cfcad01f2bd65060b56afd0f2202643ed8b75db07aa0b38bcd61bf1556b17b98e568144f34e8f1c5f44fe63170ffb5b99d12a9670e056863628e86e53ebfa9e8414a2829b53ffd5061e1a19e6c34482c3bd2317eec1428f50b3dd661d157762ab1876fe1cb68620fab0e4f496946f8c83a73084b3f6fd05d06225b958d70d16756f6ec615c3890728a0bd59a966f269c3746e15471105f72f622d4cd08e406cd0dcccd530b365b169fddafc6a005914c4fec1e6b1fdd7d8ffd62dc689f320879a926940ed1cc0912020a22fe2b006365b5dc41f1231af2811c8442dc61b7c1a249f0ccf887473d7e5107acdda8324623921e6976efa20f70095ce937335490d51b4efd1a08f6dfe5124710ae0116767cf10efb80b8278f45a8ccb293937ff9df2390de0a06360b015c12818a4667ad0fd6b1b230ddd7dca4d31bd4c808aa0bfcfbe894055a31eec10bfe9a88691ac6247b3d71c7c1cff4c0d831da8c0909fca0cb19969acb1ccf453b82efb1fd8e4a0eef3fef605d5a01ef6acc5add33c856b03d8620824d7648df73a975f3ab178ca2ab5709d3ad88eb26f0ddd1f4e82f1def6c1bea9f3d2b516a9f5bac0767b873c6f8ead478f843376ff163c3503a86e941a6431547ef7b4ca02448678608b4e740e6007b53feb7ccd566e4bbaf39feee57911481f3ead1a5e218111856633500a577dfe242988e1fc2f5d92e9dddff45c6c9aee47d49649230c96306fc14c4fa15311de4adab437b084704d83d1288b965b9b37f5d8ead051629f940c46a68d425771a1e2676cec2b931d17acb37b2d605292574696490b2980333c113ab678cbf31569415f5fd196b6c80275b321151ab4a30aa36e0e41fdc4c347de95b133eddf05190386b82f831889f75bb007c1a582cdd4d2fd23cadc1f9f8489a786fdda837c16b49949b1db495719713746148252d04a408593853491dddcd343a18168276457d0126b7498094f8591ad55524848cb130718770712f1774c237959c09242eec2c54f807c6bfeb8e6a60d7868063c6155fd083fb2e7e22e8b2cb9e96a43c306bd267a692445d22a35f36650d8cbbfc10a1451f16b0259a43a7ccdfef153485d03b0521f724cd42b92a6a001df8a63123b23db55abd235c30cd9b168acc9efe116e24e21175049e1907230495427f2d96483537fb0565856df48bf25b34dce27b023f56c1155467e93c8b3e1b83a8fbd1e11ac655dfb05e9f02d11d86c55df0960dc78a2e290f128d47605a83c4ee72dd7277b9fd0bde78518c24a71e4d8f43638d40dc7a111f784c63c015b208450317cb362efe89ca485fb290fef23b006d99a913a4bea27b21a31999977f8354c5afb18ce4a418411528003cb418424a5298e333a24e61a12bc7b8c5cb913185d7457521835b11745330912864c8acd0321153e662697101d10434277b504b47eb46768cbf235b1bbb2be49ff648a680706607efd37c01ee73a31ff8869bbbeeb82b814bc6ce1c2e156384679d02f77e7d171456d176fee8e4a1c75add5dc579e8c3b411fef96423ea296be6bf1271f5effc24528fef03a38e94346ddcf1b344480a88eb41f3b99984029437027194f5e21a2d0e171baed90c2cb39c37248a245314a0f4562595f2bc99b273d83944c70f56f832ea3bbdeb4ffcbc4155bb6c50d25d9af16d8c359a0134b2bd0c0b8a8b4b73c5eb59f03f23a0efdd1e884bd589ac646279e6a8c282ed41ba5360e5c858c8edc2841d1005309ac64349a0d71701a800a30d6cdf3059dcae3e6332c92b0c9c4d109b53e873b8faf911d9d2aab886699a4e0cb39cff39a0094410c0a6fee289d8e03b4934e483b752e6aa79c61ed243ed84ef5a36f3df63e2b4714e51ccd31f647dc73fc8b0053ad63259fc91394eedc0e4d21244578e7c9aad28b0b3a68559d4d26a50fca573ebdd8e434bb19ec30fbbf642dcc8426e2cce4c15f3c52845b8b0150b258705d14495ec3a5b006a1cc6aca1bf183124fd88927c3b953822e157b04b1cd57d396c65f0c3c028cb20469327779088d623112e58771cb57b5ca30c8cbc2fc82355e13a4e88e7848ae10d6c49d7e6e0b600fc3a568ac516dfa8df8a1bbe31bf2e2a353b960f08417d5d0087be193a30e94ffde325e66fece024458193cb6e3c7f286b3d4e8e1de1ba7c09b5a5f5808a0c03e63250f5e0043704abe2bcf152b0009b52baf712732d0bc505aecac308a69b17f008a5c05d79d7a760411a4482571c1fd591be1e07362780968469c53cb23b411e2374034dd21083ffd925b2368cbabacfe9b92adc8f25b25d8fd2511eb5b5a524f4ce5f039e7fa4ccca02f7d0616683637926a824b9057c734334a184484b073ac4bfbb1738a353c0a3613f52a2c77816daf631127d9fc6078bdf81340b29712b46b9911402104682a928803928c0f9080efbb9ecc7ba1a4e09772a1d1e378b5afa5d258f06d16a11d9029f0b52626ca289f96a31eb6ab891314d4708d72cad41f390b7197e48af9f190e435ca24f6e8bf71d6eae1b38d5fc77e438bbe460952752bc6354aa64168950f5ba3bc6c89b5de88803daa532800bf6edbe81558a6d628f1768dd22538f85491f5c312855aa04701e60bbfbe3e4768cbbecb65bc2282be50b6b8069ea16177ab7a9a62c3e9928a9b4d7518c90a84e000d63b23a78139f429f0ea21d0ef8a85de10a77cdae284c266cc268fe2e02adc42c9646f4f40f91440b6a46b75d00de8a9b10f28a781fb6261fc1157e883e9648db6ce83d789097ad7804a06c8ac6e8773a403750f17c0a0ce95e6acb50ad27742663c0d4e758e15e9b56367fbf46786d3ecd8bbd4b0fa3fae4ec075ead430d6c2339942aa4c1ecf6ba573d08683bf823699caaee829591119725542b0532ccdc4a3023c69350407fdd12292c185b0bc8fbf7b0d86b808cb15aca7b665080863886e376df5e8c290a16df68cda028308ab9bb325cb090c1218137fa183cf5c0ae561be6848ace84b613ce4408ff9f1289c2f883bfe6380e9f4cf8f117febf378d6ef39b4b436947f7194a4d4129d8ba54bfbae20a61f39c3dd4a2688e0c34863040fa127bb1a267c6e09503eaa55ad8c20e2cf613799ca3b9ddf5087e2a6c0807cf6389e529a615540bbce507741a35a158d7a78a0a38a80f8185617ad07307bca30ca2c65b255786336b82ad0fa158226af5694bcab9f6e943f37b07a566a2f108cd5a682fe9434b51a222931d6e641357d989ff04fabbea2c96a39ab3374f1f9d03de17d402790974fde72c4c9723b33b8a310922ea8c2d5165821080cc99357179758b2cc46b42f60599b117fc49f82a96eb5497c442bfa138fa9acd9ab2cdb06bde3b147c01d80cf06ec68e79ea0d610dfa1068d6c70007c9bc4571da297bf0f1ff9f876e8687b4fe017f2493eef7c754a044a5d97744568ad22dc525cc582be612a8d0402da4b50b691823ae0bc50fcfc4287660c6264c275918f15eef762856f578fa0046510c035f5e87e491963f3aed3e5415e62d561e4cbb292767a43dd57a56d910f89cdaeb3f9bc40271b3a34700df13cc0101206bc3fdd93c3ec63536ae708391b3c749304426e3d1da6038a5ec4ec7b1f2c386241e4411644d2bd6004dca0d4c21e386d45d85f53a881beb5b17812c9ebe57dcc63fe00ee21ddbcf48de05e92cdfb6f44153ebbbe73ab94ee81294d1782e60620df3e4c92158af27ec8e6c15ed9cc33574a2b4e4277228f3dee6c6b8ee0332ef49807b442c45a144699625f59399479decc906cb90dda973411712d5718b40b1e9e647f2e7411c8e8a5ef7c29cac34391cb3a4fec69e2c02ca73b9c2355d95e01f43b97455b9452c67642c80b9e298b0dffd022286eb9f2e4da7166a9fbdc4cb196608e6961be9879a7d1ddb71d9ed4b862db5ef59870c35769be25b710b536e557156f5582284c6e0ea48ace945e86e2de3c1798a5f805d7728e516c4ff312dc32a442e1cb08f1f9d54232f6648bc21c93e6e1d94a9a97972eef77c2656363263ebf8c85fb1e6e9ebc867a64b3e2b92eb762feff454c03dcfac8a204c82b90342f4d9cc38a38c55dbd698600b5e06de80bf3556a293862fe72f67aa10b4e0380425a20a0d6b7617cf9b2d9ff54a1d4b4c265ab273723bf205a20ead09c84de474c7917940472bdf8cd671041fa141a9207808c019a837d43d60dd699aa30c71f1d093183e0e6aaf678d1044fc69f8099d39da2e3be16d00ea3281ac69111a2761a976ba26ac1c56aa1459c4b4fd37e14630d88b66b64fba9d0390925a32cb1e3625dd9c843aff57c45d87605fc6bd2763005b470bec61c2a5ca76cfd0455d6fad2daf937a895b2a37d198295d17bb9df1d0c2a8909806930d444c37b6af04b7f04b5b53961e1f0e8bb27b3d9bf43d1b658215550031737065b9fe0e83187e59002fb0bc5aa6dbd67a6250ed96b193455ecc78ca0d899d33b322e240a0cdc3e03caa6b23a40fd55d8fe78096eb1288d58626bd2140ee4d7961f5623d8d480d0c67f68e502f1db3d10a948c88736f277ae7db9d3d3bb523905cba970254ccc39379d1945cb55ffe21bd493374c23efcdd51a9271c827e8c720b58259af7ef657ecdd4fdce4d4c7b521491474cd19ebdc2e618bf5aceb51a54b9b0dbf9a7f62d8153a1f4a5c6024906c360cf64ff29b0a7188145668f1a8e3f060c81ad09514027945ab6993e44179e1f83889066bc178cbfa899270851cc4afc75bb223605a12ac65786a4a448ca47977ba8c3b3c39b88c1488df8aba208b6a12ae6b92c757468ca0590ced0a6e4a8379c9cc304c18fdeff8f406826fc69841d0e5200bba20d45f0ead19893a4a72aea1de5287186e5669922d908387588544f5fa7918953478502db4021501834c05d4a2993cb53c120c54773cdbb74eeabc701ae976ad44e1c9640b20ba465ace83ddc00933679942cfa82c1aa571e6d292d49cfff80f8c34f8679f67b965f59a9c729c3c334e76b793acd0fbaff7a40cc100fe01c20689dc470609ec047ed420ec5e35ebf0e5572228878f6ee2958bd1d0c6d5512b095baaa131e20c6ee4b6f77b32c16d6006fee0d7f61d3ad686fbe9401013391a697ab900d0712c6053013489591d2ff72acd2cea40776128814aeef219e4a9e5ad2334ef1146257cf4f0af8744c2b5d7dc09387dcf009e80bbc570fddd3dfbad6c499ad651baa76c107871020e109275816909ca674ce506d2991c88b4e2fb6442db6a0ad5e1c2a7016bdf33f16495dd21b68e5fad4705c9ec89e96d4597c11df8525bc0b7c04c2f6207d6c14700da7713891ff3e4ac52c96521b7fa892f22f6c7e268fedba44ea517b82083fe5778bd527c7a22d7f5dffa15a969609c4d9d246b99525888f0f2f2b042432681e5dd642cef056ee5dbf07809db9a71e0900ff5f6aec65e42d9686910d7652328be84e33d357f32f34a4e2e080089294318b4a4c24b5ec62e627d98deb2d39224d60edc20b6e934adfd6170b060a09a0b7e6be7ceec163fd295309d58a396ee57ea2143be6b145806256a76bd909c44355a24d6ae9676a6ffd346515fa7edbafed67eb0cab3f21c6ba7f65d320d90d3d80ae3ac42ffe7a3ba424a8d11f666ec699943c7a23c1fdbb9b421a1d322a1caa2816128a6528da86269bb36948802b9919bc4b6cc192022e2f5ddccda497902e985810112885e03223ccbeeb225d3412ddb3fae9546d054f4bd750c38330727ca24f375a491b4599ea076593afa3da5a1d8aaa4d39c062550a689c3730fb3e35c8d7de1022470ed0e1c945e571b9c29e3c3d503a21c769b51e88ab2d2b5852869cc9d4c94db8ea4ba0f35bae5d3df6b31842e9720d73d5c6c668d85d932e5fdb209357e054b5b3a0bd1f03d5d6367f82f255823259e81822d8be2ccba1c62c9f5166b865c67732b194dde27ef8fc094c2ae8e81cbb9c11edfdd37275294a71c72bb15e41e04636ca133d72e697af3e8d9c96fd9ed520708723118debc75d9d491a1f96dae29d981e2a6a2ff67ab526e3af98326fc814c402f064570e8716a7a8b25c3843711901b4d853466b91506439300c93c29bb58fdb7404c00f8fc61b07e0b4d743218d2fd1e9573a31a6831d67af528bb1ecb23dcc4b049c9aa511bc5f40e98cdf35e86a3fc329daa01bbbe0440c658e6ac7a6b48fe40af50ae53219a61bce2952c9cc1956105e2678808b2f996d001d8efb85c5f96171543c0c7e7a73aac5c88551d2c4b6af14c00cdf867bfc2aef08c611a384823849afa689aadf5a579e5078cbbe8764c890f9f04e99d5cb362d095dd17701fa695cf8115a54e3f074b33d571ca2de7bcc622f09bd3bdb4cbcfd07545caf3f87af6da663877e2d50a599fbe60831cd12380c6de97a13a3cb575fa5f566e5f9215c5ecb0ef77cdf603b12be0068cd9e16b334a5a5393002decd8fad4ca257452cc0de6fdcef2f0bbd4cdb162c2396313c81220cd4588eb024a94ee2d788d6168de7398fb70760a03e6734cacec36c294ea5c345499d3c792bc08c3aa75355de67455eb7ba9d0340b138bf1e75b6a72d7bf048cae0636e7c02da30fa7aec4f43b4f9cad35c2c472b507793b8ae902c839debcafb4eda46f574d51625f51c8bbae29209410643589afda7b13bc6b33c347feccbc32b6944ba7334d29672e2a585eee1fab3907498613ad9872bd0023e71cb1960dde403a02b6ef83c3a6bd3201cb619bd1fb493cb872ad0e457e29a36121d7d1d9d990ae2b6876d4fe92c3641a79a62c79c4a7047f86e65477652e04b3596526aba2b1dc96d0f2e0de8f030295082d6fa2245522e244bf3a002e87757fad95cda44f789e13ad951fc4d9baa3fe29fa93f929acac932af5ba1b83a25ee488293c17bc4e6f8a6f76c964a51ff6fcc53a1f59f38df6a6c661f20bdd24752931e57faa5033330d56ecb4744ae062b8d3f4e500b61e762cbccbeb85c7d2c1dd307016f26bdad68407d8092090ccbe269cdda525c27b810fb0c4d56bce56564855cf78c5583011ea5ed91985412294b24d2a44419a13f1deb5fe4431b43ec2b36214733d917668a95d6700ab9e53b63344a98af7d640292342494bb774ca485ecb10940290d0884e7321b53c113cca039763de302f16988fb0923727fe392f1419ba2e66b6755c11863f39cb1ac95bea95382d24bfec93b8ea5c3ed437c9830689bfd21d969394a48fe1371661507268dc5b32473c307c8220753dbd9dd03d4779ab9ef7803f79372e8110d736482c7d498c088d7c20cf206a86137b7736b530291c9897073e3f1e31610919095db76f2378ae482bd8701c01ef7bf1f5ed2b5ce183273dec87eca1a91109716e1be0c086d95ed1f87dc9767b36e9a139bf9cb6a2eccb3e50d85ad966bf85dfb9a0807a87b4d78c6d0ab8e044b69f6d8b3e1ffee7b461c3cd6dd468b1afac48b9c33762771038dd728242acab2b3261450ad427772b5282e199bc725981057d740fd1b74797c04ccc1f0e995e4a833307a985980d67dc8d7316fbb2affc6808db97b1dd3a0c3baf543b71bae6b45454d1d3aadf03030c68424d40141b1c90f5942bd426c7159ac6af64101da87e9c6f0539cc1d2b0b3b96580dd1d0267feb1652c34eed4638753d6415c87153ce1f745353a0a952bb3c3b182818001c93ba4098ae9bd7ab679209a15e4d2c0c38a6d061d172905e1ae89b12e2cd9b03f5eeefd7a72e762e5beea4385306bfe4cd789b20cfe25e97c465b64a9f189f3a86173f99f41b7a4e808f3cee7310b699103a8016f6e2164a40e5f82586258582a1c3cddbde3c1d7faba74f98929a4e0c7cd94b8eabf6d98f0c546a3660b0ed6cc4c713637f97b41e999af80ef810fd582de12816f371033f22562f3fa7c2f962d30d134ca14773608be6d4cbaaf470a783d36b512b64d2414fcf9c039dfee8f0843b555301c8092902a4c03852b4c02240fd60e893e25347ae90f9d791fd2dcf08244a3b940f78da29cd96f97ba912cc9ccf1299862627cdaad659f41a4ba9b081b8821ab82b32f3152629d5aed53ec83dfd625af5fa556d45cf79e05f544d6d282a4a6e5bfe40d1ef412f8ac7aff8d7e69a4ef69509f3b1ec19827db66067debb7bc4b03a0ece93744c01c7359666cfa2af568df3b7bec1f21cf6081530836708a621491d5063c9007bb92c9fe5b78d9873ad7933a71555060d0c7ea2d907869b1ac49037d57923e53f159ae273cbaef1d867b45d65e66785490dabbc68bdb468997a46051435d855ea17c3eff1a1ec55825e6b746930298d0159c091a2b92538220d5401a91d4b4b1595e37d3f80eb77f933e84631826695d295292c06b3f88cdfe8a637266119dcb5296c2f709f049b4b673df0eb6778fff486c296290f4076f86ad995771307639f09b7af66a9047e6c553d2bf7ea09d65682d69b3525fb4543728de96176ee0f995b31d2eed641a98e4f8949ceaaf864f3ff0779962d696a2808b20c5fcb9dd2aa9ce838b3d9634c85b14f146c356f24402a7e4f8feaec4a4e7bf912fd731c0c6581664f3526d841170baf9d8c00327dba7d4003b5725efe6268617848cbcb2189bdc44e7364c02d720ee0f0c8827b8b01d5fcac7ebf934c523550b4832c67d9e60665fcff3536ad5a9b819b02eb2408d79635e210cba78a092b35a2d4d84e39c6085515d90d96d485c6d5298f2ebcc6926b4eb2412d6520f83ff668bc9ec1c5b2db06b3d156a1417eeebd2ce4d3519f2e625c9f5cb5ab6b765de701c8d07a3ae62011764f20859a1015a8f902e1589217ea51c89f4c7dd0794ef5c165c41af2cd214d6746a90ab528ca35788ca9876482eb776a1bb2765ee1531b7254051a79804375dbdcbd9467d43b586cee627a909dd386a9e8d9b946c21cf468c6080a244d4a695a4f65939dcf4a49dd64650d6b2344e5c84ec6d20458e8260cb1e986042f6404e1f1bc6420ccac7f6333e778e9d0cd148a203f2a684a13427378c5b6e798206f0dc3907a859a55310ef13b031390bcf42d87addd66e9ea74e4854af685de90a1b81bd78e56d379bf1ebee98e651e3469863922c5ac19430e33d7cd06a1f47268c47d0d040be231ece7303b2b78f15f6acc32841b7373273a2fc91c95450d0666b75f381ce75d1bb1ca856f58b9c800800a980a523f980cc93e946e3fb1d0894a4aabba82b98245b369aa4e5ba12c6418bb3971e5d94df159c7a497613c374bb91075e1130bbf94a1f891d27ee4922a48ad938228f90abfe30327745c44bf0d4ebc715001c202641b454e60a2b322f6d8656080cdeaa4940f9756f2e9d645fe6beee67f35e795c2603bb0250e7297d241e0e200b780a3d6e0db7a3b856afbe46ffee850bbeb86feb58d4ee5c1639eca0c651248bdae480723a87deca971d5696dc526ae368d40e254351007cfbcb811f3a64d1c0e7af0aaaf1e33fe1b7fd0fa190355a5c2c350af4b42cb9a0ffdf54d1cb5b4348c0a912823c30fa642522dc7a9a1f0275258a10285182a823ca83f173742bb52f1e49288252e897872c9c412b7543c7149e2896b2696ba26f1c43d21b1053f2cc74e009756c508fc4be6b3a7a89843da76004f8a60c27889c12bd523e14d350440102c81e358faa87d23ac54afe39f88fa0a9465f00c4d8c25dfc50ecd92ac3676d106dda1a5aef944fb217bcf0fa26255d0cf7700c7c6d742c85ee0b3a9d664d3d2675b22fcb207f76b1268f393f758a2bdcc18e7165dd157c1a2badafb85966cb43a0f94adcfd7c31a33b709c141a940fe169624abe821a7b1218e52bf1c9d6cc4703fcc6d3498db571dbefb020d28717ffdeba5238f53f3a0a68950725a8f74c28b7ac0fa0dc202bc1de54303912e330d80a740e2d9bbd4e7caffe6b70507bd25b26303f53515aa232784ba94430d8166104edb19ffe5c012a081358424c045c1d0a236981b932a7fdb16bee9226e64008a657592b9600444a4cb843470b55fe14a3b6de9f07b19daf714b73a39992421dca21e7b24e62b7d71d20d9506fd591218ab13d1979485eb863e9831c2ced32a15158a8a43c5ec540223ca4f6e6acf3777fe9f595f85cacb97daedcc0da32a1a36a8ed46cc98814b7f00c061ac8422993c126e51d0b496cb525129818ec06de979f7768ced6d4e6de222e5d17df80914db4e20a140001127032b7b25d083f8b26f51497b75d4c187ccdc1240e277e3c516aec941aa2f155c2898f98cf95e776e9521bb72c52e85ba09e783c020a1721731eb33ed495088f91388e0097f141df54c3cd926de262ed3c78d1544ad8cfedb25da33c808c46060026f3e60eae586b180d4dc6f518fcf237cb958e5d53d29d4ac165e0372695bb3013179a0006d4ccdf281649f6c8736c5d279690d8e7644e14cc900996959026d37e3e87f3b8680dc7e3d7107f01e9f026214019c14cafd70e1b12348a70da223b61145976fb7c162693a6c886f8833121d3ea2a8908f6f5474f9dad09decd756e5dea0fde5bc95910892ec9970e0b08393756414985b222c55f3aae0f9549cb623b2e5f29a4c254a6ec8f3f9c3674d9da87f164c73c81a6d1e574865e63bf3d8dc2279dccfa7ceebf8a4d566481125f617f89ce2830e7fa9309978e489c392c083d7d8b67c546dfb6be47ede15a538044e8ddd105c2559569096409c4ed767e039ce5e4ca1eac18761217bcbef56cd2e9cd5f972b0a7626809f81ce1c8d89ea8f2045e49e4dabdbc82f560d8fc07883f44ec600577cf085289febced04f4c5f35f7b1fa99cd921c24dd0760e59f5d19325db995753390face6275304a0838cfcfa740595d8d73e81df8fe45379cbbebc7d3a657ffd48b7ec4c811b66f9827b6c8149423badafc3a8f433fd28eba764d00c4475da3e5668de88061db7ba65df165f00b55674ed55cd6e7f89c90a700b04cb62dc31789309cbf678d8468bab0ab5dd111d7c81589d905f542ae7932fc8476f3d5f6e86030a9639a88978d8979131a5a56a51cb23e40f251fc8ef284ee0e6ad310419efb771621d2e0e1c84c871f28cf75eeba6177893ec50eef7a5ab7b2317888a829a1e487c70c958633d105d39f917e4fa1a6069e197a01e9cea9f2ed42bc6191880957be5c5d9d35eae9398d1bda76913ad815cd6cc272dfeb439226ab1002daac0eec907ab9636ad52b588590463aa535cf20d60bf2e1e84a7d82e3ef7f77f3cef989c4b6506108781926256ca1cb92c0346e5293047d599aebddd1cc12f6d1ef4d43422c4901c5f52dd2b258c519d4ce64b8460eb8a26d2b9c0d42d3f29d3d0dfafa4dc1e44b308cbde90fc3e3a90161f7f30c4f027a7fc8918c9deb4d0b7dcccb0abafa0491b030d7e4db0ef1896c9709f0e35fb3229722d514cdd7c1e2e623d6ee24bde1b9e7fffbd8169d18b79663fad249948fef1d2b78e1817b9f933330a3fb3338cedc129c9c012eee321bcd0dd490b33215a71d259b0eac90b2586bb683050ee2e407bd5705c3cc28e31baab0ae3daafec15944304d49b7c106015a09c39311def6e78709358a4ed17a8981be285dde4ae58fe6e785a5e6cc800138e99b21d3b6872cd63852962c811a7e182a338462a0507ea2a284b2369670a1d293b48a025f6e19518b3d008e520413220b404e812115a44a8662656efb47e5c6500f1372f0b90bc09f7cd7c8ab375b5e4ac380a94ae6b5bf2944e05c0861195447b1024a9d9b82c13c520bbeb55dd300fcabe14ff8933df4e7af800bf6b8911ee584f809128747b5cceb2d317caa7f07af2197443e884cb5e183e7031d12f2af38951e5fe40e1f3ca04c937a75813d34b283e3f8e4c29b93e02dafd56cf940ca677fc27c1dc4520ec94b88946e39ee936a7e8f49b29606b6b2f399e00b5462f0f6f4514a1c3f6b702a898ac7c91d66372ed21d28584ba96934e5df6de784e894696a068df08919b577779a2bae4567fc50e9e6bd5b7b1fadfb369b94d9bec28536a5ef1c7acfce927afda7b132470799309b0d7e2952a46c333fbfafdba6e9a14b767b3cf90c39b530db1a127e6c77ee6f013038202bc149d7163642528db0d9fb272e9231ea9c80b6756ac3188fdf3c4788101889191a7a0f5368d2a045ada83518b9c07317826369ea9c52331f0442c9e9985276ae1992c3c982d0f32e0494c7890154f62cb935878123b9ed4e09918880702372b4212356247a4a9214a42f682fef3ce6d6cfba47f04e059631fd7b788c12e5290b03891571791528db6587d7ba1d382b618618bcb62af97c0d91024caaf445b38bd67e4a662d39a65889d6036eb0b83c50cfd4f4a89f7de07c5c5f16499a3e85e703b91a82ac05bdcad689279571940c64ef6f8402a7e338bf4eb78efce175bfe8cc32433731236828b5702993f6255cccfd45533a37c17b8935152be56950f0642e0cb81e9c023903f036ef2acedc7f94163b6c665432ed980d01a448b5f0a03eabcaa10c067df1a7612269e9ec8540288e4dc72e050b83cf94df90c35dd633f01efa10b5f519df829ec74d68222dedf2b19315950e3fe9b53bcce8fefed074134341e4d4a477da5a368af33897d0517d37f48e5564cb3a48e1d9753797ebb3fae929a76a3e49d78c99238f0e67696797ca2b6eddd2043cc4f4e8011616c0dde8fec071715707fa81608a19d64eb5c40b83355eb9ada6241ad012a2802c1b1ade93831c320507a294e4a765dc73519f45630f1d898453227149361b3cdfb855d228074ab3737dee873e86f94664a7460e69a96b91ed23b22432afdb4eb900aedf1f57a65c75a90aad16681a3f73e5ec83f57083224f48cd125e7a463c73444cf96581b259c82ba06da04556ae34af496b5f727bc7ec035ab4861799539e23aaedec4baf2cd43f2487dcc40eecc15c8e8eb4c5c179bc3de402b9f3778be56ac07a77f48bc0a653c829f96c3085ffe14bc152077656d1d1db684271a4e24a0e5696688aa63804a3b1e90abe63c0dee07ccbb27b5e6649d818ba47e5199170029acab31080a9778276720d564dacd36602709167702073ee554e2bfde7e36db7a41c6b98f0d6200309cd4fc364c157339465cbad96c9b3bf9e0d51d376b241fb7b11e04257ff2284bce25b808ffe56dcd3d1263ab2857049e047c59bfb05575a53c4fba72993f77f40aadb85a52671da8847fde33d688cb519ce7b0e780521cedde9f32e7533539030839c9d46adc12e60aa624648caef85108024e8d6703f8c9c8f9060082a5ebd31b6653e86332c717a9e5b535cb78d37355b873c99d73c88f48d7075b8772353a50ee05fe93c4e88a24aaf18cc9cfe21b808feaf056c7d15d26b85d25f428c1d271398634fad8b25fdb9890309dbb626d96bf6eee782250d122c0fa2a3b4c29cd4425974e2115dc487c8f4dbecc326f83a218b37c97952492ed852945296aa4041a405ae630d262be48bbdb33e74be9200603e5672bd6f15c454642f2988f8eb8f3d252b9d5402ef728618ef0abd9af83f98c1347c9e8f58c0dc4347846a2c323175bb5f428180909c9b5db2b0c933a5f5de33ddad5ea631767d138b4b1dff4873e3cd108724fccfa4a05980cfc8491aab188358b54a51cbf6735d7b7095529e10cb1ea0d170611363424580377039ab077491336ee5a71f618af5caaf7cba40cf5a4565d06aba68922b6d642728df7c42ee73584509f28bd5fcb0c140c2450401be5a8b58e571f407f3545b1b1c31b46144f57bfea929a1f93b4a5c807ca7d716b1c8a91d910cca39040c33ae93378fb53d500539dda88a98c0f418ed7045a27b4dc7c2a2530927f6e64ab1750c1d7f06f76aef8070c29b0c8d8e2ce26c1c8e31bd5f982639ee658733eaae07e6cb9cc5a90708b771bf4a95471ae0ab153af047743805bf54ea397a8368e866fc2c2640ba844c9f34a542cbd0474a064b55d0ace7fdecce025b94f5f3c2f8220bc42182cc45656af9f0aaafd8f78641de2314c941a08a4c82986eba992f5d998b7853bad95cc43f8f6c2607717f74328a406bd08097e0fd6cbdb3e999121d8ff9517dadbd1b52846399f9f505c0384f5028553086cb6e6c1f2cdf83df08dedd6640c3c7577750bcd27a738ac8c6b04ee133a3ee1dc1231eee3a07fae82a7dac690c834146fe76ac943bb085df6a96a0dd65cd916027e49197e3f3eeec6259c97b2affb8e58a082a367fb0ed306438465dfd0e42084cb8dc0da05e62c3ca90790c0ff0eb68fd0e4e98c476f4d798286eda174d39ef4b65f41b9968f04b3b82dd12a15cb732c53483c2dd5fa552274f6a102234a18d4bc0d77d3b8f47efe83b8311e8af12d58991a17c0d8f7a6a5baf83eb363c24ca321f870a7a581c9f44da38f85c5a6c3418b3ae57178f0b6829d0a9d9dd80a1c3a82f4597bcc82fa172a9ff59cdb7b2434ec2d9b8c9b288698d0b1802ca86bedfb380eae467e6b45c21475e175559f71ac585673b9fe4743d2dd1ff688cbd605d249e159f7f84fba0b53d4ed16bb5c8d162f1fda93f3e8f2e37002c8443009232711aaa0062abdb8b234d602e8f1e999aa3a60ac5343c898581e2853c7b8fb810cf99a735b3c22400477e450bb8133a935a190006026c01485d59195da9ce59d00f18524c5c06f59f98f28cdb58e98c94ab7648cbce7b6e1244619eda4a8bb83280faaa3711ab7268403309ed2ef1ada5e616e6c27d56f0611b26daea87842b7a908ccd75c37b8c8fc1740212a4d830556a7766dc5a46c9528f250195a11905132948841808fef8189b66c862acfc356cf834c37b14dadd641b03cd92ae95296d43d40140a060039a112317a88605a4505290a08751718cea6a3c9154c234a89031a224dd1b4d5eb7cd6fb6d5931a4ac40ded1a5a415946006c1c591654b52d381b2bd9194dfc189d2ef0eac198f5be24b8298a29dec2a7988311149c5f2431af4e45774009d8308ccb0bf6893540d10bcc680eb2ea07e1e3a9b66b5a0cd98aad8deed93b4287b3dfd993d8b290ddca03dfd30a7af29688faa06f81a5af24a9a1459accb69034e43afba3ba30ba4e5e8b653ed0a8c83a829e54cb7f4012624d982526b032c236e83ac529a62801cf398049f6936710404d0cb681700d45b3891015c7c80c552b0061649d542462ee25c089f87884fd1cd353971fe0abbbeba3b7e9e1de682a66ba8507edf0c9a99716d63063deab5098cfe0fa1a2a12100d9f54d3f2e7aec097154a1de8bba1b502007e78dd5f58a286bd68432c14504402b9e134e56e50f407a9ef08dfb77aa7b9ad5bbbb30cebd50a761d0b2480c74ac098b80a81155b79fe227fee238c788c560b0d20ea94828e09e2cf540fa078c90f479b8fa6b00e204c3ba78c6decef2efb2a5eae7757205ee8367b062245c5a0f2cea2b3266d3043265a8817728054706c72e4ea3ea90e4dad6aba6e2c11bad38a6900a5800f6c2fd76d77e8f0ad8a9e17c002e7c79e2c46da2ed61fd9e581b7c4d534b1a584180cec3386c57823764805a4a506f6976c5b7b391e8503cb9066df62a5616aeb3f68baf0052170db082046554d49b0d924c4a5d8e10afe086db7690d8e23e706adae8b1932d9d34b9795887032b74a1c3ee8a5850385815ced74235a8d2c9bf42fe05f5da6279606516a587b809ac80c61a94a67d78fcdb955034e03fc282b2fbe619acb0b38ec0c2586bf6d272d2e44095151257e976b52efc25ce7c659d71d9d1ad45acced169dd9d0ed6aa0110fb663dacdb4c634af345c4a2515984ab5e19e5a48861741e3d6ecee418526a468c6a51b5b19f0fdcea317daa9507e162a94c9affef635ee1f2ab5cb1205c8edb3ff9c3c20ad7bd58a46329f505e182dbfb83ac70f9a172a3a2993f3373fdf5b370c557110fd5488e0724795666feeec0abe9d0192f05d44c0e6e32e5d982bf70561480a61e0d9e472268357a181b56a5226bc3956019cf838e60ae06ae06e4f042b6e20837a8b444fab8ac4f8b2d8332ca936ca8fe99e43bf9f8a29ca7ffbed4bf71ebd3034a531130a32c258ccf1b0c70400d9959cb53173c33bc824a58809448cfe53573986294354a02f3213492928bae0ad1503c50b14b30b1f6ae39fd29396e072239b92761986ca78b0a670ead0724256a4de885a113775c694805b7acd9ea04af81f4a45a45ce7f0b093aff71b0a18ef885b3f47306cbc0f2085cc7dd465b41f7765469b699cbf58ac767f8f397e91ff8372ef75610fcbad811e117a27a74cc66deb8249cb1e459e71ef00a1220f9e0a060f4de9a5223fb2828f34c832404e17ff1d906ffef5558d899cd08b1633b4ef1e9d1ba273562238c30748045289f93ba47be52251f69430a81cd6c8c82ac95871c249198755d33d144c9b7b78a13acbc4d7346a6d1e3d387a6249267d3fa1a5ce6283f8a79dd300d87382b94c00db10221f17cf32e8b3c1a16504dd546e23b52bed8e7ff96db936c925ffd41b6d73ed9af83889dc3477654f4469f5d0f527e0c9cdffc30b414ca63d4e807bb7cdec7c56978283d130b2505ee6495bbb88822e081aa2852119e941c6991c7cb98774b957b70be8b8619eee3d4a2db4a23ea1eb41f9dd86e6693ac59475269432d45f8982aadbf43672cad3aac83e34823bde59d28c53a0f882708470d35d5231fa099cb0c4cb3e4a8afabd8223b16d27a13ce1aecca9efdf062dbf2f52822fca80ca42593b0cc6f96691ae519e919396f3c84ef049974a2915d2f8454cb275e1870868c468dd6013850a4e7a0819fd2ad764ded5231bf70699ed58bf8a0a54b627ccad20bfdccdde7fdafaae99f51b55790d083d16bc3d7b79b720819d84d5f0574e704ed651ba572bdb723f22d55bed9966ae6449bfc7212e860359f71a5430505c5fdd93e5840066610a9e506d8f83ccae0c4abddaa910f61d0dbe6a629c6f280c5bf4acc34cd332cf1111fbd165b2b3dd115c96d492638588b11b01c418562608519d90787d53ec3ac8564de0d2d3c14f2b05d7b8400624c43f1efaa94d30d14390d4f1800fddfa277cc1dc6ded73272780da81222c76ef03119e2a94356b2ac2ce2bca56fb712b6b371ba7ed57ebf74fea1bd8c8dff935f6992ec502d3d4c7208cd5e41328ccfa91c38c50f8e9036a98663b3707761a11cd424906d2d3f75d80af4c71e2a9c13c3e51b7a5c1633d0409ce6e6a39b014eef3c589e4a65ead250159ffe520e4ee6f87fe1cd7cc7151ff98cd70e0e3d8c34f50d1225a7189420fadb1f7fd57bd26233f1c0d1fa234373d12a2bbdef150193f22f3f04e5c11fc08989d4c53dd17287ce9d37ddbe5d8e96f2274e234945fce2528a53915dee111ba755807fdcf661fd3c01d1a5fa14de031b0c0fa100584aaab79ff85d2f0f3a34808e5af80472fbce4cdb751dc44890317b5061e58fb96b6d913d538ab166a37f4be33736d0a04ac86d971b8c635e3bebb1b19127dc32d4f4f31eb2891744db40791a224ab214cf8ef180002ee2175159ab35321c7e8f182f88d5467f6f97917043a9541ee5f65361bcc07d60df6b4882c5daf3d485230170c98002ab51a8772562111376aa0f0a3ad7d0d0c60ed31acba65c2f8120c87388e643860b4c5ca6129ea87f055d4be88f452117eebe48eaed01393ee1cccb766f3cc33b848c78d31fa0f6273b52cc275f98e2c1859b55eca946a98621f068766c9fb88aacfc86d07d01ac6ab771a3c1c6ea4b2bdaa549333c901c19c1cf338e0f50556b37ffa179d0425a3a7c932a69a6a18f7f89b596e0c315eb3398ca19640ecf8284bd9872ed12ed50af5dc8467f38ab39a128870d6ac09d43d474435b39a17d85d01b4907047c39ea041eac06eff228a0838d26aa320af9aa8e0bb8bd0de48119871a192d4c529c3085524438d6d53627318645608c3826d5185bf8a004050e4d1b2774b4f6611edad1906dd111dc9e47eba10352708f038da1b2063222862c7ee92b57f2cab94367c65cedcf43190d935e8a56af66992a5af1398138076f3b302e8e6df14be099fb2b80fdeaa399f41dde75eb88548ba814f2a496cf22cda51a4a11a39345a74203a230f89a80360b355975a67ddf216ba0689da425ee49dfc7ce2ad79dc85161f16dc895b4ffa744d19ff839f6aa42e1eebc0a78fe196ac91a56459b3ae83db337dfa6ceebb101de158f9a6e613daca815184527250d3505859e894fe3d5447996a609a1d6e60d15b9bf4a10b0970e72b211eca94d930fce0440419e380fc0421ba23cca10547d3f13b681ca3ff06780d211fd780a2b96c94743d82c6f0dee7b3c21b0185faf6b250ba11baad87d2813a9007b0aee8c36cbd55d18ea8b2240664e1e9cd4a029b5113e728f49748bbea79ae332421e065421b0f748f4444c5fa2e33d0a970f954c52e9f81ec3c142ef10d9bc22a08077708998a7c2e318c0139e3e69c57734c8d307fa01af55d02bb8be43a008e72b08a317b1d4a0cdf1b3c26deb75334d0cb2e5c7e1135ffc2210297817e10c56f53706045f368375de9b0b834b3d3b8bbfc80b1de74aa536d285c6a9be9bd6de8d6d5ae88d69d325b90377ef72423d10680ff5e4d06ffd1de2fa10731031b6d4e94c20e295ab2e356f41fc5eec84176965987262182d9ef4a291a7495f202b8d56e88ad1e7a660cc3841378381c6fcf3d3be30bc9cdd459a94955e834fa14f87ba970260a5a92fc1743feeaa9289b36d758e905db8432264351d09e89f4463f60ee5369172777ca10441e4317ff4d0f0a6cbbc759911863e5a8ef0cdf281a23485561670183046f12104e0650392c3265e864750e344eaf3b21f4a713cef02820a5d70038683114509c4f25eaadb1aa2354aaa9c41828e5dd24ab66dccc7d72598f999d7a7d0ece75afead2605b7f1d03338e4339b5d2973ed65d19e0978165befab064980d09b0534aa5db411b95beb358e80a957f00ce77bfb32b7b8d0389ab5592ef481ed13455994e43898d929599c4e7afcaf27d6a4a80cb6fd49ccffb7597fee1081f7d9db966b8ef0236b35a00c0973cc95a4b48c12f62a43819bad854e89f694887143f936a8d6c8e10aacecddcfb95379b525da89ea4635f29f2487748b4df2555269ba5f3e9bd71db068157ff8c7de24abd19741d1462c2be5bc449cf14185b037aa6a2ef449fedd89ed4508bc2e3ed61e6da6780b11d4c724f5ec660bd499f12367c7ca58824c9e518f95911e4935d93aee1b02a4f23a99433ff4901d408493d17570203310e828c50bd523d278c9df8b6d0898f35dd91e488cdf88309b81e0a1a624d65a9ea9090dcf8eff0fe72fc35b422d1777d2600c3694a534d30c5c15667617bb833616c6276c4e82870a786759f66fddb09e362bea927d1960a533cee9f09225ae7ebf66e854c2601c86b2925ccce04827a4380c919e94a40f32199714499129b33713f434c7e69582ac8af470337a811722d673b62c78999cb91ba48c53ab6fba97e97f3c06637c7420fedd8426361dbcbf2c47404734ccf8169394c10f3444814e11ea368610e486fe4398b95571c0e5e65471fc84af33dba0c4b74c1f5cc869d7e7e65e1a3485459411958dcbaf62dac512d9b4e3cf87fc41f3d52a55421aacbc66badb4cf878b43c695fc02013fc1111412932f7f3d190b22e9e06c320345eb300f85e4c0a3f5e4f0c1c2824c41aed77ead4eaa50bc5b91f475defcd0a6c2fe1567f12991a119c9328130a16d02402df329d4be2cd302e3d9d8bfd3ded979d641644414ad317d1a5839c879bfda0f95d3e7707064f1636cd061cb8a0aac619ea2e8da9b2c715fd49e961b0c4a1cfc17af8df296537aa4a4d60447238d11423529c0c130c2771c44f9d868574e34c0979148e165d72597458ea40d2e520d16b43e3117c3e2384d3095e56d1b97f26883aafd7828b00b6008820f59a7e86079cdff949f914b8982a07adfc75334de3c56d1e005e1f1e66921dc0da6d6ba989fd7d56fee5fd6b513a3ecc36f2689e1f4c8d8b6d88fef0836b0b05f61c6e1f6eafd67e4638fc639f4f578717ebb9f1d88f44b5f44e6afe9554cac61531216165b4c212a7c10274d5903822856fcb8a17f32d1d1157d057483bb309d6e36d50c1c51725d4a99d3ff7932afc6c47a610c43dac6208b08874b68cc3a961771c2c32d7df44bce08392bc03a7962f1d2f12d289c9220202ee18eee0b9b289407cc7fe28ca0d0407cad211f4ee8a5fc6161dc2f5a43cf342b3854d3b147a07f7f743398614ad6f23023716475a6b798bff8cce9f9dde044f7d64801a4ffe892b5104110df583375e0a8405dd9f30ad32ac8d08689984ed6dbaddada6f8c4aa861173b22def00ddb4241b7ea92b6c797b4a50c16aa8e960500eeee2903eb42b0f2a41b836f5cb8f84b92c68f96c48d86dc081e80b16755b81a644748d44ba91bf1f29261f3815d2eb114c88a7858b315ad84f15dbe935d9edbade0a5ca6496f3147601c51c7ac704afe5384fd580cb8185107c239ff1552a0a1385affc77172571398e84bd38f7d51f2714829e3712efcae2b026a3bddce1a1a4d6f6a84866f017da35ddc42e75816e074ee6432fb4739eb17b51d94d9363f756ec6d488d7b761ff5c40a61d8922e004963d2d1cbd6a4ee4ec3b0e3c69c2bc9c62d8351e1009da9a0267582c490804d0e372c6db32084d6e01f98f4c46ab4d4fcfe56797562fbb73663b914952da42c51f4af8aab12773810fa17472a5803fe7b15c4019305ff74ef29856d4986bd0c2305b3b170a69f20e3dab808a9ea8881b53c4bae594b9062028b87136bfdbae25246e00c0412f66f6af5d552da9e56238ebcf66d9a9a65ce508081e6781925c0d5e43d58e1f7a4c763f4bd1bcfcbe3ad6e85d0e10a818a581c10ec4f060a9fc1a70f0b0eeb42174ed8f46bf1f3d66712c5f23991cd23c5aec66919669d28bc44f73c121bb2bc3953c2aad9da8ce52ebb5069836c33892f8ca1eeaab0d7d7a0f2f3c6e062c748d82fdd088a54b6f8fb89d9e236cd41d75127534df9411d56f89b63641cf83d4dc9c5e52ddc7f0067bcfe5ce51f7acc1d4aa913f847112b5b3e0c10e120520d47841189cff636d3fc1e91096e8cc65625984f1a40d4047e8c0454e0a5b33012f5787060b6de3251bbefc57ba50bc76d55f34048e662e80e0aaf788b716b01a0f564d26ef07b2f0a4ad0db3bd304be6fe3af293016c15de581491e4d8f094c14ad9828efb0e80381b219ab0838b5dc9a158275555b02e643edff5748d58fd7b7119c353b36444a40b42bf2c5a2fa62f7c376398af4dd574ee23ec78d6ef9487db5cd070a9960f7e209ae2c1875897972cdf9ebf185814e1349cdfb629110d5005b907e61039f42721c2965e36c83031c9b5c37fd7635e9d804da593e97a69640a6dc505cec6f767fb2ab217cb8f5b12f0c6f591ecfd299289eb8b1db4de4194147bb135cfe9cd07ceeabb8f45f5e90064b7cc3846aa8eb3d9e970212063bcb5b49253ebd93d77e101e1d0ac8f99f2c8c654b7cabbc4af23ff4fc061c6dc78bb888d7995c771a121e5a65c8850b8a5308a3f472b7569ee860cca1d8d395ca1bb036be7072fe279137e753c546ce2b0af23987ea46eb35bc0705aaa7c514c55b18219c63038ca65bd89bd9348f117281eecfe2b213a83e3c97f500fd87bf221b4a1c25b7094a0d4a550a0049de576d3986e34d255b525a3f08bced9910717bd4694240c610e4a1b041ba3788a4111ac28598214a581ff24b85bdc2688aace259cfc07ad8fee03ebef70416b65e69c1b1865c141ca3842d50731fea786a9d38fcd2dde7219857bcd235657f8f258de1135ff41c52f99716945baff228096aee5060932923e759592878df636e1fcd6d700ccef18759be8bafacd980d243f175a11482e10688056196761aa4a39c79d801da37156f2f22cc637706d509863f92233d7b6b3e1e046e078149ed1bd8499c895a64627731d7a1e7980e1d8b2c699c822575f0ae2705212342038f4266beddfad968e19a529767c0a89a02d4e04f1c5e811a24f64077a3b5a0fe9cd8ed193fb8af7f53a204a8544e5abd9507851802261f1dcea9b79cf829893a8e9d18a6bc2a50ff1d6e7a9772ea3ed2d11ea81a4818b3866141c0d35ce8e1ae6049ba27135a4f9338b287a034b1ff12c6fe0c10bdd9111ea2911c4200af485aedf0fb45f694d194ec79705ad53fd38ebf75585f747a8a6b23b633eb0dc678173c4c1ff6110500c1dd760b92f94be437310ed64f055429a54cfddecaabc8dd93abf93924a06af2ddc058ded10d011cf9918a5bd616f37106e78321b063620cf7aa4e30e964819f3418ac93cf0ca4590d851c83ee3e6f485aa91629fb0e80a249f949b439103600c73216e2872bc67908ac204d920c4f79a114519955da4a83c1765e657cc14b02c53b54d261de7b510f5c440573359217ed0a6dc210caef59040be292a1784017359f1a50abed19ad69cb296292a8a5c1ae70ffc275a14a25809b70615e92f41c786960ad7d63264f851852cb3fe6cc8d64647dda86b9b2c00c09128055214bb0d4897fc918c6e74ef488094fc5c8dc8072f89240b608f048b16d6f3d66ecb4146174e17810406a8660f2cddad7fdc1d9df76de382e909d29a58f02bfce842fce6271c6be7afff30b78de092d9989aaf7c8ce2105630bd2c47610e132925bf548e034a19adc08c99474c478d8ac6dcb9d42643906d36a8e884618e8b05a85bad6aac3a53b30a81186e468a9e2baa3ed5f1a56fe554a3e1ca578f1f8020a0e40d45b656f60b9df73f51dcabda5913752ea4dc2de7f61200c2f9f16664e4a91f17cba3962cebe0a55481ec9a067e12e77063cd6a38a6a07692f878d2f162830b7b30308d22591ab50b4e25d70ef4ed68e8d0ac37174b49123e121da089ae713ad0f43fb9d1596fc42c36867c8e1afcd72c7ee7626955827ff6c62d9d2b4951d4db86ad3704e1330b9090ae420ff4b32a7ecdd5db7c8efeb2f8b86db3e70b16c8cfbc13b5b6c5179d8b73f1736a7c841f85b7b6b20164fb80f322ac78884554c41cd4f9f443ec6cdce86e71520621af1c3846986123a274b8f068120dbe4107c3a821ddfad9e9a78ab9c707dae5b22be0dbb665180ec751e2222616fe885de08b15f79ebc35ad03c90a297ef519924cfcbed71a80c6fcf120f92be75e7fd52482e937c50a186c181482eb73cf687d3a0263239fb8ff16dc193b34c42ed263d122eb632a5213086bd36ec0eff5dfd85a3e8d948fc827963569603e33e94b8c48de9a3159e829ce327d404d167596b8bb443e3ca4ab66a486c1b9e51ce8bb42c14131a4f52948c32f9ca4aef87c63566b60e5d02d1a2afb970c27e924ff0946a75ab581d070716797af17e020dc287b047f9cf0713fca8e26a2997c2d1189c73b32b211917e57f5433ce9de1a82b72020b4c86580619e996d42a772a1e8f1c8f8290fee01c4da74f21365d182138471bd8737d4a9f7a2271d0b5ea7e4c5efe14581ddb0bdf4296bd8de31ed12dd68494f029c061a89c3c149c9ceb7b0cc2806f77f879c91761fbc087c988671afd8a7b87a27b8393d5197d7954ee2f638292389ac02f1a936939e480f8a8e702edeccd6fd31e2af5f7d5bbf40ed4b9888993f011c7e52c91abf7076ba198e3f8389f44d5cf263dbee66b37f50143257e40e2e05ca0d5c048f34fddf50ee66113fa06096b5b9f3c92fd812a5bacf95bd20b9e32708c4cfc326c465b3e948a0b9fdb59d855344eebfbc7538725fb2d8e203c5041fbac94b86ab7f0083ca679c2a5afceb5313fefec603556eeaa01ccc3e8550c96aa86921516d01235fba3c174d28bc35d15f087c79e433894a04fd4c063d4f690f91f76ff092e50628054534ea7c92de723ec24602cf24fce78a11cc488634ca6fee0283a108fd4cdfdc12ea14d7301d0f2b6f3fef3d3f3aa4adde620aa79281caddc62b3b13e41423e23149161690225ac98ec3807097c35d01dd259a7a095226df121dd1c5938f486f268cfdc34fb0814a605346644360846082b410f37fd764b4017f85fb46d1bb986d188bd727cddc327184c99612eb8ed0455ab8986995a74547919082b20d0f2d1ca33de9434eca21c9cb07f5cca2a8fd2214ba62655cbc74b05013360753b3a01023223f0ea242880dd7c204814326b1ce91d7a3462be65f77611aac3dddb8a04c8dbcc6b1eab7b422f34fcf4608f24f18f44087d3bd12a8a75702a89bf6e0f74912ca3e071265919e055ac685463a93e2ba57661c450df665f0bde4617bfedda9f0c754b771dbf40a33c5a34bc3984cca72eb1528f0d4e45593c0793914797e16b3bb5fec114aa41b8b08dbecd9d8a46d78d14f7a1dacef78d58f1c8fc5bdfd980c43b68f9b2e8813df1db2a9d6b762335f36d5023973e155550c0f59bd15e6420fc91572aba8dfb52f94db33adf80df2ae8f2e20b60981e7060ef4bafea58b8a913b7a087642eafa0d42f1d3e65657c9a0814c5799feb14510d825843fda0a5c6a76592d5057e47ca834c5b768c36bb2ceda38c597b7b7385941f4d006f55605267bf5d85366f3d02869498527bf3a19b34781018b42d5111f7f4cd4a863606d400c4f1e8e7fa897464038daaf5dc0bcae6dae4361d6b7083cf64c3a8911507e32fad35a9eea8127520931add76b8cec401b253a3c9441ee156205cdb6d1da8db388ddcc2710ed3e9ba0712ac447e3b38aee6deae73c97a4844c2e50f610105c60a94524738072dbd96aa501cf1b93f84ef17b02766fb3160b3f2b1a4219124dd6d01244aae192a93ae4f5162a2c4a51f14404efa3bdd7dc5a7bc97fab07bf262ac215aeeb020d36210417a8322446892ed692be23a6f9743eae2a199019ab67aef101ae97d890e4b06d326ccac5ac096199e8cdb0a957d1cc77f44abbf2b0120417d8fe9cb847189db2b2818433646d1164c858e081d237528608f2d93c4504e7c710a48e90ff669d5cff5c7639398c0c28d7434df25ed512517d342b47802b5100353b27500321eefbf800ee9a07b14e5987984558dff5f57bf71aaffa8f6cf9b6447ed9f46a96f0644c1d895a86d67dcf007fe3237ce996205f775446658bb86c89e85c47a01b108b1d17ce111e012a0989fc1ee1a84a4958e219da87f04b1690067b8d1dba8fb74561ba4300c45f4373f45eae9e93c29280ad3f20a67cbdf1c5972fe635c0ca62e60f70a51e90f1a97413af70af3f01105ac0f3c7d5afee1843853775a1a711bf67ed8ee37aee670ab2544a62a5cc2b0fc13150ace907ea699553b106e43847985b8506636a609d1f675a5690c6bc8bed7bfbb5e944db4ac08a1a64514c455e4aa6d2984a059434df792fab9f82fed7acaa10b1b6f14b13b3ca0f6693a201e8a40a90d251eabb1e9bbb1d2bf91343ae1f255e0a7beff816e423822d8e7369019515ac62eee453a732360af5fea15f41b36aec45c4feb06bef4d3809385085d857b853442f4a57d9839fd0c740f501e014012af0ba99c0aeda84dfd29630b9ed41540cb02553f44f7479c913924b529264c53feaf990a1596145c3d7aa92550c242d55048ddfdc782659854dd745a46371de816ca177d09e6f5ad3c1d8c03331fc012e58f82a600183c9eedb31fca11ff96350eedf2f441bb9ab6e3283b3c4a9d556e4bb3fa9b716f17da0aab364214f6c2a8933fed87cc080de52a1011bb2fb515a0fba827d1329345b606c1f0ad28c3b934b9bf440a97ce11aaeb40dd3b988f6b87da108c43a70b6b8099ad8df763d36e7095334e60d051374570c7805ed72cd97062dbb9ae8175f103214b9b0fc8d25035f6541de4ea6612efc97758f3a67d109967a7bebb7330f26dcc5d6add281bb3be55129add4f8fce63e01644208a8e66b446b532e480f7ee45a849503a29300938440906bf0d280c98abab64024c04125b0e3dacddaa6f6c62982cd01f4c43542fb650738113c98f490a160486e2de17c0061a25bafc58683e3ddedd27b778d8ada87b7e499884c3c6bbeb98c1044b6bd2bd751bf59a0ee5d9aaf0f9518267206b863b1f8511faaa3130a1c818f4dbd633ebfbd688d1a5c432d12aaee7874521d9990669735f8d6208bad35ff1f08c306a7dea17a26389885225c348467d5257a225b8f10245cea499b5b282aac3862bb9af978be6a2e74fe9683854a962a30e8b2af5930b9ef0e0ef2b0d3e42d0460f255bc4356e46f4204ad0ab4f515748e867e8f2a0f96c633ed653e4b843a702c3bc2a75d6b482140072e31d35cd5834cb50feb42f71719287ca27ab54969ad4d35b91587ae09930f9c71a2866c4f61f958d02ff21c951e0b84f1b5c7412af8e41b4a28bf1b1ce95d66e84272d2d59eca5d2a20d32f32ff7957fe16c0ac5f487501780b52d8ebb136b007d4e05e94fd713ff4c273e35e97a3e446c07a065fe46e27dea0731d1573490248d2a420447e962495c353229410de174cbea4297a659a712364881b1bb2bc82d01e46e2ba39702843476ff315342684b4b4d6a6e7adba5467d70174b29746987ce1b0b5ecfa1de6cce20beacaa794f63e57b2db5ace123691aaaa102d6babeb8942e7c3fbe6b6288e2696026b3eccc302ae796151b5d6e09a89d56db2ec6dd3a8ae31a3f0b22a3931eaf3f9912e209dd4613454b56eb39a8636a2ef34d1e06e7741b59b370959c7edd1ac146cf036a80e97d065195b0a1d8db2c093c74c8a54dcc05c5ae63c279e6a8b3f52db3db27b6dab9232a3906de2711c70eff0ae8ec69820c25b324bf0d73dd4bac0b3f3d01077995a0d3d394af2b2ddf0a67c0dccabb4534130ef826cc625cc1b7baa417468b204814d761d9b2315d8c44ccb7026e6c35fec34e12422946d8f602d519ab10df97f4a91d147ac225b20c00b5285c18c366b800c5238564c53290fc6da1348ff36ad92b2631a4edaced0cbd329dc1541b9425da6765db30d950ffd27d130a8811fcd458948712fc88d827d9a4f442a0fb8606d5b63396e00bb2f85fefe4d8bb638ec0ec4021d2305cdd906c9e9e76f4610d0f721fa343f1006a9e0824b440d6cc876db46aad33f6d603edb4899925d541519a303aacddd91ea635d1d0a8ba434b6f76f19687cbed4045c54657b1b7031dc4f84e13ec99654d95cd1e0e5b090994d39c77e07a5de3acca700dee35060e22cc107249712a254a7544a412445c3452dc8b1d400d8d73c19ef2da6ce001bed7b1c98209204272c31746556ca45cd2cb70b4b791404aa6ecdfdefeb53fbc95f5f03571f52278def8bd752e3af4b7fdf93e2909850ae21e69572f9a225e8f614202cf50f7eeedd392d351e759f0a808443000eb6da221fb14c89646ca9cb1e19f40b122297e7aa8039e1d87bcfd98947eda0c5d4411bb080c87b068093abed262e71581c2365fdcdebcf468ef81e1df6b7f7eebdb7f85ec17b81e9050c7b57cfda7d2e66dc6539f942fd9a75ca3cddec98c8aa41e52c5c8c3bb530c3af68b08f495d651743b177881d8f6b9ea5c3f9b66222d13613812da54dc6d2cbe97b5ee2ba8c2a3908ef2c2bc645ec0b2875067aabff56da179c0b530a0c69cd70b77ea08b7fbfe5c894a34fecf6028fab0fff7d8b05fd77df17a60e9792a2c070baefa2dc630d14bc26d26c344376c5109a54dac9673bfbd61085ffc7f1075763c7b47f28a64d844f4b09d4778d559b39ca4dd12d6f8d295170ab588a9a333701eaecd16470c7ac018d1a1ccf6ee26e9394e582b94c27a841fa05161eae1c13b2afcb89666efc41d14d4cf63e45970ed18046b227604bf8353a7b8c0e53cc1070813676a6f812bdbe023b4162e1b7c4ccf303bbc102b3adc0047a40f1f8cfbc05755a307a9078903b3a3e0c4d07de2c429bf0e87c601348c1ff729f4470fe7e96ce33b1e83b22d1291210dc895bd2500de9880d93472ba0501b2c8905da99706364761d2bc5a61bf9f5b6f68d7d6463b7fd04bad8dd892c76b109626d497b9b421c8a6b0af8460ca682b2e34c98d237b7267fbbf3977285586758588e903c95e085012f70052447aa9f89a1b5d2c6d73abf637527532e4a830f82ef3d56a7bac24df278fb08dec69aaa653d6b22c0da892eb91694a3a79566c77a7843e9707468b64e72128e92d063db8e03af3e12944a9c67dbf0fac33869a59849ca737f6b8fc84c5f87d3e820d03c770ea895a4323c00a66f958a8642b5a9a1563ad2caf7d0b181fa5d2989fc73eb113155ec10c5c7a13f93947d6c31f6e93962b676eeeee1d134d937868607ad96edae84f003f714661f672a17542a7ee5eace7fa2b8eaef777af2c28b7d575daa1c2aecad2e9ac0c84a3d3ac2bdaf26177a52f9d5803398d0037ca0e84899fa09ee0bdca2b17cfb7c0a248e67354b0ab35b2b437426d3775e5300300807e15d8b07f411bc3e002f19b7a496be9069118026bb848d823ab3962203293674616d7a8b11fdd7e23e29f54fad711633f6382e7084debe014ed2828d81ae1d8b9b0fa33cca46a88031b1b5414974a2c155992c1a5093c1d7a2cbd9c82e60d594a96e376d3345295fff6cc7d881dc3dd169ed49301b828434cae2bf88b37c5c914160b54bf7a3c3339ca0b781def18582122a81e91bbfc01d11e5454f6c08dd08117fa02b1f56fb69f5680729039255471914c25bfc7501a6daf8ef7095e8ee58eecf16eee57957ab188e490d6638f7d43e15d3adc74f2d76022ae5d6f13605d3deb6479da66fea0e8b5447843c3f11f2066ed7c990147b836a471897d693ce71718c73056d238848aff69176ae6a0ffcc75da24d20d33f6349daa424c40c9538e173541d7d626a49f499812a5a2554461de584de88ac580239e5257a8844520d3ed06230481b689a410ee54b40c535028f05ed4b667bb893429fb728fd4436aa1ac316cecbec47c510015a44e5912e1cfabf20dbf59b09f784f50ce100f8a49131e52921a2b6b3674d0e507f92203156ed5ddb3b19643e1304bf4f6d35b08eeacc9487dcab36f27efe010ae0b4e786b2ae11059271bdaccdc01410d17c8e6e5101031939aa80680daaa44daffb6a14a2bfd755d30aa84f3ed99fd2959aabaa29312dc38bca233ea7f3e0de106741f034c90464bd9b487f20db93513807b93290ae1b057116054408b47c8a09fd626f943bd1e4f0d9563d9f673ec1060015f4b0639d4c377dc87443a32137a72886610fe74d36903db22fbd9feefd12fbc8774518766011ccdec0ed650e348c63e6af478a7fd3aa10694850a4b00c5c2574c4a6d0eee99541d52189fe92eed16af273e29b4c82db5419a0a91806ff3f6200a51fb9e95f505682866ba51c75a7548b3ba32493f18a71fff15d0ad09692f114c7ad1fc4b4f0e1e5c2a0a999162fd243b74b384ca206bf646038760095e570bb23b631ef49b0e79d09f0807a41ddfb937254b4b9ae9ece8f667bfc6348e159c72e90b1843959f131155d42f14776d388b093dc20e006f6cadfc32b82c6f5c6f05423165c9233bc77e699a47b16649e2283d29d50d7dd1c3cc047f68149089a22762049b0d4a48145169da648caa17367e85df80e94c5fdf25a8711aa2ebb085605887114eec8c7c0c357597d6003c9f9808131df7a10946341d519ca8ad08c0552545e65b995deea7f17bfc754b30784cb55a376ae58544caa5de8c24d91fc8d347f809c0419a644b498fb83ba2014901a9c13cf993c8594abca65ae6ef6074cbaed295722cffe0a7b073cc86bc23d800224be029aef21635b30d81da503e5d074308b49353cd790cb82b7062b5de449435f0b9c12e897c028f39c3779ed71b28b0d8a6c34e7b1f15b336ff10b08fcc11038f9fc1465832b9406fdb148b99e511fca4592aa52e8924f24217bcbbda59452ca9464ff054406f6054e3240bfe332ec5fb32cb7235c09c316045f71bbbe1c2f6b5ae4ebb9a74f131fbbbec39ec3361a0c8bef9cf6752bfdb561756a3bea4f6dc7252f568af2625849c358096631445c8fdafca7c59093a78c413ef630c8c7b0d748a5592269d906c4396befcda456ffbd1a791f937788918c86abc618638c514322aafca757fee3523cc8abb810f481afc3b710652df9ad56d69f3807bd89cfca7b7ce746b5c2ce0d92cc7f5adb115d2580dbf90fe4a93e775594bb5e694fc255dcf9564a39679c91f4e70c22f25e88596080b97d9e0d085fbde05fd0afabaf4a6a09684f7adaa65a61e726c33476705f96dc2a783972b8433c172486dfac95c5ab550cba727c19583254e2dd804c74b566f44e18211bff51914220a5947d8397837eb7fcd75249967f51541517452f4a4a4c4a29a594924a2931f91265030f29a59442db9c73b6ca086f52c297524ae7a9b873497fde97addaf1e1a224694ed29be6e934a59453ca39492f838624be2603e94d18097c12ae3025495f7a19485f2a3d92f824f8a59772fe9399d889f6ef86646dfdeb5bc86b5aea64916d94a5ec2e596257f5f143f64d89a4e39c3671f3f006780dc52fdf8cac4e02e26e3868b887a92014e4b0ca2187131841c288111314594191224d86103164480970b802071cb0104208048408290aa23ba2eb7a6e88e2861b80a8a14a0d359080062634d06047709f738d2bd0c4ed6f8f5281db7d056e8d59d5e4a41712a84e48acb4d6aa61b1eaeeee39e7acf56a9b8e487a37f56f5ebdd0a66af55dd2352c3c54dcf6a08c8adbbddea2858847ad73d3b9323d64628843647ad08f14e3447c24880152dbd13c6dd435cf55f3f25e4ba6fef63172617f61639410caf8b3b31cc138ce0941142ac3ad485482dba834a58d6abd1785fae7381a1a1c0ce0e1d831acfba16ea0402c1343ccfdb1077c885fa607fc2010d7783927ef681fa1dbbda1ea23caf92d04679cf3f77f5ea4fd058883e4208f20ee8a9f91d7f4ffc832189819337c94a65cffeeb97bc765771cfee29a9407792c3625e4e9a06a2f869a41a58f254cc21d774d2f0f794ef7c90b964271094726392a712eeae4282b952f66f565e62ae7227d1e40afe2dd8844970ffa8887cbcd03a468ca229a889a34366231caf8a2c32d3282aa4ae4ab9c9bf8ee42a820eb2416d8aa617686cbc9588eb556a6fef59a0bce81eca497e3651c9a8d6f6d4e5f17111c2230db9b203231d0974f4934064aa2f5ed85fdcb17865fa87ffd6594e3955d507b01c3301c447e171f0339795eb80bf2800c5f979d1d4ece7e9636e849de1b40d73aa54ff2de00e6f78d0e986d447072bc8944600c170ea23dede1ec617f6219fbf4657c0dcb581c43fdf9f5e7863d0d522b8da1d27a75d9cb5cff642efc82fc416e41b0b7b8cbb2972f586b1ffe851f62b633dd3a674eaeebbaae7ad1eb01615ef28a179c75ce59e7e5575faf5e1709ec9bb1ed18947116cd0002c4392dee9439c28cd5f943f3315429a95228277d45405ecadf02cfa6555a64575df3da6830195c32c7eb8618869af10d2304a6d63a6b705cb536cb62cdae0d059d5cd2943bf39f655a911df0a5cf70d5fe33e517edf63e6e9006e7dc6807c54032ad3ae72fc62cb7ceb16a3b48f1916293566083562b1f722d4f84dcc7833c8bfff8949e28983d9347fee4a93c42555aa7775aaf8b90a3187bf2c4e9ac678307da50ec44bc9243e17129d0c6877829ff22b27b09cbcdc506e7bc9df0d510ca572b148860e5be72236ce55c5a8ee56a7916d772b57ccbd5f22a58132bc502d99fab25fd51310ee06300a9ad080a222a43576bceb9e340eee303da780a3ae56f041c62c5b3e2e22b5fd9a01d6c77916dc9ffe8a81ac5d660f07a65e9e12c27c3127ecf46c473fe8febebbceafb1cfaf51d3ba15f3748048974171b0c2f7e1067b19c35df42166441d67c1b599115599135df4a966449966449d67c3b599335599335599335df52166551166551166551d67c5b599555599555599555599535dfc9f4f6127eaf6e7d633bf3f7adbbc875870f8a21114cf56f20e644cfb8908088296c60250649401922081f9ef3e01cf0dec2be5f753a49080322092a9e902406456821a189d985141f9091020c44e961020b2988aaf85020a230b20119070e1c3870683c9a0f6830a010103dd1030c515653007114041e7cac98808b1f60f8f9d11101122a2046d0dd301c6104532f576873ab95133c590203123f30f5ea8e228a9cc60a132c9e159f2032fc1a5ed319c6e467250991159f2352098ee01c69d59156b55a85d352c51e9c160f0e92dea15bb907c76be22be14182a333c40621326264718fe0b45a475aad56ab75a4d552020994f848ec634864900109121990c8903303121990b8bc2fe5f5724e6cbbf7de7befbdd7f604074a7c1cec2d8e7d6cd3d1def4d8a6633ffb813de97f90fe621c28f44918e7fec0fe629cfbd8dffb9869d381f917af6d3aa63f7db6d94de7658bf91f2f1f8371fae6e59f268198bf300e46bd54fc18ac0363d3795c5f2afe8b0d663b6df7be69bb17bffb52117746a4a9deed5e5fda74489bcee36cb31bb6e1f75252c6b881528ef4ec08f6cd703f5cfb321e5e13b1cbcae5c621ce551f469c7b2c5706a39123ce19f141ed43a9edc0a085188ecf07b4e91bf8e6fc3183737348e76ba8d67be11057bb7e566b35f23e27e380ca41e0f70ef8bdf95fe75a905996fb5bb85e03b33796798d3b1b72175f082ac3978f3a2725ceb0b84522840fb7989329710ed20c83f5a3814e3268934155d6851539888206327841124d98f0ec0c91dfafac10b683d7b5367d9f15dbc1edded0eb7e79459f256aed86b0cac40087c8f4880f23ec6e9fae799e784d0caa621fb34f647ca1e9118cd33f401dd4559c43e5d2d6b5129f257c48954422dd5bebd75a9ff0f163060a0019628d2406b5ed8773feb6b443d8d517ea05b1ea8f4b5c02078e216d87ebba6a94735ef28ad705afcbafabafacbb755d56d837635f8ece592700ffe735fa46d6626c9913ea5471ce9f2baad12e44257dc3dfb97f14aa282ac9ef2d21d6e049f138588483eced42e4e91b1e9bc019e1b540f920f220fbfff06cf87771490c42168236b50a411e21ce467e3c40de3271ef11f493317838e5e5e8ec1956bb37253b4d86a5c88e2f0aad64ff28f1cbb9d9d9198a4759a290942834250a55894258a2d093c845469e2804f36cf4ab6c6b573b8ca71f354edf9b901ad9e4b09465a42f954a25528974659b6bf1bdf75e69cb5e66b3efcdbee6044633e92694f4eda3bdcca27d2188fd8bef7ce52cf7913c45b9f39f4754254f4f7e6f636cee0d6344ec27c8fbc1bc0e8781f1957330f8b4396b7be25be692db4cb66ed2ac96d253ba4a67d97a505b8c81815f077104e39a0f5c90430e392061c4889128458a14f9193264c81138e080430b84081102a5ebba2737dc70030b6aa8a10623688812250a0d8aa815a84094285168807a9d39b4f21d2c4a66165517950a7681ada8c1a16ea13657750b0ea9609670bb6e4122151cea5677d9c1ede651b78456473147f5b672f7d48b9a2b6833e4ae7c60579daa226843538b8024d0acc1c441f68fe1a93d77750a3aba2d5409f768d67b309f8ae11005aa53aa6091e2670a411b590451eee05094020ea96038090435c3de965e7d0ff38682db55224c00a941e3bd045505970528179cdebbfad2039315d977cfe8be77d573f790907de8c5770f0b8cef9e50cc77af4a0dea6b0c9781e16514be6b2185ef68b214cf8685da0bf172609f83a27682aed7207c8b8dabb4a8a04de62987e96cff1ff7bffeed7b8767a33fd3c9bd6123bf79a6b1a5b0393743468673a818181bcc76323d2e4a3ce4eea2236060d4c4d11319925a8061b222a005ed7aa9eda8598feb33dc5d7fb1c0c335d21976e6d1033eac9b67ba41c9fd92895093215613414c09b783828a823aa8fd5b3341bb5748b7a094525a5b570ba30da39cad499fa0556253d20a6184c0c0946a705cc5228562d299ffccdb62d90e9a490a2184d04d722607afd5d05f8c9ea5cdba5b994684202c9ee4f8828ab0e4188ba6e498af8739bd98a494f2b4bd984c2693c96432994c2fdef42fd9bffca9f4a787d97476c8b9b90ff3a67ff12f9b0e2f3a9cbef4309b0e307fdfc90e14220bc8f549f63318f763eec7602450b0bf180c8c04caf5257c61223264af614e86ec5f609c9c201d430f7055aeb808cd46600e3057ec24cbb0099b4c2693c96432bde09797979797979797133e9d4ea7d3e97482c138661556d776ac2f794212e624c2fd01ca8ace41a7defbbcb2b89d5b05232e1572c6a072e7cbabc48db85fbee7dceb9d1eeecb2fe80a93dcc385c95d53c9efd978469ca6e5f6ffcb21a3c3ed973ddc20f26bee24ce01e64460f61dfea9d6f5d8e9f480ff542bd525d54a3d8185d601afeda5cbc1304c95adcfbfdb4cb5bc66fefd549776e1e5fba996ca6bae3b8c69184d6b96a6df586695af64a1ca31f2bbb2654bb69d5d4c6e907e29f3a9c86b4e7f32f29a2c272d5eb325e734e435f5e37c1eaeed81a948fa9728b7ab3b0f6383f998ed45e6f381dba52e594c3ed0e6c5472cfbd350cc26c30353b1a47d57ea12f3628bf189f9c9becb7c72fcde4e2f3f5707bc9b4c4f8e4f62a6e4f8d969284b71c7129544bf89f8a22ca49ed037e8530dc34460ae131ec58e32ab4c0bdb395e9e8d973dc618a34347c1c0d9a5fbdec3eff58cfc50301e637f843066524e42c0f28362e501d28e7d33ddddb4b5bf5e6ed7a55d4f354a297ded9a01fbf8bafde872bb3774611eabdb527eff10231d61947dd1cd877334388ceef51d0d0c2dc87fe7384eaaf0812b650e3153ac035e17cde4b34f29a5fd3aa07d1f249ce10e26b6bcbabbe5774b6dc715b5d8c35fceb484d775c9ab6557e7627471b1f7d14f81233cce5dd90fe7668897a48f6d45627e32f15f765a43b191ce13ef88df3f88eec602086e7749adf920b322b8e515a9d777d00862f15ce88751956df065c8b755db21332b336be111bcb61cb18a497814b3b641a33700b825c322e76a9e1b2c22b20155dc1eb669e14186ffde8d0e5691e1cb746227240c2da5a4f81143a26703e22a63753baeced4a8b15363a7066500248218767c37cf88b373eb0c7b3ad0cb11dfff68e8d980318e90bf8f64f871932ca836488466185b6a3f401fb4e4547e557884b22dbd99b7d147df7b306edd4c7c597e38487cf94e4aefe4e9704bc29ef41df6da5b6cabdbc3b08c943d8944caac852ff46d86caf405f9598418ee60675f836fe107b158848f7d8c1046885df02f8871f414fdeb7a4d862586b1d7755dd743f81886c1fa1d026ee61c44c9a7177e2fc3bead1ba55fffaa94e24739e77f9bb85c4783838b128e336298ca84dbdf4199136cff9bc9f6f9c8efe3e6dd1d69b292a7c3a3935a9d0300f491fddf16638c42685a090d2a32ce286ef75a47bce6c57e7f1b847804de4dfdf87773b2f33de24ffc9c8b0f084cc18d0212cadd32253d5445688a141c4f68585c930c2114e2a2eaada8fb28ee69bade11ea50bde35c56831b9d83f17efdef690f33ddde817128499576182d96316144619c01d576c84ed20ea3c5a4d0b402b3b693dcee73bb5f5427b9dda5591111bc9544ba4a254c0346b127f6e40e12c523a27b638fb3e076f1597a94958e70fbe5b79cc15e41b8fdf07ba667de7bff62c7efe1d978df1f78369ec71863943cf4eb9d67239ba24a73e0d9a04f9f5af8ef7a8529fabed51beb6c0fea9b89824fe5135eb53b0fea3ce8b5881a77cfe86d81840e000db152ddbc1b289d6d3937da966d1ee449dc77234369608a3e0c27dca72c2ab952acc339fa2923361e3045df6e21784216d32f61b9f4618bc2a34c292cca94fea3f43d88be0b0d514aa12a530a7932a5d027534a8332a53f037d4a5195ca9b3873a293aed837d3d9a21703e345f799a3898171ef0b140ae6df398ea6a379fd3fd00606e307277e50d61bfd736eba5baf5c4f38fa74209afea4f2117d60ea06574a8e1f7de28f73f109039c53c1e5817538773b70fbdf4d3499769c8b11c8e705d917da85d7375df39aab1f4d1f3fb274bc1ca78f9ffbe5a05f72f782fa45b17d0cd4355df03b9cbb1704b7f4b3a265641d3fdc2efa442a39fe93313e91e3472845bcf8f18897e37efce8f372bc7c0c5c78ef461793c83136916317958830c85a8c51f27751db6132994c26d3d6cf067cd3068b4a24538c2dc30e7b9191e1db226dc945495142a11c5d4b04f93061504614d51b28913ca000d11e9820f26001d074620926080179b420483249e230a827479e7ab9b63cf57257af104c781cb1728289168880c7939d1b2a843aa3a85491840c1f06b5427e4ef038b104881f341e1c386c30c28021288f8a0910f0b83ca197a5df7b40404040404040b4020101351010101010105097dbc9c743f6c981a025649740720b198419896415d95f1245bfb0eca9381261d2a337b95893db1f59d9ff5ac92119247ba08d5c423a2157f28af49153c81fa98404ba24d0c5721bc805e208f2e5539a6aa5ba687f6769629a4952c35debccd93d67ff9cda967d943f3fd5850555a75ab4f4f6627283d4873d64ae28aff9c61d0baa6c46ed6a8547f0083d1d34baf275c0592f008df2c44164aa55ef667f6c5322e77cb81d25a246dcae1265d1e998e7a444746341c9855bf27ca11ae50abb60d8720ed6c7be7a4d6781aead880dca3c438286a33d3b478c67434218e349887812c26184f0248443388352e02506b3637c1e648e30c61851cfc6fb213986118cc41c7f7e9db5c25313ae85458daf4a89c8de6a19d5c1ed6e0eea6be5761d6431212c5e33a7d758faf0211124825aa886d10b6bfdc4c7b91f1faf79d297844f89e8bfe4a55dab5bffe5ee5ab99dbb9b619ed33426ce713125b78fd7c0ae7db2149bbe81a2085b324465080517556e076917d6e80deae93a28e8662dc35dbf0c8b3b23f4db07c3ace24ab1068bf2532107ebccca91679b5ac46ad2ab066a2cedd3524cf66d2f95df6fcf46eeb4749fac8177441601d4c99d7e375b37e388065e8dcc9bc1655ecd049eed01ae7a8aee83a91dfae64de0d568e071ee43ee489ead35c0ca7288075d70bbeee9e44efcbe4143d14a749422b20ff1723cfb161f7998e20c3f68f183294aa5aa7f7ad54274ca3f052a231a89e6e920ba47ee748fdce9e939ba5c9b817d33768526b79bc9d15afbbdd9ad435dafb72ecbd7f5d8460476e1f92dd0f354ab9cd3712e7e00b6dc17135ca26d5ee247931339c22b2b34b9dd8cdcd5192a988a241a57bc06464755bf28713b68d4591a4118e3eb6650928da57f3008a6e25738c5b948a4c5b99835d1cc0a6e07892011348236174712c6ec0f575379cd8b1c1f1a3d1bf12d34b21f495ffaae966c77b00abcba1a7ef433a0ceb18dc888c323e7223472c205aaf35e2026dc772ec6897f3ac7ccb32d3474b8f282275792a042436706b5d65a4d48bc2841808e0a78e083243e7471f4012026402b8871026a278b1dbbb3839d182570a1f5a3258b08564d50c1c30a9a38c1400428f400b3240543500208404c60b9a93b575ea0c51518ec6c4bd0d0e1ca0f2bdffcaefc248107d60a218be840d8525fac08b5124f6c5cd0201ae1f6bb13355e5100cc410262acc2002f46b4d03628400908f0038099c44c2515a910631370739142695ab9fd0e21846eba259246f2ce8e78595069a20b952678b6a0b4d45a6b95e981ca0ba8dc0053613273145305a5f445952b60b4e08a972657683a0420045482945c91051527b2e418f95171420b6d8af9577d097fa0cfaa87e379438fe81db568bcae774e2fa61b03e3050c6ac67cafe79b734ed9dd3bbfc3edbcec165d29fb0d358c31db211b4fef3784c2d637dbd348c16b8d2844d4d63733b67ea9f932db353fc69cd166b31d3563b607e3c57661e6e9c574af39b10f9c23ad37040476378ecef5bf10214a39656d396b8f9c1c331dd837d35ae3acd22dacdd607c4677860ec7cb43b841e8cbdce1b0f0e5f9fdd3620fffc86be160b6bf638899e2d70167d7e0361aae068df5a692c66be816fd5452dcf305f7fac7c921dc9ec12900840699bbce9d2fe91b8d9d8973f34a115c38a28e9b61cb152743197e8d2b450865f80820ca8d6349df98ef4afa867c1d8e3d40661c998671401b0e87cd7d5cde921cfbd8f7dfc670862b0672bae6b0c71553bca46f481c55d91457a2f8c9ef4a0db2e40e6a91df152c55b22dbdf7f2ef4d5bd7da0e1f0f1fc96f7008a6fa1d703bcc08337a394cdf8f05e1e590f1fd9810da0518df8f71f19ad3f75b15b4d1812213f3fd7607dae8e8d05ddc4089f149ea0d0d1eaf79c1c4f66047d006ff86faefaff037db59bbe951901935aa34bb8e40b338d76fdae0db672f6ba1b7b517c9e75338f46cf447e07635f77b364a242db3d8f59674914c9969bb32de60164ff567b9834332319e6116afa92b2cb95d7577f77e4e4934637fd39fde526dc769fac94ddbcca64d66195b3f1b315b0a4e5478bcd598b76da7dea8f0a8ad08eaad0a9bce7f92bf790cc5f4a63f7d0a299852d83acbe02c336d306f1b1414f0a60365060a8fc29b7ec60cabf1781985199d4ddb0967329b937f195b6f78ab30e58fda70cc63189e696c3a504c4fe3ad6943a954aa7c552a55ae2a952a9bfec50b92698b24133e6db4647ad3eb80a6adf3c58c727f89b4f9f411b65d5bddba191de96ae812e1befcec2a05cf8aac50e5cfef8a1617a8648613b51e30bf049949a844ec58cc72d6311a0000000a2315000028140a8703824028181a922dbcf80114800a829a4070549bc9e2498ea3280ca29021841040002006180088210c11918d01000f5fd65e6f8b921c4f91d890e328a840a7cf78093c0427db875a14ffab7a1b05955bfd95f66e5fa89d6527030462d092c8dc256b8bf24da0c067869cf09586f379e2496dcf763273142ad644ab76401853b47b2753af6050f8fb522a09bd6773b90ce78ac9236e8b38388241187d839911c2b8884464691c573db4e6189b8c1742b5751ce7d2a71cd933dd49b5fd683036690f1c2d4da741a8c93651658d896f83d7e83009e11b0be1eae065cd4e72385e93ee3620a269b468604c905d2481c0e4be8c3483914922615d3cf8101219d31774cfcdcad496633804039e41482702ee98c8fb2b8b020d9bfc0e5202e0d12d7a2848ec6d32a3c0ab24c24607ba66396a176f5f4505b3a27d4ea974f250601fb57c5b86a2b552161d4e6875d69d43831d5c165ccc547146c290e328d0a6dc692f703e02b4949ce9467147a9c7be3ec4ec224fd3915fbd49604616366558d72daa7c126e355f9b7b618eb49d521279ab8190acf42dc1fc0e69538427bea434ead37336cb077ec1b8031454c18c96c7aff2d85ea29087345f258264c048150938ee063559aa281d44209a7ec852ba21422ce54f19e7960a87f02ffac34e4d97336cf34942802f39eee3481d3b879c28e423eae646f4d1ec49bceee4d6f16ac1f4e295d7a93d42b1f247fe6f08d76a47117b473e40569f22b2904e143ffcef001ea1326701be9de57e8f0d4401658d2490c3209cb70303c83702dc96f350eddf6b3d3388f187a9301d6a4ba4c80cdfa2dfc6ae863ea23ccb77bfb73dc41644bb53d97d05439a3d39ff4aa87b8c693d4506f637898c42db071e170e89af1521466dd797b9acf0277a6d6398cac364e748c800fda474a298f1b92309c77fed1f230fd329ae8bb30ea75ad075c81dbf415165f8d935260255cfdc629d26682f0583ffa48f53f42519644419026031984a287d3eba8c9032eacd508ad16dd0094567aa67287e18083b2cacfe36ba3eb02bd4c641a15a1d80306ea751acd93655ba5433dcd42eaad82b34d2febca1ef5fa1a1bd601c3de8d6b9a779363993cbf5ae4e44379f3cd188bbb8c862538258be881bba24107ffd66dcaebf960d38f4a0c6a587d2d81d6aa175d98edf5c721994fe27d31229eb81c9c71f21544730f93d35621a96eda9fbd7417e22fe4183fd079ba73c621786d06bccdf9e36628cda874ddb895191e2e88d1965dc93893d91d0cbc7cd60683e05ad07253ff50e666fa06f8aae433d93b28f84ad850b319b4511f9a41b78d0a8c40fea0cf076bd3da8bb6a1153e1554dc6a7b8c100805d2d0e662360db3c6f499a69fda0c4d5b59effa44660f2db27d3e1a12a7554745c7f9cb7b511155b3bb5ff87be8afbce102b29948429d242a346fc92435916a23aa637659e44f8e4bb0221bd520e3e1f636cd89e4f4caf5cbe3748b985dee4a2222936190dedcf0281f833d1fb0dbec15dcffc4799a0bf5020b7b728822af3d282a43f0b7802215961cca2580209807801a69f352dd258e68bca67df18faeef2dc223a02581acbd40a68794b7fc538381947e598dc88f8d4988e936d268572b0169040b47e5487e4642036c01337b41e3322710cb5601f1bc8fe3b4cb8b1fbe25caa94ae50ac9973abb9691923c5439955ff7c7d90488c9c86b354f599fbe74847a6a9a666958913eb88fc240d276d1fb07609c4cd34e443bcee56dfce48d9df4fb11a3601a8f88179c405cb681fa57cbbec95250865ccf542cb8b86602e2db9fba78a1a7309cb1908c42200539dae5824e01ffb9f3fe115ee23aaf86bf0f74b50afbde341529ebdade79825869f7bb250d149f4257a6188ce9680305df201be8c31fa9dab8c604f2194489841d2095c12436edb2e10f1f6fe2e365cc2dbc47dd331301edca13da482a6530220d2143b79a3b75cc1d59ba13b4a91361e94063d26cc2554f3ba131c8e7215248b0889641eb9f5d29b87fb59c3119b16feeb207471e250b05d0d93c0bc112ee16a07f59f65d6eb5c57a46b821c475f9d4d14535f52b11d9a2e8cba3beac600a49d638461ecdb23557cbc92a7ad59ce528387e920ae54c039628f322881fee6f27076a5b4a6bfdee36209715c25dd4bc38f3be5e8fa91ce0ff77ce70bc3446c645d7661176de4d8c45cfcb163a9946b9bdcbb093118b302b3501b2bc4faa26190c3163bd90903c6809ce4c112dffd59ca23aa384bbdccc6dc4f5d0a38e0a94ca0d0095623ac8f0abcbb0ae121ea94a8f773dc6d2ecde449961a6c7001a068fb5e3e32dcb628c517a8582e3889cc464911089181045a4bc68cd8ceb188acfea3e26dd26aacb21449a0b3ce7a9748bfe5b1992c70af1070106725afe16c7afb49193e39273a8733f3ab356284d8163a27069b6c0774ebbb1ff80876640711605e3ca6a31110ef28e7b4023013515f8938ba0c19ed149f64e819167420c9e3dabe99b4b0d89a116450ebf2e0dce3426989a7f7d58b7c27a18053a4d671c9dab9e1f72164f333708940375e9415ad1a5c6c619baf631bb71c68e2eea3e5c54ce2cc4a03a9d61e33fccb55a815127f997197065244da527339388ad1a1b910778b418ddf325ef15611c5d664f194b8e18444f16ab646854de0122ec1701e13d00b717b905e9aacb76456e004d81a91698b6788a811e92f49763034926862d911b0149d7364ad33770c27d9141a0628502c4219b196df0d6ac15a47293085c0121e5b8050816ed37458dd446bf25a6ecec582de939803ec39e54f46f4ba7ba264f210253a8d3a49ed0be506bbaeef809c821ecb440772cacc799040d50c23d9b2eba57ea73d86447c7efe03a95d2662111edd10c221d48248201881880fde83bff0a909f73f471e6008afc926a19ca9a068f27c56dd10f0a1fe4d853116c83f42b79ebb92f1e59e41bc399507e454ea038cdcd1eea885d44627d3a45ab69f38a47d19a7c1693cd07a24764604ccbe1cd6b2486c76ba75685bc249701f0f8d561e97895cd571efaa4d71e7dec848744207167cc6b5e0fee7f2d91b61f058033e16a9c9a1c808819671008464fcd8fac566e3e7543df175c4886a07f8f164bcd631890953ea0ad2c045c1f563ff46e5c29c2ddfa058fefe911b630445c6a870b091f0a7f4db1701458f07161810bff45e9be9066910d765fea26db174754f12e981ccbfb488f546cefcdf6866b88cdd383351dd22879f2248f9671d20f0c797c450426ced738a8b5e4fd16d0283bbdb4ff99b9416c12d398ed916bcf2e67c5ec13944b26cc5e7092f37bf4c253ee102c4f64cf744b2e07840682c641e4a904d3139b8b878c999b6802e16d408acb9e484a23ab1c9115ce4083c741051e7e1e0c28441e39437979713f63039479371cc03b5bc52f36e716c0c992b733417c50103c2465da8275eb765352761eabc06e93233858a31d581682ec89f7e67e79cab19e306c0c508da6f4ce950814723afebdf6687726383fd45cdb9201fc401baf5e5d86f518a141d0378a81ef933e38f9b44beca7a005a775c864d9cc0cbfa9a145453cb3b2e88a3b72e6bea7f2445a34999df59ca8df0b88c4e0c27719bc745391d58e398858df8eb3a09e3f67ed39389a4f0b8fc7f984c60f7ad8d9cc785b94a128261e61efa619984b7b57260d448eadee1f02873e96ce79015cc5cf805fb18a464028dd24f7da884dbfaa90e73c365daa2a41bd3e8a2c68a3955c3d559a951ee94f972ef7b8febca1d0ab0665f863a8aae5abbb0f9c2cbbf0d0778810d09e28bb2106a281f52eba5aaaf73ea88938f43fd5c52ea9b8a33d7c422714781956d9ef22a42d4c166ba87d9c5b056495c3f61e80fe07d6cb281f632a8ff40da307785606e4c3ea1ec1d22368bd0c8a38ec71cf41c715acd3cee0ec816116d9e4118d7826da4c5fd333c52cff23a81da9cba22dfc3323fc4e1a397e5bde29216c2aa6e10659d0da5a535647efbe53bedff686ead73c56ec8663a16483054c0a7331dd5abdec3ccd0b22527ac20684e74de13468bef5f712072eeff398ec69b55c60786eeb0aa1ab7938d506be4409922258f078274c21e7cc677da61ec0446342583d3c4e51af336277376ce97a26c14cb8a03929fe8a951c93b8d3396df185c516abe915c0e35ec9c145ff069f0d4b85a9459b919f5156f7357bef80aed714d2331882b421962b781c1880478d5ad4bc06ef8e5095897166ce98d195731924c55329aeecf284087bbee4b66cd4e403889bc70f66c0cf2f56a10758e5b36556bb6cb38bde09453f0bb6474b235be4117e6d5421852f433b0f7c117f698a96551e6a1e946d59fdbc21b2510571b01f40f51c4fb82a2506c5f358535aad37c543e2c6cb053707e783432f22450589a2476d99147c7d4040e239fc7602e9117e9b29925fbfb82f2795f92b57afdbfbc658c536ad122054659e5c3c52f893dcd6d3484ab4f2f84fbf33b442f4366827fa233f92f5907637b3e48d3bf58ea5b0677660037973803c5f0b277a9c8135e90deb491e991cdcf3dd0338ba69f82958ecf0ed297bc179c9baf925eaa367a7292278981d31eadef792682637c568cfa5aabdb051d9596e69514481e73a8640156154536ab26963e56345689a1d588c1d52eed55b622b10698bdf056014ca7d50d1409f9be899017ef81d5c9937b1dc4dc000ceb7aecb2ed6a51751f6f4d8fd2b0b14d9f2b073315c201c8b66a655509addfaa8614ecee79bfc0545fb186303b4fca3637e96ce90585b8d369c89f5632ef89a25277ac1b10dd6cc87a3421ed90a3a7b25432aa0136bc398f07d4f22bfcbbd8ffb971d7120bf77cf7cdbe8739c4cf0b80e5cf5d4465065ed09de2bf60ea51ae8355f172ec5b94ff3ed44587a183f490f4bfb71b2479ae69d33680774f0444156487f2e193774cb6a1044626deb49ae397775cd454c572137a8b51b43f7e95dff557c19ef8a221dcdf7026be28bc071f3937042199eef923bff817ed79939b9f66a2d1e7a75bfea620f09752551b20f4096d3d4860700a88242efb530dad23ead39ec4fe0fcdaa483ed8e3e6c598fefa4de23deff38c85a85e1488f26cec0d1d3aceeb3535fdeadafa0726645a383f301da50b1c7883f2c3a489ef33fc68acffce2d0754082f70a2c569165a2412463f9e02af6f731df929f0218ab4063ea41acc8ef6fb95cd1713683c22fbf7d3c6004ff534aa57d6524c6fcfcd3db5884cbd27228086813e6ff418fe806e7c498a7ad741962253edd7d564b47a7d94f6ce546735e574dcff20135973c1be675530184d748fc8612b9280fc0f0542d5b44baf2328685c05eeb6db25de44df92f8102407ff8e00db6c03a3ac848f6e740189cf9bcc34850cf92d17b017e0da2c2aafc00f1e69ccd458846533a220c3b115c101a3114e241040eafda3aad83c1118cc3a1643ba1468a4907fa547bbe945ae3084e41a5e92e767b8372bf696a180a64ad1e8fba1fc3977c00494caf354a56b08333c3952747303d811e205b60e2b4565fd00124962e5ea08519f5d19182684b478b69665ef3d35c7659dba4c1acdaa2521e66d815f3f8ce710c20220626a2a27260131cf0042aaf441b94c73423442e7acd071efd7be404096f4c93aed2b4159e99a029df2e6df4f5e5c869d4ceca6df3cd5138c4f590026d1c20921d313f2dab9604287bacdbe9c5e8eb53f4034a5b6d7f324cc3de0bd50732a5c2a4427db34f40fdd8515eb067a93a69aedc390ac94d691d0943e128574ef564bb6c935210797fe396b0c5f4d203fb3dfbdc00c5635d9e93c5e25e909818b599acbeea28c52c93835a8c72dba453b5b12eb4738a40f91e0004162b9ba1b3766dda1ae5ccd4e41b256ad47cad0d4c3f46dd22cd30847433a6dd8790a85b70fa52b0b8409da9de951ff6bca85c6e3730de07bbbbf52528a49e1dc1ece4a5a9fd3210a867197e6037256f2ba4f65de53281b3db2a675d4c2191bdadd70a614ffd4d6d40071d0f82266be50a9cff4225d224af5964925f537ba46f25535e540e6653168439b11ee9ba9fbbc91ceb1794100f1c6e78be1b49c7946694e118774e188bdb88da1dfc1d5f895cfd0e16c52dfb2b0c39eb9f1bf8e72335a895779d7f1fc47b22dbe161db3b9129892584911678405d481bee46c229e382781b922388aba7d9bfe0df5b82114e98d7b3d36368b313d4e6e3318c7a00d28bf95b2e527b411eb2ca800a3c6575a258dc95f26856a5d4ca55a6051db9a1a912745754618519270223f288205221eb0fe2100fbd72109fd973fd223c975bdd1a772710e08802f4142bb0e8865d8d0cf688459f338963bde6bc5bcea378e87140b6a4ccafa391897ac0c40e6e8719445527467e870b029369c8ceee363cf3b27b7c37e74e028968f394ce9bc2d01bab10bd1142b3fe946d322558938fd77d2c975d320ef3f2d8f7e3dd97b0cf9e918d4b7a3a5290e5b7e0a00a23cba7f1bc73c8cf4656dc1450b7a9bb8489883fcce7fc64643873c2e4bfd3f9b800213601cd390c656908dc6399f8569eb35447ed9db0e8d0e657a2e9e8f05c5e1cffaa96e0afc35b51cb9c1d5bd44f161805efb67545ffd56bbd3204fd0ebcda6639e5069fdbc580082a5b99deb98b960cd852e98667b4d3d786cbbce8e6fe07f1f87addf3052103dcf4e6cfdea249f75aee88be1fc22d6d1f8892d40b0f553c6d2280779d4f24242993fe3c90cad5f826ce047e643d7f3ed3c77e09fa4fd7be4ef93931de0c24184a13d81e20afd4d418e01bef3330a0df66b322e054bd26a58f97702c856984ade09213380d97970e2404d5efe505100ae77450ce90645e88762bca572bddca421cd48ef9412c20b1eb113de441d17cd963b7d1890668deb537483d6af43d9c8eed408e6b7c00f1e6afc06c30e292876140ce318ff97dd09cce543991f937ac51be8276c155f5cccf29412e5537cb1f930d71e2760247354b0b9869b8cd2cc22718d8c9aaba41ee539f271bb723aeef4c26181eb15f8499210b2e341d35467881043556ade99647026703bd4ff6ed79b38deda8d89d851cc5b1b25c71e0be5beb103f742586bfef15dd479944dd83a41a282249b8374eb9427ca65efadc76af620d242af63097f92397d62d96050972876564c71f13350c6de6723081f937f493c0a8b3dc6e10899ff2fc741f989b31641389d91f47bfb9c960df91eb196244c488739cfbecb04a1db059d571868aa377de8a9aeaa417f1c1d8335a7162db8e6a60b03e67efbcc88e51d3ba6b382d923f573697c8e75c2892a30ce7008ec037e803727e844ea074ec2a1936261c5a679d15e33907d3a4e22fe36c06c3de68fa1c5a05f2c38f0b824fc8f12edff783c11ce7a35e28a7ac9802684d198598bb25e9868daff7d761ab9a59ffbb05b2c771a52c7b142bc16a750ea5597648360bc6b7d30a67d5fc91d7d17b16ca60563f6e063458ebb991f9a414e43a97e1d7d653a162500474c334d24837d64fa0b4e4dcf3a66037be70691d4e01b2297c20a57c33ecbc34ab673223417e73bf9f400746680b4d60e246de1ab508ec9d6695b0679c4c224d26ef53c5dd2fa775ae6a1184dc794d98cb2b14774c8b3700ceb353ba283eb34cb73626eae43ce510754b5184aa709491ad2114b88b8f4e490437085312e9c7764cd21092149afdcae26b8f862685ef3762ac99aa0b925318c4c36b676442a508b2ac15e36c4066422350431725aeed209954faf5856fe321051d310ec5593646b73205720b164c8ff970d63b5b0242cd444447ed300b82044c38a24c341d788ab4749907816b93727c39e7c3b2fb51afe5c2b8ffb420c5b567a8fc640928590854f7b0c00a77814f21b63b3b616236597bbb7a7474efb6954353dcdcb23fa8082d999d98886eec1893a1514cc7e245f46e99457381aecad470331e1ed8a4b9948868c900a8a5b4a6a878cd163dc88c35ea9a219df1aa72963476adc1a76b636c2efd7a0a3c8ae2f19dfc2ab05d3b4eb4529b7e2081daf09d83508412190d1e588862aa700ec8ba07f5db21b10fa1295443da0990436802bcf0098adc13c8e88865994630b62bedfd58c49302b00900ff53e8ac5fbbab4aeb1bb6c0567438bff23fda379c7ab2e141964d0932d0090c07a2ac5138e262002b24114c162d295438d13dd4d1f557046488e602f91349da284f32ef829c4fc6251e1f2cd9ba81795c1adbcedae1b4274021ec527995d6424cbd6bceb75eb5d173579d5a4b9bfe6ee990809cea670e69096b11908a468c634659609d45c0e9d8106e852afe6682b92a120f494a594a6b81d7d3262d2f256f8eb4415583df9f209deb35764eb159ec5653d9a4b09c9deb982284a94b293da964df76a87a017e7d715d13151977dc4740400dd8ddfafcf896123655864b42fe78f8c03f9aff51dc2da6e4f0d9c35eccf17da10246a8a65a42a4a0dfb34adda1d1562a353863fcf2f4b986e9f2a5a07ac1f3e3e0b4f9df05e3fc0da1d9eef9ff65d94380919e36d341db6e64fa70fef5fdc473454e8dfaea8b34c6ab3fd2cb8b977ac36d872edd909665b70e333ed37fb37d534042e92a8654fefb992909a7ce654e1759f9794d572ecf148c5fbb68783cc411e7c77f80048478420135a96a69a92e9757faa0cefe9d367f5c4a66cffeabb636f8ba32a92498cee5ea1622f923a79119583920d9be4d0dbdb2a4092a3a7feef4268934d64d998f4cad104e280158ba8eccf7b0f62f03a738393a63e65e0d42edb89a9c721fa98ba56db3aeb796a8988f6488f3bef82d56351cdeae22e55fadb5f931c2d7528f1c3523fabda0f48ee8f8e106ac409d9b75236f2c295a3027bbc158e48cf74b98202f32165e15ddc2a794add3da3a4ece7a87606e50ad10134e7c05d22a7f0af586dd1504a5b961c14364e6e57ee4d2289f4c715cfdbe2fa80dc44333c1e09f234e9d7f261c71322a72aeda6568b2ea1d7c48556956012911bbb087dfbe258f068ac3be67cb92b058793a387364f7d027e4fcaa3c898dc6a227dc12b51fbad6cd70f09054e33441618b1010b41bacf0ffb537de1f2c37920608d6fcaa2693c65110e319ac8021d08e7df11f915466cf526443ef3b1a515ec2781c3b98f21ee7756224246d0d8afda584a76dc1015d0ab229eaa6d3a14d0e465cbbd94184a4e5cedb2448593004c30b1ae7f665e30531bd3395aea2242d55e52df3d93afd9eab1c156daa2809bce9b588e2636cbaf412879c5caf1a0cf425cb4a7d7b2c6522659b0bb6c0848ac6d529fda969923d5381b2030e1f54817828f69c15a549c7d46122e875a52080ee2ccbb678190822b4de527ab42e3bea6aa3048fbca7445f659a9a447efd5a518347080f99f91d8de40cd6fb6bb77587cda4dfc75a0ca6f9376fc5c546b5c3a79a45a3db5e3a28af5e0275e4d1114c0b4e8f1b761be5822757cbb40c4732ce65103d817d2ae0e902a748320ba334c3533073ffb73f3e274555aacbdbf816fc36241df209fa0c1ec087b2e9e61e20a2d774e5db4f382cea6c2be0920483e2ddcad4564189beced9403c0a5ad18e2bef8266e839c23a3ef4e5b22efa9e69e6a137c6c536ea30d3ebd6d325f38d9c050426e9704dcee046930f6544b5c02719359998c7904e77001761688e15184adef8f8bea85c0aad0ad0a218660bd5d74e06d67cddf6da8d29e6aabb03721cf88e8f4230857dcb36a5b2ed65578883c0f9d3681723f0b6873162478f7beac8d5c4c9eadb2eda15e4c1031ef6042ba94f49716f86acb7fdb4178a9c6dae0ab275dccf6ce5366af6002c67ce77992caa11403ceb1b05504bd8d7464ef34679cc9ce0c4765cdd3d64b6e88fee155f2fa8ae021cb519760338d99a5e61d76ba171090c55e2173750303993180caf440b1025fea8872b23cd30bea32eeda23136cbe357f68ef9e68c18e3f4f6cb7774d489d9212f9377e6533395968d492843980fd116a240fbf5a846608408ba82b96960e0d6b1d243a4720ee4809159eef028c784dc83beec27b90f5abb7201910e9da5c7ce80e7ab4d00c618a382b4b4648281f4d5e0191f4d0482397824f3fbaa7273b68013a573e94bc7987abe6f4656d6738d9fdd0c3eba160cd3cd6caa2f8b69bd11065c808e54a5f66b2b88356fcea00cfce7a58ebdc1718b2228c9ba1d8348f7fe67abf11f871b4316c097b84085fc93fe915f263da1013de47db57365c838e526d038dc8813bc020a117c62afae9aa12873e34bd748ac6bac7e5c2bc7d21147bf317e54b1a885e71819bbc71928d2566661662217280d03e5a74782ea0ecd71c850027a6638cb49623935b0062ad7f4309c60b2ffc1762d5465a64b16a3d5d45a4ec71b2f9a3092e7d6f5cb1f91ede760e2fa20a1113815ae4b91004c0f2e0b9b0c829d1cab3222450653fc15b7c61a430fe6957c01c21255ad952209194d6810af9fbca2eb6b2c7bd4c9d4d7c1d51f180868b32d55d6669f7e410d5f1e7a416d4c5b2f79836965c5a559d50179a1da4a5aa53b3ce0f53af474eab375fae431aef01eb6d26748fdd4fa8fb0ba903431e88b54602036e3aeb57bdbcb565f8fdc40a7eb93db7305faa7bd6172b585fe02d4c02df21e0c2819be2c0f90d8410c881617761d04912f52d4679f4b377e8a03a52181c6e9fb1622144ba58d8be4a7504094c9b03d8286ffc6ad86e5611b3c80ed9412049c059b88c8021aa06ec9999099174a81650be7b89eab06d546d1c4d892add55f2f247419660c612abb8fba5403538dbf3ae9359a0247eb25ade7bf3ebc6d32d181fd44b935f7844b7d2446f50f9227675ca5a306438afdb45379177ccbb07f943c49def4caef4b7255a9e57a99931de403a45859ee28461bb7de20f7037d4edf35fcfcf8c18f897528a3fb2ae674d8a4aa9048e7801cd79d6d8399d89af1005b730bf7a992df79535ada06c06ca6754d0f419ee4a9b9fa5e10654be6b9a1c23c3e017b89376c223a26064710c7a4a6072d4f96af4ac120d64f34b303c7bc8765241cc1792824e6a769d9206518f9c09097e82e2c7db104aaedfe4b65d56dbcb6b447aba01716b905a38314edfb79ba954aa836554a981a51f98b6ff746fa921c069591175557648bccbf29f10cef7a874cc23938a36acbddb6978cb42b9dd6827935faf381caa433aba2794de0205ee6aa14f2a46612d89ee5cf02f1a8b124676d8b883ccabd9084d6604a59724e36779304aa5dd45a102dfd904d16e78c85bfe27c027c13059fdf3942e1a6170de31bc454ab1f1d973834c4dad29431e3155d8fa87248e7f46f285363964e1ea117f275c4decd5c1d573841e05574195d372cf4ac1fb2ea27a26b84af1ecd77c8c255c373e482fdab481abe2d220cd53a3a0a1d07a5b7760ea6e6bbbc62a1bbe9cd5d08156b32e5138ab7d38ad1280ce160e20f0f7e2ac0ed70efce623d6e3ac76e7ac66f2a580ecac82d2cad58a64a9dee87898879fdd8fe3d50409d2062fe2808377342a5058a289db5c7588d74af16584156775b4072a2a44adea27a34e3292756295a423f4fae9799edfd8ae0ffeaf1aad6d83e7f87525885b1e5b8dea9cc3a71452afce1154143fe28130707ef5c7004b4fc3f20eafc38264eb3a47608d1299f20b4aa7338e69f5c8f1cd3e6cb2ba1d19fb4b1a79e1cfb8dc99bc385f40ef6af6d9b9079e4ab486a1cda472015c78fc3cdd44281ee8522d62cbe75d00504cfdd47f5a569e00fc82c12c702ad5e5470d8aa86edb5cc4313d7c373b88943ca7697f3021e0ba7874da8127efc70ad49423beda7a4f142696ec74a6f04ffdcbb2f20bc02f98058d9ef8485392f8a891a7ffb7154f23160b4fcba59ef60d26f90a99b6928be3b118c8b11454f72006dcb0d4b2f65aa2994c063f478ec0a0208a0059741fa4ec9283d1fe0f54b57933b521711fe3fea4b00f21ae03b789e876ebad6e1e4cb23507c94df1cc33a9b07aa1afb718a707ee6ff57ccdff216a5f41ac8ec2a62eee103cd827330a4f80ba00f358de8cd8c4b15e7c1e371fa9b79713fbd1ed79de2ddb2b36415e40e216025638df2c1f6d8d3ae8ab7facc62670c0e4ff815a9961fbfa959766b9568c7ca2c2a53ae34f1253e856b8d024481b079a15684148bacdcc23ba9e95b472d0a9c1c9b100328a5ccfd5b7e30ea025ab521710f73c828f0b845cc05839846b9c3e6ff7fade46b163a3f6589352f7ef80db064b90e72da65a39d935610e1022474ea3648a8b4d96f64a85ce9954cef7a32b74c05fd81b0fabbcc39a8ac480f9e7d427dcd60718183ca6272678f541e0455b536fa8631b287e86c21d5bcc6c503af0cbb8fe0570a654c3c9ccdcfc8e409281fb02b46793548805e9f89c9d9e83333f50fc121328a4f8da9ec990ee92500bde4bdadc6b21fe5a2f03218b58cd335d2df07f1f679e69283067730024f224486ce61c150ea3338d87cc4b8fc60495ebcd93cb3facd69eee3972dba592d9c3bf8d70bfe68b4fc6719baab421b71ebb556fc0ae49ffd4b85c711c5f4da1d67d81ccdffc9865476bbd17a22a3b77e90a39a8464c547a16337e2a8e7d7c1cb88cc420eb6b0b398a008e834908ba2ea7f7a0111b4c83419e3c5d00fce0b639a279c5eb600f1a45e5662946a6986346ccdfbf35bcf2ff644ca104a0ebaaad56946d9975036d8c0dd417993d58bc3e57f202f5450bf54eb0b16028b7b219a40e96cddc14e229fc0c629d34cfbf1c21b133627dc5c0ff85bf1be6f611b2e7d29bc48a586f4953810e8407e4c99ad055962051d46899d78ed024830529f6c6cf62d2b669814dcc2e8e9bd0a27623075e5efd73d02aa08e40ed5b06ab3e9500ee40856b1efacc8b0f457c7cd66a5ded3ab9964fe5595d069d9175187a8293449539bf8cee2209ecdc80fb18f4aad49ac485018c041b0c34d7b6c1fdec7de6f45d5eefd5eabc4e1a3832e6f038af469d717dc1517b8426c0e3e9f56a2f09ad97da5017764a5d374514a38d0288064fbca1bf6d66c120134c120ba9ddf5d05e701bc1cc244577894e6460aef8a71932aa644810022b933443d7dd7a29d3eb61d74cf106f852599f631539a9602695bf0792bca5ca4cc97c94f76fd63792618ffd73a1f2c3391e4c4c49774416e44016021579b68bd6f1b71df86eeb3cb194e89322f9583d5ae8055784c3cf98c2802c745a3ddbb3f281af271eb00701b4266d324d81b6fe88260a0127eac1cf03ed7b238ba8afd339f12616572c8361c1e48fa7037c1726c29b1cf074ddd4c53531baeefdbf5d1fe6037f774dd18165cc47f2504240f621929f036c57f68351698ce5c1b9dc441ab9edc6d62c9d6940fa638b02106e65b5985e99599c412d59e7a40ce5255ecc562af00160ee2bf717b416b3729181052426c4ac1feab9675a7db967c322700c6600e711c3624bc9ee86f3fcf561d0e36a6cbfac7dd81eb8612fd0c452572fe3385477f16965f3b84d870bd737c647fa0ac2015af9e4a460ef43e7e936e98061d60a481838fa707179a498b8c0b4fa11250d333cdf0c2333d6ac05414aa4e3e0445a89c6abc202148b0296b75752b6c792745bccfeee92b5a36b1ca3dd9fe289c9e1b243137e7136c0aa26b8ae9187deab6866368c8a9f3a4a20e5d1955108cc921554bf76d33c91d78020c7b8371dc83c06dccaf0627a120bb57da0e0eecfa22081dab8729fbcf0139c3e8ef4da889d9d94cec7968ec601c544790b70144898f34f894545199caf72074fd47bfdb011aa35cf29f64f9a1bacbd1b92bc47be8a557c323e6642de73a4876195bf0eb1b15db1d0423fdfd9ec5d489ef8bba61208a7ec5561898db42f57cef3e07e37957b15e821329d6179a6e40409de3b2c153cbb76177542805404be8294af32365a39e3a1092ad48021fed452c8187fc1aa6875220a8e1f9e7306112ba3f8e62e679d4ac6ed58d6b0c4eec08b6fc3756a737b9dd21555c8030c127b407f2cc38e6e0a573df47e6652924b275e38c0a6ef38eadaa0a082c33074d24d30657345e414f03e134d7a0470a3d76f35731ee9c07851b7721997284747b6ad06e5c856324e758feba86c1441db2606f40521315d510e4c7d2a7b430c5d530898b28ede45aabff43ec9930d2831782c5dc31eb36b224ed40975cd974a974360601de3046fa9b2fdeb32f04b2c153780c23a524c6199a0b418bc377c8b0e6b684b910c8ac76d72ce4706daa4aba637c5ce2885a69149fe9de1f3985cc4467226184fb5dd2bb4fe122a8844bb0045fbc13161f3f16630b0b2fb52cd8f82ee6ef0705bbeffbe56737d3196bc4912805fb4bc81f8b43ab1ed3c6ac78fd9e03701f24712a5debe9bbf6cce46b4dd4ebdd4845ef52ac09544ee9950c180d84d5b4a895869ba735d549b37514d3009c2b590c597573c0ed2b941673f651219869cad4c4d87cf5f21b487bf9126517109b0b46255a5c3b23f4cc35dcdcdb0f48569b957b90dcbfe300d573537c3d217a6e552e5262cfbe135dcd5dc084b5fb8966b959bb0ec87d57055731b965e615a2e556ec3b29fc3b8acfc49948f24fa49bad1f1a6d95d892c3c1d6b6ed0b60e8258aad0e9863ec91b24784347a5203ed33a183ec911ccc68debce85a291c6dc3f4e0477a1e10cb27976d2c64254037e450614c1ac8ebbda77029d0884b05853245b262fa39881f81ec9a419636908d5b88e0409de75031943ec5840483be1d8a9e57516e101170ee83f0759e2b6856f0852eccfea9464ce673546f5d7943cabb6e565afbb12c9949ad5d8a0d06afeaa5fd79a781e3dfdd3f4cd6c0742a6bcd4ed1d4cef7560525e554a4ccd8ff70ab31e9755201a6e9a0a1549bba1486b402df4b0c486142ce9477db0e9965d10a16457035bb80712caab1747a53f8a338544dba4a15f3752fbd7423e366cdbf5eba4eed5a3c88f98a3f2a86114bb8b9f118add0ff59bb96e692bcd213a566d1d8e3570a1702f37885421edd4c2886cbc1a4b88d074523476603441d7d61d114e9c023452a3c5ecc8b36b8243301d6b42e1ed2b95326c62fa79d4090fb5ccb66e94a6b54962e59053f8db4c34059b7ca7605f1d055bf3335c93b44acc22386726cfc4be5d3974754c4303f0e300b597cb879ddd44803b910fa2f299810cf57104d8d5d8fd911b1562558f993c5de2fa2e7630dbe8dd2e76e48285d25afab081b1a3eca1c3b2225d8899e5aa2d20da4e05895af523491e64cb959f786946f6d390a9007698b869f6644ae1e937685a68654bb509bd4c04307710b32831c68718d270e0411cf5f1f2479373a7e55067be1628ec7da8f5b60f192240a4001470597f75f399d4712b6ca530dc53b60389af5561c6050a59f9968a7246f06fe0020503745cf0dfa82f88c61d70eb580257b4c9be6a79ffea56d4682110e2f4ba729e39f8d4c95c695db92bcf0c4b3e54befb60a4363e14c127bcdece759a0ff9ee883971d22cb5a4f080a635d9c8c00f496718b637ad91bb43e4e81be374eb2589bc86f5c6a7f051cbf040fad622c5fcca06221518d0d967bc9cf6fb7554f0179f98cd5c3e18e79b971004750446e03c86e5d0b3a39397fdcbef578a12b224101c55834fdf0e34145b0add5607e4dc1e51d6b34cd85d583cf1234a6dac7cd1fd1ae0a6628e81583a9e7b23c67d72448ffb8d5bbb62226036acb95f7318612e649143225500b3dfa287f78eaf45cf3057dce0932a48b60f3d19643581c3aca3a447663ef10cf18c415444a4883ae564476e08278f0831fbbdb9bad65099d45e50bdf3b43c45f2c6dbdb537f088d1de426cd29ec48db28e4f1e9fb39694baf2198aa0db60c3280f4299e15cb192f9bc72f138da960f6408764c7bea3ff90ae1aeb075b286ce95ab70a628bc92971765c2f025aea514b154d235c7f9542b09eee362eecddfd901f6f476b20d48791f04f590615f76df80a5756f480ee4caaca584568d1ea84d6db7e82ee2cd7c85b7fd84c7aeea73bd40d05844e7308510d7031ee7c779a934408399c6c1d3eaf57012944075fd4b13c34717972f67dded9165d6d7ddabf4e7b84bfbc2660c9c5072fd10d86267a97ddbcf3b3449f58862468604a61c8a6d20093ff7b180bba580c778fc135c91f3614b20ba3e59395ee05e8115279ed7fcecfa028fff925dc3b5ae63bcb2a5bb18f14f8e40c0f45ee8e434ebdc551cc8f067bb95f11f74c779afe2e87dbef56b9eeaa79870d485100f74e595fe1a63747dacb2c9a18fde4d7ca247da7775eed1d661f6e74336fdf3b97e9469c6f660be4c61f48f7d883b54f585bf9bfbc5b59adb00a0c05820dae1c581d5c1183161eb1877ca8569c9716b61fe33d9044a56291ba1ca6ad74b6970916ea23bb4ac7e801b1e3c29252880f70d295598ffdf3919837cc39e3fafd05e875d2c17d342ab72702c7e32055c9e9baf48c5ba6bcbfe53cba61f806b769db24fdd27bb7f007f7703c403f2ba76aaeb1209abdbfafa5b573cb0cdf7099323308460fdd4fb898b933210e716e38ce1066b6ad2e4170fbbeacb78cd2f881f75b0e50b5390354d34f1f848acfa82c30f3a9950e3ff98a13aa6d8e796ab494615deea9a148178c2fa4b4f9770fc0ec3a94fe990bac1ddf178e6f775ce254b59cb83e891dfd9cdf08926e54cf30f402262a28832a762d904c4a9558ef7121f7d2da4fa6e349e02038a80685cdb279ceb744fc115e60070e81dbea345026f097318014f5abf63a84a7a7b805994f4dcdfaf36d8b5c4e51425e6c60351716e831f86fbfe0143efb9e7384100195f516e71a0a66af723a1ba47fc4067287fb85c6595018f05b99b4a9c8e29296c1f91a3e07a64871d1b97cb8ea2a4603959be4f919281b58ea66de36cf8733de25d6a8ca66fbf9f9a4a3628fc3a4a0bf43e3ecacf6cfa3f8197b50ed49efa681e939c30f579098c90ea501d8d4e94e3592e5a38a1f1492e56bf6f7804135706aa731bd5a408da41afd488e5f41710f8c4c54d1d0f899c1c40d8564424a120c97244ae7401106d50acfd43615a0afceaee022c85a26ea9fe453a9033080a899d70b8da6b9b0746dba95cdfc71a6865ee50cc6bca7d4cfc60b9092baa5b16cddd4541fb90350ae0157750d41544620ee38856f6a2442ea12d3ce056aa277c780b5bb0b11b11e328ce6a76ef6babd8ba1aa4d94b5fcae3bb09cf31a0187aa862fe192da869d850dcefa505580ec6ff3f252e4a0aa989a18ee17e0e29f01556d10f652a8aaf0f3f3883215b60da022cb24ac97da972a22aad6ce6f72e2f4c8c11c40276ac0791662f00acbc79adbc6618b2bc90d435570a9246ec3cb7e766b8e82fbfe96a2aa1e51025be883bca0ba2f7ea91c283940a0008304137e5f126d8e81929741565b89c4579e8429002f075aa12eca546fcfcb96f2d0f4fe1976c0df321df3bae666a21126821b28d70125994606776a04ae56b9fc34b339d5d97592c096c503de925bce16f4eb2427deac4fea1cc75cd39600e14e32c7181338f26666085a6c85904dcb198dc94cf221cd997f325d74617a3b3e008f3884b5947d6c1498fba6811104983c508a49ea4248a027d0dc4358989a10b7a17c6c75be2820aae107a37f3c909807d667ffbc4120bf9bc63232d0570fa24e574eee5f3343bbe082a07e745a892841bf24092578f75c92773c8e2fc303bdddbbe585d1b6eb41bb6343c5a4454af84cde2392530458aa6451827cb6be50555b0f916b7630dd4a42e20fa35558834d3a81abe5c518b9f9c07343f5ef7bf26f7b4d3082e32dad57fa35c84d134cff14021d488126d9821f4c95bbf7949116751c226b05e19077ce1616b8fb3fb25740ee30dc6b057dbe3da01d569bbfc2659066122f7a2e4b76d262a12d0dc2ec134b4b28a652a16a3f83be57eeb2e4561a13ff237b998f195fa4f44221e91278c11ff21fa8c7bcd256f18f133f9adc35b27b82fa30064cde50cb5394dfeb6a2d8311903bea0c9903f51b70058807ca4e846b08c1101a7518e2160eb34e093a4683514bfb2cade09a7bd001211e8c951bba01f8560597c1c45b09c5e2d2697b00ad4f48c1c18802a7a2faba6a819e3832144db7d7926c5e3053314d7e86f4ea6fbc89e0a4c282bc5ee5f89472e03a5de6adb4f0c0ad300aee37b53d70f6c715681ada5c00541f27903c7073f5e5422b1d1f5f85ebed9907aee3c84ec4db9f83b134849c8c200cc2439e0047cc6a4f7553f6f7757f1598a5d4f363d27e15e00e1a57e988f24955082db80c6ebc0aaafcd83e121d1f8d6186b4f57eecc4b6af0dc792300da928f1f1d64f4d64a220199aea2924a0ffaf0b4c5c4faaa9ecca6b09ee6373711d3b96e07ebadf54aca5f9288e15713ef4783a78feb5727484d2875ec077486fa193582a8b9185ef3f71d51c10b2adbb3dcaef304e0270969b4b9f1f70213e89762113f0726436ecee7e1401a84b237c1a03440578c406075064d488c8be300445c6add785c82b02b1c22b8b5d8482080bc80abf2290357d4747d0f17c6bf940a1c8872caccaf394f6b93c3c07aae5c7ae9da7889d07461289dbe57bc508c4ec6097898ef5c6b52bcd5b4acb3acfd8185b8155500ae7472d27d0800c103b7a67d30bf8002e4287660f54a7a39f9a8e41531ada91ec2b541976111702ac2c855249314d3dafc78efd158948c95e65209c05abd54a85a55b087c61b56aa9b0f6c8801656542b1596bd20f0e28a2aa5c2aae3892a09bc70a5ba14a7ee216341b9ac2fba5441e7543d5241a04531aaae088baed1bb004db51561d1b2f42ea0555d21ac1a368f05f46a6f05a8cc85f492f0392ca9b9b96251add30bfc0de3c9fe4d9ae6bda5dc7be0437778b254e96235a00fd91a5b19471bb09168630b238348ce8d132bdf1a84e0df0eb0be0a8164487be44bed7452b2804b8925e129b5610001850eb347c8050cb3438cfd5f50551024b11f004410eb20965ccc6b97f43cbe460f2601a470fd37bc544e37218d64ead62aff5b82699a8cd7c0d842a28227609fb82342f46d22402bc8872b4878428cf35127f07cfd3fcbd41e14fb07c7bf0cc0099f198056bf19804fbc74878c1245a6f369cbe98d60197f3244bba5ad573a2331f5d7361a800c3fdd5e2f1efac4f28061ad34c2c431fb64015fc40e214f29fdd98d5c75fc54aee6f146b56700835054881c1f8fa5c5c5798b63fee73c9a611a30a6933aee5aff4c4c4a438db5019b4d5147da7024a54596ffa1e3fdfafd72255be353ef967fc6305c236988c2bf292f0132939cc696e229875ced333301a1e754e1453c4faa49858bce0e4d9997fcdd4f8c060e9a5faf2063c5c109e63828b6532763f044bd6494e0aa4533cf3b98d8422840c38dbbe0f5ab963e386391980645c5951cbdd01387a3aad18fae75334f2032c9d364afbbad08157da62511f109730af51636af7f44c41ae6c90bb34b2a4e23436f96a8929737c8681c272c3ac17a0aaadb4494def9b9edcaf91891b04f97771abcc6aea44c306e5a8effe498497a1086229b700d5a73883f61fb0a10dbb1a28a21cbc5695d6bd2417d874a0f5b0a8088bc60cf4f4c2e5b55901c464f3c4a55da65479059cc9571a61bd4fd32b7c41e2d1737452ca566b33c148a7d39378437d4125cf9243198c61e336033f2341f2278abe074a6031c98848a76197a5d2697c988c1e263805992c65a59003d51abb5da3f11e631140e39d0d7aa81122e6fa8a0083e2224e48c13383b07d1a16ee09685c46806ec6cce2091b4a7646f5ff4348d0c9b0b97ff4099c20e3dcddae0237bb60da207a9250846eaa1d2829882b7d199ca9f02773738921997d846d759d61660dd2b6e2acf702bea584aae14fbd31acc00cab0920fbe2d898a723b80e5000bed8112d669076a5dcdef4981743f8b2567a8258ee59dc996fba1feff5ab9f943c99b32918a7cf5d029e531a620b6123f7325ca8748036c2017c8a5e7b4d3fb5ad847896e4212b5ef71b9a9b00510ca1a6510094327d0e6ff6984d694280b73deb3e5137d8615d3f4aca8222f311a494d5ec3edbd08e5a2df7283bf44d38b7b0b90d61063ace67b9d6c9f3826677e17f169b2cca87e80d4b3b937d46423788d3863191a82944272498df74abd52dc23af7074692c393b90820e50a0c26ab0b990a6e369a5a6293a930840019412fe891568909d05e7683abea58deca3aa9231755cc24963a27686fcc76525395b0e43e8db3756567237ac6faf686231071477aa32a4407f686b063853e2bc2ecdd0bbcd85bdbe258576ff14afa03d8bd9d6a8034794ce5e2706b968ca31e92d20ceb0c72919fe582578ed2ec55934d9da1e4b977ce925dab3c5409c7a901a834e7ca5e2d5f829aa3a1a4dd091bac4d9108dabef43eef25924e46dba95c56ff2574bada3457a4d4350524b0c1ab2b30ce3cfd361d061122b10c1891131b1f6e323135d37bb7503ca261d9e57963f3d913646a78471453ac392179bfda551701380c78246f33d492476811cff04a0fc9165501c63f311b6959457231f3218a82894468bfd6304a4f2790b74ae1667198ee1b45e3f59702e45b1e409dbf6b05bc54dcd2c5e4370c9a9abbd3b1519e569de84e8d483631686c3740fffeed3e6e497cc34067840247781516fd58e1cc81d42a058f50616919874be62043857792ff4d4b094e268b55c0950bb460eb1cadcdb7d70cd3b1d7dede94692db51481aaf32cdf58aaedc3b039a033d4df3af2d787c1434a138f5ec029bac79348afe78d64fb848c3d3425e87cf443dca748c6a0ac3a8c0ff74fcefd84c54b06b923a8733210d8ffcf4f8c842d31c36235a68a1a1fc8d08d82254999f5725abb0e4ef33b9b813b52063f38ef13a7183f18a8ec9daf5a0144bfa104c911cbf6af48080c4ee8aefbbb51cb279ee7ef0a0f4c32f5f706e20ca430a403347e35139917d72b378ba3214f28bab22d4a4356036df7b4316fbf3d4b492ea3c5e876b240f391d3b8e34fc893cebec06c4494a580828e51f8fe58e6e42f2e6a0be632d9adfe2c80e135c9164464d54bc4416c303dbbe9e51944fd938513623b634fdff20558cd6139d437c01ba20115109938ac45781f2801497918f8dc880d61c491a474320ae6a8f34a534d2c85111f478eab979632f803359214afda3d02def54530cb40b558654a9698401a3177d79bae5b0da631ba547c6756a2e686281953d288f3c09fdc64fcb01990b1a26aceb0473429c19c8e41e019ad05ba3e56399c84873ca659b9ef9731cd295864b6e6f532ecb4b98aef07f58e1db5c085f838f55890ea64f132107d8279e07b4b2388c67746c4f0a650effe5aba69210b64d2008e34dacfcb37d39097e29f860e685f04bd1d4a693dc1350fd20b73b07f1c69b3547d470030eaded838c4de4c6c75138a60442f66e786cfa2a6ff800b5324c4f7ceeea7e23cfb26b69cf74a76a15886da604a1469047ece47018918efe346a0dd56be63a931a6268bfe3654731ed2c3e077be9d9fa85f0037132ab62b5af1562bcb011c0e2fd4d14aeeea72a07c5eb24aa10986c38582fbf5030d9cbbb24fabe91a8ce09ebf60a55646a02d5966000b1323b4d0cf5e2dda1718961dcce4505041104036189d123b86202197dabf32a5ff7e14aa0228c2315a4b1237783083ff7f8b095918e3b2270ead59309d2a9b833c0e4e72bd9acc9e0e0818ac9cfbdc62af10626a7a69e8a81573d0a5f836e6c334bb2679b6671d6fc5d38cd782733097d2af918f831d480e1a78bd4db3525dd7eeb63629cb9e37e52a5605c628aa60f39c97ced4e15da8c75231b33e1e9a7cbe664d387fec0cda9080fb2d992582b262c73e61c7c76483532adc732a125e496451f6e773c225bb3eae451e227853efb0c2a25ed36fd4647dfdd4681119660bfc78f5fb6f0036e24d0e26f8d7dbe11558d27802ae36ee65d051756e36c92822d776fe6633dfc67612c63612e2af5968312e9bbf53242a694ed9a731f9ad7f35b1f1831042a19b34238f6d610c5040795c0bd37db9a19965b7497848e1917a4ce5c964567bd2dea19b05e4933ee5ecc53c717e77695433698bee34d5ac21d0e3975ae582a1c324af8ad8f18f36620158eec5ef0f77fd6f42d9fd521ceda3e35df0c56eb875ef4b10b4e8932c479b93cc4a58c66c816827c47a56d1061a3d877ecafdb0f7b530fa2cd0b3c406b0e9581ccce412903031a3e078f730b5622d93f1a9431f28c38e46c4f66f401abf3456ffe81741f7cec5cd6073114049b80af39b6b6282837e2ea8d822a46783d0a42b756d7f902851d4841d756dd827655d07ce1d4c570893d0cfff95fd9fda5331bf68f50e8540aaa7b44edd6b63da6280ecfbaa3576da92f4c0e845e88030d101af3954a5e4f7049422cc34b388b5e32a2f9b42d6b598798c5c79aada1936f7dab93a06a4861ed3896eb39f7d87e0be615c63b7433365ea5d13a1b7c66935c14b71267587c92ce87729f234846582483536bf8504cb312c5104761f1549a07da3d05ca7e54931c57a9f34219cda2ac648d2ccd9f04d5dd885de803ec1ef6733196d8ab044d09c2a44ba26c4a099a7511465820745a64cc1f98da1bb63136ba2eab7de9de9dd9680a6932fc10074bae9afb9fca73d018ebca7a28d78473181ddf9f9cef81a4a8c61fdb8ed8d08ea0fee1592a38c07e3cc7553e9732ef6fd09ea04278ea007bcf71ee2c028f23d5e73ec7120179ee8211d59f7e2ef9d52dc58785057c2312e981881a9a7de90bc77f533ac4d3479a1171e60454ea4a57e647fa01242f04cae75a935c3052324e1ba619ca15d39daa7bb1dec584b00e070ebd970375a90078d5e608ff62fb9505c96d2dd2d16d1b6707a42cc60015db7032e375de789de362c04d5d4c1f688548bf98dfe7cf3d3e42aa47d85fa8b74b8cb62412d9dd9b5b0635092909ee08f635d0b65a9c60dbdabd191a351fdaf080a1cca75b1bc7293658b2bfbca7f63b7d4ab9e2ca8652ae58c1965c4cec4ad8278d8518376cd85846282d103f5198106d2376734032b17394ed72c58ea10fa564d1c5a62fb918fa2fbb92b1f195372319d9767cca1dd1b673504a1669ec3a82e906fde596561d1deddcbabf838ad8dffbb17bef866459b783f2eef38ee4d6dcb2e7cf9e39684b06ca2dcf2d1c405a864c7489f69c2e39035ff0858a37d0324560cdfce0909008f87fa548630377188135f3e79b006f64e83e1cfb832f93775fb4c1a6fbb2fdc1975604d6ccd77ed09e7b13e338213c2057e4889f60941d92ac94f01b1bad542a55036a46e981b5676eed098f8684d85ff4d1a2ecf0b3a5c7dcca3f347bfe943780b2e7c32f07d1f849ea1c456545087797f25a29628a952736d75aabb5558eae952ab46c05698b4d6f38c58a1791b3424629dfe092f5b06ddba6b51640bcc03cd162ca36456e8a163ab8a14518303030376e68d1c4c68653b648e1d07c18612b22066322c708300040a94a00706c38650b2f48306d38650b343e476e0ad10fdb942377379c429482ad2d1167dcae318e36023674e120cbc69b4b128ca0fa35256624b034016af088518313ce6adfbfd3e6ecd082129811840e987852b9709951690352d8348c9f4da37e817007e47165dc26217af5f79b5ea163d37f800bc18994be8d9fa06b0c1c36ed3e1d48b44dee89a1e1c6b28bfdcbdb8aa2db7b79135171ee27fabbda0982ae08da75b52f2bae8a68ade1aeff792fcc7be595524a81261ff40e13877dafc4625fc985890c1d847dff935eecfb10de5c88837ddff3cea33cd21571ce39e752e9f12d52c4bdfb715ffc98909ff0e7fbda9763e79c737e4dcb39e79cb3f6b9f45adeb44c22715be670cef9339619917709fd49d7954070c7a77df6383ff63060e88c7d76b11fa1003960ecbe74f9e98340fbfead2b4c030c6566f7a2f505e2070a50904b68c86d4afffc987e4c3f26347e7ea00005b98486728f4bbaa45056651d2246a3fc0b84979504994c395e86c6b3414347538e97a1f16cb20eb9e7c7e432e5f07ea0987eb20e5965fa51e23f3f59078c7d967d51f593312ce79b7518420186329f8d929aeae37c8af806ffc4dd6ce233f36b7c78cfb99ad44d0bd87076104e08bd3d6bf69c31cbec64881b2f718f3e44685d05f0c6bd09dc1177f65fac42658a2846a05536b5f2cd95fb800ad67da6296ef7e928f637572bd46a1aedb9cab2e7acb2e7953d8fb0d0a319b46765e2deb44fdc9b3f9d6db937e76f2f1d57ee35b992a34568ff22f36581ace718508c8531b379bbd0f12b46e9bc56422961a5564a29e5a4545e897926a194504229211e831e718fc6b0ab9c5c918798137903ddb37fafd6f26d37839f66702ffb908dda8b58ee7da0ed7ff0e5e388ed6688574a1797ba78c53d8f6616d3bf82a243f26b11da8b4680425b7a5d5d896ef41615c5f7222c46fef29316f72399f2137efa98c46559b919dcc3a1038da5e48d0ace803122f7aa11bb238f7b34a6e2ca7eb1caa68fa5bc3d634ade2b6591194829fd6909f404cb8f3152a22d96e84a8d09c4450fa41e2e5c10e9cd3a87f471377608a50bd670ef1e85944a2d650317951008ad5d7d4a1f4ba90db99d9ca1336ceaa3c6b64648d8f603469bced0da3a76081bd59b4a85601fa11f37d482d4d8eeba475fc63d3b840321b8a1bc9900f6b703c17d8cd3c1c5585bbf053fd13ddf05a13d3faa66110c7e82ae2c8860d1f4212ef61753b9e5ca420813f54123088c91e220f05271107829397d2ff3c34f9f8e14fc24b9e0c1fe60d09e52e616fbcbf1329e8e1c7e923f7fcecfda0ab0ee62866824b08c20bc48a1f4efa04abf8382325f7e41a1e1aa0909638c31093f49dbb6c71b69236da48d4422615247b58eb27c90f096ed58d1f6f7178ef3b5ad7dcc198114c3f8372bda757cb54919f0d5c61d11fff9da300a09560bd8308a085a3b1b92379936e937a5b2561411ac368c42829ea00da3e87065675840143c7037e9e367437007e9a30e421bce60c3283aa876e94b1d92984c85caf4efa0a6c64348b682feb2d48e3ff20633923351c797a4ee22910dc91b978fdfd51b3392372e1f1f62465964427fd6455b3b963e3eae2b094854e973dc677f374766970c714ba8394799b84a73257cb1fa415927faa3ab959ffcb32a2bca8ad9907bf13dbf3215cab3e1cf2d7e037dbe20fc9892d348de602f8d8c5e392ed7d0d0e747f05fde48cf8f4c26d5d0aae8263f8650684357b9a294d015352ea6e44c0cc202e54a7c259468c2e4262ef199f8f1e15fd19f8eaf367c4c822a3baaa2bfeeb47bf56f8fda11f100ddf5e1f42329537246257b5efaf323a0a3d7cfcba86554c42a225a110df90cb97a5c40aa3dff06879fd6518bf562ad8c563e453e3d443d2a954cc91b1c6e7098404731b521aca9556c5c3faa36dc54b5ab6b7fb5736d37823beacfda11b9305ee85b9fcefa393e3fd7e25afc34ab890a4d87a8e7303094c12f1bee9003f8427f3926ac89d05d2211a484f0b397fee6d44611069efdc573b886466eb5a0bf3bfd34dd8b0fafd626d3bf170596959e2c961c766ddd5372746e29b9b82b8d19c448b9ba644bcb8640a24bb67ca59626f93283a2339437507a29061a1b42afa46725187fda6b5f49a46dc78884de1181ef23e8f94e337c28bf7ec466f6f333edb16e7e4836fd8be58de52ecb48bf73e4e58818415289f8c31d2352e7480c90f8d8c7c71ee39babf6ba23021f627f1f5ecd419fa9ddbd407c474bb18c719f3ff6f035cd177bfb97d3c9dbdfd68e087cb8e353d811f1871f758e6cd791db1fc60431ed0fbe7f8ee311942c8d8a2645c34393a24942a32a956852344968541b4d6a7b1a9eed6952344968547eda687e6852344962f71dc16892dc2d34a91caffce4e54593c446eae5c8868a46f5a2e5658b0d9e97174d1225eecdabdaf335154d7a4d457fb7155fc8bd39e45edda697d73c7a79f929be963d5f73a697dcb2f37ff9e8e525a4bff9f2dab3563169797955b982258b96262c168d8a26c94cf5f8ac72bcb20b3051139612ab5aa31268e4827c61763f3f3ff45b50e998b862291195c425eef97c014a42bf70750c525adbd1f0827232634c4e0c4d07e626b2e3929b71c618279c7142222e6f12464258cf39279d37d546ce5cef650c6fc339e3cf3967f724d059711872872855f0c3087381018c2620b363cbe6bb858e1388fee04df435e928f4802144575f937e93f736de963316e888c42de51cfd39eb4aac3dd13111c630462434070438d2500ad7d096c225b43f78c58453a465cf4fe1c7bc93563a9f5523cb3d3871707cfcb6ef829fac0f6ed3ee73fa7705bb83fdb7b33ffad73dca7d3bd9fdec17d18f01628dd03fe925c17657bb7e4cf3d47e927ec61b51f373e40d44e1e86edbb66ddbb68da451cc0313134c38c1fd797fd6c74c6e3784ce32482180802858f95135593e3e52fa7c365ad28a8e2f83b01105fb5e0308fdcd4ffe78a6b1707f3ea605b997de2c7b29c44d814ec2868cf3ba27391e91934ca48fa62ce9435b2cecedfdcc9dc3dd372fb76109f6319d8bfd17f7c5b6c32c7471bec43722f437593dadcac2ee4f25fce4d2a7d62a5bb6a775f14df693cb816fe276e3f271ce37434f9c0e4208657c59a5949cec6ed5599bb86b81de4838510837a405177cc6b313fd79db697d1d386bd3334737e67c476d859ae5e88c707977b1775b93eb07acf1bfddf73b870aeef95721f2990f5e892bd48fddd701819effad2943e7d832c71dedb8071b7e10f2a18b1a341b9e6841112d2e8ec6184309d495c2045364716bb46086600789202556fc800743ac9ec0c18824b20984c826e8a1f4c3192650e284184e603b6c00684b1266002106eb15b3fc70e5072f9cb021db708a0976b0491b4e314195ec44fc52500c54bbf41bfd1c07dab9bb61857ee1ee2d507741e297de3520da97ba6f7b2dffdc385b457f10087b19c5d1d6bb1403d6d65118e5cc28888262e0b3b7f7c772ce035c50e8f77773feaaf1c8f76a57ceccbf94056edbcf1eebd26b3f1f671a0b7a971ee3a86ddda7b3b7171ff8338d05ade5879dce0bb45a90f8b447f6f8499ccecb8e3f27ce9efe1e24673d043d9f88bf2efdd6bf4b5cdc10e6971a8f3c7f6b9d0086d0f9af63ccc504c1bffdf6a4c751e351ea7a6cd8eb1c1344fbecb3d7ba8e6697abdca7f3948bffc23c605c23a53e63a4744aff1d63b4d59b32734ee9f12fbca9ee5efde491ce3de79c8e97603d3f3f46514b501114a04814b3b86295087f7e2064b1582c168b755997755997755997c59237f7b22eebb22eebb22eebc6407ff1675fa07bbbe873332cebe00fdcdd5aba8a4311080633584d6165d17ae287f5c3faf9c1aa671dbc8db7952a055f0c093da103182a48a2eea868f06448e5622208422b88f2938516f9a1c2c3032ba848253182ca8ef127910ea660c111535e3e1cc132f23223882096f43c5106ca5551b21d5fc22a7ad8e20320a12b847c38424a098a20edf89e5750869321ec60090f4540e200532421227eff2693d63a1ec7833ee115451522c892a48716a062123bbe3605513184def1eec898b35898860d86b0427d7a63172ea2a0df0811026bec5bd135fe084de8e8236ff40bd9a675b19eb56f923736ba977b6b685d32993aaf667fa66db3f63903de9e1d914c2269dacf39e79c9af693a491268944eaf2e7c84cfb4fc7dbd9df2765c0db44b427755f0b5bc7dbd8e3cc85d35fe236cde5f50f7179dd2171427a24a46e48e9b70e89fed263f918c7b0f393b8cfb4499a4422e9987276c1a2a3e9f3f62475d03def72a486baaf3988da32acbbee4d19db1189abeb58070c65be6b24b3904c5a634bf03d427ff275af257ad52c2c9125b2578a2c163f559bc5befc848f8eb6dc992d334733687456c8baec90cb0a611b316a87b02518e581b60fad2b0b1def9f8ee496c9a39a41a3003c7b4a0e8af6675fd6c84f9f75c9971638e58a6acbb74296c84f704a0ea06cf9f68a7c59a2193466b6f8adddcc917ccda09191388da39268dfeee3c04e8cb69b41e3a6b21018ca682a525215865cdcfce1a7392b07b70a7e9a7fa5d05fbee153bbfb150a712f06f7802014f3bcd9d3502aa97cf77ca2f18160d728747d79b383b20f6322803fbf13fa487047bb21f8f3e70e49b7839a44babeccb897c7b145639deb8710aff55a153c862d2fbf162035e79cb58518e0fe71a90a10529b9c97f94f070ecc23c017e5c37e91901caff5eac86e3e969a046cd1ae3eeed7c751fb01774cf644ba02884063dd925dbff68869ec8a63c5ee129028fc5866cb49292b9e734e0950147e4a29a5d572b5d65a6bc58f6db69c5d499f6ae445b5e5aca317058a3f43bbd6b79a9198c6b65d6da2bfe9b36bc5d208dcd5b73140b0b7ef03b344bbbeadbfb3737caa76a5af3355d1f11250e68bad0668d7b029c7c67d1ec6699aa6619c1199860d29b439b52cb634164d86b060095df8416fffc5165e1082be8fe1cfb2e76f9ba67d49ebf2debeb9b7eed3af5fae08ededb50fba0265cfd798d07063aff59b640e9386359ffe5f41fb6d6a40e8ebf756d07e7634366ad078644f2a81c6b208654c8fb8678e632ee3a6ddb0dfb6d73a2f7bfb1f1bf740d02a9c2ede5ee3884caaf5c0bef4a5aed399ef81b8358da4c33bd259762d7b8cf385978b994f37e5626627a40539237fbbd6233efc971c3424ca627fd12785a8fae1a7f9f255f09ba8e48790a8c26768f9002208b4c5cc4394a018e18c18162386fd24d98dea5bd2348c5f344dd34c5affbdffa500e57e8d713ef6f9f1d5fb3eb4b18191de7befc3fb12c3306be366ffd3f6deb78ffd67b90b3794b17f6f8c3776debf36c548d23777a429747c9cc6bdf7e19caad97344e9d728ba5269942fb5416337e8cf84516be5acf77a129ec48b69b2b4cdb0cfb01bf4f72c56eb06b717a760f6c01db18685106a254cc6b3d1414a80003e1338534441be7f0db9a1efcfe459dfee2bcd128642ec202c21c2082509fb9040842f2e3bbe1a28e45882ff579227ed9e7f0d284db1b43f530d78ca013d1cd0f3cf2e0f3790760ca608fd412097cf5080fb23e1c676da1efe47670e2a9f3a7ec2fe1480fe40ecfbbba042ce0fb883f440b88115da4bbe75408ed0017a30eb801cc1032c01eeee7299cb41e35efc4cbfb7238e3db3e34f29136f81799ccc4ff228fb502605f7f03d32e7d539a0d42f920785505353116e063fc17f0382fe349452eabc4c482185144228e194f404fa83af2247fc287e514c0d153912796884314218618c14d60b5dcaa7b1765f4c6dd97ee405fa8b45f7e66f8e2f20a01fd3b3768c2b9f1e296b37e42ab2b2e157814010cb3e98b630e96b830a6d04f61f04ca0102c231634da318866118866118f63b3bc339e77b3638576321482bae5ae7b4d65a2d47f308273bcc68adfdfb62adb596470d5e72066e9ae31827e3dec43f808008337c20440f40dc20841f8cc6a05f9894603c10a1c3500acb106a40591fb4a0428b1c6c5ae460adb556ae58f1a2d649adb5595819b262a556ea4ec070027dfebd3a6b9dd5f2586bff06b7fb765ce3617705729f972bae8ea69119acddb5fb76a04749ba9fe346608d0c15887335e8f8947670c8c5b321707439297ed9a39bba2a6b648da4117db39c69edad434342e48c106c858effc1a14e870d0f6ede9a3359ad8708c1329b85aa35b2464638d37c339190e99e468a53b6a8e3106028f31d457a84651ef8318dc767d90f1c1f631cefeb98b6df9b7130b8371fe36270cfbdf99bf6020eb476dfb5ccdddac75a7041e3817543dc9b73090d8564d8e3c81b2d1fba379f0433740a9e3fc9a3f21720071db3d819913f7e163b1b2f8b347b7e06e3cb12fad3dec430cc8fbfdd3797e31eee600aeecd201c1ce85dbb0f166d9aca8280637497724eead9a842c3ee7bd9718a86d58485864f4951f32cf1cc2876fdf4494a21bc5742f7e037c39eeec59ffbba07378c336664d4995d2e97cb0a11dc11d3d87200db7d072a386cf9531461016404614b394469b55a0f97528bcfc8972c2da1630ffe2e751830e8577f2249ed14e29e7605c7a087c400772ca17d7fd2c83f95925a3c791323247bec6d70a40af2b1d912e29e94af25a1eb7fd00577c429e5cb10b7cce237111afd27b768a7dd87cdee2b6d07aa8e53e0acfd3700b67e9d944e4aebe4e457ecd649e9a696d239e7a4f2a9b552522ae7f4e927297db464edcfae602833a5862935fc4ca98175b5a6da3d99adfbfba09dd3ff4c261c26370581d374b3a5479c48f6f79d00486828058d223486b6dfadf9a09fbdd37d3178c25ece7dfd2483c77de18e23beb10963f765faf43301d8a06936eb93a1e347146488fb886feca5d482c034d2d8d8d3182011f38db12cc63d1fb30081760c90994aa552fb3edd73470d484ca53604da17c87dac9bee0d415bebddfd2d707c9ff56650d260cba4c1518cd1e51225734e5aaf50e28a26d6da8b0541c9b20ce72b53aea8a2691a897485962bb20cf1e020ed5588aa14f90cdcdfd54663d02f4c545cf1e20827f80c8cb1ab37d7d8d55b84e9818eef25e8ee3fb9770f4278a252e6906e72cfb917f73476f506e7f44c07b7e8052a3fdb1f069c14a010de78eee3f809fe96cbf113fc73eac7eeab5d8e7b7e75277370207e41de2800ce44f982bc81281c58e35ef7ee25a13f1c1c79e3ffe36191f61edf08fcf2e2e4ecf85712a00cfd2f70467e8e4b53f4e9ec98c225f0024319319400890165cfd7e137111586127b3a8c28786ae71863c45ea38f6ddb6398fe21fa49ba4342fa6c48f6a40e09897e8eeb21b902f7b50e89fecb85fe6cb4d691ba6ddbb66ddb36d37b1bad7528ebc1d0e4e930adf393fc38df3a85bef7ea3b7d2e93cbbaa7eba7277eaa17ca05f21376b98468786852344952eed1ee3271cf67757dfc349faefc643f6674959f6434ebb27bc3f461a2e39e3e93c95ccd264ab05a344968945c1f3f7dd3e7fef8e9bb3ed36732615d26977595983e97459324eb6878309ad4f4a14972bb2fc6d49e3e34498670164b3cd9f3dddedb7ab2b90da52c11b497e0d9f667c5e19bf1c651524a8fd1ce203edfed957e21b0b327a4890f71e44013b9bf03c5fe1c7a2785f6ffbe49c4dfbeed886840a675cf84b43fec884cfc1e901b03eefe474cb393124ef78fffcd209f908edb23ecbeb93dd382a36777c7967b714fc6283d9cfa0f615ea0bfbc25cc132d3f7631dac3fdc1a03c298c30c27f09698e7b4eda1f0df6491bcbeca22546edb18ff77fd3540f0793389cc34fd97f4672cd47d4ba9c2ec7bd8bc5d08748b6af59ad176a987b75dbdace1b6f6cf3e5b28d6fbe1cb631962f7737cef2e5ecc638672d93f2963169db483140483b7bd2ceba8f868d75be6be69080e0ca99dac5d0778728cfc2882fb8c30458e37007dc01391aac1147834d2a288572b2b3e517ab9f4943092f2744a87b61962f9c1ca124179138994014c20ba6a450d8df4742437dfbd8ed68a80f021aba94bc02842529947ddbd90869c97257c5977f3cf294bbb3b6ff10b9bf248a467d429410d5da50004fb6006d18a4c535c58641671c6dbc917aa0fd735ce605edefcbfb353eedef9d5f7c99fbf489360cd2f2b3bfc8da308808ae7d8651c4b0971adc0d2f2f8f2587fdcb4b77c3cb4b0eebbe2b67409062c1a5c6d778fa355ca2fca2fe1c971a8f5287e530c1bf70639c8eccae997c8c931886bd0bf6825fc320ccda431a9b8c056ad91289d071cf6e466d1b828e2dfc04a69db2ab759685f49844b99be487cb73592a3cecf929bf7dfab88321061734d271c1f3ed2c40b3d9e530719fe3fd543fdef95996f877dece884c230dcb025d1f6e2a745441c890cc02b184d8c1e01e9582064d4c383f986cf92ab46085d0969f83062997056209f4762ec412e6e7b8cde88cdd7f51e3ecccdd11af4f3b0bc412e67fb8a3f188efdadd6ec25776465050936d5fe3f810c3301dc4be968244d0b6eff1b114249e6cfc1a1255364671ddd8484c83c3af45d13aa6ade1971a90ec71f7699f612cb515fc31b83f1d53d45888ffed6ceda1a6f5f0b7af4ba41cc45fc704d19f3f973e8b1a0faceb01614df6a5c7a52e2648f61677a4cf919ab3bf719f8e94dac31af9540473040fd2f365d6beec21acc9da6f237a1f99ee387b7c646ecc69d1f87d6452ca873b6acc0d3a6e39537bea4c07f01a7961dbbff71af94d895c496dad765ac81961fa68ba5effd61f0173427f11c79b3453e96bd8b0b981a37b8c27c975d782bc79edc1b87730df792effdb35e53c0287838370c6c449ae87cb710ffe0b23d4f8c2d62e87ceeec27856030c65be11867037031710a06ceaa7cf7e1bcc0f6e025d5f28f960a060256cab93a23f18d69662c92d45b2e242041386f6ff6058b8f5422576af6d5b3796d0fe43b6154302fdc1b0608e80371afea8753047c0dcc148b1e57bf7c13cb1a5ccba0f8609f9305b085a302c580386fe5c8858439f0bd19678056be48c99d87d181825fc045d453c5b3e0c110c16bfa1304ffc045d3f28da724b056d981ac4b61a50d1cffe60ae6cf910bb5baaa5f2d387571b8f9fe60ab6ac42fbdb946c19b916877fe40dcc121086256fe27f385bd85ce155f132d812b7609cd812b7208c0e4cd8f13f9bcfe31ea6b5e58459c11dfef237b8c3474859c75d48e99233ee922f5795483fe9c281c3e7764c8a94225d2ee9da5ee4925d268724918d37bc8d7c29699561461c382626233c45e83d9cddb5774a2aa99cf6067a43a578ca3963942fcc45f60191bb6f29bd1105ec3f8df49476df91b975dc998feca70c47eece1aa59f29c53a4a29a534eb91a7065190217e96e18efb18026d2d6f3eeeb0230f3bcab794421ae9579b81bc6347847ead8f219e9d929737363f3815dcd34142903682f4508b7e8aa44e76f9ba27a10f305e1e0c95e4514ee23bf1e854ef7863c71ddd3f3a7d2cf38e2e3b462e66c64ce7b21d2337df75c01af927c09a1d5380f8b5b95a4747af57d1b6f7ed0fb96feddfdb21b98fe1d784f2f293679e2d53f8e59e8c3880b4cd54dd222354bc81beb909fde1978d6b2d1f017146be140fce60cbffb81d363f5ccb4d9b69a343ded4004a810723fcda120762991e5f5fde5a24deb2e5f6caba80d1f33e6f716fa6dc3ba2e5917b73e391b27ef612a333b5a70ed246f848a57d96c54ff4f16b4f6cf4993094583f0cf499b49d18d9c544c09ff443fc49a487dda787f86fde5dfdaebb1d5484a5ff5ef08f8fbc29e196ee7c700b3fe942cfdf9e80273be41ed0c9d66083b2e7e6da7368d72c7ec23fefc643f75eb835075143b006fbcbf9803b7b5b0358c50e39161bfb79ffb394e3913dd6dc4c69ce933373d223fdc9a3acc346eecd238d3dbdf0fd14638258760e1db7fbb4e5e2be01867ed6965dbb4fbbce5862f2a0a7065aa020caffbbdb2bf38ccabd3feb9c3c327c29c6b7889452ca19f147eede6be38df7de1b2fce300fff752d7ee45e8a27ab700aeed06ac81ac61a930ce3e28f7ba49e005c812d51754183216c500205cb092b470061d1827befbdd850193f94360412ba015e02082842a880d822871e33f801a2c804402f20ca0022889e1f7a480114c40a46d003e8470a0e32b8f75251d2c3050f2d1ff0c08368488a8a8c1e563c22389233f04ac9a1071d786c312467e005a2a4478a0e4e523b902202208ac0f3052ff74dd5be5bae472ef7be905c2b18d25cc190489464038b8521c5182329c6488a31926e3c4cbc11492498e89248ce6078ab716b9fcd6c3257467007be97fead954a3955af4c05b865464fbdb1090c83f9c951ede3134d7379c139b3f15b8d1b37baefc88c4d9036d25bcdc7f6a526364dc81018ae056883d2970e67b8e9cf57795c48b109ed9efc1c5bf10989446aed127779b0744d692b64df093bd644d38ed9b598364dd8dbccdeb60ddb9bc6c11b53dc1eea9cb0b5c7f47170268e143789f3d7e20fac71fa9133f9cbb779627bfcc1f6cfba4f7761c262fb4bf1266209feb145535f945981e343998f9fc3e1d8b8e75d0c845bc7bd0186c6e95c66a03f0824a58c104a4d05f7a47b27e4013a826498d40cfdd9e0e0d8c40708417787d433757d85864091ee0b6b721ef0e308ed3f03fc02456f690dd1aa366a3db2fd03d6c827e18a869a7dee04ae8215a239d1f03fe8c242017873f31fe51c811f565ac9053c9237c73d7955a07356f0283505139f128caf29983051b485a80855f607b15cd758708c61be651422525b461ebf21f5c8282900825860f6078768aa881c6cd22aca0acbfee0966a73e41442f89c6c6ce9c49652039280c7b087708709d66056f6a86f397884fadf0d35bf5250995202a04ded1d418a8e933435390409db764648d83df436125fdb1a8945dbe22cd2696be6b06f89c69eef9a8fbf7e921f312d087d29d34863436d0589466a7f34d440c3c6dd27bf6a3d7c7f92beeda2d81947842372e96ec0b69d91066c0be37439491cf0ed813aa5c6c028dab227c867e85309e4cec1ad640868d31cbf90549ae12590bc57ebcfa33ef25ead4da6979ee774897bf421c238050c823be217ab5099224641b56c6a246f261970863e0d0195296ab704682ab95928a53c9442a9e21e25eaea907bf4876a516dd56904f6b5ca2ae94bfab8934f54b2d58304976270affe275b533e71bcc43dfa10618d2f80f109dc11e71472fe087762995ec8562c838a952d591fd6aeaae41595c4a29259545aa84acecc4995a835a8ba6a57815415483e71d9c250a0e77ff2d3c9fbeb3300fb391fe3a6cfc8dad521ac6405775c00d6d4afd8531bc6c40889818f7f0705b7047650f97750b98b815d9600446939537f07f5dd89fa643684a687a82d77311348c54c20a2ec4754e744033141e2a628fdf533f702aca92b49545df5a1af6aabae706aadaa5d65cfae2b1c79e3ab37e1dc848e41c69e7f4116913738de7d38ff412008f45e4565ce9333356aef5e7dad0b0d778c101eecef9776dcfab7ff7076e5e1c14ffa98f9dbefa034a7f5cfd75b8784f4f8916838b2560d6517e32b5853df572e68f9fe24ce89565ce65c3ba8a198d9c544203ffe21f9f1cfc71d1227b31b825feb90d4c79db3e44ccddd0e8a83a8156a4aa121acf101e5cc5cedfab2287ae664bbf971daced032faf8703f54f5eb0cf567ed224f4cf95021fa683673092141e2de8ec6c59fec42710fe865670e422222224874256e614c7ad76878f164a723763638e6ed0c1d5b59e816b2f787c14fd4e8d2c88ee66da2b6820bde827b1b1444d0bffbdd255edb66c3293800da3f597ef067ffd2a4ea5352feac76d95f2d48b673f756f361678f7b72890ffcba2bb59456ba699712dd34a5946217aeb4bdde68947c34aa9d6199ca351e191689d0342af77670d09a79a676f6f467465f1ac11dd9d72db5f829e72dd3f858183bd68730be955bfe60cb1f70b1a99446720b7f8cfbb4fd24179b26492c8126498eeb8859004444116b7bd2c3cf9ac93e8ddfcc8067f0139682183818feee6ed91858f782e96c73c619db8b659843570e7b3b13d54265ec7f0a3ee32f391c4c8416e8cfa3fe48fc23cfcbaf2d82c38641931f8e0b0e5d429f8ddcc18e8ba0fdac0cb85816b98a26826159ce59dc2334110ccb32ecde7b79b837cb55eecdb2ecf270ef3de2deecc68f039d056209f566574c5adf264a680f18ac6cab87f9aa3228812ca23764318443c182a205c58fcfc0fd69539421308280d203c5270a1639f4a0e4f67862897600969f1f1e5e368cd2d2210a161f9c832d37f4d8b0e50adee8c5f1c6c7e23ce22ff0de7b2fc6b48f11628ec62e6b54c0c8dd6b835008217c8a5d1803bb2074c78f8f75187235b4e823fb83af934d14671a8416da2ebbf7692c84c63a727c34d43dfad46fa0eb4b299561ee4bb4e98bdfe4c86c8a732dc54316c71f58cefd01638d3d5c2ca08a05503ab51e1d7fc811a5b30a3a8f16b080a3236903863214e66f98fca31fbd8db31a31ab716f8df0c6f4b7561aa694420126ccec69c3e5b7c735fe7b1c7bfe57daf33f6cbf741f0924985c6e98ba1b1d84331aa6837086d469d51aa12106a657a8944dd66545ea188d00000001005314000028140c8804a240383024952bdbde0114000c8f9c467c5698c8b224866114320619030820840001100110a119da00d6b2fba236a462278eff1a56cf8f12c05c54189f8ec6d248d27ea5cda22000b8c429b82972027d37861f668bc5c4b0784e0bd642c2ee9902d2c43967bdb85bb831e7ad903c45681eed66858db5ed4ae5922bf8316459141146b01869ab0893fa29a91538a7b4023e3cd666b2287b150b678646f0fec1d7d7c70a5517e9d73ebf866c050087820157b53c47b7de800003f2065e6da6eb2cdb643141324d20f9e5feff880e52dbc3bb3b898cd9bd69d3d1846661e7e9f785a323c435ccd847fb1b9063fc29b60150444baa0e6cce8c7ca8aa2126657002db0da9465d0fb47dab44e3f630e8a79a92fa5092cb3c61782b14e4cf5cebbbde07bcd8a4e448f8ae43a451456a7eb29778683ba4e2925e200d0bfb84f743c83739650e53ae6088ea18a780011c1f1492d041ce2fe884c739857dda09cc986c8fec5b25cdb98da7f83cf191e9defe666983806c403f5f7e3ca171392669a2fb13b8a048168c0588fc9405ec42b2dc0d98c77562dac176abbc900cef3724cf99d3ddca9c0deedcef20d5522a76d82f24ad787f5b7cdd719d7e060fc92d4327907f509d2a7e872f32a04292addcc6a88864e415928280c1b92d812c14c92629d28a170b4ae2a97017e4003455342354a18a7e0db4fe5c862179cac91dbfb9fc42a09d41f6cc8171f7a7995e68e71ee97bbb26bd8aa311aa33d931248b21b18cf1ab16220b60bb092394fa8d724cfe7d459bc159d9f4a38d5eb7d9907d9d800adddf90ed97e998aa03acbe72bd9671993bbf73521ee9e28a08fde65aacc2c2f881960aab634a04d01000b355bcc30a117fd9f17f98d86be81532c7e3e228c160b475139124b849aae522230080594d12f829110eb31527e953679c1d27d9795259d7953d403e6a0542cd4555f29c64c57c2b50156592426c153ac92741f859d4093440972f44202414f4e5e184f6ff49120f2d4a12aecaa4adf4cacafb526a87715152d27bc522cbc7f14c2f7d15516d74068d4a328e24dac9fc7a430fa90a39e03b97facdd409f633cc2f88a29a548f85b169a420b0b802bfd405b664a68f0b233bc439b953759ca263be53db92882a5c970333215f828e3edb691fc2d1093a5e67b6b774b5ce228f4ae8bfd0dcfcc06401a65849f69cdcd59801364a885a7f96e161c43640334637c78c903beb6278793274dade69c22add677671d40de4f31dc89546c388fa8242ae2c985979b9f9ae44ad2dc92c4c608160dd8031c495f1e1600f52b73e289946cfd8a5adbb98cf2fe1703cf7903776a77f184284feeabb21ac65ee26019cce259cab4e7a34b4d03a4f6a4f58fa06da801abc897d8121e351f082d101941dd1b1837725f776b279a5f50da7709cde2049f4f93184315c85eddf761e2e3feda595de1be3052dec6616f1b82587c9e8f2b03108abfcb174ba504b7f0120d84f5db8f747878e0f30e7ad5da6470ade8d4736cbd9a53e9035cc0e03c0146907f47116e014526cf3c21a7d3b2f4730cbab27b489bf2386161768001ea952d0124164a13b15c0140018e2ef771e25debc1c931666cb8438e85adabda843c5aaa03cef3611753e320923f6069404c9ff6fb841f731e4255a01f14e8c1354c55c44054c612eff481e15a6c8262d3407c3a7b23a625a8630d4868adba3801cb550b0209a24764b84c10c331eb1153bb45c9645319e32951ae094266516c46826d51b7a1485dd1fc7de5ceaf43b83ab02c99c925f857c89017f1037f3e187ef221f5a510d6504a9b22b925e375279f3458f54d78a0013247ee97d882c10a38a2fe98236885171a658d50ccf0bed75831875980b6a152f98f24c72405575b5420c3150e854c321dc1ac66c1e4cc8bf420caf218141706c3bc4506f1822e6d145744a9b8e19b4ee48b2e881aeae06d647b6ef34d499050561ba8199bb08513de7cea7573ea99be5d888957e551dfa075efe91e0532236caa592b8ef090a16b29d243e95d86fafa8c7c10a2cff100ae48388df696180b413e28937ce1fb8cbe5c463b76f55a58578e9e55c31864e656f50767a8242873c5ffc69b065ecdacdc4baa16287686561bdcf4611f9c16904828dbb4a54b3c5e8c5e9f3e82e8e6ab08cccabe465676139a91dcdad939cec95c4067626efc63b091e927928eeb28384a2d42fc5674b9d590675fb9207b3cc9196c9652e150747ee5672ff4d3e39eb1ddb4417cd732942acd4651b9bde99761e0f8217e502b0b0fcda6c1e70bd2c3341c899056b7e276b6ed91c7fa6a808228f1404ca11e06a9c31ae477001884a88b7349c963060a42aa5fa1e747d3a0d5cfb2003b04f2886f767929410fc089e5c6f200a583e7d32d5818bab26afc57c4a36f27457b03ec48de950b8529b4a00c3fad0c1ccc4384e583885919bb3347423e6c1cd01bb990594b8f9ac7db92a707c0163be9ece91dc675e1cf39846555196c704224426f3aea8d658ce01aed4f6cf8e44ebf9bd971ac389f5e998f8594f172dfe4a67c09b62c616259736146a8bd9ef587f4b530d6b54cd9936c939e30c85ac8368b49c46fd93c98275636bde208314d02e3216ed1a1a88db5c6d2512171d6cdb59001895b538f38328414de8c597c4c7fab4bbc211ac56d6be019cc3dea25faa756b805076431ee441325f4c2a4fa8977595cb708aa3f4db98173def0584d0813ad804e619a3f21d1323987b329520fa6fe09b0c3ceb65a94c508765f0022334295c1f6c6d78b4f2284f5a628633026522bb0d2abee1f1805f41ad31251b6625a84ca618195d3ed3741fe88a35e405366cec47db5e027929cb798fa5340a161ed6247207e5912fd4259225c6cbb558a8e3f18252d8df6df56b0029e1259fbac25f94bd7ea29179b4d597cf54d2c74dcbd3cfee647943800a490a66455d3e961db2499116bd3a734272b26bba6ee6471022036a7e4009fb98de982e292d53b1a0f69ac4b036a729005d68bc90d433a79c09f6b6d846b3644df3bb26982a84c5e96bb8324efab3d465e254e470aaa4e0db4ae8c1fb130cca73fab6d36831017926c4897a12978f1ea6beaf72c4c09b081286b638169a34c4d5e183c08983d1df19b5832207433b34e538ba67a19b9f082caa042a6ff6070a82987b12c9e1694c4a01b44a9ede60d5fffef5ea8f6ef783f124178dd380cc782e249ef6c812f58b0841e152a9fc32c810bd461521f1c9ad7e72e783ca79d80c08fbb47d441cbfd084db79c74df6a7698b0c9af3e30882800996d1d0a9d997028622ce8502e3fe54d74d504aed4409d85afb0b69da1bade92290e404154b940092286257d66d3139c8322fffd77837e55eed004c90e7951ee02a7dc4edff0de27b42e394b26327896627ca718f6f8653140d8b8b40c7c418257606ccb2545f67962f1194c17ab44553e5ff1b370040d2a3e48c52fc2479452865d2e1ef943737b211571fc6bc914d79d2e98158aead2e5ca2e463001cca7dd641f48e2d4bd149732ff16f3b2b1c893fa865038b455a6dcefd1bff09763c585cb360067ec4c21a64eb244c0b8109bf1eda4ab4da691a1d865b3e498b4b32264f2dad89556bf75a63ad10c8b850490c21b7c744cc8a5dfa4a04eea32f4e58c27ddb797cab48400958f25f874699480b2d415124f58a0b9e1283a3a8bd439fb5edfaed276ddd9ab36b2e61ff651de1c5daebdb75ffa169cc5ac2977ff54443ed16aa5c609ef0156b40546b2c26c2f6bd52d03ce34f3cdc2210b9522766a3c186df92bca3f7482d21ce317072a70606f548c8122237e795405d3d09aaba677ab155f9cec185bbda5efd54ec2103964a5f867673090e16359a66a8065fed819dbdcb1ff0e48186c04d7560fcd4176201f07891a528a4c4784ae8001e6b951223a9e603077d9e4158965b77e85dd5c0e7f113228100b394bec3a4de0f89804dee0fbaad11e3706dfafc6c4899b72fdb33d772d80cef61b99cbaa3dd2ba244e1e85d3899cddcd00c0390ed12c72c2f636296d292c7db105d5c2ba1294897cb5c72f2e3d3327b02d208c0f54c99298c82574c130069d26dcda00500044df10c8673a4486eb4e81dd508823f780d86244fa5e023846add50e750a218298f6cef964ba450e04bcac287d866585b14e38a7b366b11db0edda539f61f99953dc9969a34b7044111e08a0c7b59c537ae3053574025f5c754156427d0424485de48d0838685196d1b75764b5d02bb9503708087865e9f8b4c8d8a6a1d6b2a70ced542b2e30e24039c0e1f94f1514467fae9c4135c83fb97c52c70248aa4b241388f11752b8136eac35d1c74e4481997226899444b8f283567dcb25fb10dbc83ad64e340d1cd41ef6836d8115cfc8388281c47e5120d85124ab505dfa83c296ed7c310d66e01c0c9a33db4dd7059f41b8918541104ba45b58b4342d1ee8af9f5935ec4e7ad7b0e8a618829a4b777a4068211db299a63e7798859b69a755d2051c505c14d2bd86e5528e49585c455ab1c7d94bbbe1169287b5c3ae46f64036314d749de296a04cd56abaa7f29be974fd57114fa3971e2bcb74336e4674e8fa88f8f99736bb663c11372a240b0626a720d1981d8f5f550425b7906faa441c751abdee1fe753cd0dcbe3a6f0415ee8fbfb1f7c3a00f4e19d0812d8900a4d7d14efe76f7dff312d9e56d2172cf0ec6ded5b4e1b6fc0bda3615f7306ee533c5da7083743c621beef4f8802e210fbac3e526991873e5db54ab796c492cb805c2d0d63cf30f5b1b75ac3744fd55057869818187ee0cfd9c11bc37ae076b93a23e126fc5f93cd908ec63977a95948203f386a4507f1412fe41c2456046499ce80e14ed08fc5bbf8506977e904a25c743a6441ebe9ae2f26beb71e4af0eb4ff75628e06e5100fc89af9f91124902705c41a05d81bb85c52ca4030a51d2da9e138ef47820c20a410a068fad7d0fa1cdc8084ce8b3a9632f6a8080712e2bb1e34a047cec9ee83d11b2f3c9e21cdb08a1369c46c3c55a8872658a9abdd1a9ab1c1d168bd7995c61521e2a9c8d79bf6f3f1cf7849bc47555e7d366c4026e9da90acae91870a895510b534224724b53abc24c3cce9cce7a6654cbdcaa9324e37d6c15a8939307b1c6bd5158c273e236e4a11ba9c2841490d02f9fc957e82d93ef97cce45195f9cd02788f0fa8e264bdf68da762f7dd806dbd03305fde1bfe38a7acfc1f6378638ae2a932750e00857b56c725ace3502d18218f241050a1bcf3e7e41538f08b1d104c3c6b431b6903bf917a218ea0d862d5c68eb20d0cec0b061c00ad603ddf0b21905b92668119c16032abbc2f4c0d7e3305e442cf12f221118b650e01cbd1175c09186d97ff97ba420de24222c03bd555d00866d9c97f427251581c4b1344fc5e1a8586e78dcf9090cdbc039e81a71bc761146822ee7d4cc70917b49f1169627796a6c69b6fc0df9ad407d04f9fe6c56b70ce5dbd672c5dc90cc0adabe995ecc72530f5fbf5d5a00df792081ede37c5db2a862f7627e15a052b5252f825d2a981027505044b6a2a861554ca3dec2fabc83ba6cfcd9fe83eadbe2810b3d3b8519debe7cfb1805fee7464f5dabd2a27c84379e9a2c5560ed6be015afd74b8d5de32bc63cb877867f907be6a6875bc56f9df7d8317384de33335cd41f74a0c9621e16b0604a9cd2b5a0fed322a1c4cd431d0a368bd7f97aac467dc8b693208bc0f0f005ab205215e6f1e05f7e3f1f080290bbc7d23fde1162ee41c2db3cf085d477d33f8a6834b6e4c91028f976b9f00cc26d551e00e5181f81a2c3024d5695b291cb29d05021a2748da2a6a7d30b993c58b870fa12c7842f80f51ffaaade979cf9639cd9b0171b534a2cf609d560c8879d1e203e98041410200d3525fbf2d77ca5a47e150dcda2ce129b60d6e8c0aa4486ae53d66a9b08af38e922d6d88fdadb7e439fb4b7a347cc11d969101d6eb65f79716b149b450fb00d113c76be5e9a475eceeffc48a35525f9d102f40757c99e2516d6a2cab61d1811132c188fff1113c330205a2f73110e9a889166872f61fe9a2196b80b1dfbc0e95b977451119d75fdb92ee669710eccd267ef0c9299a7bc2117f0d6877365de19af13f45a780aa1c94b1b7205acd4fd85fda28a920f93eb926017067220fc7381126a0489744bbce5aad5ac3888eeda1959b95a25ebf21a1e91494b80947c90a0e075a221d72086c7d1e0950f0e4d9f84c404fc1105f699db7ec386dcae0eb93bb137e7dd198e73a7e63831c8c095fa3694c0f9cda747c8f234d6a234c172957c97afdcc80898550185f135affac9a0e259f3a67464cd1b528ca01d54d30b1c8d4bfaa1dbca195543161d03f962910cba9144ce2918868b155fa768e36b12e65385dc06cca2b0dcc037309901822105562eca260d27d0b778206b494df939ea2e5274194e9b04878ba0b00876fa3679565f707e2bfb7ef95cdb5b34afce99ba9fdc082715e20c4b49dd5a197b4074d2b4d2caaa99f6e9dac87edf2dcf69462bd5d090ffc12650ef6f2dc2ca9bda86bd9b3ee355d35c034942f7f1cc4c5925ddedc7893a356d2825f1b914f147dccca5aea6bd6feecc0df3115dcbe2cc55a466ee2334ea34c9cc355ecf273aff9c55ca7ee5e32151057f1bfab24c9de162de98336e45ab4067c38368d8de10e6a2c6a8acb88c42465915111f71fa1d1297318829ee1158c6c6a110b6be134013a8ea3c138235626b0cb6cdf8c4ee150e64b43dfa670323167ee7ba36ebb35f9e1a9827db582099fc48b6a2057095472b98060f1706fe138bb23c2d26bd38612892ffc713cf88606a7ce39ba5a613c93a171849f4fd359261c6dc6fb22c2b0f3416d7bbe85889906cb982c1e86232f26850978bac2c2d3ebbb358d3adc5c36272ddbac1f5ec05cebce5074ddb85dcc40f82a93ec026d666523bebd668e9f009380f7b86e31e77efee88762aebced1410feb60d54bc5048bf1c94ad1b936fbd833f6e93bed8d1dbb7403b1cec409e9d494a63cf8f552304cdf6f4929a4303166ede08c08d043705adb79637ce2b12185938b3727e49140ade16adf297c8a3f8b520ed80e470c208a00e82f42359c9ad11c181b2146e87439c3608b6c5ac75f76e6cafe932eee5e3aa1e9a6b6297656c52d14fed9a5d622594670fd9ba0c4572b7da8ef3f102cb9c6597f565320c183b42722c9badfea539ca2d92d92592385cf59f523932e48d68da473e7c29acd12748e0c864231027649812b6c588d4c69c7dd1a15a6e42ab83503e50f11ad273636284b5d578a0a5db274a2a057ae9325d706c9448f55881cf403a43f07c2d11d2b494a3e87e087a81842df9512272ce8e0d4b97c01711a4c3992f246cbb04c64f2603e02785d34385426816d669204e4532758ae43ee69bc6e1c878905712f17fc931decd8e5547142d7038993c505902923a47cc706d67476e62d2aea610d1d5d254e1e45e7ef03e9287a047e993113e1518a25637c5f1449a64cba1eb74d8bc1030f2e6a200ce3039d0b09423ab318fcf6eea627903e2dfb9c02fded0e6a5a0f361d98391b5ffaeae2ad07cb5c878b0c98935f09846a92d670b9e9a0e3062adaf0cf96dbafd12811a43a81062ed4943ef3713aa5ac292102975627107eef2ac6ba5595d4df5a9db0210b3f15a1e45c084a72d1c8e76e2457fcb63108c6e74486486a3056d7a3c15fae8a9ef97efda3d9a3c4a635adf27918e08aa7f6af80f41070c68d626f1142bd157db9891bdf90ce78b7861e9f73b89d96d3566fc95cf1748101f4f435d7cd6254b789abbb3a31f9efddca451d1fb18bbcd26951ead1a5cf9a3a02ac96af22a025a6c48fedcd855c0b156bc88bb42c314c97fba517ea48f508aed2e94b93d4d3b51753ec274f47ee02df10b1415f250f1b285361102037a1ff23ea3fb607490415a072ba733bd4ee4e5aed8af70b1ca48596202e82345ec4a5cc215188388780b820e8873107e4bf33774e2c87e440ea6364fdbde7e9ca954a457ec91d17374b9a1136de888678cea11472c8990803ff2028f3d337c2b0a96290c0d7f6a8df4a50ca5a89c6817a44c1178fc1e585e1945ddb17f6f595e26e149e363f4d24628e41b70bd5bb3c6f5efc48b1a745368f51e19ff63d3e07806ec97cfe19c42d4310b23fe122445d0778f87ed21d03a8b99dc7443660541ff247b12ccb52d462389a5ad2c6b200395ccb8810ac3332c60d0eaabf8623bed689c3489d6cc95a59eaca94c47283f52b8e81118792047535508f7cffe4583c55ccdb7dcf7224197e36fc89bf10a0316fb138eaada37e771e70439b36ec1a3650e6e6e2f19550dc24653ffba08a88e0ef495fc00e43e54436e4358cf7ccafc59cc2de8164461a061c3d5715d6890ce3e623d0c89096710d28368fcaf4aef4afb6635f5d09175c5a70acd021476f62976dca6419442a676b914e074f4c28fcc64a7f2d80009c956a9f593aa53ae31f86748ea536c7fa2650ea13daeeaf32fe661e7eaca6fabdd53785b228f953db9509bd623de3109fce0af17cd34f2f1d40ccbd002c46b933ae2f78f2b9010ae54ece6e0afd2c47b1e8378105e437bece0fd02788061769eb3022baf128afe843a44584b4a99080217d1d73252af0ac5eaccd7a304797875170e5eca7be288448770992d28ba76693ac1bc1cccb5258cda35185f22c749c4c140b3df51fd0db1ac93ffa3258054d45929a6a8d231b0c66f5b0f9357edada6751961427efa238413aebe19be21beafbeeea1777bc7827abb9baebf773d27a13c7354253a5109e1938cdaaa235999035884e4b43538af494fcae936e47778073f34e9c601b668b6518123947bc09c70b38bb3b372e887f2cee459c99abc7033b78a4231f3cdd4175d0993c7301796540b4c5d71160ed51180b49bd0041fa3371093486622cdfd55754880d5edfdfab3c9d449f4bfcb93507fa01e5afbd70efb807ba1211b1e3c28f09d909b879a0df4ca0b458c15b1d4e0bda25524eb2600274e3ad1515396384d21aab191cd80b57e3f3f5261fa5b7a8584cd1327ff2313275884c45e86a3ae7c637408d3bf615851521a012fa030d115a741af6b5822d9f8bab3d9e0b2e35a59f34250a5238bd780137c798c9d7ad2d1bd1a9d9bc947fc940978ade30b7afe32e8c8c5170baf6969010cb4e954846ec1800b482292e083f815b89888f41ce94299d8d8cde7eae1dcf5bcb9c65c196775a15ef688c736ad0eda270e3eaa21ba03f5e3187b57b8c733af2ea3f5c4464f024789b9af1097b929c6489f896e653e35985457eded357cb5f20a20256fd20df1989768c4398cc0cb64a46d5a8dd81936e4e518ae873b35cd4a5a871770183a5666951c7aaa2215064f181e620c3ac882ffb45ba314f53c253d4a07c9f4ca9a8eb7ab25b001ee8ed859829505bad4c3e310d44753c4436b8e7b6d25a6dd4b44950f1704cce1e332187f0703d391bf4b9a5f5a677a7394d0593897a33b2a77f46ea599dc7032b45e77eb7c88e57eee60558d0079887029debf3a9e84ef94cc9a7c582831f23174190ffeb60ab7bb6650613296e8b7d4caf8a826d3b963d08ebcf896e63b269130520163a0e115806ba444b09164cd775ce30efb451234d94cab0d3389cde55b8efd073b1798a6bc69031eb82a2cf62dbb61193456a0a73ec25489696f85d30c30e23338c4f7286b0de35580c8622b4b62a01d82b862d4adcf54d01a87c6a7380fd68ba14a476ff26fbecc3bf6b266b6d47bc8e934fd19799ab7decb464a48e90b0328f24f1414a732ed2ce9287ea907dd4557eb54aa0414b8fb669458831bd38b523a4ee20fdb8e85683601a3ce205fb3430b95ef1b62dd31c732d38509eab40a3710370e6e31b211fea1c6ef6e079fb528b93dd9717c9b217d22d99569ba4d8b5148578abce81394df85fb966edcff24747030e5da26ac92591edc8f5b58e65318f1f62f7b28f08874e229bcb033bcf0d1e58929148b7968647b54ba61e8b5f259e035619c8e308dbce21dcab609378042dc49ab2a90fe6e49dfb2a9682f8b2444619111c1b9aee3a22376c941a860e51beb12166a45007bc3c8f9890aa69ede0cdd33a6753fbe3cb423b77c71ec705076fe158df69f124e17dcd9a1554dfe285949766deba9c5a653b5c2beac37c55f82c234a5818aeb6aa29bd648606ba3997f1ec4851be6e059797df06645d19028f95877580f79a7aae86086230d9142f8091afce9550dcfb47a684ec262f7359d4a9db17240a79046c94253db7bc97648c93eda16f7aaa4493060ed789610937fb8ca37a7ad0f184096e496a94fab2793ccb16c38627b454bc42cf462871275b7a0b3803211ddf8a102c2ca1b09be1a02553980a051c78c7c0e2040acdc3cbfaf218b1eba6c221d05528c099dd898c5d4d50c0b7b78a43c6e8f8c3243cd648030b9dc08eca453b267645ce93fa64a74790ad5d4e6a116749321f1dcba70c9cf7371133b31ffef08c805950797ac3e01b7a51bf35b18f7bbe15e446d20fa387f441e94d7d707a411f14f4f0b1100f8cf191fae3a16f3a4a2207b3a66baa68921a497a4bb0da1544c4bac572097d81d0358112d988b7d81659cc6603be297f3c20956d9707fd30bdb1430784826eaa50705f48c504c6e482c2957f8213a9b45862e6e38150444c4b776c60a0f1f77ebf51122e4a9458b1b76aee8254eb3e8078b2dded78df8b5564ea9d78910624df9a7b02888b62cac77b18b89022defe40572e5f04899ea140861709a3184d9272628b8896a38807e984b00df5813a251d385a1d8b85a7455a3d99bb0bc9a5d5fe1e997ba1211d5ed39d8714fb7ec3f894a2dc31cc57f64784c168257f44960c73f4bb01c7bea6ab1e42355433fe322e351f9a59f43d6c72b457480071f8ec399fd4072466cbdfe9133f6c2fa72ed468fe5a6fbcc5190c39488b2f63146e8a6a46db58a165c5b6c8718a3284d6448d369d8d0483b9111d723ce1d3905e2453c3be655a05c7df178672f7cfd9216f096fd34aaba6c40aff2878a96600b8160549253b2a8c2be5e558bc1b0003b7359aaf8bc20d923b63d624953a14f664f4c24430c3c1a5d83b4721ae267faa4a3c74748c43f3a760c64c1267c7903f694fa219a68d4b63f3a3f704e55d29839aeda30f7d1cd4c7ae2500c82316795f753b3d0d3c3fb723c0bd84f1cd9e1b8e079c5cd6a9b513fe5578a4fc62c79af76e340793af54df9474445906a8bddbe5ffaef7675da2a1784ce938f2289c859232b485588f6f74c9baec934f7eb65678e4555d84d545becafa650f465f820a82d89bf77e306db1c29f3a9ec8ac1457839de75810c17045836307b4bc1bc93e3d379707caa0d440dea83d01d452980ab33f422802d55fa991f78f926be496906acce034e58df21a7d9b286334c4ebd784179a55961c31050d07260505657ae323db5107caed113ed26f2d09e6e30d831952b4c6a389ad0bf38e7840334c4d773f9b32ddc73d8121c54fd14b07da1f0ce462d3897032c96e6088766cfbd8c4e65cd459b5a21488e15cacb73cbceb46ee51ced615710bbc91d5d18024f15f4a49ba7bd4e21d3cb426c679fcf0e0ee23509ea8cc95b96dcfbd02a22008443ad91a16b194d454bdb0bef9c2ea6417237bdf4ce6c3e2bd291df4fb925aa6d0f619bec1a3a1071e156901107dea66336780e48f485632a347f4a9353c5353afc771fea4abce54cbbbac7e18bd2cd09b710cb4f7ee1d3bb43e9db680b15edfdbb16874bc2eb087154915d432868fc5b69107383eb433dfb2614e55a0d7c29671bb730f4fd4504a6fdda8b1dff5344ec1d42c430b9a70a9be5ff1dc93b5a8cff5332af1507fcd03878aa3c101da129c3993b5ccc8c1ea35a5b5f7f3a3ff970960831ec780d0909229d34aea79d205b3921641c4f722e93865a56ff06d079798c7a1251777301b4dd9aa4654093656cc44fdc56fc6bc2e85e691b34d77c1f2d11a6fb5570448ffb958234ce9b8c80f274f0a6300848cfd47f43bbdef4c16d7aa34097176ae5b14ad36e752251b7121e579e832c61ba0b4eb8a06eb3eae9f0caa297609e54f2c8eb43f8e30b72a30431083794df2092abded59807d627dbcfb823d52ea5a0acf31d52c63a041a591fff2bffc96df9e2f648368a11cc058d7cc1f55c1f127c94777ab353f417b86a7c9c39dbeb5bfbc5de4136b1f7fbaf8e9a88e8d97ee8b12812de96362eb0b8477b7273f1e85d7fcda68914a8c7df397e6a7a373b5ba385d789cafca3799432422f9fc1c0cef9697d7f5f6a608403f1f26b29d7bff7e09b9e3d575f6e3221c2813f6b67f025d4d71b83780d8a0d2cfa9293434845e0616d3a24bfbac9aa16123d6c20a4e8871c5ff114f8a583951cc59b2fa0a893e67c48960f99bf19498fb5c7e27a2ba877325479f07dd047b38fd66ba2c1f3a057bb15168bff6c6ebb50b392e05428b6f211d0901687ddc1ae8d19a08babd7e13b87fe0995fe950e9802165532a800bada36121c7e86d7e09f2a8a8856552cc9df49f02a70de59b9996e5b7eb6672fda80e1cf85d627986e28f4fd0aa2958d146bb1b288597a538e32d094fed7850a2a0b80574fa33d44845c9e747156ea429ab7369695129762a2a785ffac1ef7e574a8e8836e58ac52c9b0a3272b6fb4aaf9e987bf1209ff363f927ae23a1826ba4c16336770cad8e0042347725b90c72d1cc5d3ee8c2e0a550ce919ec76355661cdfaa0e6ff2d5cc231acc06c4d5ea01caf841293defda4e0d8b9be5019c66e8afadc7d70fa010e8b2e62a58845a6884c1ffeca8c71413c53531f14855193a5363abf7b1440bea742658ec3e0db086d12afc5181135094d41194ab495572bb8d9ef20908a7ee050ecbb8c2aa9072e277573374b6110b1dec0272dcf294e1acc400b84bf72bfde111aa4eebe38afbc51876c0ce28baa5de8f1d5aee50be06bd67abdb5c0a483055cd2d44886dd59bd56be15f1df00d22ac12ff4c2fd697ef21fce5bb5e09c4095a85fb3b718741d3602d5a607a4f3f232380ec0f6ca973336a6b24befff10151cee1faedbf16d34fd50bc8f2f957bdd78ff08c895913ce3767551b7847955a1510b0890e8d652d17c291ae11a5e5e58a04240fcd77686474b1a504104cc88dbc27c230aebf933223e04059a156f4beb3ee4c5be15283b66dc2ead4bf114bb7ea8f11445f3674516a368a86667bd900e7ca9734395fa2877cc37a150120acae0230d903ce32b4504873528639618ad334624dc8911a60e9cbfaccd876af02087557ddef72ca7edb3eed9d25faad068fb266457a191a47302a3b8250741ca045d988cfbae1f5ab89af3845049d2811c08dc04df04d20eb493af58a07623b225f61cd258d86646d6b8961f140848d439aa64031bc8c0bb4df19c4f19d7768bf71626cf5af695947ab73baaf6c1c2a53984d95cb9b7c94f54f3909242a2844f028a1dc96c5d2e07f43462702dfd8d096efb142607be4df2293258a431c15ea14ec29bd7701c0c9fe41ce89487bdc125f334eeb377b381f12cf53289c442beb0420f3a5d4901a6ccb2f058023a3f7a0c93e68b98784bae2027e3c8aabcb53c2fe1d898ae4070764a22ef76fa88bebe4e8a2c1d0f779e66a8662e14fc75b89a3b0e20480abc1c5f5801f75c53e4014ac08cd5f237a89f5d5e73eff667603e0d49b95f1c9349744bc11c64a7aab28d680fc5ef4cfabdbc4008027dae0fb9f63357151d3090573d5a6cb9f3a3308c80732f06361d1e099cb031b8c02c358eca0f752ff815e981b9ca2f77823d9f6b741fa028edeb256572d77356338efdc568efeb2f2839a1085cc1fa7c43992acdf4eb9a86df712fe4d8f11fe5d317f9ac9a0d9d8f62d5bea04e961cd2cbe0a199e069d2ab253cf3322f05742dda50c7de18ed2d543dada190d0609c69212365bb4d1bc2086010821939ed0eda0118a70936336b2ddd97487621de6888880573b1eeef704cd7bad17922ff54ea32ac3034f394d9f691f5adfeeefeeab0ab4c882ff01bb3be54a666e7edc6906005e770ea2a6f1ee80f8455b5fc4dbc16075860d50d5c6b48727a3a3ed3d8e593e42a3f91e2e586eea4e1300e59d32594cbc98848bbad710387abdd7864a39668958c71486ada46bb40f3eef7fa1670dedc4eba54e90a73f77a654f284e67d7f5713e2d7f2deaf5e6adc1200f97ac0cc60524229f65d35a4831331781babd8de8ae1cbb9d2e5f6becabc115da4dc21dd30ed88082c0cda22d29b145f916d4136da3f373ec63ea88276880b618eace203e6142f6b65af0e8493f63b5ec61eb70a27a6288ccfc0bfc1e4caa284dd946cac86fd7e79fcca134648a050a7f6fcef6ee6c37645e1f870ffdc1e7565790f57c70c144ef712d028f568f25d2e0a012c4767687faaeb07e4721f7f9b90f21ff56496a03d2bb68425d4423d5dec9f79d5e9f40d539389b9fc0179a4d06a49916ddc67738633da0744fc449e0844d016b18beee08aef43fb7a509a746b8528ef67874d9e08a6ff657cf4d689b6309e9d0b81afe3b06a9ac52eedfed513df16893d8b2e4f49e3128169be17b5e586d7a29c1bbd3a0e4eb22770705e2e578206ae4e37a17dfeb5eecfe2187abf52ec5d702315790abaff9263d0a98ed8e9ddb3c1caa444ce4426a407d6efe4da6a8bebb3ad1acff22073542cea215ec71dd20b4227c39ccdd29f9525f8f6a58a6fc2719745e61809204f2348e562abd0af395e8774c9285ce96dc79d3bec95bf432caba2186f553987f2301146459945dc736199d616278fed8c7e3b0ccb96ca824a11f0644ea84a72cf3e1a4d38e9b441e904863544666245e6990788b75aa7937fe06d2ef502dd9e0fca3d07626564f89c3ce4489e580bbd197e1242c235a0fd99d9e3c418415456e5d1dfc0c8cc44bd3a587f1a60dcfaf2976310fd8d6a3cadc179030bc833ee0e22f872a7e4ac117ca5d63b3102b9de11e89fefb9921ec9f4fd746cf8d6398a2d440b28844d39f7a9e3517293f5ab75f6c5a89aa35aa18f7a6984c81e43c572e6ecf861b84f39b7a6aed4ef158593324b65832be752542aa3fe6beedb31576622eb220388304e44252c16221b0ef51afdcab9e951b955dfc7d2f685893990a57a69a8f20be8c9689e488aec372e1229feccd2c47807222b2166fe97f970c59bf637e5a58f0f035d813aab210e209123396c65e4ca3de65aa3e566c3230c30a738a88a1fea408ba849e49bb07b59d712d3c5c3100cd7b6101c3ab60a487ac58943f4d57770895d3f7b03b6611b227ae45444f0645a06d67ec016492643f0340b49a8f672039b031efc501fc26b42e3558a08aac109ee7f0734ea758522a33b0be2a2878be5a70e9099aa935bb7d7222f1af0d422f42a3b3ddbaad68b01541a5fa1c01fe50f48763a851a69f13d28ea3521418a87e35bf51390405dba220417065c824d143ee225b0893276055452719468a79d0bccb0323690b2c4534ec3f3487068d3d4f9e53fefc427755919c0aa7f280d1f5f9e966035a94c7b51a01c34c97c9eda77b7ed6c5528aa60f030cf1babb4b6986bd818146432c3d66c2f592c71e9e889a7fd2226b2ccaed3550b1ddeae04268c9b83a026225d034f182954a17fcbe29a9e6f2a5f2b33b220a8f71933dc4ac2b9b65d97a342e4a29321e2f0d2a2d3f4f49dce914513fcf1507d6d69315caba1e029a8363100067195ac2ddd8668a0324cf60406f4d03593bda7e6029ff6dc66acc262ddd8fca52d7d4eede1616e7d473ae99ea78b8164d0b5f75c5503f22429a390bae0b6352397bd73681244effa63d3cc574c84e465e153582f73724e7efc8e6ea0437511bef8d45e12675fb88ea1984c11b8053b5883b3a28e9b452777c423546dce3485d4b26483bb4da028d6ee192bcd536afa6eefe76a181f8a8b03b13b2b088be06228c80fa8a3d8c66645d9206b41a85a2b0d3026f3491bf4aaac097d01013dcfd4f3d1c45d904d0fc73e78a65b1066e982a82ebbd0277cc6e4d2f30de036a27752bc5be83a160994ddce41d414b6f56568b5a464995d09093686549af54893039af7ad15d9ffe26a219bec623bfcc99350b65f91ce78922456e12f85b208301cf2bf550bbfca64edb35cb46e21c7f171adecf72a92c91749fbd3f5ff3ca2bb7c22ff2f00760b3d529b342104776842f2145406da010f45eed8791cc108b8cdf8f62451cd34d5cf01a4c2f56bede4e70b1a06c0bcabd3b72f0b819a90d934548a1171379abfd379778ce3dd3c168d23ac43840182186f22683fd54f58a17189efd7ed678ca8f040a7f563b536866dbea2697f5dff007e421b68870d0d96fd3935bbba917aad81dada4127f5d1d4f9c1b299e2d97caec0fcac462f2cab2c1158989e02c993bde235cecf2e96721bbfb73f60ef6805bfe3dc1145cb5c1641752f9d5ad0467ab3382b281d69eae396827e1e2b02ebfaaacf7c99ac2d2ad71d7f2e4bdfa85378caeb1b34969726839200d4181568b06ff7eaa85f20867c4f51bec44acab09f40d3077342881d521d9a392ebaa16670768cbc6af19fa68382a51ccdeca94343a062cd7a9ad7a30b50bbd8787f659e9ed974ea1df5fd38662c27c58dd3fb72071ac3e3579e3fabf2975f8dda14c926785bb4c0c46c43fe0d28e4770c5247fff49e31b3f43d424109f6a094cc6d58cbc2c3b15b9185e0a06638834e58679c965ac6b1230830b29a12f31e1c516dfe7beaecec2e8c28381c4e07e7c0b02f8834b478dac08a8c0b2b560309300dd28fa1a6b4f541b307500d97f0ef26ccaff7e01603fe32d9a4d12eeb1cd75819578420d912b12bfa4055245f1ac6771a116b5a5b62a81d2d7459f41436ce1a126cbe01e96b6655b4660de4a3c2791170e914ee4fe2f8163d12ca235a00777ff5c451a8b608ae7765b3a1472d90e9221c906c7f106e111641cadbd501344ca2c8b8f4d229471c9d98f11295f29488efafec62951566a74be4dc3a2d4f35e2239fd5167a84762bbb2ca0cdcfcbb164d43b9bb68d788750446f9fc8cefc512dd48d1c2033bb75d2257d7f92838d1f758ff6b5d12c1b796cf604cf3e2ed4b1e53ee83949d6a282dc349c9da36db76134ec12d0915b497dcf1d25c499c05c0bae4d063dedba010965437a29e487e9d6f80db014b7eb6c723f24826d94e572550e623d3d7a79a22ee43dd7fab36a20533b13c7e4658dbc1c786d4316de9d15dd862280e603da81d3af324cfbd9f285a2afaba2722db9416ce61e070dcec40d374ce88831a57706df8ef95ee04fecac18f3d96b0630f8e95ba68e366cb76cb95225c8ee0117600d45e8598ba74dccf9aa5bfc6c3870aea42c28a447030e1808c24a21e03e7bdff08181a0a8f557d99aa445592b8242101556ed371adc33077fc54611baf2c05b0efb8d5df01ae402c9d0b81d36c029ccb39232314010f1982772b97a95ba4d90459221bbc827be8d37b4c5c1cf7584ffb5e1fe7225f820cdc972f44385f4b91a2d5a45b47370f5d76f828cb1ddd761ed4762953e9b1c8f74e4fcc510d77b30c93add0cea8a966284ac62f4c2936c01c6b20c74d6d5123adf38f650224e93b7ae2ceba1ed6923aeca3df77055faa4c25e08b591ea0de74463302327b8376512736c468b0b33506dd9ae72ca19fc10e6bef32e7485d1ba794b0da2757e4bb1f1b2b5b7b5955684a6fe2f126be09aa530487fd7a57656db5cb0f6c5fafe70deb67667322be182ef6547549acfd6027af85c316c1eb076d5c236a7567cfc40ef87222c6e885c662fce47560220b9d7bb71bf8241d56787daabf5fc88375d37574df011a30bf5d835dcaafe9a4d48687ae3b7ad24e4c6e254b50e079df15189916c83a915555136f3cb1e66ef2b9fcbd97977cc6ea276e3ede4ff9655ebcf6de2f9095e743572b94d553ef48e87eaf3e44ce4bb46b2fcdabdb5493c7e131d1f8ee7fc92ac9d0ce17c369dc1414903f1b208734b2612c4eb5f8e0914c13b31a3030a1f4266a5b117c71b57b13bb949a8026917a0af62b771f73ed46ede65e9e042626e9125a1337046999f49a07b19af785bd4310db240c0ed3ae10d7153afa40b5130a8bec3d9b5eb8acd2a1e53c5df5d5cfef16e1782dbb0a89447bd9f768596200526ba31c2ddabe53581351cb178c55629bf69ce5b94beeba9cb434ef9af32990e568fc0988634d1617716ac357dbe52fe14199b9bcabc7c9efb7e47ca0c5a129725d98f8a1dc65c72f2039cf6c2add72d183503128db9a86200f0a14a2cb3f9cd1141863c102b032632b9a058bc2255f129650a84b237021db820afa12c3b7dd9d9fd2374e7f7dd6f94ee670796a7eb53da14580edc6a093533026ef254f35b89dff0e31f5b7869d827c68aeb5f72443ec31376f987235884c14a168c96c491729b389eb4240ddf2b09f8130b7c498f7d58f545f28b10d80abc21c0d3f146e622a9f58dc5569263dc25784d1ebc264a7efdb000ae898b2467602349e625bceb374016688afbe12e2245040020db9dd77652caa986b65df1640a7b986e33ab9289f1276ddb7e5bd757e321e30fa6d04fda1358aa09bece5ae2f74f87d0f1f6a67fee8ef73ae29af1d33cb8d7e985199cb5549e25b6c4b1ecdfca1822d899025c165bd0bd55c582854a1efd1fad2a5029ea41697c25898c98e8ab4998b67b2c36511bb69546d980bc545a19d927519740e930db13961d888db97d6d35257f96352cd5385140704e31378b496e5fd7411996a3c2ee7e596d39d0466d8921f936958e25b40ba8087b4c4f47876ba817f57bbf941a95dcf91769a32c10021eea990802e56e99912a442f04784f98de6f1afc286a0bf7435a06c2530f2088656a0a909745ec9383432597f2687c9f8aba6926f0a06063835b60a5e0a88c1b0ab4277fc7e2228b713db4bd63ba9d8a9b093c0129074108b1b839101fbc1b943c7f945abb071488f0134284004ce7d7c8ed48547614f7ca83646c3a84d07176d92956309624b18a8728613ad57518712db8b645701974ab1bb07c442f50ea403d4c5493e67fb5d6874fd9bf0c214cb13737153423555b6d79c342163ec9e780b130614dc717100f8751a0774b7e722a678f13e80654ee84c5c8c773dd66c84f456c9ffd15c12418fc9a34dbba7523ab9ecffa91acc45be145e665ba48f5b8954867c38c4fe472770e91d71388058c188c90332a4443b943bbfa81be8c2d92b3766eaa861d2391b51430bbf2cd3f1f4edff1aa9ae5b10fe143759bf0caecca14758618dd3b93d6ffed47a7aed6c3914350b74ca45a1287d4ba470e2172476560d3fb302951f83fed0da461dc2d0c5a8f1dce7170038978859856b483081f1e6267dada41b0fa1fb6f8bcfa3819dfa71d84bdbf0d287e824285ec571a33abde322bab23f649348cf10966680761b9602532548844415f31f96df7b8c6e3fe8cbf5172f0ae46ba4327d45e03e0aedc1b044d9da9bf6856450e7b87c5dafd33a52d772b96ad375bcce73e8e8df136575024be69e4835fcdacbc8ed3b923f00bfbde71c0ef5c5a42fa8ce5495568a244ec8566f540839452ba1a50918580283d70723a264247283926ebfaf5a3668d91f8c893a942d80a3f2e73a000e8ce9e37a11692717f4f3f012dc3812d2beda6f08469690d098f780685e608ec5fa8264093759869c736e0147700aa641dbb439a22af6e48ee4184ca94bbca4cac8b5636d14d2c4022896c0a7fbf30e3ba8fbacbbbe31f4fdb9eaa047488811af0f341592253b9e2df0b10183071b209c906f2b5782cc0966dc6a54ec5b2bbdc797206fd526ebebb49ce638c7eafccd999422cb48c57c1d8e2a9baeb51434ce99c3b6f248f8ba8837dadd405b7cdf3e8c39d6386898fed41e3cf32d04a373f8a63305ca7a05e9e3a89248075f8795ee06f4b3ce1c2eac44f31dbe34983a0b02a99ee429ef7382b75b91acfa3fd80f590b435818e4ae65be2eaf8216e9823e86b349a90c6c08232911203fe61311a4c88b80635dc9150c6697d9aef1d4850ae5c42def05949f8fd30f781cb363bc4673a99335e276952e1575261cf1b04a0dbdf73279399433c5bd1f27ec413cab89db303ef3769052bb7b3fcfdb112443149daf7006ae3d5a845f92c63d7cced109868ae034e6892037b9a4151fb8b003c218773fdb22b491d74226b0cac25a7de41dc67373b0fa95034efd1397bf3e1b06307bcb26ac5a3918e0c1a07dd98281733051689124d54c1cb5b3b130e1ba9fa60aaa00f1c6ff03c30c0d99d34db607342c8d53ec2f7a75d2e4b1348abf78c6a49115cdd5e06df7da186624af3a20ecf7eb0395d350a3da481582077c47aaadb3d0741cb65cc97c7601e92794635030afc851f9660ad56f60cf0f408226b286384a36bb97b55ec226ba88642ed3b5670becffc31c978aa6d5b35442c8fd8430cff5cac1759030f670bef81116591d50d4d01e2b70d20a43b98188a5a7e5560052aceed6b70a44c84cc80ac1b60d92ba67294d472e067400716662dabe397ce2a4be8fd7793aa5220ecaff22c5c078bfe942ff87c3525799f7b3e2cdd9c08020db105ecb3e903fe96b5240cfec44fa5dce7fd9e2badd19d4e51d7889573687aaf11b9ef587881efa2e78b3e960ed6e45b3150431734702b82c528e8484c4eadc691265aa1c4444d270a5fa171a02abad81b93ad041a693f51b95b0d00558ca492e961e41fa93dc829de7674ab8504695c1e593778ad09c9dcc2f94229b36c1520124a162ebd466d98e04be04abe36151f12b41a8f7c04dd6f0d2ae214e1ab3b7bd924dd22a555e20d18a4a5c6a858d6ab4f07dde2785da466b4f91d2436608be83d3201926e460de3ba0279575e29a3e45abb5901a5d4034d5139249bce969e2d9473141bf59e4bb7ac4c3e8df9bf0e6c0ccc4511e34d52563e2a44976b7a93a2ecec8449e7f190f58ab3fb74a4e712f8d99c0bcd7a3dc1dc039946cad13b6fd807f0c4ea97594732f12e9f3abc2fe5181e6b2d0a26b15163bedd8211b87ad9e8d3823a2fc82f5769621a8266a2a5146b223f13a1b7fd53d819ee994c57c78355073299cbec90f3b00b78af074bac22f5fbd73666bf9596cdd9b072417336d59729651b4a0703b43519a8ac9a0467e686e4c481999228775d8a5e9f0a52bc482396c696632089dac2148add1919a7523a5ccef9fd2fa5220d6f6a2afb4289284079c2a13a89d6febb5da6958111e2320b26c8356e4f67dac0f7e1956ba60d1b9931b7316dba8990682100988e2acbd550bdc1c5a874978e64f3d393b92afe830aabb7ba89bb4763e3e3c646e8e8f8ab11cfaf3fa7e649b0c59e62a624d33767ca4b5078f851827334bc66f236a4e1354eea3179a5c88dc32f3e96fb6f98e81cc637cdefe008db89247cd70987bcb4734f52933a79d26e1f951d5ff54612ce5e6b4a2a1703e6c2b578c2762d96bd5805b9e70ae8ab4e87f79ea45612cb893bf6054a8fed519c0d4c4dde35c67ef919cde6d6492d5dba974b362f461d465da2e34d47d1bfe48ddfadcd870b1d9350cf62c9dae7570e7081fd317154e1dfcf04de51d631236bba561bba4710c8360ac2171da8b2f4ed9f1a39873d4e1f14b130f9f5aa6d0b265d698fc8f62c3d0634092021232dc5a04e4ccb0d390b465269ca319dae6668bacd7236bdf43d5155ac3648dd968b3699921e31bdf2f93265378eb08cfe709ff4a877689fa48cd3fe6897cd20f3fa329fca4c2cac4daa38bc220b0bbe0d5a74e3c8e2a32ca9f486bc35ca5d270e770585897f8589272826e932c94adfebc46a9204def981f1a9c2c81406f4c273ac1f26dae591a7c2a19f63a8a6525ce7283493fb281e3726fc5af08473cec8f13579c5b647b4fa45caec18f928a21211c481af1ef6ca069dc5c143bdb3d3759f05d7143f6a14843dbce0b656ffa5e2b2c6ce898029bec75ad0144ec5480413882cff57321cea98cd9b0598c7509e2ed2d39be1001c8e1081ffb514fd201cf6e0c84d683735df7c110ddff5bbc48c48ba4bc8c02916e730e8dd6c0ef2abf63041733a80b3b058ae96fce57fa1007ac8d41ac22b08e4cf78cf6bc4565822d99e8d10d9d278c89a6d14dc649d9765da1dc309052dd59a3f0b48413c9699446bd7c8a99e88612291c39fd0338844ed8978362bbf58c2b25cb6123952508543e8f75b8371e821a46c16d3b0721c18547c5c31e2a0d58d3dec2bd01487cf3373137865412b75c4aba1bc1874c2c346448934e1e70cddbbd03213f1e441a6d1fe9093d40cae3d73af77ccf5491406746a4541c8382b01242479ba4f88e9833971d7bbdce7b8d403182b38d45c23100787d32392b752abc5037ea81529240c1ac77be6e25f019474cd4a2908da3da703ab1afdc5271e0a52e258a8feb97639985cbd439f8e527ac2680115931b224933330e356694bc007775de10c9fb3ee523c86983cdb49f1fb68d954f747f3c9b49c60caef72fc90e9d1c3600cef90cc6d172cb0d3e3af2598533b3403ebb7c8267412da07d93cf52abc6f6eee847973fcdd4de2438d0969e2f20592a7abe1f10796c6690f865454a93135a00bf8270b0814e41029e6cbfb5e8e026cd0d88ca1d3ac329fa2e6b75c3af208e21b40ca24072166ac1c124e5d0fc7e594be01c10f26ac41bc59550d9d78cef066421c0005fd3ac945217a4cd142d245f24d77d0e0c1d1cc612c773f994ae8d1b70a56f6a47faedf0edbd13d31d0a5da48bde3dfb85984f9f1c446f48950c6765ab0c2599cfa685d9d26434222f4ea5c0370a9eab0a6101d9fcad6cdb57cefc66ca09c2ddc6ea98c91755fcc71363f7806834d6b58250dcd79040199afddcdf0cb0ae2b96bfa73923622d55e463b41587d4559720f40a4181d96450041147bd871788c5f92d93321569f4d99d8e9722315b3040937d64e45b8ccf80ae99d4a2db480e197312ea26a3042e1b5dd62a02dcbda72a6340e5f18fadefe02cee3d7607b91187f642cdefce1dff30bae2aafbdc175c9804cac4535a6e75c2c9c0a08c3c0cb6b510d838a4e4af416052ed34a79c1aa042ec8f461e6cd2f260ba0a314d25bcdf1bfff62f713bde64c1194641c38d6ae5d0499e45e0634ce7b7cb4e95e00629e88dbb32c98e505a35445e727c7ed221f78b6fa0051a722c82b4ff9e15a411d440fe1785532c35d29e4a16abe93f545a5ebb82cb1b2850472a97167ea2740e7fdbb09a493dfb9403b84e6fc98d9b0f43fb57797e03c600d2e7b25392961576d50b5de3e683b20357c1b10087d3c0c0f1c2a5b30bda681da9c4b103fe81d12c2f9065a42d58bcabb97b106b32feeaad8f2697b1240ee390ecca64be7a58b6201b35959c8b24304e5950471987e1229940dbb66ae5be3da02f233ee17a9a03ea30fa87b3576b21f4253d57bf616ef8134e96cf5d36d8e3ea4a6819cc1ffe560731a2ccbf2817fc16a09934b6a9c680f994adb7eaf0a03615ceff7bdf95048ba836afaf195699162c06cab6d95409754608834553b29834087f5e8dc2f409e24d93b3388d369fc6784daefbfcabc8721b4dbbe9594cf39b7d6038cae4fa6bf12941c384713c1e7c23b66ba431f27229b80711814beb2b3007d3aba5d75450554bad9c29d15a53c192d3b331b62def19b33653aed3fc4a9665cb1289f3ed96837b9ce703f8246bb470c1f534a803650d56f6da185ccf9224e2a2b5a305d89cd86a8a2985cd2848e24d7d981bd16679d9d7aa94eced4a76d7a926056b98b482b245038a2ce42559218550fb24746221e49c29af247415348349a094d1f9fe8c6cf06bbd3f5faacc10f357bbfa27035635f184518803766204565cf955db1f5986ffad6cd177b97e59889e9f130429eb81cca757350d2fd0178fb92ed829389ff4b31e0873e42c4ec2c161543eb1119e16fb73041874102481ce38407c324c953e0654ff35efb89bc84e45e08d29a350fd09f6bd70558b06035899883fcfb6f7102ca151f0be65019312eb3f551192318b9e35193535f2ad50d7ae5292c3120cc4b8ea601ea7c0fe55eec85c36c85a9aef9d23caf936f183e90ef9abe54a0931faa8a861af13273e070810e9b4620b074108bada91abce8bf4dcb9a25f27c9104fbf6762834250d9a27f8056524ed56c4314225e1956170bbab352c19742914dae94c7c77ddc7d1bc515c751b15398a25ea11afd1e73c896ebcd54054038928c880acdccc5cb708460ed44da601a14fc6301ca2bac28f06446a256cd43720d5ae3f2cf11551798b8b8fdc1198033887a95629244004dbc00db8597edd6298f4f158f09c9e960de3274cb880191017e8a974eb173736b9b33b26dae639b0b3e71a76c72e2911f892b0d2dc90dd15ae621e9f482948ce1257fb146d1497e782bad1c253bedd3df677f02550a487e4eb95ddcfdffca863cf6989e8f77ba5afe3b34f54bd2453944149f827d41dfc083512c1fca365c355b3910d93b4c6e966d30f19f7660c7e8198634acacff50a4ea1907c3641bfc81c538eb3694335a2950aa0b7339156cd85bb5120e73571beebcf02823f3c629e57664638473ad79c56133a3f3ed29a5b34d8ada1244c00c43e5c31c006037f7547433028753db72704c3256a654c5064872d843804fdb54bc77886322227121491f84432afe182567b90886b3b9d206790807ce4469bb94f9593e41ad57330f4a6776257838819ab026a09122dc0304dfb4c99e57447c075c35adec062a5b6cee3175db96ff68d39868491ce1cc4880c7857030bac464f58636ac6eab22130e903ca16867d657c146d7359c22dffa4dbcc1564e7b2be3e911e43f0706fd6c4de492f864f9563f2c1f956078a4adc299f6c745af75f5630310d57ac9cd1fdf40277882e1bffe7097773ccf0d55443f2f50a867c00db1ee87b62757fc4361f961c66bda0d3e34460eca5d10578174821ff7b7d3025e29f1f900f2ffa4dceb9bc6f159dfa28fe8d5238e020bb467bb84a355a77cd196e752326c477b8c1ec69d8f27ad8a3e280a476b6c51a28e63ea6e5dfcda0662f07e406f002c4f8c2df8d0cf65b859b5203a8871ce639b49e97db77dd1d65873fbf8bf65e904ac277b21a158cf5d20c60268d370561843e7e61a6b9f9e17fbd8ad910079778950cc99a7ed4b26258e738c5b585efa150e3ae791861f46fb3b9abfe807a3e7787877603f8e312d76427f0cb4f07b2d11c06c4c1439ac50f5ed65de70092bd907c8c8dc2655f3df2416a80ef695c76295de2b8b3373e8a1deca50c10ac0b6820483791b852bbf067a20e96b3a4c0500a585b1b98fef6936df5c7bbd408886064c1d77bcc687da746f7fdc0b53b774a5f0bb7ef671cfcb8c0eca28af6443a819f4fcb3ebdb6f4798ee69de7c9528f4ee9e508e89fb4f34dc97229edf46dc3c71429fa6e10a55fbdb94f0fda098a91561b4b2b1cc5b11446fd50348b59bf5403ee706652ac25d6b592a46eb98c182fd95e9c257c894074ffe8f4fa21fb96ec87f02d999e3bd94f1c96e67d337843217088d19a8dfe80100a8a3087ac473aa936402ef359f82debae77704378843a87d17c4b5573c0245bfdc488d663c48ea6a6a93280a5d81e8f4394df9051bdbef2eeb8fd41c21013a8a5513d50045fc2d388e50e41959ab7d17578ea4b41c8447f7320ac11de526d8d7197ecd7293e2f4e191fc341df2d76223fffb4d7e5629d3be64072bcc63062b2e2f4c0693ca735733d81329e32d66b808aa431c5b66988a104d4259abbfa9a08747ac945f8337c3de78b0a32cbb98c14587d8675a925264415bf19335531225b4015fa02deee3ca2ef2f52ba2f59b0cf20a4f124eeab478074c3e15815df322b2caf7d1035e802839381b8d22805df56a3a4d35f5d3141fd0b834f1d3eae0c9d0d82ee17403e1adce050e8f6792026ee1d284ab6715af35d8d2b9656c7a9bd82ee1778da6bdf46d6dd9bed78c114841342d7e5b01db6ac425d042854a6a3c21def5c14e089ca30791676423ebff4c98ee29f9b9ff434ee1362dbe541acafd0afd63389f6e0e34a72083f006068efb87f569aec4d1758fc244c24869e3260be182b02767aa57eeb2a99b210724e1a52461a8b234e044b5a7d288d5743756661c34d689fc22853d6d1ef7a6a7c6d05731eb01ed4f68cea6a545a01700875fbb9a41d555afc9914fbcd78be0c9417b5b5e13cd39038c80a6cb191c7c636c50d91c72f90d6928bc60962bdef111dcf34d9e669e224d569ea7958266f2fd2f6a0386de48ff73508cce992e6b25aa3d72610a573cd28cd129210191a5a8d62b8a164e28b9fe9ba1933c895b648074439e95790aae6f440d6e1ce10c2efc4fbb89e2d9188ec3f9a7775e838f4290c88d7e326808352d63ad3a747fe27b00fddc7a98a55eea69d4fee159a1034c10bbac5d351936b2b5d912f37530d6f62f9102a2627a96fbdbcee727fe18b657ba04b95972aebb74ef64dfe1cb2d487d327332d330a3cfac734e49f8c794bd7df9903b864fede6093ad291594c0dae8ea6a5de004ac48d2a65d03c1d3489c1a83daf6bae6831a31505e85195390c585c9f06e8842998363e6cf52b7df7de8a4732eff5b7889c078cf5046fe92338b3f492e2577a008bdc679b1e0d95e6ee9a306c8ffe23b633e6c3de85cfe249513b198b5a9f7093a61d59520eecebacd0b010bb8233e833191bf4aece9542f32eef14c3cbba784e4b3ceb753d0d13771525775053dbeaacc5150cfb42215bafeb65dc21f8e4280a36e132914e6f72b5f699a8ca487dae9f07de3cb3fa937ba54d6f42672add14f3d138f95b06005ee58884f982a58527edb37e26bb493d6d840d583109d5e5196faa4e3789df9bd1b45598436c36decc988e9c734b7f6f75848c00d0320dab13907fa33139edd6833ecd4c1e8bae49b98a017d906432437913a19e034f4760f604fad5a03559bfd123b5d737ed53b8918c21be7b4c6cb972bc5a9ef82be011ac30a1b092246c8ac51270c5e26d6c8b45028bd2433266ae489c7dcc082a527e2cc22ba30ec390abbbb884c0f8aaa7feee891a3c4aced03fedd6e3e87392aeb286e4e5fe6c0f7706c5afb63b485bc6eceb61871998fe52ed50d20f9a6629d453e6aff71da3114580c7d825c7b2f97d8aa18a2c76d458c5bdfa784bd98cf5fb8cf45850d4975564ac8045b5161ceecae2b27655df05312b8174e327e1340bf37539ba2b1051154bcda373e80f6c145df5927c341458441f1b072c68531869c409c1be5196ffca96142c9ec129aeb5bbd9111f28664dc76af1561cd10909c12e0ddcf4345f1a4a165367c6c8910145f6425392ea2f6808297cfe4322cfa74f45209abdbdbff9de546c84e0c195b2e1b7a1341825e9d53a53f0c63e231b587e1f7f076503b15b5ad7de163eb0f0d303fcd1dc35d8ac22a37d67621b4b70f15af4d33aae168822008a82b22e1789da4b6744a47b76f2a267bc5bc8f80994826659f2b8bf1985ef9b49d7200de06a0d2235540bd0954ade2a093ee829db9589f9fc32a5cdc912b07bca32f0375c219bdd008b9dd8819621c32fd5536835d5acda85406b286be3e3c1c61e456c6c6bd18e4e6fc8cb0a10e2239aac01ffcb23820df95324727144fe7b4024330192333a14eeb90689f68b5cd5d1fdf69143e296284d4b52481a66bb3213cb477be14bb3c4a25f6e32fa16c277f3052be17d569cd98840a50258c9efcc23e7771efaae4942bf7617adf45ecdfdc280dc10a4203a4dc6db04cc40bb82ae33c1bf05a50f4b9522309d44e1c6774843f9d1eae2badeffc4597997cd59e602505d09174477c73e6d2fc88054af0c25b1380478471b48c952f06f797945ef6f6a161cd71e20e7c031e50762940fc8683608537618c32d05e07a63834352dc3ddf7940a01b31b08f54d56bd38b202aa7ea54a5b47fb1e96b024d3ef09462993c72d9237492f5ebd6827be9b224cdd9f04505509cf1bacb59ef54a127743c16616543d14bcd67a252da144c82d2ef064f8097112009546a9ca1ccef2148c4e49efeea8a1c8aa7a00001c827c3a01083fe929002f78068abb48482a8fb373fc2aaf2663dd8c7a45f7285c873a97f40161ffa818abe7e9b3aea282993f11ec122868e85c293436d0ed40e9cd9d0389a2c0b27cde7c641f3a19ce232af078123cdf7bec02f55fca53a4a40da5eec117299771d7658b2f39abdb47d26667496b8103b153d67cf8258ca6f250d3a10cbefa909df8901592903f77de7b4473ca7c86d4146c490e2120ef077c1d99a3c3d8ed9e6f22c16ba3c7d041677d9b9e67c2aabd1422cf47ed271a43c35d287dba9e5004203a567c4eddb46d3a4c350f1272d778a4e7f93cec1507ffa08a4470d0645ff60a05f4b99dcd7befb33ae500b97d7229fc201ea6814b5200acc30118a7736628913ae2d83133e6a472560e73bf24746eeeff3204907e590fe892a58b2ea4612f607aeb24f8a31346c44e7cf2107a768c65b6c393e9bca36a5066b64e29376fefbd424512f8da4fd4b52ea6edbc17ff96f733e0cfe01b7c085377a6c90270749c0e07f3a9fcc6b8427f3f9ecec68bc37202847df32042d9748f18c6b4ce53279d626f25798a676b9e2ae9d0090db46b86b9685a15d113e6d76d55f1b186a2ed3d64421106190a5b3bdd0f2f6c4f5ce8747983f7c0724b54352484c9442ae88e4834cfc4c1b1f0f22c72521d99dcc572811e90f3712a0b28014411c00df5cb3f0082c0fc25fae07fca5c6a38de2457ef66005024e034aa1967e67cb62e8d42d737d6b3c191918fb5dea3336f9196d1edeb44e745c08cdb4467250d9ac61415c8f68ac765a217f5b9443c082784b8f0e80d09f05f1047f383110dd1a041bd62d88d361c9d6ce03d19ea0e6c8a6f00c19f48d2b494033fa7595df5395726dfc11d6baef94c077888cc42fe252cd9d155d760f1d7dbd67a82f2047b307b9ace0922f81d111ef175375a25e03d67ae159911e4189964e7b9df1f41638ee922284d5e4bf6eef5bae95950ccdf74363b252c8150be158b1db4f3151faba4e0fd95ef8c924171cf74f30a5698ab11b97ead0ef634dc650454b0434ebf24597772cb942925e62b6eb166addb049b1e808895a2dd775cb247534f20f98a03dac19d8cef73a28ae5b35cdc9508fac3bd53fce019be7d6f164c43799583f4838b15f8166ae1665f9b9ebb6e5c5752b2bf540d7b4f3cf3f127f8cba56d5839b1d4830c905eaebba1d5daf6f1c19c3e8d4c88c5db112f099915db704d83f2c21b62a740bbd308be933898f4145703c50caef3612f30f6720422b9eab37d7e3880177451dcc46c5706833f991d6cea6fd1e7a7740a1234f2218c6388ad4f7116ec08a950d3d0809a75e638a78f9c0c21c3dcd277a3423a8040aa91c840f6b78e8194a47c5dcdecfeb5b229981ce7598a5a8162bf9c7db9b3243c372a6bfceea3b1878bb38e0ed113460849682c22aebace809028ceba839d882321f59e150794f3c571c8a19df3185a80d0bd19a4dfda0126a757bd3135f42f6562790b8247f77f6087c80068833c34c586a27d5583ae4ab4df9392cdf00381f40541db41577d8baa9c0c5500a5c89f16d926dad074312146c9ee5f97e4427c73919ba71173b35cec3ebcda3af1b20cca51439d511c5583a083a0047b0c720372ff53b2e16af5ba055e915e72dad77cf1a05f9a53d587a7fb31913b04219ac150ccf15439801e333e888544e539eeea9889ecb82b8f848f8c27a68c68162068ea0564ab3f5ecc6688740bc11fb151bd91de644feb217a2bde49a1b7366d8f0a4cc8a2ed740816a8095bc2e3e1046a9e22bfa4db8c88b9d8b2179e2863eeb6796bb4fc7281aec9dd6acd6e409e5cf10e60b7025f5ab571eb8335669a3d35413a4a58aed6f045c7e4e66b4d69cda68e2da430c148d452c38bdd88a258e0dc2d0761487e57178b746e6c26299396840998c3b906ca8ea7a690aa4da95c8e4e804f73135bc53d969177436c382e47fd239cb0501ee02afd7400e2b7b20fe8c3994f386aa655342dbe14294716bdb0f70437a957258ca3959fa2d9ea5dcc728f89b5d21e90fadba86e6a60ba14cb21d8c436d999fc8d3f2234e061502a5f16ba95b5245fb5b40fba3c4d42969ce816440314c48309840b4da1c44c3af3e9d22252c74619d18c261f24013a22324b47a1333561ee16d8d37c170a6ad5ec6de1100d69747943b03a59d61f69c5315ac43d0a0695f4a061b5a404343424e7ac550c3aadbc7d2f6f1a34143735052da082d88ab396dd8ee6f1fba3411e9c51f172fef4ea10b1e3fdf51524755f9e7b05839ac7558cb46b8e714610dcd9b9291fd84e1018280d96df74383c9d2573da69173f2fc64e8a448399a17e443262a9a6bd726319db90e82c187891823cf6b98051dbd38f4d4ef8a6a3be616f80272aa1c896d131ee147c1b0c8a5f823a79c8f8665ea641751f294597169b5ed51b9582034b17382190ca5294bc99ea0978167b2d279fea55b5ea6dfe1ee90c3c3ed16103299af1c6d7af3f88d7116a36b4d52f10f6dac4b86599b17bad181400d4de886db829bd88dba22526e570264c9bb008d87af20444311bdfbc48007ee5f8895bcc35941b2f67daaff004d03b5fa0486de3bd6ea83fe82bd99a0ab4074ba33d1a4e007624a1f28b8d14576e13f39cf3c6285b0b188660bcd8084596e02867125a8cb345ae5eec6c6e3d8d4c050c2fefdef9b4a398f59263b43c9480299e6a2152ee849f5244ec6429cd741f41bdf4beaee2239f4e862a1e79f5596a2973084d99ede8cbbda07ab04a8d994267561dfacdc38377e2e1854ec0cf9894fcc68450993233fc5687d29b73f770e13037950e9d43c5414e3f00bab3a2cdf847895ffda3be7645cc9fe1b2e1ba75603c03cca241294446f553b97fc32804a426fb4bb5afda8adbbf6a14825ed1271d7680876a66b2521a7041f4cd8d5a4c112c453c1da45e34fd705f7e1181907d8a7a88d68f6735cba0fdded7b0e02fbcaea504dacad48140eae65b64ab7dc1dfccbe1250ed82e043203dce97d9af4730a595d1345a5d4210f6f60547a25f0746cbbc5b64292fcdaa17389f0171ad546b161ddff1aa68636074d3a5f181289543202f7933cc021430a346facf5a8b6bd40bb47058c9ea8ff13df26a801ee312400dfed062b47c8923748bc299e807cefab45442bc16081a1d2103239b1ed37357e6b055f0a51d142100ffc77add562383ac16703fc49df498ad0b3fc651d0dd4cc2e087a5b4cd8581c3017b9e4bd3fbce62c24094eb168dfbcc71a05f2fb13ca006b802efda981caf57ba136519f2cb13e75bc922ce27bc0a61e2b5ea72bd1374f57a78c8c34a5c111368cfebcb1f5186c3827240a66813486ab7632b7298fb75153da69001022211ba21c2366f57269c47a618abe91f2c3f5e3acdede53b6f784e06c22e49206f5a59ee070c67b34d6966388982d729272ed210f51b9f78b68368b1085f85d344b0f4a124e812e3b2c0848f8c77949b500a6617a10749833543b88faced7cc9baa8f766f22a760a749004d16a9ace0f345f3dc1e14da8601663288346c2a38eb2c1dbb01e3beead20afd17a95279455585d02cafa1986ba51ad58d8b66396a8cb59f3a802031631743012c2fb0c1c4968b118b043adfa53d7c321530976ec6284f547dffb1a6394e93910b03482d21a34623d6a20930b25b21984c8b168bcd7f1f93d1e3d90e8deb872270c12cf423aa603935e90b5dcb7f71c17b3afab7e15be684df717c80d3e4bdebb16ff667666cab6667c531e82a7a37c76d0fbfe5d8a7e0d12075a4e5ef36fa2c56a3b2130ab51389df6cedbb4518a8c805d4abc75046a9194bf789acad353cc3217b46d3f83e7080cdc76fcef0f397425c03c69b534dd15faa2814542542621cf3630c17d1a1f13fdd3752356b1d1401b135b454b13923372a06237bc64e12d77dd7ed1fb0a1aceb70eea321284a1f72dc9f5197cd2ffc5c1177efa7385c803a574916020fdb60a46480864d83cfbba8b89cb74fbcf7269551242083712a7c5432488ade404061dcde97441c3f3aea02855274fd566d00e743bcbbfb2a34056681f04939aada8c055ed3b7fed34cd62ef7aef149941790eb80f6e1ef6c1d20ddd5cfa8be3069c28b83574690a702528f97cc7025624743ab75308d0a0dd26a0826597a316339a328e01987b1de1e831d07d733d062cc700caec549a16d00771aa92358fb72491769b464ca5cc3c50520bb6e0d211522b64e9ff0a7d440c70e1e71eec45656dafe282d625569e46462c51c0752a1c902baa11f08604524c9e16dab357c3e47b5d46ca2814bbf4f31dcf6b86027b863d717f97e9819561cf8950156637ea4addf9ea2c381883f37c02aa25ada222250fbd7bd28a4af74af69751aa0812ff67c550a078daf14620952faf07eb3ea28ac0322bbeaa2916010c9f83b0081b0f8431593010fc43f405ad02e4306e3ab03299010d94734b1d1ba37829c96937b3353b4e1e7107ab92ccf104ea23c1bcb6fc15d5f7038cac0f59475b2e7e2dd5a21e67ea28191a4191d5681f0799226557c3434bccf85c3e7d1bc8ba8a1adaf2b2a64f6d997f9c73d8f00456ee3d6d809d799bcee484c26bba16f87c863848bbb1ed2bde6693d87ee4eefa520acdc34a01cde5fb4110da5f8a1c5998f59d54e1aeb13c466bed8372dcb74f26a1a90df8c2c9cf6cac58f4a0e804adb3656891fdd508ceb2c52bc381eb6309ec29c0e222edaaa128d40b60baa5621bed95471232a5a7a85a22b24ba62ee5b20c795af149713a5ab31db6935d6422578fc198497867b31e421cf7ea0026c98bd6fe73a5822dd1ad0d06b726989667b81fda15922661caa0085e5225a75457821d368a99f32e3324fad114b82373b1acf4be1388e3a5b369704ef9f50833eb4bed9a8d167f6db80762e04c5c7f93c4e7f998474aa6c8ce7542144c33056fc5f45b3792eed92238d9eda9e15d7a8fce496520f62ce00ab1584e9eaf47a2ca4bff2630ceb09a4004f8699cb23d22c945eea7dd03f1acae9a5878a48b4523d0557b0855ff87ad8fa8351c6b56ad23f7c65bf56b6e127ba53219592513256383275a2c7021d50c87d356d91e6612f43704314b3b6c26e6db7f36f26981fa10ed1bb4067be659e7126dd4e2bcbe8d27afc3b00e741a280c15b55126af77d17964b518440baeb05c4c60d8e39b03cf8e11dd94c47fb71afa975fbd804090d0f49a8b25caeaef2e371b371363d80c47df4fded94323265c693cc75d62c8ebf3b0751b28920797104b4121595cbc2ff33caa8acd347b86ae922f977d2ac2f5ce2c087a1673cd9922cd7dea1a07e3a21daf3844b7c249eec0ec9325674b89ebc7e3dd28a52f6447a7fd4dd30b0469422793e0b26249e61795f58deac7f08c48ff478250086136ee3f1bab8ac5fe34036eaee6ed1bb4e73dcd2e2339c2d590ebe5500fa8ead40fa7899a6ccb6f1d0f3e408192c15e4f055b06e2353e0234452c14d9e6b2a38c1b94bfa037a0a109a72b0507624d539d7067faf3e9baf0fc3e2a22a98f2f02ae25811ea4a91ca453cfd3d857a99c2655592b48edcbc8d544e6fc03b19d1cdc0c18fbdfb5889526f6f00523b1b3d6678965e968b9262c4b76b6863d06b88fce31d18b6bbb772eb3d0492f50d491895ae37d5b5bc40a2603212d01811e8f3aea3d48a4e781dad941d8d3ffcc0638ac33ae059791214efebe43b16c688d1173393860b4b5a868972750d20994327a6602c24eb6488ce1329289400e4a81a10cb3a13209b402bd488630ef26c1603ca9f3c54669b7fe4be974add154a458c3b57b0bb2e6dc2f3a5554829091aeadafc53e8c5295b27ff50cc07ca26017b22f045880b806996524aa25de806783453207ae71039b21d0fa1f59f5ccb15ae0e578479b26d85432b39cd7db4055f1e027eccad0cbb7c1aeb648eb7383e4e8ef4c0d4d88b744fff2baad3a3c76bf41012459e4c4709b08112606c062a5416190dec2259221f09187061d2b332b5b358d6128e9147890cc8e3bf065376968d921e3fab4747713d49fe9fa0da9092fba9f8317b3c9bb665ec618f1755f0ada43d13ae9cf07149c650b5bcc3372ce8332067e1c643ff7140d31719382bfe5bfebe9352e57c1b01fb9bb4c7e0b72efb1007a0b89bb1fa5553e4b8c1521d02bc0e27f0e060c87a672c009b72c98b6e0135ab206f562b806cef15fc44327a710cdbce99f8d3c0febe20b0958631a8bc6cf4756113828d244dc0a5744996ed987f9c00bcfaf5dccccac41e5435152b226e90bfb84f2687ca67acf162cef0579c67e23914d0b64480f503d95387acbd813de57f4e67e05d3f1b3ac8e2c98b61c0999e3ca8ab0571f9f16ec47d5f597508e8291bd7d3752bf3108d2e74ea2f8219399b03f4c051c1e4c10c1b0bde67c2b03e0400644f3ac279130da9481232e9429ff13848c5c0c3ab2f6af0dc475617b8d538c2ef458d7b384dfb52d08f212fd36512e1d2d15ff230c635da09e666f33d76f7c84438129d2b28b36becee0e23bfa0ae4bfc042f150935f0f30a566e611a2a9757b4948c3ed8f83cdcd4392e3abd1558d844787313515c165319e66e255e7f6366ba212ab9d9bb5d3d065e530a3212d217b39ab6fcbf165800f744c81ec5f9b9892ec94d7562433e4b922eb64bacd40dd1f76b0a96a0a86d8319cb43b299229ccc97c0c968b60c5a7d815f35e5ef230f93837f486c341647bb87890b473ffe2afc04ff90f45d1ecb690d184579183e77737a3bf393da02a80668283a791d40ada394d40e6ee092fada9acca691429932b950a5d937193c18abdd610aff80366736ede3af300a98847685eee71e76180172d3c4dc0e5c42ca401567fc878fd9029d37e72f4026c7815444b3d137c6fcf31f707ee5f82282ad0de2696b24e4cacc8ae368b95ada8c42864224873f3c96fa5bb9a1ba8f1563a5db2433b91e46503d4e6552e900bd28f6471a6366e1e71820628d4ce0e06717928d6f8cc0590d589ec384a7b0d539464069ec1aa1a587d7b48b644d25c4c0fde7cdbbab7063d577affcb4ce8d86ace949d3c06573bdfcfa3a19d2784cf5895dd4b62530d5c0382fb019f8337c475e5b67920a7e01036cd9039adb36905a3016564d0745fdfa4cf943e4ac1c0be3a032fc43b0d6eac366f2f7015581790fb2dd1f82d63c04071499773e0543634d1506e50638e6f5be9c3c55771c50d41ba2868f512af088592e417ebd62d1c94b37b2f7de524a29539229b108c1084009913972648eccd155781554408077bb7bb77b73373f41290d0d3c70aaf7ef76fb7016901814697c327521779400191a1f86270b88b3dafa7b2e2584104a28a5942ead7f8d47f80e6fba0709f5a55547f4614bd002732a1575041d86a854adffe4e94631a7526154ff3545a5a2b4d0e99631598fc29f105d2971b8b5f8ddf763992294c732d958a5f9b14a918b2bae7c7e331dc1f0c1ed5eb6942fa594b293547e07327a32f4ea19f986aef4c114f971a867fce5c757cfc087310b8e91ff4871e80946f78d7a86af7c07e21df2bd07cce278f598797b66d2cb82592c0158712d2b1d16759cc562fd44b21d4657565a522b15b38ada2e000ed4523a50abe4d726aa4bc1acb8c32b19854791447491487edb2e7e71e5b4518763a4139525ed6c06f2e5e0bcb3332d314dca488a09f555b94e1fce741692f11569c903927196bf3fcb43db1d6ed860417dff4c5fd32b1c1027713532bef2df38195f6194ab3445039452519c103c9c191e6e689c355fbe7fcd0f20ceda3868a8a825e3ee446c7372489fa37d0ef6f373b6cfc93e87be8494e396bfc93d27f2e1d0c83c9cf7de1812b41214150a8a9a10328b142e7487910770e38f288615c5e21a95467951df3f98cb820484901dfb0295aaf5659e3ccae709babd7c2aa592515554c5522a2aaafaf2a9948a8aaaa2ea4a0d6054ff3545a5d6b8e2c510c2c4f75f5354a6d28d62fe84f42899aaf5659e6ccfd284fafe050221329228e3755597a594e15386ce15c065296450b99a8961bce776f28df483bd517f964288dc5c76227e59bbdd6b7ecfcdcdcdefb91f67ccef4168d99f436ba43b12a9a77960afc5edd177e3059eda0d4999b0fe6d48ea916a10d2378ccc0bdf712afc95f7294dbb35d0b67546e625fde9270beaf68ae5b6fba54771dc2b16ce54b276b39a35326fc673e5f793847833502be4bd1052bbd176efa12509f162700b84514171babb19c93cdaa1767009f4a1daab71dd4bd77d75551df7a9aee57aed56ae6390732e5e0b0c037f3f16cbfb3fdec1dfbd70bdbf1340564f8fc562ed759722dc08556405ee5c7f863ec4f5e777329cc033ccfe04de617ae8f2cdfa70ddcfb85ead3fdb5a6badcfa4fa4c3a55ce894aa44dcb30da7597ddd38ddbb5b1295c8df66c092364d810c2863b9ad921b37777575f51082184ded8175a17418273e323b101b777774f87d4c5bfabb9f19174f43fc0ed77eb2abc0a2a2000964aa51c57d3f83df0bc4372e31937469c1be3bfdb5c475dfcf90a6117b7371ce0b275b1e100b70f70db9ec1ccf2614fb4f70d250d9242650a2ea4501982104629858a1954c69082058f960469454996659af68252b07022050b212958646132996a9582051852b0e802a333cb8ca0314cb7f55cf9da1685ac3df3d2c6f96f43718452be9d2a736c15d853e10b8156e76130427f8f1f5f07ce7c1d3a35ee1c36f959078e0e2074e84c1d380ff2d09eab0308f9ae0e1cf8b4e70755be7d61a76e3d27d0988a6a8a0c33c86546e3ac202f442a5b3a41edb8089bcc913ec618c61161cd89da3d1d1f9c99f87e78e89b1b2dd8b4ad553c14d39e54540d523a41dd00c7f4977c50bba733d3f1136e63dfbf01dec12fad4aa5605845dfc78bff9a74835fa710b8f11f9d0f1f8f0ee98150d051778e2f14a6eab89c92c1cde89919332cb36e46afbcdf515077777737f64efc49affadf936671fb148ccbc11e886f61b6c9c3a1734eeedd17e589bb93ebaaa6d2aa3ef2233f7a2aa82e84b99077f6437d2bb7ff0d7512b7dbbbe14f4685d6514e8ad18e5f470fa8a87f86bc67f2ebe801f55094531e3da0a2fe911ff975f4808a3ac2a307d4de5cc7afa376539c52df4308b9d7df48e8c3c0d07a7b3cbf3198410dc21fc2519e8c5a53a95759dbd1dcae7694244c063fdc9fd25a53a97f954ac659e8f56051fb87535a6b2aa5a2a487e1d4f7d89c4ce241679473da211ce5badc6031c051ac10b6048d613aec753bbea60931d2376ed9773bd1ea5b79ef6f1e236991feb4822abf4bdfd5f71ea5987dd48461264ac4ed87ee506a3690a84d04b35e5114dc47f4a3381a8fa445514fe36d504f034551377f5a41655f4d5b9419518320fcae758e34897f84c6a37e3e4f1a8f7a9b686d58ec5b52e3abe6b9a2764f15a2620c3de3618c312c7585c09e528681e9fe171824d4feeee56a1dadcb574ad52be7d114c52261c4b077cc5288830f48258661cde2f6f6f676ef2d36f60e5bc5cf295e358f88baf41d8b165a8eb467380b419665f0553a5440061d197495bbbb7b063ff34c48f6347377233146227c466cccb3ef88ec70bb1daef6717e46a4de693b20f0bb1d6eb6a22a8ee9d7826078c77bd3cd48d73fdb6296da6ac6c5c78cc02b2d55a9a6d0184672649c97039bc87e87fe4cfbec1ae919d267a42cebed99f9651c897b63701a67245ff77d03b0f98f1be2af1b216ddbaf9b5fbf86308319cc2084cdc1c78c5e503b7e463bf0d02a9f5c141929f1a0764c04e4bec6c9a4500108541c6144c511392a6021042e28a594429d01f8204a16437081e1e4035576e0835a03289a870356909104139c31022551de1080a078c1254c5e2b3fb4902405af9a03430970a82841cf0b08f2321548ec5051822321f87bfa0652a2b8fd303d495e133a5edee55fb8d7e3c201f1ad27876a1117ae7b1e33f6923cebe291899a7df77a1efba4311c07806b59c13e0aea693c3bcb8a89245f0faffa1f7f8bed6a6abe0ddb3da684dbbd1e563b69276f4ab33c2ab76d956b2a71abee66bb0706c7dcae5bb60fbcea6f99958afb9695ea6d252fc02f3be9c6314165557773dff7eb52f0a5a5b32208a55ede7b4fdb485fd334664fb30cc608292d514ccb30f7c1534834af43caf0ab26013ede46f337a81d1572988e4b5063851c8c314666f82f462b045ada72c5139e273c3c3c3c9487278b51860132cec2789e50cac3f3a46f8c7f45edc7f38290303ba2fe6c44396c423d43f35856d3f9d0478e8afa5eb296d3310875ae73f415d4339d6a4ad0ed57bd58874ee4f1e7d6f8aba8c87d8afabec69d1be24790bb801f5db7421ecda15bdbf6e3abfe2514c8496a7b3d7d6d76f3f155a3b6a8fd1d7dddde866eab7c238a825f318fe36bd81dd972993ec74bbb736ab96a7c7d1b9c6b65775c5a2ef92f2abb03d372b57c7d179ec4b95cb03b59cbc532ed8ea9e5227d8e6fc1eed0b45cf35d7e8573fde042d262c1eeb8d072bd3c7cceeeac5a2e1b5fb3e7de7e732e18bbd32dd7cae3f81f5c485a2bd89d03b45cf5735857665d2bef3abd8be55d341ef53baf95e3addd61b55cd9bb5897cbefbc16675dfd2e7f177c97fcf8cfb95eac6be7b55e3e8775cd77d17761efd23efb7e153817ea7158d78b75d578978d77a5de75e35b7ee7b55cac6b7b17e95da577d537f5f0bafc2d29ee07c783aff86bf0d340b1703a702bfcd5c4d1f88abfc401f1153f897b1bf7807cc5af71295f313fc605f1153fe55e8faff827f79cbcaff823e7c357fc90db817b3edc7bf98abf871592d754c9141a9a20d267a40902bf070dadeae717637cd1a5c4e1878f205850ad414f4343cd3b852da3498ec618e38bcf371e540aab32b5d63a84d7a4844c03cb20a38279d1dcdd2db7aae5bd5f65dcba39a7153295bcf7dea3b9f06513550645170097a54c9183db3de87d4938a69f9e400852d277f4964a3f485c11785f2a954abd94d6da4ea5bad21e49294d26db034dab895b24cc31f404a9fa45aaa61e061ac1f790bc384d2a954a01911abbc2052ec071e90e258435d8f44ca414bafb90940cadd2b89c540df45f7a06830f49356c56071b4c6ac746547630f2e6bfa0ae94ac9ad7f0bd07f9bd071b42925b1d981839ebf986e140d3788b3d9a34bd17ebd32a6b042200a427028f4600484f04dce56b1b157f6a23405d7a04e8973825a727714a565ed31ea98792d32bd1f916cb4b4ec9ca2b61798c7bd7b1134765937a642fb1aff1c9d0ce1881c762a0318ccc0fa584f847fefc70973b15131ce34a700cddcd53bbbc84885fee8ff77f2ae59dfcb93effa77603bae5502ac131f8cb9f37c312bce3e7c5e03fbe5242fef00e49ed942d95904b708cffe424131c239b68974c7e38c6df4f0eeff9643de42cc7e995ed5291da21a1dbc9dcce7f5438cdf29f1f6b7fbce7ba8ffff0d4963f3d582e463484295dfce1a5b7832429e5db5af30c6291cad29c546231839a6f4d7a1042f8a56bb11d3864860f3243e9912584314266f8200ac5e20ea16f3e0d99614b0aa3fe82fa3e3a843e04648650344da31a7577ed39fde71a7de7684aa39a53224e299c9c6b9a4604d32eb05d21462ecd76dd0614ba4db35e2907a16746680cd345a19e91a996e742bfc8e3d85760d031cce0c82a9ecb7f232b02bb8828337702c74423e9aafe9d33ab7b7c1577c84f71b5a5273286f3d85f6ebd8adf3df153a99e9bbb4f76d656e4cb4477a337837f7c0fc3c5607f02b3b68f261b37c7eddc683aabe63ba77119a7659be4f8665c4ef6407c2bb34de4df90d127f7c24e953fdf5dfa5fc95008eb426393690eb5ca8f38a6abd637faf45a7e97b9918f1180165abfc3de7702b85cc070dbde8e32f30a06290b2a176e3f0933f10ec64123c7eda6361ead2e455448c46d114012dc7e970214ce783f6a38446f4d22994c2693c9b4624d9c13b5ea7d8966d8ecec9e301d6825d2cb67186519686838ad501b9ac4e3f44de2c19261996fee241ef44da8cd54f93d8eb16183c6bf54ca32c7d8781b35dee5bed15422f9a665189d12c58209bd6b2a917cd3328c4e8962e14e34b38bfabe61a35ec566d40739267e84f006be6c3ccc08f2bbe7b6021555b2481a8907478f3136a9d98b2a21ea7b55cbf7aa56c91a74b44acac8b44abeaf00828ae4b24a4687ffb335ad75d6fd72bb37566f305c7aa5921df248bd71435a255f255f343432aa9fb64ba5dcca205b096a97ba32f5f2301a69ebee761944be2e436182cadd68abfc1f10131aab96f82b49d005c0e597ce1857e31516d5082e7ee860c4145f59719798c4c9ed642edd740092c407b6e05b1141143e7ea87aa6ab417a06879e7922e0892d96d36530bcdad083a3e0e0dc678b1061231c9c6be474e37b1123db8d3bdc2e420401b739e6bd1179f9df85e9195884df88bc410244721041c07d1cf3da32eb783d62e74feaf178f877e0c6bf3972a487d943db0e090e486c70997550dbf50b99b6f377eb7243bf7f3fdfeeff9acbaca3eb1e6d837fbff71bdef7f78c8caf0f14d597114cdcc8c55b7b86a5308529bc3358077f5400121bdcc6611ddc38b767a0448912254a9428c1a20b323e90822460f0821c28a191055b94b3c184e1be5573ce393139b1c9524a29259c137b8841a9d303313cd0c40a31a204f184d65c72e71550a4e05e59116afcc81d39923d7c6d7b52bbbfb3493fe48e401bf9515a97fef825283f7b07b8b499b63df9f171e937f2ae0bf636f0af4bff91d2c7cf3897b62e98b591479ab4b5895ffa23f2e11f6942ad4de9e31f812f5f7bbe691b0c6a475bdb9738edfd907e64bf71f035aef44c7aa59f706abffddb847e9090a84f89379f793a71e74fa23b3f01ad9a191b95e643ca823a7f7294241220e3acede7d3382b27a7aebca9a6336e657e35cd399fb482cac3a501dacb7740f6f19d55b22e4d55ce82d6a5edf3f1556b7ee98c4ab22efdf0dbba34403e7c07c887f648139bece31f71407cf8d01ec92c3bb794c09f5f9d157f0a7963511ccee670780fce5632e59b8e43a780782cd7ffe1c091a0f64b944387ffd3e2d02b874df2d12a6722d3f5879b0df04a182153c1a188dac9bc4ccf9c6e5fee125b1b5af5601c76f6830da220452717d48e8f766829a5ed825851df1d42aae1bdf7ef551ffb9a783f49549ffa136317717af011a5b5aa6e90213e341f93090693930b6a47739b92b657abfa07281d144ecf6caf25b73f72156855f35408bcbf78c03e6e2f3a4489b6170e0d0e0d0d0d8d0d22cc88bed657a35ad4ee2f3d7951e19b815f0c1d1331a5dfc1c869aaf1157d2f2e5fe6192af062a0df454aea117f4ae86f520d3b795179d04419bbe4d8d7382b4805de0c8fe7c5404bdf7d86c9d02afa32ada26fe2de8fafe84fee25f17cb8978463e8077116fdc7d35fb2ddbf8d52daf433fa508a5ae3ae43868677f0353dfd14a526fb7a7c459fde68e1a2f62769ed917ac47f428f0cfa68530c538211bd547b0a044dab498f7706ad7183daa92efca183b34ea7d3e9743a9d5434925246b33130344de38d3932073d270ef5cdc96b83d300bd2fec54d4bfaf5103a26aa05e4b8a868d1a10e744c3460d16542a85a261a3460d1a284e49cbb3b4fca9254522bdb66289bc33eeca909441ed9b25f59a5e7d26bd46721ff64de281c5ef7c0899a43d18153f3c1bcfa6b3f96c3d1bcfb6fd3c9d27fdf46c383ddd93e5676992be443a711bcbd64f670b620b620b620be267a5e9185e4cf105f6e6184114e1c2e28228b86451e165286294e144cdc0a05a0461c30508620421a89a2e431123c88a318310a05868d0821f31982045a1d6cb50c4308284846ac30c1616545213321454e9a26e97a1842114467d529d4009a3090832276d514f97a18481c40d235496cb50c2d059426d6902090a957e214645fd808549255941f2a292a670a941adc1840b0e2a8dcb509c20c40d332a14a33020362f4331528251193c300a06e18310420821841062acad187941082185134a18218490c209258c10c2577f400712460821841046082184104208218411460821564583514e8a653483514e8a4daca87f866094934a0aa39c711e3da0a228a18c5a387733e5d7116ca8c5f3eec61e0624139ff8c17c620a7511bc15646c7184135a381184254b82d0e451faa003e1ee4f0c3d51253ac3113031c20a263eafef154eb84e0118fc4c01820447445bb4e008ae573105e76ed76bbaa6abc8810fa630c968f0024e379f589ec57e89eb7ca8bec6c2d5c0d7646279d3afd8174050b756ad686fe5e3bff7de7b0f9272a04d74575e7e7777770ed3577ebebbbb4b520e121add95a70f21849394438c2b8f7d8c9192728072e5b3971223e5e093832689c83be3b2d88c9443b7509c64a276af9172782dd46b5b2b5961b12e36b0bce96b60597993457299647a24069cdef42c275bfa7ed3f6a4afe9ca99bec687f8d0ddbaabd833825c0f0f496d2c0848bb08ca9ef040e6c2174a2e7cac460a96a04cb8f0672a254f4e50298017525cf8b1a40225905f645cf83e86143df041094240014aaba357dcae5e29c395345cc941509a488094328c2a657c5a6150174374043cd0de0cf4b5c31518f8f624b980ed49db3ba0f4dbf647e21f81bf5919191edaaefce781c7e228f0588f27c03be62ba2a5e430ae4cc295d2e5ffc4efde922bff45a19a71fa392d517d3295f93693d38103d22a1be8f39d10a01348abe463568756c9da53577850bffd86f9d36238a89de38acfbe72c17f5fc9a75d481d80f44cf6daa75cb23f127fb3ec2bf899adf1957c23680f6c8c0738308c37039dccef6019173ef4c16305398a383009508b0b9f1fab8342b8505ef8b007324fe52c18743b19783be8045a8b3dbf9671987df7f55ebee26828f75acdf5c5b81a2d18e4943e2fc9fca072cbbf834e3a991674e2ac1fd0899073f2491997784243688926647c8929384b0ce176d08c7a657c345005176e1ce5c21d78074320f8f07f388b7aa076b03518042f7c78d43339cde22b20118a2e2c82537a86a354f981423c6594e919f8f087f44cccb9d05355d4de7094680cd3f10d7aee7ba39ef1376d31640add59e481faaecfa2fb6691af5e16b53305ddf70ca576f3e8b69d471cf37e8261dae2c237c00b2baa5d0b2d08f10eba99846050c2248411c0c8002f021819e0d582500b42a6b626a1563d53d011fdce00af79348f4c4374be7b038c67038afb6abab30145675185a0d4f74d1f0625b479c4a970b52eaa1a018c7807955d0b302871df6b5308c7852fbf6b41e8bea19ee9e6cb85d6002f8ea9a276d300affb483de8258011c7bc278091015eb1ca1cba6f0ab5eaa9c0835be4f578c171e10e1c2a5c38895a358beefb1bf46c1121ec99924cb3929527f1ca4b2eb3f39481f1f257b847ea81cdcf326c961a7382218907b4f0c9396514925d4c6a46a5f09f854bb414254e9035c53a4390a0c9104f88d00111529614618896cb528038ca3ea0310e1820ce2ae5b02e3e2b704e602c0c1f808fe16b702b58570bffaa3f71d6ba743c007ee338eb523dcc6332313ce55cac0b00ff313fb917eb72e171acf0ce7dcceb781a9ceb7f85af9ccbe2788d73bddd29b55478ee5b3897f6ff28ce85e3dfe54d9cebffffe533ed5d5c5e5e723c8ef8389e8573c1108097f912e70a400e197f1cae1aff31b83c0c2f313874fcb7fcea499c0b002fff428e5fb1f02af838de85ffe65c2dbc3c0b39fa73bccbdfe05c3a5a2ed4bb58577d97697bd2bbbc7d17675d6f5d6d5df25db1dfad8bc6bb6e50d164c97dadbd2b9b4f6fbcaba5c6db9041f29ab218ddec35ae3509d5bb7e2d20f255f6eca467b49bfdf68477f0cda2dcec5918a3bea75cf4cc46897ac63fdb381b4558a108d5ffd405ef989ffd29e8949d8870b3ecbb1316373b09ddec44e5658c9b7da98877943efb12127807fcec4b497833689f7d098c9ee9cfbe64d433db67d95367c91f537621f738863253a21db4efd65c0d54492d02eb670f736ae52891b33627beca3ea3fc4a5de97694e866dadb387e4e7cbbf4ddb0e2668f63287b3f0ac43bb6cf24f618b6b2d20289503b7ab10cfbc95ef69ae448f16f78db29096f01dbfb6bceb9d8b0bdfff6482e92cb241e8d625299b4fdf6a455dbab55d96b7673d2aaec4b53eacb9e61322b84c5080b82298541c641959e3b852e36059222be40011323966082152d7862074541d8e69c731681e04e29219d41ccc956f81005248a804206146ed09a3e38f84205a52120c08216340107513e90238474c20b2ec29099c49a907a5ac041085e38f0422793712699734e2b54f0834c0a0b70984c6962d424a889932b80cb5734c9719fdb33d7d5f7f87d3fde5ecfc7764372d3c3e5e7e6e1f9bd31d7f99dcf1ad7c16dfec65cd76fdbbae7b66dd877db679fd9f7a52f6ddb97bec36c9dda6398ed486fb26fa2d7046b9cc56265686bfa94b34e56e5abfe9eb6a3e1565a336d9b4edfa437cded4bf6c4c13b696f76c876bb5b68049a8fe77f3efdfca91a6765cf1fc4592f3cfff33f27ce5aa19a9e1fc8d37116e9990597d1c1592ccf2e3cff5be2ac956fc9f1fc3c38cbc6f3bf1ffab27ad5b7f092c3615d2e8fe327b702ccaff0dc53eead6bb6f0abc7b817accbe5bff01bc78275b1c03dcc973815fcc4b9605df8f9aaafc159eb5ac13e0b9fe27258d70b351efb1b9cebe55d39fe0a2496dcf73474b454c8f138be72ae1c7607002d57e973bccb6b2e76a7d4fa7fb1ae1b5f1f87dda1d172d177f99697a7f1daa338d7cbff80e34d38def434ec8eb75c29170ebb13d3729d1ec7ffa07de45c26bb6380966bfb1c9add7969b9b477f917bb836ab95e3e3e0be7aa81d99d96960b7b9777bb435bae97f7872fd89dd772d1089b89e356a9e543d5aa56bd1f5a857b2d948df6714e7b23b3c7e8db6c2f6d567ebef6d2be649f91666fa2e9312ae56b6fc3f2f2b71abf7d3669fcfc95953fd9f7f295ffcda4daf6a59fd29bec136261f91a34ec0dcadeb0d81bd34d09c8f694feacfc666fb412863dc9de6c1a46e394598c31623645446d15a2b6c582e4f55c02867369fc17638cd13eab7de6af10d477b5df9c6b9afb5dba653c329cdb40af2b5f636652036c94f202fef2570ede22bdf6a0a894e6b48ae26c5d03613fbe6a8bf9b4aabd05836891b3b68fdf519c8bf9604b6e63385c509e1ba2b0a48926a2c0843192600614174099c2081914251894134011020ace46c5182c97a9a822070957bc6600f4924115526ebc6009a571820a44abca09b2f831411330906081063a34f0a9474b4a49583281f07af2c52f51e18a170db2b8a6cbaf1a488115c987723b82c96de1b2942372a4f88c715f2e4bf101c2f568851889574a9758b22e31c6daffb8d29aba3e5972ef526795645e26c3007d971b3021998593d4233e9c5cf777d65f79faa747d22a712ed4da984c7fb2372bf6c74dfdd2236915b159f96a6f566c0edcf2e1abe716b350b54d5c6ea0423010dfe50621b555f36dea728b3954aba814518ce02303a3202d9e7084508f086a78a29302a01a64f0f2c10551d0164bb0713948a88ca02d8ade07f169c2c81036d249828ffc3173374da58942e3ac1f3d6c7a48ab7e34805916e0557f1709bd216f86d6f1fec13be88ef7b81f45a8f2762cf48374e3882a3dc759d96bff819a83668c29b26081175b48c145135afd3108c7f4cb9efae693def436a4376d4fb236a42fd91bec492b4051b955f15484fa2ee5e1f2637bbe362a52111bec377b93b23970eb7dd5d8734bb3a997c83d4cabe277d256ab24fb48ea01b34de037f1870f551404683606849c2160cf9134a208270228a6008826a207aea007280a510c787cf4f87097a35cc1644681c40c7e7850023174aa500112961083080461f454a1e4078a30867cc5d409205f3101c4ab020523a862490d3031bedb6e12ad6a173c2aaee429de7b3dc469292e6ae94ddf4e4a292eaa3f7c95af643b91c9589aed55cf073e1fd211070dbd84bc7b82baff2b63f73a2e49d3fea84470ca895642be845fd3917b493829bff47ca20e6ad7cdd3333247929ee95e92d67949e0cb979f8377c4c79468216ac189f1df7befbd1763b442de8b25cc84554c267131e973b19921921ba29a4adb935e67a9ef548f7e27a3b89a647235d9c4d55e26d1ac2ab516a25b93dcf849dc88d9ee2f931b9f9e7474f09e8a6e734048b340dc41eda2049240124802dd9864a3725bcad7ed6fc1a153d05ec34eb2454d00ef4800ef68cee2f26fcf3d4f085acc0461c13af021c32c99caacda09e01d8dc3841e709e853d2e34e18807222c4a2117be0da81266a3f5e12c1e220fce3a40f202920d281a8e895fd305b8b1061967c940191a1fd79f55513ec340e0fabf668e3f20815b6644c288b4faf2b3d733ca4a4f8548a78fafd91b1aaf3d661f91fcda83bdaabd919946fa7942277b737a1af601f9ca1f656f58eccd89943db540a6352afd8a7d3ff54dda4df6a36ef646b33799ad9976877f38987d3d46af9e940c11d0c3a94f9f5bd0a8ab4442f2f1ab055fd31f5038432f94f225be727f8c9338bef2cedd873a1f5ad2f950e7434b52292121d22caa9d3b29e3859dea3fb7ab445912b793473ed4551627d79f45c759262027fdea3aa8ab44a457ad3e6f07b52371750b8ef17f5c3d02c74054eaa276a6a2eb6f2a7256472d34152d21bdaebfcb807754c1ac8d574ede0c8f6378efef3360b701cf4047e5e0eee0c12bff3d28b78329e306f1d5fb6ea1705010638c2c03eb50c9185f3e8431be44ff0e420863941fa17c2130ca4d4a29e547b750ca2865a465e8f0f87412d75f331d896fd33aa245b1f4f1a1c9b1cfec3bc2ec0db43714fb1bf655932236dac38ff1b3b7217dfc9293faa5dfec2bba6962b3bd7c93bd5979d39f6e24666fa6bdb9299a456ce0676f833d7c8dda3774d3c4867e7c92bd21bde9ab7d4e6eb6e773632ad99bccdecca1f9f1a50dd2c406be7cac8966df921bfada93eca6d99b2cda9b9bf8f2a7854d6c200f56e52b9ff646da1b1f47413e299a222755f5dd1bfaee2db9d1d22e456daa68da3af4dc9296faea793fb7a0e5fe794d93a49e80624513ff546abb5c450eac48f262841222b9935b188661188661294cd3344dd334ad6a396c994d0ed4be7c4be0bf5484b08788243616829e49cde7d9129a3e7d3e8075988c044a4bf3638e0ece9aafbded954aa552a9b4f2b5d65a5fe3882060ced7616e43dacfcf4aa592c9f4a5d26759a9542a954a255366c6ad5969deccae5823f1522e954826d3974aa552e93b1e1a919b4bc4efb63d22ea84a7ba7446c8afdd8705fc0d2f71a6525d84316e4b8985f659072fc5529d8cc675aabe3d490b80e9693715a50183dabd068898b66feecad0e0c306c8101e727a925812c56b4acf74cf70a195b89c265acf05d89b3d897b57a30b8069154ab32a1a30a8f38bd4c0377e0def720c5df62fc95d804ab35d5f0bd32a0dbcdbbd0ba11821e7f6d36743a50c68228f5a224f05dbdb5f2cc99f5c77e44a7b6538c65350bb7f465a6325d060949362196de686514e8acd66ee2118e5a4b2991b4639633377118c123673c3e8cddc47b09bb95b09f5bd377337738b80058f99fdc9f75e326798e6db9c334277b85168e7f4f7b44e069b945218d57f4d51c9eaa90ada980c34fabcf9e9d738bdb9cf3513dfe0e0e0f870a1dfccc9d78cfb9a8877d94bfa1aa87708c4f1e176fd44a6193e9cd1612fd96e5db77d2234c7033edc221a90f7bd06e6cd0092fb6c77fcb2d91279665c68c3eb3ea781be9075f4cb671dad007f9ef3a683deb7bf53c0bfaff17fce4fc4afb310fff76e85f0b725727329131ac37411e8ced7e684395198c023f06abeb6e2c3191271cc7cd48afce88fcdf9f088d25a53a97f9f6fbe96a4fb89e071431a308bd975e0932a77422cee843ab813dee0ce0c7b29ee845100dd225087de39a98e2ac39d34dc2877eac0504adf48aaad3379554e42d447f4865a35df6454316b6386221096037f61a716151919a16eb04b036e7ccbdbb498dec6897c155f8b5b955645920df2fa901015fac09e56bd27b920fb7722d41ba197e5f4efbd8a0dded14fe3b7f72c78061affde7bcd8beeb301a36aa8240dd864390919a2110000000405e314000028100c89c4615048281e154ea37c14000e869e4a74569808c32887519431c618420c210400628080804c116d0300d63aa5b931e6be1fc7bdb30fba0db6651255bf25710020b8f09afeada7886fe8fe7d810c586e3ea9926289c27dd9aee27d87c1388fc6929d6068b39663551821c362fccbfd1d35afb11ed40c763090db0332f4326a2c7778a6845e01bf27963ffffd05ca099193ba13792bc9f140a1fcf7577301fa1e12aa29454c69552102ba7753398940257f0b0ff2fd65b5c7ec91ed6b8afede3ec4e9722de85bdcbe160d62b3d7babfadff0861cc4a98bc57cd95d08e600f8a11c4e5cd10983d02c9fd5d9ce86b87c150d765658fade2c02b59923bd1c2f12e42bf2c6aa05f358ea15f80f937556f98fa9a4d1ebfe31f30b93b1ce69117ac79ff7314c0bd3450eb6f74b057eb2a5cd5df69acd8b39d03ba8ad59367e177cfdd3c33ddd9b2b7baf21b0c189fe2ae55392a99755eebc22eb4f39310b252d636c9cdc86129c32e3699d9378d520bcb46387ac3256c61781b04d76a7b6f0722d807c07808b0650c06955722dc131fcaab14b4acba49e4afccfa6fa1143916e62ed3982f1a0ba38de44a39cbfd6e62f245e2caf5ad3139392417cdbba5b77e034773bbac733739ba1e92a14ecb40b70a71a954c7f3fe377b27f5d4621c45395dbec9414c2efcaddc527a5c6be78db3ca014f85c0580295ea62d707a56b92b72c3b20784a7230f6955594ba3eaee65d2461fe06130368cd542d9828d9fb048abc2722fed4667fc372456282b86006e2ba12e4f43b4fa67a38c9e26257048a1999ee506f2664429e9f9fbb869d26bbd52d3aabbfdbae15fbcf4b7c13d3cf7fea5811dcfab5020fa424dc7a6d274a228642314460348f3ebf89f8b59e9b35ce35887bf3b8075bdee209a2f2542ed008674effbbc94c71c186c809110208705124af5daf108ff74a9d4b9718a527346210b2e9a72038ab47371a5d7101a0221483ae56027f3fa1241787b5e670537d41dc884768978a6a48d083f13f22807d53b8236c5d3ba7d322239753bbcba2b356be2125bdb6055ba2ceb620ed55b5ba410f832e54c3bbb4af28c975acb0e445e142739c64e2c2e962ab5914f414650b9f2dde6a0fe05d630353407402e92e23d86b4bb0c450e1979b0352446519c5806bd15db1674f9e05f1ced1f3e23fd428ba2954a95f68de09c0fd20ac47f5a82bc34eb82ebbe63e11ce20cd94e001d8cf4becd8f0c71f3bd5ca81e07c6bf401e0d605d4fc8c4a90b55fa37274fdc3249d3d8a8e48323c502d73cda258ce86878ad229c2d66397aaea179a8c49d37cd2c1579418080bfd2640fe1278d7196b28e6e840cb69240bd6ed51e53481af3a27e2ff509ae055e5719eb9f20eafb020131142dbaeb0aef90d29f8a54e2ab23e4b0e305246d68e698ab68ec1a0047bf3c111503fd58dcb8b5d49c2c427bb605a773bd9d8a18bb64e3bbd6a9d644548df6813aefba4ead7f100dd9c5875379399e443a1634455761e50cae9bbf80a1d7f9b31ae1ac6f682ad5cc1dac75b2e3092d5b0eeed8fec1520d9e433d69e95fbbbbe2c4fe2ebe83307d6c847e3a8bb3312785591ba93aef834151cc2d147247a324e23934b01540c42491c24492a6a12303bf3345019b375c3b614dd77b3d24541f79e8a6f1757964bbe0c98167c7d38b783887fb8de353be6ddf44e18608ae04c70a5e7652674140636213f206497b46a3b04df6eed3514ffa7e7c2f2cabbf165fa20237323695e4fdea7c01131a3d2d8f4d4811667400cd76808fd7d78fca32901f9b18315e527d881b00a4beba95145e408a35481dbc78532467f232b6d0bc57827b625a46a0db7a29a90ab3678bc4c0a4e3a3fc41dd355aa81ef6870334e17e13b00a262c237ff68b34401ed3d3988abf0474623ac318a528f33f2c54736af7cbef9250c9dcba1564369e2da7a64e970ffd5ff7ea68cd0f2a5e6d411f8a41f301d8824a70c44277ce0b4c710caacaeb5f3a04adf2354eae41dd101213d6f8c9767f2b8e1143ab526e8a55f5ac62ff4167f202018bfd09bf1e9eb2fb03ee4f4411af7d9047bab616162a9c2ef7cb83470c2897d6069318663761e96cc9c1072ff397aa8e2a7243513c20473982e230507868031993deb2f5d79bfe88010945abd2d48e300b665b9bf6d8248f24494a0e05e8810ab61427b69716a74997d4b46665b31dcd0c652e149854cd7e6ea57546a3e1ede48fefb23a6dfd522d5e7b1aa98c3d1639111ab6deb4356ed9b2478e26212d6bb58bd436f0c1e7793d29473287314ac2a977f44f2bf59f0837db428790051d4075689bd3a3d69bdf98e57b1e7a67e0a0a824eb973cec8a3ac5987e09882da93edbad30e1236b6063cbc74c83bbd002d8cc4962666bab346680549471aea9229199313994ef63b5949b77916a9409da817bf1f5a7f087533b9cfa66a31ca87948823d0719f0e890a91b9e4768a2887a755aab49fcc559576481073289817c8f29ea292a43a1f0e47dfcb5a711c776b0e73112d3f3e46496ab7069890a694e6e3b0a0e6932408b0f2587f7401323402b5bab17981ce8bc41ee1d32c1b0eee64dafc9e50474827f5f61e82794b743307fb1e89bfa74d7733fe6b7d8fcaba31c1674e1865fb1cd98583684694caade8f89fa9d0ef1472fff39871f653b9a5a9343e3b6698889a04e50b2374969e50481c7be22268462106696b6b1ca6c51910c9837de0b466dc1c4a2baae72815f3c29f5f4c67c730a009dd41c5044c6cc4546a4cd94b3280553669e3cc83368eb641d53a29c7abd9d1a46740da6d692202fa5c4047d260a140533378a3ff78cd875e3407f281deb8ea7bbe21d5a24a8dd3e1a1568f2f11341d73486ffcc0150c27d094e952730ae8f61df9c84a84fa414a24a095f80267582dc7c42c04f3f4bc1165a70e7d66d9c8c3067404366e8d38deebfab91c031713517895a18deff16158bdbefdd457759e7e1f42bd0866ac874f2a652f0a02edf980265eb8b71c7a9146a307b4817e87d0317d8fc1576d28cd52108bc1d0c1681d50816418640407386d71b56d24a1696b4995e652f3679b7273b045d13e6afdf5d01201de451649ece5cc42ec929692de95fdb47cb499b5b85ef483f66a9902178cd51e59c229b2f6a5cc4ebfb9eaaa9b67185e2d6497bf641d7ba627cb3f13e32f946a10105f002270e31a4c104412eab0dbd96d86931adb555777b4f0291fe01d820200a590d8af05e5ea15947a9e7697027fcac21b38a77839d070954168f13bca1f95d22479e87fd02924004d3f349d5ff75910f2fc2b6db80ba068e5f4c7f4f45a2af657452123e3a13a964d4c180305cef143ea99de6dbf41c98f4dfb07694ed93695411b4abafbca22262c617f4cc58ea33e38f59955e766f1f90c409e8a00931a51a40cbc33c67f4fce22eac31b5939c96ee0fd9c3610dd2a35a0216d3ab4f2e5da5f014a8323a2f43107797b39523aa01a72810f9d4713ad3d645197adcf42de466de16e4d8744125b6ba6bc0679824278b259d2a3adc8879a555f918483fb5c360fcc027c16943942e3462bd2648ad50c57756fe00bd37490280c050888415b0a8f0f90175137d56d15b30dd6cf5b814f06bfe0f0f0829ac5e7e4e60974e9d9e48d14a09a2667fc840abb946bf44325c9700d11d49594139850d7960f3572f220c76efcf499cf87ed7634234d924f6b156124075c9b861cc314458882e779a87de9aec4edcde5d40c299ddd43ad8a20f91e9039cfa29821659b8bc2da7225cb2a845d42045041d3aa1ee5cc4fbd8ff2e4931e7014b65a014c6e221cdc27d085053467004e7306c762bff39763a2b4f76791b95cb97c26301908fe7d5c8d43d37a193a5345ca8b33212e5f69c86d6c37259bdc3d79ab12afd0146bbf3e36d816da760f6233cd8f8c19dfd29d96f3521e40ef0b26656c6cf4158ffc6b020fd30323aab1f142de6bdef50bb1802ffd708e509cc61129e9b96190924cfacd8db87354604c6f0c50d25b1c8339bc1e04e118a1fc9f15b7794ee2e1a333e5042aff4c28e051e60287038beee2a039438763b2c884467ab7365a093a3b529a63d6b6000f839c0557a7ec9c9459b0ff551750009f5fbb2070a709e4820532743aa091e09c7a137d526542bb956d8aaff5ea6b119265fc8fd261d2001504c7071439cf969cef4fc065c730f161a948aa818b4aa2fa699aa711d8cce4cb20d1f0ae9e8fef5982a02d9689815f1ba0647770214366f4b2296e433791d5a624ae79ad61e2d3f3f9aacae2ea7f7a20862ab0ad405386b909e6c72f19df34f854f2bda89ae1f2f1cfb243be40f56ed0a23aaaf66ee642339e81ba54f1f8801dffdac5b31f2116af2b3acdebfc896671cea3b9fcee8a9c3ace073617687aff387eefa3bd2bd9a125cc67bff13357632c972b02e50b9f174e08606a636f1bba3c38de96e6c4abf1cf3b1fccbd4a4894def86869c89f4162248012d115a559d3c178da8747cb7d7889135fb061f2c8f956346ccb9f1ce030f4272821c6dc7f6637753cba64b3c49431add4bda396003e3420ee17ba0bdeeaeee8fd86b19cb63b81319149e6e86276ae1d57e75f12ed61541cba00e7c94fd6e6070c8d485b51931b5a79383355116415a3a5ee5cd9d9e05437989ca651190c36f3c73ef0665e0ad18b570ed70b8cc48819213937b4094bcf70a041e8e792ba7154b832bfbfe0409d1b3507024bf5e1025bc8b0f5e149ba4a649a2f0579bad6c6ea508af2f5be83bf7375186e322e51f3b8832100d1ab038d7f7bc73b8dd01d60142476c024acb619da88bc8f62a179dca49fd53dc873a92c45dd399514e5252f3126e911995d943870eb840696e0e0f2c7d2c029068889938282b6d7eb02887af39e75f74c11b49ba91acec5e91c1db0c8b299b23d9bb88472d2a52e4ecb2997d40d06ce3a3677fd91c2c9b4211a83a52b48fe092556ecab86825fb397732d467934c9cd5ce92fec057dbf079aba64b13dafc2efaddebf60dd2f96128d20534a349c4bd708d4cd59dd8545e06dbc5b65434edb760ec48da54941859963e3de27b4336c368cd38f6569fd923b66fd57dd6f599a08091c828a2f95e249bb8946e51d5784655977aaa8e84aa37cb7295a62136a0a5a160fe2e3d53a554bca8dbc5e874bd2f98c9bc61fc8c1eb48ff76e6a1c2a2f4ee2e74290c252ed43d4fa5eab206e8c44549cff54fea68a00b10bc00bd72a2673c6b1c9d929ee20736b79fbceb9d1c249ee201b44e7fae98cac26eac7967ac17316443fd187f4d35b28b1b157115e902ecbb184f9b0c9269a2eaa8eca3bff13787fac30dd74869dffc9424eacbea1dabc17e89a000d06843d1bc001d8f607a0b2097cd182fbc3db1fe64480202a91c3d79bb4c7bb3a8d4b75bd7257a8a4460eae0b664b58799bdb805de753f0f187859c47e1cc099db3e060e866fe9f8d7fe96bd892d5268652409b270a6b55d02ae11126173851959f11ef373ac71a81a23ce5b47551f70803c33497c43cdef7c43f02db65964a0df7fdefd9f2152ea87395751f591ad618c14dbb8848de8d01a6609224750916781ebf558e3d9c0bb52b8b4d65329750bc26b8f0a34a5a287bc91bd82549ff7ab49315dc1851b605d12b157f81d2f6b59f754a0a74b3476c6b989f2bb14fe5036a5ca80b4496c86a489abc5cfc82a3173af6a53eaf96ea351929649fb6e968ff685ae82042e4aa1fb37b4d98717fc46ee72c9a94da99511bae1367016b77a7aa9b098b82e223665dee002deabf65fa4a5dae58dec2aab878f2054bae5768e07ba97ec6973976facffbb011ef09fa972fe0880def774faf8a23697b7d8a6e20c79ed223e8ca41fce7709fc1d8d06f5abe6612043514cf69e3c6821a9296b304f285ddb9eb614cde9192d495f9d18f5d03a15884a294c0b22bed3b0c80a3638d4545f87f0e40c2c24344c46dc56741e4f378cd300ef43cb9e90293bdc4457eaf1b0752afe0ca2241bca854852f2b51449ec8cd6555679fe20cbec02504af6bc7f0ae109074485a49590336edb756f808c50cd77992633cdd956b58f33b1cd56d3f696a6225eafec0492c978b2b22bbb17d6b5a6a66d1564276b92be8f1aff779d756e31fb0ecc285fd669e9de7cb078fd0b5443a24531ca3c121f6613f17ce3a7095314bdccc67486256ab6a6e07c3b643c0930457444f212cb1b4ea5a36f19026796f5b243ca75069ee07d05e6af60cef9095fbc5c66b38618243a42974d749a4f6a85a511957778d88ac4b90b892b3bfb864681a0cf43aa9cf5bf9711efde82bf04774aad31018b18296b3978c0f9f53ca0e7f0d5de47d2565850cd5330751e285d70dd6fe6186712a7c279c3a002e979cfed7dd4936e387ff98b416c1ef99e04e83d2e64eeeddb90671293baabdc271a7a5de60de0625f79c974a178b7674119bdeb90636390b6aed2fa51c02726bda40f8d68f7c2e0a2375f219f26a6c79af58c944d64e395f2894f8f26503b81f42377baa372a1520f7428e1e1ff97223eb651af71e99a7ae8f3afafbbb2f23b799d92483ec93c90b9252a824177c9d6e2c1843a675325043c5a18dc2e10764be392ac314843de523d084e58e6461b1a3eadf12157906158084868cc0f25ce2a994ecf183b2d2f205ee53fdd15a8e12e515db2d4f65ea71e1a954a2305d5030e7fccf2f0b8ba07edc7cb393f0d03a27c77acd70dbdc64a45c9420bb7f3022b710a579369f44c64a42076bc509595935868aa7ddd768b6759c47c8b9f10676089b40d374341e831bfb041c005ec40556d60af2600f1956a0c1eae84814f6d8a3b643bee3137c005e5dc19b90918a4f969d1dde09908020df5fefef314f66085ca72c45b3bff6bebab300908ac66a956c9dd9b93968b809cc64e987fedeb8ce476611f0f8249b0ee9df5dc801036244bb178eae776e8817e269adc860f5d4dc706ba0d11386963ac07ebf478d3f0f9bd0569effc90dec5b81727bd19deb9deefed2e6afecd1264eefaa95919af667f49b42bf379a73d644cac5c9f2f536d5a4e490325f0c85747f23e7f64330a8ee6a76e05c9716185000466400ef7396354aa575bf5d5f0c1fb02dd4a7ba39ce780e20bb180d3de7c5b3367d50de41e4d0e1ed6ee593f125c2fe482c45838b5218debd6ed35c90be97423d2dd5183456c2d2b2f1003feeda5d05dd9ffe08ab96a30802b6a748163756a23a12ab437dfb4567c54594ed1cc40a6258c2bf8dd7c64273568f8979c7774fe7d7cd4677defee99e2e611c3d484c25b5ef3a1aa47512c23fe5489007282d1596b15e253804b8c7aedb31b274cfa5ce6b35b3a3c8b21b21d6c4386641f15a5c8ebfb1addf83c3aa090347ee71fd81d821b8b508d70102a96fd41754a06354c96c620978e03b368361a612e9641b030162ecf3f5a40c1a1911dd0afb48395941e96d1253c721dd8f7899dc75996a6777600dc762c557628e97610be7e05d1ba792aa4837b6e8750451d302809649abbe5d1d04a95b0b3021e9b0818592087b03eaa21791c07cc3b1d23190487082b97ff4c07a14596ba89338f92335d4ba33097789199922d60f57af970a5aa9df7f12b35125a202d0ae287113903ae467bf96e7bec59b8046c8b1f473da17ddd0ba37c350d5324cf9e11128e1bd3c453a1d09a4bc24b11fbe6656ff30115152af87b19241ff97f49554e5d563e14486bbba8dc9c09f5d9362007dee3d84d48b0853aaf815f83f97121ee2846b0cadeea4c5d05150932b581ed9de6a2b9b6a5609f30f041ac4b9f40ce8b48d008a5c92867e1e063b478ce9910c646263f222e7ca65e409f0a401897f39cdce51599987e6bbf770c5ed33f87a66274cd8f5af2132c0c743f49dbe33f0be6c1b424f7d3ecdf2277dd39aa524db049ab643ad6da15c6023e75a70e5e2b05b6c7ae4021b20267f7776c848a859b103184564baf9b699f33537232b1d3eab6fabb63f386dce334791f9c52275cdc45d36a57070b47266c31be84ce60795654628fd78131825f6d85d74a9079f9fae87c07db0dba9a8615dd54b98f5466c8973feb5263cc5fb2dbd1c6158d3ead3056f04e916017fb4b3027573b0a504f3452cc205f601733a864933f019aa2755bd21eb65d0c622f351926969120d154b134d7ba180d7811547781bcf9bf4286314f8b865ba0c2594bb5816184cfa7730ad0b3e9a31759dc6d018452642d3888f9d4c21e11e2703faef502615f545fff21a513f4ff8808eaafd785bf149cd38b4482c0f6997ed6a68c8e5b6faf1402b14910dfc30a5b4acbff307dbf6953d15ded6f7274fc70d57c40e86965f14c74a9fe51f8eae4618a16362f34d1c454df5bba491fdfb1fed08849fc2f25679f226651b30ec4314e1d6e1482a8e87912fdb7b3bc60fb9feb058924cb24d77b22b9ec0926ff36adc9af1d9c59ee307ad9624d7f6b8666e37739f3183b3de16f46179fdf2745fa31bc927bb460602f248c33032b4de4d525f036afd6f80e86a94336e145ebe1847a4da8b9076a4b17033814fbfb0f55f553e6c2ef02a110b7df40cd4d8068f28ddfbca77209704b7b603b0ad9be5b39fb9b449a5ac508a4058a11171b76fad9fb62f74027ddc1e89017f7983c2e6fa97d65216eaee6375f7bcad6417f20201c0831f45462746fa4cae9d745fd8c21bc9729aeb9dd8e3db3faff6015f2a957bf21c4e3a2ce3d03959964db26fd33e5dda05d825aee9b2946771150dde1cd40fe027d8b73129001f76f0f4b3fc4f0584de2b93bc3a52a72c8eeb0f0f4388a24baf63d352a3cb86f2243166fd11c967f34c42229453867cd901ce28665b474ba5284b8c04899351a294a2c7e0d0bb113f5b703761e1f17fbe2fa4d32bbf64c81a3a702fe55c5667e8d82fb1759e4312cb7a7970b854c2144f08545b19929e9a6463ba906cac2440b8b56e15025404cc74fdcd2a243d230ef3ee7e63715c7991a1477ee23de8774ca8b53c1c46a4e834b57147062f57c373fa8e8a718395af4bc2721a271d84520bc7a74b19162cb59ca44a1de1355a1db82160504133c6966df0db83ef805d2fc1a774f826aa4c2602d33e5179421ae3272e34fff327d6eb4fa5473ed3931a51d114c57ae33c6c84e2cdef50a12f71d5123ac90de29aac59ff82c82e4ee5a4bf9b862e3095d2a50df68e6a0e1775e2d5cc90d42bef41570edfc1236ec79ed88f864fb2675ab08aa2c78972891c376d3b60d744661ebb7331ccce4b9628f5f36dedd61ccb9e31fca498be797d372cd99e3dc72067c2ca05dc0b430fffce5cf1b661358a5431dcaaf98c4911a9d2fbff9bbeeb29795e96ac14f3ed31fc8983e92b20471c47c40e32a76a1d4882f6114d6bc5796c8df06adb9e61960a813376a909f39cdf44d886fb0b777c00287a615848e78590edae589cee515c977ddd592c26e2eb3aec310e5c7a25f766a00ad50b587edcc3247663c6a91cb87686d5ef45883117dc1fba7a4dc66b9ebc81bc215251461736d35f4e076af77095fea5771c698830b7d40dd6becea7a29f8c08122413a6bf808732feba2f44b8e954bec09ebe808aa65712f4a9652566c318b45285954ea1b5b4bd0feb65d88b46f8f9b15a237fb6434cf95d8d4a2c4b64a888b153bece2276beaa481da189057cff7cdc39874ca4c3f61857a4881d7a6a769c275a0cd2b0a8b827d617c4bf7089aa743d521b67cf389e97275c106912791e67aa1988980ec82923748634d4c5b4c4b0456620ec415dfb90c66ed61613e7b714732b68172618767cc23e82b7ed6323d2e1f0900175a4ac92645ebbb598a5bd6efa05f8b59a54ed6d66aa8c2afb7244dc735045063d64e8569a324a95a0ccd01eb94b4a82a59dbc90e950dd6352271a26086c5a990f192c18f6e7d556ca0ab832910374c023b48386c7825c4af1d8310bf4b41410226158dcb312d6db8d97f36a08db63d4e95e1d7a2cbec0eefd943c67076fe688732e7e49a87c7acaa1ca1923463f93523b979fd8d97cf74b91a12b568f204436cc7684d5db3e8aab9c63075942c3008092ffb22d0fa6700bfd4e4fc9c4f0ee56ce1cadaea3fcefbe4d7f2e2a5c8be874a926103972cc399b99857e0cbed7a2613cc2d13ecc154f113a632806784e1086c76f8836d35bd213a1bfd19b893473d64e93db782374d1266b30204a3525e861b72f2e2cc419067b37fb4aedd20b362891255a9a8ad98576b3bf5ee1e0b9717903e4a92582239369bfc50e5c2e18b77ae3d9e87b76846ca2c7536298d4652835bfa096a9ad5f2004d1dd414ab37c4399b989b886b1dd8123270bb5a5d7b702035150ba585c242bfdbc9c2c53e7bb221ca36fb9c032962e2c48df532dafcf12f6f1e526fa110361a5840b9036b77f0aacd7676a74ef8320985c783585b70cef790037727b9181e61c4c3b05dae65c2c582b124feb7e52179f917d5771eff7ef87ca7e9a0e942f3c56cc00d716820801fe5a32002c952a2f13cf13bafdd74aa78d3249114ac89fa2ed849b6cd88db4a933d7a02381594741ab6ed371594ad178ee06326ae6d0e180d59121b820a6559bda3b45afb86122c6936caf9f01709ce851770cf528d6a8248cb35480a7514ec27c95ae240567d1a3aca6575c2960732641e7e196ba66bf81b064001fd868793e5cfa2a593ac4ce86a28377f7e8fadeb74b727ce4d966e8a0ce65bf4abf4c522be30b785f85b371ebe51d7ff5bb8b655774fdbb309c096f8aaf8133a2a278f5acaee0d53ef63f5b2e369fafa4a2ce08104da1e91a11fddeb93d91211512b85f12ea8a79fd73943c3719bc2db92f78ba1fa2b402395532c8c6cb23095e3aa34817d8c72cbf3d05833dd9772cf02cb99f16d96c0b150647260f472f24402956cec656bd45ab894b56e0e126db6aeb42d1bd367965c9379defe53db2cb4eef284000822c08f1216b6ea33c6ba2229bdc0940749881d5249bdca6eeee6ffb27200a5a67c6f8873c4901738bc5a11c728a61256f98fc35cabb8e3ff8d8ab24ca4c8d211638872e22eaf60110dea5c6d327609ea6f796f3105b29596fcceb212b2d6c8e791a7eadbd70d2d88030900f9af379a7b2949f95c189b6e92b6c073628d06f51295cc966ea4f846d4c8f024ac843fab4ad4b46e43c6f921a4fdfaa34b0dd74cb042f34db78e843668018214fde5f4161fdb40044362147da87ac73d367794ea3e959d8200e62225e2517ea1773ce825110eb94ace980b1d18302527f3064b427479876a6577174aad318098a56d17bcc7fe2ec62e55a3f2e182c216428d67ebe75b507b24cb261c48e31f851b3e5de9bb4d22d020ed3b789bdca48008cd22d9a597e7c908381cf2837b1ea7d98fea041b9efd4c40a1641080d48b13a03c2718cacfd28a489061c70bf5637ce3222220bae3fb1ff584ec1be23281aadbf4651058a221af6c716c6e1e02c7e1b22b23857d154161aedc0b0580a2fb390451783acc6bea26dfab2f29cbc50882bebfefc05a01e4560a59c70a7fb14ce79e840a283c932e55c63499049ce78efe8d3aeb522b7a8f26bd749fa8732cb5e2077557a8c3f82351bee688e8baca15fb4c97c04576efd62e0ab19738b290d5c99440611e13b1bc84c2142dd61a07ba8c8b02e3a6b538a62a8e7dc6ed26312e75c50d47714f641c6a2f2e92c56d4e3107a11454d39b9fb5fc952a08cf7b927589cbdc28c3793908d73f96a2f48425da39a61f37bb6556f40eb44c2a4b1065d1442c6bb87859e35ecb12f49d9c327f780406ddef2b28870fc592cc5267cb826e97c528a6725d3e5e8b639657f0e48a59a81b4b8a98fd236880e1649aca485930eddaebc83c0c4b4f6853c644dc4b643e4cc79d84b461ca2c5bc8a0e066504a5e90967b41b3a7175468802cbc6639c0583ee361967c5d1689b12c3e38b4c0392db11289340c065d56e62cab00745978b52c89d0872e53968317a5f391f9990fe0dec36e6694a07e5d176d5735e3bda561c4a0d1a8dda54968238fb132087f986ad0bbba6eb64c8abbce7406b6db28de21f1b3f5ced07fdeb7f6c842432944547a99c4f60824b277fa00442de17d2dff4c01d9dff95028bda6d3c4a44371161af26bfe19215e14c9991ecaca593cb43b4a5c5a21d38f2d467611f6faffd05612aca5a4e003c9b57a252ffea9b162b2a62517f19e8fc8d1bb2aae467d98a74bfe6615a307e88cd2b05c18196902d52a2c329545cba3593ec0d296cdbe6c81e272614a9af7a47b4b02fa704865ee7d0dbf73ca9e038e8f774045f9cb3d43750b881b6f41d74d526e3005a246f5640fff66b324c08204cd8cd9b8f40a5bda3e34c9814431c8a02bfe4ed4494f65dd8ea4755fc55c099445f37819929cb2e383621ecb1615c3f294ece562b77913bf6e9d5cb394e198f34ba47236f38c7ac50c4f822f0099bc944fe7e16f6863f6cfd83e416c81467cb3cd16e8f73c0bce9d820db98fe85fba41a2085d783069e1da7ec5701c36880558b3668b1afb1ca3aed37eaac15a90d3dd83daf0a6be1b1e559960c71351d48974f98957ceb831366a60302a8cfb5b5ea0171840e4e03535b2d727ef64eb84ff4941c4d855f857a6c45ad3a0794086fd1ed705090b937e017f51ce1ea01b4c63cccfd38ae4887ccecdd9c4668ed2c5c07afdeda9707ff2a94c1a89dc4493b13093f7a25045cfa3cec8bf7360f333f498db46a17821b280b4fd45abf3774d79a444bd3cff89545ff269b432c18eaa473229d128efa35afd05299142e3ccf2e9549e9c0a55e1f586dc3ec6e828723d0bbf7268b8f768b20125912a34878f9448d227a045e63c7b878416e72afe157b988fe6084afe05a0f257f9ea9c94881828a28a2466417c95c1ee79c26612454347c009a7c48a1522ef0f582c3e0179d8cd8f86a4c49877fdd9a98fda6f36becc7599fa667d7b7cc2012e82e38b623971358dbb046c282e006f7bb8f5ea6b947011242412f361ea62240417ac288c723f2539f91d706316105fffac31b5180ee3cfb087678f7814fe838167886074200e4708f745c4893c2fbcd0c02b3211ce7046dc9c711fa74bb2911e5826704d8d67227a2d3e5a7b4e06cdbd9bf88e83e16bf686d0bcdbf0678d5564f6e47efeaa1414a01814755e06badbe51304e909598c9d822470ae126eca6aec351a69b7719a6d6ea33aed661992ac081521d32f6bfbfecb3f809e1cebe12451f6809209d071ea5f54eb391b5aa778ef93fa3862ce78da07af8489ccf71bfae47784257c4fafdaf4c07fe73bb63fb9df747ea99ff58169f1bbf9d4f78c1cf5f5f9a4eae84de84fa2134978350fe4240b8d3f49f1981c044b453bea5ce23811728bf2dcff1363ec9fe63b977fec89c411d01a272c1ab5829736e0403ca9d62d82f27b80c95122aaf17843d7aef0e3c57a898e650f8da4c617f35c8dd639d6c465f3915a8245bca94693058eb6ca885fdb2e984a898e29b60bb203e7fc26660f466d5aa1b30a1da4c2f0e6d57535f3aa3030d615b82c32921cd226f396a8327b75afc103df6d943aa137f248c510869924ba9ee2769a5c5f246ea8b91cf4d4da6cf6336d97717e7972fe047995f46aad38da9258593678f1ae88bfc1145e6938cf5bb23a194fd32770fea1c694f0b6df18c9da0a4b586d818f6bd291c4c7c8ebebaf11f15bfa3c6c05f44cd2f9bcac9e55f2d8749a83e9c57c3b3eb6402fc72e0eccc7c40c1b1158eb40c22bc4a6202440912f9b5cebeecde98220f057421431f4311d34f3012a66522573f4a71bf23727bcf14e066aad44cec90c2a972c8a8d140f452a27488d45bb620e426c638ca57696784690681a9ac7df4f0f67aa244022f02bfe82b00938454a9a6a03802166a42b08c68ea089aa2c92249af32feef41dd5c566aba3504b32088e394ea7ddb6b9adfd5fdd7a9a8787b87bdc86b49041ab2e77eda7a3ad190f41dae67da721efa107677f23b89d9eb8f6c422e2e715e9e4060cc6a479c313b67acfc6c79d30599325a4c07a1d941a6e3b260228846a309bb9dd28a632df0cb999f8ec3eea7fcb0531d63143f58c8afc095119e8000605ab433d35eed67647cf8142a1975ba62a88a157996f5b3806dd5b12cccb9aa11a2e9b7a3cb1506a634bcc26903d0db9bf610d5fa63e2596195160a6b7da4923ec09f414e45973d32d5cdd952c11aedabba24001bfb962a987c0b8ee88f93474503ae72e4f9c771abf4c5bde55640ead26935980349622470e1142f206f1b48ef13afaffe6aa6fd90e47b09639e81060ac0acc9d9a2741e3de4e02e5f0a6bdfe689cf2779869fd3fb1d44042c18b91769e7db44d5c9057ed40f18492afd79f0799e96c81dff98c24dd72a2139ad42ec99b45b87c6477ca54830f13ee16104f1db117b0d23bdac48fa8a81d81b64d4ff2692a6a5bbed3652a3aea0f67cfbdac8112a20880db4f501d72fa3b4966536f6024d879abac1b21a8c33d653f03ada17b25ddf362ac8ba770818be5fa41bda00d3b7d9621a89c96b75de72979da52b0cd83e6b214e294e3d40fce5200f71c332f295eb47b58fa780578168740d3a623eba8b7166996c3346436d7e955f6787443c8090eb80e90cf0377a03c3eb797868b5283a727b51ec76285e16004f69394f7f2f961eab7d6adae20f7d749f38fde40f0bb0984510aa1237597828343d444bfdc38624ed179ee0cae372b6fc820f49e32c91fabe07cae81fe2f37d561276f8a65ee6680c884e9f3742ef9ffd54136c5625fdab662adb636e6fde4c55cd0fc29607d349756ab977b4043a476b593757f863ec2581754a50dc43b95fbad9335adaa13843a2daa251bb26d0ab1a6162289e8a6104c2d772c79497f8842d7aca6ce7fed9e1d770e735720141ca803d5cbf8f92b15ea26983a652d2d1bbd2535f393274d58f0747da64e95a6a95364b6b96b59445885c868aa8110262fca91cc662ce7f8e1ba37753222d9640e8182eecda0aca13aafd5dd82d9576b8bf76b9eb5a627af42a1699466d6dac75a85519ee8d21d36f62743155a6b23ffff3bd19cac5f3e640c3cad533ad54c7e0ae3fa7e081156fbb03dac6ee6d37b922a00d666f6d3e363419cd8b9349359fa3c2b124a5998a7184ebe2af96af4d448eac29496342c2c23e103cfe687d31e34070169dab0d274a1c45c7558ade93bac623b0ddac7dac672b5ba50f611c04564eed8239ca008f134555cb626462ba5b8d83a818b36f58dea965511fbd1e1c8666064d614ec2ce373ee3fcc99a60d88662b45e3e90bea06aba97e911b6332685fc6db63a98be25a6536ae8283d33f5465adbb91771f9043ef4ec66ece34b7a21147aeab1da9705dc65701f37aa233aa38b1ca503e4c34e845eee73d4da94cd47b2d4a18c4e993dcf04edb400e8720ed81441214aadeaae732c9b9c3fdff4b67fbf01247a4d6f13eab6db14453a050ae89388624b0310fcdb4a8069bde29111d0a04e0714dc147338074cda23480ca7f6c43f4eaf065290a20ebc29d3660d2784928e80590492008bf132acd96e1cbcaf6d85d5f556c00f089803628fbe73bd3d2c4d6f23394bdc8e7f18431eca1e2c595c21526dc026b900c39a9b4f425b2266d1e994f70b0011c6eac3cb21502b0b20469e8fc69216661ec10cfb4b828f001ee7f466fe720918f093f6b1960b3419934d565bf9443f1e40da06a98c802f13cceb265776810703b20d3449597cdd36f6a9039f06a3c804b2c467dca7754b73df6f2e9bfdcc9d71378005a506f1d48eb1ead338b215532e6dc15452a3313ccb2f1f1ed316b5445a549ef015715ab873ee77b8baef479f186eec799c10fb9bfe7cb3f74bdce3667c8f19fdbcca1fb7cbe1843f6079d39b296c0bceb293223f13e1dc01cb73f5bfae522f58cb977b7f0a305227408b09ac13d4f3d36fd38cb25d619472744cbafcf59a88a275d2b0521b63e8d4f6c8ccd06a98a2fdcd3625be9f8a4e7e04e6a517c4fc7304e0f26c517f276ee9a352c0a3d0ca58eaba0470de25cd5a2626f7801c616e3d96ac0c4bc041ad9fa06a46c1b5574c6da68621c3b0dce50bcdb1754cae46c61a6931fa098a9e62ef6c9cf56438b744c4cf70fb8b7dca3583cb52d13c4e184b41d771d9edfcea299192d2bfa4bde934edb5a2fa95492b071d4d4902255a770cf4fb5b502fcdc5cee81c60887a8a6d3324183733e7ee88767c28ff70c44c74e243c0c8161b99c8732aee38824e8d88d28a1c38178839409d1bc1030bc0dce808a99a90ef04d13b4d13d6a674d261210726ca3b01b59a899bba9b5b40aa1aedaa42d78dc6a81610da781f554a876c375dc95d67771777bf6d39821da6309ccfbe589763533a1d1fd18e346767a4d35cf353286aaebe73a9897d2827b9d765b31b5cec3749a6bffbe2c7b9ad513fa1da759d55acf46ac709a402d7b4850c2d7ab6d2d74c997a6491f9d184104646a4093b08b97ff7047687b901ce8e49b6afe170bb1df35b930b30c519eecd5078ffc4cd1b9b5e3bc86e69d3719c7dc8d19194969749cfa6c517d6f5c8bc3dc51046ec0b3baa7860fa2ae10b583f2eb20aa69450082f394546ec38ca3764db56d6422d30b274468c4d2f10173b23ab564089038a0889f52df7ed1a25177e49b2e2f33dcb8386732f0d0d05f1a100aff63d7387b8cc8779e2cead7ff459b9b8dbabd291a920dd4c15bf777faa333d170c7fc49655b3ae8caba374358d057425acb3b3b89758b16eee8a09f23714bca6a792659a5f30c8c516dbc92d6aabb0285ffe354f5c4b2a6a03b24349a21eb0e20a776c931fe421f05fec5c58c3691c35473f53a11eaaddab329c5e86568370d9f3e8398e96362b268d704c874a7596094eaa25d4c8efdbfd199dd2cb1a8118d03a8a94066370863ee7bd6b415bfbd3185edc69237a27ab70302bee949b1d7dcd022389e77ab6b2ecfcd92e2a9cfb1459461eefde133626004a7fde984fd44f88b9420400a8416df85210d3e06addcfce7240ccdd1b14e17e0c942335cfa069d37bf8266a96bed954fa0773844f71701d0668b6c581348cacb73159a14d9f0c51b8ef108e502bb86129ea8e34e580f958daebb450d06355be2a7c1bf9414c6d7d93e7a5c886884904920ef8abbaf84f7535658c248c7557bc7fcc99ada355888252d611e0d35d630b3a6562093fa176e09d77b2f133a6e4493dc4a420d5b3ca95465c9d9c7c0fe85545f03f23888b75ec08a22aee47d140d2ff40ccdca2e10de0bfa7b59e13b263e3aac09f0f50596647731edc2b295e28d3dc996aa91bf7600dbd1f433eb1e820c559337ddd918468b1addeb12d91d38561c401d4a8c168fbcafe6c4f6175a2df1c20607d867994591e27b92e40e7d73047b350d3de56d38821ddf2b4d8bdf86a9662ac38b78d9d074112e493cbc84365cf22003e78d9f68703cedae9abb17ee5c3a1b4e3ee802d8c45c0c075b9568865b4d2bab385e528b820f1d990cf309a05da0034c6e7df80639980574fb2c9b37e585fa331362b91ba254f359fa4a2e92cb41ab03a2d2613267a418929cdcce38cbe9c1d2b57d291714a8300878bd04b387038ff1504b81fe05aacf1355e05cf778e697093aa6b475a48fc507b88695172954db86a8dec5c6dca22fd56f19ffa10ec2b2afa882e763075c94cfa5cb76e1f566d8e5d6a2287c3957497d90f78257caaf18a5636816a2c6ae6cffe956e30ec996430349bde106a4a1b50130b3dba2990421ac8a32260310a901c3f93ef3e7c852a3d03ea7c777ba1d942f16af246d73b74f19a0ea0c09512c66d763621504a8ba56fcee85c4af061a9a5830dd4c1c34c2e22dbe65eec0e6de7bcf21b744ddffe9790849eaa0a935c101f9a6b4cebc4b9bd62726275d4620f7382f540036360e5b6ad8a924aa7440b92ad9251d8d247c389f18f18ba1659fe401eea2f79bf829be6d68773be904a420ce1f2788226bcc539fb93c66886213a6e8ddc3d34309284a2cc007d1dda79c72b177f43e1a9d66701f4a6d7363a906b4a67487bfce521ef8e0c5cc4278b47a304d6bd3e10b405ef638b1f339d1af1be42afaa9c6286835333566ad3e9e05b96aef3f221464112f8af728428ce66db2a4694bf8add5d47c9ea34b2f0d726f058bd67a6b9090dc325757e12824b709ee9a64ec88d5c37a0ab14d4be12d5b81286e452c88f7a31eb525a4d672801a3191aec67cb2abab79bbc7486f2517106bd08ee109b8778d58ae12e7315c7ba9711c8f977feb82e4b71497969311b34a0d154a242d9318fa27487b644e5fad82c1613a5aad5223a0d3414623cdfb57459af498274d5f94fffe9c96f29fc9f8eb8682a11ad48d4de8e8e6fac2a501198cf50e9addc6fe0a493ef226b6e58caed0141835cd40eedce05bd6545d4fdec4c4088ec2542fa42e3aed3aca92366e3c80477ad3dce4b2e05345c6df8c6d3959656599a8c55b555cb37f8a2ced0e65dd6689de7c91b2f13d022817960221de7581a2f69d0cfd973983458b8af1519a53564a02a7e3ab85f852e66b93d77b1b003174e1ead1fbca45a2fab4d969a059811fb3a043b17fc80aaa377c86639a698e875ce817cbd0bfa94b89a3a1b356c779e83943504dbb548f23643acee3de6c7ef56ed10d6eeee6f9bf51b021caf301b1d949f36c20ea0409731a326c9be857dc2174fb4123cabec50dfa79cc809935bfa770cfbe77b9c715e221f76c88fdc9429b794ac9880a8a7c449faa970e0fa34d47395f12cc5e10eed95048703c504517b79411765c4964cd512351245e6e95ab526fadd9aa8eaaa4a5c2fd1c0583dc3712b8f66c799a297fd87d867c7d3f4608ee56df7f8a641048380fd13800b8c228679b32f106dd651f79393beb272aae2588694b4483041bc6c1054f2b8d768624122691d177a83f8c14cd3deef4ec833653cddbd9898912558a2dd5cdd429368bed093a0bd58dd46e9f614698d47cc69586a2700eacd36bd68995f4f27a50283507140f45d507390d99d08d2eaf0d039b1e225bc396a6c7a5dd70f0e8256a67e842f4b8b819be115db37ece6ab04de7c858b9391a4bc9b43e7596e5e33b645052c9609a2748b7d88eb2d4444b9c973b651b83cc3ef58c82b24a132037d283d5a51536e71ce82ac617766834f46786b7fce8cba54b3320d3c7d88f5f1a2d2f991ec617cf1df92d830df3e4dd5a469f1ea85dff42dfb58535fd7d97802c9c347bc2aa1bd0cb646b85f8527d0fd885c5be9854a7fa0735e51c98d66f08191ed5d60cce1aec9b72de0f37b5b927d2a18500fe80a6e09bf38591089f35299bfb8fc090da6f080e3a5b43862e6b450def31984f8ea5be382e652568e1de00aba7fd95d2534690caabb14cbe4b6dd67e5a24807092fa8c0a59ee314844b293a74fc353b81c69b0c6c132cbc48064ed12e85ffd9058aec4c514ca00db922213a4f05b81f93c84d73a6e4ca2fcdef0fbf5aeee4119ad8d6032281c293c56a39f88008d8be53e71544eca8f7af17a72203f7b0c5ce2adb8a8989562cd22d0b42dd82fc04b770b5ffdfe0ffb53e9b7a51c4869a88424f12eaa43819d2e83eb01b13cc67140bddbc2b4b5dbc283ac30bafdcc798cc1ebd5d6e41797e222c579601487b1ca80c12c08421b62c4da9fdcec751ad5299f65d953128c9f877fc407060425b83721a638b0bb58494fa39d0f9ff4e0d63843e096d2fe97a6d061fe89939ce639a3f69f8483e62388a58d1bf81ff64345d76013c3b2e33c308d06b10b0170d1ae0f86b555f8a634c63bf3290f01a8d8c2eb0ff71c4e2c4c08903845876219a6b29946e091351c8b60c41fabfe2f7a142790f5de950e506fad9bcbd4c3a964dfb9c389d87139007f02c7843149d52ed44be86e4ec033622a0ddf21b7bb7f005d7ae561fea423f37ecd38773bde73ef071952eb720dc3d746cba6f070034cfd3ecfbaeb9a9413f2bebaf7ed1adaf3d098a85cd659999c65c34e438085098db9800a7b40f8b1c2c3527601b09ac3b219a87f15eab828c581e1f7bae8ea1f1b56b596f2c3a07d4c11e884b9ed548e4fd2e9921e0766c295a24823b7ab0ef9ae4e28a7ced2023289ad6522eeb7a703998f444ef69f51659df5b4490282d9a363ede372be27094f201d17d2c7ec7272cb85b27643bff8b29f5571ceee5bf7fa87ac27a976395387fc7e5d4449102cfe668c67dc078afecc71817c59527f5b8e13f183f1fd85311eccdf477437741a49adc9b4dd50245c63501e1396385118cbf3330383838465bb1ca06b02061912db7d097950c3a3b4369ae9a903b29d46c389209c8600a790f5b67d1dda5605f29caf90bc3d7c8c62e5844499d3da9ccd1354425996d389c22866bea94a61361ee83589baf6d435d2fae4f8855147e66ee4f581359996677d51eabd7f5d96da994ec3e981fe9c288f37286e9e7a0e9285e11251809568039f27b8aae89bc33e8245245bdd6630a458da4a5d148d4848a62d343562e89e027baab6edc2bb6064bb5e3a52b83cbd33bc2d4cfdb88bb4171adc6adc9e3b0e9571de5351d4b7390ca5c7a095c880e08b11d40915c4d1e5a6f4dec79846797552676110c343cbc5a5337ec2f4f156b71dc2a15c2ad7661488e312c393c0e1cf0a46c797137bf1fc3d62e9a3f1392a5f6b766169d90641d26aca0fe398b4375043a30d3cb3d36f4de5427e57b1120b9e65348fb45731d817787a2b3d8c2cd65091d66b653006a15a095048a481e5040f691fb615db06f5002908a4b0126a50fd294b510e4fa9f18e20486ec16b4329230dd2e60ceec4a25e27eab62d0454e898fb9e983e3e96f03d0ce085f02941369f2abb74c95ef83e39dc140a242c6f39e54a0a86f274c987fe4678be28f4cb4a2fa86311258a09be1cae51572d7fc06322d05ab65d41d8420c2d4591d0484f4ffed8574034aed132ef2d3423aedccb6cd02cb11c1a3b45b6431cd049c397ad18dc0b169ae16658ebc6b860a52aa0fd8685e04d55d40d6bf3ae3c139c4dc5d62d5de281c73220ece07474193a7be8db91e7ace8c989e143cb73abe55f13c67505fdf989de9e6abb85553cd023834b888389bf02149d8d40a0fc7691f3aac5e975e5828c9f5e344a72f9391d5bf87c095a39cf48e1e056a95724732626564fa62f5a759fe82fcd2b9c0683074e7c5f21f4fea7d1532009b224fc1e1835d2f12e3d1006530fa814e6634ef4e32178de2181596cf42f812cf07ca9b0afee714402635b755d14470294ca70f04b3f6a3f54244c7873ac91f9dba259f3ffda74ba9a748cadf1be1cd3314f9362d8e4e8c27e07fbd5a200da10d0452cd0b19aa974607f30bb50d666bfbeff553bf44473147b8de6104b4fdda0a3679dfe254783b584d4896e188f4ad41ce01d6258b7e15521d64182f4249ae4e285a4ac19f1fe95293ca07ed36592dd970ab9cccd9b8498199dfda499eac6112c7fbd296d15c076a64edc375f10161d4547d3d41245523ee312d3c57a0f76c2194847d65468cc1abea71e5e6ac3a0ab0164149e927c36050712d7ba660f7538f2a093dfcf514c8ec33012df95f1d1168c9baa8b20bef2c71e2ad44bae06eb48c2bf388e1ff9b149520ecfc315a45d185729bd8e0535bd0d00fc1a44ad20822090d43e3b55e258d237a7d868fd154a272b6dab2c17e017329b1685f0e600c67468846c7a1f045e2a80a2f983270f17d9f435bffabcf05dcd32790e2f4bc1f72020af7c3216a26ea2ba950fcdffa070b11eaff47609eb201f44b5b22b5d6ba4ab23820e36c489fc0a84e9b03d852bd9719ed1b46ffc19b3577dd51a511327b4785dd99494a890feaa6c981152e8791c7a52d44a1f557dd8e2a9390df774c1c838995c17518574844be99b80d3fb9ba36a0004e2afeca6249a80deb05641256918145f49e68b49601be3e7c52f84a68b93c68f6543e503a890d1bfff8056aaf58fc0055a9556eb4978e8dadf70703790c8afc9f722713c0d81ca9045ee7fff8232504fe400b66f0ff561879aad4caca93cdedb7c35eb943ac6479485d284d0af8bf165817655a1c08300a8a5d315361f8bf5e990f016c2bde56d5e25df824bf362e7919f681014ec19d84c19b34e38c3d3d100169b73c9f8cdeee2a357bc35b24334e57a7d294ae1c854f56a03af2b060014ed09339c2d32ca460c01c12dd4ec975bd75e44d20b29302a88989856a0be969202fede26c66d4b32e25d8b825e3f623f871d2ecd26320047492dc5bb5e077452d1d7dae7015f1f13c7e34fd6ebad173a6ca6d7db3b6c85a9234eb57cf51d5230e4cf9e0c66ce36a2bee83d5f17097bf3e8312bd6d690784a13ae749e0907681500f1d03490f9f682eff001542f7b07a7d6dbf62ea07aec76a98208acfac1e2a676af9af3105426e208d8a10789218fccfc5eaf12efa4be3f036b977d43d04616bc84dbbf03c53ab0609ae483819730cdf35b2aee90590a296b7b2f909b3877b56963bcc1f556e6f03ed11e16d2dbee4c62014f4313fbb340245fbb294473d2fb94490f5b83b686fef5487a8e4f503a35339a6843dc098546a0fe174e06e48d6ae5a9ba85c41270e411902406ba33247fde1fb84aea8dbcf79555e2aaa724affa211f6275c930ff8a2f78c00579a6a53395fcd60580307a88a6e4495a4884e5cab87d52188b9bf44012a29e57a2a6d1ae82e65624625eb6132142f2482295ec0965206896a30d8c1a6de610dcab17be4b86c5e0a4939f44709b22ac7223da078cb53968e34cdf7719d234f2752b2ec23c2fedb0ec87eec002b4a4be025524b5647d69d0b646995843ea44ad3f10008d9204f7ea648ceafff492d1d248dac73dc5623db8a327e213a86bd08deed7487e86663aa10d85c8ab27e81dc9c6232f266bb2b0c46ea83e0222ec3d7cf26229ae5ac626360c8d79095be5c8734ead251ff5de22078faf093b1f0157fc58e315f210beffd272f1a9832c605ff2b1c0f473c10e12bbf7f2619540a93da9463fa80cc05491574594fa9fd4d1b94d6831409e0177f88f0685f520153014fc77619aa209421d2f88254162323aa64460f168ede7132b94cf23b5b8e337ce29fac89f650c795d2abed6811d6489274368482c731f1f19a1f42c39ab081149e38fea2a533b7f65b7f15256c755fe87c669b20072dc4bdbf9bb29d7d282993c2c213aba14390aacfdaa001b67b8ea6d2127c1c4c220da844d89f53fb225a1668f805e139539077467fcf1881bb97015aec103e574efd4e158b1efdbd6641f339c9984d239eb60295ab330ca797ab0074032f390789b3957d54087a46c53125bbef00e8b35cd1365248b0c81903c1492d8c049560a68927c697012a8711506159804d492f219c7837e031a998ec77100623fd257d7e23e5a834f12e2c230013713802fb0610a7e47fba463db8a84c6974881b1d57a050cbcfeeb70274fb34c920161ab72343240a4da210aca21119880edfd1348d1d52d6de96726810fd60979c95fcbadcec9f935c0d91d94ee14326cf1ef289f38b66f2b4254602306a0e8f22c6f0de5732a5859fc77e6c9cba0b9dbd704bc87bbc3d00913d708fd93383c5aa5de92f831615084f396464083904a925cfc91ff7595fda05e0e90ed7ae5e378bf6b282a45770e26a4d71c8d827ee8371bbba95e909a07f09bf6426c5c23ff767c7946d138246eeafebf1d3ad3e5f5cca115786da6cb0fdc5ad19df151a4fba2404e0219f5ba53b583287dd8b50880ef595ce7cdc7d3d519b9d311f50afa8d1fba1917c71fc8467f421082e3c60b5f6b470a8ca89a9430ab8adde93f88100248099152c709620e77fe76ce9e41366e4c832061c938aee37ba0b2e7d2f7b9f23da0cb5c0b143f74e27d16ced71e0eaa137fc58a05169726a9c82b2a376dc720017f234dcf5220de303d54617491cbacef085e843e5b53f101b2840dddfca372723c36096f51f58dadb4d596079275a71d7a205b6acf925e4179818401efc9bd2aeaf1728fcc720750dc8b84fc1e13594f8185f46cdaa1477b5e5f80b84ec56856217979b6ee80cf974e07298604af0ec7ef9af5b4d28cb3035e1236761245e5ecf56e17a9b7990eb3f7fb0e039965bd9a2806b5d14d0cfc9ef624a79a8170c38419cef284cb2f9bca9fa192d1a49a760a2f90a6fe3a898c0b72f0e9bc6f2b18cc0442253975934180bdcd15dd9d65a2ed24f1b6c140f6ba5634efad277df0af45ec62c1278f824bcd5a754335e118650f3fd7d5fbfaf81092d369df248ba9b162e6b56a15b6e04bbabd02e03982d974630ffe35020720ed10fee555e4c372d6f017523dfc117ef80b951821fa08d2ff1b77450694f7f585b6381cf2c5c9ec9e0d9909ad90876868eb8cbfb501c9e105da51683bb8de825ce1d18512d87212405b41d65ea128962c093cba6dc4c2d6e861bb0e36307b18452a34c4b02df97a1a6db7011eb605abf1b1605715fb5a7cbbf965b1fae66238555cec5a553cdd7138eb30fa976b2476e4c9d0a8e882dab8524c1f5112a218e5b11418938a6fb5140a65d45d104549d3cb886b13030c14cb9a7ff155bf7ce2a3c4e5d090182e2b026519c3f3ea0ed4379bdf6f433299398a13a6971d25e5470e65c7cf2ed22ae50e3f8cd4cfda5738ea200f963ffd631508fe8b4c4c500ccbe1f70ca9fbd65311adf40ad467ca6f8753731e17d3691d022aa9b5ffad811a611d73cefc46257eaa98490a839ae612a2027f1a1caf83ae5db1eb5587aebb101bb1344101e9846da83798f2d101da547079f8a4c3aa7a60ac34bf8c558b27f7ece3b95162b2736588d18e92e62f84b39c83672ab3545d0c9d3111ec22575eb5c8bc80ca3fb6086a4a0c97085a78624d5b5b3792957b0ffc877499a4d05b3c190c7fae286eac0f8889867470cc82b554359cd0c9ddb01e12a9010d13f88e80831578d60625ce87165c1727ded614826256cdeffacb45653e808a19d05457121d2dc4d783da7c56652c549f2d2785995e8db255969302c45f3d0c5a3f1cfacb806815451c360e934b80a77a67313a0f7c8ebbc827d6069993506a6af7ceb0f1a918e02a386b5535038660b820f594f0a5e44f8389967164dba4745de449a491709d2950de9b65431e199a2f8a682651a50ac0e485a9da9bafa6833d42179d80cc6d6c1ef9e62d29eb275037cd39bbd45cc51e1483bcf9952a88c762b14b8e96fe3859a956cb946a2c671830a6141d9ddb3b2701e1657696a09c42daefc0282605269bdc3fa2e14b53a023bf38f7a01e50e28f14d9bdc959a49e00516d6b37bcbfc10068d40735a29b497fc68eb7eaa09052748153404c16b25ff7d3fd6e7f4bd52374a49953c7aa3e643e2def75196f547c67df70d3f7fffe01c9ebbb29d5f732d882886c2f9c4c793d33f03dd8deb7b04adfdceb5d9ad57af3d85854d49694619491e0ea4df0f5f7233926bdcc77cf5ba47434edd8c7ba9cc79665bbd37ff5bc98842c44cc7db344ab393b590f47bbf0f0b394ebcd3cdfb83e7adb505d0a25eb6aa24a0a8e4297c104a483bb24da3d1557178d1eb86850a31c2a52edc386f2b1ef6737fd32b4a592f5a4b061292b873253018a027c19e9c2a574694e9080ae6c91790536eb423cf32d9f8f88608b6c288e3c1313b09b3ea9665f1e03742426ef0fced2ef0af969442c6e006a352d408971cd99395297611653a1c09ee5cb38f2ad5e9df45e453da1eb80c22692ffc192673b8db9a1d23c58412f709ffd1691772330a51ccf6c5b49224fe0b1dabb72d130e78fb668a94c9b0c014edcb95b0f83c7ea9e2d70cc5308a8fa7540d31aba14eb0ba07307ccdb63325f6dfb042781553795a87a302b0267018f089339ac5a74f17fede338f289c48b8361e0b99f650d1aba38300842fd68966043a8c681d5231f0ae304d80f1684c584d16e838b6b83b7730d500e34784574417fb4a84c7d61da7e6b613d59da0bf5a1968ce5b7d9e2aae53a6ec29c2fc46a7ef2001b65aa7a1052eb8ac87962eeb544512e1cb269fd7523b1797264abab568ea597296e42bbd1d1f3bdde50a3a7b8a9d57f00dfa3f263f0641311241a5715e2aba915e2295522cc84286ef99a483e0654a7e2935261095382140631185e39c2efa0042f24893a263e3981d853c894fc1ea6f31dd0f77c7833bcf2be6647cdd8dfdbfa46894c2e690a9b6ed21072a503ddd719cef94824318c509a4f7ae47bd7c6205c4f3c64ba51e002b3eb88d89d425a5c1194ce2cd55951791f6645c89c0a3077f8bcfea1d2a33264e41158a0efc2d86367338be9f349baffdd799a267bc6e855034dcc95e08b9fca0914b5e9d7958df55f4c5450635510a20b68eb6ce669e40c191741a22c20cc46b896ac26f9f80becb828db06cbff05d823e482a10d167b6cd67b2b9f6f2a5faebc9d00fbd25401fa3e84164b126a0a4f40c820872d242bdbc433e706753a8e063beb0532d6ce9295a4cc13001b88d3e2fb5d8b28373dddbb37847f78d8fddf5aaf97d384f36fe4d75bc06424b12398a9b5031a642b16522c31febd2e367e78346f002596e7d17bff09f5f22189b710256a89ce7cb9188e2ba11f9f21924ac2015b802df5f01e15b828c65536be1319b190fce7e6bdc07adfbf21a2b66b31e2d7daa2c5cd1674169b017fd97283e322027ad126174e5d902518730243b68ba676a109224a7408c11428f921ea6dc6d47e808105ce2ed7670eeb4b0e7558fa07e9916be4f63d377f409d4c415a0800b483708ba94000cddbc166d50aed7cf491fd7afa7100c71efb4c2b90ab98684941453d1c797c5f56c1f48a2d79cf9db3e859483fd91694517ff49d6d05773a9b4f8189b5e5dc76d3f375f907aa2ecc64ede693462c78830e5a9f33542d4c059709581546bd8affb654be0ae151259c7cc6efc438301c489592f14dc62365a04ee31f2c3e5eec6eed60f8f660908ca220d93b03c6a39f0ab46ddeea6ad92bf352f15eba2944cd2d1b446fc0fe1f532cf1c24489997c79f95e59c1d3935d26262b2e99d3d6b64fdb5800f7d82b5b62f46d0eff2fe2875dbd2bf9b02ad051b157b75be4b152880211bc07f599fd2fdd76e9e75399010cad405cabdf3940909068ceed15820d3f2ebb5f963beb01327233330a62c728dc88c6f14dd2656a715e9e223253e00e57704c5138d5612f2d344e45c96435a75ca0ea0fd84c2792dd0e746bb72c3aa4980265fe45a09b051ad72ed29ec1b8564b97b8bdb7d943e49170d7c2f790bfa4e5ff54e2b210f411de31b187e22f9fabc48d25e4e5857927f6e0db8d7c32224b6d1c4119d004027bed0f22d86b247f0e2fa0d2b7afda7dee85b5c5f134d8df482d4d83d7aa2a6a84c631f3b68f4233fb6bf1e79e5d03d9603417af37d36829a6c2e439d05365c0aca8e394d6225353e38e787662ce3d21ae602010d3d20b64a6628aa2106c52ce34ccafa62b3bfc9e1db42116c936d58091737387b2ab09a3f0f15a08b7809e44c656c2c402be1440af36be3716ea13a760360ab6f9b94b03c7e1b58e3b811f82ce4145e0372d18949c7967045f6f3a7d95da4067e7a906f842eec4d73349554c9cc8c01be602d43df1530881d10ef93eed506baebf26b8ad71f087851b8d73c1d3a792ab0706d54b6140ea5add16cb77ef37e768e6e31d58ab66c558e288bb015103f9765325b78e320dfc29195b30943435d696f95f655e5a2523278b1511110189d2eaa7e3118368d22f36379a7ca97ecdf1fc27350c3dbce0fea8eb3cbe01b71a65fb9451bb4bc7b6d4e08476f33d89534f92fbe2f45877fbd4d9a401fd99b3101936545c3ea7bba29c2716a41c3199c36baec08736040c28741e0a1fedeba30489ad72ca060ae014c894afae94016c219c3bd93749f3217b049e4d23ce54522293dd65b28461882b659b94e47c4a06a7486a765580ade755f7af36952a2fa30d718911389f92d474a3f0855b6efabca1681a2f9c7f86097699d899a39350c7048267cc6c49638b96a538e3b4c8ab488ec0deb9c17c6118303823b652bf2cc9629b69bc5fdae8df00f0b931e0ee06ceb7f58d3d191d7b079fb18a9dc61ec4904617464400b8c65e38448196ba85dec92e27d56dd00dedb5546598707e75f8f8b569f1fe32c9fa509c127d59d4a331fa4ac47c7b3338949983edc314efbdc901efd13847bfe87915ec13066458a90940a03e1995fe6d1c0591f2ee69d38408467fe7c6470a4e9eb800167f51ddbe00cd2dec98e6205d369fafb53669a9e0a2936291f94702f739c4570313752cf146e0986013eb9beae8997184e5f1cc20c0f82d82bfdf0c7e384acad7bc4310737ca889735847bf2d001cf09ba868afab2c20510b7ff8c111d365f75d1a1437f5a3e2f3e10b483732da16e89c96055435d57c9f0c5af18b93f58cd222bafa0366714669d5403f83eb8c3bd1cc8fbde6f9cff56445815f3ee9b7d8925dda09c1cc6158798f4fd0d92ff86239bea3233d4f2a214b0f6674c48d89b73ee37bb5e3b32cf5db9ccd246e6c45c56465b8a45f96d54e6212445078a78c18b2434479e1e9d9943e32733ffeedf442c2b4fe533a24da8723369620dc09a8b0398288921f802e71680b9025626ac31ed38bd0305c8e2176a47b7ce5fb247f061cd0879d371d7edcf2576f42a5bb65d889ab200cc263608987e90a8351fd81fed30df6a515d68335f3eb72085c36e1b29391d24b215b2fa6f4884805e7d74a56191bf1db22334b877da8a0566c8c17b96f320441a287caba433cd7f4dee8149ebdd3944b28a5f69880bf8f4274f9215ca7b6a1b05053459e602374439f7c76bd492a1c7b730e703cf142cd3e5133dddd79b6dd2725d5845a21dcb178da87172b3ab391f0ca34eb060622c413c8584b69b6ad2d5ee25d1132822614b3c0b5bf551e160d05a87c6f3f6195770e0354fd0c0591d928c368b67fcc1b46076a22a0125fcaba6078541b142233f176a3b0e1b7ec41af47e493fe67984f2a2ac9fc6a1ea82fa3f498414fde30744a5526acbb8cf5db614dee72b6efcc1564378de9d8a72af99620c83cfca7c7aaff081d72b098385a1b7b71337c6737c8f582f586655581a50f9fff7dd4b1af6195f2c260bc0fd104a214b5461e6531fb9d1deac2761a950927d0c7181352438210b076968c5103e9fec97b9a63ba5266a42df1938ab18cceb5b73903ad76375311dfe95fafd526db40ca21da9032a511b465809f05210d4ac77bf5826f3793a9363bc2d738f103963c4e882d09bc5e83a127b4086eee571af86b735d845f6a08885b3b1cd95014ea3e47729ac2589d5a443b36905f1cbb4e918869889f94e5371649a717a4ce5569afa4644f8dc85418c8cbe22453f5f72a0ad8e623e7d3b3a188e804462c6836d8c47f5dbfaf5fd787c1dd86fa4fa316e18885f4d830e04d6c383340fba73d42366fc2e25b7404fa22d3d0f39da49da686846e72a928a054beec3bd86074143d49a6a6828a7542e32963b1ef1ca4c811c2fae5607ad640e7c682b3dd17a6d3d29d23afb4e8942736be9b1c343a759da2110326a647a92db35a97904173c0c0739e8b442e9c1b2fa8006ad5e261ca8c9cbdcd9708f71864a9744a3ec7162b813eab8fd3823ae5d76f199b82b0aa142adfb00eb140910b972f10344fcd40fc00a4572a473825b3cdf6b1e45b7d691891ee96400225de4e25710fa7662dd0bc3dfc8bcc30e630a3b0a64954da7bddda07a3b7217cf7a3411dfafbec955bac05a53011832a387a82ca465a413b8597f4355dc074a259e677000971a0efa8201d272146e64d19f84eac96065b16f9e95d22bc1bca0a8a8d4492ada800b3cb1b2743e44eeb9be0715d66497e77d76daa7db49c1230b4ed02a036894d204145ec3a06ab051a56bb6e2ab1b74051c94126ad821972619e1d937cdcd18b4614b596516e6dbaddb599ed54bba58bdf3194923ba6ea17a4566f3e51dd1df3ac0b684b2fb7d2ed66f74257b090ff8a5522f64ac119ee15818c6b1fe0f73bd23dab996d7c9a0e913951952255e2f551c33748fd8f91aad494c1feac8143e083daa513c99f59a9559166bb02f677281e7e0053ce270ad39539db50986b71287f8b83efbd971d81ad2685740d65a3a572d43ddb7c1da1d2eb0c2c30acd270c1d6e4474c4df650cbc99572cd5eb2e27a50069d51c265c92a6aead837e2054d791c0cd89ca0c1259bd7e4e68d46c0defde182627ced947181cc310a798f6e14bedb983669cd0b1f39b3fb6e23dc64427100073604bcad25cab983ebc991ed77e2d60c9af5618007e50fbdd9e43d7740b627e40f29102cc230b63a1897e1c3a84ea5ef77fa0cb47a98be97560ad8ca2a40594cbedf9f09cc93eaacf74cbabe7fafa280eaede35ef945ca90110af4a4a28e90e4f085797f28ef68f5f9cc0c79f6446017bd6209f31423d3a1eb973433e98339326d29bef5b57def050432ae7089a3a1586e58e9a887997311f331c353cfd1fe7558e95a8705e9ce6a8eefd6a8dd21cc62599091beb2fb6a67ad91c2734999eb8a947a4c6c036843ca9bdfb4ebaebad8887f1c84530a82f73dae332a5847a3205e484b4ab4095877058b8faf55bdc102ffea36790fcec38c83ec882bc790ecae3d3242eaabfbba58f837954212250e02e6b7736b6d1790d42d714ce73cb916dca884ffdb698dd455a716fcf61c5aa89147604837d85e3efd31001ac937702297ef5cc73f23c63ec858c59c69ef990a12b21519a909474ec4783d27ceb9a5fca854d60656289855b79c99c511cc72330d2dcd34070a376f5154f654b52edcc06be87cc30b4cacf53a87af686fa06e4cc242d96040fe1b923d3724a8610fe83b779675a7f101a147257aae561f61e89de61880284cd82bba817ac4451bcc75962fc7bca9cde79f62ce64092697da53b4b9ef7ec8a23a50494e2382841a7cba457a38f976673067910f76fa3575ba6af320410086064a14c496eeb4a4a7616084cb9c429012d91b418d8da1a46380f9a60e810403ad233b4be0d72aa44ff6b2f887ad3d579e8880ce44f23fa74096e754966b41ab2ff6ae422432b1fa9fdf00039b939b73d5ab4b7c041ca0a06dd423baf052641d1d909b5c64a9e323a2f6f48b1d86741909b385be48761b73efc8570ee443e1cc0a5eacf81cbdb842bef32492136223d74596b458e2fc10afea66cbe7c408b7e6bd8f5d97b174a7cce66450a636e389cdd6d3a5ac15b10b06d133c453793446cf3b4cb296b3c489751cdd6baa2b05e945888100a0c2d44dea0dc131438d835eb245046447926628c16500fb5b51a6e69873a8da196f72ef0ae0cc4ad40700d7c6328e975342cfa3fe19e3e6d8ba34805a6470dde80dc7703bf1c751c470864f2a14231cea636705eb9da5461a4009b3c9a6931ae94d9bcb1150313f8568c1ac37f5bcc09cb0158304f2aae89a757a3d04f8064f6c6f8c389536e7226d3c6dca9bcceeed1f09ce1920b8a44e7c4c9d1125bbdcbd1cdb3c39d19e0664566be8c4578fb2fbb3b06939954c6bb32ec9e67e7738305c4c62db36bbef1df3814086c293417356a5aa0a569ce7ea2687e008070186ee9c4f36c4a8031a88467f5820dc19a5038e36c1bd673070751a21edd768265bf75629a8e0abd137eb9c3c2c27f29eed10ec9f547f0a91389ac6574053150a20289ab3f11fdb03b0b4d0be8b261620b54fe5de79266bb4468824646fb9b7945ba694a40c0d08e307bd0727ae819775b4ccb85212b53bc1e61e8ecb388e75e10a2e48b9bce168d7460316c435e77fcfece775ba413ef613e330ee5d9551bc4da9d06aef3dafc862cbed6f2c575cf8970d8490587203705f9523ba1ca1e5882c8ac0db2f4311bfd8d3af38f01ff65472dacf4bfb297331aec3301bb7c8e96e5fc4aff61d939d93066dc07c51e17da4bfb61cdac5698ca22fb947e264eedb6e18c01d6d8ffdcc9ac808fcbe97e3b2414238bfbb6cb8fec281ad49f91d8cd7bb2e982f6affb3e17a1c8c7a5f045e18a1d421a40be7cf295fd42db57b2f2a4fcfb5648878fdb4c065a4455da176f5fe90104a2881870a12a00084121e802e54acf8b182e7764f83253171d412a5748cd2d189db11cbed1874bbff7ab0e1759baf89083566f7a2ae998850bba7a46d32294425f1e736b4599697a33f5341f51117520c46603c1bfafd1d0907b78fb8dd61b72309d1915a70fbb356db509b65995857b3567feb5226b7694f96a56d281238d35f44910c2812b7bfa3aadb1715e2e568ba7a397ac4e5768fb8b8b53784a851c9851f81229089085b8247f7087f3e9bf9d07631465474f7e81eb12f628ceff9e5ee6f63f7c768bbc8ddf730448fd1bbce292ea8c124ea7b4f490f0d963cecc29830e9e1b1c2282146c9288c92f2b364c992254b96293d42589680842a88a6f40861590212aa209ad22384650948a88208083d4452e690ec99a1c74a0f8e2858b210f51031e932e1133dc0479e831fd03794e54a1c80fb0cd7dd9d5cff1b08b8bbfb95c58d597a70e36b5cc3ddf86f0937d6b012a452a976ba7022085d804184284c3163f30116aebffb5f2ca0e2fa7b8401091496c470fd1d861834218aebef8417dcea84295c7f18a1270461f102a1eb4258b2b84f08300801c6757fde705c0056fc8a01e0000610c2671fbfc7fcf8bd203097bfdddd61daa2686e845133274f547ff0e347661d3944d44e8799999961d852d9766f08a6dedc7050eb80814afd1b86ff37b38a8aba58b81429d022852acb9c336a2005102bb8f11de688ea540a47f41c11050c8c60852bbc908323a6a5c2f59706a80208892e84ba08c2f20529092d2e18ac5cff58ab4ecf12498421e50a2bd8d285a2db55ed2706373e1bd77f07e8faf786e31088312a60a78a253fbc008a2a984875f3462f62026e8c47ccaae1b836d8c65330055d6e02eae441c5ba0022fffa4ea6230c6ad20cb515aed1a85be119f810667b5b20fc0b47dccee855f0a99185421f6e3db8ec357e23eea5349a6193eb961546c13fd9a081e010cf85ef100ecd50d5f81727638c1aaddb6fd610a3f8df85dc980c1c064da9819429460841f3376d734d71020a2c2f724003242295242846c122c06085eba8eb7f6d385ee30b273e33f70a3f3459c200f79ad26409f7a2722f1a35a85dfdcba655f00af7ba7e6a15e664e365503868b670af4f00d74015dceb6f66d001819c1a7cecdc6bcabd7e870bf010e55ebf01aec9eef51e0822048a7b7d11aed9ee35c50654dceb8d700d0e15957b3ddce11a00dc6b0a932edcab7b54f77a783d54c235d7c3256fca115ddceb0a16124f3ce19aa7059011f7aaf2a6dc808b7bbda17b056d49c88000536a6085099a215051854a6b8a671a1a140a5e9d1d3087694f5deb9c7c83fad6966d9c7ac7b310be1c3e81b8628cd9011fc87b7ef89effe9dc6bdb715d7e4a124050a573e36cc7c6c3ed1897f6833cdf94d888df4a2dde45ed600f517d36658f8dfeb58dd618c63fa6efb2df5e238d9e6edcc87645ee488804deddec63d4c8d238514756b345eef659f67cd1cc54e252607a233a29d39b4a360526ae547ab855fb8ccabe947d663b1f772bfd032207938570bb617eaa547ac875f3520ec80f0a685250e0c74dfe0bcf4bf505687dda99951ccef9f0a7908f1438277c9ac69624b9efbebb73af6f8645802d98856be0852f1ba648b3500ba36051dbd09c8ada2115cf4683b1e2326cb5fba9435d77c72e337933ecde308b06e11609256c4df97cf31b3c1bb88561971c5cfe24b563264ca8bf2d41b4205a48b72dccc230c83b145c069a5db800dd1bf751e1b273b7b0e5c216dc47450b4497929c7ed7aad52a5f3820ddf5f35170a12621f650da217d3b786d989f757e2306eff63a7863c1c602cd767eb5ae6affa2fd4b7df94dfb97d7d195ebb6254046dfb75eae83a4fa240bbf085fcd0ee9fbf23af86d378cbe3ec9765bcf8545e4bde293a67cf9ae88bc95f4a592254153ada6171bb7bee967dbd4f792ed6685d9cb1f711b0b600cd0faeb416f66bbebb18fe19fd64e1bd0e0fd84a98c7b29cf820511b2e9a022bd64de700d10dc4b45eec53733ef95c6d13eb88619da1c46f988cfcf5f03a37c4078833f10f8fc124228df470e57c3df1e305cfe1ae49553838fa6e11a45bd00bbd5e180dac1dcbeb2c3cd05b8a67b0fcbed2b8498ac2effcc4fed263fd013f4c9c81d3cf08cf21a8698a1b52103fcc73b4ee2725ded7d5d96c64251af974fc46912c036a77607025f8651fe4e6aa2f613f1eb6fe3c113b843763c2e80b8f087f0805de838b9f079402d7434709d4ee4b6a9c1bf43d96019b67955ce4645bd5eda04d48fefcf348cf239fdd93df64b2f2a3f7c52f040b9738c976538d8f7c5b8ee1f4573e3b1b5ebdf69d67a79900a9b8c4d97f0e218a3cf006addee660cdd9ee1c4ed8fde8cb5689db267bab99b7d9e7a66c229dfdb7afbc51cbd195261c650773744cd187a70165166aef5a4cd57f439754e8afa7f1ad713e62767fa7f42e57be1c4e000f3f375303d36438c17cd971a69a93a6ef8bb1b6ef22a0687f9d8ff988f1979b13fe697ac91d28503f630af03f630f608941fa59f7fe4c5ea30df648f94b89782a9c9bd948f9d1dd263bf339a2ee3e375ffd62a0a034e9052858b26559cf0a44a13b848a0abf55faccdeb864a4aa9636486cb4c971b3cd80c97992e3776debca1baa1e2f9e45fdc0d9e1aa40bd257aef95d91ebbb20cd183ffbd3d6fa8a3ffdcaa1862e7ded4b1caa75e57623fbd76f1ded2b248eda2eb345fc62b6d3991163468cde34ed3d095340f339914bc1df7d82117db81e7b22136efeb8139da271dd094639b40ed4336e457d29f89dc6c4873426439ca68488084bec59a2c581ba1045555cc524911d886bbcd394dc282ec55d7533d4366e7130cafe5019c5c589aebfffbcdd8d103b50f30c83f6e994f343e65941f509422d422fbb4f0ba3de7befbde73cdee3ab25b53b9d1cfe8951bc6151fdbb9318d56b70f7a797837da585515d94e574924d50fa343a447d3a5bdbb81892cea524920dc1f592421ab54d8825e5d6b84fc849d0a5aec11d0f67bec6d14b6ea48d999d1bfdf6a49f9c3fb6e1c027713b320d6ef0a7dde26635caf33e4803d536aedbf12e9020d76f2f7fb321b8369caddfe43ada5793dc950baf143068dd476d4c8febe5cbbf246ff0195e66d6d1300c7bcc39be91bac377582f6e0430860763d01941f905090abffc32f9c0c5afe89d45c7e445b329ae09a79c3d60d0a337098a9e50d027438242654a6946a9b6459a519a519a5198cf1ecbb467e98f9e8eb8ec4734db62966d5ee3cdb708df8b19c01708117835ed3501fc50847b3ce05e964f2f4454d626a33a7f42f50514557350bb1b1ace38147dba432fc14179c0a194e31543cbdcfc8cc3bc4f17e32647e2a2a8b91985830646fbebda9e37149c5250fc6b0e2affa889ead6a3f34abbacf50c43151795279417f89bae9d2073b75787f1ab0aaea4ba076af751f340752ef4f26bca273acb0da4850fbfca2392351add32c8271b7f92fff0f4a7ccda6054e7dcf0a999c3de4f2398176a9e2466ec5db338d9f8f8d2ced3cd0cf1e6ba4ea721d49c56eb747a7308be1c621494575cf8ac3d2b4eb10bf37240ae7b19990bb938ea4c9081a9690035b14ccb40ed9ed217a469f03d1d33504ddbb40cd4f7db860396c2b1533b1c175e4ad23250ab5699a7a84164066a87c2a6bc62c9bb542a95183ed2cb81f3acc4791687d21e6530eb11cccb011d6b8c310cc320561abdef668fec699ba982aa9e08143d41a276f5fe7c2189ea6432bbd016a2721b1d0eff0989426080a87fe1fdebff337af83dcafc7dcb2148480f231e3cc04f06f9fef2d98cdebf5fcdc580e934ae93ae3f894607c37b31c41f7192eb878af19a4470ae79b2248479cae85764f6ee666e19f8bde7ccecccdef3891e93b6d294984c1a8f864443a2ad4c9a1293495b693d269349e3a9a65aaaa6d2bf92a621d190684834243d320c0a9d73fcb9db5b0ea1735038392328aacc4befd6a233eaba99a1e3630004600cfc50cc87c2fe615d91c939d643c6c18d87fc96160519c0e3c5c05bf47839f83b769b33e2417d6fb6283621663bca040232d2dddd400dbb655f1ddb1b36ec6ed957c7f686dd5ba8223684ddb0bbdbbbbbbbbbbbbb3b3ef1eebe8682c05ee3873784c03e7b18076dd0f83d7c9ff3bab84e67483bc7c11f71313c464fa9d4deb663f4dbbf278305f23ec3b2d7b6d736782feddf96d92ee3cf32ca3fe218c87bf81b07e4fdbb94f643cc6a5cf63a1aebb0871efb727db5d1886ada3fcd76d86318c6af33a48d5c7ee780f0c603faf0241844373e8d19540ee269373e1137c2e0c6c8ba313e8cc23bc2d441179089270336c6dbc2f3e23a210b58050ae1891bb1c79d945079689b77d5da31468a7df63c6ca06749904774a9564932ec4adce2025c43e3836b62116efc1db866d2dc4823149b0b95bb50080f40c001abab88335857222aba310b92e843852cae890f9fc03889b02062cfff0e94d1f65d026eff0cb75f06459f0cfe71c4694f829d8dd1bbd889075d98f33be27eea6f5c1cbd4fcd371b46568b8ff510d7f0e5dea2e251d204484a8b5d8b73893b3b5036f9dde21a69aff67e05bfa02696dcedb51e2dc428180b74e7fbf53b20df91f6f0b77f5b8f23577b1ddce29aed5b6b21ed9d0b6a82e7b2963dcc9e665cb7a8cdb86ec5071f8c7124bb23575adb437d050d4d6ad741b0157b26954774ad203ee122c6c8c9133c47d8020b461c010b2d4b0c1103df1942132e7e80e2cd2ea2bb7d6042cb872ea60b8248c18256149a30c26789123f08a1f54315bf362b2a5248428a13591421d55084b0687222c014f4f6d3b40d05b6d0c38416b470831f56907a7285b438c2ed8700d76cb73fc7879015235cec761309690174e97d425a3861b1582c168bc562b1582c168bc562b1582c168bc562b1582c168bc562b158ac9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f9fa7732909720edcedee39788c31c62d87785d44444e9c3871e244a6fc29e972329d4c27d3c974329d4c27d3c9c420f34cf26fd60a73b2212f29af2e432811840a9458018f1231e051c2098f124cac94a082850f82385598ec3e2a5804ddae7e11524a29a594d7755dd7850581a8ca1251aa2cd1a48a123da652a9f45c6253a9647a36718999b97ec9642a999e4db5443299be54aaa5af3ca449a56a2a996cc7a6efe0ea4bfff865de17dbc1d5772f4fe34b5f4b25db959e86ede0ca06d1486f9ad1cd3bc376326c100dc606d16e7db1f54dff4cef26db956c10ed3a33f3cf16d07f8f99e7acb5df477f189a99af40d223a9f0b9bbaf2945cfd67434dc701cda2cb3d86b5c9665f2312e7b8ca39f71da6f5cbc6fbbe10a5254f18408189e81dfc15c37ba734d0d9461429c9610f67b32c4d2c9c6cb3895b171ba626b757ae9c5bb6d3910c366e6641b8d48cf241e31336f3f229146a4116f236d34da46bf7192db416cb49146a46a3bd3eabbfa303ffacaa387797941d32c492bd5471ad9209a33734b2b6a5ef79389113eff18638c1adb6e5e08ddaf183d46ef8f1ff95df1dd638c92cb0ba8bfe91ae47e8f99b903b5fb0ed4ae5ee6c2ef3107e92c0c031275faece039e715e5bb74b672c5850c602a2f067e2cbc0553f1dcf26666e6167314b57f66f6303b9986316ecd4db82523e3bae516fbc02d9f52b05c81858545c91376ead531029f44fa992ea41b3c954492557e11be9374433523c68c18261d231a09d6bfc14322cd98486fbab1532ba99a4cb6bba142b56ec4de54fad27c93ac245b7ad3c370a67fe15ecf984a307e275fa824d28c18336248224985201d54985c7e08f46004f258c99e7e0f54a5a270a807233ab8c0a504cf66f4fc3d7c778019ae46099b5da5289a1eb6c8a818eedb7a689b4b53e3b2418fcbd3d1cd7eaef99b42f0eee75777ecae717a1822576c5692f79cb2dbbbdde143bdefbabb63b7777b8cf3753f3963409f0cfd98f7fd2f05e3cbd7e1fab647faaf3e727ded99195d00da2edb1617a6b8272c557eb446e2fb1b918f7d733aa98b8b79fd3faeef7fdfd60894677ff44f6be4c81b3902e587db9837ff08e68ffd0fcf6ccc7b1dfe18f6192ac8ff7a9d54668d7ccf409aa09feeb6f9fb88b4f1afef771bc32f24fe6563d812c9e1a5768812f2d033b17b4376f6ccfbee111d3902e547b431effda58d79360687fef83ffaa38d99818f0aa3c8085968c20da82084547fb431cf12f9111f4e910420885002490db640ade0b246a0aa67600f64d2f0b1a45ecaedfb0ef6c054ff89371c38d5f6f47efa75e0545bc83c5dd0ddbca093158c704d37610ae6bd7c57e9d75afd749ded84f671474c47b2d7e2f51a7744c6c7f0c3bc4eea85cb1e7be619af93a2b306f2acaedbc81852a9543ea484848832830c6a201e226ef75ada104f12b77b57481ed5f51e64fff23fb27f99618dc8b031fcdabf7cf6d2fec01ec61a313df6c3f4f2daeba0bd0ea6a74fdf64e9d3528983a9adfecee877b4cf3e621c4adbfc47fe3de3a73ad2893c935ced317616b972a11a5f727ef1c531de5ef5aca2af5695ad136a5757bfea5915cdd500a2505f952898dc57050841f700f7558142cb75219ecdece99955144e38c104100e584730b9dd4a5ad043ede6ed875db672f6740c31a050ffa7537f0fb547bd3267ada7d33f0a3544afcc9f2d95d04decf650c7f0e886c06eddc0313dfc75aedb21f0f2460376fd2f268c7a78fd89e4991e63338cd9c8ade75079e54dbcc7817e8cdbb9edd6cbc1eff3763fd40289b65bf6693d7309fa64bad8731d0af42457fc4d43d4fe1b1c13122b2f074c651c94981e40ae8f3686478ce1e15cb2a8b2a86edb18f93af7f9635cd40e16ddc02d8c926145ede0e5c96943b5ff86514fc23ca94534f02582d0433fdddcd01445874512e5ce4dbad512724ed25a62dc892b1b558c52c59e8904d8107acb6f6e46a3eeee6ee8f674bb695c8e6ea3e59f2e10ffd9361c8dcb3fb28f45ed6eeef68f35ef4e9588df76460539dddcf006a714e84bedbce740529ce504d7b4fc09d7f403f1bb8fc60caa1be1d9b8118f8967f3d29b5cbe0902df6e2a617a3b37e232cb57150230868617f5d91c1d2621b07c72aa411840eeac16cb81b4a8cd7489da39eb3a8b6b9eb0e6d51ae2ceb7b8f2193ecd89b846a7163450f50ea3ba7edcc08aed8ae10e0fef217cff22e783519006d2401a4803e10aaa18d5507571dc72de6515d7c0cbd603760746113d431554b9852bc8739bff09d1a08b4b33fbf53481ee78179b3240e69657747e8f6bb687f2f7667e8f21bfc74864403af9fe28b898dcb6fefa5bdde494576798ed7cdb2af675ab75abd8d7ad625f3720b46b1e7d474fb5edb50dab23ec29fded3579c5d7b8eb77454623abb1fc8dd4d5d2ed49a4ed79c49b85af31366d779b409f0c10ffd75604f0f610e730b93dadc1f99f38ff17ae391958aefc981efdf2635e3ece0bcd75fd33baebcfbe3edc6ec07ad0c496ab7dbff0cdd178e748efe5e83c076f3760df6d3b9d6d877c198f71324c5fb94efbfa2f2f0fc3c5bcf0ef9e66cc0b5fe3df7ddb8e7eaa7dcc6b1f63635eb034e85c988fe951e34b5fe34b3e520053abf70ed0f95f6f03c36a70307f9ac10131bdf3902fc376da632f56869b40b02fd99a71378c8af6314afbcdd2203f3267efcd89005e7f9a7143e018f4bb8876e9674517fb22d7cd3822d917b92e25ba6d697f86fd63d547a50749aefcf9bc4540270a1c1267fe65e5f3367a39e23bc7ffb6f8de82eadff15f90e4a225839813ceeeee226eb7edc2983f57a0848984f2b6a89c58610a267eba00c2142c191c11593d39f86102096384218616523d84db43f8e1a25b4508ddbe16004305842a582ce9821452ada4882a6e3f0e9a6e4d71810b5af5be294544b9f2be292ee0119245a492ac4136a4960b53a59f2fa3d1b6a7798f8b6abe49e3f64fa738391a33a80bb8be4f46a8546e7716e9f1d91ce07b5bc0ed02b0add1832abff4efe5d0befe136a5f227e5b87f9b2befc23261de497ec912a618abae46eb896b615d1d0c09745ce738913c1c4a2e8d119157f494f928e41ffabe28596fb9ca8f32db6e09aae7bae15b66955afaee09d9e9eb34fa77f14aa7b845a7e71cfe150cb899c080a5d198b76b63421c8095802bce1b08dc161fbf83a6c1fe91fb97eb33ad0d7ec91f8747651bbd7fa817d4e0d3ea2760ff072600f379a97037bb9853a5f7e77b1cff9008f56abd56a988ed1f27833d863d8b7ed6e2ef6808bfdcbb0121532de70e0db4480c3304f06b340600fb36c510a853ad081167420090738d0c301fa60153450bbd7406d8f56b8acc0fc88a81aa8dd9c190fcdf564082ea0f244093d559e4881a70ad0932c2ca172250a13e88512deef7cc7eeeeee2671d901b685828843d6baff6956d4eeb5decdb9deb7fb7bfffabbbbbbbbe1c7eeeef7f1fb75bf7eb0bbbb1b76bf382b7c0dff75cbf412fa64485c8bd29f8fe3d2e4d339eac7ecac407ddfcdee6d07fd88da4173e3bce570452aa54ca43b4e3bfad297237edc76f8a5383e76800062f6ccfb6bdb112f754ddb765c97669846e9b663dbd10f3973181b74bb3144a5bfeda8274d831b0d95e9b6834efa147b187d6a7dc02a54203fa4875847f37e48320af4c9740e74e93f931635cba50faff40ca5a1c6d0c0174a09820e82985cfadb5fd479267bcae46a2e3d67ada713fd1eea396b3d9dbaa7dfac9eb3d6d3e96ad65bf59cb5f6ead2672e94b95cfa4c442795c72cca4a78dfb1112e7dfa44e0ed9875e9c32d983ebc4221a50fa5708d66856d608a3ea4e2c9f02e7d48853e1462baf3830fb783565c0a5b97be06973049d12b52f4bf6d061094a28f6a9b98a24f73a3a36d6a9414fd9cb629c02a45a560a5e8efc043db202045df036dd33558a5e80b691bd86495a29ea23545895274a425451f2a691b18568a6249d12e292a44a55aa95274aa2ea5412a4af93ad07d02a80206bef71edb4ec74b968bdd1dc274b5615edcdbbd5f184790ae5fd7bb9d0598417db7ed75d9791fd74ce90db978fdc66eefee18bdb9be8f6ba277bb77778cde1cdfe8ddfd71eba689a82883655c7ad5bd211f557eac78e0922d82e00af6b002f8b924f0320ff45204aeb025c647e6638bfa5e8867338a0f57700557f0743a9d684e97e12a0ed96787868686e06a0866d536380cc1d5105c0d0dc1951d3af9385598930d981ae4843e991bb6341dcd93619477a318e5af95e33470fad5d7158fd0e2be62bf9c1a9ecdb302c8a7e0721dcb1b7a59ba478a2682b8dd2bea9122ca0c6ef7ba5ca9f19ffd8ec4ed606edff83dfac610f5b91c77a227f8b02488515088513128b62e047aefbdf71e7c8e9204b29a3c5192045ec1812d8e5f503fb75068c803a01546412718d5cd0b277f375553d536b288b524643ea816a89d2c92456d036dd185fe5a13883689c7f5d75ff2f9e793e0a5dce98d005e39a46f0c0d7de74ffb2fc7fb772d90f9d186d92dbbbbe1ed7971438cc09f7cf950f92129a61fc6f4373739c9f1cbef39855c1e22a033e3cf07d23dfb8914d1ee9007dc22d7ed6f21ccc39d3f1b47bf9dafa36dc06b8704c25ff29734911c110d083b9007ee70aa1e1e7a661651610fdc82616b8158604ecf44b9dd110641a1ec3bc844f61ddcc16dd66e4ec32849388debe90cc2c08817433fa4a276373733e898a7d3a90889ceb0f7b00c427ecf9d21ecf627735fcf1936a8f09b9b11eb48701d3e543cc18df28a36f4e52aa472d7290485ff64b8bb37778f31c6b85dd7755d524a2925e6a476dd73858899dc2c4510c8092e389893dacd6ebd1c6d1f77b2b1450759b9cc2fdcee6f9864a18551152d94a06a988bcb4cb81dcc65a2b9d2b6ed2291489a1212495b693d241249e3216da31169f46fa4694834241a120d8994c264f418f6931b25e3bbbf4dc3bbedd27f8f019b3dd1e06670af6736eeb5ed785ccfb96e3b4c72a6497369ea6b147a6752752137aae90e70e7cc9ddc9d35ee2ccdf7e6bf9bb679f959db86c70b7aad1bdbd174af65e79c392f070d2aab2417babb71c8fc0946ebeebafaba7a76472bb54092bfbdf11f33973d6f35e844d1ccc10cc5aafcf3b1a75c873d10ada3cfdbc6c1181ed9cdec10d21d41114ec2a5293db7cbf81a461f912875ed6d384f96e4671f9f562ea6febb9d0e119a3b04de118cb898faf066dce3c21d65dccbc21d717d696b23ce2f950f72bbbc46a4efc21df5257143e0180fbafb88b4c5650e5e12c73b4a76c2ed652520d9d38f4f9dfe834f3de3013f7b1dac8329bc9df67234f411cff0a9aef2e1f66649dfd86fa41f8d46bf7144465fe4ea81813b8297b1274bd2da1bc1288205535eee1ebdbdbddbdbd9bb5d06070dbceef076634a1cbeeb3dcc3fa32c10eddf97bc7ffa9b519736c2c3af8623b11d5017761a0c62438d0b31fa83aacd79c9292f981ae77e322bc3336c8351dc46c8a7ad9f67c3e5c825ae3c400f2e1c8a4152827836f01181365c0ed006aa403e0e4f06eca50dae84c195445cf9c395524a890951af8f2fc33444f59296a21a6f46fe53d5eeb57ef0f5e3faccfe883fa15073b8e6f435bc8fd3cb214f57e67ce0d9bc94bcdd03e3caf7c5953444208dfc04b0cd4bc919a6e4f166e4b4392f879cd3aa9ae7118d75bdd8947fc91c3e45b246608af4a894959f8ca28fd91f19ff18f56e40c1ed8ec4e42063fb9787f937fafa33fe615f7a1affb6213f4a4fc31a81827de9b119d60894d1d71fd921d96ff687e9655823a43791ba298444229148241229e37ebc3c8c3502532fd6c4d537837d89abdc7c33d893b8d39bc1e44f0b990451965d78012541104010401040084f90c5abe01004b57b0882150c38e0079f12f944e5ef071f0e9e0d5840e3432431051574092cb0d5132e9e3c1181c0620a4270e208b1015d7ea03849c10cb84841125548f168b4fba4a8a20797de17a246a8e44dd7743575886604000000d314000028100e0944614038281e19aca3ef14800c8490487858184ab32cc671106514248610420000003002203033b4010045a2b03ef2af4b7440438b3a0f6d74662f679b4f4410f8dcd90f24200231a68610fa52015720fdd13893dbc79df49f0bfe7a659a7b1b18444464fa84bebb624d9a70f4e580f63bb145af3163151c09ec601d859daad374b13898566f19f34ccbc7b1f6af8936dcb04e47b16735a46936fd6a8b7e298b14ac48f2693d1ebf9dea5b9559c1501b920045800111c5886358b461445b4f1f2f69f0f68b51279f1455713ca61fe93f4c3f6114fb563b3afd84fb51bd730cab8497a1134ba994ea0b0b7afcd865536913c8bc400fe746b6ab759b8ce02ec2757e02b1e6820db5eba4ae25978a765df7ae10c391d3a07f782d4cc4965c3c29e23637ac528b4960906af4d3e01fa097ee8a576f0deca5fb142bd1441925eed47d2bc51ff92786bf7ba421e7a5d7898aff08b6a112392d53a14dec0ca6d4650ad62a7340f4b61a0262dfce36bad80bf705e05289c8ff2d1fb31484547313851fbf703af3f4920994abdd70faeab6d8c7ebe1efdb13494c28b1b93e4a5073360798e67ace7e92927ca7ac637479913b8daf0e68793f43f6f12301edd9fa2310a06faa049582440775b4f1960c75c467d2870072ddd51cc6b17ae6d3c541d98deeaeeeca8acf84974cba55370626312af310067d9496cf510b394d4806447857b28c39e2cc3c004f9f2ec1c6a6a30717fed68e6dcc1cad8f31d9a5463285a498b2e7c94d679c4356779aba31aa9abcd06194c658350a77769398b5980ddf49ca15549d5bf270b73759c6a975b0a31b113d3dc29493530ec2c8b59b5b43de19fae01f2201e8e6fe6d70cdadad62302de687a51d115b8b89ebde60380bde49ea73b923b4cdad9d1c1d848116c1ea4d61aec454c5b0e86644b6b35bd1fb14ef706b5a133cf715e85077d6bf2bb550d8102a748c0621e25ba7852cae409c15c5535c550b33240a6be1730b096a67b61051e19c941e1db40ac66b8158eac5c90652ab6a12cda8025bf9ba22001bb31eb56e3b7aedb939155f78ba1ef603fa5e68b240507bb6200957cadaf8195b9f8d5f167e9f84c9c55b78ff0ec8261a7ca41fbdd227c86df78fec9c8f7cd27a3b6a93d43ab8f0d7b6c8b0792ff3856d117f279e836b091a1c1e445eb3c505b1fbdca784ac3c51158fe37b13f85ad4a3d64c8894824ac9d8424ce7970a16f3ff0b365d6f5d9da3de682ce2cf923f8b10c84381321098fdfc857caa434aac2613196d470d7a5f90afc2d1bc545a4425b23c567778fd7432e6bccba6fdc6739be98831fb8a3ebb68e2b98604a436fd31045013275742c0b6ed07637f30b52ad10d0158aabefca998f3eb1561b3df76454ae68a679de9d201d12da4997ea0340c679137058d810ad598e7119e1ebca41cf9bff159201d2294c2d9f30a461c48e3b2bfebce85616331f4946f3935f9233c706d116039c2880dffeaa02e4a9663028d682643de1b777d9cd7c81a187e92b693687b7f7ceda004c5860ace8274733d2dc412f5e4765eae750d0b10c495bbc2cb03eb7b023c20ee51ddcc1d71c72e6e09422a8c936538dece2e27a4e1c5edee1d0a5bda86b7fbeebc2c2853f35f264f796a40ed48a99d9a9e227b590dcc7a665b640d05b9445440928e592fdd486ef8de1718fb123120700f2545e2ad60dab32f99f9295c757086c4fe4c7cc2451377bcaf5f1603c5ad67d4827204bdeb7a4337f4a02bd50e07b45bb67dbd0cff014a391b41830bd2503fdbc902b5c170f8104ff6524854ac04896a4be3e741592c8d7fa158869309b9ae2fa142911ac81ceb60546d37f952c9323dd8bc99364cf8824a2590823ba29f21d3a9774d6e4064f9bfba54ff1e97ed151708990ef5ff39122cf4474934658777c13db7aeeeca843160d111fddebd270cd47d68638b5358afc2344c4f137890501f0fe28f4fc7dfbfd43dbdef20d06a2cbdbcacf55412f8a95122056e212a391efa7876f4b9aa1e99c4d7fc8aff3a9aadb5f462b43fd69ffd3494f4f9ee9b875e6d654f36e168e177625fb25f8378a34d888e9ba0a487d57f09bf7563bb715846313a1db41cf1c9ed92dd9b4acc56315cf4776b986d7f88ab8e72ee74e412926b8f6de4e34b1752bf64f46b2ef00420d018a1a022af6d77bdfd20a11c118774cd0bf7af05724b116aa08e0397791d8dec0fc89383090f3aacfb8eab97d2b90f70cd983f02979186c36abd2ceabf9d25a9bbdf236467497ed57d70db8550fce9506ad08e5181e8bcc981554fcf50eaf1826ff7d36a04cc32ff324cd41b78c2da7662a8212469eebf6f6a84c749d3829f4176603969ee2b33aa763a243de852f1a733da231ad7c34530af1a213ecdf257fac46930c4b03e82f0067f214df2cb9dfe342281adc1c276ae9afc8bb45ccdc131b1fef9a795324b23d82e7a3092509329f9e232eb4802f46c1736a2ecc52cd82c95b35d6cb3feb81611a8dd550e8501af5d0afe3072856fe9681c69a3ff8e0f8255139f5df8aae2893c84965a3a76f73f52be60e1cc2e44b74f9d8f1ad875e1a0c27431f861e051e7e5cd2e5ca52d45007d847003ba754f9ac2f77f4963ca6f1ca41dc62e96d95be45585906bcf6b6820d6b405276a4f03b95c65f15ab97d76cac9f8e2f932dd9f70b51abc32f197b79fb75ea24be6428e20626a1c24b92dd7350e0abdaec7c6c1b82ebf3fbc91cbd1f2202a612b0d6cf7324bb2e4ada7d768fcef060f767a07b623cefb266d6e4acf75ec601b1a874c5600adaade81db00b7cbcc06d4565287e4328e470f81c4d4fea1a4d2cafe03b73d0e4efc954eeae2f0ee7932d5b48939fbbea15ca910691596ca805931000a4ee34e8e392dba1e672aa440144f4cb3ca4cbf4144ecbf22962be8d2aafdc246c75a33a6443aa841c72a80f292da787f791d140e2f224135e7c81bb8f3bb6a275aa14fa36b18df98b46f03675f9803fc30601e8558ebbfff387e2bbd0b5475d87cb8383ba5f3132271d45d92450e94f2ab7576b11715653d4bd9b48232b91c3845afe3f63986ca9bc9b8487fd3dcb17c5b961290e95ccb0e6a356f538dc1699b71624b1ac0323ff45fdaef1a1dbca1efa2408c07e4e6d3e164db995d880062adf7455bdc5df6a8a2ef5bdcd9b50db6da18e88048e28ba3e4ef020fae0f869e3415461ec0102da8138fead647ff5ddf54f9073fcc75076dfa07a03e7751c23ca8378eb143b678b3772f05427d3bf0d6914e75a361f8812a4b9afac478a6218b44274126b168512a83e109171f73b07c9e26a33d72a7692fcee0d0019c2b42323aae93b2719388cade587e1ac1b10c01871c80cb144e7f663b9ad40846bff6a711d885da6246aec6d1234507fa254479ea662ac7692c45f122f06a6899f3cb3b5c4078359ebf97e268da39916829431c2df8817513423f44b516c7e6b184a13bab9a04976d62d03bb0c29c662af1f3611617cf443d919056b4019aea244b4bc757931275d4a5a406af17574102eaee4c0b1f13b6fa9716225cdf00055f5611f026b0f6d68a7b3d722fd1efaf668fc9f4fb2494c418d4a25769fd0b442fb0974df7dc321abbaac37a674aea655c68def5da4c6b5ea12bea7c2d910960c1038ab02b087b3f3817aad58ce6314da1caeb30f4e4be002046522b322244da4673be073c29180470b4c50c8c2940006224af684dd01c84bbd41bd1f028d3b3fc0710ddee45d606b74252687d79a62ca067c116c4360d47a0c307a840b8c72259187c52308bcbb522458468b0d4ab74f18bad06364ad2d9e33203e8f5757b54e13124e38234b4b840f7f047fc20021df286e20d1e352b92b746f1151d61e1be854958123f809447f6a4d4270c1db57ecb9a55c729b6d56ad2dfdf2772c528bfff66b85086fe408fdaf0a02280b2b9b416ffb68a66c6a4e30b3a7dcafeb8459c4eed0dc09bdae0e3db455675a53c8d2d7a519277e2a2dd0b05c7379d05fa290071f3cf306e8e8cdc2dd2a3468e6ce4b434dba5719a368f3a88642fda07629900aa53f68f485a6f1026c66dce0885be00920977bd5057af32c340822fa857a106e19f559c1870e31b3040ae259f6e2b6013def59797526edfec83ccc167ca1dbae22d99bddf8fbc12096968e36271bb7101879d4543179414c6ad959ba6763ff8a86579434f810d21833f6263ef488f1ee616979f01311a4d58116430804425c0432636aedc9154503a2aa2e48d38ca28dda5f59b7cb346ced5526ee41fdd1c16cc8fe6699113e8322269a48779282f79a7d9c22291b552479015e28c244d0a59819453914c23bd2860f0453c30269e260710d13913e811191187a3d59a13fd1fc10008b6713036ecf14396bcceecf339042a53aec94ab8d9cb900e2de9d7bab11023bb82454267dbb089e358e7cdc0304ab10dd0815242064e19e8d43b415aea0e06f82304693305bc32321e8cc0e4f1003668e1e14d11d3aa0a59750c99bfb08e280d7cb362bdfd68cc0f091cd3511f86dc54d3fd35c9ce49b213e611ec15231340ca04b6547572e6818538d8f8136d57e5f4f30f337109b35e148c3656327317757035980090c697acbaf71683621d75ff62e7b63467921dee09e5c3ebb0dbbb07ea0b7332d3ae82506a85b6e3a990be1b242e52f96eb286ac3bca3e51b685a58e7303aa22969a287397710189e6a18fbf043c8506bb2e5ca4ef0dddb6d5a22595eb59dcddb5a8af4c66dbaef6f21ad0dc529b832571741f4f942779d20f210be6ba82161cdc38613baa1aba94529398d5402cb61433d9091aec4a5ebf829e93330b9c74f9432e178f280b5791088a95bf3a3afb9dc1a4be9cbf7a208a4f36ceee440db1fbd7f5bcb7e23afa461d0d0f049efe573759de83c6fb28938f4c55dc647590066274eda3781a04249fc4634489ec29917b6a21a1a34363064feaeb15834e513142eacfa41e2c3a52100e2a90ec058820a998ebd0306688fc6b1fa53ccaccd6035212517a48a91b8b23a99552e8ff0307d0e0d7b42743d730541972b7b78dcdec76956d80b6c7b5a60a644ff0c37de0050a23c064a17da3de34389eda831eb9cf9d2bb84d02ad9bef1a9a27e953015011e8785a757df636385d00c29870623e05dba9090727e94914737815bb1867518b8d139aa5f1d4aa197fe48b2f48e8a8672392086ac2cfec4cee4cc8bffdd00d611a7f8d968eba417b0453ea61fc98b8dce8314a385410c5b74f6d96f6c4b3cc7b86fbce1bcc7458d315860392068d7ca6c07778774910ef0e34de6df42d9aedc74c0a1d806e27519ea4d0e840f81ecae77a2c27ddfb148dd1eb33ca82a2f46cc3aa4b09a9a231495c243073f9ffecd1809eb335681f0246911319c74ab9ee2a786ceb13495c6720fdb3a1736014e391e9d26b4f56d29943d06363d30e9d132e4cc407df7c579ffccd393291f81a424794a451ffde67aae3285cdbc29cc44022ddcbd39fdd9ce58d79ff679f116358c9e2f2f85f601b00929b9188c6a1d4ca46ca9e75e464097ab1809e6de9ef2778a8e109e04770f11c03604bd78ffe782c7c7b57a12f6cd5cabdc417779af0149f3d0169d101824aedf71c7cbbbc56905240a9086a58b43f27db04a1139ca9458da5657926ebff45819c1650bf233ea4f2c6ee7c1f1032e6b2a20989affa7a73d6fd46715d43af4bb4aafb1e687e32f7ba8b0b4e69f8c8e3844a9442bb836dff0db51b2701229df80d62b880331f7bfe0d6c3e0d3691d229b9fc2f466520b0d17d4520f2c152f9142f9a0d217688b4b3265020bb363890ffcd188643c40d08c70e1752c26585fa37025c007c6e2d23a085ee0bd7ce2bfdee47ffa71efbe75671590615bb1de4e0fde04c211cbedfdccb58ce3968b32d20092102e25f2c98960c042e5fb6770e9a5fa4e3d1409d950fc0a24d7b288150558c1e80db20066204f49e83fa0c3f63db0ba82e6ab1aa80d14a0abeee52b782dd4a692031ea74586d9ae98341647efbed00f91af40eb702383d1ddc413410078e9cbd4e771a9dd9186695da2d866e4a1f6140658e38e2ae68f6966c1eb87902622d880e7fe19deeaa7da3e10cdd1527a59d2bfdfbaeb82db08c8a058b763584658d03a6465e96f0453cdb0911ba937127b1ff31662c749e0f7337ffafc3d75c1cf830739718842c26f67d482a66c82066e47f24e2cf830cd71700a5b3e72e833b6b844cc8615e95538b4ba78c4187560bfa4407136f45b14b9b5da1eae334eaa89a6d73ddffd43fcedc83a5bf250e430a0d3014738a9029b1aca964d564499c192170d75568e18ff57c6294274934a6ffa9646d8456b8262bc3ec149afb0f14537a7ee2a6dd20d79800931947d5a062fe4206bf867dc70a126c08b70d7579d90336bc7cca3d18740820430229876c44f29a273e05f11b42b597583f7db0c0513a8912652ad423914279d0656dda3e229ff42f32d5e8a09ce58b45ef5c172aaa5f8a5c80f4afd47b96a512bb0e4fe6d1800895d00ab9e6cd49c2c62799d9be871a69398836c931aea3b7a440e1a6e2083976dbaa07a48dea0927454e93c700c8f91175de33578d1fcca890c00da54ba67549016eb15e9e70d8871d545d2476a9e26fc141b95195fac2df30afa2a6a6498195461ec1e66fe583089324ccfa9353756516d8e9dd877208d762a2b4a70bc9a279824479f411cab611cd7c3aa370247427bcba9235cf3b5bbf789282041191cc55e8c14dd0952296ebfa539c75658fa960802007f6c2c2011082e242509d749a3494989cb9860017d879fb57c00fb5936cbf549b8e5850b47642958aa9490110460e39130597960249bc707baae3a962208227af92ca3f5b32ea569b36d80bab98a41c88602a5c207af7d24d5a0da5a520bf03ad04d9ed1bad7bb969b0bc9e46d483b01c466a5cfe63c9fa9e6e8d85b80c564d12cea28c1b6137153124f63da2ef3fecbfedde6fc5aab88946f9ff8b9eb1160b72336cb1714cca8bb1203280d71cf44a0608c1530fa8d7864d7374da8466660d0ece51978f0fe1d6178cacb754267d846419914b1db5f30cc91192ff08b5ccee851d6dfbd94a65b20a3a3fe089e8dea4c48d8e4396833df5823d7ca80bf1f566a891d02417d362622457805ae9f2caf9a48bcddd9ac4af9b48d3c0b51e82e81155333fa6a7be82cdcf29dc0610dfce9573a43eb39e81cb4551efb300e455d1ca37f51e24eca62756ef2613f0cc87efb0c5ca736ea5c8ff66d3063b6f4ce39b06b3d8fc724193d002effc62aa2081ee6499459022041a1efc171d0e7aa9d1df802e1425682a4303ab7a600dbcad457af61ce597808acb8c08523d21a3ca84b3fe088b92eeb9ad351494b83cbb04fc3633a59441d0b00c91edab3229b4090b9ffe0dd0bdc8097a755685b37e1276d1f4682ebf6f52736994dab18ef033d430d8640c14ff67daf90afb5aedae6daef721914a3f44a245fbec95e517b9521286478d89ce65f4b49552f58c7b36a37d09dd14cc9bcfcdc7a511d2ce2c01b9378f6ca16e7aff1a9eead8b40b1a253bcc433a8c775f97990be114b72a83dc732eebc9c43a362320d4f9fcbc9f86173a0a0a6056e032b6b4d590f0dd127a11730e9c326a7d0e79d0dbd3ad407044344b7dc25b8e58565d83e9b1f02f01612a82222fe8b06b4c68d371bbf8c790f155826f6d78075e5e25c6d362a739d392e101e2cca3474a0188e0d38594397617a7cf3e1b7e332a1c5a250066d24a1541ea520247f8b7e59005b00ac544d48175d6e31201e7b688a0c76e25bee15cc14e317c76aca887379225bed243345cf1193d2b552b91e2a1097df032c0cdf5adcc783758811176e2c411b6f60bf40ac3fecad6ef6e59adb056f574eae8560a47855c64b816025733fa8b84d003f874c8e38493f4096d441fb126aa6afdeabed89643c000b7d159f1b71f122ba8bf2255139aaa2ba4f4ff3ef4589c29e3a4cbaa3071f14c4069b5af1a56c6db22b5d05996a127a306bdc362415c7fbe3fde5c230d6c4cb2f39a150b720d43763ebd46464b2fb1542d43220b9d19c7e6ac75f9c53d39c935b6028eb096aa100728eb58c4eeacadcef85fa47e4595ef33276fb79252421dc113ee2105be4c1883c4848d6caf1251abe10de565db1cd5c5c7a612c6c1b9c3d6b07c87ec95c2c99fd6881d691bced94dac6e19866695053025b00d840d614ab3b8a959bfd8585409e744633476e05e45aad46423a77a7fb95a6422acc94628f47f9dd5e82a6b0b004657859dbc5c0f6f5db269ef39bcfd38d1b99252d114daf710c3baaec1c127859ed5c65de7560341c518723ef8324fe2f3e72e12f5a985f0004e361b4f6a2082565a447a3b967f5190fe6ec6cba1cbebecea735e281c4f6662a93a8db661dec4df154fe6f6e9fd3ec4fe6affd104c7d8cf08ff912822aa1ed692d506e4c4e8f0dd0885d875917228e617f456c074569fe89c884efadece59d957af3ef396ba81b2dd7967a55d55ccb6bf9e889d65147e631c158df1131d1c32944342fea84757c05199403de96136550eda9e3c86b7d0dda51c7043d928f574ba47768f7f9a538a3b9d5a06b0af8b19e40a8b486190a305c72d732cb2cb709759cab9488048837c10de1afccf2fe3b396a10772907dc4deb0a44c443f96fe2fc9c3e16a283fd2ca0efe31876b680ed1563f839da85766235548f7f96c19f0daf0d1a91ac78d15bf88624398410e741f90b011581dbf9c03e1cde9357987fdf707bffe85f18ae9ada1bed9236cef96b43b3f9d927bf234f2509c907a7613275545cfa34b137a95544f90d09c8d437fc33ae1d3a7be480d898a35517895b42f31b66224bf5147f59eb0fc0652d7c97287cf5b413daa19d421ab68ff84220d098563925e29748dfce9ed19449b5ce4e11bd225fffbccbec9d17f6952aca05c2f1a1884ac5c7715a691c9023af8049420f172ec1fa06607e269513281f0a4d8a3a651a434e5ea38c8a5148c558004037984988683059875981e590c7cae4da5bc0c0a446aa9768788b0811b3a4c8d5d2900b11943592c16b84d11c5034f80880043f9683fb2dd54bfe68fac47044a3da53bb3bfc0abcc2ed140726f6b1ee5ec12411984d62f1a1b123c48e251251345279ab53ca2036210669cef873fc46ea88f15de0b6f44a870864077e93c4a7cb21fa24424a52b82f69fb8d022d355daa7bdf8760e323deb24672aacddf3e137efe08fc896c4f04c353e76961328576e6757b37737429407bd230fe75e7308d53036650f563b0353b70754df2324df8257bd27a681e40edd0d374c3343132672d3037c5554fc855e7c8be43190e2308dfbad5003fca7c51212f59040262bc185c6440e5bc44aa875cf79d52f91d370fb8e39ef89ee12d95f387d25a231dd18d1544bbf44c6c372f35d45a8c490d09e7eaa85b7dbbdee59685f43e3a7549fcd236971f05d8aa30e5272c7671cd410ba968a8aeaa8c06a66ad136f1e34764210922e6943cba7992d946bb559527962737f0af745adba0b1d3fe9e11c1f05fd641414430e74c206faa4a781117b3b1cebd8fd5fc289fe0e239a874e1be41218cb1a350fa02ac2226423c3467f861340de1ab0c3331bc984007d7c3502b9d948a37c029a1b2ed6c8c142cd6b89d9c8f1159f874cef0b129aeb1bf9711420ee37a1373233ec1bfe89d945d137b235ccac63a0a4902fa6ea53a36a5b9a1baea2e590a83c1e46bc0e4c5aa6e9796eb01c0f54960f8cc9381c98f63ff2c9dea32fababe200b81796ff332cbfc44a9b51da43612732ff8dca165275d1e416e87c02909fe9a46412f8fc5f9ebebf49dcbda83dec6c4b91f900ee29d5b2215c0fa4965d94e4d38cb65f4af7ad4e5e750c43f0f0ee60d43c55b13ef84f11464170f026732dc472608ce35f3044dcbfb2c0f2e6b1790bcb70e4801785e99b70c2db915accd8d29afa2a6cc2b0f4d16631441516feba5a2c86c67f4adacbdbd2e896bbad88fc4979aaab9428db5c815dcc23a26c5fdee199c01c072009f82cd53b7be2fbd535b282e6e32f0a4c8a59f1daef726b932599bdad83ba1f355b87e99e0976b7ef619f42c35486f66ac04d06ab858368d3300dcb6dad4e4e5540569d234c01b0955328a0ac82a5af53e36606566e2a5e63f208cca9517057c9bcfd635515023e8fda18d34ccad7a21f9587ab13c220ac5cd1d38066aae819405781dfb01913b85c4c30cb8c81327060babb40a0ad6698eb35d075b934c741ad3c68b71b227ab14896eab8ad102800c502f5a9e58a78a350fa1d7cd4701178a689009b7b12c1ed296d9647483d73f6092d8a8ee2d61a306a6e5792bacb433a34a7c4c1dc2b22d5c98c70fd236e87a34e4b5f0432e16ddaf41f1307971228a60f71099fa46e57f6c352824d19138a7d40d6ef16257763426e48d5491f63a5d36d0f9fee4a2e739e7b5b81ed75e8885c79861494c06d3c79ae18e7a4096b45caa15b32891a1e5383daab94cec53eb6f169669936f2ac5f804bcd45be4785cad35f7ef6160ef88dc1ab2f78f41498ef25e3b3f152026adafaf04e24eaef33ad2fed7040285e7e0f2b95afe1704ce42cedae994600688f116ebb1db249637ec253c77460635ffcc92a58b7b891946e226771d7ae9136afc488f32c726b3d54d41fda9246d721e9392974b70ec059c4ea0a5ac4d667b1f2d0b4e890e633324122bdc9060d2c5b07de19bad64b33cfd12b0046db75a2e7d740515dd379dcf4c4227cf08fce9534699d6040d2421815750276c45dcf3824ead96e1feebed44ba33bab6e128f646664d6a2a5372ca30335d92574118f24d2bc326335e6091801c576d12cd04651b303cdcdf151c63fabde6d76985b3c12e28a38f895e77d4c34c1a20393e484ee0996864ec8d4d1de929096abeb5bada5590195cf98e5ec412ea9bbe92ee373609d372b30cf64a8042bf440ff471eb853e68e859c427f5c93f03b94c7ac81d8249a9e6a95f364e782ffba1e58575c1fd21b7a413141c1dcb5ce5fddf164522dfa36a9806fd03fbb7acb6103feb898a5234be00e0cde7cf4ca8e06b1c8a2a7558073f42761601e54214d30e2bd07d907d487483a5547f292232584061d03f2daccaec5f443d3646cf61364b227ab9d192abe4b18d8abc43017fb007f6acf25974f2b846b4d9df2d20c4b190e5bd38b9beb1d427bbc18d3da64069dd79d759c9018a9554a7e5ba903812a878d11d3eab211f016cb3a76750364b887825eb8a03fce92f8ddc2eee82f77d5c67a7f7291d9710b98bb6319844679fc3e3b7894d918c50ee52c63a7ce00309e3e553d4a5376cd1762cdae01848b0d33a26f92de9212c58f8c52747b87067547b18ecb30342e5d010bf8febd029bdc9a1823b5913a515deef22a954ad2c2fc5b098c5ebc3e521bba7c89cdd9aa36e899338b2ef67238eefa4cdcc358dcd5d257a4f77f7508cceae42aa82b39ec949c441b9c24d5b990821ebe574f6d3023a8325c7f1feabbaba6fa64481ba31dc0068676840f5f957df2b564e73235e5ae9b1fd0aedad851ab552f5fdb5b5d23e9de1934105900c37332a998454647e344c8bb0137ec4d492c29d34ec243fb2a85ce037e534128f84bf4641139ae72995c216c0d22700a37a09002572e814430aacd00b04f23d7a8c777212ffc305bdc0524692598a2fb42fa9eaa91e07e8f051409f0f27ac3138b6a7dbe066a48348161f484464b4ee99084f17a3fb81c403fd3c137ea946e4f8bfce393da9c84995546da90b369aa573a0207c5f01ca703ebd3f212cd807a79bb66d5bf96ec623247c450b70178f71a72b0004b4bd00a744f9b685ac783d8b4a4ef4a56ed12fe091015fce34cd11cfc7c00ac82228799e7506a6e9bf5523988bb3901d5dc36915ddb4b50ef27a924e4fb489495dea26c90c1c5b5bec30351872ce64ab8b9a7128fcc9f284b1a8d40552d83feeee6229d2e872f9af46833ebf13062bd7a4d955e0da660c7833c110a6c50743fb813e4d39dc0524f9e6fbd90124c7d7c7f7586667e4b0c288ae492c00cdfbae4d4bf01ecb4cab147f21b8848225d9900a2562403a00e003bc75e2bb914004a204e5ee0ca03003e55705b4233c913e880fb0a6bb4b8cffa2ddebfacd94655d843c8338aa12676ac2d78bbfc8f9fcca97b8378d47c125edf352d661cf9ce62362549919edd614f37be8494ef4394d197452673ddc4e3f944f1195d1dd55bea924f3b0f7dba834ed87b53cf80bcfbbfd74847efb3f272e89f04fba3d21ccc24c7c61877cc4539c3d163c9925b39daa122262d6be5e3cccdc743b59ca4e9fa1e938c3105222f8a12570b535ccc42b6b0d2793e7323d4f3154614a84ba170c8df273d0a712cda27106d8e5771715a7186e3be9ef366c64f2b555e4f3e0a821addae7b2078c7c062ba66337ae92d145acdf8dfe6c9b13844592e4b6e4915c3c7f1ed183804757550d31a26f899c90669b5b543f5ec52df6af60c883bbe585d347a74c3e292f91f724cf42e8367105f0250553a3a3d534b7f8500f9136f4368a553b9003cd7f1f9bc02262c43289f315a9ac129ccb76d501c927d07d5dd4984517cc2b2cbb717133f3579e1487816dff08c6c7abab02072269316fb5dfdefdebcf7d2abb4de34f9f78b53955399422f4a5415ffad2bf45145bfd44881bb44e8552551d483c63d64ecb7b62e2958f02a6d01b3c314a8bd8fbeb2adb3b6f905610b13467c5af4fef39f68a6498bf01401263f47957219693089e583deb9e1e03b3c76dc6b3e2aa2e933d5f4a6ead7eff36dd421d34b2efd8e894fcab48a287c5c02e83b06b4a010732d0b2a832aec41382e7eda441b6e955ae2226afbc3c80af19b9053a3cbd0a1ca3b57f7b4f8a6ea73c84424e872099f8f00a286b31a1a3e822446a7f60b2fd1559a6dfe985c8c930bfc17c3b6f6e78795c951fb894a1ffa4740e43acfd0ea2768916694acefbe5584a493845adafd84b6fa564e209ecfcbea332c64139250cfffc60bfbe9d25a6eb07ff7cdd0432fedba7fcda93e977513e1a3f726aec1908a718d7a84d512da084232306fba18a5a2e98f9cabe1ab28dc124160abeb028fc4989eb1a65b0b0387ad7185454fd486ab495b081562d3ce7d064cedcb000411fd1a8c77c89e710991580e02e345725d819d4c96842ac396c61f156a5e90b9c40ba8531facd2ce27d89daf65acd0004d9eba6e7c6a489d8fcb86d265e36574c7fc48c57428c834566a59f95321d3b5ad6371c2f7d037342aa1e8fd8201a551c7c9043e13e8430816c9c9985bf039f57146eeaa9578e50d0ae04d1097e75dd09192004a4807920e282b01914490172c0c7351ec56505b701181ed4af07501a35b78e5934de219f4c0e906f375af437609075cdef0d4abb48be6453f6a5bdac576d5c516886e7db711d0ce8a6d5167d7f0e5916275ec73000ec0eef284ccbe5152a53d14232e2c9ac10dc95ac18d2b4fb18e5a98917e2352472d8e971c52c5af04adf59bc18aaf8d3584bc1580a48af49387320e9e1bd1cefa0d3d610b58c5a116843f8960f45e68df044fcea5cd3bf514c67a3d2b1ae5b747d2af743061e5a0d53d3b92a19d5c3473eb77045dd4ad8ad6ef4f752ef82ee46252b6d1c9b7ff7eebf712d5037bf0491a615ba3bf28089fa2cadce41d933ed32c1d26e030ebf7b752a882d8ae158f642ea254c8fa7d5aabb73d3f20a107acdfb3445626b0b38b5f86a3c0dd46f570149cc7b951990470e24a677db4185d2f804632a12512e51e5d2740da23c7c2c12d04c025af3e9122d0999bfe58e4f6bd9a8096fdd4fbaba00e60ca1e5389b2b36639bd924399bfcffdae99b0e4cab314e633800eee1542d5fc356d81ba9f383e12eab887bebe3593fa141a37156ab65a6cbde065cce4782634b51e99413d913809626d19e3227a7485714ffb0e2209c67caf9b2cc201e5c334a7ca5e61dca7c2a227cc8cb517106a2970c8d4ac1534b1ea1652cef4c80d90cbbf3ac96f6f8a3d7a22f736174da165e50b06fea84eb23cd708d7a8f48e7c8663eece6e7544636d8b468f1cd5d9aeafd8c68aee9136813663468f4d082776be8a36ffbb6a2aef8ce74be0ab7864f8c123d661218d628580ef73c00a981ed86af5ff2694ea30c2bef6fac3374af43c29b169cb6575b188732f478366e8da160a580408d5684d84d8c96c1f0ad44ccd2b799381850ef8fbbbe7c097e8deef791c0f34611ad34222e18fc03d3049fdb78bdc531edc683619a2fdb94355c8237a9d2d8e984bda6912acfe8df4a2b0948867011c52aaf1002270a87847d5ac4f30caae0c57061027330451694bd794708568af66d22ed6c3b8b2347a694c8160a6e1b1f97b9abf3edde1acedd20ca363e38c1be574dfcc7e2e02a411c9aab8313bc8d5e63fa845a04b831f0acd1f49f023bd4814f010b6c1b6a71b5e8e6e8eab37c5f5f78143a0c37e29d18e26dc5afc9c9cdaa1fe348aee7071788775f7ed33ad80a564897000682a30747a235af26fcf5bfa7b0c710ad4114aae4ef9cb449544e5574b5237cc08ae2ff59b144a69ab1452d1195f73b402e6229e0dc7fcb47ec9a8c2ec487120a6974ad96f02a20ab6ce769dd0cf8dc49801467c9c66951f85d132b9dd40fc6b6bae228c16c8a16ec64f4a720e5c14b48478f5efe7bfc07213c3f27778d597b45db444762e932e04b0582be2c7a91fe54bd320431ed9e1d91bd80bfa1a02bf2abeb6d5f94df77dc58556d00a1d2038f47f30f2d7384007467bfe011afaab25dd04f5fd09a73f2dfb2dbf473500dab6629501e77f05ffba859e6af9ad55810da3eb1c78b9ef60d5f180c758f7239f1ec83d2d2a05e67f512d5e37a301c31ea8a32ce0220689962c2e013dda4809aae44d95d7b2a440329cc4b6593827b41ec51c4121be0b2b27af294ec89de871b221355000d70ac012add0512ecc6cee89d5f86d27dc3247a3761da6b33c54b4c342675b56fc98b5b69656c918522923d89802c0bf4771ac9f762ffe59de9d7131cfaf839d8ad6193091180a2ac6e3df507b89c18ad0b6f655180de4cd106f45c58f37546a23388c4b832365ec025123136815351411ff0d89f1e60da5c5b55afa081119b4a218b8bfae3bfb5b0be93c14302b27bfdcf70472a486fc4bd6051dc4edfacb9a507092441c2fcc9a159e5fbe32041076117796dd4c43ba25e4c1aede2912380bb59d2d074b655a239975d500be74a307a3352a8f4eaf82dd6a8a5dee3f6e592312e36542285db24692bccdc0ee900818c410be8292190caa30f2e2ed8c1d5f02ebbd43af907bc3a4b3518b252f3198bec12f2c534d9599102ac3cf7145d3b28b1ccefe1831efc1dafedb135d847ede691bef2e89215ef6aec1391b517da77b533ebeca77f4df20501217ac5a5f581bfe5a668829f704cc6c11435950dbd42c64f69b5380b13277e1a0fff9a99a178b3dd474634ebc4a7e0d6707024f4a4dca2ccd3981d23f8e3d9ca843509230ee6f95057003215c623054a4c5a64b5d09734312440b3217975774bd0f3f84810e00cf85adc9fc780a3918ba0faf008f2d7a75fa30ee882b9c5c94035b156d820716eacb727b3c0f69b57ff7d7625578723ec95ec1ec13da0c7a6a9eeb41a022ec459c1f1d3af204409eada10eed38d519e8bc9c23627dfe453c9a05ffb7ed083a0973e44260efe81498f9ffc28e599bc5c926ceea864f3622dacf024dae74ecd71060833cc62848d124def4bfb25ae64ae82d43990285afff9d8cd861614d8b319fc23b1368242807287d01ef74a611eb88126cf0f316af17e7d8940e6006eadf8c7246b995dcbb3b85bf3b1dd2ac504a8c2a84f6f847609050a2f497eeac11a7f7d8018dbb525d42461d6dc4b7d88b6f70be59e8b5cd10675db9e7732cc78587c771d7ed7ef25df0a7d11e5eebc791e9d87ab2dee4af2f9cb83461e937cf4573b61239c9e9f5ca6ba08bc65864742d18e2255a537933ecf3cdf0fa2a405f840c366ef1c88a0efc7f3883dfe1c9885f00a2913f244798c538ec6be6fc08e6421c815ec61970f11c996671067ffa00d766c5adbda5000164a24414febaa199dade5676fc4e9eed312b8fa4010e3a3cf16772804b7aa420aa20c438b43b9b63b60056e1b79a65e3317206d6d5f59159b4571a54fc617c0670b03e669befe00a49f75f7a60a1908947e58fb48e96079a3a730c9441fed52c86f46831817898366faf9f40ad0becddb38dc95ec3df89a444846031c901d79826bfd2d05c8ba7b7cd4dcb3977ea912f0cace937db936148e93f323b1c04ca707bab531aeed008b7411c667a87c6358d2d666718375ce7a43db73358ddfe0f0d84cf1b21a4ee5f8107f805dbbf65fc9b4c2048af1526adde2abfbe165a9987d248aa5dd3a03413bc45954394b24405361357cc5b2235fab8d1a578ee9a4824110651395266b64a7f5e594fccd080e8ce1d1558364a45e085287282f489538a5d7ac856788a2323802bc0470034984b7cb3ce31cf1b02962c2e4b023ae3674e170f3cdbeeb6efe5012b145124b35f531f2f61a32cc88aba26958b8f23f91cd01ad0672b784b7a68971438d72190ee3cf191ef4cfde32ed80e83073ff4ba2d7245c442179c2e1d6c88e8a4069c53af3c392b73bb81e575d48510936cf26df14a2aafb651e3e238055e605ccecda1ae29dbb5050031259656d462aa2d11b8277f97612e302ba08c5abf348b181dd7d55cf768901a2f9eeba1bd2b8e8b1aa9ee085f45b18ce21dc640cbda147492f62c8f5077840de7a43032d93da7ecbb2d68120f420c50bafd886099e8fa21eb21a1d73cc376dcb75cd9ce81a7846b0a9e9b4a269b1103c38ee91af47f818014e915f5bd78959582d8af04fcdf60e0c5326503e1a6f18b9da49688e1a6cf9e701149e4a1d14e70eb095521bc0e78126e8f9b593f5e02f38290d2242811ff27a18aa44b1860954d3cb9a8da629c119f719c009d414bf45a708829ebab03f7b48feffc1432acf4017717996aaefb26383681257f426c11ba4c40b695f17d96947ebf9790dbcef4070b42f690ae6a151322a8ae053293d069862b132f29065d548c5f509641d3aac94e70336c01a5bb89ca713759888ea2d0ebd4d12e45b222636a714811af741cb991c5b689a7078cddaf8a2c7bcdc36cee7b6266ac0253e665e0d1e389d67c5e480ca90fb8612e90aae2fefeada70dd11717808369e6ff1fa9f0fc6a3284033e29374d15eb5f43e9b50608ffc804e83d015ab489673a80ab92004b5178cfe66e85d7552c13e8a4d38499113c60b1ece68a165ac6342d6ec266a7e851562babde7c0a7a0604c6fae89199bc7aafa42e007dd3e536832b35d8906a46215d32e932279647e985ae14d6d442c72c3f0847960efce3b552928f4c076cefcf35028b1b5c318afd5be7c2e398d60cdbaee7f945b8a77df30204e9af0c19fcea6aefe118a9738322709046b18742880442e0b118884643c26d9763f3fbcbb1b946be0cb34bb9250f09e857542983a20f8b6622b4f9831c9ab823141908f21a7f1a1a1df6d0825014f77aac06c340aa31c1cda0274da06565988c6a5adde81b1ad40067ccf4f536de9ae9bdadb2acc59b8bb07505419d76629a2ddd27b30d496bf7342ae1aa4a7342eba6a57a84093b3d37806c96c92e1b8ebb95a3b1f3181b6e8b4a60739a690b91019c8d11ae0dc636761cbbe3c02da7c1d49b38d69c5cb29ba6d0b9f2f0192a74207cb61ef90c99bede2803af56b097bc48bf61c0941c9bae0feabb274eaa08f2ca68228348f575bebc87c24147d01e4279a33bdc7b08751bdd71236449e00dfed4547a392c6ca30f99329fb5d8a2559731465cc8917800928e0d782335c5be2ec9d72bb35454035ef861d3600cf3159ccab80abcf48dae18efb03b2d87c38682acc632eb081dd09d53427fd3ba7af596387e8f7b016a251b38027df2de7fd39d995cef6cb0fa70b9e3f26dba1637ee567e6867f30f0cc5457573123ecf3542b5d47600c28c5a978c75d36619f8fe0d3583c4c40a664a197004a5152781cda53a039992dcc3ae5e077b1abb1e0409528de144a713210eee9b80755609d33929a4706594c55fb8f87311e384217eedaa988b963ae852e0dd59f1ce294f514cbb1106ee7587f32e0fdc7c28aff8e526cf451256fc1b28ab4f45f5cf0c34b40b5436c505df8a7087a0a1291a2d912f9561cb499d98c77f280b7ddf2b67ee9d98295630cc1335a9b3999f8ac26bbdcd07cf7d628e53b5208bfb9766639baa584d830734441e85cd9e9f98ab8b3af0cb1bd33bc5153795c3194ea7c687036d0810f9997787983a83df2f70a692c687161c4ae76f96a0746edfeef0be18d3f12f4061709e4858f4007dd5b23939ef8d2aed07c4d66a7e239e1e2622b9ae3ef87d9e33be215a87c9a255e0db39ccf1b303366a02ceaf460ccf032b3b3c8c2b4f47211455ac801001cf19c4aaaa212c6035b97b6cc5b878b3781022be20479d7ff1efdf4da9774c0e1bdd206b5a022110d900bb96867e1c602f6c8a4ec7118652636b38a1096250c589234c5e259ba4ddafe7b6b736c5296079926984e136fa67d453bec663dc45055ff0e0a71386c800fc2ded67bc0c07022ca62d042b8d7dea47bf4f91b886b7afea97337f99ef62696bb3d84c52783b22612106f875645f252a0e421be31c802209f5fc9a07bda229201c9fa7f408ee27185c06983d48f2ce074c02cf83d54872b9bce635279a0e30eaaaabd91ed01430265ac5d9c6b53577c156fcc05d87599ff021f1e5daea7a876ff0d9c4795adcbb5c5cfcc6da45156ea851f85e3e4395017b504c37decbd33cbf4f7316a4c853930028eeeee586fc6649a62ef9ede9c40fb9175c34a0c704f4cbc153d3d0a8c8a11ef7f5e4bb3f3b15c0384b3dd02b7d9911e0c1e67ac45682893db1f78232452ea52d13ca880213cc48553a9081686ee15abfe6719f9548a3cd60e8a9a5d3b2c29c3aa89d763779a379563aef84ba8b710f0ab4a28303675bfa3ff1923190616449e29cdd921042768745dc32b49199b3a10327854454f3c33917c878c71fe012b758c511f9fba3b8793304ca782cc7351f6d4ca11fd5c66551e00e21f44218894c8f59f57588ac4d4512880accdee573e339ffdb266e69f0dcc81f6d565c8db7c09c0b363a612fcf1391b4b08355622bfd9d6cc4551454005ac6ce156386005af6c5ee7f9583a11c83ae4838ccd0e4b4e6b550a3998ba9959372b05d1f412acab12772b44015b82820c2fe369c90c83c094e7c5525c3c8a8bd8f00afba540a125b9b921499301ab8a1da82ebb3a583e5c10a9c24e9d6462753471e6120894e1ed8dc071f6a57a8487df849e6b9e5e0d86a150ca25fa264ae77f008083f14d97563b58b3c74b379cf84570560e2a0eadfd599420061ac816e55c7094c7d3c2c2db8e613858cea7455523f6f144379d131da187b13e5c9dfbefea40119dce856c6d378ece3b94ca09776d09d9bd037c7680bbdc7995368c65127d98b1bfbe8fe2f79a0ea71968a609eef1153663347cc988714780cac7e598a251df72074b74aecb967a84ff5ccabb829bf4ef5feee8ef008e091d37332d692c4a6c2e7d8da2c2e810efd4e1eb25415606448b5cec2d48c4c91c7a04806c7065f14535282fe0251213a5d362063320d2ec04629c76200e4c3d3901b9060f75cb1de9c313d5b65a31bd5ae1e72c787c426ea45451f9af0e1c2dcfd2da9d52fc7e4d5c5c7927f9b6db77f94a5d16ff62f8a75e6e33570e9258acede2db630b7475e34a55446e18a8256e9d8a821a7ffc936e238f1dc633694fb97944183df492f85dd9d1343e5be7ad57807c512b7ad0e4da463d56ee807072d56dda42352b136a95fd7d4874debb844b2d1cd408318805ac7d42d4415df7ff15750d5607391d019be58d0a2a47fbaa1a47b0831a9092f7127834127cd5c55c013c680f37526c1830138d1901528006e736c7ef4a480dba410a73eb53be20a9c4f6a5f0142ec2a034d87866f0de5daca3ef341848400247090eaefcaaa5d8c9c64bab92e00a1d4146f5147739515964f1e3699440505457b0d01e163933f1858b9ba6a92a88b430ef789aa20865e817df84b8ef978f4cbc25e6215c8506e1f53ac98e473f7dfc7c1e01f5921e3eda301781d61f71fc3f6b5ddfe0e1fe1e4d9cc26c8d5e3ac90428fbf98e57387dceebff3a33b612197c2d2b8324ca6f9aeb9ff008934bbc201a15fdf691824c9b62a30929b40dfd13351d0a6a93e799a1212fd804aa463d444d88764d8ed25a9bb3f8a8ca48dda504e26b7bf43a962157c677700c27c7ae74394771f40b221a7ffd64d4857bd92ea0b6ca744b17b2fbec2265cd46c7884ebfa550eaa25373b82b5b629e8b7e8f9db4698a82b0bdb654d4c267b6e007f627c649b7be78181b9b51a689cdbf920e9c391924cdb93d0eb4480a3f2683421883f668f413e14157df545e9728280c61fd0097abd7852ecc8e8dd6153b44099ef9ce493b0e516782fa580a000e033b48402e76db18b126fca76fb49c6d63260827f6857e906caf6635b9b7d3220ea2110573146c27bf21032fb943a35a00b8464d858976cbddf247bbe344937681981066e0479fa3b2192a65fe16d50d263be811c2d745b62072ce47612cd8265097d680000d436f848419e785f335df4f6aec2024bc210158bc89bb1c7c75b1144120805af61b924dcd29b52a8809dfb406a958909deb42c8474e6e18828e1c2a2a1041c97030e777335ddef70c3638f153ffd85be9fd410aa0eb45dd3adb55fd89225fb65005abe04600bb40957b6b2626b248435e06223e1871b09658eab142073e5e4177024dc7711de6d58d07dc765b4eac292bfb973656cd5e989b28f644848c822e0f91d1db19a366e9f6096055df5138c7cfe0473d4b85b144231d48e9f9d192440138d87019320bb56d254b09d60545f2745a237836d0810231449f83e49d86e8c69f036cd0798f1224674a7e8beb24077caaab0a7ec7b09cbfe0e8d4202a48c1b358aa742367636912ec7e518bb348a3157de513c4dce92bb0d4e4b9fc44c7075408210d795f247aeee62f36f76993e03b98cc86d1f081deb4a1fe6159c83bf67aede4f62af30b194e0a3109a985c1e7df1a0af0915e6959ff8a3a236cb00c6cef51f848373467e74b812095f5e4778eae3dc8750e58b8e79c26dc0414a76981c1b552acabcec62406358edc1abbe08d48e941227625d04dc75a75de8a50367881a1741c18a33a73e181110761fe3d489dd93e14ab2bd0848901d8d963c9d5d046bc1961dfe7c98605a67ae0ac183d3ead6df969048017b0f0d0128caf4d49d12a5d44a9ca5c8e75c9e03a02542afae221074ad1ac3b27420a95f8829124e84ea1258cfa54bcc80f5550a5d11e4f88649a2493e11487b1124c0a671b0d0008d8a40746c6cafac08c2f7d892937e675ff6ee6d2f16ed60e63e97248d600328a48a2e74d7b6a23ee046d00528fc3737e0743ec4b903bd59a711286e1529d9d5b7586f0a86482691c71e9da953bdee221781dca91e8f6575824dc6165b4e1b243bc911681ae8fd258e24c8f5ad8d205fb76389dccb9ef58214336ad21b2abd448a3fc9e7df7f3982e18b3c38dee2cf568ed611ea0101f2235eda2e1023747d77b466a7ab916644fe2e1e5f5d6626fdffe2956a2b793677c39b34d8134dc82eb78c6c55fbafad703449fa0361bebab3a9c3647c9c593bb70be147287a6032da34f858304ac551e44d54ca2bec1e2c88cd7c9c72f7de3ecd5a81a3bd9112f74f8b72746e84f03853386d7d8a7312cd221759bc23685dc1842eacc7a535dddb26ef6277849c744037a92e8bd1b207656e0d3646e44f0b5473b5d91f9331c5fb74f481daa46ed9c6d73aed8da674c032bebcf48230bb36bb91b280c6a47e7623caa41f743335d9192397f67b7a7a0465e2ceecc6d526c53b2677c7724cfeb441335b038b71b283ca643df6e3e5a40b023335588f27371df0ce95c131f40fad7e07dd369972134af11a6286758700cfecca114fea18b02432f85c26b6a7130cd91dc167093ad4cb9642468af7bacbb806622ec48bd39e23a840c08f3887d173275c99c67e0419a9f6e2d011077d55b0b130d76a61874b29b50c5672b91c1387882501858f3e894cdc62b49f0f3913820186a96234044f287f790aa6feb99f24c767df8213c677c4d12a81bf87cb52f293d877720a1307ac7ce8e07427ecccac77e334274e5af9f0ed544fdccfbcf7d8294e3c20132c2ca889e4a06c9ef50bf9116fe9d125c079f269e7175f147f40457af390f84a6672ea8531bb6dbe91f6d7bddb798aba5ca6cfddb39bb173baafc6675645d8aabf9405db5f86aa77640cf0f73314ee56a17842a5dc6790abc6ce1bb8f70f0d78a23cfc27cf1429846599590b51cb4e3f74b515c0c8c94e35483ccc9928341bfc784b830a468f587b1eb7c753fc2b260add8c750aaf43148ec5be1574394903b24a401466116388ea7ec2a3207e1ec2ffb3eec315785341e445d7ee7264b4a5fe933698e0b7437cc9e2843bc809430272ab865ac06536286424b4119e7fc24036bb08cee552a86e76153919448aff294e449f8c4e42857b7a4136aebaabb73cd2fea74174c9bb78308231b1fab2a525bdbb7aaea99604b0a38433b797bc9dd8a0736062844dc9e356945cb74a2f934bf7b0c8a0a4bca5e6462ff42611f0fac76a351079897fa6cbcbd96e8cd1963449bd0107351fc70908743364972537aadd97a3f1b72fb3ccabcb4fa3345b29b848a44458baa8c9c0b84c0e11074e6deeb4f0af8ed0336782cfa4714f1de4ab00be6687a7543b834c3e3899882200a7056cf38001b37d1c2876690db767a6e6f2536fc4f6392b2427529731315a2067c3cced7d10fa4890a142d88cc6a58d7aa9a557821c8d735dad2f768587d6e6060e9494468ba41eaa08acadf676835acbc282cc9b67d351822c3f1537173dd6d5c1648a165bc979a1b550210eb7e0655a473867ae7e44a2b74493624156393bf0ae55235211ff0ca3aab46e4e947121cef157b8cca1882d489672101e27181a5e19c43ef58af129a90b24631878c0d27bb699971d224c7eca42b4a69d49953dbc4d6549c9343d5c9afb33b8fef79142a5b7b189ee49aafc68f23d13ba0c5801268452e879c7576a5dd5387338884c90ef2c000469203560a69f74acec12a2226ac841da5c2e8f86eb600e1d8417e791f47f12c1f9768522a03722a7a3a650306a9d40b703464ed9845e5b0d08203876182f75c4ad55a5a16f44d19dc2751799c32f11e8d82b52fcd468ad7743035cffd4d9a34ffede96fa3f1a0f5908651dcd387a98dd7be66284986d668212b1d7f28ef5b4d79ab63df1415e634a03dc1d7b00601f1d9d5263e8ef85dae748aef12843a0445bc3be4a96b7be2a31b4b80518d9e64d2e4a72665b6377cda65c325c5e3e95dd306e9723848ea8c9f0f363b134c5d91f3eb759ec7d784f11362d3dbbd268ddd92cc847f005302b98e34a24e46a4190c9acfac255f2252981396991ac6a92247e7798f03f133814ed7b28d0dacc3a4308e8d153fb4eeb64eed8ec29fdd04e343eec67f724187228a5b58ad35a6138391af9b89d45f3be6d07b597dbca62400c9efa412c8b9c894e5357546ee225190c8423f83100528108c3be9e4717e5a718b7a54c7ed754aedb989ae6e55e8d569d60d13e68b4ba2e04f45c4fcd030c3ac9c4ef5d317c8d39b40b52a755c3a587eae1b0088f5dbf5343ed35e8471985c3f72c8f4e5214a6f9f04d0dc1f9fbbe2abd9da37b871495f4320aaa4d1a5e984ebe160c88b01bbaa0a1b7430dbc7fed94a3721ea185957ba01069a301944b3a6d75a206e0885a5ef2cfd188ef331d75debecd70582d49804a9a2d68f1b7e2892ff043db06e6a9596a23901624e5d6227c5035bfd6b27dfd19d70a1dea54da985b8f717e9251430d70fdc4b4d728f3439e0745f8b8714f2a155def8f4130f399e4425a7de2f4188aeea2300be3511a9a6ecda8a7840690ab7640c1a6129b9f10cf187cc181fe98d9b1c189015a7594d99407a1f20920d2029a813b312af34707c7cb3b68fd9450f51c6dfef2772a6dd6c553160cecce7249f05d34245f27832921cca22b74aa5e49bca657ad3a43a7d4dd107cc5676acb828e770730389f068f3f95d18dd886a84723d7a92f4f3031679aa94d0249ae6dcd61671d3feec8a5355cf43988e0a7323850122afe53b951b1a3148d2b6900f8ce791d90bb1c2b2f331a5ab3900a1a2066dbfd98b76182f249ae953bad07af9eb1bcfd023d4c41609df1a787d2459dacd6c86aea4e4e5f5b7d8de2a1f8ebfd491e3a46427060aa4590ae0d174314445fe42a924147622f6af29fa850c92aecec45118f151b03b35b4a11e86547effc22f616aa2c81ef294c6f9cf8de1a05dcaa4689359d89df67cf299a0e29a3334da2ad1238cd7926cecef6fa6268260c2f40e5e5478d7a69ccf2f95b72b63e1e500734b6125f482b51be1941cb1ee199e0f586133f9ae0240fa0c87e167bc5c7341dadacf4094a0969c928bd454ac5c45b53f9f330631ca2e46153530c924305b012dd48c0a72957b11d962901d259f1a9d77f9529fab0298a5fdbef7d2905371e7b6cd73352c2fd52f399ae8d2adf27edcedbb5e940fbf983f67785cf4a687f0520fef66f70a56268efe4576ce79229379dfdffbfcf6aab8de70d5209863631e2c29c244d4ddc505f2b640b84df9f37d2ec56942bf667a75e01e900bd1eea7058157bf7168bd36a87d53e120f30fd8832a0f80f33c44850238358023885831683c50d1cf108108f3882a54f324542ae6ed75cb53f83a221a8b0677e9d3393c2a1afd8353b44b0be1e4ed0126a6a800a4b50eb90a0aaa13e2489b52d7af7074b6297e0e1073a8e6836379788e562948f28129e824efa9a8021b002bd3b008efa14f49fb88e61c77dc4c1592167b9ed03adccd990da83f2a90edfe62ffaf487e54178fe972eb2e3c8180c9433f2310d535c59c9b162684a8903593693b5db0805e31d8c404fe95aba8b9afc0f1e43816d575f55ff6cbf6ccca780bdc95cc41b8c802401359abb3ccaf4575df3d32903e90a022e848a5cc3837f73cc2717e7c042c071625617fefcdcbc3cf3d60f0d4b902b1a7113f57b111fd529f59c7f1ebc7cd1a98727c451a210207953ab980d11a56be30346c823d2c78105aa4b0c1041acfbbfade8bf161d12c24e6ecf2a5e0f21ab11c4fe40221ddcedfce2b06e640bb40ef9a7ade683cfa49fe81119d9b99222a8571782441cd39530df973d62e5a036943b36fb69364f3ff6161d331f9e8e2006d7187321f41360507918ee2e97120272c7755c90cbab494abe4bb082e884237cb047c37f0cdc8e6493c4ffe5c40be36ea85371d9a33ac674ff38cfc81105adca0a15888bc73d7d0ff0e198018615b3e97e97fbab730bf7f2f848c4a142aa0924602a59aae8c19ab76b5478abe16fe71b6ad74e9903fa8885092507187b991e2eef103e1efc0d102f02f9bb4a0d26c104be9fd49c5b4463173fbe1bb02fd9922fac4e4e5c665b0c6355c226a296e7574e27b4442e1598972d47348ebf294b2b51702de749f4ab5f05a33e2381a8441296efb51894b13a0df88b997148a6fd95e14b050953e6dead0e51fd292891624f86b55e44ee690e97f04c1f5d0aaac76d74045228388220ba8622313ce820d4c4ec1629d0113112163fdb3bee131e7bd028e359414fa983914c9f1c8e4f1b33d7b4018b01f06da148f89fcdb4c8a0e05b789e29051e6df6c2b6d361fad7c6cf967bd5a368097c01f1d8e17b0b8d4831470763381e0186ef6d682452e49d718f8de67ea77b5c60ef967f7f351757034a101c47f8d99fe95460ef6ccbd7b728287f99249fe3b04b2123779a0de57563aa72755fffc2b62d4f3a76440167a42b19efddab6a484982e3636aedca2ae03efe48abd128a6d9b2a96447071c47dd304c610669b5c0dfbd6560c817616dd9770aa54b8c0c1f3de021635d583b43a77083bc096d16b4db2f4d7f8b309e47d0a58238a38904f0c01ad3db84a1d20b4f3a2600240c30c9436178d70c6562948fd4229407b520a6d46466d2a04d19697864f3fb51b6e9b1dbe8cb520869f88130359cbdefd6fa1daa6d444cc29d59a4649079568ccda64d57a06d00cea33052d54652bd1ade849a06b0c372649804a72585f387374bc9bb93829e4f72ddfe73d28b505948a1aa635207888d3500a3eee2ed6caf8f26a726557fd7bae291a124e23f849f5600883fc59c6f93c93350cabf70488f4f5759498a0bf52c5bc5d8a2899d7a66068ddf73773db3be62e20adbbcfd578a7420c4d2695500b19421d6cc2929f49e0e6b41974935c2a3f464ba5bc3b0e033a8403fd28cc53996fe38575b900c4ce2c0a6b70ab40a530170946651726e02185b26144b81c85de9a047707dd9d07796c59909a0d3f6e532dbe951da04f006e304d88446c254e1dfa97e14ac6633f63ae653229473c039feb0ec9cc88ea5b5883635c0e04c489620ca62993a7767b8acb282a4f324dab98beed093d37ebd59d6620f6eb74f004e6c0bf5659b96222fe44765841e24c10d523b2f85961031a9fa52d95702679f4c9186653a6a1b6f202011d99910c19086dedbfa854b8e5c959c77890a1322586b832c07b644e57c6eed0267be4f041e69eb9d6a40586a0b49002add17ca5bdf72e10d49fd46ca85793e0d50921d0a76fffdfb72695e851bd390e974a68ba66f0441aab5f35120c0f685bdc034fc2d2e51a646cf2f81a21434c9eb93ed67c6f60ec3274de342d297b4083dc51a7251b79a40247bf5ef8303af03e3eb71c200ad999075c0ec6abb66a816ffdbab5f63e5fb9e913e62416f0c37ae98e098a7e15a9f7aeaa79efad5af8f7aabbe97f86b731ca6f9ea0deebf5739c5dda4b62f798cdfc98c98b00d22c46b1c4ec13386f1c317488af30c7bb119b359adcb3a34f0334b6567ffacf83f7cc5e222e03cbceb8722096d9fe91123b6e733dca23b46752c024c8e957ee780b3b0084a456ed5e9370ed9621568f8df51e9439ba10b9a13744216c81c37ac02c23064ec63e85b2f2cfd28233eb03649808e42c640b62484fec801b2e9cafac0213f58be10b54345b6b17beaa5294f74d6448b2e63058c1890435e7de674507d26b22a5370c385b4b9ece60547504c08b120294b2e8a6c9d6c98d7e619083b05b0621fadf7876ab0aa88b25891335e2dd03ac07f4803040dd7dc4f60faf8349ccc1691a0855c6af29389ec37a302c600ce742e51840dd84cd75e98d90325f9ae12896d36ab64a9d8e9eeaa07aaa7403d9e1fa652f4d393eb8c07045750b64a722dde055d81332f08a794796e3fd8d6f76196ae6f0fa242b8d57fe0a098a36ee34cf89d523b3375e38b1765885faf41d63427444e26687d9b157516b2d23a02fde0d7d971f8f327dd979da32c1a6ade17bcf2139832f68b1b0594bd27f31a2b123d0ff9091c6d0c359ecb43b237d8e291652c3f1def5cf413f81f42170671fd4f9900b9d2ecee9281f8a258066c2a0383239dd41582e507fbdcf76640673435b4b42bddcb39072f9bc9585896464f9fc7e1257aaae5f8a92ea4362906646762db4574c83a1ae2573c466ce4d8806a6e778614600022d92a6d61f9d0a0ed1ed0dae0440d48091cafacee0ac818d9acaf2d0376fa97884c84fb00c6bb70a7a8623e5d35232fce76b324ea3106d3f5c03be7e94e4690188379c6a844e9eea8e8c108b1c6b6000b54290b344caf17c1bfe40a3746df8c0222519f40b7b72f7dbcf7becf70a398fd887550087014b21d7431ccbc3e5f71fe91a803a0b064c66d9eb00d76074b6a5351e1820734b709f4cfb1ce700102d3905c74e774cf1d52c4730734b29d4fc6dc5e994b76678ba027488034660037d447511c23dabfe31873f57d81227cbecb1c16a100fa14f03fa2a1021b76cf62465137006664c0bafcfd0cbae0200bd1acc5bb939d4e667a541c2fc1e291ed8eb993f1efa0dadcf9afc24e58cb36e9b5ddcef6ac020d93ce0d03e3e6cb07d96fb10a378e4f2c29407948495bfbb59e8579d5297f277c02b1283e99829eae8b5eb0efff216138ea0e1245c8235e3f45ad4464edd20d2150efa0ed3960a13fcb78f14f42af0a857e17dbd2bd1453c773464a0d5b7a54a8205a5723a46460cbba2e2ca023d8fe6ddf861850b05c21eae33a68a37e3ceec2180c1da26d07624e20f0746b45fd849e95057a6c68a7b71d0f09f9a427d186982682053d1afa6e2419b8baaf778339f08ad3f0965be3488c3ac3b9e4c9e6db4c687076e752eb71cf2fee56f2d965b749e6b5423e4b8cff3675a511df0f93d03dd42b713a6fa03d36b61d034f382c3f93f6e5f9f50e251f5dfd6400d197c8668f5b790b495c39d86797c318ca8ee252eeae3c0d139c4b373036e339a55c8e0f0489f74fa3768270b3f296cd106e3ed3672533ab54e83c9e87bb67b3c8d104a96244d15605b0bc2c75d3e457ecdb3c39c48e9585322b6057e82f00fa06a9b4bb9cca86bfb1588a8599362d8d0002351ba7a03cd4a84041c10c17d7290524ef4baf582abb0a883b1b56e06c3338a8e6b2372852234c474aeae1642078a60f2bbd639d86c0aa8431b3091e16a66870e8dd087a643f2e57701edbb61edb5fd165161c9d0b00e785a2e9183aca7b3bcbb48738c53a0bf4291d5749da5b8f32c2460f33385c62776651a07576d9e666f3c489eeab002c16d3e7651a23aeaf48674abda5a8352f73a99705aac770ded2728e09daf7933258b389c4921c9a8ce049fe74fd44ffa6bc568538b16c9532da1343ab1294a37cf9f5c36f8a3ae5475220928a82e6cbf438eb7a42ce404e53da789b71747e20a3dd210c9a0e0991527628f4a9045406fc9cd4f8efbd23fab15db713c3e5b38e09676ec8ec1a453f3952a7fe852e276ef18c24c4b07da4aa8eacf227a5fbe834e21c610280dd397c4ee4ce0315c337e16ebd96ab076f26ad3ee608c24ef91238f2ec9d2b980957ba1cae724e83fade95256ec8a5e2ef02a6cc801c80c8e27452b6c18907e8111ef7e4b9262697dd317a704a13c85dd2a58c7487a7badf66b989432fda7b78df30179de071c0a8d86a1dc53071d0b3cff136d6e1715ee2f23d3170e8f82c61eb772f8b91f05943c447715610ca85baec47dde0a729c24091dd4be6276f7186dd0b88777e0bdcd9d7c18f7332b25b94cd911dc669ee4b7470ca0afa12734cbf82c56abc367c587fff7bd19197ea1be66aa623b2e3f7dc39e9bc8f1412081ed424a64a1561168a34be8f8c2353c64f1e024288ab9d8e98115d0bf17680be2b18aa9a34dff46e4454709eb30a6e78af4a6288c052fe128604579800a9e508c0547b893c834017623d8025c4394636c2c16eac069d982daea1e98e5bcb4633115478c77c03350e30614fcc60074afee1697407806f346461686d191cad8a787be597023b06a0d4120c38ba1820f62750cd0bdb106b8b257024cc120d3f58255e15ccbd7d5c26be5b9c17bcfca1b7d9346ddde3064bc935cc32b0af66374d48b9a3b1d8cbc16153e3673b0a8905f523853e7a71ef15b5b2047f98cd119b05cd377fd1dda3b1b2310751800c7a8f84c3a12220b357d0a690e6786c6055c7a13f64fd30eeaf5818f9c7fe90014c7981beaa2e1540b7d862798a4e90cc45dc358af8cb3c09b1369df65c08629a8be08ae4aebe40a947a58a5cf992522655147736519a3f8500bb9a339370fb12b981d57372060925031c9803c5837a72052633b11fad05f3498b8659a6b9e7fd6e931b6504b0d6f5bb9341be31bc807cef2c02acc01ada9740fa7d2420f153d0999fe526d7b9c4e6f6035583499cae25c8b9adb7a722654d6ce25af61f8249d80a8c91f9b48897ba9b94e72d2412fa3f60a643de31bd831bc3dc7cf7af21b61a91516e984b2ea3e9c28793b241908a4a2f974e651d785db5168a843e4b2447693e4e6a4995f1acfa743bfab5a256f18366f1c3f104ab50071668108bb91f5e5e49184663c1ba6cdda79b6b56bbc002f79e1522d0e410f370054a80566000b91fa1e6ba0c2bf0a5ea7fcca1ca1ea83f83585c9512a2dd2ee303f16f45cca52ffc5f5aec194dbb35d6740a1fa5b10852d1c447f37fc7f2fb92ffcb49f62b07c1e06523b74cffcc5dea996fb9765706a72be07e416ea2e0fb205f1d34db80ae6b3e5de21258d14ec01f68d3dfad242f9c6ac8f9b78d6ceaee9dd12d0bac40d01d582b79fd9c730bd0eb84c8023faf879db26eb1cdc66215a530bc1d747a0daf616e2f20f3eab62245ab9642a13f8ace2aa6533f0661055db6eb5ac2097fa0bf21eae2d8954a0abd449d652052c464163818065cb98cf8c0295bb0fa6b6319a34e256094e7f6bfe854e019561f4f3eceb9e8901bf3b4f36037bf8958707def22bc8013ed08966e702521ea60ee0e4fd4d26ebe6ecb0a51f5e25888295a4e1a05547196eb07e2ff1090bbcc1f89854cbc22058723f419438b3f05c7d70074649adf010f6c854e630b1323a88f993e82fa9f27d809170bfef0eef6ab87730700719d43834ea50d0547b33dd382151981995cc472031f40d02e5451a4005d92b7531db2c981fa5ec6e44782f16b00f3fff62c4816658cb0032bdb69562422c7a1de6077a95bde1e2ab0b4d2d4740c18f9ae47fbb10570abac4473089d6e325ca8d9ddb4cc76a02b5649aa87416988b1323dd2ca2888b8adca53f18bda20d4f26345e050c482519b4efed2265f9325413f4d58ddd7d4afbd269ae183ff696609a97369d24447199e40b9b81b942503fa21aa6d5820d23a4a07476629caa357f9be297c327e8f061fa09a5128e0e73c9a954b7590c7ff927c9630481736ee664634428331330320200441bc471f9faaa8df0ed4d6bbd8ce85d5ba7d2b32d058ed279290bdf7de524a29654a29d606be06b4064d2f6771b1e042e84ad41eb41e3e1c7776fa09673985ede37395cb7eec8dbfe3237208f848b8d5d2314210822b21f8c007acf8c00d375471c39123568ed040031534cc30c314331429228322dd2d65803dce82354019608ff6ad766111c0e5f63ebecc25b48f1bfe311f1ac1edc6576f5445f3da6bc23a969bfd15565cea0263b9955f17803e7cececac56ff19962b97bac0af5b7f02a5e0c30715430619a490a1031da0d2010e70200a0eb006343066cc18283440d96031db9c33c8e4be7b5c4efe4e9bd0c379da84d9d08446816ffc1e626ef334e143e22648af7f3ac9a0662979561479a5fc8e3b0d957201ede86ba7d7f8c9a96e9d759c8e5e0faaa5de2f2e49c946ee5a6a2f505cfebfdb575445c1e7dfd5cbb29ad5ac6635ab59ed3e7b1f7884661fff0d402cd467d9c5aeab67035d4208dfe30d4017f214898ffdc84ae99c52c608a13b954f6bfc7884de22f1a5fc1b186b6ac484d2e5d52cbef91a3610ecc74c5a0c31d528b07819c2f2851a58be0883c50ba4aba1d879b25923eab5eeb31728071a9a7e9a89ea8a7cf2e9ef705b933dbb7e4f9a17e8631f2bcd1862d0bc9aa7e93e7b8172d06860d01ef5b11a45b8e7abd19c34181a059aaf61311aca467b2ef5a8ff6a3ee57dacf4a9c771e3bf9ac7f13972781fea71785fbcb1def0ecc943e2d7c6fb6e00aaf190f8a539bdfd5487f29078ec62d8b48c4ee901dd682a44adb042586590af625334436b33198a1dbb1bc69f704ea63b8fb8cee4fabb7ce5a82526b05f64ba4e7ce5ce53df4bc06684b8fa1a73d0fb8c5c18654511f18f1fbef5fd934c3021334cae67434446d80f6574fd5146ce8382127f660faa1063c6655e75fd6266c4e6569494aa644bd6a5d65aabc643b56285952d94abb5ae6025ca144612081cce2042cb10432e284a43052aba1019614ab807379022e64a1a4db000b15a011558e0b8fcb2a2c9d16fd247e518a3cff47cf8aa237c0c66af695d4595b1fdcebeeae1abfee74d85157dd95149a594476ab8f3697d8d1ea9e1ce22f467f5729c877a2d3de9e5f80a7e3bf7c65233b40851ad56952a4646280c0c06c68ddc8889a94a95201818cc43d1262084102525279fdb260a28070ec70c77e2389c26540182386ee350283ae5a34e5f614fea4fde8724ae90b6d3a33e857a8bc2fe34e5c3edb70de70cce199c333867946814316400844b0c2c96fce8a08a185ef8f0930692186184f841a3e98a219618e25505103f4c5a5c56f093822126ca78c1cf102d2052301d31210477f9484a098ea4b84295650866923005b18224464ab894bcce44116a41090997b34ca184c507473e58720970790b193164bcdc045cde4286a861fb566bf5b8258d82fcea7dfd5fa33eab58e5fee49bbb3b866158ad15ab9faa754b61d6511e127aa996fda9535d1a9bfbf9808a681f12ea4b541f6655348b362b927827c76a277747b8557525671355cf55f7574654324461440630b63611fc804e2d68a20b295f3771fdbb09fec1d31af1b134b4e2a5251f32d42459a23810c270f013b8a9d5cc03c457addb7762619b6378c2326de3362dc34e15721bd56626b188d594d5a1e2266eea3589c6379fd635ab3a0c3a7da36e8fa07d9c0a1c8fdb12ca57fec13f349a473d57f3dc9f3a1eba0d96f60c512e180527c09feba0137c823f4d07b57002fc511dc4c227bc58c7a5b00e1184321f4281ef3c7600dc7f37b49a837b50cf4fc201f807f6fc25300af5f97ba45805eef9c9e96bf704f5a90e66c138feb6835254d6e9a114a875f0b575413c746571d9fbc32afc037b7f280346a12ac0f52cede9c32dac82f62c6cf0054f1d94d2c12a50065d909267312780c22d7c823fd7b92c4b6bc35559385b6e3f946284db9f238b5712e6b44c855a9451d6afb1d65a2186412fc65acfa8b5d6afb5d29fb5d65a6badb5d61ab158bfd65a2b562b866158ad22658c5e120da3a3628c91733535c9289b243d438b0fff03d21e7e334308bf9f75762eff74a17eed543c7cd5af756b580682be5984de107bac6fed32af48bdf3311501b4b08c35d6ddfdd8fbc01c2e7c7f0c661083187c3f12ef7c1fd7b9f36bf9ed19e002d1a65e24d144210801122178e2031f38e2034537dcc0821b943872c4882364d0404311347879ddf8ea84d58aeb1702747f0bdbf73f202158a59bf7ad22cfed2e5ed8d9d0df0ef41bccfb2a56bde94d9c8b80cb3d42bc5c21b0a7b1aac3c54cade676b18e43b1fe1b8d4c678c93ca0827cd6e78a87c524aedac33d238299d94eecc0899567ad7d0b408cc30830a66f841d3ba8922458828824a2da935952a31555bedaabdffbe5da55ef3d94f20f558bcf12f59b7c33d213b4aab675fc50fa2d91181ece90fc9e2e740f3d947cf3ef6355dfd545753b3d92a149d26695a7321830c43c880bd16e586be2eb7f93cba677a3d1c077b7973b19d6bc3a5d4b0104218f3dbbb7bf6fb9c1946d35fae459db84db3c9b0da74d6c8f8299af87592edba3b755f27a9f175924d26058355eed7494b2e7cfa9af06bbe4e4a72722164d1789d04712011f6834cce972a151515151515151515151515151515151515151515151515151515151515151515151515f96bde0561274e5aad2a558c8c9cd80f0e5d274c4c55aa3861e626993b8c37468648dd50871672ea72d69150875394934884212a445d1087bfa90baa54d632755d8f1ec5707c1fe420e7808578a7ecd4e983e14e2f26d12e2ac32d851e10b3e1b4ef06f5dfceb55e0fc7f1ad3fc84e774f50ef79b1190a954566e789ce936dd993d36b4dfb44b75a3dfb4b69e5de77fcc4ac437fd227dc131d377a3d76bc2f7634a759e64bff18a3178901f8c1f29c3ffdc6b701498d1d086abf7748ba7f07fb8ab3aca0ca543d1213d59d2a6072e7c7d933b05ffdfe99fd7c1cfea1fd7c1dfe81fdcc39b2c39dda91be15ab4fc2d57a841f6184ebbfc2d5fcf3b93bb2e75b04db91790d50e156ac3ed0951d2cf8a5bf837a37fa38bf98085d6f7b7b07fb552ff3ee60bffa5ad4e2a9eb1b4998c2f6438e857a8f6c97b7e7874adcc4aaade34e62aef04b7dac0b8a125fc2a602d88f2235f4f2a5a1d2d6352b665d5ff8c563c378fa70b89a1075ea652746c9919f198d32509fe4843a6575fb24daa66996fb241bb76d8feac17e12ee2deab9d3a3bc1e54ac24a72451e8a3b82ecd4a7c94250648f7cbb9ccfca8eed471525b3d8c29bb518f654765c5b02aa97c2a9fa9f418c003331e63968a1cebf43a0593757a50cb71d85585ec90e3cc1682feceb9a24c28a54d974e9152ca2a67a4b4046644234ab39041ec008c2f32e93f00291963832e5d78b0c2872522124665200519513132323232329a4f666542732c051f3e3c7e6d20be729f9d28a99684cd59ade49c271fd81b6d52c983d668636dc536ae38548c3347f2f179c130693069c58e909360abebab71e1c708390c91e667e6b9605ac02bbe605cc03a7ce7469dc2938a076f1ebd2b949a2e14621df75aadadf2ed64bcc9997c8562b29657fd9f33dd8e2de7f1d8f2d5f6fd83856c430cbaee9db3d879dc8f741b1260565092ece927c1bebe7bad21d84f378c3feeb1fe4028ede47ee28ddd8f570018863fe57ee40fdff874c79c62fc2bf733efc93908c88f5f6c456f5ab12d5f89d08aad0bbf65695af67b42693fdd5ad2e9916a073effdfac72b04a2b370429a4b0420a24a848e1aa43584e08180d2c25837961ab1a581716c3c11686c52e1f51112305c68a70f988cacb0b2a463559ec08978fa8f8c0edc0e6e801d7646dc8a839b23cb2d47c61752cb185b1372e1f4541c406c66a978fa2f041471056071b378e6c8d0d726071208de14419502071039be3f211144a5236b038985264d814193a92589acb4753b6b8dfab5cd6e6f2d114195ccc8b4d5d3e9a62745753841c87871c670a91e3f0bd59e5c4cb474f24518334f8af23ee7c835cecee1fec46d6f96c3e4bb99bebd4e8368385d4880dec97c32fcd8885bf7111c0580c71a067392e088410c20821fc085f06e1b89fbe46ec673714b53162df88fd54d64668adb5947241a037217796618dc50aabd75a6bd7d4e9913803c9a667a48f1b67367998731605414b992f1308a4a2338ac65429e19cf38ca013f09cf37f25658d55ca39e79c3305774ee9718dde992a8094f80245054424e10419428048579ce1e23d5c31041776c599a23343f7fb9da5586b8c63a478004b1a6584e183294d808954524c08f195524a595f6b20d182355a57befc998419225cf9b2891b566c44859174250951d8bf19f3b257aaae30fa21ba66250846a471050f68b0254681438289b1497db9945225a59452caf714e67f2df043661df9ee2e23a43ba8d245d0f5c2e8ae2e63f1a2d505d335e132962eac5c0de52edddd33dfaa7fcbee9bb1d2a434fbd97d1628871df87bbe0f9cfe595724ce2e7b181c7696655976dabceff4f52beab1eacde7beb99f22d3c3a0cf938744c6d02850af48fff462e812a4174397e0dea92993f749214619a3f40143cd1ab63f1ab9b952f658ddd418d1cf3c34ef071da19435428858d4996d1a56372d8bd994558161f57b7ed3a618866118866158cf6feae3d5290da6345d0ee37296294dae86929fad6121848e837130649a42494a18e87523b25ff576f96a428d8e52b64c41bdb680d1d646cadf9d46a19d87aa7734bc9ca5093297bf5d0068f16fc079388b13622ef3df204f0abab5f54411f7eb25acfe089d8bcbcfff80eec1ef8046c1dfa9dc8f8f545abedcb8ac850833b7bd1b7e5ffd6506f4204848962686dcc069d2cae2822c49849149546c40f4f5097d6639b3aa36e724020313ff0dbcc85c5f32a34fb3b0ae76ccea76e8e32be9d5ca5f02fbf11722d5aa7eb5133eaca3038f3265ca946b3f75a73e687c53e9d6f96bddac4d871dfca9d7f26f4dfbaa512c7a17d4e950bfbd6e11a8d56a754a5660c1c7ba2057b3e02b598115e36f3f046a1a6f59b76d8f65ef6a1616a47d569f3b1db0efeae9106508f6fd3a64ef9aedb61df357b845e03f11813fbfaedde81694bd2b687b25cfc2be37af05bfbf3d1d76808f792d2fc8f5ac865c05ecd6e9b003fccc6bc1f7e7864021fe3eee6a16f6b57335ab7ed60529598185bdab59d96bde6df1b7af007ced6917542900c4cabe5f07ec5d87ec9b954439b2c29ddf2c0210618f701b777a459e88c0ff8908e2c7873b220085b8d69c90f8cc0981ffeed3091838a68c34496ab994aae4b0030a5b3cf16245f197dd721ef77640bb31b1c45cf42a915416cb5f6cace521552a1b20c4efd5528f9d1d87d03d203e4d9498621a6c88d16239007247fa5a3162a8c53ad26d5cd517d6890feec74b43be70929897eb0a0b76bab416deaf361e0610460e2ef4beea19d9b9104208751ce0ca17266a4ac084154c682e294eb82c21268c22b4606141a4d7d0ebf50226bac00314a11ac0eb8a11af2b26b839d228020a1928562e012e7381c2044ad04dc0652e4c2451af94d24aa96774b3f115f53efa1be6f538a5342df55eebfb384eadded7422bcdd3fea4fd49f33ed46b9f3a55afde87f24ecf6dff717fa2d96b99f6db7f996764cb3c239bbbfb90f7d4a7b0fa3b7587eeeeeeeeee3335c457ee3e5d7a74e8eeeed3a54787eede40d8223a74777777e8eeeeeeeeeeeed0a1bbd3339e92f8427ad5cdda60ee23052f2bcbe3553b3b3d60afac4d078685f18594f2a1890b298eb8245cce42458d9aa014851442cb4443a6bb72918b715593e33c36368ed520db69fac09e1bdf393e7bec2f007b747cd7df3a1f9bae26f3228d2766e9f626a3b6e3b9afb087c703e0fb6d5751167a74757b755500e878747547274227c30588e0e86e743e531ae11aa75d5a60511c97141071498194abc9d39f4e4fffa44d3fc121dcf8757a966532cb342e42415c5040a656aea71062ece61f4c5344e0927e776b7b096f2906b00185af98999da8bb38c09e0840d8c43a908d6f67a71b50df26b1905fc7180ba11916b2e08b82b152edd8082bcc31441649f7fb1c4259b0a1c5e6002205484e72108144450e264849bddd5a976ead6f53bd5593176c82049b24c1265f6013a5873df68f90cc10d144562ad15125ea9232638b107705048ca69b550e184e34bfab9c0df4f8de79e0c3bf81ce3c3d2b30acfcd505812c21424cbe4bf9f01be035afe6cb8f045742205e2a199eeacfc75e806db4d1bc920e81e8ad16b34e73093187eb2ec023b00d33d75bf78867037d24f5fa0ed71f047ee91178a9c7aa1a9134aa651addb26d2b6343ed444d831efdd40fb393b6d54c9b30d2ccfbda3de1dc9b22ebd4e72b49c001286a8ac289172a63c8746bdddddddddddd9d27e18e79e5cd4286380fb3d76f55b0f3f1557bddb16347f8d1ed43abe26e6e6e6e6e6e6eceb224ccfd6a138dd136fee1f753c0e5cacc00b87ce3f273dc236b19d777aeb371fdfd350c30331b36f411dec3bd7f0ff9f7d075ae376ebadcb36d1c4617bca5bdcfb2e15534aa05eeec275b7777c317f875239053908d4cbf88b1bb990730168a77437c153b8895867444bef8dd092cd0853b5c982f9d4cb983057881185dd7b908384bd2d4c07eac24640811d79532ba585160bbd0fdab1d2cc01b3fc757111573ead5ec91fdea8d55b6686a606b7b9531bef8e32e5d346273f860e11b4129fcc34609fb351452a851a55676acf8e24a43e82a23eececeecded4e88639742e0816b1ff1d08ad6cdeb743bd0d461f945f3e40209ceff1d061457312f5a233cf018ee3af6dababb22a4957de9961a30dd6535b8862dd3d24f24ee7a9d767a431a3317b42156b4c59eb49574331f173b5596ebf8d8ac74e73b9fd3e5292b8fd405a7040ff102217803d402ae002065cdc600d158cc102566b71fb6b5072fb91e0f039788f0bf57750bb5aa8879c670054dc36729e0a05eb211f6e7ff7970ed3627a8900452ea6359294f96286d592cbedf79697dbef41ce536f6fce6488c88d5c0a99dbef507815b7e247ce83fa7e477a22cc4569b928144acb94242eea0b9518c6e2724f0451460647acf124892a78c0c48a1a161c31278ab8988e5b239502050febc3ee3c414c1a55c6f041abd562a5bcb8b2891930f7704c51c098820a21f8b58d0b7f83315882072a49ba1ea42faa3321886e26659694650b10bad96f2f859c8709f699501c5acae02bcb1e0e65d5aae4d0cd6ab55695bd2f65bf74b3f72ea4f08fbe999771b32c7b1b3acbb29a6999f65996655996bd966559966559966559966559966559966559d6f98d444cb8f6e69ce338ee5dfb4e724128e75c375f84104208610b0f852043e687103264c890e1940c2584104208256408e1841042088f608c3146860c2194cccc5f10c051090b26d9044d1087af945546326586a4b45aad21544397b338c1900c825c689004060c3dc10e8230061432a8b0b1640a1074e0855b42a378b2057b124508a022a284b12405427c418313402db0c832051660b2d4965015baac85c98950bb30d632068a4b5d77fb01070d21380126065b547183306782e0c389524ab95c3a8b18c20f9640e3f5648c154e802903a64c19536bb21259a0a50b2a8c60f2431a42a0408a5126085a9ab2a06dc4683520ecc75fa0466447b89c858a333c021ece50e2ba1fbbd75d5827027b361ba508bd58f72ae561be0e39d41df2eb8d978b9efd4204f6a8b084520bac1023a68b201608ccd8a2053420030916f8c08a5c781823840bdf6795da81fdf8e523a584ec52762df810813dcf380e1d4bcbd83d65ec084f00239d62a2388ee3a6b5d65ace72cf696f2dd7966bcbb545a138ad6dca6a1aa7a15a6b8d83f5439d5ea3d1beb913a73af904837fd0f8aa9e0e035003fbedecf4d88948b62052c658df1ff60c37b748bfabc65826fbd94b2384fd2c0f233757c62821d4ceb04676241542ab58a66d8fb23e116002ff68383916a0006a60fb35dbf54d4d6aa5e45c9871ebfa72516ef06af31b8147c71cd6769fee01d9a64a74dd6a5be92a2dc5cc97d9ad7cd5f4ade48250ead9d0387ffe845827efdc7c35b73b3d1e910ba2038d9d1e38681a10f6c557f4086d1be2affa733a85dbfc939f324b9bff7ce3ab86f3997aece53277b9cc49b40a8d6f34cebcd90471fc6d7b4db3897f949941e869e687e87d12891e2e6dd1243062dd03bcc2d2e5dd20222cd9ade34f33bee27e7e98571f4df2d1a03b7f6619389b58c7bf9f260736bbdf6c924b64105d823fec24105d11d7dde5c4f6bb9c0708ee9965582ee11ff03f798424e296e02eede03af466d36ca2421407ad140036c0f55702667717dbfdd0c7ebc34a9bd20be4f57af9bc2a10a42e5eaecf4b882c2ec52539249d4432518dc8245df288d82483bac9f86ac9571d8da21184386d349db05f5c324a823df11597949630a3ebd8ebfa87216149f03feccbbd1f26867fece23d7189e37864723dfa97eb4cb776714997d02f021b4b4b2d289a4df7645bf7d0a7b4c7a5fff160ae81759a0be241600bac3325cb3ad6a1efdcb30e7d0a043b9ffaa094524a29a5ed5d29adb5568f5bd30cca7645bef9f077b835ce18b7f81b8a72ef58f52c500ef53718ea6fac4691ecf9569456ab45bdad9b56b347bd8f9f7efbcffec9fb58e94f345fe3d91b36deb77d0de721718e26f59fd53c241e43d6c58055ea7dd38be102d9f4fc027a1f76d949d0855f8f2efc2e82e2c2fffa08bd3c58c7b1206da38389fdbeef3bcfa7e2710560d3ddf3a97dac3efc176a7cc8acf36119c7ece90bdc0bfd5c90ea7151820cc7167af1bb9b0db8b9d38bb1bbb9b2e3a13a7110e887bcb3648bf273beb40071a48f97281358fa39f8cac7514b562e59a323aa3c819e9475661e93d7c12b567e0b4e847f682f5f070ff6021b709e4da95583f374f6f23f232b495ffae67dec850b42370f49bcde50b08efc8657ec90acdd89b1352061929f91489482f3f463de1308bd1df88815255e1be7e13d952573aeac4d8b6c2ac698c32415234de52c8939ae1c578e921c253195ea4f6d9f8a3431a785ca5992f28e409a9842a1fa45982fb1a7f6690a098642799da3244789175bd38c8dcadadfb1f29027b38cdb4d5cfd5b95adc2f6f78b4e01338c19cbba9db94b31cd21a65b045ec91f210317e288227420de601d89e3bb3075a3c8852fa468b8f09b2d25428b344856fed743edde3511d6837844943de42ba22f9c0bd3dad8c07e3d447444e50242611da6fc53f6165bc61fbeab1b1f3e0ef77411a9d5c5569a0ec8bcea21d681c2faab7ae8423bc5c68e477544130511128409613bf24fa7485b6cb105175c70b17539bef27ef80355d787571f55cacd87b685fdeaf5264a9623cab3de6704365dd49fa2eb94c5f645a19ee3bed1e5bfa94e27a51b97f4107686e8bab2e36e2fe1db5e6df9ca04f6d39a50492db865cf58cae3ba2deb6c8897da1665a2e6064862c084d992460d0eacbdcc65cb99338230c3c9fd5e8cc571990b17294458b23597b970d9c22a0501afacf1c395323c5ce1c2c54c50772592a0848b163edcec32172d5a740ca45abb185dffad050770189bf97cf35529d73f27879925333beb44235f49f113fc331cd8af7a91fdaa5074bd4717eca168308e3f1bd76919eb42822f290471c6b0def20152a550329abe5ad91148130783540f4d4dddd4ed31c6344c3310c7a1fce3ab45d8d03674b3f0c3b7b20efd20180eb007f3288568102921c1702601f7641e1067da3fd07f4a19a7529dfb71539e18a8748dd874b57466680000a0005315000028100c87046140302c1a110cc4fa14800d7b92467c5a19cbc32c876114858c31861042800180102222223553230332c6458efe471d4a79ff7810b7b42c24f91485ee6eb71bc7716bfc882ea6ddd9b3dfb444a9090bea39e4c324d7b6db273bc541159615d12d4eed699dba51019deb5eb53a12486fb4e60d96afb4615de9eaf5ca35c261ea95e32c986045b0f6bcd44094014981c38e2075ff823b3bbbd1bbd2b9b8da2bc7f5a16c680229162e612c32be022d6c04bdcbd5ab5e4f215c6900983f63117ba2afb6aefdae1fde14fd9d19e32d127a78ebab893ffac763f314b7846b185a7c855c999733f5ca3d0db06427fba72482cdb9d667b111d783f9934209809040586b6db1dc20f687dccdb830ba2201f60b6828763e1df0745f3ad5702d57c40d360b646ef59172e25804fa658f25016af77112cf981c67b8a8c7e5d009b21a0d49f761758ee534a326a0cefe9a260fa04a154ebf4ce4a65059a75ffc7212e7d57b5cb82050027094916fa449361411c775431c689dacc40ff39526e76ba1ec2d45642da0541280fa61fe0a7c2ad59ecebd68181b073bcc20673d3cdcdb620783b9f64d8aa485758ed08d8442b162ff23eb0360d4ccf9dd9287110026d3c0f206d13daaf432baf0ef2ee576db4dffd8a4dd1e14e2496d5397ea557b3af6ac09270c1d400decd7b7676d8705798e0a0cb00113526840bff1f7827f8e3f6adb1b0e6112f93883558dd10818b0e6e2c5bcbf0d90b9c3b45b1c81f2095bfff0f15116833ddf79884056aa925959f1f9a51252c714440e4262c9ac5256f1d29792416642f6fb94a8f4a6f93dff18a770d705a636b3909585e2ea3070ba2d966bcf2b8153f749d2ac2fed9f13f8cc1bc38810e1f2046718ce2918c690b1eb6d67d5a9a56095f4e0f161a981cad281c5d4b65911e509952413ac160d9fc4364023d0232d1e736693c3eaf95a01ec3697fe0956850a0a517edf489e5399c0d1dd1c0445a2521a207bd097461defbb687ebe871ad6a2598a02585d82a33122c7cea305d92b897a6bd9b40e0c54c00940269eb5da579fe98c9a1cc76844a9648d22264434fa4ed4cf8bc84614457118c08862dcf6cd003aa28265a990ae57e69844894288bd2b8a27a200706d0d6cd1f14a2e85e65062bc6002598ba0a6ce04e19f92b1fb4764a288949052a48ebb52c75db0c66a0e05bb47fcbeef9005bb14a91c740dc82d9d122222efc2e60756c6fe05b4ba70a001ad5cfa556c4bbac7f8f856734a21beddaaccd41ce3948a9c9ce018b740d6a0e0a7e6f0a251abc801f6bfc270ca90384d1d42177692dd833fb4e35d3fef4a714de89abb1863ea1cbed02b55b878483ca0a15e0a417712e7cc85275eeebccdb59635ce412ef43b708f739fd93ac30d74a0bbb7e66a4db2a1b36c722e445150cba24b5f42c618572b8e084122858220e366260e9d1bab1f234e7122f6c3ea160a1714abc1006243f9740d043bf4f65440b5759c2a85497160bbe665e0e93eeeab3de701dbf1619df836009af99c06df2b21ac97f2e27d3031cde670624063c92463a22e6350b956ecc11de86aa7e5c37044d402e5993d3dec28ed4cc6c4f46e6d4aea913761360ad0329059007f7dc358e81145b4309fd7301452200a0273b0105473ca237c16b7cf0140d09505413aa1892e501b1193788180770b21248c77903d84121012233f468f0d09d483c5c0d04d3b640b27691bea0859dee1142f909792e89935a407eee881c4a2c97c9fd5e66adb1650220016251f229ba6139b03c0e007b484d4faaf6b650bb40a4aa3d7ca189d2024373919005b1c4dc3a0a6c9c936dfbddfdc100302cc422f4eb7b44b2c4662a23aaaea79074e71cc012f637b17dbeaebb8cb69fed3527de919c09d9cd8200ebf675716cea38e5c2efd3fbd9934bb7505ee2a27c5dcd10eb508aacc75c740fc2135ba08315a08c63891598110548fe11259160318e7eb3203136f2a3571d54423a7cbc1b683dd97339853b5c382feeec480aba447eeac6938bc1e07265a7b615d6965cd1dc79914e9fef3159f55aac0fc6fa49226b5ea1be64dc56d3e5080a05e84b3975f325c0376c5da8e098c1e587cc9f0100e336933961ee776cd8f3a9256f1e6bf555df9c6dea5c2586d3c22aafe2f48664ff8bdd0cabac8d2a84bb62a12aaafe93b17a65ef3576188ca2fe37402ea29a9e535197af9066caab0a5fd085838fdeba5418debcef92d96c137535a53a3c366f798cd9e8e1f9dd92c170fa91de2f15140ec7f59d5acc285bd41b567ee64045eacff78ed70bd577d38efb3a3234440862c1001682d8148ce13b09391b03db58af9a0c41dbb1f2dbbcddbcd820d788d2ffe14f3c0906485792cb3d5eb881b0e55bf9e2b7bb89ee074add8ec900a1cba6657f76df020845059fcee04c2f1d5522ebe838c9789412b635e50b6fdfa51b3ab37b6b317f0f361e4641c28ee4d332dba1deb97f49083ebcc50dbdd60a3732abf951cea4e96e672582f9533ee99174f7edbc6a593750352a510d1049714597eae9a128a56d0d056e468b84a32b669c8daf0811b6bb505db080647d259b01701cfc6b05acec5d320391e72397f76829f0af1256a1c0b40f0134d4dc48c393dfd7be166225035206558b93c7f8e961dd6341eff33919b5bd10d5b6eac71d9ca8b366ec2d62754788c57dcb1ad500c7f2a023def98baf558afafd510d02e950798ac156ace9cd113130dd6e3a8a626f2addda22a60b7235c6ff55baffbdc6ff9674ba1a3fd51de8e6b165039c020e504ed097320c059de3b080a309df949e3c4c3f48d03ffaeb4ecda6d112a50c2ce51c70afb23a770dcdeb0e848df193dede9339909c3ad409c128daf0536460f3d25f6a805127ac252c14fce84598bc66ebf48bf829eaa715216b8fcf086042b3c3119e8ac648e19a7509d5cf49415542182afb002a073feda83500f32b7bfbbafd303b372e5a21024a80b02fa6fea53cc44d0c6579c1aa803479bc2dbcda1f28dfff11dbaa086a1bffa35fe59e37de74cd610542b216ec60280d77632a0fb53c02bb06bf2197561031c7c6898b3b25649cebc5a84a430442f178f4cc4092a8782858122890603bc1cc99d089f43bb526e4196c4f02cbe2e83a329f07b3aee222ab1a9993a8f7f83f2cdb92ae136788cb5b979c9ee13abf83fa7d689745b70dbc2ea2da49142a34f698501a9478d5377a5636275b883c5c7a87c431318e7d66abcb8465f9bd0ffd8109123ce528cd19274c263c70f0ad7948f2264bdd4b4b20886bb9f682afc33d6e99da96a6ffe8a35fb6d0e18916937b03cc5ada125dfe01cc496705ec47bb2ae21e1558f36781385a468bdba1aa6b6f98bd7ac89ea1a3a461e87e95f034d0521ebb8f42da5e7de014bffffd1429ef938d451aa8074eae57e2f1e001364b4c29822d9ee4b4f68c578e04ab2b0f80333b2a9bbdf22ea285f3563095957dbd1c254b223454e5e8921552e68c4d9c8476f0ce029730f3a6feabf8a9a89c42b9895018b54c4d612da3e6b2a86325a2beae3f4626034cb3f00c71baa2ddfbb79af93fb1a230b1a9da7a0428eec29088c26071fb52abb67cd116e3883ab1cf9487b1f80786418ab12e3582b3b095230db2c5291bfeab029d004546bb3d7b4b2d4c82f3702df64ffa98937bc8acd752de7b2b757224d4de3fe89ecb971692639a9c0afe41a2e87eba35cb9febde4deb0e8210828813f6030a7753ee04fa160c50e9fedf5a3ac512d52b03a0fe5f1147a23568e8c33363863ec840a0506dfe2a545a2427c5244784c0d6e546c4253a2f420bbde4ac6f2f23fd548a48dadb482d5aa6d565c62232ebba76581bec46888cf43ffcf3c3557181ab38d493162daa460e5259330fd8a6fc112ca4545963b21f28cc10de5ca7a0daf7c41798471370d91073db8b250bc4a13ad402b46d6b782cd5f31c505dd57c107cc4ae35a18c8ae4b9944f5a9a2c68bf5fc28acf1b3bfa5682c7387f0cf3d03d2daa94be24b06a69538602dfbf1d98708787f4c9330e61e520d95aa95a31dc8700464931a4c6419c49064a5cd0019c57376143566b6167038d96c0f8b06d4d19e53e77a72653da0d8c9156770c98f77a8823aeb66e193c9be134c44fd7d6b5e6913d4db6615aac3bf2fad2f2afe0c52188d2eb22261e251cb3effa0832c23a89bfc6e87e1d30269df509ffb9e83a7f79cb131e569bef144e2ec85f095d3ddc18a17c199b93dd51163f847722bb6e0601aab5065ef230a113ed6657c23e77392fd14573dfe1b48267f533d5deffcaf785e2c9b63ad8a8e0f1d554dd24c79f5d3c5197198cc83ae0485c599aee369b45f12dd1facd022e428165faa0cd3ab626072047866e24cc72915725856e843130eea4d73f98d8ff214616a1808e2460b467574da018d505bc05a7bcbe27e1784e1a325ce13edc5a716a3f4863dc237092c6962e4be93c84a6b50d23cdd00290f56cd94ae1a87115931d1520116fc3360112b3829c52a47062df6274fee06becc11bca636eeec5e490e5276f987894648c09d0fedf450e341622f5eb595e5f278bf8304a40f6284e6e6564c9812eae45a41114c39b3b6b829728a30b75c88268008e33447f2c75a02f1217e49faedbc64941e4e469b2c7a348372c29514f32835d88de0090042589bd8029172c885686177276812035c161a512f09b6c235e9752e95f7a347f76f4cfe4afeaae041b94083740b29431b61825bc8c938dcba70a07d7e828e9bd8c4592814513cb9e445a57014ebb800edacdccbcc0f652109e299f02e3352e1a6943af28168130c33b196d278c29aea6d6eef2d8828100f40e125098dc868d37afe074019df8b9ac6e5d30f7dd835837dd3e772d022ad0a396e8a41bc00915092a9e5c4f24360555fddb6bb1457d95eba7d53a360ce52049cb23959a7e3d0674d06d180c08cbfa303c0aa9eb4c5439bcad9e2f4dc845aa47abba519d00fb5e3d5f190e91d409c9e8eb1d28bcf979a4a32a2ecccfb52a5a02d98e2f478ebb7b94f2f0b2023cbb4bd9a91440c4f2306ca1417a899c5f54c0eda764f102ad5d0a635617cf1597008e5b5b6fe5008cab232a1d9cd2901adf70f78614cafec7211507bf5fecb7fbfe18748f00b625754663c490786595e2c016ebd511125f8e73c68a80e91d8caf97accbc02f246a8e13b55d6f5794cb2bd38238a3ca0484cfeb3875d1d711f3f6d0cdfcaf3326392f65aa2e142b527486256d008637c0203b8a80d3e3c777cae00b6558cabb2e17f9f036edace04caca1ec4d73491dfb9ada8cf101f5e02392ce2b7c9fa77671547664922de47361555356e7a9fbc671884b11b799695b5bd9154115fc7a6f42a5dc9238100221c28191af965d0bab7b7a13f50bdc4db3a80971816137412c69085fc50e33b85c765ecba10fb4c210a09876093fa3415e28e91de585bd6a90ed8ee226d243ceba10ff55e95048b68b0a764519caeab0c5e8b9169cb8130da3e509a56a0e66347facba62a48c48e4204a273c0afa19c4980372275d0e632a3576310320b0365d3a61b9d00f27cbb71e784680389964f81e058d6416c5d9323835e5d564c0ba26fc3852e6b98477f474d4a48b45aeaec0cfbab53b02c2ea6276d546ab258e044c4c8fbedee5aadb23e88d1b4aa518bd6626df7ce2437e62b689c6b9cb590198bf030ea26dd3192ba8116badea5ae56b0a719263091a6ab1ba05239f6557d7c1aa5dce3d25df9e7869dde887f4788d1d592dacb592226bc1a74e538ff4da7cc853dd47e50b9bd06d675d34df7abfe6df7964c5d361f2edfd7f9969d0caa1540cb97aa743a729611681e31d48aea489c871da6079e928164951bce04ff806f949cbfc1fc02b851f2e557d240f35b527ea2ae6942582e429645fb60607496ece832792ec01901153a498fac2bf347c96034b5de3b855066934d9c05b03e9856b598dbbe449c448b7f5f4def3f4ce13c2eb66ebc194368d77a3cd3919ef0722680d7876881bcd6845ce5b42e50fda6f190890ba3040f86732d9ef758e3cbe30b5658f46b3c74ee1c76965bb035169cd6d9e9d3e3270f7ef46435643d133d3b7153d636afe7c54ac3e72c784f808aed09144be3a3ede85108e0477c1442ab470569303b294a5e6b67d79a4d49c9fe16cfc906cb7d9d308f712c7dbc0588242ca9d414f40cb084cd98414186220e3092442968e6864399714db0244900bc1e862009a3370f5fa251c968294d1ce9511dce268c669db4314ff72e341f248c3e2c5aa2696bb612b288e39c9548d0e023a162d2926759a0eb0171579b6acd830b21466b50f36ad6ca42883683cd88a43bef3fb2d9acb1934bd60c31dae2ef9c3a219b1984ada958457d3cd541ab079d20005bda27269da4c67fc8986a2ca5c60d3c8a80618ce14251eeefb7f3e80f0246e6171ad256737f175530774eb026d7bb890e2850634a3030a62ee426a24d4650208cecd9fee4e8c894b5241a4f68723ac53a27ddbd2798d9f55a2296d1b41857ba77a3a7cf99d00834a762283468e575b45ae116230b7d859b834f4d3691ecfbe62d7f3c6484a7dc95c862289597ec9df80b0f1c1b070b8f248ab3951d8dc8a42eeb42cf5848e2b63f1f7c6d012e4944fef82b0f580a53bcaf2d355c67369d6d84567c244268966ea0e186dec0a784fbf1c237e65738180a61c207b31e7164c1c17569ae5a6ae73ec293eb105b8b3df1140c5452652467b06139785e5a3183db136ddd44442ef8ccbef2dd83ff427f82e05c442b7af1a96a264027bdb64093587ae19dbb280a74f0b2094905832b6c90c20d347d4b32fad96075aa9d0c2beac8191f1051e61e3d306b2d9ab5e3e9a7649f3702d0e7cab23be650d97bf8b2a3621b0b4cd9bdf157d6778187b0bcd25ce3597e0a7d99674d3f1fb1228e965afc9d94e9b4fd4c4323e03e3cd962994182a4025b790187f0600ef7880ad5e471897d156bc29684614505531c75ec084b0067a0853fde25dbfe508c0e4d967c0a4256b905065decd8bf46521737f6518d9046f1386ad9f26e08cb77b109d3a962757894c6ebf7d5488e8605ddbbaaa451afc02d4862c8a1e0c108504e105ae6bcab93c4d50a5e07a68d28cd7b00efc2deb5f1f9021ebd5d0788b7813826db7e6f894be31b5517fb752768171a27103943dff7412b2f778c549dd21f30c38e2c42143759d13c4d6cd36bff7eb4fb70cc0e4a930fe15ee38869cb53c9945009856a930e95c82c381b1761b72eace8b624e0e585a3751953caef77f0993e1463b00c19e2c766d4b2142a84fbc5800fcd2e2624ad5053abc8925ffe17005d127f7249e94c1f263ea48a882617bae3e62fb35dca47497a6698d2db42532c53d98b5bdfa5f48595d71f47777707e4615008b0c42d41bb4d2d6eb1f3d6356b2660b0790b557c2b097a77dc645534c03eb55130b248e2c25dbb002077e26d958261089677e1f397db980120f4f547349ca1981a690ceb4d95ba704801d4757e8708409661ca303d52e7dcab722a45a9430328c4d3d3b5be86f8f7a26fcd92dc1f1278fc5e6c6d1aa041bc7f88867db24249b8593358388d55951fa54df7cfa519343b59f9726508e5839bf96294cd17c5dfe271adaea4420ada9f62005b0ccdb3e24c0cad4f080b7ea928098e18c5801e9806e94ed109c9ce668508da835a77b63367d6ac701a5c4bca989a776db59d82c459d6c0eca06305f23e13ae0ecd5b4234a7165126ec77e9f7240a63ac2818ae3d7091f55c69fd6e9703434f640742e80c9eeefacb653617ca6ec555737d88e62cace7cd5bd25514f73f5872910baa85576b17aa0958ef9850541a47f7636a2048815ab6f6887a7befe6c001e6de4f0f406c819e3a0e1b485c36c0c5a9cf03341d27b896c0ff9d0d181b51d2b6fe9dce889dc4c7a42918cfb6d0b6ebe424d75bf738815920831fb7cb9fe063ca490a2f77c92e3ab87e75eb6b7e684d798b1d57bca15af3512657c72c589ffa60e40430e7757e97a790978081bcbf605996b8bd970ac2135d505a786f42d32c5d4d0e2f2093aeff4219efb96fb9410d6d5a938fc0301429bf19783605862f2719e4f8b8d4ebe4ce50bbd8727ce42f8df52970df9b85e2f15bda398b46b6e44e8dac59581c59d941847f757754799cd57dd9b7cf53956fd53f33f918ec180f56468eee7410b0ad03bb2ff438f5fa402de3f7636f65195e01751db8e8bf3f09c513cea1531413edc7ec4350653010f7d4a2b8149baa0f668cc3078330e32cea940a5cdf89a7cf11296222f564394828d65afa255685618a4b5571822a6ae2140fa39c951deef94f204ae1287a9235a478a8fa7cc231ca00aea730c1ea182f8b1ad813978fe64f0e74e221be0b83b300aa2a8c1aea2a0bac9f3e3434581433dff520c8899eca4d2cbbd6d27593b66f84258b78319de61393ed6ed85a177313144e1d6a08285ba3fe2d7d2d3fb8225255b14847232d4e86761d191383113800de05b83ea5c9d8e9a62358e216fa79c0a46d7e0a02e456a600657608a67431f5cf74a20b090540baaa0b09a85e7d6f2e9f86ec5aa447019c5926bdb1618b9646bd633a906f3fa7fee6aed94aad7f8508b1213690368063fbf947ea8d09c590e0ff2ad8113786890e76fe1b11845e1719689aa5f884720fdc564a0cdcdb0847721c41c04e9975c527f3375c4696d570d895aef6187396ce75a5640be8311251fdb7216c4c6bdf31bae7483719d2637637e96ea378f979962dbc08ed52fe745d4c106e632d25132eb3d7ca57eebe2ee8353e133d95b335b96ea29e12c12f6967751613320b223d888b0613f5175cded260cf032ecc9d25ae0bbaa1a56f8c41bf2bd75fc81d9222d6d801ae8dadca0542e5fbef719c674d6a39167916a87666ad8dbd790511204db1a5d72d8d0b1b86346d57ddf253022645ecb777ab3b8c9eb6f67a552a15b93ab5a4d3e867ddac6acd915f01f6f1e6bf82bc3af10c99c8106d08e471d44f11201c04c2fa350d1f98d143e7d8001365662aaba6c3efe9567e958574a9e0a8a7661bfd674827db6e79094ddba09b264d2f56fa0d1303bdbcbeebbe83b46007a5633c7d095aeb1b32326db1aa31d325a5b39d37c9a6909ddcaaf791a1bd87e1121606762fa6546c2f11b317bff3c2c805215d6b4b11bc888685985a520b264e62e619aab11f8aeb96e6327cd89488e1c862e13c4612fbc542d111dd5a7c11288aa36c395969f0839dedb3397304006702250722450aaa931480e25965b3a6dc6af26ea3c746086c869d3cc0de61b13a3ecb8670fe68518f6e5e77732a1f77b9d774e4857268b18ba5e8612b93861197234ad3fe1080ce2d29b2a675b06a9305310e978a1a5e24957850454b48aadfcd908ab7d523f8acd950ccaf286593f9e6f08153ac2b91115cf72d048a6433c7d00232a4be4805cc5b4263a8ca90879ed8318519ac00d09b8469a753f410310ca46cc42399200208e670c616b277e6703ee3096245aa90f926da70dc03052d44384001b6290727a18b82213bc479a5e263707b3b46b2f15cfd7b98387c2a5c52708e280887265f5aef15279dad622c2aef7ee470a35fd749cc677a1ab39d6fcf245a714c1f1d571cda4d1aaf7b3c0f4c6f3e3a4acab28591a95bef6184c6e9b35b115ecc0901888b5f12f569bc2bff18a967b3e317868a38bb305a2bcd78ab26ad6eaed850a6d26b9dd9cb955ce76c8bd1b6935baceb35ae570ce7a20503c36f31ac5351b09d58c9e48bf31d3aab0f91fd5c6c91d67ab4bad32b895fa690e11f18193a6584a2e4afa2aedbbb30b9b9146f4596164b14654b560d71f7255a43439db5c34f7782600c986a431b7dba5ee24077c445790cb763e05053ca7a2a4be49753b3dd3d0b0251c2c27aee9c1ebe7e102037c751a0acec3bfc25e6968ecf1b76c716dd06315b0c1300fba21276a9a179c4cd7584d498af4d9dbda7a3f2baca14991f51b8f798411f026e7c8f820eb26dcf25c15b9a33385a8b40ebd210e8c51e7bdb3e6a474ae662473a8e8ed4294d5abc8cd30e9124e9e18a328a17e9115f7e9fa025e8d60695bc84111d1f816b60eb0b053000ac280755b9626184d09e28e136a9602d883bd96b3413d507797ea26c4cb10f2e167a8512e0a6b4d32a3b005676c35bb5825edf88c7f0be73c7ad96bbf37af1b69cf77d02ccb0450f82a2a0f6b63e607b8e9bbb6d5447dcb062414ab2d5014d2f9718ee6accd20189937e592afb501f623e6df749775801bbbd9969588ea6e4384a0e04e4ec58a7d83f8467714d31f374f7072d1e15a17277bf0f8f6b1ca2f8e1316b1999dc8f618225be5ae45306b8b12e00c077d6e6ff69bdf38f19570278f7ec1fb398a9429f69095e428b65a868dfdfd741823c83c760fcea8627439350667b9d1281206f067633e9903e16ef56b46318c243cdfe31240a34950dc843db8ee372387fd9f3934eab9559b109c8e06950988fb15ed71983791d5286a6c409832aa693c395fe6732702623e138c8d4d75bb255728404289b311f7a5177bb610e908ebe5f58cf26ef0f1a86673331c126d456f56b5d748f0e90bfb7322df90d98dd76da0e468b61cf7e4d174f26070b9962302c06244c1809dfc36cda192aff4914698bdaca3be6a695968e1c3afa0d1c8d2a7545408debd3e6795830fef8fa39e670a0587f44bae591d9bb9886e4637d5ea08db97abf51c8dde7d71d1323e68384955f8187c00573b7f03576fd8cbdef17e1c7d5ff9a447cf7d1e7cc4442bba4283fadf22fe2c103ffe729aa9ec734f481d0c59c16ae2dd93a1e6611e887c7b804db5861e675dc9e5705f7d2dea0d8b8f1def25b82acd007ee6c95c214fdbaab3787a468de454d684bd180cb0cd7a1a37b4530e1e1fbae21fb89119c82fcda934e100307c84f0e8aa8ae94cefec8810d24f614f3a2a7fbaf7f13511891e41a9c17310dfd353678e3145b2e061b2e04643908b483d2f76d07465f6c31fbf39a03a7f5ce7eaa328c1f24c32f2d5c083941c1358c2739396fe422a2d35ca5a501f7cfbf4b722045a1b322a6db2dcbc1d29b9cd37efec0c563876e641d613556719b556e48264d46883124eba9ed87a6c2f17e59aa9851efc34b9fb805a497e500e683551aa68c00dc13f455b8e43f105c070cb1ed580ed3e112edfa2cb41c17b8ccef92ad8627f59b0797ad8fa9ae3a74cb8904d879dd925ea7882d75877b083fd23a16c99a6981a62a6835f7cee1a8fd421813ed0f183f72ee4363b63097033f8dcf68ff22737c7a17810d5519020b32b5e7a1211054dc5a25d2da22015f714360ec12ec60d7778daaabbc4b118c729980e97618cb360b1087d55ad8f14c3370c029215381177d35725522f8460ee1e3a4e3f15eeb00fa2d411e0118d8d8e049049a371728484934039c4460b725bb313ef9ca9ec2644ac683a95788514de02a7e2d4d85c038bdc3e57898b2bbe809011d4e56b70ba82a33824b3a7a643160019b6eb88c74db8df2b2aad91e1ddef450c404eca88b363c259320e6dc9270b62e23d167364013662f9b8f8576e12b7e0dc2f66536397cf703e39e2f180b81d868c565621bef6487e49bc01327de4d18da36b410789180a86f1da88dab5b01662d345eb8cec8e55d1cc08fac01a85ae3cbcc688941890bf04859f757de89fdcc6cfacc5afa19476e140a2009dedc59d58f5ee12f5d7a446733761e63fcf9cdade66c3101622afdb89b6d36659c6e632cc9f678aa39818ff6c3812541c247a59d561bc0a198dcfbbd6d40c1caed68829b5ba8482dbe346326de0682fa36c844b65220b5ade504a30e32f5f413c2436d2587ac94022e3eb87377c3c0a4bbd19bc15d7dc5e04888e131a721a508a19837ba752b2e7d130d634860ace2cfe4d3e6b8044b27809b8c42847b25c59b0d2c960d643d77be45b82b055da345a04526541695d60ea77b596202d0a03331530067733b57d5a93d2caa000509246f0327814722e3c602d275c1666baa04daef8bbd3992f6b9531ea5525abdc572d98e349b06774cd8871606943df628ba91fd5386ce878f2625d89c49b6c437bde10eb70455bf00b3f160615dbde99467244a85231a435a44a727d55288ccf9e4303f88b9eeed75681ec2e6404d08cc7fedda07dd9ab25629f873abf58c3ae825e0e9a6b93b70a7b1092b0f52cd423cc3df3654af21be51f00c3f3a0dd940bb76d4aa54b8b6809bfc15cd9899d691322a89f7948b073c8c2e57543e1093214e7c3c6245e81eb908044b275bf6e179f9fc23ff657944825910a09d70b37c3e45fa472e5ab4f93177f9186c50d0da6ba185996fade750ce5f46928b180b1ccd41ce83c982e071a1edd7eb56a283c05ddc1535b6095aa81ee9f5d7de8341724e5091f81261e82f6b48c37bb3be7caf643fecc4aa334d627aee77b4bb599402b1210fce86afd69eb2fc36a0bc88a6f9e6d565e0d78f1220fb888203518138a85a664761df51688f16109e1b11abe2f942ceff57569ca9914891101e8db19240aecbea2cc88ec4cab5b37373cd5475726da29b9c632312d0e35ae7be227dadb5af53882685080c11a7eb911f749b3e9d10837d599c2f3affda9a1e5487081d6a126f1d302c2decb90a4fea3ded0f50dfdac90fbae360bdd2ea3f73c78a15ad253c770cc0e0b905d686d8ffd0ed7c1b8369ef682d3fd2aac5a707e18e0cb702dc0fff1603c22aa0a9177e7d61a868adc304c8a24713cef8008c1e17bd104e43781b67e8eee7cf2a9fe1d7d2ff80297f5b73ac786c504038bb4f51c7043e895bc5b5593f3caf9dccddf9f186281a701264001305b818c6a4fb503aa252ee0009052397cef9f99161214597eac060f46a0ce4b7e1039a4856963cdae10aa6f3ad08f26fd6afd0202baa138d48f00cc87962f707fe9bfdb9d14bc2bb9e4e5df121e75c82c26aa06ce217a841fdac8c429f954c290ce4679541608d306eeac032ae210b4dd8ee96762a8fc4a65b03902d332be62224681077f0d341827285099235f0932041d9a402a3a09e05095ae2771a4a88763ffa08ca1d7414f6114434894c93427ac76de765e6ae151bcf0638b1bed789f108124be2d59319a6b26a1640a1b855915173b52f26f51e3b83bac493f33dbb0c8ec1994e4a13d15c3dadb257dabda19742368030c4818cd443908c4168c81034708b816ea17da797c9067be2f1a120c0304de348c0e8e76c8897d87f6aa943989e8b7d4bd0ae3e4d003a87b43c1025001d6bf5d609b0171b8ccbe44ca01dd557f1cc5ee114f7bd8424f3ee27bca1dbe50830c2eee2964e050d33abf2ae55e8a020e77420a05da6bd4a39adabfc806e2f629d87b30ae7f7f12a7e5e2f4dfcd06940b60af84c622f48511a96d5783a38e11e996a6ab933ddab442724ce8c8e7730b2dcca0b36f76d5d6aed4f402a00e3eda0f52b4b6931292fcf7b532576519f81654607c770c691183623a376b77de46367740850e6c1f889d2c03dac5b00a514f7fdb02a3094e60550258015730b96a39fe351d843c25e698ad0ea5a089464bfaf7b61a070b4f74740761a249552f390ed031dc4860188084a59f802107cb69e8ec7583baef4fc0f4b206e380babc674d105009fbe650d990366196559a80da2db63099d011843d5ea1fcea58ce08d819c627770634c291593418bd0946f6418398dcf2ea4adc44883b250f510471665895df29ee7688b08662cd7189689ed9410603876daeaa4231735f9b3a7b72e38760b999db5298411ae3aacca4aa8c4b323941aaaea613f75aadc39cc07b84dae2b092366da6b274378d5c49bd4f0124c7877bde53a7b34a4d75dae431d1f10926b2ccf6187727e6048af5d5e871dc221e8f810a4a367186353999d2415d1a5b6cc955da98c6b3913a293982b59a948e9beaea12b95ed615d2cbb2e884c650f76b6b6af8ec30fe831412c5121ae8692a91a8413fbdf55599fa664033e5266ca5f03f5551615fe706ae72ac100d97b5f5917687e0c4049a5ec9e00077386f46307ac460d8c4da41bda9ef1fb9a23a05f19b432573ee777c174bedb53ab6e752eddf2ccd59702b8f3db8d0c30276a4fd408a2605c2d21010538964d2414eb438d03023a0a9f809b5606329262b0410d0529f854988835d28301a1857c8d0442f5bfb7b3994fbeaf73cad66800e1980a84ffe21297eb59639c571d3b794807465b7a9f9617102b47935087cd7b4e58f95b7f338209e00d4dea0cb24982768af8439bdc9366ef69459da9feb39134f93d064e9f857b50a7a724758a1ae6a5951fd6ec2de75ddb8862eba109a89c5a21539e8131530f9fb653e083a9e638cdc399d3230c3a92aac10955f6d0bd6609b185a66474bfdb4d7d006ed846866dc6b34516c98bd43aa4e3bed17c18d5eaef2802f2208b720d7fa50e081ea835b08c76236722b4b58500a1e3e612bb885de7ebf7eed50c42ba4136859d822be03b95971c769b7326ca6a4d9b40ce780f98d85d48eda67779464d85316f903009371e80d81ac6dc237f585f088e0327719a3fa36cf5dc9b03ece3d3703988455aed314ca1a60395f1019753819489f6338744f9692cd4bc73c5dcf57061294245808d68651c7144a66464ad93d99f1e82695c40523364a83eee46bb457a7c6a6860ba02ed2e3efdf1369cee7697a6d26c08cafc2cbd2fd9faa2cfa3953d8f36e266d7a0b4df0aaeddc2a6af590c177a17149e79ea7cfb85e44398b3d12aabf09742263d47455df2a23a0a01b43528f86cc6e837e3c9bd197c55e21ac95a5164869d781dca1fa83654c1b82c185bb16ef0da5eb5f562981009040d1778b8252d06a5785c8d063040cf7878c42f8ca914a940ed63f303dc036387a58a4cbc6580b576989d28bc819f999203f36f3dbd60005878d4707d119b9e16cc07e8039251bf96801c774351ce7ef40d29d0c430eb38b4041d2223f08e7e86e5bf765a6597c5c665e0cb09c0e756c4cf819ad9575de6520519d6e61e41fba0a32074d8f4d30a3efb74aea5b962ea6f264a1d9548c04130dc8019f60a714827b65bbb035a0d93ac8470fd4b7c4331d08ca0bebce5ecf1996bacd69825dd812c05c5fe0c07a7b8c32e8e553c857d09ccdf8add0e257c360eebb6d08d1f58689f223db156ab98fc335fb1781e6c6153d6f75309411d5bb71a62893753fba039bd98c2f0b04bf3452ce741ecba126e10814ef42f5e12476024ec80ae4cc187dcb68229161d88576e6ac8292b99240297b4926466cd399da58c47d2bab7dbcaba8097ee637654218de466fd86db335f03e44aa5851cba36d7cdd0c959cfc740b1f75d09901be524d17b70394064a87e2a1ae99e69561d5fa96f7646e572d27a3b32e18728a80b3ea82fc236d6045c0439fd87cb83606cd1da6aa3a19a856f60e7e684175df997f477f7d4a6f847608287a1356ae9d08d0b8f4ae1130781de85c2e1db9ef160afc0e465d3ade3f3d199ea1a11b5415250106d9b6d72fbc7c0ddb2673ece2f972979e319df853659abe8fca182f4e72850b3f1d0d6856360142cd98a31ca6f1b2fe24f1c107259680e41a1d7466ec6899330ca69f01c633d9a70b6fa4bf53c6260b4310e2964e134943ab4b964e65e480b6c3f782438831797650ec3f4fd949b04a092b07d42ca1a4268b2a781cd0e158f2df42a07722dbda87ec8a5a758b9448ac19155de1a8b65b915c39f684617c49f49c40d38fbec628933a2a60a4ad4e3133d0752bc7d64ef3515aff93129dd858af3eb43da8b215055ce1e44ab36b1529d901495da7791d2ed091839e9562b0443576a18b5f2333a4520dd54bd1609fd8c19d0770b0bba994d3e444c6ac7aadea3f5a0e8f99c5d37321aa4b241ff693581be8d59bedfec4159f629b711875828d1c4772db9df3910009459c6673c36603aced770a89b6357d2783c3627abacacc7786c0082dd83d51fdf85bb2c2cf058b769b5dc37e1f4a69b2b342c5db5a93df93e6d8512dd5d9d74e9003a6a84cac1920a821909b77d86892984423261a14ee5521c9794e891b953428c9bd77d5b251cd6a02cb70f441e3bb3ad46006e035b74d9536a99126c64597841296e83e2d5bee32574bb4defc0686995fe694f1a34822ccb9bcb7bed3a794b16952a50810931778ded8a0746d9a9bfbe42739c4a28b6714fd58b735d100c14af72d7dc4f6734258ef4744652f19dcc466e6ba262b8410d5da4bbb2cbae46c075838857c3b26e76d1d5b81bb7669d35f9cad1dfd8d25001c3a5dadd16f369f4556a500f6421bbc97694295da29a94c7ef03fd27da77ff095bdf36bf256957e9d7e8249f19ac4981b0a4b0c7d50bdf82b3e5688668039efc1ad94a85cb0f84c7b2f6132aa57848c6ce92189e99f9e906b9ead69e79389b7cd5d10ccb0134c1cff70779e7de1975da6e24456ff2ae13b2e45827f0490ee798fbb013bf7b1a7fcb95faaa8064a6fca6e37bbac8848dd922bc4c0a7debeb85f71b81c71521cd1221557245081e775a133cb22ee67b1e572ed2e9d58cbb4a70021e957fd30c8ba606a50bcaf20bc603e3981f2f18ef34378db8b360db8e6203286d9397f4fa846c987e6b1bb15500a320b3017e5e9803be34b421c02a28fcb26aa469de4f096e43215b7e80656265af74dd18b09044f947773c9c9ef5a80b766827c0d2b4b0a40538adadee51ffcba252d2380f81763ff3bc9c6cf331d7c6fd2136aac05ea9816a3f7c983d3dd61715e1c30b2f6cb6adedc28e0260c06e8ead1648395f190dc137efb33745757e6ac50a890f3c46037ba43967a067349aed5531ffc751cec71bb916872c27fe1b392044e54e82d585ea026a5d6c4f02c899ee6c6924aa93ea96dc773ed79db711cae41c6a26f77b21479710a8405b28c4c4a2b23533849c3d0be9fb492a1005563a1dcadc1f30c3740f9558676929277b002e5566f0cf37d51a30978965316e7d50a46bd4fc06a08438edcbfde055267cb48c3bbc5217e17870cbafb13738002be602038e7bb715ea065f4711c8a370e635a06d3f8c8ad177e8f4475392d8a28303a4a1d5eac39a67e2dd67b00f6f6b97a3355fe7c253f1c6e86f10e404d9c9daee64b58ab9c38b829d896cf4a3906f0c44688e228264e7070b88b8cce228cceba4f98e708f6e3f63c20e59c4e32ad12ba164404c78c749f5a6b8bf2f8447b8c70b21652e697af0de9e58cba29a1b2ac8b8300b024599badf22ecc022e9d0fe59467036db592a9f2839b16082394d3cc0fd6ea4162c390032c8926002cc68294c1987f919696fa8454b34229aa8c6d4a7de5f18e8b8e4da771f437404c803662852179d03a76e4f8a14965b86261d551ad4a3e322866b19001b71d7ce14fe5ba19401a9118e4a6d73b316324e1f4dccf952ff1b9c0b16e0ef59765a3decfd4bf797d3430f902df22fee0f8bf280437f716bd69e0953795757e45a914745fdadb0f1b1e42957ab3ceec236e48757d5624b5e9b836a3a5d0af31cb610343991023a7a17a7d1a6045fd100f49092d4d78373302b0e9b1384f5ad221fda005d7058ab321c8bb2f34fea55d4890e8353ebd2da44b3af24a7df41c56ce110eebef80caa3cc526e2af3a849ca1d1aff2d5587dc021a4561350e9a232b92c268643104da58710815486298258ce6009df1ee02e85bbc4464d514d9360758b73868592f3d19d9ddd0060d166e87b69c6ac57387848ffa6e9ea3887a571dee769842054e94f3aa36f8ec68a5647e6b2530ba630cef774b615ca3ffdd3fac8245918ead28fd59668cefc42d0fbca4789fa9905a864b029c52a1089e16e30d27707eac21052eb5f65a01f0414d7cb49142d58ee18cfe6bc30f7e35b590840d57c10575023f6cfdb10884003789c1362470febc5b0294b6db0dd4fb470031eaa1360ffbc9bc485008f93cff9e2967603c3ae8c4d1668e8c484d4a11ffd4b0b9cd53b6af6e99781f821c666f0cfe6be97e69fa42333f7f5e07822f531ed5dbb861c5604eab62f8dcfeeab24acfb1e1c2021b4131df474e9c842cdf59d12ba04398952e7b59aa301ced28cd39846b8df37437816e3363371b15ee4559b2cdfd21c6794e8dac1bcc894d3995952b1a2cd4b715555cc7421588562764d278443752daebb970d1af3803aab93eb9bc166689d552edffdcbe29701d70fd4217b421f54d071fb59ca561c76a8c592138f2bc259afcc0a677937b71f322189962902549bca3b44dd03790f6aa24d2c73bee93dd6f6d26ee158fc2225ba8b886eb88f510646d317eac7be423341482759374490b736c8b1ba9938f9b0cbe73ed2b7bc0850f73cc977aa046fb5a8f3516c21e2ad9544060e32da07441450dc3328b4f3c1150caf2751a6df33c732c9afc894fcb34fecc1fcc3e79afab3c93e6147eab832cf0336ee999241d48b0ba24e60c77ba6ccefa36b6586f44d969a59d5af8f96792bc4e22efc892b88a61f905950a9688e621892510421d2947e230707f9cc91cf7ff53a712d9325e699a94ef6cc78814ef9349dca0c082114afd717a48c2d28617ce2dcfb25e152aeb30531a1a29d2dc097e1217fa098862336bfb8053ffef2ad4c880b18f359d72acfd40d2153ae61003adfabf24c361f4e2bcf8121fdf927f385ca79ee6b6e6ae80db55501d3287cb7917b73b7b33c6baec1a1e7425c1f7afd2942142205c4dd77c12c2aedd03938c4afb83be4b994cce25371a165990438ad3b988f6e8c8de95a9eefe0ae3be72fcf6592f23cecac484e91bee3a6f28f0b7177104bf33af0b25e320171e855c72013869e5aee78a4ee88050b46f19100b00d6fd7b2486cc1cb18d9b7fade5e92163a9a68e1a5b599e1ea6114786f89108d370219d92790d132f45c49b5967aa36fcad49625850cfd6a28e0769606fb899ec51a634de0aa0c740053ec940bf55539b6f8c6f02a5aa7d98cbabb80d07bdcb0a0bf916d6e0507135d9234d92be1860edc9376747adda74969c2115a8dbe5ccd795efcae979e34bdea6e432cd2f3578b1a4fcb4f9b350b7f1036c6add0354a9c66e19eebbe6841dc2be7d9d74410aa983e10a862e3d23c874843d03cffedebe0fafd45f3e5d607c5291aedd2cd4bc3cd03af64bb0c19c6816a27d93fc01c4a869df2250657ee60e6123ebc70c3010352e9a28f12d83ff6de11bd9750e4f2f13262b7c8f0f71f505cfc661788fd41adf5817f814d814ae84bebc0294cd83d69928d4b434fd226c513823e90334c76e626d8e2cd614a8f602b9e4492af81df154c7e9854b1851cbfb09bc82fe937e5840ca38a67d0a7d67a4487a32faa8f4593a58dd148f1f36ea1adb27a110369489a37227cd017256e94800405e102f098c3e28c6981d65fb200d0d9c4a0766b7f9f4bf08ae79d399e17e4517e45c137c273cfba3af79910084432906a1d54077777d6ae540bb6e8428070e23e3259ed4942a644f19d0390778e2c2d4bd45720ea38e0872cc011681e9a74c004343e3c59ef7c68ab93c9b2747b1b16f2d3d7846645b825b3ad28198fb88fe0479a0a4a53dbd95bc8e2fa517c01dc1d304aae6d5927035ab90d645d69f4b5a99c7a2069bb7e035d98635f7098ed2942618e2796d04c233871f8a1a58d68019287c5edecb0ea3714177b8192c75fcc254a3f2175cbdb84b6d173edc931e22e5097fc47ca89070edbc0b65adbb29a2bd40003a5cbff4d33085414bba9ec354667f2e57d921258184cf0161c5ae35afab1561c0f10d905ca830e52495f9e7e6df78e41d1cab9d8b7253fed5b5f5a5d9198f2ba5d2c51e31009aeecdcd8cbfa853fe83466eb74ab91b94e4ce100884cab6bb9b2d36a7d1e57c1ed7df2c3ffa2cdc3b6d7d07639facbe789c6c3f5b83f9d8628b03d741ebdc3620f03230fc55c901c7c80f8ecc273b48a3dc4d5f72fecc404a1b81daac66027b9612479036c9804bcd99df90a3bbc5789fae60d6045379aa1a17e9470f66fc2587ce4ecf5b7066102df64a17519b188f19bb3d7e0bd0ed528073feaa3909cddedc20ab6bad95f08bd29fed1e98c2c7591503a5611ea42592ec42deaf166f66f123aa39cd2ae97dcfc525b7484c4d6f184f00cc2db5c4dbbb0fe10a28d799cec6a97d608241e58a2338554edd2c5cfd14753dcf80fd9e8214942ef959a6d9704293db774367b2548d2fbd2b2d18112c63d88a1babb0fb3d5972445d797ce66a744523ab7b46c7baa84e13e89e8b9a06c69c45ab65d96b6ee84bda5872d484cfffae2e34043bc750a1d9a99e3a1cc6f96f481cbc249b4b309afcbf69b9f1b5d4c20f45c1732c742f02f2008a40f991632b35ac635d11288397a5ada6f7f1c933a8359b661b8d1f07989edba7dd3a39a4d2482afecebbfef3c119aab599364de0e64e3c184d6e7fc85dbb19cfd41302f1ec9deca269ccfb5c928be2df5afae9b90bce8fffc31c2d17fdd44f9ccdd616651ae2b9357213541e5b30cf405e203ea7b713984e01c553fb7c56bd00b64b92418d766623c5ce7f4d8254879fa95d47917c0fee67089ccdb10e2ca36a0444ae671cf723ee3fdda522837af22ba70ce943266553bd02288b42d421121e89dc57a3bf1c6cfdf2e8abbff301b3d9248e8bdd2d9769320a5734bcb669f49a87d8842419bf97069b7b47cecadb72de81ce3e1190eb32ec88e2e6c534bdac15e7cbc233bd93906c5da8c912b42bf5e5d9dcb6ad3628aac04c01725432cbe4a128ca764d88e79432d846507de001700eba35884389e31e971c28a6813906c2aa1299edddcc5214da9d1306f986b49427fdf3bdb41490adbc08b0e843b68e7a3bb933febf164204efe3a7335f4441a5593d05d142f40fb6458cbb90a44fcbd0718f22aff6448d51e31b3603d395ad00669054764241b564fa60ce4036741dfaac0c2ca14259842a272b3c65ddb47021a562c97d5d3a56542baa4c858b7ec768c58991d298fdff00dd87e115de500f54c67553625e4d24d9f019741ea76ffba20843233c443ac64d25a462043893209e58d95b076b8a1565bb735d6c576eb552c07190a834725df151a4238bafdaf77efe26470613f3d26a8b062d0a26eba247560f0cba75d09105caed747887e5cd111023965031680fc0e7765ad9bafff0b77bf86c8d786ad6bf405c84aa470a8723402153b8c9e0a4e7222ecb7e3fa47cae3d2c0d23884bd8749d5cf8739eccf65e72796c4e24242413fdabc15adc088e7a2445b57b045f12761a38f068c20590ce27c48159d4f722776616dcd66e0b17d804fd454426c9000787b743b96b936dd156c28f6acec6900faca79be5063c4306ab361746cfbd231b34f5ab4a32ed6b2c1dd352343dc109a2a14929aa27eb14df397030c9bf65114048cebc8b6c8852867720318212d12803d57721113668230b096abd811c7b48f350b320d829a9b9a8513756cce86f10e10bfd5c3d79f7e96f29b2a293b18da08ffae75c6efaaf6a05c4c409d0032e10d0d08b1be2415d5fc7512dda54707d3eb46e2bc716ef26a682bd1ea8b13d103bf384ffc1b4d37f2395f148013c0231ff8fb9622eb4483c98bf560e5669c5183983dcbcb237eae90b4b4fe367708edbcefbc630ea16d03e38f4dffef5f239e4fc3394bc286790cbcc28a7ce7b140dbe996c542805a2b943e5cf8ab3a2899f693b709adc057d87b0af5b456a20cbc373e630b568d9a22b82c9d1bb1d69ce4945b04baa0c404a63250dbaa71023758bc6c8aa4d61b4aff58a3330c86d22ecc3d6461161cc601a2f3c1b5b17ef8e88a403f3eb386ea5cd6cd0cc8d31f8df23681540dfc1a3310e082b3af6f1e7928fc2fa9dbe61c6d66bb8624a3c1eb0312fba72407f3f19fc6063d48ea8e8e61ea6d67c8a7e1208b430c8a6894060d3c74ed39f5c16b480859a16991b4c9c944d2515259d60e34414056c2f9246da958ae3ca4875404e7554dde7d9c367685087d775e0ae562fb3ea39f52d1c9a590a5f631605b72f3f9049bb3c71da34eadb2edb9e070ba53210800ca6d98370900b026c093e3a3f6576b50e3765a8c231618488581a98ebe9bb702c85acfae924f20485f879208a90d457e04c5eb3adb543db722a974c67ab5ab56f100ed14c27dbc1b89b2cc269ed6d2e2eeee230326c248ad4ff499861c0c4aeaa945176dc9964022acd978e988e1cedd1fe961e4af821771f7d2776960c5fd52d64c63435284086240b70d7e5e42815fe149fd3c17decc5363f639e8bd23cbe1788c0c506c52f2f91e51d619e0e4d3998cca4dcd67b165e7ad29e1e2fc1e32192594127d90483a4c8e37712aff481c17e0c09d58c22153025b511e7027b48970eb10e6ecf30ea7c1dc4876459634fa2416a67393f15cf48ed0458132922d4b4cc2e4f43309d1ffedc451cc4f0c08f00191d48bb88b02746868f28080eab4e50643803e9204f92952cb82bbc658a9fb3ac13ba4933f6536bb8969b1d6afc583147e25344b0f8662b4859e9583496e30476153d49a0c3f45371641c42a4f3f41e9260f846e0cf69f7cf8dc51d1ff21078baad042147c2f58d38290fd1f7f0bd2f80e0a6ad9edf904535361936fcb915a54d31d1338e370809175e0c1845c30648ad910d46eadcaab0b78746776898d091db75b948a663e8f6ec4ca92c257be046d13814fa1d67bc18816d673b06286040bb6f79e57e0a53036e3402e9260e54d63cd7495428cf5d40f92190f2d35d8a528288d111223e17fa530fdfc2304188739ae1395960475c8b4b4d67bb80c0c9de97c2439bf1a74d29aa0e64792a0cea438dff970dd8b4627920ea2d7a5b1a697b274451f49d1537ca958754814f3698d348faa130f83befe8087594f916ee2884f9a68f476b728ce9aee9abf4c476dfa416d1209d1680caa7fc5624987e9d1fc597e9590b7e6fca1c9f746587ee987d71d481a11970ea73f10b244bd86376cc929f50a03f3719ee93fca59b4d24ad96a65e9534dc9993beac15f4937cab61b5106414913f10f9f06bd823ee3b7eef84d657a3100d5dec2e4ab353374e333cc902fb90806049b374afdbe2971a5063bc6726d8a517338c3f44d7f2b3546537900996f22e24a0d79128f8c9e8399963cea6bb899b5600e631ca7415c981a029b9e0c59d5a4f24da5e38d0c5bf3069e85b0fd2f9599b339411b112e62802fa2296fb05bd822e4505cccc028ab9cb1e20deba064f76bde804f94066cccb76f301bdcc1a77fb65150105154443042fee8f3f7a7e1f481e29b0dff24233126a556b4f255283e5cace9a9d19b886b2964650e64dbf4308187e7ef89ceffd82615eea84a537dfe3f6f9de0c090a7ff4d5650628239070fffca466afbea25c1eb5f9230c26525b88578dfb1479a938cb1d0a97efe33c81ddbe8d0effea3e571b0cac5a182bc07c40ade0f0c687ac9aa6dc7c320bb2890040990c6e3f4c2bd203f7059a5d3887de700efe53ce0b5ec11f5ab5474d48d080fb4d212066fd0cbaacee083bd8d2706bbd7a5d8dcccdec61da126f86a3a64e4c101009fd629dc75a57080471d420e7dcbe714e6959cc6f3c26a1234608f2b8b908a439dfaede625264478b0c73b95fec685dfa0177e9e51e0ed5330e5cd1ca77b0fb47da7221e4131af33fe3d69cb236b31bc3eb748dd4c303c84700b6ba79ef02786ef6b3bbe993486a34ed7e19b5bd10b1f8f1cafe5a834279107f41778cc527708686137271d3735e8020e7171c4c7a2501248c48c2a4920cae724bc32cb1e867da9646ba1bab446f804a2af6ea1fcabe3fa4788032adadb8c2c01db8f8dff98e7b7a7061f82468af0987affa82a5bdd5a2508655311279dd5ade36e2529dbdfc521aee5c73707a1db67f89688f7b1c8a72e6d92ef66bb4c830cf73f4251ce13f8323852efce0cd667506a46b74788ab0f883bc7c886cfff525ee9e9ac2f7ecb83bdd5d82e9616b28e0758d3486361db60bdd3c2af70c0bfe88abe706a974afad39dd012fd52224269dc28bc0e9009ec01ecfeb150f097472e469f53f42c6b085eae119b98d6875ed4b9e161a22832843771da07c23a0206a1695bf56bc164386da2502b957b2456f7b2d77fb3354a39d2a3c775d5d9b85c90a9bb724692292ceb31660a7e30102bb2858a3d068cad9befabee717a52b1beee4cb5e4a534d8db412b1989feb5032a0532726088fb2460efea73850f3ef1b01e8415ae7ec8c8d1e281ccc27f8b737907239264b16f9488599eafa4bf5267dd84954188b773b747a95a927b9b96379d3954ebf70ef25df0802cd670adbf9df6407bcd0e1e062e28a2b75f1181bb6e933b9741001cbc9602bed195f540e858c35d8a4b48379d0a41a87364446cabee351f2bcc80e39b94928535db33378272228a50419243f57612f7cbb8e0789f8de221d12e504d694fbd3395470efcc66820453b3215fc7c29aa9b33627c0471bf5a183a33056adaed24ee1a6c0ea2fe95765119f159324a58913bc76090499277fbf074a3915574af9f78f2ba699f471eed954341d4d939171869f2b49608a524bcc84c40d5563ada1397cbb8a136d081caab97a1bc501778f8d7d725c11abac92efcc23c7601a11d4cc3445fcee73995d57a680aa460c54bd7684a9ac1748bd399ba6e3c340fefc388ca59c1f6981d0853f826139754ff1b9a58960765236ac7840e7e5495fec30082631805664e974284be8a2830bdc5fd5c02aec38de9e83d217c030fe46630520cce4f2f3826251fa72b2e9c2521a8591d0a56d3fade84f32fcf5ef8d36114c490477f92868a89a413c9c88af7ffbfdd4c834e9fd6034f718650accd1150a15b2a77b71d22342a17e4aab9a118da068f8b786340fa77dc39ed379758701bd3173141a23e6735dd3e8549d81c88320367830b5f78e1851765cb3f9e6d0cf3915efa50872ca2ca73e7a920c851e9a6b6bacd47de8a4be83dda07556e6a967537149fb2b71e404d6248a60c13097c5609437afa64f4465b499d21c137f3c2a97c9e07fb8352caea656cdee5c21b958fc21e87a84ff8d6099f12bb703f2cd31fe470a75ed8745ce050e64810723e4258a548a953823020302301c8cf855e5c0a4b291b15247643700d830346315e5eacd2161fbc88319bcc752e755a8f47b655535683975c316d9c941005f581ed23ecb11c023380b3ba430f9e3e86aaa66c935206314079756b54b635abf4d7b8cd1de3c282ad920bec1b106ad029eb1f8a20fd8a9c62800df24dd079ad51ffa8511a543c3a3e583695f0cefc848dd2a7132dd9ab74a867689323ea87c05ef789f2848f66982ec3f58adf1634b1531f651503ee69e8f041343ee1a3f78a243aca99a25b98b5db5eec741826e8b2b892557e2ba6c51bd448efc851ebf0f11bc6c6c017d77579c5fbf4bba09529b37448aad63bd2097872471d75dea9d52fb319f6548e2f4af5d6cae9d5e70cefb120d6a1cfa6760c6c5810cba3cf962e066c5c18cba3cba6be8689086c5c8ceda2cfb63618e13c6e5c8ceda2cfb636301dfa392a6245e0ea6aadfa674b2c7b311c144c64d4a14199b9437533c8693b1d6fafe9f81e0e46d4c1e98abb52c0252b2b47b4d124a7727456956adc411528c1750cf88e969ac2806384049493cbcc42e2688e7a1e56115b93a033057ba6b19ce46a65bb88d553520ab88b80035c92b2f976b172fe0025c3fd4165ec762956096c3261aeb9b4fde4d0cd6e865e8b9f469274726713b8db529c130ef44cd8c26ddb89d1b7f2953a4d8a94f0b574dd78ab8c92b19fab4007d992c961f2c82c04954fd248b68ee12f80c144c1604c8d1a272aa2dff51f30e972daae2e59418b7e6bcf05071e1af65ce4d209077a1cf5ba505b44bb6352e5080bab3b35d54826291c251cd0fc9a047fb88c05ed818188f58310945ef884a024aae5a22cae9e1e76c8bc7df568805820a2e340912e6cdee967d1f061008f523de80bbff92472d0dac8e9770016371c824e94989ff513f98c8e9b3a2ce0954d34b6a3b35301cd78899c866d5b766227a2398b0d333980c99773d4d2381abb3f3e8def9418242753d5c5147e5fc39e7b17c9edcb907cf651ddf9e76d1e8e5379f3fccd0b37a46a5828b92e2c7940643140922852e985ff9ac242a0bb99cb92af6d8f794f3a246f496283657160920f333e69cd16de761fb3d53d0922d7179185181fbd6c6a19cc8d6f359956fa642c2b0a7014e711eccd582da032ff603bda7485ae8b0dde43322eb7ee9dbdb1b041310c0510f5dc3540c1a6c87f78b3cb6b08db49db43fbd8a06f7023bc08838d6c213db256a60525942ffff4c3c0e42eae11567e29c01bda19f144b8700a94d781f4352eb1a50276947c44908f66a3b2ba09b163cb9fdc160812ad7c6639a76d2b20a61416a77a0cd6160707dfbb2649ee0ac0a1f8e8ff1b94834500688709d42280d6f0125e81af17d17ba5b3ed99242c7d49e01752509980d6ca11b7c6ee542e3ae014cdec6d6232d63e2ad3bf7452329fd062f22ff0748ebfa188bff1091257064c058a2e68db6f75e9c4f3280144f8bc3f530efd2afe349a525e513a6f6cf10689d2c5bf2bd8f7480ca40e045aaf728959304e334a07812cd967774691dad6ce75a5460b7c5c16295bf16a40846ee992d83dcd6b760c0e1ad52417810ea838030640a1430d2a0c42d4e35420a7fc7b94da608a9db384fbc3be53ed9828ba6f25217befbda59452ca94527b0850089108d4888b3257bb6cd4c51161340dc5cccccccccc16c61a6923f4fe6cbf8652623bc38162e16ba895ab3e9dcbbfe217ffc6715c91bea80fd5ddfed98f99b99bbb999929504a7a41b1a8595229ee3215579c718566f92bf350e64aa584514a87303a23c538a5942a16d6460523a5e489c68caea2b749443115939aa914967a1da552acb454b9a668124542ea520728c0c936080e64bdd31128dc6fda671cbf6299b6755c522aa5fd409f61d457efc03c3d9c133fda1bff8c2dade5d5583cc00a609ec82feb45ea04b68c1b5969fcede9d310f663378c900254c56ddca9f49636721e1194a88822e9bb89adef9bcb8dad86cd6ec4ff9e113627be13c95c796f5c056bbcbe86584af7aa1016fe6797d4dcde3a4969e988a752d123d755dbafd64addaa9e86e8eeee1e63e51568514a1dbcfbd9d49be3f2bb2cc3f695d28331c28e9225b39465d896cc524a29a59451ca08e71930490e4a5ebc808d22aa106352d98c58e28d285ee2d002c6a401cc96430a346c6142dab206195266f0c41adb0be0b08188165491020919c71185398c804b0e6386d2104aaa42bae1441c2eeec809346210d3ca983825005ed0008515617e2863448b96f1c4068e9ef00018adce194abfa0a1e5520c9b5286be98910626b18961d812344b118651a15648d104065398a1eeee252a197ce53b9af73df422939941245067ad75e856c8b3e4e32556ba994b307a49922cbb6a49b505cd269a8f01f5338f8a017b9afff8685258a18519d4e00639ef18b01c6fbb2c48302fc7d7b75d0c28cfc63d9b14ec63bf420ecfc69fe66de4d33cca7a36fe36d2b349c1feccaf807a1a6fc68b3e5990d447793ef3ebfb50ed74e2d691492b96691bf4f9d25e97feb757d7b07d2713f92dbbb3ece556bb75a4a5b1beff4ded719eda62427fbee640d86b5a6f921b22b14e7be76c52c8b289047bcdf3a9b13d947080eca762f94c5372168193295a32c820c3b66d12224f8f72831303307606fd1bc628dbdd8b377e439f2e80ac8f613ecdd3cff12b644142f3f363c8f1f46388817e8e2c71522e94d2237a045350b5a247471489e98b6ee13184858f75dc034216bfbcf35847877d0d7d9a6edaec888e8e5b351db772cc6031531953247ac42561ed0ff479c6972a8026d72c6e905c2327498953f09731a470bd0952410cacbc1ce64b0f7ce4aa09f3c5893b2f873982723ffb20d018479b3314ab14c3a8ab4089caf56f01abd488ef7c2d04c73d2241d2ad9dd56a6d4a45804b00fe719a49b9ea95d0df3c9e33f06d967844fc56574252e5fa8eebff020f94ed484c1bbcc47434068cebdf0285111adde66eb62a06cedfb48ac473fca9addb1126305cb5b9ca057184f93e62fcfa3dee5d4f7ce9c5aec6a855cb39f0b5546639fea4377a4692f447568a6a448e763af5416be2a4dec873c2abc1ce49df223f1c9176c355de4d30d40b9999597664e9b51b4c12d084bf975ce54130107fee9cd8eb43f00fc8ce31c72f39223648ea67af42fdec7f6ca68784aa403d2be4a940af0625fb89be0a9a175dc88f201f5de78e7629355cfa2c536bad58ad106a08d87e7e9cdee704c60b63ce740267161a3fe37c14e99ee8d167edcf0681db952099fe6621a8df719be6f69f6e67ddf748ddd63a6baeb7e6ff3c48a60170dbc76d1b1eecd75186db3534ed872b408377f8211b2c84fb46c1386e4317dcc63a06b76170b98dadbbcce9743a9d4ecf9c6514ff899febb66ce6f26329ee2e7b46f3f9b8fc14897220b3410c1d88e88014518c79c2035384600aa32ba613374c61650a2c461a0c0346680b0a4668cb455d062384658310c22e17d65a7dc8f286ab87373e008237da88634c1c5ff41497c7652ae2b8b286c63859a44dc1574108a10629ac48d62ea56cea2bb469d1ce463ef6dc3a7536f2e9734beb6ca4cf4dd34e9a6fa7473dd7d94ccf2605edb95fe1847acd3b7695edb8c5b9ca6b20eb758494a404218c3ec74021a1c61b1589328ad8c208e84a183c6411b120014712344c41828ccd8d16f43374774a9d3aa5eecfdd027f76eff36ffa5f7fedec2b69dab4db88469bbdb99f32bbfb642cabc751e960b0af98e0ca0920841066d00808c7b8028c22d488420238aa68c1242c4658b4a81ee54a19475fb0c14c2c78e3062946907186195374ac1e67e6f2d11761243df102addad4437eadb912fac6edb957617b4e05ed4fd8a35e05ec51fff3f47faec568b6eea7a5753f2dacfb69d5eea7454393c27ec6f3c9122b16ad967535fb9a59cfa7ae7c185654a7fda9abcfc59f16aafb699db62d3591d0cfb4ccf3c95ef37cb2a7cfbab15bf5996b007d8c7a48e857cf07e6b457e97d36f59309ad9f7168a6f48c15ef00ac72f4c41726a37834822330de74a9cb14aecb5da470d15cee2245d0452d719533533f775d9dc458ed1276a305576ddd42129276cd3461bfe6729dcb107bfa2dabedaaf6ef942ed66dd70e32d68809dd81d75905e1a1b9e1af54cb3123bcfeb199736f457bde19162237cb42e2bdb9f36b86cc0a6b9ce7c673608defdc581d5036bb4306fbddc0e7b0ee7be162f1fae6f3d469ef1dfded672ca2695e8d7b4e6091fa4cbafaecf87bf0d7c642923701090ca5d40d0b494c400aa232b247d88f8f52dd746482980743758363a41e7184fed25221049a1042dfead4016ae61f1fa8e303774318a50e90130c9bff39c130ac3ac174a2e844d18992d28962ab6b366dad75956f9dd2e1b6f973b1399cf8ae7975767623b2f0ebec6a4d67379a28f6fbc7a1dddc6f28f1861513d8482f80af4d463fa3b3d94ff525743fd5871d98182881696a4a450f6e90de7eca1e767e6be6755403fd38475a78613e64168bbfbf49bcac109ce75758c89921fb311230546456383afced5957b94d59560a0909e948cad6585b938ad0a67a584adb102886362a1bd04665a8d613cdd36ab76ef3b06ddbb66dca36c5a6e60b640f4e780e7331c282480f6228a5946632ca9cf30da2ac665936c314c28c8cda60851067b0a00a30b2788fab1cebdae51ff8f7f0623f7e4d2fdc9409136cac54abb590d2d7686c2780204f6be11cf920b8f28bf887fc33ccb05f3725d177f9edde2493987eaa2b1b08764dfa7653cb3fb96c3cb25ff52132f72f836182a809317775194c1344c8a1cb05ca1dc0653021688a4c6a44a6dbf41b420821f4be25412e7d2cbbd48b6b34907ec91551a341e01b9b490e5d68a1675dc545ead5e11f51d88f976e521258abb5a9d4bf2fb10079a2e728a992bcc6b84683d097e9423634f8374ce171dc00001adcd8f8e891e2b143474d0e9a198b3a719b9661954e19a1f798c172982e926ebc410a0b84c66b1ce1c5abf5048584e3c31991654bebc9ca8638825aec1f7c3f63c4e821a8a5f5c6f47f82ae0adc9adddd35a94f408c4ec5e52aa7938312586e7500d4e296cd1128503ce7ab770bc052075b7849aa305607aedb7cfa747a3fad6ceba00b3b3b9f76a26988a5d613ca03508bfd838f755b072cae574b8b420611504bdb362985db706638214199c175f9b1303c64416af1d706c16eaa2cec0c8a6e0b81e1b3c06dcf09bc7186196e744a245b4a28a14a256730efebeea423613f55757f9d104630e2ff1dd86ea5d25941d5803d3dea392af6747aede5ab50de27c2ede69e59c7857fc260d7a4b79f9b6133bbccc1d801f80e1fc33e7af49daf793e3277f085754ecb6ed37c7ebbf947fc181fc618dfbd1d562cf67c9ac17195569bf4c76f4692e04f823f44c17fbb1286bed0d331e1b14e49f64efa6a3f9bb0f2552c64fbf8392c84fbf83a2b2628ecb9f7eeebfa520e05edb1eb1c09d86b8f79383a526a3dbd88504e2aa99cd221f428a394116e566cff0656589ff9c2f6db2cb61fca28658c13890c150a9e041fab0a1198993f601e1684f08db090f9f299c542b861914fc7d5313d1b237ce717e13b3d0f6eb0351736e9ebff73cb1c80c5cc5dba005fce75e798b01f0ec78475f83dce606ebf1116e246f84717f894c6319c408adbc6c57ef14a2c823c3449d8148d14960579e295ae3e5c813c2c96273def4b5df7e1c1142b9feffc581e4cb136256c70fda5a7c4ff3ff76c48f8fedcab42413e780df21d9f65ec10c60aeec7642ecdf5fec16651d88e5758ee41f8ab1f2c579384a507e01f0d5ffb58f14a1d0a82aa1c67623593370ec0b9f2840d6ef63714f3be78e18d8ef7eceef6d9edd2bb5d4e9ff4e974432bc23742e85a41537777944233084208a52c7aad71454a39e96b8da3d71a2f20346f20bf0dd454b6f0c0970f7de5422ea99b5839afa5700efc0d7b6d4695f558611dabbeb030cf11980377be06016dd2d789f3600fff0548a794df5298070bf3540f420977b8b0b548efb337fac64290a45321a044f9567decfb83fea097dcf85e2bf4ac10d697d45ceef1f6de3bd8edb0bbbebcdb1bd248259dddfd32aa7ca6b1719ca6711ca7699ca6719ac6691ac7695aa629c1f8dbe6daf628ef7302399f421ae3c4a743f16b95a25b7f86a91274e3e6be924de26d2f88ab6a0d96495f5f412e2c7621e7c0ff0e70fbc28d79c7032995e97c76150af1eb536cc398748e20ec17db83a1aff4404a7def265742fcfa92be7ca9447ad19b5c3459b7cfd6d0c751e9ac82d86eed51cf9ce6455731d1e0cdf1b5767d6db4f75b82df1cafd5bcc69c0a3f4314c9d0821facc84202315acc3939be76355e8eacfb9cdcac769fcfa5f1b26ec9766d503fe3c118ed1b9555daf639e1ba08b5faad65cf9acfaddf8f714dcadad9c55190cbe59222d98a2f64709454e472b96e48ba6cc518a64b69d29d94529a513aa9c8b299655364f1b30d84d37f7d4fffc1addbb4eedbeec51e85c250596ccfbedac472da6fdab5dc8635e150a74ecbf8c7d6f762b2bddb1c11fa113e9d9268e6e50c9c461ae37c3dbbde9ab5e27e5e4abd1c2ca5d5fb2cca3b719b16298d98375ff664df412fe54b8e84bf98f7977e9c5e74326d4a7018a6c733a98a2a823eb9e5fabb945a70b9fe5289ead289f9fe555ce5431d94d299ae7c9d253ab7e5b744422bb24a90ab8e74bcb1e5b6d095b06bd81042d92fa384d28bdd3128a1c6d8d87461904684e5c065bf2a5f51b443f98c715e54aad1b33695ba72e50a91a80479a4d02b418c7fc0ef9c567d42eeca002a0fde4bf9b896e6c277291402fb492489a423c9773e9d1d9827fbcc834c1ec83c298d2c6c83a5541b2234373e5f9aab8446cd8cadc9115bca08e57428bbbfdd528cc60288c3b29724579300ca58f6f2c5eb8b2d1db82c7bf902caf56f2f636470bd8b098a3c0820a1a69f757a5fcdcddd521edc60a7aba4b7b9eaa7baca559104f9f3abab62dc22fc2ea8a4fc635ff77a9c89f47d26b421fe7ac5a2a23a8786ea90fd60d090f5211f5a5aeaa2dbd4d4d890fd6aadf0e868663180db0f00242daa64a1650b30b698c10c97896a43dde205b576419a82a40126909410338229b8871042294ff24f3efd74d28172724779f7b58e6b6bcc4f9b7c7872efebe7baed75a2e844d189a213c535a560eee6eeeee6ee662fb2c04a65c3c25be33b5e53e33becd05b000b9460302ab0c20cbb2fe48ab0aabf59c51edc6021dce07b938dd7f59e46dcfeb901e6e1998585044d1f7c27fb29d49ecf21a56b6f8b61a19c4130688cedd76037ab20c30cdc4802b74b9f452c04f6ad4a10565861f5ee8440f38d5d7495d24903e2fa8c10938e3b23342374bd729c4390470bf2a01974bd5f130e8d71727c73476c24ea67fa4fcf9d9ef37cb2f49f3cf828cf6382c4bef5a48764e673783e2b981355302706010479b88f1f516fbb00b174bb00e1eaf2831297227d9920b17fb22d846a8f0992d3e788347ffa1c9e4fb74e4fe3f9748b7b202d09e481adf82f443ad369b08356f08f7abb1ed6aacb68a00ed222952fcc670a34c6f18f95c393a63a8e9588dfc839f1836cf023c5c18d1adc283598ba72832bb72330477ead5994f78844f23e1db7e5a7c4bd1afe61992bb3aabbe646bbd57bdd63e273e33b9218a5fc20db4c330559105a111f885f7c80228c51171d08f0876830845616ad8b2fa31066134c484a2439d215e33bade42defe17e0ec6ed1f9a6e7719cc0f627e30ba01b80c460354dc31ac0061e522f90e8301428c4325a4dbec451609a9813ae87e292f422104edde11f65b52733757d51c1aacf715cee967badd4d0484149424745b89887ff46360ecd7444de22562217c89e4471ef9ed623ca7b9857aa81d499381fd0f68e1214d8405eaf86aba4db7f93f1891a2684de6c76913634b29a594524a293ff6e428a7d8e68accceaf05208fb7a4943ec56abe6d50d88f756455afdbb89ba0c49d3c1abc90cce739e79c73c622ee4eec1312363e6b3bb2b047e8f7b811c8433d9b14bac530c7e9d7af5e0c15e638b7e60ae6f00f454151319680e26ab15891fffe6d163887a5910d1ab8ee7d966dab2d2c53e672ebc6cb0e495e82ca5cadb72e6384b4222f415b5891c94b50d2a6d4c5045ba0af7ac41819b34208481a047f2ceeaa0b09c804618236e1ba4c3c595897ed20ae72a3488d4c34aec8e43bd383f015c475a3c794856daf32a5c07e1b5365baf03726df8132706363badec6e42a7f97f5ff36a6ebdf6399b85001030c930e60dac0024c1b558c6cb0218a2da417c5164bc08da7a050bf6d3ff3b1c33aca7dfde83bd4fb1ae34ac86ee58ad421d3ba2ac56fe76b941b32b589fda9dbba35c76ab04dc5fb7e6ef714ec634f6910bee63814b48b793da581c8af1ac70dc136ac07c6290dc4a7fc1403956dc042bf1485daf95633c53fe6b7fa65a57f86fd7c4dc5da6ee67f3577f3bb75cc11e69021a56265dd97bad96b5bf637afe33bfcf3571b5fe6362fcbb225a99b6d5d7455e6d343b8a088a1d693de401c43575a286d72433454ea69ceb05c4d929bbde486649ae723c2152c4dad273d031da8d8d2ca827dd62d495dac7adf934bbd590511111111510e92524a299d73ce399b4716db0fa38c51fac0c1f6cf1863c728210bf30cd5e5c7b981322579092861a451463ab1caf574aa916b561b67abb5d63a89b6b86db1c6da1338ded8e55537d6516f09217593dac2c5bddacab22e5da66cdd6add6cb53d33d88f8f988e5431c5af090736c382ab32ac330cc3b6d982170aa9e1d25243a625293e4efcc1251f37cbb2d7fda2141f4d7bb07269092e9dd89002976893b674c6fd5a5b62214d449318d596504f4828a36b346ed8e4748660d909e76163d063566147c4bd56396cabb5d26dcea9cd8d5ae9508b984f2f93ca49657c9b1220b4814e69246513d2ca5535a978bf158e4a27884eeae67ff39d28658cf6ce4ec220bef3f5077195bff895bade3aae0a229f36f53e9deb6f427bfe3a5f90afc75590054548484790b8a838408d24266e8282d447dee3d2e51b61811b2b241900307d867b94b6bdb61d719cc7da7ec6f381adcd5bc11c7777d7b8f7d3bbbbbb9f7edbb8dfbefff4cefdf6fddcbbf6a8dfde6eef28edddfdd9ff0577a025155050921e960a684905140494646969e9c5455a710189a08aabc9cb1a5f34e14a6a31297961638dccc7652f694cb9f2b21736d0b89fbd3c68499224813c1818395c6f2a0dc453ae06ea209882b7b0d7204744be4d099e92d8af57f5e0920cb5bad77e3508cda5b9c42498e3af24b434c474fdfd836ecc252e0d02448381a4d1526c491cfa8948fbe656e896e6f93c69655e44da62fb3fb8749d33810997b970ce99a4f5fbe3f8cae3cce9edf628ed392648b4e750d07a339e4fbfe16a699e8a3bf23308d4bbcd748faffdccfbb7007966cb3f8943249af6d16382647bbb7d7bd343c23dcaf3c9f25eeda953c19c5fb1ca50faac859a52caa23519125fd60dc6cd6e55d3b0e7cce36a8d25dae426993b81c93c279b1d4ac89dd0aedb9f2aa34e196374f653739c48cccccccccccccccccccccc3cbd98b19bd346d8dc7f21dcf8c18d3f6ee4e0460d6ed471a38d2c447e8431be0b6c8c46200301723fab7accab9e2701fe019f92617be0e4241997b0512cc15d60a3a12f536ac1420b17a5aacd38c055dafb7f36ab3355e334da4802fd2ca3946eb21be9f2ab09a1fbd917134c2f265e975f4d5cb99f7d35e182336534c6a995ab4b18bfbbbb6b66b0dc5d0066b0b17eed31f3f444727d36e8c8881ad7df04970f62be85f0775feeb622fbb5ab0686c242f8bd9f70ef0d688071b8fed65a6b57d788ebe8e8e808c8dd5c90870497b10d97115b375bb3d5970c9a967dcdbe4a29a54b97f56586414d8350839aa64188654ab04cdb6ac7fdb671f5372dfb5aeb6758563da31274b982d485c80c13d42bbe54cccb172e071d4440431825e02106607668d5141039f1c552daa71aa5d6da43172c1ef8028012742182e2a22e77210a63218534c63a27a593d2e9693984788d5209474f16ffe0a794d226b0b822079698441a36f850c350185878a9e265892486d0000e2460b08395a1322db882c98b0c94e98c066a982e61ba9c20091410b58b952e4d24810507975f5e5e70755c7e7919a308ed4b12569088c20a9412470c554b841055ca90020a9826b634addc50020aa5b4c7949f2374c83244d31a7144290292041749a86068db8100493891c46be8cb07975f1fd0e2035b88d05a72ca024edd716a36c73af858b75114a8349018736820d19bab1f2fc6965958ff694551904983fd582c9611381445b90ab21a21b6c07eabd50abb4c05952072083a32e26f82bf05a020f119e5b7c26185c05a05799c77e9d2886a0bfbb13809ba748a83175d0da5a2947adf12c6e2c2283a93eb21e641c57e0e5465086808fb81938a6e6f71957f4d7b3ca8d88fd55b1ca8fe60bf5adddd3d8c1e82e8b71394b2192ba5395fec5ffb2bff9c18b3cb7726175d0c8c86d12b025be092aa40aad4eaa10ac24f12453083a5747b0bf3d80a79fce577515f19bb6d36ede081ea1d3cec0c4d8e1a1dde19773d66562c1e5f1f098faf99c7e3a78764c76b9e0fe6f1f7388faefe8e8ebe8eee94a3db9ea6d37ea6cbdef2e8b8b5a3e316ad58a66ddccc4ff419463a9265ef397d72e7df61d8cc4c8f1e5d9793f344fc89ca3f64952c5c8079584acb70e537e9978fe33cdc0aa2cd29a52412a7944cfaced9412320938267214302332c1853458f0dd8d4652f63b2f4e8809db9ec654c9531320ce1a9b428194182252f2440127a235aaec01cbeb5a543118e4a07e735939424c57c605f67a55ed5666e5c655d25b77aa394b33914e8d73a7b9b1de7941a26279d334e2e5091c69f28659258e790396596cd8955dbc5d29655adf56762f6cda198c6fb4e59a5bfbdc6435aeb0d47c5ef030d1b9f1cddc91775eabed56d2edf6a0b147573028a2d4b7723b2bd458362bb14e6d4c7bea16810bece3814b4db3ed0b034ded5ea7a84028a2dabc9c40e3ae0b0ba62bceac62c66310fb39c8cb012f34a5252834e1984c5aae96efa5717be4ac777560b6012c3335d2e97aba8e5cf3c29ce7187f0426e79f9a805355c87ee84f53f01159ceeae6f9d75d6593b26b00cea7a77563d4d9bdfdd9c9d754c60999ec0a64d1cdfd1b2bfe11f1a708eebf44fcd2302fa5647b479f19bceecae7420c2bdab54ab55a7006bb5b6e3cd8d3f91e61ffd5d241e8152430d39433a98e2c10dd69f88ab641adc77f739530c41d20329d699ee5723c0426a1c1e411358888ef7776b6b1164e84d30c73fb3192acb788ddbafbdfd80fde2ad399a9519c03f5a47d71716e9f8aa0e8f7f747c6b3abe5008f2ac727834de67fd673a6eea4f359d3cc83589b7fb788ddbb1b26013b0096e4bd9dddc13679a3e3c80773456c10fc0cb4fe23bddcb5fe23b382fab943557beca7736780d3efb7f293f849e117ce7e6e51bf11d9b1ea9978fc47778e878f90e6021a8971cd8974c9739c9943d009e757abe5ffbd8f10e60214d8af0f56a72d0cce0744b3a7695e775ddd27d006b4adf057115ff061dbb0a00dea7bafc1a7437361dbbca87f7f5e8529d6a87a7c3d678393c6f7a1f8ee5a05b4188ea1cc0fc5b082bcf819fa2d1f3f9fa387bf3113b36f4f1d59b088338eb5c0d23b2f48fb8aa1f0dfbb1d1a5cf0a6108b52dc00e8b3236a1310bf956373ecce2cbe8b9c0643c59c68d1e936fd2e8c2921f2d4c577a2eb016415ed442873b3da2fae47efd4b7eaadce98208505ede67810b5d602d82aefc0f03374ecf052673a577e48a1440bef012bdef8583d1bdb9fcc2c1884be4c3ffe4a74a0b73ed08430b0d68b8e237914b031c8cf061a80907434b1cb99cbcc0642e910bc8175e5c308800e56501176b11d4e2ff3070e533bf6e40c175d297680626d3c23c179369b1e7c3ffc4050e78a00432c8c0e56a55cf05c5e56af17f3e57be706185efdc0a40bee85266859931c2386206349429d3e29a0b43e090bf89f0f7c789820927cc77c93ff9a7f7cdcfbec735fe4ffbce3efe4a84e678c12760cfde57995800ca0c32b86e93cc63f255008e38ca5c0a30d2151fa65ced29f073350ff3e69452c6182184eede44fad24b24f3b2fa3d909fa992fa4c7cee07e97ff367dfcd55f0862b50a6a1cd37fa925cffdae34af897a42e7b4b524aaa673d16cb617dfe873c987780c94740ee2c326794b31661fde61ef19d8fb7b87327fe448185f49db0ab3cd8b03d2c574d54199b72d5183748f08f2099cf2cc207b77270ab06b7d6ffc13c1de770ccd3adfa756321f46b35bab1354a530a8d7168d4b0f0f999868690eac642f46f969c95890d8e92a4f7f192fcf8942bc101f06a75832ccc5061dff908a652d70ac831e9c863e97ebc94446716c08445bc1f2fad82848842d5fb39e79cb37ee112546d4d8a0aa02128a502880a154050aa2091c958a571ab5b37cc4b8c20572b5bc1afb1462f88ab9cce67adaa1784e53b3bac6fd5ad1ade3807425631e4f15609f47e4baefc9c5cf9f3d963e273a5affe7a0e162e1ae37ced5a61956218f5107a763e6e7a1c1db66ef32c0459b18eb420812521f43c4e90d5ca3584dff9f567f7f57ff385ecd7b7bdbff609edad659d654d324dcbdaaf370812eb7176d23625c03b1fdee9c1e057497cea7df0c2263f45ae0b43d6e4678beb32a13e2ed795deea2b5f6b391f4227db9d28bc20e33b999f3791b39fc906f135b845137e74e2f7786d20fd1206632c8d51743bb81c660c20a52625238c3fe8b5dfbd9ca61c19b8bb072e7777efa38f7d1aaa568b55ac62a853c770a35ef6f073d23933b0459b4f208a5062830a2a444011860f419fac1092381901bea01a53c6147c1c57417f9c1863fcc87208a375872888104e33e25bb91e840f5775398c901a62507de43b9f7cf8ddb5bbbb5b56d91c095206e1c4f59f53090ad253125f4a352ccf8f0da17be67d4d01cac4e7c6ef9b922321be92f9fef4e8c22984c5eda30bfdb5e6506830179e80c591efa861f99b0bffe829815e1f61d15cd49e435a4b71e38da096d64460d9d28244448840a9a5c16d762c8615235c2d2d6eb3f325289a086a69729b1dc41282295e2d6d6eb37315e4c002a09646b7d9f10b0d20805a5a9d4f7f7eb559a1fe2b4c0eaf964f0761586e7d4bd8e84973608a2842ad8e5b1c6d5a3e4cc50c68286a3d11c18b1c5e18adb2c591cdbc70c1c5951a8d8c0d74c0d5aad98420ba61c987c36891c2d57a92155d8145a9c5fec1699b9dcf89cc0daff9d4f3611918614351eb4977f92188a016fde9d9acf05cc6042f1892610c17ae96cffc273cc6165524b5a897c5bf7fc6d8715e80a08757cbe7495371c58ca35696f8935bb063c21005d565d2d705162ef496a8ae7ba86d769e051523aeb434bbcd8eab802329a8a5cd5cf900534ba3d112e6a8a5e5e0c10c20905a5acd36bbde018c1b482d4d87152aae96b6e3cb17a096c6639b1d5be1458ba19696da66e76494e9b2d4d27aa478f0d8a1a32607cd8c45f5b8397d3fd7cf38424c52eb09fc894ebfa05509ff9098104142b82eb76753c2470c7b2c43114678e2871e13987599f67c59cbb2ae08dff999e702fc388b78c5306ac4c392110f2e231dacf8f6d4fb28fcf82ec08f54d28d16f13bbd8d7ff4432d5e9648ea824b106f5583fd1a1b82efbc3e46e225ec5789e6f7f8f41e6ad5b2ec97de0bccc5fd7eae8abf94a77a1c2cd17c46ba3d9f79be07f11c97aff21010cd70a5e74bd82f3591ea06bd8785b0c03ffa5fc52c1d9ce8d967aa30ec67b5f74640655f1da7b17e54df13876dcf823cd662359e031fb5c57e2aed37ac3ef6f04748d21edea620a874ee9644b16468680400002008e314000020100a87038160403020164ccbdc0114000d82904a7c5c9a88c32888511452c620450c0120000002003334d326ee5d45961f904bcce488f62d550545ec4e31330b86ad3460319a322fcf23800476b29c8fc57038b0fa0b7f84bc2d9640fc7056916178b727811155534876033126c663f149cd7040f932305a7acd5746e8d69132abdcbe3d771cf1a09584bb9c0007f41599180fbb9a7a551cfb6cd6ed291b892b70bfeeabffbad9e99ef2b2237b4a0e8a84742e4e030f29d090a0f2293ff0f8314f1becdf807ee7d5eb7644f8167357b3c21e5ac6fddf621567655a84eece04e5e69f5737955ed2f3a25889049104f7655e7f060f452b221aa975e9800d4932736100b5c940aca4a77aeb399024f8ac91e93c76e4916146d894870419a96511a5a70ae63bffa111dd6160e02478e071a8a5d99fd1bf95fc179880a59f2af1b43e26c2d4c483e5731dac85527785195b32afdd37bd420b1d1c2853c8b811bf11c46b168b1ede151d6d6af4357990dd761b6d15cc4083052ae0150c962970a129bf982ad1b2006ba226bc54b03e319e3dbc06327e8507102643aa2bb7684cd9c92ce22140eb882b2befa7b39b4c714623e438dc7ae25b17d7527fe210616ce85776aa0b4ce89002661ccecf1d2e1bb80a805a671055836fe2ea2cd780a3feeef7894be3e59692dca06791916a287bda431104a03516f80c47f48c9b04f8c58644ff3d181d8684d1dba16e0c7d81658878bd6a0831010f4fcac8ab1c14df7dff67ad4a184fa320eeee2cf0aeb421c62ce2eaa6274b0a81e4f9ae11861fe27441c853005e062ef14ffddf8845610e46f9d53bba16cbb7a402a365b407a48e4dbef4058a6c2ed813efdc1e48296fd8ef10320fd2cf838a0e1fda7b3c8c6179c889dc1db88f340262053cb0a0ed024310434194f20a0dafb92ecc3fe5d9670c0e030cc16ab1ee789f9f6be60ddee0280168091e5950c592c8150696c546380180184b9c9d1690415a5a59457bb94fb08801fe71a7d67cf13ed82b5144950abeef595b765b75ed60c2cb0e1ede457664afb85ee91587c78deac15e719dbcb1deea055fa2df9ead748b29e0bca28cbe82b03040dc3f10223d7f380be2ba1afe208438eb2b985e3f846422c3e053bf546581d50707301ca74eedc48253c02d61ed27171cffe709116932f86b4a6d158c83ad7ade30edcf28e04dba25ac5d88985e4ae34952e125a1611e49a0a93b12d2d52b4a8e01972ff52fb86c3f5338d2b2740ae911f73d13b3820d6d060f7fb3302fe793d3a55ae6c84959213ec49c702e16b3b5b96f980e0dc96134b46c4b418a991cb2e7c41b01b41014d00ada26d818b830da6178b19745d4b02bc02ba333aed1399304dd6a3aaa3ef6d197754fa0b19ed1eb3c403c25a16e8adcef0bb2430dbf1ffd3058381bf05aac5d653b8864d9c0e39882e060f1d23c80466f63023d6c1f1272664f9d0a2aa387cee835748bc2291bb3af50c5bbc40e293930bc4037c1b2274ed6b1865e721af43d341e28354fae3c3b2ff52e3081e91e7b98b9d8a5068e381dbc998cf895ea5484587c74090e791f8e9824674ec8b7d4fbda625c690e0bcd89843446e62fc9b7c096a6f388cb5a81bf1422c35576e8514964b5bbc02191c46445e87f6750f7512c280e0061cdd7a46c3998b29d02d98f15435ee9ca2aca70820ce2127fadf8c2666b623569df6c49cb2b7f6f0407e29bf9e2c45bac634f1ca41a1a541688a1ecdcc3c59b72267243fe1201487e8f03ddad1bf9fbe3ceeed5da46e1f681f71879074e5d5c899fc0ccad2df7fbc4a82853d0577347f1e9dac0b59af8ca827397650255d274e1d182ad108d9ec95f5ba2b0d03d79c79ddc25f9b15c8f561794145e6a01f812615b0f140e38cd3633836440fd357b45e73a706731f632cd04f1b98260f1906ee6025874a1b1836c63f3ca9f625f5ce41352434c287d4be4525eb46d7acb0a2117a0e709540ecfb8ddd6d1771c836880c1e5eed361d72cbaf548087f8fe5c73a817a31e2d64777b2b05033a8145342aa128b7bec6261037cea73117cd6a1dc7d67148c6bd0d6c5ffca5aa38f9b101c9cd6380249bf21ac52ba5ae03e6823fa4dc84326c5b8d43ef581df1952b5ce8404a70f09f2d4ac95e74057ea33c3a125d5e11aee77b2d58a49aa1b41d71896e7477698a50175b3be7ac690c562a50e4428bb4076ae187cfdd5f6a327a6a1c4366e53a0e34cd2d03605deeaaf4cf4265cc02c3ef5576b13732a5bd10d78a161e6dc66b9534a15dc2efa635752d16c50f2f6813bdefe6a70a17db47a9578bc00cd10ee78a485b2e84e6182a7904161e6e25ae1422f6b462c2d883e91800e93ac956d8e3b10b2758ffb7485db07b376e8f1190c3558a50dac43caca0af66bd0882ac4068d7dac43421d0fd3131d25fe6da528531f35770f84a225cf625e1d28922b47bcc22c8deaa68208726efe3f41ed9a0744f0d90d82ff969a1e01d2011da9031ae9dce9536f24db73b485429c46387551eb5a07acf4a87db888f888f4b3415e49150fe949565453bb3828b34cedb5cc8e0267f7a0bfee01e996ec7aa27250d0df588b1373273d71653de990f6f13aae3b24adaf17a9234c04b14c218ecd90cc92ea62079123aaa5fabfa5fd6d0dfb91076663c2854b61359cf64efa4e1e797d320f9430f5bcbdd62e180019d0c95cc5483b936ef7e200308e827c920c8a4231c6997e1c4e06eb720c6fcb355b192763ec8719453a75a58a1583d4e1ef47d049451d2b862dbec3b618148a164f4f109580407e6fd86b6483e0bbbfbfa54dc84d5a028d3999e546f5dbc0e976b510987d3616cf3def042081c3065d46bd02b3b00ef42451b7d1e7e2d3211ba6af355abe7c4fddf79acfaf363c5575a29aa272128731863bfb6465b980ac25a205606de9c8f0aa68ea651eed4a30e4a8306d731febb125262c6db5ad2a25b775437411bc161b051d530d4dba0c349f2374f3707acfa24474ab1a7affcfff837a48cbdfcb3506f7836a8205d87ba98bfaf4eb7a125450036bad56c6b367190802fcb9107060f09de870ffa49527262eb751bf3cc09155c3193b99271550ff4f1ff3dabf0e9a649de580525e419dbfafbaa98221e06405c3f025200efe41e22f8985bb53f0131f56de49fd8fbba312d8d71830fd4ea8bda39547dd7da028622f27645dcb9ee9dc377a1057c2a0ed9922c5818626112838e38211101bdc31bca2040044c86ca427263fc38da1ff0a3d9edaf381745ada8c22817a78cf3121460be92dfac5a21358ead4010f621064a2c920cab080ca0c6cfa3eee5300b39321fd5b45aa18de3f6dba039e9b3c8570a320c0a47ab2b2e22d21098481d7a341f54f20595178112d67ec5c9c6cc5d3ad648e1532110b547d3e1bbe289ad356497407dbe947754d5d967728bbf824a2d48c6ac8969051320155d28904f53617c0664e48563a6b4dd9ce98bee6e481de5b86c510fa1dc4474307ab0470360ab78732d7e9cf39c4892e960431875a2985fd275a91341d59d67c36b48b6bc34d0790441d46b91b9b4ea7097622e3efcf4e953e312917865b85bc4a9d4f3d354d3f7d92700a9f34f3265e749a11ba4a97e7c47e0d05da78295897d0e0434dfa6ef0d4a4b4e869658a8e347bce9743e4958fea0e3c3d8ed89ebe10637df2b641aaf18151ae6611b0b5a97b589902a4ad6fd8d056e6a992ea6082ad8865caf3a133b62942b2ac8b8229626aa7ed2b91eb729f034b619f2807c64315359d8943a4f6533dbfe5bdd983c52c85bdb842f9bbe35cfccfcff65caa42f048a22602197a8dfe9fb72215b056322407179e6eeeaf073b28aea614572584330bfce4bef9b7966bb6da7a00dc4cf5b7dceaddbe8a8d751a832264da2074ed5837d708b44d4d66d66c7cb4223a4678a9d477da9cfde83855fc212b6e4948be807a25984f04d284f06a6e65de6763ab7c81f54c8a3ceace097f3d894cad391d40e1ebe7d76a5e6983f3dce4306a8fb0af51ca9319c5a41eddc88e2de491881cf03d3e5eed86257459cc0970b6ae647263934d8f25ba1756c194082af8400d35c986d2114809fa0b9b856e0e708590147e99ba891a61ea8c800ddf091885adbea7ad7a825676617e9c714af20427b5fa6f1c924541aa0af79eae010e13eafb3e68f8a1e741931538e24da5407628f2ee84dad4f26bf4c648e554940a6e35b0192d8d40293904aa44d8fbfa0a00fc8a0218e0713620ddf0501c9ef44cb622c5023808c21a56a808a55d135f4eb11a9b6e4d2f7bc8d933d6890549ba6760c2772b202de3bc4696748b690bd0c54f74d854dedc530826016c788c316eeecb7c7f94bee1da818ad8d93a2e16670b161985cf9bf024a66853db939fb6538cbb1ad6c676f31f2003713614aae42eb4c2fe8f83d6c1fe7dfeecfa590966cc4de0252967e75916e6e4c4c34dbb55d892345907d9db27b282b99f2c533cf33af3a82e2e62ed1b0c078deb4bdfac63067782f9781b61a365486d93e27ba57d6eb0f2ab1cebeeb04ac5cf8a7b87ad33ab7e470a74253a85e698a1cf095c486bcb809b51e7e0c3f0268d812c72568cd1ee6d9963f39528aa521150dadf26965a38b64121c80532758f6cbf4ceaa9208d82c197a6ed8ad3c563a46ac1f4e6bb95da6077a1ea5e60f6a155d51696703bfdc9829b82257ca67cddb1bfbae6ed088b41dd1b5c4ec92dd9f80ef609467cb9326d7f0eff9b2d5f3fb7e24009dc22d15a260439f6c91d9ea4d6d8431c015965d952e4706d303e058adeab137134a15990913f82fbe18c4011dd831032a459bc2177f61bf5e036bcae350884dbb43485220a8688b732f2635a6d3761d216f0b64e42581fc9a4299f58f161ae8435e1d6ba14701c53e1e67ccf2d56906c459015fafe5206bd70bbd2d674fdc870535cf7090b4aa37a73d06bb881afc6e2b25c3f710de6928e3a5b537085fa4625eb2037c0a572e7adf6afaf062d01a73a6878a44c8e0b5602cb3664744ba2b995345cb304511abd52377a020351b8699e4a5aa23e4f6c3e2e4d6bfdb43480bee1c9606dda0ba1a8fb462007925b158e9fe5d923ddf9a80f9caaae22e89637047007c244c765a30b37c47f1842fc40f7bf32b5925cffc5c387c869bd5d2c73a48d093894c8e39924405b443cc1294bf51c10073e30b3b8e4a44b02b95b94082609ca1c2c298c5d453e623f256a283facb5bfdaf8680c21e50760a093ee2b71b5008b8d5eecf60705d61a8af5d15f065dfcc6a0b7f30ad1bd0e8cd84db33e1641f57e1dd764308a39b64a6c5748aa7b302f2bcc7e166e1d185753feedab6c62bfc5980cf405a0d54d792b4422d5c387820f06840568042d40ff134a0f4d26379c214ac220ca86dc658058a70c276128e74ef55cc2579d84e9cde30341094323171ea2428faed9cfc339c55dba37c104ba83e15a5cc37b7cd7535e82e1324551049e2136e2f8d5cda3121081365e58c9ebae51b160ae9fbc4e7032e9c9b47a5681d183a1588868a0d911134405738abfec1d1dbb2af0fd0df28d681ced53b5f8ac1ce553d4839a129eef3c0fc7b2964af59e37b10efa58acb5e9e5d96a5a190121f03dfbeca67d0290dd003858759d55d98c0c7d2d110b6494cdaa38f69e0854457c90cc3dfad66691e4f70054bd9d8fabc494cea2487aeebee9c3e3ebc5310237a2ca677f3e43e6572d62a7f97769f3be8023b0a107d2d73182d66c170ff33d7193adc58a8ab978dbe30199556500f46f1b60cf8f2b31199ac7899b05743191565d6224719cae8aeda0181c5a90c1ed5504985638d561c42339260d7a8757f974ef6dfb47157fdb1fd0eb838cff96e6e41b2ee5d517766d2401294c4a3008bb02bfe2097c599e6eb419231167cba7c61cf0529a0e9ac58f81d5e604a23254a68d0cf418fc3463103182a82fcf619cf33468bbb6046a2f9f77ddb497f78f941726390e76e8a9b09bd2eb1f3f1feadf27decb1f6f4395aaaa81935dfd556384358e6788516e535c116bc3d4972e1448d010c6d4da54bae5df345d8795e7c84d33f0842566167b25541f55530a3f7ff9695b5ae4d1f6b050e559cea92bc6126bfa85bcdc020907d82556a3c994dd2595092aaf78f140ff856c6598ba7c33455ceaa4719cdea45b3a9d37ee3fe5bfca4f8bed1815402b06f2841a9cb119d7621a4a577376c3a2f958ab42852f2972c7f32df7c4c25452cd4804515b0ab953b6ea5b71e1b139e54941b07e1d36f78ecba83b5ff73b92edbba15114fc3e7722653b347af679f575aecd5406907b01109f637df7a4b7b7d9e9b18db3ebe9278030a8c36604b6432b8891a54c7b174268875819dbb8315f075141d39f2a13ef1810cf00e7259db6f2454f4bacbbf599e4d2b62c8320f8f9c93b72037d81136f27bd52d52e2fa0c9d1a34c22e2fee68805ea9ee89bc2e3b1fa07c55f00b594104c0accac9e79e10298feb472f81b138917ac54f2bc3303aaf7f105ec10f837a3d1265b549ebe5356c6f83a18c7c6954b4fc2b9142b6a28200bf1372af278cce07057c741f2dbfa593f4b13fabf3312c4833dcf99de662e44b3b16f4e94fca939b280577c55382e2d276cbee02dd21530c0ad4fcc7e65f9d6b90330102691d7373faf3377a017ea07e43a6f5663ae855b3abb2bd688d05758e8ec5f7baa25dc15fd967274b23df478ef83089b0225c44520849c891c5cc18c5def75a2c7d616f8b74280f6dcf21399f6a263a0491c0b87ce9fdfa93f23bab0ad978a504d47096f942a24a9d48497cfc02540cd07b16295c2fd9bdf7596fae16616460958d7e8de2711fc946425be523724a9e2710a5df16289609d26b06388a2e49a4870eb9add6a2ec0646ce806215d5547f58aa80fe82ce2c07301a49de97b133a7d3cfef6564cb142cea3e1f5f241c66f44d54019b15c87743145f0026a1602383a3bb8da089f3e6fb59ff018616f914bfe3de15914162dc01d5ba7256a6120d75c87f82e01745a927cdd89510c23e46319a6ef7d650e9891e08439b8c9247d68c2c175ea3cc6cf039244759b5053d9b201577f011d6eee8748f6fdcdf4443f53afde8ff3aefe001c4ee02cd1519e1acb479f17605b19d3ff2d3f3fe030a817946ca68432b6ea0e28409f372e6a8597d1b0e650642df5654fefa614ddf906d567d9ec8c35cf82d8046dc377f1241d7abe478c650c20036d7c137abecc406935e30a85c1ec66c21b0f691f750513fd0af4cd9d6c341b3a95d4428021a9aef48ab73a746b3be8eb326af35175ddf9b9d55ac1547cfb953648ded1819e9523ffc0bd0b5702232e9f82921c6d50d59f60166381a86926d0971a749626b5ae6b2873fd1ae094f3e2e29fb2c08dfb66e30f1e00a093750797369bc4775e5337a61bcd69daa45c4ff1f99b32bab318407f3396b7344ebaa7ab1a1f26c6c86558234684aa6bd5606c935a3e9a934b0f7a1061cc247f63f81c3a1f8311798e238112c0b42a5b2cad7ea931b94893525aff70da79e7774896f9ace9b75e53c7460ba1ba3931df5391e43499b19e74033d407faab901a017c3afa8e7ad2d61389e707d6d774f5a9c041b1c2c84e27e631f572f2315a1a9f93c9b7d045521dd8ae46cdb33340031bce62729496b182ada9d8f89d4d6674952243cd253fb07379119124c6922b9a56e27975a45c91c8b9dee675af0d90acb0c2ef68f78dbf8195f18d04a38ee49d10d58c5a02867efcfb3403a20662f00458b25d0b3a84935469df0dc66846265cc9a54216c079b8f32c5872dac7320b8da8710911f32313ffe842f62ac6f14f0b73b70cad85ec026eac394d0a4cafe994bae7c4a0d8281ecac157e89e6fb49089ace3df1287c09f3da4ee8ba347c3c310ff8eb245582e49067d141b8f1dabcfed33fcda483e9e1db768ecd9a9536176cf55a689f6af82ee896205066a879a034621b683a5e4e2a6db61b586bd15d3cc1eee0a9d672bb93af99c46288d56a5d13fccfb7b2761854bee16b2cbd099944ac4e6adfc56133191f8e331cb50d53078857535595e77d3eaddd9918fa844456129899f019e33120c9e0d6f2cec4e8786a9e975c78f550ff019ae4a6387d96af460854b4faa9d25f8c5390091c24389863fcd25865314893981782a668568391a07dcfb48277923103ea37388ca267b709dc4dc88deef002c940fc50d03fedb65b6b0f1a925799431685fa04580808d0dc038b99d6f812fcb18bf6eb216d7ee770a1741ab572453526d28c7df6e7ded877b7f23c3f4bad06b4ab613511745001d5a1c0832b4e11d3d16238351786a83ac230320cab80426b6b9e6939d63d49616c0b5c98b060d818457566017c57d9724a377990f0423f651fb0dbc5b81c32da90c6b3f9b4d689272fb593a6653d132f2b7505ff5a236aa1d16bd05ed4b8cf8a8bb6163962f46833a874116073497b1e712802cb3253717f2969d644e71bae185aa568d2a28f9cb8a4cd725c9674c812462d692989beaead951cb5f85dbda4c97f967671ca6032fbc495749809cf454b9ec76c763bea301b56b63f40520c3c70a602cd537ed25c11ef859ee57ad02251d9afeee42b75b72b85f0034a4120f1b294a17f850f117af5089d74db2bd8f44eb6d6ddf5d2fde4cc3bd4d792a24a70fe0c501c5f2adf931f8814d99ce2863ea20ab9d3d2a622b3791e80011827d7625035ec579aaced6dd0c934201c6cd99295aae99454030a6252966be34273f5940c678d675cba2ced4c0b7ccb712355917a34c5d0bb0f05afea8233ae8067ce3dfd9525f68178ef7609287e864765a5864139353054aa419b568d9283ada143a1a47d9c703c2cbc038f7aed21bc36e44dfdb3e8def07a644d7a7d544aafd8ad75b9b9623e2fd4dc75c0370ac60d019af7c7d53e5e1f6874da89e86a37ef7b9c7396b0772b24fba66cdfc73303bc250257d63005ee764af63d5586c1ae670794128dd240904fd781593c08e15eb93128353d42a06200e8800ccd493a62738a02b197a0ef4d8575b1f1324f61fda7a225726432493d9d96e9617d1d8c7e188c2213b921482a45bc57ad34e9aa9b5f13a6f15a18693e1bbc9d11413aef635772d4f85e8d3e86e0722606c3fac4fb4fda5f2dbc42babeeda69f177f0d7221d5b25e962ebd189fb182b0f5d043879c6558f160d5925685cc063ab610ebed32117ecfd4867e3c2ce8857ba0d6772b2b9d12a7404cafa8975278460517840494ef1628dab5a47e58ebccd5d743fd6619298eca2791e7b91a302f7e3f9142178906678618baa0b5cb2ed7aeb73dcc951251f629fb66f3954d953ad43f7c078550cf7c47691ff0b6f19946d35930bec85bc04fd054578e6a35853bdb44c221903fc89f0b6a78de7183c2547e678f2b9329852afc6e22ebe1e33634762abac3698ef2f711968775e5284c90cb5dd41d45bdad6a039e7193f920e1bb15672296504d57f36c326330aa82fb0cde9ef71241fa69995eb80683789c79ad20c860a068c432905c9b80ec96314123fd25207744871ed19ac3d29d9f9bb5fb45fd2f20ee0f646095db462ff1e264295f2e44bdc6e6500c9c644a8d3bf7c2a125d79ee6dfcab6d3c6d72439a789b39f279b45645a6d8e46ebd1037d32c71e726ef15e97dc6e02143bd1f775d78ecda5b3ce4dc53522c908d2fbc422f857d7c9f33368e1f8465e51aaee7e0358c531d6c982f002b7c8d9ec6b96d9ef119c54c5cec9b1e7742f20a142e8ed4dda0b7dc6f3e31ccb33b1b1a92017f156e0c7fb62607540bacea2bc02bc306c09e9a92e8d08e5058a026e92c15e801b09221791a39f4c03dba65bc84341b675d9733c94c9fd1ceac5566286814c2a5ca1b7868fb7be9ec16fe6bd5c0d3d2b615a6e7a5f00356b52468ff55946b0645978dd04710407b1a9b99b50fe1028378a448ad841881d800d3a8dedce8f772630b1546e3e6406e4aa7c56f93021b1d36b3a6381129491cbac3f35a4ea5239378f1de0e623c1ab306fa5191b1ff5fd248664ab75fd01c6b0fe4046830e3966283a2d1ba9f28f02b085c451319d32522b5ee981438a77ae29c8cdba63f33c91510789aa87ac5834a8007fef8f2f6d2f0b68ce737a06b0a6e0a7266ae2b0598be2e67724dbdde825f308f910cabfaf9a62ca01417c6adba228a5557f9ace927da31736143d680130a60b1d11aed1e552f435acae75ed8d756a1834d937520c999cb7f4ae0dd62f5cd278de18aa5880e8c29577d95ac6c435645e063fa3cc3854ec195eb83046286c15c053a5c3a24abd134a58afa52897fe6635d99843f5e0e3613c5268450e8eba2295c7243ec5aea66ea59d962ff3fec4b1c3fdd2d31c993aa8b1415745bbcb5ebf7a108c209d031efadc096bce7d0151ad2ad26873bd39d67ee9e76cbc75458a8bf5650ad27de90f2c82ae22e00ea4b86a09191641b127f35a8b90f3af7aefda30457cf14ca541fe1a5732720c6a725ba691ba00c8798d6bbdd982f29add38133f05a3473c449d7196131dc38a3ac7d43885da62a16c80f7b5c755edd8b6a2b0f3cf4a35e73937644e74e4e739cb1b7a8864e035695bb94635b19a4a9d85a7b463ea91c0f46160d79248fad242f9edfc8e5c980d7b1f26c5f966ff9090cadf45a98a439ae8d2fdf1c5e1398d0e2f4afc8cfb81dddc4b2b54fb1cdcf7c1f6d4cf68d3596d800842890e7cba87c09eff612ee0a79520f672b2e81957297eb89c0c9f9d3d0a2ece447943983f8d8bb12d34488c1ac8ad5882d987e8fc7192defa5717f2cb52317d4434ac3e76a68351752c0e5762a755e822895781ed3064c0c5e0b7d6d204e0f6ff5024acf862afb3b70f36f05aef9d0c9d62a4407f35c27432d449488c8a993c11da5eecf3e006eefbcdcc3c206a1edcef6e5caf4f085a4a5a087847e4dffdce5b2e72ccd3adf87053baa25e399bbfa83f17d8a2eea7bfe18a039c7e91324b15291101c828faca0053c7c57662b034fdf67bb3bc13ddd1d098731c48338b78503d2439ba812434c98497039b704db8e802e2d30cb978a621cba75653944ec1cb54a57e106b7e1993ee48faf274e7a70d312d39f434db256af857f50a5e3077a16bd5950b98b7fe100e34437d6f6a46f6c1181bb2717b083669832b144e36dbadf04a06f7e09623ab82a705b519a54f6d88e7e0ccd23db64c05128b59ea793cb78021060be6b1eecae56515e20acd020b1d2171adc413d08287047e0732b8585949d181e8049a3d85eb71c7eb3f43fdff044e475dd1152320244e10107edad8d984a4d6064f36ad87d7648191e10df12df493be824f0bf8d268fd73d4c5f81c0af43715528955efa4e8c50338104d86a80a166292e43f87878476a09802b3387a736c28f4d3bc59ddc0952c805dc8923a8e2f5ae0622ade6012f7122fe88dc2c5d7f6b4baafd361099cd9f07abb1f7d728c52ea4ca98a4f874f6e04a8ccc685d7700658327082bde020774bf3167fb52010a880e25724c3dacaa731f0c0c5325b77eb6853d0f1e6dc71801488af5773bc234c292dda48db3d9d894f8e55e209834e5f25745f8103b8952b7df0af27b104a880e1cfe27fa6999b41e40fd3014426a31f0e9496eb26bfd1a108f952abe42f862ee88721dbe6a58b91463f1feac384dff7bb410b828a1be0f9fba092179ebbf55bf83a6953a0a03eec5b60831ce0db95a41534a9c9477e056b3d4eb2ae9caf327d705bdfb675a0fa5652ad5338025f0911c332a67a87a00e5f36266b24c109e29c2b53f3df56561ae168a727c4a69463757f75fbccea07b324adb8db317ca228019cd6ffb30c9f8a86298f3f98cf2146bb034e226e7dc5007b8f81516499fcdbf14c2f748cd104844cd1806a086aa5b7a4d4866c8af39e829768678ca30c5d2620a1b3362689ef55b77bd150ae1f8e54f8615263acea8aa141f09f2464a075a05e29353449897551856879309963f1c4390cd70d3f2ac657bc98e2af95cde65763486c26246e30b984dd6f94e4e71af87bfc83ae23b0a11f6332f60d1f6a40f3beae49d1d2a854af2a8b6f61e5447e42f56f622c3278fb0709f832f9bdbea2a6200af6ac42cd9a3d3eabbcbc44a1cf220d2d2881a48c57cf47510c16ad9261f1a07dd0fb4a582dfd11344407998553829cabb5afac2188c623aa0db3b0b359bc952301673f9270de667073f14c36339544d256be782c448a32ed4d816255df1cb4e42ad362c6f8dd8f1c07b2529158d1c10a0b44263ba00b50650d4d2491475ce3d30a05a34b84523edf318a89b44070189b61542cb1b2a78e6375a38120394a2b240c3d216a2e9c872ba265116c3fd6101930b14b9ffcdb2b48652d2e288ad7c05050ae125407a2d5346d01e0aaf76a0010d83713cc72c76d5ba043dd1d954fad6c6b21a48d5b2dff0e625a89fe07509bca5aa19d95ec5448e5fcdffb888e8504457c4a011a4e5804b7506b91afe53f903e4bb8661163def71e409e885b7d933b65903c4d2cd4419267a2679a504ba1a52c24d4b783b93f9805d6be19198b16c52451ed92067622982b9148fe95a80fe72eb295981fc4045cfa0127bc59dac8c4359e8121333208c10c00265390fc889010f55da89026078d182f3bf04b3430384888500c972d06bb47cc761c2475bd943832f9e9eff45db898817d52e5f77e4ed05d4e494b70e9b8aa5b3f2c09c606adc0f19169a822c82daff321d159948a8d1790ff3a3f80a4d63b4cad685b37ae69354b7f7191801bd24f240934a1fc92e3b73541027ace5f0868d6a6ecfd70f6b2a4d08fa098e31a48211a42941abe2f117d62412ba80e7cffa3af9cdd61aa8558bc009366ff27e8e6fbfb976bb728097f1d34ade787dc347e0b4e49c83d2c247b2a5ff428b8e41a3f03d755a8c0cd5a8450c3e48ac3d64aab83b3d47c285f92249e1f96c2aaa4ec45e6229c10c68484ae121e811d6be0de4453f13b650d95f47aea7e46e80b21cf06ecb59f9092078399ad54f334361d3c3e5bf4e839d28d7ca1b60a04c0631325d868905ea04478c823913059e36f31185ee14640f653030060cb5f196febb0ff59bcfbff2053344ef17f894a122a06fa14df5a1fc8a28dfbd70f878f97fb07fcc58994ddc6f90a89347b20be28409fcd13c55152e2bdf1f5cbfea7216f6089e8ea6fce5cfc7cbf98060791d01a4ea6f49a1c928ae10b274839f4ef191cc5a0202821dd351fc3d5b654c77ef94ad2a6947da31ab488bab32ab48455b02cb71dd34bd7f5900aa875421cc01b542fc4438ecb5d0ed416856369100e8f3af1e66a3d894bbd668c563eec3d782aacd0195e8ad882caee98c7aa65fc6d9ec1298252cba944df8e9707839b7a8b90a24bd4ad68620e34767d1d453443c111d1f0e8264218a08add1753a07b1df1758c83d1d7b8964379941a2a034e9aa2b92bb07373693e7468618f1da6ac1761d1a18bbb1ed0a518c2f0d0195b649fde08e6beded1b6b42c3d321ac9108f8c31bd478f343a6680188b50ea051f52f4ed3378882f65f8d12aa8fdf831e1400d3865dfd82fbfc0c733d83a222fb5e8cb77ad83e1c39014074001ef6bc0514d19faa8cf44ab55f72f9540f6b7ad5a7371a0967bc89f13ba20a8be77d8732ee9e29134227dc145e198b68b38dc5da6f9095dcd14b3c04ed32a0bb82c6cfdcfd4429cf88fdfe9b202279a369db443ddc234e5b1d7847faf1719c2318c0f46afb3e2f41fc096af60347bd2bcf663c8694abacfa224f881aa68f68ec3897ec192984148bab347586926d668317a59774c028a0355ef9f098c6ef3e17fbc9d3d8154ff257644f0da421ceb8806ce776748f464b3865cf51d20d202e160a6102cbf3046cf7ebcf40bcb0ac584dbf60bba3704aa60421b363570a2037609311bec914650b359ac740beb2a48b3d94be4913a481a68946b3f44a748239d48c6e1dcc56d18a294cd5dfec289b6bfdf031f7a17ff3abc6c73fa806bfd9151b97e8fbf8cefbea37c60caffbd3e9e648fe5075aad0e52781d405872817402d883929ed65c478482f3f2f9c1a0a0903354152b12b7316fb2a9e81f14b71aa06080113152b11020fe4e9cfc96ea48a5f812e3745f831aaf0791f4de882a24db32a994bff5454105573f02b75281b34ad5ef08c80b3523f710b630e06a4817e83a8375a30994c117fd2cb39ad8ad08fc6bdcbb9b021db6f44858d7e9c80fa1657b11c0d32f8acd84ae8d73a2b59c8ac80d7cc11aeb14889a0268a46901fa51a7ebb6918ca9cc1189a733067bfd709ae6a9a0e9cc652a2113318acd2c88492105f23f9631150c1bcc5f1a1c35b183f2f6dfd7791b94fbb299322040318c6579be6cd1100451590a9eef612de64004b36e4d6997359aeb1f7ac1df3b5479d92455d9ff0f84c7933d83eff21548d9cc66474a264440e17d8d7208f1403cf85d9761e77d6aa3108f170334e68c6b35cc30b74422be09406911f34df888ca7828331748889a2f2c3264a132b9afa70f1e84e1a9330e523107314cd8f7de216a0227879238455538a14b9147791fa47e651a658a796fca37d267d75cc2fab52045cae076c20c68098d3713659087b545ef85bd22ff6532bcf274a9d9a4afadedf55fd84b3a9ea8f387103c2b3fcd5d8fb155698bef7550ba370c5fb9b655722b581132e6bdab8810348eb9cbf134f890e419d0999160a84fe59d8e2b12033052bd6f7948f0640daca87e258f0485abe517b3511c22b70d3957c14e4a5a722c52fd1be0677600f03073b7ec9a99c98227f93e155d7c9f26fff7f7b89cda6703a3906220ce7db1503c93c08c4dd1e1268e5c17e0c9ad4fe9b60c139cf1759b41c13467681aedf8b6ee5e5bfb8866f2a0d35c8f203e3954bff574127cc6573a87a7eff90d9188e1a6aec18a01b1801e71ff3868d613a962a81dc0db0b412d0dd59e57c03b47f30fdd1bb7ea926078cbeb018d6dd05c95df72ba1af20df3c1d065ed99634b61b37f0a6b838b082e5d39e3a3acae90c5e30c47217b4a3e5e9fc0216ccc97b52693414c9968c3b3fabbb896ca9567217a11654b9088617727850cd0256a89070195dc3096b1aaaed7b8b7634cb1a43ac7c49ba1602b3753b263a9029a9b3d8cb56aafcfbe91b511cc4dec5e182815991a8ee453abc514b8488e5e69c6d7c7cd984ca13853db8ba6360551c95291ce30dcf1a22c3e7295fcb4202aee328aaf47f2d15fdfc26be861acfd973ffacf8f66f846ebfecb6179012e133ca597a65f3bc8b6ae64800bbcd6d54bbf69d2765fa2d1b9315e528f68267b333708a6c8e6027820033db49eff85a7e801978398d29d9cea16ebfa16d10bc0fa86b30307421c9868cc81f1755f18e0f75ad55a6979c7504f63cfc5451c18839e8deb1c660660f7498a6dc45a6aac37c19fb26c50eb64d303ed160ceec10bd31bc0310b545f41d421d446b2342fdba0dd53e16b691bf90e5fd22574d96050d5bc474d6159edc9a813357e9a5cec7c274fa7a06f91b9266f763efa817f07a8f7b67b68c3975fd128fdbafa9c1980beee234d0bd97a71ddebb64d5fd4c1a12a3cbe0e4779c659b52082801de01f589331a08a009f204c673a798b0fd74112af9382429c6fa8826900da31820770a6fd85fedb0906e3f1dcb57f2a842f97ce4d39682355ddcf4bd9f0b48c5084eccf22357cc430aa20968c27fe1934c78e4b5d261dd7b48b8895822928caeaa264b07d8e5ddce7336b7d74219e5e9fd94452a8ceda00502e53cf70f31eead960955e12fa7d4d762f8e8ee75d22d0c7272b5471ee961fd354f1f68d2abb36299ba21ee18ef2b8952b39171a537a8a5d1cb40c0ed9e332a7ba26de859f698e2b134d9616fedd66bc25a298da8a8bf98d2b0169fdc814679683f3d5451fc146ad303332e44f9d3e4d06b6c3e4a93b3711214986f5a56c04b00240ce40b020708bdc7029ffa618c86cc3742c6896a3fdbc396eff2d52aecaa8874eedaf3c62827a1586fc07bf0181204351559c1fb77c63313fd272b0e9dad5e80851953065712a3975d8fddd1a4f22f3aeeffa546fbbdbe93f8d1ea7aeeb9191c2f7e4c01dd1a00f1a9f8e5ec6e0d264f4dc9b3328d8c27292b5567d3c95f773e64c1f78e1da1c965e7778085d2a5a51456c901fdcacffeb55c977627a6e3d76b7a3b616bf6369cd61be9dc4d3428377491bbd2b78482a5e42a8be0cb0971910aa10ca991aa16f03608e6c9cf0bcff85c0445091d11c747b59933e677d79666c2a1f70623e1be1153e487a685e99afe1a8fe94b077ad52d080367ef7a98bd259d1913f5b32d480b98055bc88469d76076656ebcd5b1820b551649286eb1398ed7f40770467527a41e4d2536b0511aaf91fbceb38e4fe165494055ae03a0cd3bebd9f2fcbeb51a721510bb44e96676ed330a2532694e9d6d136d25f4b41022786def99a4b610cb10d61d008d4f7a6c140a0136ada4b8b2ab3464cd793e25425d27d408e246962f96285952fb07369910b372a72da277f8a7ff069418ac44246c9ce755ab402c3cb0cf3a1572b1c044927b2ad6e463249745d3397a1d357f1d2f885961a00de7d2b439acc82a0ff83a46e81e81527bdc1906d6af8c41e1d275410ab66ca5d5243b68ebdf3dae8b5f3829667952d53f1c7f47c8605855c0a270c46881aac67292d3bc73f3b93614ee3dacd2be217b14003e873a3aed39fa6d8f17162968634aae6e958121b2935571f1392fbe68bcfdd3c25ba663feae81084418987656eb1c2f068c926b2beecd3dab86e30225d21d5719a35a483a8af8fbcab3d15aa1987730000d2f95972e1f7b26a0cf86f9529c286e7e3cfdb54460e33c130c6ae45cef71a85f034ee9d51744f07a9090c980bbeb536a6b9a0d939e48d4cc5c4269485821cc30718c8a202820ce0801ebedb96599d4e0c4ac06f2f3506d4662ef84fc8358429400ae8469cf71d3ae4e06985c502f8231bf8abbc752b864701df7f0dfcecd5d613793f2665a61ff3be65e7e206d6fd4b3c35341b084903b3629dc5f830d114a02a77467df9b5bdb7a2c04ecb2743d7d178e8e09a5aaeab2978daa5f98493a04ed4a5e637cbb5536894b229a11cbe89d5df8b4d2a580b898cd292a3a3f212acfc3a79a644818e51a72f8de732e957e1c8bf6a567cab5b047b75d8a42691b65496fda9c97c59736c32961e641c05b6cd707f5b32d9ce00ee2619b3aef1a0953a770118194990de05f8d96b2591375ce8f07e4886563d4696b6731d358725514087117c31451868a5caef93059cc113a8b566965d34d931cca1af5dea878fe16b257e851fd8a2d9b2f875adaf99211a6de2464e4b9685fb37df7eff4d6fdefece3bdebff9ddf7df7ed79bf7bff39eb76f7ef7edf7dff5e6edfb3d9fe68c54739def1f32d1b1f9625d7f9daea8604b73a9b11ba29ee285aa86ec6343ec135628d098aeb03c526a162d3503bc7c4f9ed6a1011b808542ead23d386f5009fce219c539481b27034731e6eb7f312b9647749f7fa3b824d2d78796359102bf9704fee5c060e1cfb20a893ac84db528f3fdf30dc3469758554b01608bd366a30eaa4ba62eb28a4570270c378ae97b496c681bf6b30a3932347099abc51ce4bbbf609908d898f3a267ab7cbfddb0b51e6861e0e8f24ee4d4405b2c2abc789cfa91bf0106b449a46e56cf399b9120b0264fe48596f8a3d218e6f690093f42cecea223e0769b19dda5d7b07d18f3274002e88314eda7d4e3bbcd0b1bb0f780ded7835e9b8d5e17f49e36e7376d691ef49be56c4aed7a7a7cc054fb16d6eeb38fee3f7eefbf00243bbbe2a689a7ddc3de8f49d2b0540068c1b8d6a9327b58ecc080f330da70c2e18212268be4c587cf43c54f2842cecd15b464418a3328b9fb4298e08bb9c02dad031768a95999141108722eb8a752ed2d98d67f336bcf0d758556f5f00a71e90922f0f04188a9d29a418644f45ff7b0ead0babf2159f56d804a5cad54ef3c57aa8d74f4632e52b185fd0fb1edc6e3c3ac1b25664df36c695b1cd1ed5bc5084217ad2ff4cfcd3918aaefb86b7e94948ebc5f70a7fac0a5ccd74e7550ffaa3e8eaf8a01714daec09dc2657fdfca9577111164a2687add899144f084aa0d7ebaf683fb1a38e8540f0f05083de23df3c482c6620f6550f1fd9ff10226d911bba4190e012052bfa96707bcf611b41b6ef905b1eab2110c5596898e5afa915e20f823355b02d38480a28fe0098a22ba5027ae5995f13ddca50681255b9524543c5060e13c355ea595c05bc6ae202ca900b7b1eda87d6546d0709d103f59188da7d296824b4daee38d31a6784869b5c87302d6089bffd4fd337e95968f40203957e6b37b459e97da0864ea60ce875cd9d0d049e4d14a3792845f3b207332ee7b2bfba70ced19405c359561c4a785f25f5fbef68be60b5761e467f4ebd27869fab17b449545ab40de5db73aa54403db4000ec0845b5d5fe9d5ad8d5af3208f6a4b7f8244bc1f062138d3bb20eadcda4608cb80df2e42ef34efdbeafd5c2739e2707ffc3134751eb8b6321b2271227fef6a607a2e74f92bd3ba9c76a6b0ac6ba18ba927044a6cf32ab8b2105c7e0c52b31c315a9cf5c7118eaa9071ff428d126866d4575972d41e347d5d0c5b9d9e0d4821379be9552095579994c2dd5736e7186120f88443817541b4d34a9e9229cd7d95c7780836d7639bfa10711a7314c3d3f24aab2d4a073e5f75c4672bda089ec87113052c4a53250d6d414ad09a626cae851f0e4075792fd382c25f09a4a591daec921d78ac45c39ec266ee47d08924757532fcd658103b665b4bd9a14977ccc5377c87039b9674f6f76d1e8ce3225a2ef2b256b03e1fdd3503f2dc7086e94eb56904f3a1c83478abe57099ac56351fa718a5a19ac56323752892a6131497c56501116cdce98892067763622028160f96c3a77355530ec5a46f8d8e36b85406c56a6b6186470daff331541988637a46839c05fd51771f33459940c04823125df100198265b27aeb455080f78d3fdef8986a951e1b1a3fe73525a1ca4f6b98e296e41bd77ede408d4bbb47d01c475867997279b7ae52443ba3f4f38c9531db5a3fb19e567ab6d2ea7490d14c24fbdeaab06a0780f67593446744d6957cb7e70f23c8b5825c5b4ac0935faab7f502a56e4ae53be594ef6ac57aac724be55008c70fed3c9f44cc89da9664ed71aa15132e614391b36be12ab1f92a1fbfec55f624955171cb40221bcf3b1cb4ad48df23e93248b62bd767bce6ece71cc3d67e4ccf5b4e447f280c6693de56620032d31a9b6809817f04f380d7771f438b983937fde99b0deece909d32adba20b454040072338e43c2502a556a889e36f8722d05e4b7e05a2355d3bc7f0c8537778178f4f370a36ba09e43b3e9e80a7d82039fe8abd3fa2a91b6267366b0164d68c33b1ff91183e9bdcdb99c96f18cdfc8201df412ca3992355568728e86e5bfdcbc0078eb2b4cc213227f68a550061b3db38816ba576442c94164a1f582e4be8a4e5e3d0254de6f7523fbf90570e6da0425671016d30dba4086f5700b19cd1d9ac7bcef7d12d5b189b7b1541af3453539e1ffe4dd83fc29666652f14489c91f9dfacd00eaf23b3908b66802e0c9c232f7009ab9e0616cda7e5d4bfd7c066981906083945318575874a9e98ddc1ebc15c3a7da751eef9d1323fcf9bf531a463fc759ae13b4bc1da9bcaac97abf7434ddf8dbf84385ba3077299b74ee9419fbe73cb2170cc21970e87f34ef17b0d83cc9b04902b8d90afb1ff3ba1c3a357945834af892566d2c643707aba75ce5c667eb03b33b54ac992ef224b8ed72097a95ca0e0f18be1f26c9198611dc04e1b962401e002ce4702d5a9c9c0aac46715dece12b0444941c74bf63c1d2c49e7155ccd6d96e804c40d425ddabf97a5fdf4f11831a539db4231f1728f7aa2f0f69736c9a446bd5eae4cd3b0e0fbc2c1c6ac0387339b162d38db5dd3d84e548bcd1022c1c7981d9934ada1ec755b0455c2583e5c2d4a204cb10d8961bdd400f47d2c19bb9069cf48af720787fa3266998c391c0ed7a21f938e4de423a5a80785ada164867f0eea4a7e498001da73cbe6e6450dfdbe0a70d0eaf0ee365c45e5605eb5b2efb3b456ea6d46ca97b4b574acb16eda7931ae70a94e9aa2c5ffff778b464443b9abba181b96fd6912221bf7e83afcab7c0bab9bd2ea10afc476187889355ce0da342c6fee4f874524fa4469da840d01cd4d9ca56cfb1a87e2e26e2b4e44f9716c99749714b6a8196e09c945447b29588235dbe82858a405a0915f45266bf3292c78089d763422b9ba570cdd7fc0b75758783238da083d1b90e49a2b130ecba29b76e1d14bb01acfb95e9ab5341aa3da18c955d34f215b822a3806c535283261222a984b72c9b13083e41884d84130271ba267a40c0e09218893e54d317511cf5abaaf37d1d915732f85bbcebcf0036507b2a3cbf08fbf9b28504aa4de4dbce4ad1c651415a20d8b949225d1b42d91df8512e69def2644875fbf95fb88263e0454300a82b83079d0b64ee4257806b970ed2fb2e071b1efcc4e844398c0eab513dc0b680c5493de4e887b124468c8ae1a4e309643643064431523bb02f1a57cf5cc110db51e05b72cf781b55b370c0b6d95f1eed4b20c38947073645b17089dd80ebfda87ec5a9d622abcfe32a9754987bf8ce81f8189f6002e0d46bf1e039cc859ac954580856fd9934251a2740ecd66ee7d5362cbbfbe24736377315296d4eb3f4cc35460457001ae4307c1f6e6dd4ee5cc1bb008b7d86c599e0a281d8347e547b197906f91da51c0fbc8b919b4774f04d90f6f700a5c2199d69f22a857f55b058bbced5af9a215028f50828fe2660c5d6937e55dacd94d254662e6b193bae73027022e9d9e7e42d031c3fb4fe22cb73af047bac56d2e7e5dab2613df2c2830ce15f408caca4bd029830c03141ae1e9a8f6738313dd592031d9f7905047361a0096c29ac32a8cb4d9b1150bb84734cc3d96d622f52a340c4cff015715ff3b7441a7bdc9ab962a44a787012b7703c16c58ff69385843768f1685c08e031d69bf22294052ddfc829603f085a645e611f9b4da2d4667e4cc9f5c6372d48ce4459da200ac56923760e0e1862d0ad8ade6c67c1a499df83490c527bb61146d3de2be95417c18f6950d547327cbd487f6b2ad2449e6daa92c58e2cc3f287b99f556a58212f9f296000551e1e31c237cdcbe93e2832e9963db484801d64aff6c3efbfb3296e2609eb3d4c04e7ec45fb1eb160db06c0db07f3dc5883caa3e9cdf5aafdd533f100050050e05e4e419ca782df7f2eb19442d8d976962df35108fe6c72f6820d0d1abfcd04940d3e5c322d811c7c66252ae3c5005cbf08de1f79a356f1854eaa36a2e528534dfa8479c6f7022c2b860887c7d343a8ea54f715689d5c5a00a26953e6b448cec627d0ce50d0e2d49c89f2610f9a7f3fd0135c731eca811bf2ebb0215ee40159615413d95ff105ed2a6f3100d2dbfe1db360843a2f6e929c10c6d97046a9b0b8528f156ab204fcdd314bb37a653da80fb21182d4d502a29084de07d2590eedb385a8323f3096b225ec44344290b1e68fb5c09432b9c2517a54a99046d89800c045e39ac09b74e98c50c11f8a2818fd9eced82500fc49283a93ffa09f6016131fcb988e00c0cf011693d21696d3d446c139801039ea28fd7439edc052dabf120082c3e9d0c84be7775eea4f3ade920e82312082664285af31c2b6587d0b6012a0aa0ad5ff2f6e9bd703f7624e70c7c5f666f9d3c17707404ad5f7a6dccfba1e52cb18ecd09ce2df154a214bdd3f0ed1acb1651ae06759ab5c817ae3b0a2405ce4fe9aa0de28dddb759d790e9858614b55f5d7b433f6a62003d01d7adc2dcd69e57ddf967cf3853682f70d00605d93c6a2929a16a613e56ff357ba0b53c435fb2cc2e9df7be4da9e27f51cbb8966042593cbec0122eac5075a86f551a3ad5e6d0cfb4944a8bb34acab62959fabb89b60a74a36d7f8813c33c83a646daea0a42830a655ba3614ad8d14c965783eeabcb90ef2458fe8db2d555688ba3fafd8dbdea92e43b31677f63b5655974b05032d753756f59ad2da9f3ccba82372d5b810f94f98ce8a3b98792db78374978b787a28544c3a4b43a670b5d4b0b8ca7ef04ed7282ab5c3bc3f4744481fb02fca625aed817e2c11bb3df36c2147d95d50095717af65578d757b91f7142e7c5d5016aa9040dc37bc042122436bed35bfceb2c6995a7b90a0c5c8b3ea580afb4670c6fa4c087dd084f4774b88f54da9ed9b8184b097e3c3c7d6c3f94901bfee32f4d07a50511c8f5d4ce76d6e1939d065191358872b5c358a29ec702d6683d4f6ae067de98803f6e0a7e6aa760720adadb109b61d9409b727cc24da94fe7ab23e41f0edc0a6ad268873d4062d313e93b0417afeb6a146872d5e2668a66a8593139c0d542cba17d85cc4a4fdce2269e4b5d861996b8184b562a728711c583cd344aaffe80f5d6160c383471d58f1495e78d8a6cead50b86b84b276d6dd81a4fb9049e9f1fe53ad5ab62136c601d9b4b0358a6ff1eadf457a8193acbdc619b2c143ec4c74f0befba82769d934e324bf04e3011ef5dd274dd652a36201b58c43322d4a1bae2e4d86f6f26c5e322929e821e18e7bb1658c02e6441c3bec7e6c17bfdd95247d90b05201bbaadf4a91c19aad83c71bae246d89b101be22790effe0129c002552828b02db172752a209c41f78940f5efd011093bc74d0e8cc86d13db5d25e22dbfb99155f5d81c9255b775d840c61fdcc3ccca4cf0decffc061fc4329522b8f51aec0f0e186ae852d9c142b7f61a99ae2cad6f54d9f448c0ae94baeb9aca5bd971d728bad3b2c0b949088ecbcaa9b08f5a6df1ffd0bdf5355fd2f5e58e67947af16fd804042ae76e1d7556e3115a0ebc055f4c49d164e81d67759cb841dc1cde14567f5076f4059a562de82b5f01b666110ba9b3a7d7d508ef381c2132dbe943c56aa409c08a46f486605b477129ba3ad72ae49d43b38148198784a04fcb0ddfd1e7c726096c140c2ef822c3c34b98827fe66610ba47fee96a9d82608a0e7690dc2f4656d876c6dae1655ff75b3feca9b169f4466a061425bfd00c6443a634f63a70cdc15554afc646d3f6e2e7a075704c2925bb05969ed5970ea404ada6cef44d252bd32be258acb8a00d3835f2a8ebe48d7f465f1266e6c55deab6a3b2389c2cef6531ae0294d991655863f2501ee44db0ac79b81f14eb50bf8d6474d01172beeb649adb32d13789740ee67cec2374fbea4bc00cb8046065efaa7342e6de81c21af074900a4e8ebe104937e5255ea0c2983e70e8390dc003c7fe1f425e6b22c70d18b6c47e900ec9bdfeff4148b412f3cafc72d29607545907469ae3e9738f100a19577a946feaf5c063204560beaf32eb099779a03f3e956d8a26455f3fbc65652c9a47aa5eef1bacb104780dfda7d68bdbeca3397ef852b5204839ddc5a4418292a6716b2507b5364e26914d5dcd2ba8b0967699dd8e935f532e94872ffb9f67042d803f2a26eb899d3218f939ac36cdab753a1127a3568282c0a690a5966cfcada02e724ee9c00bf42ddedb364da7d4d532930b160d2463d9b7dfa2b1a089a43b829196c22ca12814d2f10871730d52065bc8320fb560068022e473f8a126b8bc1a5ac2a1b85dbe301a4bb4ed76d8d02d2a2a82a9867e24cf228c4899cb00ee8dbdda16217a33e5441e24c3b0929ba9bbc64fe416e2302c63f00339398c20dee8cf75035381cfdcdf6ee7b3b9dde0fe267801b2644ad290805131bebccb1f5291f899d5ed9c1d2cec0d608c8bbf3c74bdc64f84d64fe075e7e0c3f8496fea277859dbcebf2d38c7aeaa28993193f144e35d1ea17e4292ea27d28cebaad7f1821880ae5cdb793077210891b80770e54e029fd203248a8c48dc7d030518df27fd70f38ca13f94cfa93f3f2cd648f79502995bbc7051bdf0f3402e0d61780b373a04b57852704487d9f93b3322a05192cb67b059a00c5d3a590f3daaa761bebff3e242b43f927ebff6e97a1ce13e99c93d49500cda1581756dd4d36b7c5c3f9befd02ddcf3777a704ba534fd8e1e173920012c3490c82d3669a54aec929ca0ba6b2f181d404bd079edadec19b6d7a9c1d7c9e46a177143741a9d20289533632b6264ebd99947758c21d87da470365f25cee06e27c268c57d1551fe8dcc7cd2061ffd00d121978b60d4aa5f4717b9819b9eb3c3188dadba556839c590490c570bc6a248db34d1ccb2aee263e7cf803bd62016532efb0f357c3db49a2592356f027f07efb095b70369a158266f7a41738ebf96da463793249f12471e865b6225cc3217bbdbdf611f75b0ab25b256e40b48abd242f03ee9a8c89fddb5ba9c8e3d87ce71babd815d174b16806d6f1289daa6ea280a64f800e0c4ffc7e6611c19000a71ac25f64a98ed8c4ecda5215dea0f9ac75958d975c7c1f3f261fb1602aecff720e21de556f506d89e2baac46012d2a980d45d97d5b2f6322cb389c398d12d518c5ba36ae00f466ba55dc6414792edd146b9a7f16fd933a6b2d4eb749b4a409b465ed5a16d20a004959ff60348a3ce0f6c81476f88f172207da7dafd2e359fa38ec7ab6a29144f8e8cf316895e30efda0404551f74ac65b2b0e92b5c7cc1f2e11dd2a38393ba8f9d42b90651febba7009953026f5b75485a343ef430a1cc74bd50115b8bcfdf01a612700f6055a40bfca2988d036af9d18547e0e0081e6c81cdbb059620b189120c2ddcf0adc6202060541879c0965503065096eb1b439319cbb1a5c1b3ebc3999d1d46ef4bbdfc478f809d4c02ba6462e5457380a1eb8d59e9c90150d8b7641551f00965bd72396990b8cb1b3e76fb8d13f21e3bfee7d57417a02f26f87f220b0ce084eba626a756f6b95f4a39427d16c4a46163534857eb6fbb0acb36b6302dff4d50c6225cd3a6ba60bf1c57502ac1011cde6f97f7db2a9b672163955ae5558229a6fda815332cb6debd2ea750bcdbcc8209cc59c0cd516f487d94ddaec77e4500195a0523f586c64ca53b966b44aaaed947c44ec31b4898e629e08a7e2fd3c7efdb8c4755387a0234e4eb4903c0977d6e4536a0fa0ce425d8f7110cba429a8d7a5654284052538100e1571a8f0f29d03d14a9e442b7c652520d4faa002f21eca98c6bb014444d053c3309994285db02d94e520642f629b0bbc1d749909f39a44709acc624b23e32afa6344edd958452efd93f0ccac10dfb15d0a05f9a0ccd27161131190f8954c6d3c36b04b09a3b91416d58acb781bb9f659f9a94658ae82e68077bc5d59eea4e7c47bd4092fbf4ca5b1291edb27e995c849aa7a3d608da90469e47a17c09a76144ea2a02956ee5c7f46e883310cca59ea632e9415de1a69c6ff1da6ea5fb941a60354cf4240500a44d6f51f5f5d0de9742ca4483ce0c9e2cf76ae32bebb6718f72a63ab26de376d06a42da38ebca07167235a43cf8d127271066bcd5b2467cd49242697e72934248bd3fa2170a87ab359d913992df5a459550d04e5c55fc974cb8567337740e2f83da847b8002864546964f5520f58dfe53e64e62bee0da710121d38d5f177d661861916ffa7cc77c0617c91440e4ab6939d5779ebd8475ff34e7d82d8e8bfdf9409a80fa924ad3718e4f32d1672427dde4c8a726c2ce0779d37048a2f6c8ae6fe780e0a2924bd9f0046b6824ffec46f43b2d9df74df723598221ff1edeed18977d414873c019ef858bcb0c4f445a38a83875260ed5e457d6b68d199e4e140487eb64182d667fc8d87e25a6422e0e3439baf3ba7033d028190747f27c4247f786cb96905009e8f4db08f2c61fd2ad558dd430b06f592ff8cecf7b1b36563614c80a20af05cbe712e6f075497b2c6d94032080871cb3c16c04124123c79069259f41716a02dd773dea60c30d8dc4b9cd18afaf7ec0c55dc77f82f7fee2ae4a0b4e7821cded751189960e8888d7d9dd5ecae993b0763a72b8d5ca13bf84f117bc5fb5719d4c26dcf9918565347561446b8c1034714cd85d9d84e589f447ff3bd35804b03e799d19a33fd7d8ac10383ab2e3844cfef4efa48af49c46d3392808d70f2b13cb0e87fcd884221851327e808490844d3d41ebc5c9df2263d34d2ebb9e8b8d1480e0b7bf0c250345a83792f8132fcca30ff1de628374410c5e90045c90fb3e618d49473d84b516743eb83f4f052785b324c6bd552d1d91f4a96ce87c1b514ed8f5d5c4ece53ff2695e90d49cfe14e09dca5f4734025084bc9e2631407a911bea55602a21d7ed31b8e2b8c35ab7b81e06fd7766e9f5c0fe3641975d43eeee37d5f83ed708bd9d66ce7b8b7783acf05d4290f986d2df33283b64eaf93c70eabac364880c7a9bdb11325f931851740ce7e02065ae9f0f618f04a2b655a97c7a38117a3ec454b3a7cdc412775bb7c07771dde9ddbb41ac8a5225a91978375c3dec7203d2bfa30a7ff0ce90b9a7b995d0c2887694dbf908803158b1eb307665a24be50b04ca650438c0d206c0b2c4a3b974edadde3c33af3ac7e8b2b3945dcfdaf8889f85dacdc8cbd415d7940a3866eaca036d9bb27c5a4aeee055cde891d7a1a5e5d350f7428bba766fb5b2a620eab25269fea1bc7de0fc73e95b7af2f8d3ca9f830c6a742ee385ff4e229fa661e91a85a241d997c83a7e2c7da8240d8fe649eec2393d310004dd0d1a23b4499b33446e52427b043ed098251cda15b1b4edb05161da4cac65091c821b766adbb3842b1ee733dab4f87e1369578a9842d72a566a872374bba837f4adbfb9e1b0cc99752d04aa4e46523bf2e586154dd94fcabb9b3d7ec16eb069423508e0a05d44ef9c5c524a2f30afe000034789da60b3b0b52fd04cc58bca193ee557ca85ac9d887b8bbc09c224f34dead48bc46ad37446e5c95ad2b0e5b03367546d4c41b34c4eab3154e5c2f54bf5dd0c6fdcd06efaca084f5db5d6ed058d6a48f679c408c900a3e3abea04373e2c8af2578270b65e2f433466d1e5e1b5fd05dd22ed19a418829f2ad6afe544b6180d45754e18e51014595e34d48c432a4785790e699aa9eb0fd8e48e29c6fba13bc267d82ddb2369bcfb277f4c15a6f2596cb073a92562d9c4645e8e273e04eae88182a89a8f1781971379a4ef782a9329bd8b311d88cec8ab9754df8cef7db6b90dcfae7f9c7f6f607f38957a2917b4b128b51da62f0fd819f1fd2fe3b12a68b63ba90f5849c87dd9ce42fc52bcc003876da2919537465d998e9c1e02719f233b04d9da13fac007fb83d5338ca01c7fe1ea15eff8efbf9c87467e2ead080bcd31aa9616df5b6570d80b506b233cfa0adf8a7da89c977f92e94095150f6af71a7b6219938dd05ddfd38a936119802ca2ea0c862044a7716f45dcda2dab282f616bbde8e615296589c6b6fd0eba5e95314f9bbdbe15f657cd3776547ca52548aca0b56eb4576c76bbe5f470ce567140343557e66df7e130861e7d680c678e9047f5705970195cd1c5ed0bd6f22165e6ac58444e4ad7b3483b22e7d93367726dcee7fce3fe7f5c090f4a3e5cb47021905529dba8656ba8875ef7bab27fbef4690d0f1ba9c6e4e0b0994761a1e63509e1131ba3595dbaa5761574c7ec8a130cb4e1c5a953f483eb2efa55c058322f1dfba2044e30544499b1b4eafd4daec4d44c2dcf4936501f5e2ccbd2ffd86a121aa69982873f6862870259c7b2d65d6970d11f23d7b4c1aac2c284cdf8c56aca0fcfe3ef0e580d27f5289db651635b350233e9718695eb35834ff48fc8b0337a4c4bfe9742bce5dce54756dd7e273b28b23a607b8b402b9debe2ff7e52f047799d2ff8f821094bbbf98922917a530103e58b5937a91835354a7a36f6c4ea831f2278388773f3813e21be243044c406a376fda3a2f91a7a47d4e7e5ad16363791e1ab3521851a048e0215883b49d377e6ca32c4d656e2ec138d80b51587205755f9a405ab44efccfb00940454cdf07b74c47ce134c70a1d6f50bff8f1f26ffc5dadac6676ad61b53a6c2a995b857e2d8830341ac0a7deb96d6ed85465a137869fd74487f070ac4ac1252b29bcc8aeace8d289747508b4ea6545458edab289d4adc782a66fdafdd5d02d04b483b24487a3f2cc41fc035fb9cfa49371b050922f3018e43edbac2540dc6f7ed958e29986aee75dad5d894c698a171d61da6d4888e5edcf627ff0f54c6b344fc872554679e2c237a8e49b2da55a1a204dda1d3f369866662d2e61bff4c5f8e0e827052d1b3acba39398dc17d8c9047cfce81da44aa154a8e57305d394dc03e0e3b6b746a935cc612bb6f565a6ff63fd5b33f902ca10b3a3f490495a433ad833cefc52875770a196230a80af398b1de316a4544179b8aaba9ef027d1d22a271d45000160d222500142d556e599b662e2cd8e415d4ee88b25102491acf93edd63d3678634c30587714792bd7187e7670a4d835ea3a24df27f26e50848ebcf700a5d07c156a3fb3188b710bf3c6904a586140f6b113ee7f9bc2ec3d1a58bfaf53ac5f556d5ae733b8f7d751e72ac01695b534357485fb0fb5fa38fb4e0c73eee009ea26fdd2b9fe8909001864e262fcec71ed298c8f878ab267598b63f5207f5b80f8949b49bf9c1f537e6d1f9073cc13a3ff462afad04306e189d45a1b743edb078b4eec399528d0e2e52e08b89d3b9af3f6e6e93ca29762952b4f6bd7281995505388e64ebb0ea06718ce247aeb7679dc29b9a54a7cefeee26b2805bb1d3a3e3a3bca2cf9e020bc41d6720a2a0685b802d5d0d5ed47957f013a65d20f8239dd1889fd74e23963e17d1ef24c1002e10e183e13cfa2a68bbfe7d019df0002d24f584aa9117c8e9f193d9f70a04329c9f76e96818281a8027f1ea7518f0c178745f724d02c49513c1201229bfa290672509f1008821eb3ac0abdec985c596b4c5974f2a8fcb357d003cca600e05c05f60fb7f174ab6c7cfb825b09c7f9558604ae046e24a9650228deb9de13e5c4254900c2362260d7b351ca639ffa571375718e720f5026e974a788b92a01550960b102a216c27a14080339c2133c41c99153443ad8e413b225e07624bcc0a1d300eb34221f8dc7e7c1fe9a006710db4d65b631674c86773b11633a78310826f2c7ac891fbd30761d97e79cd2d424924a4af32e967410ff15a0e96eadfc9bbcab152806b7cd6e4e986ec7d330b7103ab1370ef8aa65ef9d8f5b8b2f08be5ec904a4b282d16d5b52059cf93971ef385cd3d6bc6dd87ab475e8f26382cce835bebd7e3587b531950e5bbfdf4039d11d6f69f525df0b1c23dccce0c4a50e430368b339987e857682ee9ed50eba44e9246e0579f87e39e6d88e71f148cb97b7dc44838660de98be7479d019d7562adbb99173c8d7f0793416ad0a9cbb32511b133960a93bb8b658d8624ef7fc94b6e4b78dc464493a9e485ea15cce1d793bf67cac3fa01d8acd50775b31f7b26ab375f03c8c7cf4e1c4069059f0a4e0e21fb72aef0785720bf07e8d9bd3726470cd5dd445f6ed35a059616a6d60004bf21f664d568480ed40b0cc1e38e10112a6bfd44c09e5af5fb238e020d0176180f16c2157e49d94fb86bd689930963df702ea544aa13a162f8dc2293a93436406d26cb95f342bf7eda1082430d8984f31e74e55d40be15223d420b0a6095429c7a785f5fcd240371589f1f1f0fbc876a94db67756aa60a24a30ef9f45719504aee63c0703d366ae0c9593ea8ce43dde5515cc7b04971b046db4d4c15fad9d2bf71a2c00886c0c96d5b2e871dc5c5be02c542c834998069380364855ce216d0cb716c20d99b51b1397bc06dba057c6094ce4a38829383407217b1a14fac31120e61d95e800e4c44998839d004c1c95c87d1d5311bb0f73883c24380d2b41ca9faf5e0ba07b74a441f1998e44799db1039e73ba478919992de87b3965867dcaba352a74329a137425a6f861ad5ad89a27e3426ab4ffdc5822d6e8fc0c18d3bc4a6601127b11103cb4da2c9736e413344b32184833112e1a15425cd25c6dc1ff0810d31f4c0cc397ec2d151c1b1969a507106816008187e29817bc2f3cc1016bb6c9d6309cf65038f0f11f5384568d9439009594c6976e2827226a7fcb1fab66a1002a0dd2450c9b01d9d6fc99268337a1f4fc5cfa705a8dd4e28b141923d912ea75825416ff560117ce9ae5f831acbdced605784e28c1a3c413088393a941631c27d7e0fe462154f84e224bdc51a482678eb32bc21056cbd519c61189204cd7e68e172f207dca79b2a5d1cc2124a14d3a5cc3ca3ff0fa2bff34c2cced7ee1fee3863ce61555e6349bf61ad312e960e4de16a7e9967d6cfb4d5242f3a8f2ffab92b84fc2a3d1a82100ae58390901dbd1ad5445c308462b4662832e46b34de2d8030d8444a0d0cd9195ebcd2300b21ec6922f72b841cfc73654183a9d4134dd30c701abc907ebd58327f0c5aef719d2a6363f88cbff7b4fac7db470b4612968c9aa1903dfb0c94a2ee7c404433a7291ef336d26a1e6a1aea526b4499110b3022e89943557e7e856fc1ad4301b6810ea27ca1248d37a7e95769737a05bea77cf88b989c3cf7ad70443bfd3877dafeb9939eac3cdd31f8244ee3e3818d7101b0f650f9a6f87474666515a299eeb09316cce3552bf0436923830c55deb2a3f0888db6abcac12a01de6f268be00f40296be04ba595933807f5504b2df71cf5016defaef715b90d95b311803d644c5c557ace0d9411091c81d973bc2abe308ae9550c69dbcfaaf2ec39f4ad5d054803c8968ce8517e37157b3db43ba81e7b3645ce41e0209667bc139eaef0e3ee5930e37f077122d203aca48f5c905eb11e5cc3d08158310fb092cbb5d7f53219bff194d8a3477ee7ace20174b8ca24e3f80eb9a30726e145399ab6ce7f9196942aaa62ea064dee886c2f768ddb445ddcffb83ff12168b2911f9f3febd4ed6d2a97ec0a29763b8b09c7fdc20658112a5a9e470c720924ebdb9e4832c04d25475546c73f51dca48aa36daf89a793cb0bad98fe4d77797d84d5396682f30e6bfeb3ea0fb815802412905c9e422da6d12ce5e1eb504477577a8f870c8a2f968e2177db342369b45485886f7dd4f55b1f13872552448b79dc01fafc0414cbeab4c0d59782346da49bf56b9e9dc7abf37215b18c10dd2e2afa262144e753f5a5ad843de6cb87783d7e54d6a9da2fcc6d506fbd6e4e4794ff7cdd1ada87368495e8c88eb2706f69b7b6c8f988aca3ad9b9aba1a217315277f27cdc57c9d0bed11c683699fdcd5082de134f1aaae35e0e822847132f9247e6e0067837f01a6d7cd98c410b55c1be113e44b5fba9c3371acb56362848018acf5ac1ae3c1022d718d1a7d95cf643f06f7ab6ef4742370314f8b099c71538d1deba251a407dfa6685bc384441c3438c0760e1ca92375b6c579d1fdedd7ab0c0172979d2663f81431cae8df049468da9730fe37591eebd1f7fedfecde29784605c0f99db6a0b96eeaeb220cc173d3d3da68288a26fb74098f98b315660aa7b254b246ef565d6859f7e5eb73397a6c94815d3123c17f87733938e35c062b6d841fda2b5028741509484f11cbd2834f011cff32ecf159842a20087d4c8796ad48ebaaae4820dfd0c322faa5f8cf8f4a893dbab01c2baba912fb11db9b4ce9927786e17e547cc7015d7784e4ee93bcb7ab8887271ef2fa57ff729058f99396f2b52b7372c47d8a32989a2f98b0dcaae8370ca1e562e18cbd6fcb6c9f50063aa9240b31d8750bf722f35f088d0ed569a40f65c9c0df4c980903677d923e3ec6a94efb844df58b4b4d5834febe0c84bf2b17883aa643b686b8fdbf23e544c533102b95f3542ddfb4e8054ba0767836d7d1966e761e4df5a7b8a3795f94a5743e4b5e00a7a056159b039ee464805d4cfada735fcce3c1dda66199a166bad2e5d322067a9e675362aa701631167ef969a9ba169b0145a7622d9bafec5927ade4386d11322f2434944ff8782b5805303b0661d581bdea38deb10f550b9466547e35323d116a0ef67c08c87ee1d84c86546faa66faf2df02d84705af80683d81ac91ac2638458a4106d41d93040ac8ebc1f333fbad0a1402f4b4e4b57b88e2f55f0d2b891bad6ee0691f741770986c5086413412c7d6da7bab1e405410eefa966891b09d747f34cf24a4b3ceb9d867344ee40ea8f85db38c10554328851a787f2759083b113fcfd8b304b97726f24ee083f5a961bb4317796e9a5ee83048bb5f57bf519cccc08fff8ab8403bd649d656482b40baf41e0e04c08e7f21ad4af4f50ec6f5a80680508e49d9ae00868c6e5d14372fed08770512f275f9a3c5bd1c4a144ace6e7c9a34785ee616eb0a2b40a289d4c400b0a06923a3a4cd44f669fc74cc32608e4f9515232b7b7c79d549bb1e923f890b752704bd01e3297aad5c718626d093688b6ca8ae1df6b6fc724d5b724ed909d27e0ea8d5fee39cb0352f36debecefffb9958692b550d92f9c2cfafca91470d7e6e64a4adb095efe72f6d07c82417cb5c78b4d3d07556a9ffac76bc4bfb34cee2142b7b28fb65e9806a1207b410a9483cce507144ed9c79c1dfe20664f1a341c55fa1c50ae13c78a1d9e263a58518087e77e04e2f329abe5696bb6492b7e679b005a57bd1bbe623e72e63913b98104a04d37e7386d1d02634b6acb659a8ffd31d48407b3a7dfd79fe9c96b3f86e4e3626a39a26d7579cd03099898765307840243b0569a4dcd0a82a88a5168bc1f1f14bd4113b5e0c5db9d5dc49207a3b0417e2070aa55f37d0fac3dd43a0cd0ef3e60b97a9be60cce22b7c8b94c5d003237b43d28defc4c1d02c6a1f6a2e1a832a91c19f41c516815b9ad1326769b9654c9fedefdaee4af0b01f6528976f9deb8597d44c5ce4d903577b89b1198666f286503c132868919e8d18575f9d1b9ecb901244de946c61520f72fac8fe8500efa3ff693a498cb604c47d84eeee77916167d32d40258a9591059641b1751c0936636015413248afd5c6b1e53b418b74cf1088896e49c41092480729b04823855ca960d77c02fdf664913390e2a068d2dc4eda2dd4d56282f1c784faee352b7e69ab7c9c85419c89650bc67c8ee72a83fe183fb2096311a387bdfc0a7497cefd61f45075e30828f250a9247a83e37b4c1b77373adb7bf61015ca28676e14071eb0ad2f404744c8711fc31fd2e557287e0746ea228ad97e32bb1cadf082db1ff3584f4d42acec7c7056a6d882f3185951714bd2b778cf0763ff345750e8986b8b7d1b50c6750eaf9255b91e947a430e96f78ba30e5ac3a410b38c7ec83dd24a8582bb589089158bc0714d87807b64136b11eb0542cb9ae1a13afe6a2565dfcf365acec1572978b1ac25d58486559223d4554f95dca31acd295449fdcb0fd07fa5e7ec927bb44af19c754e49421c85ece41eb59fcfec3d2257aaed46c49a3402d39d8c749e08691a4c4916ef9c48eadb86dc63a3ce94f4e2bd478023f38f3bdf2344153eda10ed348e8baced3c699353440218c740697efc473d169ce0a246ad3ca09cec5b0edcef23ec5ded3aac52be3044969f1cfff17bf1e8b60ac3c917c7e42dd23634ff70f2d40a4f5f5f5f36a0852cba66357cdab597d8f37f999d13889f3cde48010044f697bf32828f75cac461df48229848c81677ad0bd29db1f00a6453f3de19454a4f962ec42b411dd572c09fb5598c77a1f725e2e18e6f3cacef8f7e0efd5cf26b823f216cab80537993f06c2288816b8853890ea49aa52f3729bc563623d07ff1bfed9197cbf642428b0a9fff5c08b400ac31404fe3cfca44973e4a8d5f79554047e8601baec86126530bc6fed3067b7e9856c15df1f49d313430dee9b7ed32a2c5061ad77ba221d01ccff12cefb99eadf7215cc7b118b46887a6ff96c5ab85d743f78267b0aa09531019b13da5c25f8c6bd689ff3a7af3bc4c639fe4035606f37e8cc8265dadb55315646ee4dc5720639031b2d4d223fef77d3b8bb62448629d693550c21ddf89a541dd0da1a4e28391a87361dc9c80e24d67a31d1995d33684f55d44e392f85fca5c4e7ed1d92c62bb9601ce0aaf74499704a948a2d848bc53e164455329a6389b3c810fa6cf839a81348060ec5b38c94709218dd4478000ff60d2beaceea3e64a9f8dc73af1b1c84a4ebf6dc6837879ad34576aa42f19e6d1ef45e6f96e246294b81574143bea0ebabb0f69ba28917e70e069a982db8ddeb85bf0e3a67e6743dcedf8b9d511bfebb7d42138161939d6c0165ce133578b15c9371dfd09e2b848bb5b15d9cf567a1c17897c7a9336755bf87e0d1677b4cb4a6ef001a7a8d8dcdc950f6201af83a5f39ce25e4b788394d1b9e0961b2ca37efb9ec92227fd0f59ca9c6341e060b8fb96e80439a82f0b1592674c2581033cd6240f784605a49670909777c749084efbe3ca2e6727136c91694464cae74f9dd2ba8b6eb194effed5e1758630c5cd968e1b9a184412eba9297e8e3c0f0c1fea3956aa9942284192f36ca54a1a371bdc69e3c1cf06c3f08b52c945987a7ee2f4278deb6b78740ad32aa3ddde618000f68331ab43d448937d3fb6fee0f462a4177faf23de017cc0030a3cca715930d03a4a074af483c7d24439a64c26d25a2c9cc74f2f50998420e5ebd3635fa12935573ee761acb5d31aa32830c403044070a600f10a01303dbcba1450c15099f9b8516b7266b473ab46df6a862e698decbdb79452ca94520ad506f3061b072d4040353768746132a0907b9262403baebe0fe15d571674529b7f5aae5859a96bc59955a575ad78c3c884b1a6419641b6caed26c723917fe578eca35436755ae55af3d4d445b152690ed39a687e4935512a35b9506b4c49b44ab35d5eb00fedb56d4ec3e6f37531eb7814aab96595dc3a6e754c1d6b5303ddf7e1218b4f6d76972e4b04356897fa9dbdb365ac00082d3eabd50a48f567d095a5ed19c00474ebb7e067ce9c397346f53a60b600aafd401e87041e4052df259cd2eb98055011177aaabce0bea22223c4b92e1c384000c134420cbbf337ccc05a22137858bfa7272db03bf3fd635835168d2d63861b28edd2259b129d36a5563f0eacf25fbff7e47b2bd854b8bd2855bef8fe3d131af4bd4d734466dc34b90d69836aa4944cbd0761539b528430c0d7f28170be39dfdbf7ded6254952e147ca36f55559c287309199b90442651c2b216937875935861ae39442a609668f2812fa3d6e6f6ed699beeefbfefc9ef294a73ce5ee4c9db7f9778588b04256560e32745667ff6b77b839e5733b7608bdec62d642c46378090ea3fa35634f75975288eff09ede3b19d59f1771cf573f41192f88dca8a8ba2ca23065ea185cc4d052bfd4acc67f71b884f74dde97d7a53aae14d9c7be12beb4ce7b699aa66d136c40f98b0861a1b7fb5d6a518bda8d5c0257f7f7a5b64f10d93247a94898afae3b53962d0a8f491318fa637c326e4d5c08d74b5edb9227756e48fcb3187d5be215c9fed6acb953e17d7c2630f4c326fef0ddb4a45491c07f52b16dc99252855b93528852a557131288046e4b9ed46b4322bf7ff7c76edef53312b9bd9afe6718f4ff5408ce733c4388b8d003552aa2363cd8147f0ac1798e87880b3d5053b329518af31fc8160705ba9f7dc08576a8cafca8fdd15507c74d0b12ca3c001654be9727c2545e1d1cdb5c3fd34d04d6cb135be6a408ac97279af412aeebe509a12a4d372d6450e467bfaa472a22b71b224f6e5a6e3744ae9bbeb69bde865c8ffdaab665668eccec3d938d56fb8395e9c10ec20071a9ccaadc45958d9cd2949ff8af0f84a8d133f2a0d8d18a08218410428f104208e37b4192813a34ab0ba1ca3ddc4f37e7df6ce2d3d2eeb88f9fda7b7cd54746452da2212116ec61715971093a0aca629405a808e8a7f5e343e4d3d3e3a79550edf7d5517bb33b7777f386047e30030af9bdf97519ef0ec10b38b4c583ef4f3e18e1917c7f0437c7b7322f3777e1dbdaa79bf59281a676dcf6a44ffe7dbab6a3bdb82552e27af3b13bd7c65b27427577dfb8598240dd71a26da1454be687189c741fb51575099f09c267ea149581a6b411f3f277d72dbb5fce39e7cb9e534ed9dd8fbb996d7eba3b0e5173c178a54f5b8370d1d2a7ad95a7af9963ca6ae145080463004191430fb1cb125570a102c3628c120729af68a28a24c6349733fc3ded176aeca492dc0da7796b9cee2f79c9f99eacf2412669733a4789212063a7b3e9705e463a61c360f2529bf33e4973d4c946a4b9658ac691933dbde729ac48a9ef7d0ccaf193f7004e2d01c7c9fe88ff262d1da5f6875754eb6ce5f91e87c1a8fc475df4360695bf2b407d6114d91ce7a84528479952e4f1db25b8989b604789c95ef824fbb8d7631876bdbca494524a29a594f27a9a7a6d9d0c7556ce60d6d10844e6ef215c5f6897f2ebdd28dbddddbd3053f3a8f16d7f65ef4948a8d916d9c7f53c8e3977a57ccaada3b454da52bea58ab26f53f48c9d7b49bc798c175389b2763254d945a93ddf27913ffc967f139fa9548ea2f234fbe827b126df646d616969a26eb76936f7b7ce37175d9065dd2f78a1a0d6813fa38d367da2415f98aaa5479f4808f36c7a72c7bfeb81d3277ffef68176cb5ae271c932940409b21ae6e6e9ddddcdddec45495e4f0bc0e8840b059293500118d16e327ff7bf24683f8f337f73290e2146903b0dcd67d9d73ca59a94f24974629fb9919739da1c91e649a67f3d6973d83cbd7180a08a6941f400abd31b4455f29c5bd7e485707a23070ed3dc4e6f7c4165ffe3844e6face297ec86c8943f3f8a4aae41f7b3eeeeeeee97c5186db6e7b818020c13abda80ba607830aa4b18d5258a2abf0943b2a871155e8858a94c58d002f840a58d149484c2ac6c18b154cdf1ef9eb6b908022b6a50467da4139c327744759a048e51dd0e95b6155f902d4ebb53ca0384e5b13bcb5d3cbe03b7217eea21330cd58626b7cf26890d8ecaccbebd6aed33e2a7f7dbdcdc46def32004f76c4e1a38a01d0fd515cf49290ff1d0f25b7ecb8fa5b4ce1bd9137fd13ca259f58a3912f1c3ef41122986f05eb32abca44d8944d2817d3c2e1dd41cdcbaa04d229148241289442291485dd07e87ce0282831e5d27fe6f53e204043ccdedeebed33dc98f4a9a18b112274a9a386121292662a4a4d5848b0c6969464a5a4e5a678baabf1b435a2a7527e6fc2ce8c66366664d8b1042129a83a413509b114c5e8d5102eeed1ca5c61cc971e384c0ad260dcadf4db883ec266e4f3808337c54f1a3a8e004dab1035d584d4fb8861f305954f233ad09ea5128d92bea8241c28d9ab5a64541fdb35e6f1a2c6b04b71bff29acda72d34f64fe8d3f94eb7bab00fcf9fe50b6f84624fef550e0cf87b2e56d44aead0894b9319741b77685dbfa4906663d31454b053ff3d79a106173b6d04ce96692d6e1e77f4e84fdb13b4a405795999f48737cf35e89e9e66d43f688860c2db20d2121413b5409881e71fe252901a1eeab220d6e069bf37277f72c5a54c7e674777737a386737185810109f5250cabceba5fc27011d36af50092e2e69cf38b982f264c16f30588a0da95a60aa81b353b52b097b2c5ff6a16a7303b93f357e049214a900cd42532544d844aa24014a03a4941a200d52546eafc4cd3b605638c5d7d873a492ba0ea123e435a81278528753e89a4427735bbcb90a693c127f376a6a1e96400aadb4323add03f49da85427fdc3aae91c1874b8d6fa2a65f6597b6a420bc42bfbb3b698923e1adf04cc745bc60c004358fe9662e718f8fb3bbefc652ba899a6b3503fa9f07ca44f509bacb3179b54691fd6e16047664a9edaec3e7ee356cea393fcd6035e78a99bbfd87e1f69bc31f65b55a7dffe6f473a8d40d5f9250e2dd65b782fc5f5f5ff7bffae28d874b35e73f849f997928554488486ac3f8a24415b5a3f38bcf8f1537e8179f15468250dba4f44c15e9fba9ef645bcf5461df3f2769d31e3365cfe35a06afedcdf726c43e864ce73d6f6c6bc1fdbbddb7fb1cc3b02cc366c32e26845042c9aff6e893b72f2763a83dbda2e0afd747ecc083be39cc10c2761e0d9b8637872bcc60f3c6c7381c66c53d93d2d28ab5cb6aa1303d2c8659a9146af52b94efccd6b66fdcb65c85a9b4e01b62c488d1f18237850b7eccccccccccccfcd899f91d7981d78b16b8847e3f4214850d1b53ae2ccc192db4f440c3156d84a1f21a0c95c080c145c6ddddb3561571862c6c54cf6283ea5382518023cc5c1fd4ed72c4984aeb7639428c50cd11ed9645426a1ec14c52aebf8c3063a6277dea3f22bf54a5c94973fd73d2f97bb4e3c44ffd3b98097dea266d3294545b9873e22ba0dd9cdddd0dcbc8b67753408fb039fbde1beabde90ba6dbd4641a8ae20c8b6e88cccbc458e87e66a4a44f3f50fe4c8b82c277c267e8fa69e668014df98e920795f84e6a2373fcadf23d9448dc9fb36ffc53c53d9b26ef41073060a93027e8fbb7d964a15c9c11c54ae59b4d11749a68b0d8b05201e9d4aaa402b97bcd8f315e4fc628a1a9557883f999c816a7dbd1aaee19172fd5406b5a3ab8f84e0d97ac5593b56ab2564dd6aaa97929a5942da2e984763a5a2d1dad1d5c7cc75bada222231dad59334985360b97aaa62506ed74b4aad7b4ea7b1d2ddf81ef3a5aad0a5c2ab8e9e81bd0d6d1ea69ce43d8d1ea8e2180106635de43acc26edcbaf77686dabdb76f610abdcdddddfc8fe30eacb8bbebebd1a347f7352df133d71356ddaf40342571d67c47ebc6eab5ba464c3282be6b8808aa3df3101389c1baa0fc1d0f35eb4aaff6476d6d857add578e887c5fd5eeda87c4b339be722e9ea53a7bc957dde33beeeeee46d58faafbaa7a4faffce49feacde1f7c3d71fb79b59a3d41d3858ad2a343d13abf55a67f79dc9828831e10e5668a0c10b162b2b4398217406199e030d3400d24207338e70c20646ac81060934c98394320d33118b58f439e3ca0eb0d0d02386110c54720a1afc1051b1a3ee1725c2c0029ab6d2ee6d18d5837b9ca536732784b07bdff4de4905ed38ee4b1260ea1725d6a85daab248386aa0d0108ec7bedba1ecb5a74546255a7afe2c239958254dab7ada67d85ff3e52fc9b4aa17a5a905bf449faeba210fb21dfa4243983ad9671cc01454084f7329205385f9904941de3bf6f0a309c6c5a47c685ab273664fb2a73e24724131f9372dec939eb441c97ebf9bbc3ab79bf8af4613a64aeb537fc6031552b306f56ce1191f50a820ec9406e95229080bab0ab2957d98bf08a2e2c355eadb342a10728f942fcbb41e0d872c7ea539e79f37864e8d6a3868388cf1201b326f6dce7ee6cfd06d34e8f1fd9ffb737fed81231a2592bc1e7ffe9ec333d486c7be19184c19a11d38a822abe021893dda3daa4bc599a23d92524a29637c52ca8df17d20a594320735aa8cf1d5482997d8c1891da818a3c1b0c1e262b45aad44f0c152d10611175e3500960a1a5ce1959422a59418132c3198a79c4fcbb0eb95a165d8e565ec937e262c349f499af9967dca084d584824d7e684367479a2880a1b74bb40d153bb3c7154eb1343b59fc70aaad48eeb713364fe5622bd52658f7d7ff650783db367aa329758b24d497d0be586a449d7b7c1e0757f0175492aec1975372c37ef9f2c4b15c3fc18aea7f3bcbf053f73a64b80cfcbf5dfb7b067cea8e6bf265db1cc5fd2cd6e43ae7f1b0babbab6cfa3e449efd0f848208c0a83c6c037614c85590b6807b5db320cb444f5d7f287a975efbdf7e27b4f7e3a2f8adb6c6ebef7fcbd136d07b8813a5192d753a6e4179570fbc13669b47a3fddfb793df3f50041346840a55f803bddc8118ee3b82346d6f48291178ebcf53572645b4728075bb8de5d98834c7eb6937119265dd031033de2847baef9abeb9aef3d7e23cdc922cd6192c74ff27755521ed138eda57ca62df379e44317d06e8b9eb48efc2349943499fff60756e53f1f5874c1ebbaaeeb22f91821cdb0c19525878e1ab0b8aeebbaa60d26318e30c2892eac375c300328a2113436ec163ab0baf8d006981f2fc8bc715d580d6344245aeab080a12d566a20a6cc1534e017422af022b404ebba5e034c10860c91115ac470c1472420c2cc5c576c151911c51543454e14a1925ec440888931b2943848fd396b0efbdf7ea9afbb93945cc70cb49b1af7b64e8332020a13c41ad024bdd0e66e090d11fd9821a136121ad241edd6680209719143edd68d67e1080d21b1a713d0fdd7e67cee75f79d44202f2668fd982121f7e9d668b2bc04a144edd60def073c00070897d0dfa392c05bb74475298f17204c28f1688276259f3158dc73ce9f364c49a9b69c307fbe376949d3344dd3346d5b6a2ac133b6bb9f9b5e408219cabd39ebedde353bacc0e974e078bf6bd3a7f79d4a390baad405c32aaaa5ba60583a54069c4e1a9780637df8bfda196c69e2b88411d6c7fb05bccf72486540943f6e46f4d5a5cecdf9734fd550a150e87a431d64bc7fd3ed2e78cba80b106c78f3360985aeaefde54db33aae1b1c030001010b4840a6a4b933b4c8fe80dbaaf69112367abdda1c569107450d6bdff6e27b2fbed7f19bbb7de3487ff0dad860d6c00a37ae08ee4d6e1b9b356494322e51833f276e9082e5238598a129a52bc4b4c478f143f6d64d0f4a3ff66e82b285483fb641f1676686edf13962d98e12d025ef8fb40e976ea03cc3abf3f188cf2319b4e3f13ce6c797723d76e4324db9aa8f0ce536554bf1f6ef8666eccce76e9eef2d0cd06ed6362571de7af449da4ca1ccfcdee3c8cca4dfe3c8ef716ceedd9c17991fc37d710a50920a44f8228c562afc5825fab4ce7bb8a1625075d38a42182f568c2dc8f2eec88aacea5a6c557fa863e585b2c76f1d52b6243168d625c50cc4201d4038c816c7e603140bcd3bd4d658a292a9f2b5de619564ad51268b5acb378017f44685f8efe3fb47920af17dc3421f3efa6fc73f00fccbf111c78cd76bffc147ec499f7d242d2142fa6c7b92fd8eadb48488f61f6c4f5805808dfae909e9736c93087d1cdb139a67ad51a69e30247b27b5e04e6261b766db1a4a626155f37add372cd4d02d4a9d6fb79e6e7a988376777ff1e17b8c5c257defc1281f7c26872c6f8d74c28311fa7bf07909ac6041950adf4dd384c4ffbd47e1093181a739df1f5c9974c2fe6016a25b814c7f6d7f6c806b64ed6572ce97d384bd3791df24d68bc9f54de20a46b0f997fc25a510a587dc3a2745002309e1810f5ddb1c1276733a9a1350d81c7e0ab96065dfd5d449aa93f4d85f64b2b7611da9aba917e9ba2e2e8107fbe0d1756ef27930aaa1dc806cce191a1d50fb63670d65708519445c61061122c0dd1f49e450c5686896cb95a7af2b6b0347c48262e0fdd080ee8f9fabf2676dc0f7c39b0ea1216877f353fb3b1d42f5e647b636a73f04a843a8f64f1182ca38e42aa48130eaf81a548a6a5b3771e4784cc78663dbe6ac735ef03252493c3e67e4e8436ae8050d4014e87f7e7cac501b9c2b52b6c0a7e223a58c52ca0d52a9b26a0e08ae9a833d56a009fe3437801e0ac43f3fad63a57758b5c30b7d5a770a2c23a81dcca2c19fc9048d533a2ab89ca00d3341298042e553b41c697903ce808496222d37801f785ab4a441859635cca8d1a8028089811053aaf40008320f892cc048006b218fa09245078ccac362840e8e58bd237c60410652180541859018311e162f58d4a079b9828c0aeb7ab9e20d2cb2c50943fb73904199bd5510406dce61404b5ee21e7885c63c368c86775dd705a45eff78bcf6e8e5f0ba36fadefe7b1416654c32d38d0afbf2bb7a5d10a4ecbcd23a1d17f19d39e91295884a449297c8ae74c9778cf8093ed432e92cd12f718fe250b304258445fc04b934079f8404651618999022ace5d65ed58440f93ef4b66347cd45c842fa16a3082d862f4d4052242c52fd7577e30d00e4f7d06673f6a9f6e0ebb78f210d62f6ba63bfe6a6e16a6ffc1dce45b9fade93a1efcda6a92028efbec94dee06436f65c5288b94d659bd1ea0a025a278547c8e848ccab861646454e649793d6f3584d3bdbd7954de4f192badc3adf381cf3e2deec65b4d59d43adde3e264bcc5bd9d8f2201884665cbc7f8911bbd7d2c29653eaf7dede5533e18992f8a8389ac4f0c6932995a63da9d52e84f4a660c8723ae638c0040e2bcde826aa0b82f65ddfdf6c72eec5e3f794333b2c5e1f1f1bde68d33467fd79bef4d7a067d41b42c6a91e3d13a286c022c54b10d8787e94b4b8c80329c1a2d95026b54dd684ee7e9ddb0043840309d46a8db803df963d7962ac9d4c714a72cb03b3b6dd3b3bf016b81dd899bfb5a1137ba39fc1d8e4e03b51f3572202e54fd714d5d7943a3c74e002dbaff75339f368707b42b71fd80f82efb7577bf9ee14111a0a0fdafb99b9da69f0c0ec7097a4cee068b5b110ecafae837e22d5a9f6c4e7f97e2dfb4fde11f9fb425c05772c2fa682527a0fd7633617378a0cf65089f266ec073831febee3c281284b40e3f1e212c2194522a84c74d26b0784c10e28f47080f8bc562b1585ea86851fd8bac4b850c995591c0f786ddb01bf2eeee2269f8dd0da3c81e85635382733ee43ec66813b7b54955fe162326075b5431e7bc6168065ba09102b945185cb0c40451bd2e4b8c952a2c2d9c4881e410fc90054808164461840db8180a93459d32a660886385d9a1dad4658559810f5d6a5eddd561c6791e251baa752f8bf1f704b0461388e29a6b578376940e24c6e8313adcdd2abcf4451742481b9ae81254a50a369068030cbc22b485bbbb7bbb3b055a90041b4747ac2fc85039114fa06088088210581034460fce2041e4821e98804263b285cb186678d143973278a062cab2680853f40227a6b4a4f069c208a1269448010b064c7c79811136a87c8731b88ca102224ad7179bb5a2172ebc4c61460d27c014240843822880c81cc2f72670bd4888db18638c31c68b96c9f684456a5b46aab852fb5f5832fb535ef59e2e8f1632a419d09f452200f4d06e8586089100ef56b9be17d0167cdd845b33793423a08fb3465be4ef6f6b5b969708671b0ec8abd56a75823323f2b08d9701efa602da675f44dbbec81aa00a922daa51545154fdd44fd943d3515dd5ee0811f04e86485261011a66da0223af0f08eb7b2f31d316183a42777f249ab9c1d035ca8fdb6c48450bc23840dd2b583034f732b505deecee6e780da1b454fae73814ca6755ec0346f57f16b8360883c7de2e2387e2f7a03b747f304208e38bd09dc5c418618471076695ffd29acc6b733018aa0ad772fc25de40ed091b5ed73637e7e240eddfe96461197e59b22c955fda9dec658c396c9285e45760774a658051c484935c474a724ff2bd07d5ff62a3fa4f114a35f0bd3456155b6cf73d5b12b675443422caef497a60bbc30ce5bf300cc3268a5fc51ec330ecebf5138b7e5dd7dc7d4eddc3c8f8a15023ac3126870ca8f7544f75d7a481a3ca08d4a0ef3b54d7184932d5ff2b99d6e9e7f14a378f83aa20403d0eab6f436d8effeb1eca1023832a6404bd7d3ec110b5639636677cf820d49de24a96e780b0c0870f3719ae87328bc0c25bfae934a5fc242424f564cb932d1d0d32c0cfc08ea958e006e588c727832d2b95fcf80400436e474efcc4e54057c539a4a01dfb542cab0fac10c1906a4bb75464a9493c90a566a0bbd030a4020838902088ea1b121b24e83e17f85079e888542f29fb4dca6cb28f9fe45f3ffd7c03e146e47aedaf8fa2eab8a74ac15e7bdfb61b7f26ec027defc44f92955d26cc5474033ffb28aa27f2b1ed06422221d8101e3fc909218b81b82111bc7a0de3978a5add0e75dc4653132558087606435028148aba3f0c137b80709ad981004254a898f1d9c28c14aa4286191344eda80b4b6ba3cb163ce8d2d2c874d9c10da876c35506d542a099a13b84d0cad01a2e353f14ab021383625c6039a02f06da0ee82403a641e719464c8183dad19a1fa67803042c3447dd2f5e7e48c34b96089fe3703d8e8836043d2dac179484ee96d6a74a73fe5728d41e10dd9dcf87c675a3b96e04024dcaa9d197e5fd34078216944a41bb07e40394a5759c764f8b959efa82dcf87f1faed53ea51265b5cf6a453304d5e66cb51050c86896ef74919ffabf54a22d165cc195ef680f57b0e53bda96954af1b59ea9c20b5413432008c66a51838a7048c09719d8900320820042085623a84c16589452628c411293988c3166d14509a32c807c988bd052c4152b403e5063d3aa787f706b5660a952adc042a5fa036921fe3e737e6f3690d216f89f24c048057f4943e076b3830775a728c24bb7153a05169f6ae5bd377da0e0e753dd892e2fead7e3272ff22692d23acceec65b452e82b55747bdc37b7addb5e2c1fef031cdb5b1257819eb838fda581d5eeee8ad7afc687fc48f9db742780fa147aeaf87fae010010e1feabff5a550ecbe9536870bedef504395b397822566a82440fa678976cc943fadd3b54f5b619566ca6089076c9faed23ad17bc5037d5ba9570d54448b29e32e209282c528a59498c4a411bc93fd7ec73bd926e4bf4cb33ff8fd51d81ff2fd53e012e2fb4bc07dc154f7edc2739841b9df4ba0390f12812e3a922220dfb294b2a5748ca69fa78308d91cffdeb068d2611fa92ed59f7398416365f2b0603f4d587a260c13065ab97a87aa23ec8ff7beb1041e560365ae647c2ae4c9fc46364765d9f7937e6b2091482412e9d9844159ad70699a964def0da7399f73eb4a6f7b65d0f7dd6c2ec987cfadbcc8700f5664e289ec036b90e96c0e0102000052dd87bba3fdd63dc187102ec7842b53e9b87574b94a850fc205a3c26dd178f0f95c8ef789bbbfa460a8e44e57941632921100000002a3140000200c0a06036160403026998ea3ef14800d788e4288641a89b32c8751188490418618420800800010801922da0800d126ffe3748d6693fb107edef90ff9e490bf6d208188863f0917f4367c552a3e6191263d2e8f2b849c127774aadc9073377267bfe0d128f06001e9cb56c51908fda09c0ae249718888cada1a062af12fa088456ff9a4e47cbe365f0bcdbbb9ff440a19523b5ca4cc38d2380cd7f96eb2bf873693623e55233b2730cd222a7bd3fc48bdcb6d7ecc4ae4013f19159bc4f5bc9ef00abdb128ffbb3fd29d2e08fae60e72268dfd6cbadf87268854255ea8e750be60324f4cdc044036fd912c13e5acf205d7c35a9dcb22dea20cbaa1dbcd0fa204fd303308e9123eaf5c0676a4b3aaec95f3a5c29e55bd9631de23763656c726f6ebdf38c84f2d02418c8c025d464a288b26791a5568c87bc8396468de76cb841433d84278b878fc951073e776c5fcef2b3a1fcf8586cbb43c0757bd07aedf253dced3109c26bfec9a26d5f820e668c8eb4bbcfa64dc5e639d5c0695b847d90995c05c703fe2916249a5417b8538418ebc8833f0e2f596aed8da8a749c22844a769e9849bd99d7fd39524c4e864689093d843894c3c7652072073d2c3ad395f31968914db7662341e1a8de40b8f9f9c7716b85a24397501f6f1c2ad1a30d176a31168b663caf3bb7d7d2233c52c341cea56b4aeee98e6e6ce48ba1065e4f749c8283aa6c27f0682beecc816ac988041da50a5b7a7f1a927f9246e9271129dd0dc19d1db79cf184208228989b738d35e579c96c2986ace6b5861b783d9afd6c75c0b5e35648bb30931a1a0f4db9dba413a83c2a677142a780f3dee6f98f73b0f6a7c8e349e4a76007cc08ca585ad952a0a7aaf013aef0ff916e8f57b63c2aa907d12adf4ea52762b6a4b365339f160589533b9c42996073d14daa77675f92f1a1f19a1b07729cb971445e2b231e4fdc973ab5f20c6fc8c4a23fd758992b34264bb1f4f8b364f17181a67730fca5ee34b61aa3da41fef82ec489806dc93128d10310688e1b787c0ce83cbb2b439c0c67d67826d27d6e77c43ceec3990f1c2791c7a071aab1de4afede2470794095c6740eb7b0bbdbac53db4110b7ccb281c0eb21e8cb4010273a6441bc1881661b2927915937add150380a34e5a9c2ab1dcb753e3294d75e6474f62dc9b518b70a81e68495be58ce9d2c19cfa1266716fd9e6f81f29b3034a7ed5f9fb79d47dc2f818543ad07a54864d3559b691e13335ef306b4c3bbd1bad451b8ed9a15e5dd832ba57912ee47baefa3ef704032c3c0974de147652ca8f49faf37145c3934579562c6a550104a9354e8fdb002c7a4625f06ec9cd9a04d1e3f8d464a85bca2898881d0c09741909a1505c4b5a2ca0f8fd1acdd3a51a4c261e7eac887a3a7e540f097c75064ab920a0fedb281d9fbeb53b725ea203ddb72675e2d333e05a11a18c0cea1b38d4cd8e8669c8400bb83163ec426b26d3338f2811ab180002e381efbb0e175dcf3eadbc80fd1f963ae4ead4b624179c824a4f47433133737999b93fd8dd61189d60acb7d558127e8e8b8efebf649cff01e7f38400e8ece224174c0f3138d8968ec6211cd05e6b48a57fe97cd5fd31e35b4078fa27f0e04b046e702b7bc3e22a6a940d63d40556f8c485c7d0552d5f99fba615847be3b2eee9039479eedd7951e741b481a3a1eb02276863bd6c4a1765f7a2e170f678512afd8325d68d055e0d2c7e00715e66813281dc8bd2716b497adc331920390732b1e1ae3bb8b01b5bef10d4a96d07f61efa2a5ecc5e5d666d17b8c9b49c6bdd2717be6ecb6d0ab734788b4726441f3df0fd0727484a8a07a577f8f5ea97d2c24a753135b4439982a8948598c5c4a422f4b8be8452f6532dcc554aa64ceedfd6b8313a739a69f14985f450b7df61ce4ac98b912c97169cd655071f6384fd659f5e8343ba6d4d865633e88991faf36c0dbddd678484278f5d99451fbb86e02ca391fc3fedbd577505ce07f6a70d2480ce8e074dd9d155bfff5698aa274ad37eda6dc145ebbcab920e6027575e42145667fe7c2bc844d04fb9e3923bf613e96a44daea7b82533879add6e9011d879408c768153244fe639f90abb794a3265f5d441bd0698d00cad6184bd9f10354e957e6532585912e2ce2e731c30d9b4224dcc769f4a82d4a5ed44f61f84781add8d802da54078088a09256799a47f486009959a7bcc35abc22457a26beb4a3ee9618bed7dd7b586921a3f75495e2706973b604ac13ab906ff5f38d65fd42b2e00358a91b3374c3a03115f22d2773bf4a97f0fc1c69092ccd35b1c8d3be6dfdc111ad23b495f9f355c22fbb4d72e0a0be597fdcf911829dd5f1f396fe3a49eb41bd970e1d578e2dd705df2a4624c3e500907c9010ff33ce35ed08b1e6817d29da302e581552fea912192c690c3a4de61955d775b486f5d2069502494dc7462b9b23f14c42ffaf98616f8ba4201cb4a642c98ab67965baf22ff3cb5c491b962b1a5047a35012a9f9e8099204b1f1d1048c0bebe35d9240e2f77c31252237a99eb40679e93b1a40a4153a3a9b1671f861f642c694506c1a7fb07fecfc70fa8d637b711c9ba531dd0448d46e697847495e4f1571e4baa3c3206f1f8cec2bb660dfbdf437fc7e0ce86a5cecf547836d0267e5bdfd9b017823449d4f9d86024078a006d9baa7447b26cbf64e1d7d2166c1c8f44a2e859fbe606a1e36745a39796e566723f6223f14d64054afd4aaaad47073e325498ac26ee51226981e1ac9c35b8794b96c696d5ef7b42e2e9b31300c2476b08f7e91295622caba4117e36fd9967c4d06713b6105a35b86c4035768247936bc5ed1fa6764db600695593ce2aa795acfed440fd2de1f0140a4da9f4bff628148d2eecac050dfde585b897bae91bdba427ea83a6212eb629697da7fc691ef0a08a99c042f9909de583958ae7bb831865201435183f02880dea5222bcd1d42510445109e0905a715aaee070f01dd89b0fd0f5f8a31c2e893b3591abdf10ee32c975453372486644cc56052628f3f557645301d79763a08ca33d330b6bcb576e47b0a01fc2ddb9d862be8d0f23b69825cf2a1b13aa5809063fbb6124194be83c82c61f2d5b4bf773d315553acc4a2bbcd92abba62ef4e825ee7dbe26afe8dbb717c17da28fa4bd0626685ee63ea59ddea3af155ab5cd354f69ce26e0cc17c26b94d36390ad769e1c88ba95e09b93a03afd65ba3fa7595230923e87b2b67270158c7c8491d1d89e2e71cbb9b2d7a9d9bf6116cc60a3ff96d4b280fc5554f61405b16e0d3a862a0826ecd8870201030b617ce0a0614fc9762484e72bc6784e094b31ea705abed7bf3994563d9de487a158c91eb58cf6bd36402135cf4842613c7fc084db57848a7042f3d0e96ac89eae66061677fbc2180354730d72505ef4b30554c918b16a9d41d240c28ab4f12a2021def83e3faae6f956c5f49ac0917c76975e49f54276313503d3453f445358a9c1a08fbbfe759f713d1d56dc25c7d9ca66f74b331fe948ffe3dc1f886b5562b9a5e46a69901c0019e2a9ca679f43c79e8ad9d1fa4e0d7d4880c34085533ab409a91f01348b8a422bbc77b8348eac7f2e69938958c4c1e13828e2cd98c77b3cf47dcb76e5daecaa8a1718e4728bede96b34e103e09ac18ad3ee6077c09db5259196847c2aadcd7cf804f248ed190f9c1cbfef6e016c001b63bfb66f0d2c36293a4b5eb6ff6b101d98a6e20eb09de720e314de9078c674cc626108797c522fdf9068359ba03955d6e9ea07be77addca5c3072b6c63ddb86508de775cf43ce4afb493cffaf37e5b38d4feaa7d553f9317a18c024502804bc657763b9629b5d64169888d4a51f5fd7714d955e6bbdf8cbdd7431815b8995f6b6a49fc7b04f93d8f512c4c1d8bb9464929a082f740e260ab383e61ecab406f6718bb48d555fa93b78b6a86e1fad718b694c56bfe08bc9844d47ee9de3f24698463bc7d3596801a2cb26fd64fad84dd581b9988794ba263b5adf60da1e977074649c029e39a7f7985ecc8c5e152025463aeea0a040ec0c4cb3f4a1ed587dabf5b7a299938b1b38c9570bb7824c3747ae8f4a30b8ca198d4e8cd73817e60731fed7f4fbc9f440a0fbf9cd1a52513384fd8999e5434a32976d1752048119f315d520961a987bc26cd0b661a52c74dcfc83c56edc54280624f44e33bb2485be41431e1f23f2d9d908caa4fd33184015370eca467ea8b890d29d6d13d902580a248d6c91f45afa08b9c43688b5e32578fb4da816cb8a83835506d1abbb1af53c21d0946678c524d3684fb671a02ad721e0e133ccd43f2375a706ad3e62d4d52296026d8b478b45ba4c06b7752838f1c012d444fd474e021714edb800ee4d4954094cd80962a72e45458111935166d1ae09e5c50aefb381dd8d9bacd829887d09bfcd88206ca6f65e1410390e90a1f5d7c03c7ee24b3b166083c9c46d8d4c3633974d40d7801ff71b310b02d427e1a5746251bb2a1219bbb25ee5ebef544cd552457b12052832c5fddb9fd967a59b9248f56e1324c8c1a75872076aa0ca89c23b337b0376d742efc7e4700f5306cc52c83fd0cc948552553be5f600c4b09fc6536bc6777598f6a6e3738b907afc3ffe7cf612032619f33485409ba8cda33775646e55efa64d832aaa19c1b40c50b1f0aaa4d0234a2264bc339435364f20b01774d73df1450588469a96a1c34f1abb70c1d04536d3764e4e35703c927671b6ce4d03c3001515a7c5d5e5471c6443c162d7fc5a4207594ed564c0471719445cc149f0e0ce2f3abdd37677c47adfb73a5fde1bdc4b756b80a70bacb56f42874372f8b12ecaf50a917e6465ccdee2c70a1abdc223f7da180c211853f49d28fcc830d3277065ce4fde0089b350e7c2b439408f611cf48bb37e7a422320faa30e910af4ed35b360da13400c2d5dbca4abe7783f49afe114c8aa91815eb4a45c12b818a1b7d6548c620f743aa301328d0a67526a248eb01bd0c27dfb5178e7c4c3bebed424f95b80bc92b644dbd761cc908429540a914d448ea4080f08d5145a49e1590aeec831120956940ee370456af675038e5b07dafa5ec67d8898076b5ac4e56243343ffd0831f1681c840cf81a04a4eb47d3e5687addd8948ad71e4b2cae64ad42610ae2f0aaa58efbe4d2044eb74c4e36d76748017cae1012e11299a09cddebc3936bc252d3bc8070e5c45678cbe7830981c09f734c513ad2f5322cbd29d689d79d9f6d17c184d1504090934953c91af3d984a1780721446fccddd43db86ce6a19d2fcccf6ae9d307e41d782469e2c0d4add46bcf9d4bffbfb8443ffa25c97c1f9bf1494dc8447fc66e16e6366e7eab320de35d63d20ef9e868431d08232e329d644278e4b9bd2ecef8330d8ffa1fd74884b95b93df6c09f322daa4176496778d3534d077d5f5e61433730699cda579ecd5529a84535fab856f12f7fa34627866ebb58185faab70b03910d3a04e79b2f64a07961973130a0c8ff19c800afa8295dbe286ac17990a502d63270bbd47cdae8ce2e39cef2743e139e31eb6764e00c8b447cf1651ba6086f6bae2c60d6b8192fa7cf9adc3121c7de182239d1b5caaf735fb1d84306b1aa35e30267afd0208a92b898592a34179453163920ad0a0c53f1b57b4e5081f4345fe97b74926aa0a96dad9f879554bba4b2988cb6cde092d7626940ee3892fa313d09ee414056fcc23798077901238f68aacfb1bc4629dc0771ba870eac1defa3e58f4d66527a74dbd0bc73e3da541c31dbe7051900d0d37db5b91d000e005d9a0000bd20f5fb2744713400e8e5005086b1ce7d7300d019e02f7155c1e3a45a8fcacc93b6b91c5331bbf93f69f67f171506f26a0c3b222ae83082067d3c3f734b107390d592b860135e7bff670ed3885026994801052b8df4f3a2a809dff0da1c0c8bf3ea641820ed773a10766f8c0b38a2cc47d344d2a181569c86052c5639c11d8be2cd40458dc62b9c00b111deb4cdb00f84684a4a55e73e3fe2f54edece4b0b00e3cd58b7216358bdedd341dd2c0899da48e5c86fdf949eaf817e3c7ed402627a9c2aa401e5bf0a1f90eeb6a7bc7423691c714ae30729ea3f09760cd401285a3401c8e794005287e5f347a421bdf5087531e110fd3e4ee63c903568c36bff34df756aa0654690547207e95f06da96d0d6ba6df2f5d4bd79580df242e99f95ac158038faa602b08681e5fd3e629a8b3018733027e31ee67f8c6d12aa307f8715a2d71400dec293ab6f0cb69727a8f5b8b10bbf4c977ee0506d901a6ce8ae6e7d1629a7032521a99f05b414f6d875218a9bd796152eb9b32eff7d3c90badb78bc61b420ce0a2c8c39822cd931aa186759ab9e53ec4011875495ad72112dd336c7e999d788d9849e562fe7f79929e2b1d25f656cc9ba5e00161eb132f209fba60f61e050ac54a1d612309d5dd810c789f9380dc49cc7ba0bf34723ba1661347447669a263d823a2d27863ce4d48358663102255aec9eef9b66c075b32b0a825a6f4c94dce6361692f6e7ca3eba56a250e0c8c57ff7afad0b2ca975976ff767828eecda1cbfc4e110ac7583ad230c82d5f648428e60d940a4fa22275e333919a9f9d5e80816dba5e0b6fcfc4b9622b7125683907b2c9a88aaccf816005d29b7f9c342ad82681a140ae5a365ad9009b0923111e44c02a979deb7519e772a95666f7470a1845215c6eb5ec741c8a09b57c994e1e73f2a150589b3c2445fa079586772b1aed70835d584e65d8cb268bcd165c59828f47016e444df2c9630e9386bb4fcea80a52f50e1469b2b77c33c63705b2b54756db543d7242583ae37bd1820e7992f3df9267db7700ac62a49fe837fb1955429bf2a14d76e2a41be945420322f5e7e61e30ee46333001510ca79dccfaa74ac5f08301aa407a9863175adf54dac4f0496cd85da48eb4f36bc95077ff89451de54c2990b536914965c511b0a9aed80b52f26481157901d53898139f49d33db1d84487afd5051965c4d3f732cdd7bb63141c80732dd1b714423e00e75dce60a37498b1db55bae13c23aea553ef720d71e6c814433f7a68b3bf61f9cc0a8c35b690f97b44838bd1f966b5c64050536500e42597fb01f5773d3af62745655fe9b3041021847d374351166349623a2dcc662f18e9a954f04ced3804da4c612a7b64934b4781f810b56172fc062ec7a14c02e12b5f2603ee72884875fa9f80b8aef999f0f37e9ddaa3cd40ec4172ce74f19c65f03cee29d8aa27487a083f65adbf52ccaaa99895abd1571228604fdef651f54c1bfa3dc610ce9ad1edd1167a6c625f7fb630796b03fb33c8470452b34b176dc24c68cab6f7d8ec6adeec24a9f471c47522a6b5a4ea7f87ccdbea484725a3c53d2a13efb900c387f910d730b5d55d5b09243c72f70628ee7bc867aa4749007407a0e1c7db78efa4d68e88274dd42b01721082c5a506c4b6a5c906b1e3083ae8561bdb5fbfb299a621a793e4b07344b661f74c5124e32d0415c41d8fa1aabc126af501a58407f06c3b0c3ddc604f64672aa70b7e15ada6d6767a8eeb9e14db6e4069e3a1dc6a6f8608c44fd2f9d863a5318351f91ae44305b8d712b8f006ab0c7243f1306a62ff10c5d8d2dae8129af5925cfca4191a12b36cd561dfa064156041cb6869890b022dc52a7f5c1fe41d89e851051752a5e563dc156a0c9ab0bf677dad161a0d7dd3c7fa520cf203c34a03c5d8830848466867e73dbbf83e5de06cdd550c16438563630dca68b4579472b83a70fd91cb58c236d7ad7bc60c1a55c6b23ec75620224826763518ca5221b1ca97243630499e41d63d2908c2d171badb0e759c58269cbbca9499b56d8fb7359014d17fb1919566ea1b9760cbe32a573e212ecd4e99e98fc1fabfe2e0d3bae967032bc42a57971c41322dba0dcc2fa909804c802808ea4b5938b282a43e3da243b7835e75fe49b1dd332ab83572bb15394b52a94337fccdde976be93e64ac9d389530a9044367a272f1d45acb792f7fce39d50dd041af427dbf4782011c6aaa921192beb6b984e6c59928e76cd20da955d2348f0f8b49ab54240b921ea0bd8a61e679cf30307bb0ab27282fb70d4f4d7ff398d6ed5761fc861f355ca17d94db64e3cee9490c9f7ec092692db2a477cf8a594e4a5d00b8f918c883ba68fad8d96633c937448d3e6a5bce378ace14b8b0741ebfb27d67093bd94c0fc3377d5046a988b62f26abbd67521e092da47e7ac1281327e68a0865dbbc623687e048a47202bfce8776b0072ed5c9de31c20c81ab64c95668ddb553900ba48ae9ac6a41afbc2d065907d569280d76bf26cf01985b857f1c3866e24df45e5deeb6290976c871d505dc1bb2ada7a4565c6746dccdb233b36e3d5d0fb884ca05d83b556200483d52aed4ad1727d0210465c27ba3090665e0bc4db89ea9fc421479b529d0320248c8bc2f5ffa32fe7a868cd3495f9945d339ebe76abd228fc8d4e4551d6c0ac8b2d8ef82a8d298512b428a9105dc4d377f605857edd9aef673a97e2427c6a5731d3d304c4b6cc243beba9118d6f0dd8da939fd68093a57fadc85c09c01cab687fbe7e0267a7cd44e5a30490bb8c146d771515d998603222876b19c35ec09a8e09eb31a901a0ee7a1e9f14880b5804a668d683c05bc79088cf2ee54932f9086000d0757627ce2cad2d872b3e84624cca7526ddc9b471f20fcb7df79021d9ffc27569503d2e2fc4f344b88173e023a7b7bb5d099f492bab66746002ae1582cfbf6d415c17d5d97cff98dac7111fa7161635258cf158b22703e60b3943695a0bc77d9ce3b41ca59683409ff015d2b0c7762e80ed1d630e4c26ca2f5c3964b235bfbad72716e708fede472675cd1a704c17642a5d2bf10900956b67d1d53932c5da66fee5caf567ce604d0867957fae8d5188a021b0fc6cc7fbeabae8daf1c7fba75e07195a5f66a12b1286615edd64cff213f76131c08906f5e06dfc260bee2c141ac6dee13b83bc30598d539551469ebf8e53e2e724899fb5f98ebb3685bee27dde671d9515c831af1d5232562334e7543e9c5478384ac7d72e88f9ce9149a5eddada27c3038c7251c3e33be1f92c87cf885ff9e59e6cd702bba46c9b044f4f8b2e190b81b2476fc2d646f00d626ce72d0767c6b165e57d71a0dbf94d09ed585f0d99a73e7d110552467e04bb67724595587887e5051128916f5fce22a7fabe528f850ebb51326dffec6681e15f0cefd555a43dfbc527d2fe26bafae4ba3772321898b02b76e73d21906e813655bc520d561cb2461ab816347d1f7a096c39712857faced6269d959bdad1acc0d71ef4bbc5d3984e25298230e97ff46462ac474478d48f97de6b057ab519eff9c9f7158bddabaa4b035e742a0dd29cb3c04babd18e019137bff3adf79b1b6b582a24e0c72ebfc4be091da9bea3a9c068bd9fce180e2c305baf7ef0ef4889f3511be9d452333f0561ff05e85ed7ee1cb22b08c77f3e68047a6da96a9d288777cd7d07ac045616304173a0874d138e4beb48f451e1e02941ed55d7e9f820ba81dd6d76f1301f1aba3eba05f993b47e08c37ea733bde4266e82d0bfe7e6110e84fa3481572d3fbae6cf840efce9c9c76c064a49705244d304594af94f88b1b991bf6f9f67b46eeaec966882a89d57bf7047adcb1d6d55a51e4204f35bd01001def7ccb4ce3700ace29cf71ac2f1b4ee807268da115e3d6df9c1b780b1226730ab09af04902ab8e9f2bf23131c4ddb28880815a0879c40b1fa58776b4209ce8c717154206bdf08dbab068b774820594e4ca61cf8e9caddfc18332c68820f8a80856ac1270ca30ba46c3376f467759123394a57c5949cbf55a141fc251d8082a8981ea81128fe1ec1b5ce32742ee645dcf41172ef3064ce97540cc7a119b9e24b049a70c40a05b36ad022c2b09968cc52da5ab07d3911111c2fbb24dc8ee43230ac0a945b06bbb1d72b7d2a1017ac9723cab78a67034cc2a54f09009cf1e8387bb65b17077aa47120867c94942b2e972a34e1c5d4022b4e066cfe4ac440c39921f5aea5739f3aa3fcf0623ad00ce4cb6136a9782b6ba005a6c061fd75f020f298b65a010da7cee93f357d9aaff3edcc262053030cba52658cfcad8131bec54291c63ff3700b5d8ce114f8471ddbc8be9ae305fcaab070d4792dc4478468db6e766ee446568ed95734b2e3cd26669834636a1d2fb196230b762914ef33a1b1c8a55e0214eb6693791f501bef8b1bb9f101a2aded4762e880bb450fd201f6bccdf93a73ef241d759ead1f9fea8278e2b7d8b2ea9e2fb1961124125a65ebdcf6222d9f706640e108786d74f1c7f306ca7b4ad9adc30dbf20659b183c4794de6f8bc6b7a3cfdbf02896bcac43cf99d24bee90327ca0a3d705fd1cb1cdba6b139884b9e74bc845b22cfc6573d3829af8ced3881876db360b2611748aef4b3368deed855ea57542bdc92d93e93681304d1c222306f559ae94931e46c88948e05bd24361056729a8bbb783224f1f12b4877e7fa5f17d9ad27954c9e0ed89cd881eb9b2b8403a3c1b641ec751c29abacc0901dc7d00aeecab1ae2371cda50293a82910d3505842d88d2a94f079a41870c2856d38efb634aa8e94b1cafb3ed787c527aeea2e7060aae7ab3c6effdce5882f9f8e1670330c62b38ad71959c362915bb38ba6177b97ef0652664e2480b245354c1363843864f3f5b3f7d514c0a6ec2848a97a2d084a4797b943dd2f61d4d0baaa4eadd22a7b67b4c1ab907803acdf9344ae66488aa364a8294a86bc8000f5e31d2f94b3e6bb793a25f821e2e34509c6361725c284339b5e0f39450d2b614744e00fc50a519bd971e188af69bc19873140ca5512c3f2041d2c9d2cc5b131cdb9e6460e36fc800cc8d78e648086077351d3fdf6e3f8881f07952756a5db16b1787ff1774d8958d5f543af1e6dda0074f930dcb6da15f0e49ec55218aa5c248a401a8bc62aec787bacf9f19ce753a6ea102720b704258febe411c233a554a6cfbfe600c57163d6259844b9778fe60694346dd7a610843f7017ccfd2e3b11b5002a73f382219f65a66993801afccd5341619ed6746fbfb2fbcf040f62dfb33e3a67c51869cec947f4a518490fd539e4a7b53c211b21e712d30797bdc4883117d6c1d287e4d1dee66cbbd3679b31241b21ba6208a97174caedb2d47737113c670a0385f381757e7238ef3707a47b8aa11007c6d553ae9b02bf81a2dc9fb1014173732d26da814a40eb7d9e15c22ac10b0feae606fe5e8dafd5c7d2b79994fd8a08a351e271327d9a5f90466bc5c4c562e01b883cb883bb9a0add04080abb04983da7e9f8c86671e0e24589ba971e16bf184bd1ecf5c1a78191fa25fda4205355bb31cf3d2d8c36600f7c7554f871706434598af68320176ec72408102cd0dfdc9744da03e14e947a02a9a72b825de7a18a40f046f8525a8126faeef645bf7b3c6f6320a3a06a8285881a3431364478192905ed79b01f1b9cce8ebb6145b33eb18f504c372ff61e25bf204d1cb36e915e7f330234b13b124596f95101968f913fa880481efaf57d8069fd4dbeaf435918fb3339c9e406e6c3033ed4bbb24697774da18ef4ea0637c3d5c8d72ebb2fd39d53181f77650797660808d7f94b6f03b118eb59a5f146f227ee4551278fe57ec05d5fc15c112a6f95362d17ccdf8b4b103c6e2cf1a6f94f8c0e97e3aaf2494828b6708d96518a97dc2a9006768b12dc0f8743ccbd0abd27d242fc6119ace30d2368db4e6a002a33eb1b877b0c00e6a2b86d0b6ee9a7860855ec0c7d4aec4aa9e68eb7ea68932cb3422e6ec148c6ed8ecc52bd26004a67835d0747c8acea9c44e87cab416d1f18f20045efa25e8f9b8b08c0ef911e96e870d5576b687ff07b1e797f81ae633b9c239bc8bc953781fa6ac0372b0bf30a98ba07bfdc3580c1038bdada4b894c54bcea8678ca8a6fcd14f66195df46aa887f240b44b8c94f564f742ad561a652ddbf85c85c6b83ee94f645ea4f14ef4d53a92f975688dcd5cae683ee5ac6dd1fffde55435e97ed59592f3b84f63f4b8031f7e834b0f98e9c64903f496262531a7540b26d0c981e410f55d7438835bb39e6458908193a7d10a16f4c5f99a7bb00af2fb41daf713de1e8f1b71b34730e4a572c9b5e34e6d8002a244d166a1cdc1a3b0f0563ba48a5ee6c6dbd08007cab2a9fa5c357324ff2061aa49aac9c0e386bdce35fb179576ee2250f43fb364d495e6ee724fe63285aea8de59d84714f1618585739c6ab38c9714fb96b7069f9ef63b6797df499286edcb1d3da53510786c8505e1b0fe73e69db15f7f83a405e516f348feaaaf10989e904e40dfe3cd5aa5b8a6157dd5cc89c6585181e27a9ffd0ecdb1f567fa70c8d7c50f3730ed5c1f2385a903210d5400f42fc9433a00bf52f5dda1600484cae0603cf7693b70ea2dc1e7e6b43ceb8fe934bae103edb879146cd8bf6855418b73cd877e02d818578dfe0b2c750d3d533a970b2a2187763ac11b9d0c6d411fecf2c7fad17696ebe6bc6ec02b0887172e70703d0e520143a811b8a8615ae009a38a63070f6f46257ae43ca60dab02190c521893d31374647d8a8ad08c48804a01ad220928ef93763142791343a59a58dcf3c8e793643f2b7c21615a8794e7d3c919f04f5c33917991f29a57fd80fe8c3579d0b037c2a67c4004fafcae0271e07a86cf070534d1e341864658636fe6a92653f439676b6354574f05b950f30014d6b975546dbc5adac1a0e7b41e70d71fcbbe5ec2d60ee2d01907f35ec6c38f69bfc4ba2fd2f0c1ad9ef1dc2c2df82a1ee1f07cbf64e688a7e5676360ae3f883b9a82b1310eacb71686aec6719020065d33da733f2077faccb757c2b7928df8d4f9c143a625f3587c37683c81d410d5349567cac35b63a97ce1ac44a7b0ac56f0b165063377658db8699a5b51670a5b6207df433cc43a1af6ec660286455e2a9c91fca0eefb203d9250b202e1152ad81b56f8390c65e02eea6a9fbf6f3566874c6c1d134d15d80c531a2c7ffa67d2d7d4e0925c879bdeae22ac91a710f51a6c780725a4c90287ec707b56c696a5df57c2020957b287e7b2db3640b9a043aead1a4e72eab7737c7e126922da091616b4252e588faf88269a6b7da0c2c8a2a1939b1fe4cbd193b883ece4f3c76cefd8de08d13100e0b83b32dfb5ce7e19e5fe6cec1c82c44abc530dc2facfa66f5ad3bf5bef1b4421fce8c058da3140195c080b7393a3f5215d0f0e12c55c483d2ede6654f59cbe38f6ceebd2a9f94e7d1cb1fd847bc8c8b74ce083a1f7a39f9504e9a72ddb1f383921292fcfe05dc4214e1c2c86d12926add54354810cba867204913d89b64e9db21cc1d38331da108e98c85afb15e4a8f7e32f070f957a73b19a2f4f61906cb443e5b1a4594821de863265d7df3885a55aa9fd8a71393c8165fabbda7b17d1b0025d0f63f17be1cc8cfa6034f358b9e039f3d6073147a188749afd1f0d5629c9aa9d6773b24e500fd3d2ac67b016374681de441080116e718f0cbf19d6493d9889c0521416a56dae166393ae75ed0d5cef701d43ac403ecec546e39be6da13aa1fff7aa7b237a2dadd2252bc3892f74b865c4502bb970a854901db00ad4a1551e5e7b65e7dde5aca90fb8c3bcd8459af0a482da4aa60515a23d6581f4b4a3c328df2b7e474222ab42367cb06f70e01da4bd1b72e19c606d7eed3dfd13d3d7408589053340c01dfd6fc1e2408f7d2beefe0f96bbc4baeebfa4c54190807196ed0ccdc0a5b4235c507ffc92ab7e437f0c53383ccbc27e9ddda532e8b804c33e296f30e35c7489aa19d5dd1091ee5952b671946ecc919990c6bd4649e06ff124d2e9fe2d18022509273699d3c968de62568f4e86b1b700dea3c359aebd1d19cb11b0ac3cdfc1b058702f888faa9f5cbd0a229f40d4d8f003a9a94f21ac217b769e468d218827d801034696a556504d298a90c677bd2622a09246038a37f17bff6da71c0c7ab5ea7a21e0d9b1d92c1cf12b3610fcc2f223b629df89cd089386f56a986b33ed7a8a1f958a434f597fae3326fd5a339b42291363835795065539c1eafa93e84d12e171afe78aaeea4b9b46885b13d5842586a3875e27b3cdd9f4036d89befd8276a7af8a0ad7c284afbe557e4ab2c33cf56f57507d3bd1b73d248ce08126c5a165963d2f08ca1c7218ffaaa4907ead44474f648adb71891037a3e2477649cba56639d1cf1f8453832786a5037693e9ad350f60993df61e1dccdc08bb1749c7899e047a49d28ea01be42932fb8853a62a0ef6da1ac9a11fd8ac1740c62372f1d8f43c868a95d32289f61b7f1b2f48e8eb369774219ed304600bf2bb1f008e201d60efca6692972f24f594db9dbc19c4fede98e08d68d20bfba2f330742d2cb35536f69fa50fed155ddba656e144d29bdf7976e2f8e13eaded53eabd737ffe9935bd686fffc693886bd760b361bfc12b7723371189beb2cb9d66136e8f0700c8cfac723acc05751f29a75b0594b396be4a1d7325336ab8e1ee9e5a1c4ec85291972b0bbf571b0f6e4668b14faf84140a32840bfd7241eebdc8272c4126888714b4bb73444a25af566137bc6a29d0feefec118b26411f03aa00a81cc3c7d05806f4dd353da636770035de97f37437965fa2d4a51c0326661ee1c273d73b9e4c93b396805b49b86744b973c51e5a87bcebd5d29c976a9ab63451776b35957a32a4ffd229e464164dc549dfdae807d7a1bc97ef0b1d80cb4f1c3c275121338b0f5ba663965a96984d86cc372171d28e5b9bcc438c6ae5387d7dc1a6ed45aaaa3f8170ff78e09944eb484700ca0d3c1be70cba0648816b76ff3b9d151470a94391e82b31f7313857660c4aa8524c61c7fae03effd592174f3d11ec0011d9bf90b273d7c35a2e20cf7c4aea6cb796b0c1ac2e5ced210f945c114d8273086bb7d7287c46c1fc7d5d9c4de9c839a8cbb214541da155715fee2a0f70742349da523151585cdc520f0a222d0b0880287c529ac05eec08da367b2bbf8f209d70c0588f6ed7fda4b6b726de865c6b86fe455d9c29dc76f7be2ca195f79d67d826d1608786b0bf0edf50fedc407a30964043005374dfd6eff5d63f65e79baf434de8d43e9aebe2ff3d240a0316fa3c55a934ad863d7e14ac8bbf9cf10afb92419c9357ca558c589dc4073476b28bf5056d00974ee07a44140e435874efe9f21f253882f5288024a45cb081852017b730055285ab00f80ab29920bcfd941ee8fbb6b8d350e053897865dbdf542fdd1c6405b50e41f4c7cdba2898466735219899f03b0e68c593147da83fc288ff1a0d656383dfbc0691cb528410939aad67c2250baa50e1834ecc5f9a348f96f6a2490881a1b901066da7a65258cd06b02c6c5e3f0de931d3946053a8959074d6df4c32da80800599c68c81e360eff16324a2243750cee4800627fbdf2966702dd1689f6a1825ec8f46611e7e16a0ac5ad9994c44dc3a70b4e22dd45f6e8494d7dc207828dd7a91de1bc1b98d07391eb5a903cabf0a1b351e01db79c88c356d34d1078f8c9c64d15d27c8f51a774cab32f3e7743245aa9e05f81763de296adfb90c89d2ac8c534788fd684d8d38684155ba2d9517582df5b81d25c36743052d76c69d5e0439203ca114abacd2f83e87a889776de0304129dc099843ab39b926a4054406d2808b49f951774e5c2b478bb906dedc00d0c16942c87fe0cf435f100ce552caeb98be690620224462dbfd6685ea75193c16b25d3cd7a5b7e79efa50505258a83e4bf08de6eb43f63c0e28bd56eae0885cc9cad20cd4ca29a8ac7d9a9c143506a6f4115cc8373b90432ab4613b09d02f2cb0ae7bdbe657b66e64143f15c34d0d070e097cc42050e3504c9219b166f8ef8cb0499edf35e0fadb684f0c16299c05b05e9c872350b67a421f92c703379c12320b42582a78b05cc590d4a842351d92287b83ebcbc3c38392bb0188c831ee2b426d90dcc7f0ca227019c09492d26cb66ba24695fc4ea74ca6029de37cba5fa3003542ccb34cc2425bef9b45fe26943111f0df44fedcf96f3ff2f2def04772c9c4e19e45ec289136d143695f5b823f1c301e9fe4681311038fd6432ea07c2411fdde886e85d15bcd3efd96d5d29d96ea15c20dd25839195ec0306f43848470f333ba81fb86635fa3d67d1af871ed759d204b7adabb65c859510f3be1a81cb38b24d3741cefb48207628fac58af4eb6baa1d7358f4c93f84533bfaa9ae59cb6550e83498b779da8d02a5d57e5a2edbd6e540c4e2c6721401a301941481469896466ee103837e9b030233806b61f9a9495288cf8bcc98f6753718215cd23d6c3d075b8f5bd72d1d5f6cc87a9827bbae88100683bfca349783af7837b60cafd16e36c65b18e683eccbaa3ad1bb32093f06123e7e119686e30f433dfe8520cd82c9bd782c3181220f92c54819442d2137d90ddf050affefe06981fc95d52d0d1aac9c14b0a2572b283c6e6f5eec442ec66ab26552f1fa6fc2c218079847a69971183b5a944b006d2326fdf0d3c307f589c4fb8c4fa3ead4c3502e0047e43132ae188a7e25fda7a4117fe70e828a4d8c0ea90547e52aacdc4caee1a01eed72e22994a4a92a26142f1c3171b98a71a39daf3ab3f6107467cfced72434a8107dac483537560ef6f0e81cf279a539dc2ba68b224a4d51484970f3557e35cb03bf4e5114928f99ef7374c446ec8c4bac30c14018836ab123c005f86f3586baf48114e3086763a65bca0bcfb2d7cbfcd3a3d4642462880edb3fa8091a53e9c96d9759a42fe69c1ada8d9cc4142bd18f3f9d72767ea011c8f38b57ee211b748179847330aef31c128605367a0eafc4a0ec5e8176ffb072a76ef026315185bec345129947f8e1bc91995198ad22300a089a58efb2c6ababb1abf34098f3d581f4d09d314443882290000b20817f50aedc8d3ea733b5c3ce26d672381b201a871009ed1d633e0a81fba180d53d2a05622cbb87c90622df7e764fd90de779988c83d35a7cdb81953cca9b4bac0fe86667df2aace3129e7b8d90c5bfacdbea43a0e7a756578d59bbfa9c0c5ee0d244d59fd4dd3554dd456075d7a4d03f0a1604e6c6605bc94ab7361eecaaa6c605c245ee305166add53c88cc0d39f8df5e346f5b3c45af00465c134f2c7f501cd87ad3cad23b8343ddbec6d6fae4d0e852969d8fbc86e2750579337b16b56223ec62c355f6f17087a511edf91b4ee9a946c781c8790d37b79fc564ecf9760abfdae4c7e87690d3e36065166e2e39d7bb9eb975549c68c118d668b7d8922168305eb82be4c23bee83dee518e09ae7a8b7bac0fbf4545e72c1b054846269073029ab6f334ef6df6da4342cea0740c8ab9c683f36cdfd13523d49e93b4c0815056f491aee2ad1354a6ab2aa6ae78f812c9249d1dd100e449a37b887f55f10d8cf811e04940b2b304158372ce9bbd94d5a1b99df82924e87989682a5e385df35dad643ac87b61295568fb45f548c8ade9c4ace0a029fef5146188307603b2538e42b42d909ec263d68b2ae892ff07589a32d7c4291dbfec7de172c684bf78b0b0d2f8a1c8cbee9129cd53fe91095b892e261063fc802ace477d2575174b2c92369b1c006181d0867fa2faf425ee69425fa8a1773eada18f2ca34c3c854aab9b5e314b3c1ac236460298b2e98fc5ccd9b4b64d4ab8197a297b1936f50399577c827b0e1b49e887dadd067bfba39facb9a850b7301716409978e43771339c8b65c347ff17822f67bc9dfd402f70d63b86c0363c0df2271104c2695f3b297066076d8b83912c5b4044a46e3be39def5db6be1928e7efc3c7c8ca90a2d77318938b71b5245be0c6e5f3edc9e7b6595e403ad7c2712d20f44e8c74d4b1015217ad4fa5a64b03332182cfec7c5717716d5dd1da46eddbabf5ff278a0036d1b94aa25c0f98ce1c7ec0f108e84057c341f0a074002d9086d67895eafdc74d1db3118218659906903f9a80be6301bfc4120e41d59206f14570c5a125fb628d93efebbe4e6a6aa82a34d5246f041c943094aae3350cffca0659cf4e779bea936a6d987429839d794fc5014c9540bbc03e0d0905b356af497b5d1abf057de245e0fde1a3e1a1621a927d2ef5d2d62f5f9697a93e07a9e1075f7fb1af0947e251f7c43713ac934e5dd394577107cde9eb18e809673dc026cd3536c14dd71d314da34f24564f0d1f64f49d65d96e0b6f4879735419564c5565491f0205e4bf5411797aeaa6e8f244c0fa28023184402dc9242ade063412a706e4327bab54b7f05580a1da98389e9982721d35fb14299b52c91e47fabcc4e3cdeaa28aeac1897ffb60089b348f29d6348af8121e62d127c859bfb2d832f907d692301f01fd9d96fa46d0c6bf002d12b69656c714ad378669d84d9033bf1316fad8448c1f4b78e54b38c015abf3f66969a209053d098f941a22899c12ee7ae683300c4210e580b0f0f242cc5f475630aa3ed606e6e42de26ba688e8ba7945156c7026e4e24dbf43bdf223d065ff5b25f5d0a7557b2b3a49fc8ad0991109c616b1a23aa4d55926c4d16458c24551a8b63895b19b023a23d5dddc5ff35eadc32e94828e52c0447596af91f771ebc30c4530d9373fa7a76da07443d3d10772c5048b00444774b1ab6f2a44df5ecf8131a2be18a5a06b2013ad5b32508bfb7b2eb77a5b93a97b1662340894636cf0b2e5f99303ea42bea94e3178d234adae384d78984998a089888665441f4d2205db20e3fa4a4178e33d0ec49e83a4ee37f406ca96ca7677fa92b98019e0581d42001d65cee58fd089d83b2d89ed413036fb385551d8a132ad10f83c8ce4b91a606b42c23915303f43b40e8128f9d9266d92cdda9b3a9c63ea1326ae6371f97a58a87b407af42d8ad0abbea54e44ad6197f6a53301b398a8becab0aedd502878eda98700f00fa53bdc662f5ac94323737077faba36360f1bc48b0171c72b2342bb133e190c865481f788f5b9def9f46cb1786942d0239634d2aeade4017188960a7f2dc3bb4449cd577b21bc23a78a1f54419bb9706add8be27a69803008e38c09bb4e958987a5f42778033d295caee7438bbb9e44d6b196a86fd99b7c18b84146aeb69699dc4b099900638cd4fce6691b95dc03c466b3a3dcaf7b83fbe76b577233814f953eb7982f42d78959afb79f5202c3771308205425464b01651f809771e4fe5dd50e67611afa96195e5bef5311f638f01098261c11ee26985e215de02776cdec41a1568d880362ddcb6c61b588793dc22a01f539842462c3bab3b1d562b6d799556dc25ebffc4c8078deedf5f46d02beaa0db53298620910923c8273bf5e5b17a57f88562534eabedc32b1381435962fcf104b0759b251698b319f27ad239328261665d2027d6d2975811f9fe0239b292ba23e430eff7093a177d17de346a62f99823a7fe4c9041ad41b00ec85106e2d0914d761df8371fd958b152cb9123cff72014cd817b7244354c901519156692a9340d44e637444cf3966791cb43d6af70e79bcc9545c64bb2849d3b2c97af860baa4e389366db642aa6e7808b57cd02fd19099b787481caf0cf4731e9523aba651892061fcf3db4a24f8e3538f7afe30d9032e739c4fad47018265ca98def2a09c58986be21081e4d57773e9611da89e38cafb3f192c01545b9305ec0d8ce192a07bc77a20f7bcbb73185c3cddd74aed400cfaefd86dbaef3a43e5d21c151ac7c3d83168acedf84f98fad732ca95c92862006e0195503df203ab5c92cb152f4bd143382cf64df1c88b84564da3e9a6c7a6d88fd8b052d1be31781de93473570438cc8c10a39804694496b9b34bf198a504b9179a281f844326bbf1032d56653288fbf31167a3ce4ade65b5de4ebc38b8f516a517dc8f4fd84468be50a22d592b6f0c77a4658b40dd27944365907a21b89c5eeb2fb486d8ec920e02a8b5b263753b8f6ff5aef90e435c966c250c00f30f83024113684006c4703fd8a45fb19d43bb15d959f60e2fb17d447abd5e1032570d5c177cc1037b0f6d2f007d7b5855677d2549051c43b13b165c8d5f647d1a31169d6496c99d38113808b866a5b1d53445787284289c5fdd377b3e252ab5a125c4c36b43295f8b4cae9b35a44a57a836c8d84a794fd8cd4ecee4789b2a9bad76e3ac1b80fa158a27be133925993a9a68a8af247efbf9db523e51b0753cab82e587462021a35108f97843d968f917bb3ead8ce9630575b96f35435b404b11dab73340e54018d6d593e421bab484ace2ba4886b50ce753f25022a23bca63dcec845023a04ab08e0985cdbbe4790c8f581d5112755aa1d668522c671b20faff7f891dc06f31c13f71ca258c6259322567e9972e7383af9c00db5c6c45d23a72af1a0ce8dbe6679ca3a9c388d8d702ac4aad33703f7e8b01236c9e89f01df3e4052d5420fbf74e408e5d1483139e5cc1c85453a0312162626e589fd70d6cf4fa997e439373f87d6f94587b21d211eb4732d135ff23d6ef552c150428a3c65e4edb8e975a61e616c19d59dc218db30a3d24b6381bc6e5a24047b621f44b8485139eb9c16ededf1e714c235f4fcdc9d0bfe8ea50a919e1fd290312849a9749d1c23b984f0d5392fc1e83d6a8ecba7c27d75c63c2b28bccc4803d254b5406c070b99e5508ba64036703dcbfca7cdae73556d05cca04a402b7a17e65868be4d19c082646828eb1c5ad4b96bfbb81d903cdec536860e708552916b119cf018355cb4159bb39576f59f47361cda9b93746d6e313146b7d04bb88dda806bc0a8813e60691d9188df666bcfa06cf1c8f0c6ad3445c167ad4b37054668659615480a6a756b5cbcc4d101aee8b71785dfe67db65425d4d17adce13edbd8d768fb16577e6801fb85f71b701cef907f0e3bb382232630e1e2f602265a86285db2dff7693ba73205f833fa5277d6fb5ff5d8281ea605212b90d80b65c25bdae0c3ccf8327c0061f448947770875da406baa59d0f6aa74198d1ec566e41c97aafec37327455ba586d4b3b5bb5b4fdd803261e14af053b26108234a0a265663f3b2406edcebda7a8156f1e8a3adf18d144bc7ca2d40dbd2b6393bda96bc06ab1db9fc28d41947dc8b96a509259dfa56df4cd259d8740e88522d7afdd2e635c815f60246696de21814a7b07777eb5336808ab94187720cbffec89fd48dca7c60cbc995f24bc2005eb3a414d1a36ba08b8a48fcee0208801cc903920c4a08b3d30577b34909e98050601d346ab5501e7443af6699ee05e06126efb2f285a870f29f93fa1a30cafdb8d5619de93dbcd794ab6a4ea0d6faa3ea6e23dde7705e70841baa4a46f75fb5a7f3573033a6daaeb4723254ecf42458f91127893bfa8f06ebdcbc2aa09ffa459d308484682279c6e673fded448ffea6185ada18d3d8c487fd2836250a1f02de7b14c9554bbca3992a316256fda851b46378929a292c020b26e93bdf443a630637a006a21c13c68d03fbb82d4c3a9729cc936de033973cdb092cfb3590285b13714fa1537d00c828530a381234339b4626a0ff8005c7530d5a7ed54932968d2e22d062c92072a50bf1393e5f66819a6e1e34f2f2aab7cba135f80fbb683a49b538d084c27ac06cd8041f7516f5ea6ca09894d66c93257eae4e83e95d31eac0eb6faedc166e4a26319c1f2d96b06ff93131adf8564d1c4ad262f185793f8575bf890fff76e815e8a622ceec394db2906cc7f879529c0cfc04067ebd138d4fc3016c62ba1a6186813758038c35eff8cba4294ef5c49bb2e45db3ea77279080664547f978605b879283072031649a24f6262b7ce5bd021c8a72d5aab0837a10e6982f855b38b56542ec6e5e2ff465feec6a6441483328ffa1e09b5cd5a1ea1ff59a5753e7412f2dd372a7a9314bf620ce469301e68a9b54cf6e74b63102c121f7978105d26f8e93094fde9340058f20edd5ee8b3605614766f9f84f49f424efd1cb67bb06f3040aac50286d980500558a9766da88f906bd3ec282a68c39204c0e993642e2aa064dcc5abe33dae597f0b6f97c47e006dc7b150d702a0a527a265f9fbc351c8287a019092f269e0eec20d5d5291e22c4257e3e20853e0b23542e09c24268e95bd661da90bd9bc3c450fead1bcb0423635148452e90f6cb5479aedb2420a9cbd2cd8e95e10125166266635b3c9e5f718a47436bb701ecba212006a23d646e4618c27a9cbf675dd8519654e476e0e4c74f6c132d7b9c0ba39fbd76da9f19c977e1758d0596fbd6f332b16e9b14a526b7943fedb475a315211b2260acde2fb81a1a8a5969d81950b98879695c7cc0d2ce6b9155607eedcf7ea6c836606a07f5d9139bb1accab2ed33743babbfea7a13187f763c0c8458cf2430966f75b56b6e44d99ce0e649fbb81f1b0eb4fa704b4c74b887836be443ffd4100c90498809e6691967be772c73c46b73d5d62d0ddfac836aa59dad0db0f77a0a039851bdceaf5bf3b041ac566ce099284d3b236f7b4165dd3538e4220650f214685e632c7349d5eb87269172d4764db8cd501dd1ea5104ef2317ec37c4180dabe0f5f6983be7ba1e8e312830f86210428f40ba2a74a59af34ddef9246d83980d3eb3008043b0ee20356c0981be76b24440c0265d81595ee6a90314545e7243003df9003460c6726cb2de189eddb91900a8931b2544137e96c4d8a78f3ca17577ae8c7e4bc528f1ddd00ebc595762a2bad0b03a6a48f0d4a870a423492a7dfa1c58aaa8a087cbe56bd5c0320939c9d63f57e011bd5b591f2c61416c0d09c4b5db03a52664a39da4b7a6a1a8f7f41ddd863b9c8692e2bf27c736bc0297253f7cfb492a25fb38765c77d0ca1d201e61491ffccc2054545ae1604c8c00fc9552b7cfa1415bf42b855506e2a192e14af6e156156c164b90b0d83b087840a74ee6b59695d956a07d833da6605c86a2b306b09a9facfad141e0c70266f96013a0f48d961477d8c801f0b802c141274e99118c320b46a4814502b842a2c72261c11104d6ea8592670ed3361546a66e797489b5b5abfbd21c513095a9c81047c6351377638792946858cfc3376f31d2baedb4518ac9b61c629d5164a7b6c05001d78acd8ac1e0c6c4cd842b5363f5a3126676ecb2c4e7ee39a7f7798f5759cc429a75cd978c08b6c07536bdd2c4252cffc724382f0b9d8f1d0d357cb92a92b72f799555aca7c9f8382747ad6603a3b690d949f5c644def68ed6d328a83c7a5330c6b66d3287c35c8945b7f4b862377a8a7bd38c3bee29622a99a5b632655a8678b13f146dcd952d557e61302d7231cc71fe7a6cf7eeb52cdda27e8cd9ba6eab74e2f07fa17af12506b0b160cc3131bf4e2a4d8cbc203c2b65df96ffb9ba704a0cff82055ac1aec8ddae69f94fcadc31b64b4841cffad99c2810f01aeda54975932359c0e60708013e0c43713c07120cea95794f93308452311db4b3cbaf4b8ab4e6142f6601f5beaa21ff3e7aaf0dceefd03ef8f87fbe4b711cb4cf6b025ea09127128577b7cc96d5bdb2892b7a53f58618fae9358be8e9f5a079ccd620a001888f31aeeb62cf2253322701af8a814b34e18ca64f8c047ab4cc661112e41d3220198a8fc70a65f30d60e32fcca0fd438806d6a7f0c8600bd87f6451c237e882f23d4a22a23935bf21afa58d6fa29836d2a02bfbe012ab4e1ba947715bff6a49f80a046bc912ea91b09e50c5f7b9a5b1b073b9ecd3a8281f793e11ebb9c61b5b387c214d76644ddfa8ef92912bb6a797be2459661c53e90f9edff24b1b64899d36dceea7e063276eef9cf19c5fe7d4b8149a332dfa83b7e71aec2a06a826b4ba46daf3706c859cec8663fd24e6c472746985c4d520cb06469ba92257993fd33ac28cf62e6287b9bc7c9c40e380bb53bda87f6b60d73e811e01ca1bee278c30c298e4d84830f7e7952be32c636c51e6286b80d636b3e272041dc10befdd87aeb2e7bc4fbc06f888c4b2c082fce25f0eb24b1ace13ff041d1bd560190918c910203dbda0c1722a62375355965383b9122ed863d00d5bdcca997f8b34b65afcce74fd1f3474beab70e6d1a07fc9eaee652ee69c8563980056b473c1bc03c381afcabd3d490792e0fe03688f43e76f4f035f460ebda13ccd768a3a4a20f82844562041dd5374ac796270d80a00f7aa9140863946b978608025789a5e05f03fa528fd542c7c358a9bcb59a20f95f94d520f63282660eebd1950b6ea040186712f5213757fff53584340b060a28b5e5f657a28b898556d040219742ec123e6271f49032545f164371ebb7790d2c2b9caf86568d9065e17790145cb0c6dedc2416f65f28d0554469e1a196b000d0f9ad704bf479883deba4bfec4629d5a24fcbfdf518a779b3dc3f26b68267d31bb6944e3e5fec6d07c98608915d47fc8be37aeeb26e44f4776968863050c3999bbe9e94920f93a9c823150d65c2c53173cd021f7ee6212d458eabd74b5f160f300c5ac28c465d79350cc7ef67e558ace1203dbdb91950215451d4d78a042a3e3d64ec150b249f2ea7f25e910b17162fec0be4a8db95f275ef7fff96052e186e230b5f750028a4c58d2df075d0d2e28f509859fbc6eeed95844f440c7e30f6e4dd16564cae11a8f9b8b106b5e633eb5795ee6a6b346b7330933fd2d123cd70f826385be4316983f827e102d984aa7cc0e961e50e92ab75fc01296fee693c8c393d0bcbb90fb04a857d95f03be6fa322a65a218cd1aea9aeb071bc2e003b91e4cbb78f4f4b084823d7a8f372dde90e04ad155f808fcb74d8b3bae2cabee9a77d1014bd96871c7810e376900fcf0349fd5be8ae17c795fb84bb9c9db4bb0b438c04cbc7e1826ad4436378a76507609c1196f987b88a507e6de03f9adcb1174e6bc99a48de347c895f444d488f3ed19992d434cfef2b29207b13381618c571fd3808b0f9abda44540f3b1ec9f462848fd57bea9dff7d86a4a0ad94c082319b5af6987b70b29b719aa22dadb04344d1fb4cc44e2836d14f4593f0b21ac02401b8a9a179a4a8d0c4e31e7c1384efde8e766f8f648a1c0adc152f61fe423a869e83990e21907ebcb608ffd0c4299b9789b41da435237916e240c0dd394aafe470eccb6076b13c47278091e9b77a61830e031d95dfafc03dbb956cb5d862b220087789417a86612580fe92a3a3d4eed5fb1b6d86ffeb1005a1a2b8350010b83da0d4b3ff949b406ddddc41268c3d04ba2b8f10f9f8419407d5a16bcc38bf765d675d7f533fa3a4abc64ecb470e95c6b2fa19868dc69b638010701351728891375607d72196bec059ccf802a421953ff561312acf48066160f9a79a6c28475a4e48d158915e233adde08d57d9397e0a3bfcc46f9507fae9e580d6d760c9cf0b9906ae2bc5ac8c5074107b999d2473607c029e1c4449732f2e2653c8d0e26edace1b4e891e38a06a9ece7a761edb693b9e02f817e38f99ba5f2025c2319f222640937e9bf9d6e1778f300a85e0438a773f1470d3de41d7bd30dfd6a4fa10d548c830feb7bfed5c19891d2bb9ba67623cbe9c9175d82f871dac0be3c1827a30ede8c3e183925ba8e9ca37ab738843184343813608fd4ae8379cc7bc88b8f5a7d01cae81a719d09288f713db90937da6a45da372dd256ae1733d32683f589f35d44bbcb4e228d62c877d87359712ccffceb4cb1afb200a116a0798138f1c78f49a5825b136ac697420333e3c551b8a5faa35f1a0b3fb76f6a897921cba58e26372f1dcf7f7ca819060a59de8ea770b6816fa5bdc188583822075a26834c35c02233412fc6f5c13cfaef920ab533e4018283cf377dcd89b4ebdc880ff4f958a50deba202b3afdd45a2aa564c486d0b25d3dc59946264c171053ca90b09fdd91e033e226915768b0350653e9089528e2aa5c1a44e7cb5e7bf7124f0fba250e593fa166b46882dc014b25ac84228c58dae23505503144a5346c8c0e7032c14ca07368942c741f3518062f1098d4b5786f42b7eeda14c6b4cecbbdbe4f11246c1444ea6e065b816a33319db28c7336e50d8c4dbaea373e8090936a60b8123e803d6bbb438c77b7bda42271180fc43dc8063ace47ae9ae72485e11827d5552fc12c13a1588e50b72655a6f68732ba0115156fc8caf417bb6ed8ec924069191f014a42ca647e2d2eb06056d3288c9bd22f79613bdb3fe812e508483bbe94096d4ce81b2f5dcdb573591f276849a2191d690682956679940839dafe532f73a661b962af2257a6544c255ee31d90364cb13547840ba923d1d2a299d4b594861f0c879c8c4dcaf02a0340a5716582ccf0602f579e65c3264660efe78121d762cd062d7bff8de3b457f0dd4c1ebd2945cf488a74f6e06af6d8e641dc9d26a511994c984ef9a96445e5588958bfd2c15d7ee8c3f886779adbd7c58ddf6505ae78d36cac73d05d94654741b7f4ba5e7b6dd3a847eb90488e45bcbdda97cb0bd161fba0b22b5468298cb96670e091fa454af676c23bea840239fd92d1f4ad6100e2205aec6e2a76ca17ee89fd968974944e934751555eee2a4d991dba8e991d02c8c75b39b1fd0a6639af1d5d14eca69c927669ce6cf3721c22a70f8751f1b078f874203cd6559a5f0b673832311769e1e945391cb4c45aaf27293041293d272288cf459b92a01555a799adb90cd78047e362d81eab1e505496d967d14418227bccaf582a255039e5846d9bec8b11591d1d18248fa8a9674cb5912758296d0673b14fd02127d9492500964e78675ccb6aaad13ba5c0ca955318085ca50813bec32bcacba9c4861a669df9b4c12abfbcee8fa190109d4abea7e512859041816965c336f2c25dc8192aef3d02649c2e411ab1d05a56da93cd12360eacb711a1bd4740ab6dc69df88e867459934ecb5d4755760cceb30d288241cacfa735f483d7f16e09c328122f476739b34fa706be13ac7b2670bd4ac013aa02297aa1566757dc8b816611cc31f72174e1ae8e8c307407d788fc9aad718d5cd34d336160a8c9acf5c9cb080c2dc76b11dc7f79e00be276f28b94981f0ce5c1f7e7d4f3c394ebc207a8dda1f14058c0e9f7b38262fe55005806dd92892e1efcd0ae19d58ea77dd5140aeeecc57db9213384de0681cd8264047ac8d25c88bae12a87dd4d9a5171b9f8e387b8636463a228787d03e7954e8bded3d2cf973fd52e58e3ffa1cb746e6f33239543e55230e1f008e726564a7aeef1121ba9095a79cf6f6785b41161e3e4cc1dce7c4fbd3c047310c29c8214791da1875c071b381a12def270c0feea600105f38a540ce09af9faf8c5917b967110185ff0255d6ba1f21cbbca3a702a15a0c88146cf0a7936cb210760cbb67750b0e99deebb06ff8d09626e1934a047af6fa2b11dcfd661a1821868ac6fde60f3d6ba1aaa22972ae41e05fcc617b227200eb1a4337e87f579e1ff941c85738fb891201ed53545d5a66d9f708f0be439ed51bc2c9bf2a35eff9feea1f2b898914ca67e488f9ce7625da3f4452e67f5d509018005b9a20079fe44f7bec65b9f5d41dd3851f0fabb59380920f8c51ce8722a6f869058b3814f7c83e27ba56e290f8c19ad4be635b101c4085560564fed441ee014671462f9ad6271d94074ee978172065b53878b8c0086b5d7e4461f5d49b50d4edc66b20d7fb821804af8974e05a6da20e0d96ed875b863c2a8bcc6225fa108c4131291f131254989d3da46602dfd4c4ac0b77430e3cd1bfc68321252fb08660e4888d04a825426df0934970bee266ffa100b542d06eff52c166ed8aaa5384746c2837ae23b635c094a3663d7275777fc509cf4c5bc52fc62d1cc9f87e08eeb58735f754976735edf57d2f5e2bfb406a10d2cfbdc5fb13048eff72a26f80ea4fdc3e4866b92031e49c006ca7e40edfb3c6969c188d2ad2eabfcc42726d2c93772bf884a4999d34690bbd0a7866a33179cda8c8c782453625122a6b2b03b114cc5ff4db932d9968c90c249437961731219d2eede17f10b95a8625b7f3684fc899249ce187a1ab2832a3dd2e52a0a2759c62078b776b5575a915e8cf755abb3d9fcd92dcb831cc59d4f725eff83ba621d3cbd586f7d26152cb78d2f75b68c480b2a70209b01360e40f1dcff4358bb93ce2156f993e81fb7c4a02308023679701bae47c3c0a00044409db77f3633be9afe6b9c5f71920e0149864af0136a96f00270a0e6014046aadd8aa850267031f35425e65c983ea6b9968bf341d4c4fad1a91aede671f7cd6957b18ffaa4119902f32c5642d8854b28d682f08bdd03f031e21f48501abc548443f495d11ab3116d54fd2c711930d518baf981e4e4720c486f068ff2cb108882f6b9f71520da48e8767b0ecdf90c18056436cc825ec9b6c2837e273ac4bd73e680dfa80208e4509eb51b62ab7c9861025d88992ff40f36e9883097aaf658690bd3a9734ca672e9a6ce8bcfb7abea7a09623d38a193136a4b463de6ad02549bc7f3a546f4b87eccc2ab6d68f5040fabc96da893c6f99a91b69856f2aa4a728420ccbf7e4c057fe6cad75211d61ffe635330974cb8ec9247bde3e2401f17865e16103a8c8507a9914a119a9ac2789611a18af00c85b347d9f83f6d24756b67bb421d85449933e597807984ea1ee8715ac7a0453bd2c280954486fb735a4a9d31d3bef5fd0910bc301e520826336273d0041ee60a2c3625d0359fd523fc85739f55c1cb9328eb1477169d2d39f3a25c0ac65c3d5b97a0556be9b1a6610a412f4b9fd319396728df007c5c44f20c58585c1918a41919a6b61bdb19919789bb88b5a0a366b71742a7e84ee9d6628e858ca8bb3149d1a9905b4553f11a0f611574f2152b1d1e0be8c5b77df8d263866b62e0d4c3536bdf9d7501d42452d9482c5bffd48f16ce135ef9665aa88accc33f8dde3fbe6ccec6505ea4dd1b3db9eb2c7451be9dba5c3a28a9e15afef67442d6eb6337fdcd7b6cb6c98263da34abff4dcaf19c9f03a389cc2f50b30c43953c3afd0e9c6f97c8cd1e14049cbca515090195632528987924a90384a2b72b3cf3a0a81672b14750f8ce7b37f11c953483cfd2d8c4e7d9cc848f1358cef2c41ef234fadbc964b105ff60c74ea80a4de9151a64e25f609c5f7eec9ae73dbe78b06661aa81fbb995fa0b0a77067c9ae6750ab0fcaae7b32ee46a8cad1aaaecc78bd193416085ea28ffdde06f5bb5280ec196398c03a4c512cc07e7c555d800eaa55e3e7c5aa186bcdbe4afbda269cef9e0a9581141aa5b785a3919f32ce56e63605c8ba8a65afbad979075ae4c05af3eee8116f364fbcf2643d28af9cc04609cbe2be2ef41d209b9e1e425662958d6f9849179fd4e29baa2423c39b5933c2b327f2248ace3b99505f2ad55b55ac1cb76afa690b0235952b9ee0ee11fcf3f4fb290a4383dd77602120f279658427c92d41e81a7a9026a1efb04ed9972fc33477b2122e15e5ef9352505dd595de4e9f863da9bbec2729cafc2a527cc44fa2df8b7b235c66cadb1fa74ff9fc296866d67bb0ca67b543299ac1938b79ae84c2f016f14f8aa941937d3ea24d2cb0482b5817575bf1eb9c29d5af7ef9cf680be76aba93b41673d29dc3163cc440ac488940f6afe38a7d49025b1148f1ab5c8569f24cc99dd4d43aa5387e0a982c8c9df7946c972cbd9ca08071220945d5bf4a35596747de4a4abc730cebc6dacbdc5b18b92d5aed198e0f9520705d4bd51df4d68b13e4a381a110c5df167b851f73777bac76cc3d7e88e78064081d58c615dc7a7e7117944acbcdc28544e064de6b38753008e625bb955edb279a21706d34b3771671cb584687e36e355503b75a4b42087a9ed84ce6a9728428ea8dc66192ff093fac2d47af9b81b7cc577ce5fc2b6aec79698da2110bd6b9194424ba9c0e70e4ae14af491f8d4b421f3c32c0a5da38b53d6a9d29020e4663102eb66860444c90785495e055a34e506c10eb4015d44ce99f150a6405c157154d15a6d6e121e759872365a0001a63b6abe74365700416e00a068f487c0af0087b787a7ebeb556a589bfedb84f2bc91b59a0434b9e351a167a72f5ec1eb19731c8f6d86c3ff05babea37a701618890d999c84b14e857f230605a285d92fab86100e1ec3dec9d444b163f52289a5e0c4ae64bdc582c93abb1b75f41a89dbd47aba0b0c0de3718aa77011d4b324f66ed3dd00ca89fa9987f21a473a87e5d45cf68f9bc90fee562c7dbd4f408c08ce9309ad48eb22b8f2cb2777300f210a45ddde1b3a2efd8fcd0849a311a583190f01d7f80a31a7bc2fdb95f30c4fd3b8ea75106813a13a1d404ed38176134b960f0553ab3e56b3f1d8b2e51991f7a348b57d598820aa3e8a8c9b341bf37f5dc63a72d7a6621f94db51a46dc1d35928571c2058243810738d9c6b13b8bebe35928f126861c01a1e364c741878cfc837a5d26e8325f2027db72c0a41268996abffa0794f06602d444798c8f422606398cd1293ad69a1d5ae83aaddeb282ff9c52b8190189c19b6fe1a3c142fbdb2766f090eca904b0341436c41f57abc68e843231278607dd2c0e6144ba522459f685c40256041f9426b911f462921d391b75ae2f438777e0694215eed56f28e961ac8a7eab4d39d80b6b4831f33f087028947190af9d49b7ab4bcfa3ede41f4e755b54c59c6b2519d0eb95a691d4e687cd960e05e61810591fa11eaf3b0a9346b123110a817584ba9774c5248389b32b0a5338c23f9710006e285db91be0cae51a9012d3ad8a8c91a789ea92101eb0dfdbbb2cb6e66a2d53ee179c82586ec1778c7dedf2de21b3dc7f982018960f3f51145a100849f17f784fd191ac822c263e681017c63e3f5154030a118cfa6e14e87414728bab77e73051a34289fb3adf5a9e99d719041be6f316dce1ead0d2813db423437f082d0314caa0964ef0343fd1a9f4bb28298a37d1bf55ae50036e0128fbb45816e0b351a284cfae822d154fe831eea341ced54804a9c018fe321bc5bafa6a2311717138d32184519691351dc05c314cc498f433289d6429af8d6d9e0a8a2cd8bfd15e59a35ea1811487e7b70945ab756854636fe98d68f75e9d3c86de7ba26c3497c0f54381724ee2467f942ff07cef4a4bbdfea339dfebc09951f7ae7a40a37d94da7cb5ecf8119cfe527bb01dfa17307a3fd8b7a2d6f5fcd483870f7ca6fd63511bdf2259bd9ec8a5423ae3674bba2c87e4c83ca6a93f71ccfb5e77273f9efea05e25322b49c695d0fa5acb2fb474a27d989d081f5826445a0d060fa6456e69de9b3bd59baec2b98efda14dfeccd2cf3931555525af3d1656d2b0a1dc8b178cfd33c9594d3e8ac75151b4d6ab4931a60cc02bfb03611c7536f3175a1e1c376caf7fc483e333c1ff7796f49b18ef665e71c9bd76a2fabeb06d3e764b757f3634730dee602bda90f59f7fd70a6e48bce7b701ed21464c04dc3001c684223167b9f8e7a9f7581d185d1bfa0bfd797add7fa1e87b28e31c64dba6d7b925c6998ee6837161cdfe76aa933c747d2dc512868a02d6e98de427644b398d0b2298d62064900c9c960bdd5ea2ea75309a46ff8fabae483a758a4ddcf25a47adaf21bf8ace30aeb6f51413d45c85d10b85bd74e31ff8e3b830ca19431c5f8db984a6891acdc760da175704c56e60e4850eca49c6e96b2cd39a6368ebc06d09666f0bf92b5d18c812ab9cdc07300071b7dd06bf71c2683305b795e9d92183347aec9ca5cc61718f22136f989846da780266028962f7ab603198b538f22f0a2e098dab6721a1295d9a78a95fdb0a28def536fa99592497f4c641587f8f7e7f210c97e30cf4261d5f5894b3b067e3b20fc8cf8d45614a736248347749320d9d12a017a7b6a005542862db233d721219c5798041052286ca5996bfb47f008b88f93c19017cdbf7e15f356d0c4a059ca9fcad66de77b51cd16626092efc4096c80a66664dc692a2d85305a6af2babaf39a4f00b8a0f2e7cceed2f72546ecdd6252e5fd3d16099a91d6958e2909d404de9a83f8de641b08ae230f540c259e1f7d23324baf66e1e697ba20b56e97846610eaa6c4cf60a2cf4b735d38c0bae2cb887b2bbd438a0590d89c7c20ebebc5c7ef726e2e3867d2376c18fba21313f3da0a3f59839e099f0d526f654d9a9d73ed048fff2748a987a2740502ee0067b2195725a5b3a7adbb32531f6b85ffd1a369db63b4f95741958bdc982a68cd21da64a0a1ebdd0bbb406a96ba07f9a3d677db0d72574301c3b6d8e18c93a628ab40870ae4a664a4eda189b088b8493f060663d9612dda568316677cf44e87b9f057aeac14e7529187344832ef3282a530c3a313e32625ace63ff9a75695d6f351a97c47da8c66b67076d11fdd790b1bad86dd12883c6288aae6e821db5864af2a49159fb0de4a99dfc9e4a8de03790ebd67c6c395fefb3f303859cc751365e3fddfb42a046193ad70ff459505eaf0d0b53491e327dac124eacf2d06fb52812b574d4251734ec737ebf990dc64d03a9440427c61600976403f5c6626031e367541a83861b609ea7a66562e6c9d9207362de0e27e008ca2bb5fa50b4e70049f592c49272b35012df3464569496d5d78915d4c8998f72916b2258551ddce7e7efb225edff75157cdcb8ce90e192dee0cb1ca837807ef1f6f0bc71eb0c6225794d5271cd5bae4793d9307807f1ec1e934cb9575c72cf06d0477d2a18c60b5e856dc989fe4b59cb318c18f70e8624d5d6697961188a2a47132459ec88800dc34a795e1e3fab03d43acf97071eaa9e14007d7790d11b81b44d43f2dbbf10b0ab15384bd0261e4fd59ea84c3e69d885dc2d5274b3f0002453482c5adf8940c39af59ad6d2e6b8360ddac507f74eb217ba8e20500a51342b2e83f6ff6825a270de10fd3cc815b5c4f2c3bd306dd3f972869d44012294206a1614a902abc74f0a6fdcf2c239540f8b9d018204cb67ba1dcece3a170bb8959a59a52555d375714f181597fc2aad312bb46a9176e07d217c775f23081b47dd44379c8ee96c6814d5a36c3fe1a4a89ef83a19fc3a64a0a78708e09ad812fec2baf92aaa4729c8404decdf30c9726f143612d5d369905b4913d55bb19f460ad3b4121ab55dcdd01aa39cc883e28225755b9588ab6fd6e4700c51cff5c2ef9c057567a17a33ae2feb88893f78fb093bd443f50cb33ac997139ddc09a276662cf4ae546f4f3a315f69fd67d00ddcb4039a3d2272593090424a074a6633f5f046271aa5ed6b56843cfa49bf49298c3730d2abbd3c3c785c1a1df773709abd0a4e8e1ed107ee640542a800a138776feba953a3645cfb8ba4d427b4031be461343e4ae9bf2484ecbdb794524a99520a21072b07cf06cf37d5454561da1350576a98acc77c617339cce5315f906ef682aa8deb1fc75cff1d602080e576daedea8502658373c0864f2e01750b4c8b0506c90c33d71fc7532208e12609e1b6cde9ef9ba46f8fbe6db908224262d2f52f47d71f025ebdf670ee00423453bfab63bf7676ae1f7c7feef2f983fc3a42f07fe045ed208cf36a38b14735cff87a818c179df6c918638c523e275153542430422eccc4031b1e6898016d4284650729a418d18224d4583182524a6994414b9a305ecc385901e90b2ca44491d24392945224c58624a61fda5ced721820c0c43332d4e5549b38548b1e0800b5ba795f515cd97998c7bf7ecf55e4dba3972099e689f3709a2834cd949ac66895e6e8d32071695a2c1738a5ee5f69e9faefb07024f5549caff0b18264c0e15c3da276ac7f1b0e96736e44eb06c8f767aaf1cd98daad563a4b5c4038513ca2741f52c295f3b34f6b318b524ad75c503b9ddb30a2784019238f28fb7a121975bafe8db462c24e1d0692b9eec499eb4895ce395f0b4b5548998f1ba99194a830bafebde6056725344cd79d0989db75131562ee6bf65494b67b23cef9437f409ceaa23e5bd952d41527162459491ae2a89e894e6fc889181cc5600d0e95cbb8ce4a6b7492c028f552d2110a8692acc0c035e98b992b5b32e88ea347047e8bd0bfa4cc8ef0785ad887b1bf4f0be740bd7f86dafaa650164d336d0d85734bfe835126e79cdab7044515b5ebb744cdd4ae973a0a065235149c83af7b0b5d8771dddd5671dd466bb4d414b170820830770197c32c11dd4cd5dd11bad6f5a5d204292326e53ff9746a9f7dea519b4de2aa94d6698fb24fda8b16b9ecbff714034d027cafab1885c6cd900bc32e8d461929bc3773bb5702e8151563cb612bed9f95518b5146aeb37145450189c2f006beb62189b78f9c8b47d48e9f6e7cece3f713ff29e21c98eda308829aeacfc58158c8e935921a82eacfb53a0e8f7eaf71207cef19813a4f0d8d1cd4b7c6ed6b728e85cad6e9892431a63433ed8150ca18afdfe1b0a9e48b661abde6a3348c5e6f722b08070e1c3860925ba9dce202e5c6fffbde6b9fef5d178ac7fb28a77f76a33deb417fd0c2958fbfd1ba97994b6fcdebe27277c309258431ce8fed3c4f96874ddbe8e739a36db4f59f2de7e611d2f50729cf193c671c60088e51fdbbc7f498fc078dff34d1199782de7bef31357531e5d60369500d10802cb50be2560608d2618028dd06748f58b49a751b7e11f8967be2e44d63ffa74c2e7d484c8d8723f47df8a52f534e6afc2ec9ed546f44bb1446b8b173b4c3b97ca9d53e5651e367389d61a98831b9994aa57a1f7c5536a77e11d5cf8adaba247d535f37154569d8d32c46cc42e9ad752482370bb04fe79844d887b3c9256851fb29bc1d237c1d5f04f8fc4bf6d7d554cb9ea58417bb1ec3302c7bd8bbde753db5f3f1d66adef5de8bf0e11351245d04dc3090e00f93ee8ee5d7853d936bdeeb04b79b30f0d084b6d1916e18681bf0a792139c83f404e760a4523ecd636424f02679f7d9a4ce22250b952c4464e192054c96a42c66b240a1794129a518c5289d4b644123a59452ae80290a1436d0a10a3458a8109a454754b6e80099e24829a5bc428df37017148c7a059b55932fe2a038cfc4428af3f0ed82ee9c17154a29a559164d18462307adf2f63abe3b37ba43a5ca57dd548c31c618638c51e5d0f60e95fa5e9542b96333d350298dfb53b76d7782dbcf92852c638d524b9f6ca24e515acae98e8086ca767068e822511abaf193604b43f73d7d27953e538d7320e9d61d81441d71c07d6f5f1b33aee63f8ca46f921ae48dd1865b43375a6e1b0e9168f3fec892216e1bf17b04f5ca6c001d0f7934748f3ca7b6c16d636e23e82b6d912d19efc02dc7dfd7dc17e5ee70b9b1bb4346f9b09d7b1846adb54be9cfc6550b2a54e26b7c8dbb43eacd6fc77bfc6d83d56ac53b9252b91de91b022697fa3c21ce3d7d7fed8a3e193ae71de48c1765ec1d64fdee839ba1c0194377bb73a12a2a3c2084319679c2cc13495a6f4fa0b9918ccbe9a474f6402605306830a83861dcf8500140831b19540fc8a068a828302b282aaa081a652a002e93b121ca161b888c10436ba2d6b84ca6062c68945a2f93a9e109cd0c991a98b85141455d2653431275894ae332991a8840cd50e165323518ada2a8d7653235a800880c4438d8e17a9a2c1545d141ffef703d74ca39654e52d52e2b999126c70595fea0a53e1f6870c31366c860c58c265c9c1953af25345596b941982d2aed7245c58ab041cda830512f1e82a8f3b2121b2846555e566233438b8d1324362b1c512f2d72c4d41c28aaeab2d20ea65c1cd0d4652533c0503aa3872e28cd522064f68e0bbf592cd6ecfa905638ab8e91aeb6e0e129c65821b4b063a4f38a48e3c4d1210c28e1c78ab3ea28639987094501e31ae072981c9e6e06e5f4978fc5cf8e0c899fd92558b8fba4bfb443e85f43e24fbb04138ab60a913ad48e9d5210ca11127f490b113da1254c84a25581044242b8456448e884c7d3921685c7e343424e2974012a7fde099a72f9350a4920d0dddd3d65ec76e6f8595c3f7340ab6e0fa24138eccea587bc8094524a235532a32cc18cccf53ba5907dda04ed103699f8f27b841ee1491727295020d466508d38520d1a6a47e313e7f83b1211d5a70d7fe4b88d441789bc461ce9f2e744281749bc46dce9f27f1152b6ecb635729d46b43f0116485fce6dc2e7375140a0d5245d614161c559b56b50db92d5155b27c6c1794674ae7ccd391ca42adf87fcf9d1c99cb688fcbf45e22ba2c98ffe7fdd3abc124aadeadcf823a5b44e55a7b6c0ad64eae68773f5fd753d2ae652f796a691776fc962cf44083ee750207bec87646ded106d49f65acb807d66c4c57f382302de089f7c973dd26d1ed3f55221edcdc863ba1369a2994bb31fcb96ac64bcd37dc04d4a5ad6f22b82972277d51315110da68e06d3f5cfe434f39a639c33d531b953c939bff7e942ab22a24245d4400f8ab7e4dc0db59b4a53c9cc5cf21f28fca733027f7e3045a925c351d10a2e6a7ad1ed92cc0bdf2b8e9cd051450f354393c0d71fd5ba73333ab241edba09a99b28f56eb1175d662f42cdc0a8ad83be44e67f04098ff73ce02bfd68255abbf9f2a0ce3dd58ee33a0748748bc3f526024e6ae2ed9aa9d1fc40495159887cfa4847b78d2e5d7d51fbf5b4d2ed4f755159ed816f26e37943715a44003395df6d0c2a7353fc92c98e0e1fac418343f8a0c6510b6ba32b7f6fc97d4e6a5f38df9c18f6b8ab510a9fdcfa32dbad306bc28422b0b28e5454ac181f942bd90c7352a7e3ce6706c271a349b89ebdc17a7de3255dbabd6ecd391d4fb5e3a596107676ded1e1b89093703010f35322ab3871c5ddf6f931c63927bcd0c2ae9c03ca8f91f533270b005b5812c22515676504e74619b1f09bb3bf7fa9e7742225f8f4d93e4485ffdc71b84b212c1c41724e67e9eeeeeed05695172cc7c1c8791887238a0352c5a1b5c241e97158e2e2982896a01c2345ab8c96e4225295eac108218c10bacf39e391d7264acbb10f135eaa09fec3dfc4903dc66e222828f187d9a393b29eec6e22d244d51ed09c0d5f84a6fa43a5a5875cc05c7c6ef746652da8524a39a54442e59426b8725249a97d504686308a6ce8f1e31744ebcadf7befbdf7de7befbd76ee4aad4c64ccccdc6a6adfeb82ef525da9875a86a96c8ad2d57c175bb682b5ae3f056a3333b36d2a9b9dd9d9993b72c3860d1b423ef2dab4634d133a5d603cb59ddb0928346da0a9d5f41affe92793c90b7e36375080a20a8de8ac2efa13ea5c688bcc8f56b4ac3073b547656c53da77f0556f9deaf5f0fbb2bfd291a166f307f52acbce69a94e876216763a97d23737245056233a37f290559556eb64b1cf4c53e54ffa8054969d27fb99d54d85e57a46b19c9bbf2181174789f93f4a1032c47fe613c9b2ec39cb34ed53d9e3c852afa29a465f95a1b4cc76442ea6c2ac11ee426ebad2245fb6fcee1f22843722ff88f80f5b66272264c8102144d8853c222e6d907d960ed6a143c8b368c0b0bc0824a29214284f88d6fc30853a01218493c6ebe7453798ba2921c2870212d5646a680a8c144f0a8bf114441733f4e005891ac02001c6cb961dc8c08234bf6c31422966b982982c14e08b0f2ca04275b98c115dc6c0b22e455cd05c31e3893266302345059375c1d20589069632ca1c1146842693ee4069135ace98c114627ca15214069bcb491742504a690c5094419a62f322020b658ea85c0f2e97d1e2029b4c86ca2be6eed7af5f774ac35e8703e1304f5395a652a53698aa5a167bda8e932cd36aa92af12da2659d547e91cb9929ae1f48b0c20e658c4146298a2e5ad4e08b25e8e542153f604f5439f344c60a90208ea8214a164b54f185015faaf87203a35874868a0e464ce1850f4464749871c24852ca7d697d798107975b4938713278cc10464660922a0d0418628b21c89042d348c162288099d610524819d3b262c3455d6e59b13206154a525c252b60a02e28a3626b74869472907386d2195654ed721932454c3575b90c992851d4ec72193242e8a0a05e97cb90d142c68b0b500417387ab90c99169aac0996f81e33fce723f88b8054db527b43e53d7ffeac0df53f880930aebf0ed7a36387fb1e1d8db3f56c1c085b6ad5a9385ed049e944628a2c359a982207a5295ea8a144553dd50853515c00d18402a36651603fd4ac0cdd52a7982bf5f2c2e68c962fb55e4e3af303cae90c941a47d41a9793cea0a0460e4c4e4c6b9266f0644527ad80c64120630a08577ecca176958583051aeecd9532035b8eca24c18252106274b95dbdf276386e0b0390a1762c56b7b9f0e15bad980c01b182339c0c6134041144423551105a34ad91b442179487dad12b9d54a902e79c979cd7bce6d67a4273e5bb7cd5bfcfa00d0193bba1509837a07ef7133501f9debdd7be7b4bae37a0da25ec23f82fa97f02f61152cf3e429480ca762c5112e8985cd5c33e6e599d007c667293cc20ecf1337609f8cbebe3f6f2da98235bdba13cbea0c96612e4d065fee9b88b997fb0effc2fbf3cfb8b529a5ddfd775f1a011c5e3fa6bbea9fdbce69c0f1d05846e2047880cfe335958ad596aa1698916104408f92bf11fc8448731b6d0818b30617a3012924902706203222e84e821071c84e60a754cd63dc44babf7a0127c103e76edca0f4a6b5dadfe394ee9f10f2aa72a95ad008d576156b981280938a53fa92da27aece754f998371b16fabea59ebd0139d422a9408dbff90ad0f81a7f6355b8f91a568525352c16d5df3c0d8b857eea272a88f6956e2ad5d30d7b952d321f7b9afdcdc64273c90d025fb3d916e43df6d746e97c0fed091e9394c329a8920da040c48424ecd325f414b73f6e507380c81eef2a8972995cf8fe54dac8e975948fbe1f4c510320e44709d184f69c20d06d0e10ffc74fe7b150bb75d8a7897cc04c71082184681400c157ea8150cf9fdaeae389a8cb6ace79c69dd9a0691b746ee7927fa5dc7996f3f80650c8364655d9ee652fccbe689d7e78ad168c2ebddc6aa1879ba9e83c2242517ddf5f244ae8521689481a861782cee34c9fad6eb3a8fdfca8cb9713e4e5c4e79ba4bbfa83347db7f07d3fb43b7cc761c866ef30d08e9eebabf617e7f3f627fc8431d614ea7c54098d1aff44496b157639e75244cab2a015b7984841b6840315d811ca9c5ed8ff931acaed0e69af7f1469fe8e8e9b7e798c4221f6d7f599b6f9d67ee4683847f6fe354bedb811321c47f4faf83dae87ef2fafe2af9451fb469dc091687c0283a8dc8c0eb5fb6c475deadcbf215c116ef6a237c3273531f5fd4a00d72184ff987d8cbc4b93aabc7326390735bf3853d4a9345baa2feaca399e4b4364196bf4a96373ce1ed316194144a55ef5d7a750afe9a45ef573aa6c056aa12937aa55e7e69c9fa91875d9b951ffe9f75bbce19551e965315968b9525197c56441054bc52e8bc962073159d010430b986e7490c510083ad47a598c1aa707a85933a78c7087eb7931474e5ab77b16135d38a9bc74bf3d7e0f39d744cf3972e4e8effe6247d8434de4ef3def49445f524f79474766a650e1a2f35a6e84e43f4a6de49c3b11efc847306aea7723e7fcc889682cecd34746464d04fba0a8d47697e254d8b81111ce215187fca91671b05aada264ed668773f1298d1ea7ac74b5f21864fc80e00749e1faf316e994d4720ad332f370a7841fd0c7f82d401be5e3e96f01fefc1646e011ba25b7e3e705f0c7ade377cbac00fe8e417a5b121fbea48fa7a3c5e20f6dc6ce6ef98a5fed70eeee2f8687291784cb629e1c698ffd430571f98f611963722bd21fffc18f1f3fbed736ecb723dd513315c3be083b47e1631f1fb3cf7380605776c18f0f02f8716e1d659fcd49c6fee3c39d7d628cd87533a83d7ab3a841671f7e9e2fca9b4d4d4678b34ba39876651a86ea015fcb503de063579672d70167f52edd5618ed6a020fc64d8b1a637ca6dff1a76529ad06a1437823bc2a20721d42cd0827cd70aa03b88313ac66004288d1a18102251afaf439e594ee8d92401d7216437f3e275dae1567a5f3e87b5f60285ab342d20b32ccd9382b9dfecb62bcb4511325364d2983a894524a29fdf71cb651e699134b1c6adbf55ce99229fb48135aee5cd67922b04d6d39858ab73f81d2518a4861c4034cc290b6215f3e0a9c83beac2b191434442e4996e2ca29fb680b0fb5bf8619558ac8b46113e99511955a525fb3ddea56e796b410f511523695fa4e6da9ae9f0489d76dca7649e66d123129539fe5f8e09bb239aa2f929a9ffaf92a770c7b942ab565cf288dc9d532f9be6d3b5eedd25aea81dd1dbbb90cbb269591d22923745a65498828e4f1d4266ad74d321a5aeaeb6d48078910bddfc65420d1a374970e1f8d17d48e9b86b4c31ee7ba9e1e1a5ae2108d17d48ec6231c32dee97c9a742ef7f50f9c3a8430d7b7a81f38bdf95d08610af0847d94a81f38b18f4395d152019e1071fb8d6ea378a8a6a85470bbb924c2edf8fc99d3503b0d40d97d00e35c5aea1182edfa9d86da3db96ee712fbb8006e777309be08175a561d39d73e452005f57bcc95a977c6d14706c27ffdaeeff0ec39ad0ee760506a070b7bb825eafba6166499cafdbd5ab56e4523858f52669fee79bc67568c9c8d506230c5703e9fb3274d45232787e24f3c07889461caed97324c614093560e903a74e3d79e3a74d939add93cad19bad1e638a70019ae3fff0dce71a42f92f83d66b8fe3dfc76516d11184f74f58ef42c5277cbc1e8e00820000f2e2aeb2aead147e977362e7c229c435abeead65b758edfa528fe79afc17f34b6a8cd4a1d9f91dbbb3432cac70e8d747b8d43c7591de136ce7d69a4462293f56b1aa5b5ae568fe358d3416d1f30c618855c23ac1bdf6b4c69adabd57b4658d0db08eb42a835fbbc6f1f2acb871e46900798ceb50df95dbc4c1b04f71daea799a34fe9cbe7e84b4a39efa3cba58f38075fd96a6ecbef7aae7c97f271d4389fbee47ed24fe45387d3e784d38b9051be1863a4b6ee700f6688f5e80a2e01ee658b77c9e256dae0a0cb1151583001a31c9c9101193ba072430e5eb088414a010d6d70b0832833ac208d0d8ab23843c86fb82e0689e88b0a945852c20c0db24880124c2831a6872b515c7142e98c5f59ba52a64b9726b7e36e7f238171fb7b56cf45192317c218f475a4547839cc0e6070cf9dae3be782ca9c4e0852b4fb7f71dde1a66307b045edb8db40758bdb8fe33f925b5eb2fed61744b4be08a2c1f812ef9201a454442ce4175ecc1a975b5f90415545170fd88d10dae59613122d27312d2718dc9573bd3951914269191749ba1bb63fdc42d017c6873729bc8f0e217cef5beb5eff6bf7b83df8dafd79236547fafa0700a9368a28006896867e3c131c28b21af79f8e5eb422f1efe104e852ad11f7b74d24ed9876e9072f8167a4c4c09192e180d5902551a50061456a0bd4109c118430de708ef89f5d98b11e908ef3c48f3b73bef9dec4fefde5654cf1d503c2aa687f83d9eb6ffca25e48e00dfbc09f507ae08107ec83c339727a38ce858fd32a8a314687b52d1f61f7f71d8a69d49e040098dadf3d7c0893c01b6174e1092ab789de0f3d9ee74f9b3b6dbec6a9ae69625a526a211d194d89f284e8fd1b7a6a3d41a4fbde9d1ecf9aa3c7f3ded73c9ef72f22711fd2f3768bc4749d8973f83f6fb745a235d2441f5c51a30541135d5f735fe76aeefb175b2fc878476a4050566e9dea27ab49a03489df68122884f606df801567757daa04140cc2716f480ccbbea838a6bd0127702309dd6eb40dc771bb8767ad3036318caf8d6d6744bb1e7bcf328d39d3b23eba18d6d7c30dfb6b6b22c6208570eb23e72026fdd51d86288c801398f8d4524abf89f80fb510524857554208e394fd5f5d5085c02702e3c7186bbde2757dbcaeebba2eecca2e785dd7757d8f9bebbaaeebba2e3aafeb9a17d5ae0bfb4cbb5e8c9a4decbada630a9e22cd1761e931ad76f8e3d0d1d33810c21ab7c873abf72294a7bfab0784fd6ba91dbd4c84e8f52d30119acf8f6d4c84de2fb96c8e3f0bd17f76c87ccc2e619be3b68a4b224b32c221edee76c72a4887ff7c57eb12b0c98530ce1ea229a507c07649ae2ceb69d233e49c7f8f0b6dc39b10dd38e45cb445d57b887a5c805f54fd3bf87028d21c30a7f07b83dd3b2cec775818dc9eed5817caeed6d1a1ceaf75b57aaf634189f5f501d68db608b4d46af08c8cd25a572b7ecf3d19bf5332021078ce39a77c2ed4b62c746c8fc412d08742e2d3dbf648b4cec3dca328e822e70b1532381222cdd2121255966982c10b8a50224d1359686184d2192b3c084c40191f33337d5024cda4fc6b63b58df87c6df41935811b3b5cc9f5a0304ff8747464f486d7c8ce85f6c52a10e8e0a5544e0963941186c97a86ea9fe120d5fa3b5c052c43509f7a15b457bd5401f5a90a513914d05ef517d05e7501d4a7aca6fd84a02f7d6cee7bea196af72b36f5e935516abbd714e53e2dcbb2c7b6ee315decb34d7aa9d8fb53fa52fe755d18934be14bb8bda6294d7ce0bee2ac74e8a494d2a417862ea5cd9456eac213ad15ce25e761a6a6351070c1c979f871382b1d7b598c52d28fc978270ab9fdcc295cbe1d6784c5ba6c8bcca74f7fe7661dcecd746ef62bffb9f9ec35cfb2a7fe83fa8c478dc7d9babf3735b6234b2e8ddfe17de45d1a3a361cce55f1c0bf6adb8e739462fcf8f154663baf1ed46ad3c257c321193ef852eadd51c60761844f4cc68ce2011d88a43c6fa073fc2bffc96636af6b5ecee15ca83df6932f06c30bb1f33cb649e265a694e7cd8e73ce3d68b7eaf1c2a177775ebc21e39dd6e15c3fd6ed2f6408116eabcd7729db0639171ddb34206ea5a520aca9345bfd8e632eb1f8aba0ee2a123875ac74e4c6954a169f772e55e21c3c03d90327201440de77d7a18b9a927330100998073ebcbedb6eae0be3a78b9fa855c23ef0574b7ae828c650c493242c37f81d160e7777eee78b2fbe6cff05e9e5eef03796732c1dad4387fff07b44ec7bac17b1d7691d60a00dc31cc3300c7b1f0cd4cce38ffd8d06da68345033cf7bec7b700efad8df700e768c6770318ec14fc74af0e400e100dc01b858bdd873ed514f31ec79a8facfeab58ae33ffed86b1460a114651fec8591daf8f1a0366dc3b0b761ce967bd441c53bfc7ff88f7e5ba4ad10e7dc04a6f8fe3f5e0ed5736045357eb703d3bd7179cc0d30dc2a13bbb5a9c2dbd5250d5f6e7c93388ef3f8c33ba1cdbad4bf57acb85d10d739d48e0a11a6cbd3d5563a62540ee385e97694886a311251a10b5e96fe8ea7e44608638dcba82006b86cab9000fec0e7f0bb182392befd1c233f999cdd6cc00753beaef8e494304639865611c05b446bfab8283dd4442928390105214476fca897b282e25f3aa0010817c260c3c39050b4ff78fce70b4080f0014d0ab4d8220730107218ae7b2103187089014a95325a424e74bd0d93d211182e49b411f217981cd5d0c2134f465b86ac084d17ae4f9912c31857ac40cc1aa1167274604311573481e1e90ba12637033b7c0184184e5edce044c81f85a393a814cf56ac16b299110004008314000020100a0603815038342618ceabee14000e878a408a5a9908b42488510c19630c2006184200004440046806e200fed72e2fd589b0a6d23f91f6307d1de30393e925f5e6137b98c736867d1dafe2a613b037dac095037a8c0f9ad712a9629fa0d77977acb4cc86524f7b90bf2e80e11331fc1a3d8075131f4eec08894dbd5813430ff8011b18ecbcad46f68b0e23b6697d96fe2dd6ccf9b3efe47aa7fc520c4dfc40a6a64f18a020a1806bb0fee417a2d174472c869ee443be9ae29472f5466ba5aec91a03f97ed15ecd875db182742267825aa30b6de2b43cdb3c822c21b2ad1a1bc6c499acbaad4a4038541e58bc86f84e6219f183653ef954cb8d5a1af79083b7e778e0d588d768620478d55a2ee05c98e739bc5c36eed485ede3e0d1f68ae56400e97d3549962c7c492ac7201b439746f7735007b9756f32dc611cbae8a02b5c6611354dea2c574e752aa8221651c301243724e6c1c24857974e6b521e1284df5d9113a48dde2f8717063a4bd8e3d9b96deaba24ba04141f4447fec200b3b26eb735d5179c3c0bda828f34807fec89aa3b4f332dc9bde41baf4295c24cfde716a125a89af2eb17ba114714dbe0c861a4d364e77e9ab2860169a1e41f785e51c0897d862195e2ed4abccc30c7c2ce05cb96197f425639ce9083808c632208af38a24bab154a27344bba2ce22447b2a8222992ee1f7f074dffdc7053bf173d7538b1dd661a589f684d57a2d5a458ce3725afdc3e22dfe62735f60d2b65cd38fb9832209b83db64f608cf31740f188073264aefe07dd899a451f3c79c6bd140720b27b58b4730590e29ccee84c8aed51b0687e869a2ae9555417a6b4c051d0a35f14f6e97f6e85fb0a73f0240d4f17555a6d7877348358c1b25918b272e434e975dbb1a2b0965d69407b69b32e01074592ae7d0b10c275a079ff1d6de021afaed23b965a3586682fd4a286d1cc6a35ca5000e27b620784312a912d19a0a371bbfa1b83627147ddb27c664cd63fd86e758f5b8404c5a8446381a4749d9485552fcfa4367c07e64a87898a051e33f8730afe1344f10dbbc0b9e54e977b7d5cc9572eb76eae1a40b999d92d92fa791cc51e02d186c3ff3e90c22f04c14fabd476ff086e53780b551d0f92555e0ed181ce2efb35b7c09d21f16928bb57776bfaf799691a1b7c2b1d8c4b276956f5fd2fbb157384039c32f69635058291a6bf24af2833f425197f25f5db14f0f044f6958692979368462bd623a034ba76e470178b15796c27e94dabe96ca7e96c2be94629f29ec636afb580afb5a6ab637d78af4127f18185bfdc98dae1631c2ea9e3cc3e5f4e0ed0ff9609122aed7f9b0ba4d5c644396f3e69cf110a760b3c959cc88baaf5fb3c00bce567bff96f34b9c92f2b92211c2a8291d21f313b1d09aac8980a04a22f16869bc957c006a820f4a530978a5345a87dfbfd9a6c87d151d61788c2002c1aef66f47c1d6f8d26d4929afa21977cd48e42b7cc2ff792aac494d16002b86d2fe3e81cc8fbe3a9ba330bcdcef2ed49926ae0f5bf95daeb20be88ddf6f3a9d85d270045e6a05cbf5399c8908e8be17994b8b287a050b047aa61e2a0d9f615800b5d52239a6a0ab8a2c3b3382708caf0e1789fd5595607e33de34107db07846dc8ece789a88fb428cb491a07b375149b063449527ef3be6441e2d430dfae71a64351918a8c635a9dedfa8682130ef7c28944b646819049b4d7af089cc7437d24bc70dc2619cd179c48e2ad8808c922fdd02fa1eec2ebcf6841a478727545fd5beed4c8bf9b53b02f85d2b2e8dd07599df29a41b3142e09a6a3948b4e35f8edb0ae5acd6311aebc15deefec45cf7e5b1daf0c85151b8c811bbfc29ef70ba6d0d0da95c0ac33fcc31f7250c94d966eef7f1d0eea132ace33c715b4fa58b0858bff8bc7d9f4b3aadf564b7a32d774116e71290955e0cc0e53c3a62777acd81ea16ad5231dfa59709e33a62d7375d67a20aeb7ad1bd18c39c0221db4cd988dd4e7ac903fa16ec485c589e63c4aeab36712821d63b7d69443a64e4fd87b0225c6377f7b0861433d513ffb08b3a9edaaddff07e824f977261bedc31b3b7d4074d756185cf12031329edcdc9c69045be5cd2cfc9e8076cbcdaba057ac0659588be26bf8af48d1a8456ecf77e43f0fd3e2d2dd7a96769fbd3f7fb429d21c08e9e249a0d25d1bcfcf07332822a93c8877f53144ab90c1533f031aa62d7d9cc1222357fc328da12a068cc299fe490b983b1f3379a39d13fe201872f19b5f8eeef0ae84374f9e61b5f8924e95c90a65bfdabbaf1313f25a9e0085cc8e82765ba48f2b4bb6f330b25173203ad989de789f8a4139354f0f931113d049d04d55d326c87bfd315537c696a4d73d6d183217d64b9ff0dc4342da737cd0c5e3ee7c3fcde4320450c155f7c6a2dadbc5e619980475c781e80d5fd68b509802a34867704ed31fe73832589b6309e6da9d0d1fef33d035de49c059a705d14c9075f4b6f210534fce607b488342379f33f1f791357fa9bc59637a08296371df26ad7a818c84dfe449090434b29d20b89f7eded6530ee83ad2e65e74778efb60c7f380b0245e5eaec5327637cca5738b65538a29c15540a5bfee9d9aa80306939e7c109a7b8809ac10c9e2bf958986620e67341179005b2d84b99836ecd80ee9aeb6034aef0aa06fc5f62a78198719d458e231ac27674eaaa5d23c1d25479e9970d61212316d8c73af7e2de59f4bdd527d83ab1a54c442b25ca38e2c1a112e024c5808d2ad037ce8f8c9ae84cd2cee9fb96818cf4bfb6aa2c442a2db82f9b2b4c64f6599478d650e8849da5c79dbc71e60a13b96707ac71964894ea2c11126d610202ea550936d1f79e063776f8ade7d3f5ceae7126f2024f97eb88a2baf1dd3a02fb23418ddae76886b6c9b70f7d6d8e47204075b168a83739c4307521fd28477521cbe20e3d754a8dc1b10e535dc4e404b6a8751524078f83a0ce02431ddc0d6a52e0bdc5552d38b2f02440eb7ef1663acf9c282bb73880ede1cd8cbb03add131fab2717490824c64c6a919d1881218ba1ba30483cd8c08b2d8c7e56e2ff564cdeb538f58ea68ea1ee703c373068b3804fdef66f249213b33b4a8494237ea9c4b405a26b1fd57b5d9ae52e11d5fe230737873574bbf0c75d73b5810ee129c018470994d6bd5e8aa7496f6ecc0112a2d0e6e0a838a82f67fcc867d8d08e95934e568b6c103c7c4927b80dfde812b942dc3495457d16b14fa9fb3ce6b7c5a1c5588af7abb8af486ae5b2a419dba40443f09ec237107c53a8e4d2940c46d25a3c6dcf290702f7e409a390b4e20145607e04897303b75c58c1db93912b656970a1ed6a94b8940ced342edb3934c7aecf5ce246abfa1484de0ff6577d88caf6a1968aaa8bd912c8f05ca36b834839880461b3a1b94f7d24e43f291ecb581c0824174a2a1caf873467d420dce6bbc99186318e00727555d11b58e0402761746354cbdb2da754dd79a5bbbc674364dd81c18c640779f205da15a7e8b3dd942e36938df89a00f171c727a627822b08a94dab50f8f38b15aede6ba8baf18a73eed7a79ddf009528984b2757b00daaec3be1267a1b4412043309afc60896d4332a12c24a2c39a44c1472209c683e73518ad219c0bc8c7134dfb6f38b042e7f943d8f702934c2fb99df4a6ef1ed7097572db7484f8ba848d777e89f2821867b58351939ef3da57dac1636bd27cd768b040600a4e524c475616e19b39eb44c743cb7ddb97c7b372c56500430915094cea9a7788fda6b1ea9244690b8ae2f388529127e2affd4da6b7e07b15e31d2011b703f164b5471889d87a46eb864887c2b147e69573458f3c3955a8108c8cfb4b9c25d37dd458090ad12f7c1a3e165072d126a4c86b1b81cc6038616ddfa0be801a0d3d86f067ca7bbacbed18bca079426b0e45180d51688a52baa2e9c5d52e94dd7c39a10c59f48d677817ca122d5f04f005d510808ffc9d67263b20bb0290d07c4443b7ce90e91691695040c0d1f62c86dfda598fab903daaafce12f1fb32753ca27e94ddace4a5dbac74fc6c820fcbe5614d872616b681702ed16d89fcac3a656bad977f9a2bb895b625bca94898d0ae77f3c2da14f94c8226da944442a1b15d237e03e5b25da77fe1a02bd2d618b8ed5057184d7918f9412635fdb5ba46ff30fa77da07bd0bb329e4c4ed707e7fa70a4361f6c03a1fa75d3910e414a39c045de374c6b89fdc669221e015e7bb601b955df1e96aa3b357ab1d533dd0d82adf17ccf2045156d87c38f588b9487b96d0ce0d81ef8b15c3b5c7bdb85507c6b8c580a6216433fccc6493db5452cab7058ea12ce60100e1d65ccb7beb097997980e430c34a14dc3fc534377e31c3d3517ef6e52a555a2ce0a191542b7b8fffca8cb2e6f84aa8646f6f22d81fb1e1c9de78ab051d5830002eb8cb79d01841a5de729af268f8208228ead9f23f4923fae5c2725b0e0abbde3ab74d4419da54268e3534b16e329e07b66c79ec058b48fda3b79d73d2d7ccb3ab277eed02c0f25deb98f087f8726bd1206d334ecd15264668269f2c36d7dc5216ea330df18a23ea469ed853936b23e78177cbd201983dd654dbd8c18bb161d4b31f5b601c6e4ffcf63e4e69fa5d2e34786a5e4ca22293bf954f4d65aa2c673dcc600427ef12d23ae8fd67a2cd83a4c011d9bd0dcc09ee66dfc3276ddbcafce1514349907fcdaf6bc5c1c0cb3ef1ef65e55059aa18491992a17eece9479641d8ab252dc35066a9b6457f7d73b6cdb146a1c6ed3dbd633c0b6011de495b1c637d8c4e23814ad42be56cba36d426e9e088eec23d19586e86d897eddc37a7034aa1bfdbb5a07550be3e17ddf8e8e29f596755cc274a6c1c0b13518c2293bbfb68c80247c2c350394a31d8e899f91751ce4c726b6cc49f465275a86ccc88eb202092e8b569d7054985989745c90bf2b6a13bc35852b4b3aae60415edc8b370c1a202284df364d2c7eee9f121a2da7d20597bea4a302e0b0103bfe816fdb17999d4612c4557208d1b7811e2133786b4a0010da629ffb4f66203c4c011d3faf995261cc29f0e089b0d8e9ce60e7c85d9ea5a5e8e61c472dfdf80367484bf04652f594e87af2de8c5fc39a64729dd965b7be60fe13f70a80015265d95c2c367664ae502627e008b18a5f32dabecc293b410aee77d03479a166420d8f50df7436dd893151762c64c5184fca3916826e24aea5995e23e6e75c0833a106b10ca7c7bc70fabdc15b54e700fa20c25d26b7068fa7bbf64218fa7a139628c3fa231d92c694decbd19e3e714229cb2c4126ff52d5b5b3ffba66bce40af551295c035172d3ead834ca2e6e55c28d6dda9642e5bba6e6bff76dff62a7634331194a865c4c5ee1dae586ee1377cb1faad7cf5c9bf2d4e1f62f19c72cca242e255032a5d7e9cad4bed5cdfd55b48ae01ca5d419eca25345d657b9855692bf9dc1abcca164ec04dcf7bdb2ad3f926a4f959c5db1b68d636f39d755e315a793150d4a5ea5d9d150d2aa9d58ea1f2764866bbd2caced678dfe00c2e180e289f222eeb8d5c682966198744af0dd0ac4475b47041a3fc09842058c94b92c108b221d238e2c7da5d4e564b2c0f40c6d95b3b10bd532e8d7f8202ccaa075dcc1445a832bd9de4f307b953fb441dce5c64bfc80d16d706ca649119fd533fd38e814f75979669a32aea2d38984985d20cd712afbaa5926b91a42dc778d1c1c86a4f1277a8a089e4dfdfb703fa13c728b6931f217e1227b11774b6dbfc497c992897d86ad53049da8b1dcfa5b5c3f7f641bc2e058921a0332ffae7dbaf312563774ff69d2c91451629924a7a336c2060a13d627e94413c539efe8f433320eb3d3e7acfca5161e52190e8b5c0237e0d399e6c54d29587974c50a2c8abd90dfab7150de405a879fdbbf8e357b99360dea81073d1b33c72e98c29604ccac192b5631da2a3efc8482fdbe0f96bf764f48438bd51975263168d6860392ae960a66ba54fa3ac35a25029342b8db9a4f93890b5f9567d4ec8ba345db31d36d825802388e83876a48724e537e05f8c244f05a0617f33050a1a223704ee512701cbc0b99c44b49ee43321234c8568a30d646466a869926198286f2158fe474328e3694e3428cdd8c404c0457f88676f152a6daea8e73ea042a2b694a7b30c28571c65bc68f6cc7316e01a82d38b959fe27b154e44331fb50b1b5aef5fd482b734ac643c625c023ad0006c82fa94115ac507ac111249f5d7c1062c4295d0d7380704861850ae9546db4d231c270dc858dbf5f03b29bd2509a9957058889ce831f50ddef646b4083f2eee64e5035447b674fe2146b47d399ce8a77a3b3cbcf4638bc6edb96dfed1aef0a1b27b47c9ac438875ca3ab6c00d0c1d18b3eaaee6f805c441929ddb8d29936da8b15886ba0c6c1f566104691ac368168bb74f2f231d56705190c868e1c2ed70531b30fff5181ee6876083e32ada029e648bd60cc2cc3ffd5492f95d13d491024724193b3d9d50085c03629b9a147eb2c2728b37c495051b6c89e248abcf356a1dda90c360b9cab6c891b6a5a9b198a6a43885ba210b8b8b9b9ac048461f457fd249d50d2ac3887d3b066b7110e273e887daf2e6d702241dad6490e42d423ede3161f60727ade12071982955e14c67a572140c77a26e713c34267e1ab094d677256f0f9918ed994ced3a034a673227d64200d23568964a40809d0c368ab10cc9d6a098bd59dcabad26207e7d2aef334894ed92090f20c863ad988320ec4f9def61bc0707eda0f53bb0e316ccae125c4fdea74b0729ad72ff4639e40e6f457c59c36941a46926ee262fcbc82b35bf446289c47a75501356c5c09792e49b2aba47fcaeff0b8bf194d1723510eaa59da4895fd508cf227312029ebe1bbb6cea2d55019c24fc211d4acb7596598801091593aea5283c6089d5e69da92a6c8f52538b1c3410abc5c96f8d14305863ce23f41b1a44a39c508addf0ae1ca5831b0e5175c2309d90e0d7a9e372a09cef637cdf5282f1b04af9b69ed90b576b4ca99aa58e9cb8ec3c0449bbf993774c2fd8068c53d0e635319e21289477d2f5232308e9ad402648a2705511dbe430305c21cb3da9b6feb92ae3d7f842b8f073699ae4f9b63a14e7ad2f79ccc0b0588c4c17a2533c42429bffa06d71ccefe95d3845cd375d85be7737b7ce598e280609942db338c6b1f830f00a81c905e2daac648fb767ce6af20c786d571dad640f36d5399372d4b776566cf502aeb09d5d3b33eade19764ff117a3e7de13c1901a017e4aa687ce7d4cacb115327cae7a3101ee5eb9e196631093275f35446cf758806bda2ca372eda83b3b0f0aae9a9045a18962f0ca4e91190faa664035285637480eff696afb9eebcb60a0cfab26e5f9a0d8e30df7e6582f0757089f92e0b24e4595cf473de0fafe93256baea91ee8bcf15d27c1d92a82aba07026f415ac905a140b2243fc925031e8900bbe43c67f0adbfcf8c251f97bd325c32510a180519f7e8b9087c6fef201563f8ded64214f794c11b279dd29258905e40708538bac6a9a153c1544b2c73dc2a69f633b8b9ba34eb4d9e0be760eb44d102f83219645507120b92d981d39c7a074cd9443949c23f9af08fa7fd8b897f307bdcb2c742b997def9985e93ce18e9df29bc94a3e568a2bcccf8c2d5805ce54ed9ac465685796060a633f9ffc450e37e63f8af38bc1ae10b9f1bb06af57246fe6f5f2664cc0a39105c54ca39f6ac0d2d3a45457303f793a0e8f97efbc4a4be4b98d81c8c645d9d620f8f244347807a86a350b6bdc71c62888510c172deaa141734941ce7e8ad602a148efc7b9705da589028b4230651847c3b5055852635c726e1e3151f073b6082a81c3cfdda87929ae6a1893d20b3764174f0ca18d195b3f0898dc263f05081b8ba2a12c656c6401a8437de63110d6742774b9e1ca644349bd790a298c58312ca0aeffbc8ce9ba29d34c9db762e500cced40aeb002ee74fec091a5afd74210c0324d11f3aad2eb6d7a414d7525d8d363c0a1f9f19930b8cf655523bed04efb1cad9caada6a1564bf9fb3d595686816b2fc1c8863c953e2afad4bd1b370ec089fa9676e82a84ac83844fba74f016b8b9ccea146a10eb4b6b43bcfdb82ad11ec58a4e686bd3817abf93f41a091560560d0334332e1c3c318b818cfeae63d6b98107d2ce7ef39ce49bc22a8cb3f0218f7013ab62ca4845e17e57159d307a67cb8bae1c397d055fb0fec1f448826187b54860c477914f55985e08e9ffbb7ddd7a7887030c2b082570a4ceda1412cf0acb10724ba067b1f8c8451dd438ba403c025117b11cb39ae1c84af9d81179445bd436c624846bc6beb0d0c0e3589730a68cde919c8fd98446185a239743221969b34ba9ee0bb5bc980a56b4667f04930a8519a41b3ac33ae3552014c55b1a6f47c316a68e214673917a5cf62e1d05fe8d9c2cb97b249fd058a4e2e02f229143d4a8259bf24c62e58eb6d056fdefef1da18dfbe219ed5f1c39716ea2ca0e3ad35dac2b4edd376c5338e2a75b34791da7b6ff2d06e24599af0e736eca2dafc9fd3d6f966d4df527dc99e4bc4c8630a33ced940c82b5b11b1cac71946fb9cfc424239f232db02ada1451ccd0a706e9e040fd9eab184a6f94ec1781f47f012e667ba200ab147d8f6cc981f54ba4463e0dd31019c0b55561187ed168fe217206aee37b0d1aaa06e0a5c6dc60e78f10558b9757beaa0346133cba71cf06780dd0988155c5f43f8d566e00e2268106cbfa578cf763642bec3b46897725176721b633390ddb4841ab15607e000dabef6d2878f92c49883c0d69c9af8a592e975dc107dfef53e76c15c34b0c53c8e1c5ddc2a5602d00e04cde58f1af9f138233f8983ac331aafdd1732704c78b017ed5b815b361824a4455245f123fc21a1d3f80562247fdb13af7508f6346d8e51a26e1c867a853cebec3059570a0d272af649c01ad16cdbaf8b2fc6a7db7d7f078b147926420f0b6a60c3e6a65afd7a17ed30e50087334ffc683cf9f3fa925b142be0cf638752c3da52c9746945bee2a83c36ea07c8aa8388591ce7ddb7599211375f5a55b8f1b1e9354d1ee5c809e5b747cf83128d00aa21d118168663a0f4faff693a0fde5a40434622fb3eb4a57b1f640dc75ca92c26b2776d9547bd5f56826e006a4ef64b9f0e9f3f2de5c13778408a04feccdabf0b16a80b7264c56c3472d6bae5228d3bc59f457e04510bf2784ac8466be813a64f6725876843b359902e5259a784a87dc22eebce672ecbb9794dd2e3e9625e92ca3194edf14002ee585648069211b251ae2040067b7140d09e312d957a5ed4b44c5d71eb824ae1782bf4bfb867873be0657986b47ae99ee52815634d6c4188382199249dc576b4face809b781943643e52160e2d6953ebd98eafb20b39e289ccc3a8dc56cd25bfe57923e6502485c4bd2c4091d9f11fbc4beab2f61d6d2824dcc1fce26bc0584af683ef570a8efcf4cfc0056035941229c76b6b2873012ca4d4ea44c3eac681047bb7c818923754483fcb6b0d4986205a8defc529b5377439e31f73b80a308c5ba291c4fa5494eb4ffaeb4043bcc0af4ab385a8bc76dcc3d8b37de1700f3478f79bac2777d8094085667eb03bd545761637d60d3a040b8854c5efd20de4ed562a0516cf97858211c3d5543e8c2a3771b0d1efc16f50c95d68db51afa424be63e3407981b2856a5cda650252d2d01cf7eb0224125802b952b1f2040c30e85346aff5be81ca2c8a6e27f8c88d729000a25d8982dbbb83062fec189edb23c0a9b2c80ce70d2f0bd867b77fdde213ecdc889ff39370494b891ebd7f28a92e461bfddf2cde5c44b515fc278699f706e48beb48f7112ce056422c99d97d4d98d3e4186efbd391ca8e9dc5a438a5df9338a59acd9c7bf36a9a7352708ca24306db6b184ed3af5ce6cf9ce25c69bd043d989f0d36dc5d240a17ac9915b41e0a97dc5551750b03c41a9393e9decb55418ead9ba0ad9ec77092ae2840af25deb7f4a264219d525e090b5691c72fda3206cee245a34f37b4d5105466e0141b73cd8933fa067f8201d79d1cb39bb4969df99f42daa3432d0141eee99365c6bb61916a196d64326dc4fd364f9036baf922470579336a50d94dcad54e0269707b5b493e2fe20a77209404769c19a849a088e1fe6000b96a6520bf86bf7807f40a5b03b689f00a984d862c9babaf0d1cc64802d65ba926f4e64871f0643202bb96769ef485985cb79c467dceee8fd545d58cf4386e40425fefafe2a0026d64bc4eebe6013b3edf8d7d7946545335dbe320e57f133ce8a4560e38350e3865c9fe4a016f2f2efa39b2a9113185fbdb1714d7bfd311c8af54ac47921950b3c8bec64871aad244ded57f57b850ae8200a0ef85fbccd7352fab6b1599de489ca956715aa6164638eee9e4e251849de78e8daaa08778a40e7e51b9ebc358c31414b88ee05a9b305aac2d007cc359ccc37c7c0c6fab14cc57c8d0b8e47da9f723ef16d267d1e0218c762834726912f02a630c0c261dca0d62216d812807c75819d9c6f69678a66b9759d5025f3e3b0e88b2be1a1c561cf1b2c23b1c79b12679b02a81649909a17696193450239526c733fe79cf4d65c1a0dc236718c57576f0e70111510c3ed8fc465582f522202784e291eaa9a69380be17a45fb82e914660216ba341c5a77634f858949a92475ea744bc4a8c888dc961d9960d036f5b835e08784292c6ce304e0e8ba77a8cfda1bc6b39e7f057877ca113b6f1c4fcac797aea7590f03884f5ba5c7bc906fdf2a16708c1159dbef1818f6a76bdea703d6d8cadec30b282ef6da4c7b6db043a3374c599f265dd259610db105b1459ad7dbc5c20cf7d505d87178680feb1fb2ee74d6ae159e70594a7f53f66d4426855641b8ddabcd608c4090ad40f3f36095f732c8641fc31ecc1984a156ea59dde387f7533a8c22e2d480a86bae962be4416f17304d8f8b18524e0532c692f0855589c00b9c0dccef9c1c521f4912761f5044592af49dae4ae2e7d86ee103d0460a85c1decdb4f25027d251ed136f2c363f336dca9cf8109fbcc7df6e39c9eac7628061e97f8f9f06e63eb235077b7a7233e895081102e025ef9241b2ec3d89f0fc1635eb3a8e56a9c9534cc25561b44ea276104ae24c050cbdc30e4a53385363b4ccddfbfc127a1a2d12b3b729fffccc5e4a09c94dd820b47c788ebe97bca819b0ae6f7ec58f734c94d0dad8b2746ec47fcffbcf92b51fe283399d83eadbb2038000e889da693fd3087a44b72638cbf21a72684db9875e28a3a91603b671072014abbade66f191f7c933579a2ce84744132845e84c0fbcd5633a07c7c68e9842f00198b0cb6161f57cb689e2e1dbdf781eb7bee414a783e9ddd3ce097ce70c94edefb0401a165f3ff1614d8d108877cb98a0a5f7b08214742c0de7486f4ce7434754db76abdf7a689aadc6c9249449eb71ba4019b76ef9f9d4461b2eea1178e2361ef56edf5b9bb3bea70c68f6ca08bc3ed798015daed9a2bf7901b3109c2222deb646f9375bbe78145a15fea4713af1e837c25854648b684f90641fbf1fb741eb95e895a3b887e5242cd4f77a2530a08f1dc5989bf7804ae25b125ec778b2f4920b1ebe6f80cb1f658d5846f8008c5ba37b9b22f818afb59fa95116ca6a8f0e776118a45c749f6130d0a80619c992773d7a77559d0f440652f1b5573121ac80b778618a5f89cac0103d14dcea3615fc49d914429a9e9be979c8c03be0ca7f173324abb1bdc1bb29a909f6d2e8d62f8e37e8b80eb7412dc7e6d044756da8158791c0fee8dc05a82877b4533077ff34de8853b033e33f622442422071efe5c657c19f88350718cb53a7d310f08710850876d7ee8ce91c585a7784474710a9c8b23624474475a610c670c78d9ad724a295eae2d0bccbf99938706c7d9335b588f643de54052764b8ec4c89696ada1ba2dd2c3a5f91a0f90d827f1e60b1bc86fb4bc30205d9fcabadeee7fa1159a38d1084fd48126504c06b0ff91967cca72a46c2c04e90c464824fea1a95f0c57fee514a52fb0c8cb0d3103454368a660b893343c958e8ec06dcd84fcdae88dad980a8a71819bd9af0b754cf07380f0c2a11dbcf5609ec6063cebac7ba22aa429f72f3d226fd6119488d2909eb00d8d04c0908dd31c8bc9ab218f2ddb210fcea216fc180cda0dc1a014f7b897d15d0eb0f47c43919b1b34167a7b7733cb93549cab30df62c4b5e011505435a68b436438ba0869a41258e24ea12b665c9c94fc5a028509cd7d9babe9c4d21853a457abf53e65b57210e25f5721d330700085d08cb9de59d73c8428a3a57ecf4a418143e7c9f79438a7b2363ddbc952163d2f5d58b7ac96322f834820ad9f6ecbd1d556f9763ebd178cf0e197a048c0e97b6fd7689bb08f58a7fcd5701d47ab131afd0598911ce5e0fbb57c0dd1f21eae8654653fc36850dae04ad1020df4aae891690f273833994cdf22d49e938aeb343b7ee7d45000319337bdc7ef75d8780ba00e603f24b1a2054472092d07cec5fc4c0232c696e167bfa0f737716bb2d52db8297c1380904fc64db42835f7adeecb57b2507dba79d11db8b24c333c8e3a0afcab62fa20264af743139090e2e54f8f08d6b7eaa56210add5bf6f204812d06606919799493eb62f206ce8858e0547b9fbdd1c1c829c9340a488b184a43f1e2c21f767c2ab3e11d8e52b8800581b9008df52dbbb7704c25656d3dccefcfbbb85a56c6865be1ed91f6948ba760b9a4c08a1fc350a04d52d1af90d6338aebfa13e5a1cec24345645e127f742bb2a9ba1ce04a0770f209086f11072135646857bad4fac7b34071be0150220decb7c881c801697a4841ad441e35a4747829108460da078aa3cbbb115da5a3ebde43ff877bd850f22f1da109334a610e4d2cae2632ca09f92cf97dd0f28d7737aa27381b558028a07af122071f78ea264d2c518cd1510269e0fef997a98aed6b0e0f12aa9b580e1d7a614388b6383e3e82376524a25d2048bb5b04b1bb96ae0ca366db8b664c4b572e79d9f4a2a5b37c7caffa2c5d89a88eae965d4f92e8021acd11fc41625255fb0cf843b9779d68561855b76f99f829385380b8dc30ddc1bcf594a6fd59829f9ee0443d3de63d7b908fa84eb46496af87044c79dcc09ea0aa4327a023512015ebf7bb289e567a159f700bee0fc2a014ae42dae72457b6a994666590407cffe84b47f0c3e673c453ac326e793f278d3a0795b3c8fe376df59221365cd1b4a1c5f5d8db5ecb1d43227e8421e2c86adef4066949ca5fdc25c59c96b4bacdca59c999ead0dfb74e278637f47ee5d89370f91f997c227ddaab9f384a62ade7dcea5b5e119c649ee869b4b06220c923759ac2195a5a5d6b56d38d96c57b20174ca9582919b7b3d6290c30a2dc7ae44d5988ce6713f0c34060f0b4544d88cbde97628b50e8d98d866afc8fed62170e5b24e56b0b1b9b8e20ebf08f19e0f4bda22eab365fd8fae15fdc80a426182f0ef7b793c314e5829a75533c8dff7d0c73696848b0d1361a89deaa746413c5e625556ca72c6cad18baff9c279f5cdce3a011ae99cb14061e2bd859fbf79a107759eeada7f09838a06aefeecf190caf875135fed2ee8a3e8f952390a4264032104e90292a441a9f5d2b15870f0ce730a9b31bb7d3ce1b4638ac089d17640c47e12015c877524d902127756425a0f6227252b78ddbf08289c2a42e4e111ec7c01b0612ece23cf10c45d3f27c3b52e75bc04ddebcf26671d90a17a3386a46b94f4b3cbbb9b254210a85244cb8a128009dd4ad058d776d989c27141e8bcccb792a0b7c3b34cf92b9aeacad46e1590658b10289a88190bd43810a13ac4028115eff1adfe8bc7263ed82580f6cbd57cb8d7c6437f66be7b0c69b7ad2f194cd7a1ea219ce6d61949642cd23001b9fb29d5d94d32422c7f6df439fa30e6e4d8ebaa000667f5cfd4a3394a3d8b83c6a9244f0534c808909ef02748cce316ccf1eba1f3a226cd336c9b888609b60701871e3f2061f2e96027eb8511de5da9cc4ae871b8b2756f4c71df7e17048818c36d0de27c4c8da78cf992be8fe05af00f8673dd7ccb851ce8c837adefba213bc6b29b0c6d14b084d7a8493233f7a05503f081773493798d9897130f8783edf7f43a44f12bcd9f621ae07438b31287b915d4ddc1982d5ffb9811cbeed436758719235290d10f3cf5ed6d066cb2a08afaba9b7e21605821bcb532d5230a7fb3520b80b15b8493bc8a92b952def4451d8a4ba5fa7c40553dadfc9524666a029095c90d324e4790801cac6248a95b94df95d99bde692bd95610b99c8777a2ca50b3e63cd624d86fe3b27d746364c0d97c8b7f5ba60613de441be439a8722a5805cd92dcc7dbf75f337f1283a4c20c202092ea652b9b2df7179f975098682361f1cf17db06ca228b630ac6df39f6529fccc1bfbbb4745db114542df25d0aeded3cc11644356024f5c8da975a3c9f1bc77d4bb8c708cd235c270c2b6c96d705c351f558fc6cfa10fe6fe4e24fe4fe37db3def67c00c268238f479e57deb54df2a802476280bcc1c35117baf2a07da32f2cd957a72db37d1b72efa6717bd71a3b1330443668591dce36c16fd81db23edbd6264cd9cf0c75060813d62bb12426975702416d12d118e055d47d2da65613ebcc2572800981d069f5347db3acb668dd30efcdcda158c2c3254cecfd6bc921b79437c9b490d762fc639284d73ea978741cf579a66d30defd0a75604663dc07d996292afb10d0a8d436a71c7d5d2caf73c006efbbd360f2baf2aa175b114edccc694127540dfb57a01b49c3d8b594db12450e44e5d59acfec8a000a20681e41aa9b972b24797f3e9da2f379ddf708baacaaa9d1c68bcc9170cdb10edb6c2d95d55a24add595e1028a05d8f336996807b744b24a9e75ef451fd6c4ee09ee24507cf37ff40a17b06a3c5009ac1cdfdb2670c93c735e689f00f680924ca7c7d4927d6f57077125aadc6201a6076c7538fb0b8a2244f8a89b220c0838a6dfd1c6119aef7f4d88f30a177ed28c40a808613c54234bdad6fd20972a423d2326ebb30f7b00c2f746ad4635801f1d227c01a25d1834ee66defc9594c4c6c1f68828b1db1a5d2eef8ccacb3141e3cb6b69a3cc03074091da15f253a15d67ff8cda8025a1832b01a7257235ce557c24f624a7f1d73f09e5dd58e93ecb8042c2dbab119545c29c6965b1874f0fd7eb4d134e6bfe7b29d5e22a0f395bd0b48c29cc9f5c527581bf21aa7da4a51c4fdc66b7fd7b71de2636148ec2c3aa4273098e22dc5ab4cf158ad52a5821f685eb8b9da2c1fc1569b89b2af635eb93800935fba695abaf277ecd2e8f616a1c0fd384f7ef758af4c5099d1069e825713653792d129235fc18738237b59c7be120921287089fee569636a5232ba579c2ffe779a820a6273fbb7dc1f81734bb30926aa7bb633e7c20ff3e177e87fa21f5eb81f42f7ec3dfe28aa376477f6568e74b2e29a5476e500a21d91818b7bce8a0cf1a64980d8bec1ccdbe968b0fe0c0e739f1acf06fc772c29e313ac43b87e50b8c6618d9665dd6cab4b11563dd12aaafe101afc694a280b3ef84756d3d5d0cd63a01048bc235ccd86a11f9dd4c75fa0352421f1f3c304a9b48c1c84e5b68c530a57bdcb1dd348a7b0884cad8c49a06db710a18008dd91f9c881d4feb3413f8ebe7422a9c76cde3b0c18c7a51ea0f26d38cdcd58cecf6838f708b61f10cb60e8de7fd199e2a04782caa49fd26e943a6f9e091f215cd7fba0c0a25a0aca337772bcbb4784ae66075f1b4aa63852f79443515101e3f1cb10e94991027283cbc580caf57ff353de4d0c49b77a516f630d2fd56d4f256a3881b0d946d5bed97e9dc0833e7f6ad132805840737bece92579a4b2e366cf603669596aa95a21a02a77af73cabc140dc62fdd590b06dcb6fd51c993557435de754e0d9e4f09ca38c3f509ec3bf2eb3a3e23e132b513bf7b84e901088cfa23be2a3718455fbc299f04c02834ad629544a20bad409c3e46312ea107169f2557d1a68610a9da44da5cba13610901595568bb858a1480b4dcb7b5b31a240321050b6506d07fa5c29c06981bab4b34ad2f6bc5edbe26da09967f5c7e707c5142144fcda3a2c449021d4952e01c338d837c96e0831f1fade590ea540a637583610ecf56693437fda466d4d898aefb77d29f3db94e03930cde0e74c20d3ec62b825b70d373855b0b8576007d8188b4aebe3cd295e171fa1458086f59b37ce9e352f3e441693417f0403cd4956db14d96e559aaca6b165088bde12c41a9acd3f0165fb0d6ace6c58471a00064effb0ccd3d7554fd34adc2c67fc8e09eed42b5c274cdf1904ae006fb7d3d8e12d55068e33172eda22708579e45d4a1e2d8d729cf5842afc8906f54caf498338bcd9785c0f5013ae3614d16c46aa31583c3d767d9cb10e0ac5305a6b2a14b540d2fb5e5fd92a41689eafce0d0addd7b8481db20e704bd0c7df224540afd9289677abf4e9bbcdca7b61465dcf042870147b9814a8a335ac06960d45068e823ba81c2bf11abf0ba428592f61102954fa2873095246d686e2632f5e8c67ef1816b819bb1a5c813e3abd1e8342626433e9953f47e6adae0578b1f43ce9a3531d4f0a3e6e26c449d472647efcf1ce45ac71103d182e72b26f328e691c436fadd5cc14b003b5bb7fc85b39c3d83094cbcb53255d6aa68f283c93d73dde0349894417460fb96436a9f7002de40cebe072154a2b488530d39210af9a688ae826a1b829aa9c6ad902b0813a2c82c5f48eca3065bf9055e8f33a5945495ee78899ebbe0325c531aac9e52973e6aa71addca9cb8833e15b29bd4736709a2a2e3c7b744171e5a2729d70e4953639143378b252d21e5e9ce3a6a4b51f345772e96ad5c70f8d211fbe0bc16c083a0cc2f0177385e5d4e182c81f11c99fdbd72d78754b7f34198e8b58778a04f9c51ee7ef28721d65a7b0723940a970443ebf2ff7808bf0618e38da3c289979953ae60d8f353c288f423eec819e5831a5ef42367995db5f5bce7a7fc10a3d60cc1192c0983130b6f984c362b54c24458f8802ca84701aa133c2d1a7ea037b89a26ef7fd4f32c325573ed044ed6a51d291e768c8266bef8a41df395011d7cd5c820efe2bf6ca82f4a4d8ad38c378e634e453739aa7c1af03617bd287f81f1b736d0c251c42883aa51bd64c8567a778a80534438b36cedba950283428733f50f795ec7cf2e611eb55e3863673a0477406018c86f3d6e914081d39a1aa332786f8c0130f7fded9e3fc88a84802a499a619ce77eba83b50d09b9c4fc5c530b4d05feacb5e7eb3436a4fb082c447ad46ae19f85a2d8883b2709b3013e91d012e0ce9b76d1193e8b7898998a3e52b5afe9c3f584bce9d4326aaa1456469888c28681210ecf35cd811377934b74f788ea8e82221534d8028acea70856469c71434cf3909bf6b44f7b6b26b5a1e3462284bd0b7bc84560c84c99644c0e53c120c945757e5583aae810966c7b1af83b9766732673568910252374ef7fc927275520aed9ebeb8d9ff7c8a3d842abc8a128683fa98b427d83db8b5088664618fea305b7a7279caede5e915fa33cc961e7ef5fd2a6ef862a190e3528436c37787c408170b23c348fb67cd7912425dfe0890587b2cfa551001cb32bff5c7303a29577a9b03755ff2b854e5ca104c0a5fabc03f7cfedac7b106c04ba7073553f424aefba980562796cbb23245d05123118fe993f142df210b68b5f94dfc77b7182bfe154a9ea505863e00cc35151d847764b22bb6a0680891ea7c7e66f6bc139623a33b367c4f6b5877427784cccd49d67137398a6ccd9e228c3a6c44bd14cd80194472f366de5c7a168499b0962fac1cfeeec0534ac4bfd0f0d90a90475817cc458df179b136c2e47a21c21cc45f664d6d884cb8a86655fbbeffc6753224c4808ea49c9cb6a6c8e064465f56060c40ea823250abc925a7ab701ca78a083342399e6c9d36f073c33228135e5c04212f7c5c71f7025c0f5364c0ef78be3502da0862c824b59419dd5397bdcebb7850a517ec93d1b9734c03619298b235a9e78f55076db07094531b18462581e6eaec0866a20acd3f405d1eccfc33e0d46cfc0ec0d233b00e1b1f739e92a35078414c6e65d4b3bd9e3bcbc00243feef1d151116e9ae3926b6f64566a343cffc7bd861f9a6af9cd8986b22da3bb10673a4e0ab7084c7f908c53d4b07556f4f4dfa316afa22fa138c4d41f45c894eb5b20b02efe582d1aec12651a939a05cf814a6b9f9155fa9e81082a88a7719c1e88fdc25b1701fba08ead7b6ce9e347d5768844234e410383a462455edd8bca2427441b8626164f5fe4aef1d0ee1a814af60de05dccbbca54ebf6fffec14b0d2aa2be21ddc037fdfdff285e4a4b18e51afbb43982d7d6ba5a46c11ed6d9a28dbd0b421f2e0d8b2d9085c46a55a0a48a76e8735587ff0688bf955f784d3c81db7fce6ead91f3a7221e22f39d57cb94650745ec254425aa051ae0eec937fa1dde1ae40f45e9ccaf3efe27b02c4f0c9f6a806d6502c7b171e0a7079e36c6d5d458f9f527ab83e821d87ec23b8c44b78f31c47582d6e3cc1c8407ef1d7ae10e0708a1c4e7b6f83ca3432c2aeeec404d8d28cdfd6a6203dc511b25282d0fbfa59bb93b390576cc2f9afdd04d9c3cd7c8e6bb5e15661360e620ff1eaa549447b567c53cdc28ffd1d5741fa233dd19f1dc20fdb4ca59e17840a5fc17068d28b71cf4549a84c2e4971b7c6e1161eef213c42ddb20402fa753feed6f7b2cc4fa4b87dfe692f116465a6dfa372caf22d230536b49fccca209cbe7138e5598c46bb7519b8d3e72ca2483e97bbc8b6024878c5a63a3647d43a259af4a63b3b95ab999c3998ab422f325ac12e8d458d4cf7d9f7b45c9e4edd34f455c01bb91fce3114717282dd53d6139cea0018b59e5b6230e5a13f9b052fde910599b1175794372acbc3386c823eee4a2f5b495c36dc52fcebf231b9695566856a511a2e09c0f79ae25cbb3bc69c4b5c0cef1d1f2affd11942a041a404e906b17c1f2b78e569b4b9bcf4407e2a412c09ad6b855c11c60ffe91c056a08c897bdf6e1a55d028d140a99501ac315338a099f7d4ac361c74b79b0cd469c8a18a1b7e4c025c4f8b10b9263d1d168039374fb1e285f07a0aa8b9834abf05e9d2f0a7e70075c6e6844f428b65b07e678fb2fb95d49f7e3beb758fa7d1b904004572cb2faeeafb90b78324d45bbfdaf1a8c21150369dc33a0d5e4fe1153e2d54fac5866f4062c0a9fd4b9b01a47990a803d468883b7ab6b50f59bbcb77525da189298ada565c3917c1f9da10772e20acd04bde5814853ea4b9164af068fb60c158a371524ca4014422fd1e90c67f15e792b52a06af85e63bf10fb293ca6c3cb3ff0f9e7956ee989d3b00fe834b23477a259eb343d9a602066f8d08c85c44a01ac5bf71a67a22b3001cb71300ffa9e356fcbe79b65c7bd38318390f59c11098f75412139562ee646680f28e2393e769cb559a984b1b21bda639a3b9c9df0e3882852d07b8ae4baf591cf0a520cc564d54c3e6ee3b2fc86f503f2126b646c2f0941772591a4a5c6cbdef3282d5b465a59a973613862ce6cca983e2a1a26dab5c933167840a7570470af3394abf72c19574b95a3cbfe4c1dc37426310e0c9091e1149f3e33e235a367e6807151a23f15fecbea8ea199a326d93748511e3545535810967d876bef344a72de30d3e1d901e2446c4cc220938f28c5579f053cc8047bacbeea0728b59b55fe0f4603d9a4c059e1000ae1ef2cbdb7f50a18c2b204f7bea4880160540c1c895657650666659653736b9d7e2cd67909ae0772169c20f2aacdb30088bc83b76eab4f4c2d842683735c07ada4295801b7952ecb5a3b180cfc7b379d0ee40dcb6283484ad8709b9e1caefd43ecb815f6b4b0cc97b2a5b656e479cc4fb6722253e26d92389483c0141846aaff6f89ecac14497ed73296e5f481ec5842cc36379ef10cd609bf8c2cec20c4970972633a03f39f9d8903c08bd2a20f49589f625fc267211b22010a1ad4a03a61ef77b6629a2f9671dfe3457fe9fe20dbbbf383144d33071146fc252850dc0987c04dca74c4d56f6937ffbe2cab94094bdcbb1fec747a6349b05f1ba8a6bef526f445a88174f97a2033e118661a7bf7be923397b35374ddf536a3bb58f078d58a9373f32c7295fdc9bb51bab694c64c52ff3a78b230adc85d0588dff8ee0fe41096ec894d04eaec903098a4c98350dc625f9f8d93b4f4accd114f0e87d345f834206dad4ded3b3b876350d163b5b92ba606baf2b0c9951ab5720bcfc9224d9881f9a17ccf668c9282d078e8ec31c65ad024d9545ba6265bde18b110f333dc30c47f89347f72413f663bedf89a584a2729c5804e255de3519985d5e6086419eebbebc6e7add00ee9fc9e86345d8b004117b22240ead05a7e8738b3cce1a6ed41218d4c165c0408848f7f184e5e856461c3cd8bb44d16516a39e72db945fb0f0f86632c0171bd19173113162ea7e48c9210d2156f1d599b1740bfb469050f32221e8e66013cf461ba8346b35760407704c1f9cd635266834f16981b82b07c6921bfd3aa782d1d401819e312d34e3e214bc6ec5b573b9b51db2300d81e62e40e500e2e16200edb00a3ded43e896cffc0846423d77b73694d0f8e9a1fd5733a2f3d03c80a360ad9ac84f6a36f96060e64019b6afc610f5068f844ec6bf039fa274450cf82b790fbefb758246989e227062e0b2e4e34f999554136da8eab912ea2472bb7304211b1598ca319d78d127cdfde7cda14247b2d5bc81d10a78ccf45d17a91cce610570948890d9de90c09b9c8e4fb213061941cf36efaf88da4f35f16ae203f602acf5636364dc871b546e9d3d9586bf6ff07eea8dd9bdf110f615c6f756fb80dd30aa0c5a3922f71c2f1c0d13b12fbd78e19b6705dffbdbf7f669f53cf5f855f99adf41e8ebd7ed6e3e14c555bb54d7e9da149ae0eed285b6a66dcfff9cf7f069b8e331d52e30b9c33366648a66976639eb220b81eb0d51cb575a58b6009453636ea5162deb8c65c31925b6f20810a9fe48088be8d3d2fb61856b4ef161b32ec5a471ea825b46e4e1c55dd02924004d51d16cdef755f4f680149480da6d6590e0da9ae081c3227c8253178e78b49afa945602b3b44a5ae143b2778f449b950b0ac058f824053d1ff28e47b37cff38f899462ac351dc1c065ab8a882f259fd8666ce8c3683f23331a229daa895c32baea7ae8b49af1bbdda1d71bcb85ba4d8839e29e618942b43a00f4db0cd919e6afe81e76f18fa257d620894311186b5da81064803d63240c99bfe908d4dd0de85b17f8633631078c3f5078126514bf78e7fa97f2520083531a838110146b6ae387692a964a59db02983fea82344af163826e6ffe03f53c7b056ff67a09099fcc79f51da093cb166ec406634c9807f6a00d4feea237db5bfb9581e72e31393f3c05c87ccc39f7c87b09cc27ffd31e7015d0f545aa9676c250ed3ad7f3ebe3cd009da5c2e521efed61d50f9cdfe3e635d691c14c3be1fc621dda4e81285912150f6b0c8dfa78065f12b270ea049ee40005e03e5c30fe5a1495d284704b8f1d78358777117ffc8eb470ad04866e58743bb67863c86c9ba6c8842346dbe66aeb6083c16862619aa3a55e85f006d500a56e81208072aafa049c0f8f1c1bf4ef392a9646da856e9b9860bbf1fd617202002e1e5f9d4915766802090e9c14c4c8f42335e88a7612fb1d6431060c47071dd924d9b0386e08e135d01a5f800361c65dc1a28ba01391f03d3a8cb934be84c2d3f0155e0f69ef507ed6282f24c9d228dcf4bf2e779db80f71f441c6b7640960dc88003718b6a238e327ce73e949790cbd10386ee022132ba5f86341d7f5bf053f1ded0c668bac8ba68c88ae66a8554bbc70680fac365453060036aa8f12714d22f3ebeacccab0f7ec4ed5c6fc9c706b27bc1386d17887b1c1ed14d7081242182a7b39a739b3509cc3aa9ca35c380b7d5fce5a5483d709612421904a7e3e1c4a85102176371d109c5b2d41463c72730acd2b29889c48ec316849cdcfc128e75ac95f17ff895a15ccea9265092d7875918b57a23645d54763d88612905844b8bf23e3a1b336aa094ed25d0190fb873e7414268801f01b31db56461e3983a70a5e31dfea1c6e513d6d96522fa4ee891b555912269bd307675ad6828c86513db37b11b384c317447804fc52818fe84294c478596d2bd7e790a528dd3c1449c5c89f942a76fedd3608a0437803045d71931259018a970126f07d3e42c4cf5461d86297e4ddf621f81278379095cfaa3048c29920a87576a48c326af9104dbed2b3f2b9fc1ee3776495a7e76317dcfc9f6a5b22a264b299d7b26f7c8d27f93a0048b39960abf6e39c20ba092660c97e8d10bbac623960c19e0051d20da341e1a858de5b53dfa6e6c0ab5e959ff8beb46c043411a8ce7e88db7c4cb239a0c37100ce9e4c0627fe9c3ab8bec160a4dc703ce07245382b02c21691e6fd4dbfc3b3b452e86a9690a852f81a567018d26b6bf024a57609b25c66aafa7ed0021b2ac4e95b016630e9eab84a5756e2c7b6ba4ca3fd95e0ff8704a78e67b30d09e0d529ea13d89d6b2ef713da04f17e99f7eb28e6a87816d49ad57e9d655d6530ae21a4090c51c57df69906b447ca38bb513f3e66ca06fc2867e2dcd81929a1f34696ca136001371e7088658521dfd7ca24c1226b2a9050349d8b4df622f9acb6bc3f115bf5b50de18d7a96fa7a93a1f3e82edc46064ff6bbcdc53f486d7e39a19b8c395617462fb6a2863b66ecb55b83c21862db71e62475aca5674e885bc6af9ebe76a6385bf080b7577545be164168c9071871aa3a8c8e6f066df64ef04b8fc63ad626b50403f2a95ef065d44b84f612f845d35f3e6d4e1c76d30102ff16bd4028f500ded06faf77ca76949706d27356eeea3119138c9eeb7c758555d624a741f106388dbba1725947b7c5f9b2efa4584098faf54de6a33f91e80ebfeb8f11bafc4e9f14c0a460610eeb0a6f7e761da9bf6b533784c9d68135c8207f7621a47549fdefb4b89ba49cce6d3a712fa85086e0c61922900705763fb36929291e33bcc4dd842e930ab0baf4ecef947d7ec4ba3bafd80a0860fa794e9d00b415b89a4151558c7392694927e03c392b90bdabbf51cb640a2c17582ed02780dcfa637f297e18b8c45c53e42ac5020c8d33560542e63bf2ad48f8503ece0b539da692eeb6869cd60f9f930ff69c4bd30488bd46913cd222c9f30b9ad7b5dbdcd459bca1736b0bc369587519a69bec4b591bdbcc0b568c4891fc80fb7e219122b87f9962aee0b11f3f0f30bc7ed3e93e16e1a2c856e9b00d144bc4c993fdfb990a355de15285ab2712b0a26bd4b752f995eb27af29d0c25d03e558607dc0e6f13deed0dbb6cbd2033134f406bdd359902c5f35cc61382b88007807a255b096f06c9c697a76fd0bb81892929b9aaf74d68a88026a71cdde3a28dd84a388b0b19f6206c7b94632224dcf2dfea88ab40de556fac750e137c661bf3dc4de2d4e177ea1b2ad02c22ab379b1987215bdc66ee3b9002420570b0c1ae42377356dafa34bafcc2672e4c77d2d0ea29e286c1e84daf413554970458364791996661202ec67d33e21da0d05c5a495f741fac9d80e116f34acbdd6957ff56a086277ab1ce7ec829b415eec66e7d6ad005fd94a76496b925608974836203ecc852416e6b61933c1ecb3b77bee781348c46e03e6d7cb2a73ac14f2e28dd1d6f2d26d89fec481e031c6df72fb481d885603d7bca45e8f1f78a2c3b6230d4faed0711ea64faf1eb8cc688e5226fa5d273b90c06dcf7b884f2a50c8d453fee0bbaa648fd8aff5101cc7eff0c161f75c69759c9d0585ce58aae89acc7c38b069afafd3e4d907b2497f5ee5992bfee35db528853a71095d80d059d2f49a815d23d06651eb77198cb08fdd0916468478400f3d9425a659fc0e2ca2fa7513a743c4b6049d75f1b5b70a06faa90d63f49f8eeec34c7eb4f583fd0f1bed7d6cdc69ec8214916c283a6417450b42b29da00a8fe18ee30027c10b0eaad7078088c95588cdbe5e3ca615a294e760fb71b615d7cda7e249a9d5d7951103f386e44b0bbab6628818d36408b907554c7ac0ba3a9c1f2f05ade3b2256e7de67b6064f6a6441303379bf5ef1025a4e33323fc8424fb9fef0e9a197d1216462a7bfa97e98251b204adcb7eedd31eeb9584a58301da08af2ae876462d0befeda163a7488818df6a7404e3691175d86c3bf49b69d7c05564b85772857796e9654b3a75d5c4d0c7ee29aee7d513b637c0a36f3fd274370625d7b7be032203de577b572751f4627544ca1c71d21e9143afe4c561750da374b84bb4e18a18b79f03c33ce004b73123cfb71b9446a366e82159c0ed6e2a428e51c9c7848089c8b6f070d3118eb1f876a7cb6a6a59b5dfa4c7967902e5f7d3625a08a7bbbd5d3dd02613a49453bae16818fa586218d8af79a0d69bfe56e8b0babf72127612d26434b226acc88a21c1a4d8e51765efc65565f661891dbe7ad1210452a034552a9c35740ab023eefce4c69f0c9408a592b602181edc0355ed383aa84d64c77b7bc90584367ac6432e069880b7afa38b955c44704c5c61cdbe806a97bc18c205341ea033900785c644ba7063411d0b9e8f1858b246cfbf4554e614c289ae7c9881adb3c05f57a5b21b4367d5498711d23758ab15f2dbabc7038fee554a373eb3f5c64f2d979b3328662293e8e5d4c69914f31e941de1c37a3f04089ec4833be1f80102f737cb43b7d9a18caf90f10435321b90fe89454134c58809cafb0460d88a125fbe61881e05982a6d788a3615643c71a9998976a7a459e12362c2c1422dde9da3f772102133f26ea795beb2677d3930ddbbffce60ddb9d99564fe80afe66520af34a71627f67e37933b02ecce7beeeb5abeb099f59b727c119f3f34b396ef6449b9c8969d6018671a586cee646c01ae1fd93b401d7564b4349cc36c36927d94c54fdd503baa2014205d893888849d6b7849ff2fecd4401c69a3584b3fa5e50b7f36767ff0bbaaba07665669826645557b8ee36f1e364e68100862327c41c1b80a1d2e5a1f6683753bf427f5767204d6f547742f7a22a0f4f3ae3741951756083d97312fe498c00afca9df3b1defc6c82c11ebdca0ab0d2544d12747e56e02ed02ae290f5d0dae602019911978032db0c3129b3109098d8caf6c7201ce942d2d3460e180855300a5f4190018ede2a3345f1b31353b50cdac5c79807a3d9e35e674de93df3f269379b8841f05c7d03b2a327b2b24623e4a169564f4e46645c16acf6833bb6824a22c1e0b0f6809e9b2969758a4fe508af83c315e1e68bd9913df47b5414af800d4539bf6346c758a140d2970cacd5087abac798e9c620bb17955537e43d85e56d8566c87dcb8f23e9c13338161b16597993825302954a6b4c630e45728455af44441dce6b1b30e8a592155eee22b95b04cc22d08e54391158f54d5212039a9c33e5a8380a0abf329f74f458c0f3773a77472c3cf4ee5dcd45c7200e3f9ebce0464f84c6a02f81f03f79e9d9c467ca275d079501f2c2c592d55a71ca260c578f8ba459820e7af17baee89209d081ac41084297320bba65637200b66712648c494bc94523f076a31d97f7798c9d7c0e409866b558594a40135e4c6a5fc6e3fe1faea8c024834e95ac80b2591f490c0293caa2aa78384ca700bd4e9c2a815b60742298a33dc4820f896abc31c45b7f8fe7beaaf020c8311b7804fc821812413743fee0b19a6b10eb5ce438a192015e871b6ce3097f010ce78e43d22025608dd1546e8e1cd1d7a99051bee28d717806d6f81471897b7d7fabc10ec98a89950793bcf4eae0c14934d9f2baf56bbe835513465e6ba7f361a683ee779ebe3f064253d12aa0d663803b378ea55615aff717577d5cee341b5ddc8671a5f23809a16288271554e1f065188054b1caf3929e7518d4886fe51c1dded886f641f8d04f8cddf414899aded303bd6da2ac3ddc51e9c0e7568e7a267043b128bddb054917045965f5bcb878d8d5e04a20d4c470baa41bd2a1acd718ceb0e55140fe0e86bb2f7e1dd4e3cdfffc2d8bb3c58194162516168967225409780989b9584c78da4807994b1d1f64c173fc0bd2026dfa732aa6f675c33aa597f227aee9aaefbce19df4749a31a02240646d8909d99afbac1c1928180478614e27093162d6020e4a2f99a0008d20a46ba401e44056c33a57882a2bf5eefbcda09d41947bfc07803afba1aa0ad2dc95c2519c781c0a18dee82a9902e3ce781e55b8a180387fb03b7412318505076402d8860defeafe6127fa30217c0455817d86007f7c85e35d93939ef5e9cf27151ee00892e4cd65e457595c5edd9b983dff2287e52885127803f773571259392061717a9bfabbe4cd26d12e237832306d251de4f4013a04e109ae53c88bd90ef75f5fd581d090dfd1b564dd1037f810246edc5d18e16081e120406f0a612525e3acacc6edbdf30494d3dda548ee95db7d8f455e4fa66ff7fda989bbf053d2b2938d5243010b10b1b4ab078807b1062be0a3263b24f9bff2150aeb12c4d24305a30abe4e006bbf18a042b80266132a902154a9873b88d29727ee85fba2b92f0c321894d5ec50723a72692f5e8d6307653e6f0b578e61b63316a9b5a53f38c66e980409596e05085d98184749e5dbf79f5088031a11d6f347d02312c87421186f405dfcda68b191e3010b60575ebf38055088215330e5625d22a3fda5d6fc344e846de0ea4aa2f2667875e4aa7f2fd1b322e4350ed238e030e14b8c1c8e6b7e6584c3a7a62ebc3c065cdf6f005a687c3754451f196055768a24392797313be84ebb20c1644617d49bdaf2924aefbe5d5f020e4895033a8f2e8e3fbbd4deee0fac82d7397d7f558a50143ccd0e2fa9065cf2d0f6fd95671591db227c3628e17a53abe2d29073f3bb0695a6b6e162226ae5f84a40124d468fcd2a81a6c7d047368ebf807148a72b01dd20d603855a134a4992f8e7cdca385fd0b53cfd32697abda2ad6a98810013b2d4cb28ca9757cc20b8396ab36deb8061f30443b264377a11ddd06a03355e112de712596e739330b10145e38ac65ca350affd37cbed3af5d00d6125a98db85ff45a650be0a3376694032cc5f9e4ffe601b63149753df3d4d4cb3aa0b93b9f907c807d26c1e37dbab9ec4109284f2767da43ea9aea4cc929f04fd2766285cfdf1fd1b432a329b87cc47c86894cddfeb0d74be92bca8dbda8c15d846d69fa1effe555217fcf0bc7c425f1dbf929ec61cb7f9d838121066c0104c92d95185f2e3f61fe693ce3a0c5b35e0c372b4079598cb570c0489a237898ce02642c0988a8947a7669730269630e8243576eb071bc2aa720857ae446ab1ced94948dea431cbd050e14686a2f9bc20fad2e134cc80c03b10d10f91da8112dc3dca09f273f3656dadbee80cdd87184f0f294003ee5861d1d45c5f7802243802957410ec416b341bf153f304dc6996f642a5f88ae586d5922425f275ef924720441648a7c91b7ed8a492caa14ff6877cad2a070ef2cf0cdf000d4d402cb6b33442bc8d2161c4cb7fadc1154aa7beccf8c13771c1d1b700d816c84fc9e8de26e06088b4d02c7b141d24760d76b40882533921ec92df7cc590c56cececa596ebbd5c42d24a991213298fae985246339204e52f0a03178fd724e00b1c1cf9e8b09a8ee8f4538b57b5c5fdf186ba420780c0aba8c9f0e8353f8655c252ae84d7c1339850cf0732a40d0710b667d557f155e8973cfd9c040823500527cf85daa0c5b18df06c29a2571e3d2ee80e5b0ec4190a2586e146a1e8497f8f44f9f5adb2b70097a299812f1019a814b9dfab1a6b8c785db3955c5e60402e99cc0b66b03b41d042a4d1703ecde344e48dc19268d7e723c7070cb08ef1b998998cbdb009357fa51f435b04f96431d0c8dffea46f8e115f5ad9456033be9a7c46fb5fdb3021068f55545c923437bab0227c723b56b9c7802455c3918b47f1c0b7588ebbfdf09e5540baed6a408de0add829799036735a4695c5d2ac7962bd416e427c4c5b2f3786d07a777978e108a5c504658a22ed72f8c2ac8d851a3326efee0d153e45ea7c18ebc11ab274194c6e8ad1265c6258d0577d0795cf3cf08dc4186d2c0dc6683058f5a5576dc263ab6363a1598eb3ffee032ca7859b0c72b8c98ee512030597004e753e761930d89c43f166199790956dee1b9a8a1b9fb129e59a264b3fe7e4e17afca2a87dc1985beb04fca7e2de1369776a458900954cf1440d66ddbb3b0d08cd3797b2f1b21344a4a76920ab45602b07d3132ed5e1d1b53bc84c8a1388bdb677432edd0806f7a1de83c351c4b9f73c840507ec063ec176f32bf5d9ba32440a50f38fe6d4da061034d30dee05237857c5611cc23cdd2a0ee0299885e33c2150fe190b4dae53247c016accf8f16e39326a35e014ec3979b7dd8e2865bd6ed65be2f64da37282a19ad081ea1223885b551a32b9345d4a1094ba16a018d23ea4e9d1d8d7de8c40476c122c385c19136604506324c2aa852995d7ed82af8ca1aafa4c90ef3bae22b973e2800cf9125e417f49e2d45dc842488631d360bae200f4c529f70489cc55c7d02bc9f7c7d6f99bda3029ca08209ac2572a7a60df9209e34c4dc517143d30e88c685c0a74d9dcfec845af5c51df72515c9b7af862b9bf281e6ffad74330ed2856f0adcbe9e2c3d6905ad83dcf0594997a275640caa7127f46aee6145b399b40e15672176cb6aae856e5aa72993a800fd796d08a7002f5c49873188ece817728dd0fe4febd82a471a0c8d1450cbc8920ff64033ace7214ac8cd526273afff17fd42103f560df39bea241344448b3c49c32990836957f55a95f6bb0ab571e298b8c7436e8f15ef684404b5dc028b119b2e873af2d0fad7a7b124d0102f4950f903f0932d291469ce18c1d00f76973f966a3e18517876b5fc574deabbc75f81fac511e06ae4df58a4e145f3ed7d5865dde3b2377f37b99e0c709014ca1736719a7e96d126a6c843e46e62030a803a741b2174a6ee6aab04b83131c8373778e8875765607374c08a175d6a4a7996e9809181cf05b9c3afab2be6bb1f8e3c14f1150584089383a7217a8b5c35708ac745b5453ae67780d5f57d132b14ecaf3fb3027217265ab1d98117abe1f06fdeb8050c40ea32df1350e13ba2066612f3695d05a135ee7647f65f5aed463a157fc975fcd765c1f9f8af29a5681b7b9e9d5f7332bc8916c14902fe85f7f36f77ca36afdfb35b337aef1aa5ccf563ec11046757d0bbde9c54d467b9b1386f84480102e0c1319be9b91836585b78c690b8c114afd8a4c654b5add2aeb793e3778beb956bf7b41e8e21d7519e4c368451e775c3ca4905347c1083095b32fdeb0497f2c6d90dc5de4a052757951619674fb4acb9c45a881a288234972300f9d0cfedf9e3402f34089350f120ea1ea5cf78016ed43fd9a3d8b731c006847ef3a90ebb6c9844a3e2cbf2ed922c03d80c8d6aaa446a3dc4ee9437cee67e927ec9836c09341a69f7c7c2efcf71011337b9b38b473e26d862e5bb31e6726b9114d54dcd8a57875cb42c5073c3877c67cacfb6e0642ebe065b0825b19b09d2a9d8112b20264e46a30116de61c20442adb080e278802d23143b9e706f99786f5a401f8c532a49c9626dc4a7fa248eaefc129654daca86e05185a1d548fc20135d476893e7240544c20855fcc1ee98c68952197cc48fb968e4bd348555905e50f92c83d343c478f90cd835052646feefd7a41385251d7f68049d374e48a5601ee4f46572f2e7244f4b35b134c27ca438344b350e9702ce06b4ed2efb08b25a1474bf319ca046fa608715b8b99152d1741b39e7b3de669b4d88b82c3acaf0c0887338bbf37a0c08756004601476719c42f361fe295428e61bf6ea13d79a6436715cb8453b559389582eb5012647c5839b7c7ae98bba9ea21692ea405d474e099c4d443d5f3a258b93250c0456e1be581764904ad2264021dca4a47927712185b3b86538331bce3d6d4620d5dd204130c1a09ca22e2f6209f32877b743cf89880b257eb823182cb69376220b1eaff824054c8fc8ee8554cf1bf6629741a434ee3de7350f5ec171a20c906b34c3b6e6d0ce926388d8362028a2d177b180607dbee97a7dcf8d929321a0caca4b01959714e5f1c8ca3eb38c622b93f9119ebb84f9ba9905a70238503e3fc551e1db50e8f88c5d67f9c9848fc64f74e2d48f9a01fbedaed52ea4ade74822719b9894aa9cfc20c3407bf3280ff98bdafa2004179e19ac116b39ffb8aba8d060e285336e82a29a323cb84746bd02c5fb57f3cc87d5a23341019352871d47c418f007621514b264c2107e09dbc389153d5c391cac0be75bf96cfb9d3bc9c24e54a0022510a3193af88106f0d1451ac8853dbf1a1ef1a2e4032ece560710be35a4ae734b0cbf3740b9a763bfae77bba13e98db0b0d145dba35c597a9008710bbc8ec868f26c90aaab1a2d3282a694a0287efb8b7ad82b65ce3af2d3117c2041c7e07d59a2f2ef8a80100aa7fdf43c9509e96d8e747a7b12005a629182f2505eb75666579875f0262f3ca69308f6e7c53073583ca543e86aa9a87a7118820a8c6bb88852730445495344399d55a9eddebdd4bc682d85e423375fc881233f5343835ac55bcdefb1a238d5cb756be58e8e2b0332b53e99773e079b1e81c38ed977d6a48544b4f8d57ed41f573ca0837596fa0d7b55e93dea3716b60fdfee18acffb3f1d750a271a5fc712cf2ccdc8b6da15f7281edb98837b4c1cfe3edd3f20581ad7b5e6ba232fafa099bf2ae54695e1828ccc6c0e60dc82af15c1bcfa884ff75a20fc347c34062863c1a3f5370c081ba2ef00c499508622b18a0da4d53dfc219a8de97ec5711ce031500e246201501624943503d44908374de66dad9e5cf1421a1e126f2e8a4a5eca92840e8c264041819f4a2ed01c3029727e7ad2cd57d48ff94fc5bed162ceeb506f730dc7804938b954041bad5c519e602cbb66eb4a5dac4eff71cb4135c6a0bd8c62e4a2a28a5c582a7b7d12c6babd944cde4e96e8f6963a8312ef38b4c5c12173f48fd9eb354e2faaf505a999dac3ee3d2e575a61ce2686b29a77047a1187f9f3f0e4ee7e0eb99e895171379787a04bb57e621811b1d8967d7d4919b0b860b0ea95c6fdd31ca1ff27501ff080537c478de2fb224476655bae76de4a38ab40cf23fe952c4d0be16720700e20d7507f8988385722e4f4d7effcb7c33b57eb6f0d74fc91d594e0c75f0479768cbd011d1f86117e276d7c9cab8dbbc79600718aeaebd072d59a0fa4971300b40a99ab24d7d779924014336ab073ca4121285521e7a08e6799744a0ab009ff97bf3bdf02c4defb08d73b49e36e6c2ce5a60daf85097a79a2c20bae2c64cd6b77ab815b8226b64975bbcb74a8900f879da968ca4757b25092b8f41652c9fd83c17f220d6fa0c2044c475e125729863f560115ce86c6ccbca65f18b52737b67e7c1c6e9f868ba393a1f0d10d097ff048052c864bda7f2ab17fd0bb7c21e921c5d82c144cccf16d1f95fc3103bbea034bc694cc26d992cc7b498f3b55cf27d69a2d1b5a22ace9cb183b90d021e30a45b229d2ed910a810db5ee09084ca28637f3e611d5dbe5ca17810974f4a8afb2d36c75726f67019689976053b8c7dee7bf0727ea81fb6514d1f2bf36b8100609e387f9a95fd059813c8b794ff1c2b848e547898362f6748ae16e7487938408d59bea41f5a6d60d0c8b2a337c952b3440e7e3ed4550263daec55c7900f2dd478d663a5e087c23a49e93653cf66b53ccf84234fa7364728279502a9843a4a15a5eb6df69a8eb96244211e9417d80ea2ab742be7e78e93a224d7893e00d087bf386b9ff9a1c4762b9ddf4b1bb67da417d9fb63d2bc226dbf031a548d1ec87acb87f1755b8f19e14d389651de1f2105d0310c18aad374f6e99c3f92fd589b2f661ab9afdddea95242b73b7a1cab65b8e2bc2594d38dc15aca60895ffb27c188333c11059385df6a857c9d59c4cda9c325c833189215a613a966781a3aa3b8de0636e5d5f9609b348f3ef94234f12cb386469f26f4e57ce101ce521f477076caf04d80660ef6196df093e3e28ba8422a3342efb016e2bbed567d1837153c69fe8099aa69f735f00399e7d969ae779260c1cd47ad4f3cb5a3c70148395950223020ec31a44b4e05f92c0cfaef8fb049f0cd31e0b503d95b0a84d0c05f608c04efad79371699a3211ea567ed5b92d891be0a492672fad35248ad0cfcf9e7f5cba35f7949ce0ccb2b5b19b15240e767fa4793a83b89466c1b7598fe69b49a31a7e3fcc68f1f9d9f7d2ac12f4d89be4619b7c23ba5183ecad75ab6a35a887c02d4df230eb065ad09deb72f5f59032dd0ebcfc86f4bf999d6a0e3b7e2222c8c595acab160ca4a582cc610451f597ddac3f4f1e6ec7b4abe14a3efd9b337934c20a00d4a9ea19cd09e41e03fae299625a308cca4a075db0c2237c95707852525511a50f2ab0bea8ee5e8f56d55ee1c7ae59b9fdffff839b044e87418513a91e1cf14f4f2943301cd72b5310ba525055137e2f57d64834705f6d3a01041892f0452cd99b6c29a54c32c914fa055f06f2052b44808599e3b9bcaf761ee7c4f6af10812a63a1026c72a6b040a9eb59d7928615a17c19a3868c21a1371be2aab0b39ff674a4ac8e1df6c26f1943734296fa18b0235e6a2cbf9274c27e1d6c09b4133b1fcee7b82a8b592a2cbc33720779c8ea6dc98ae2bb856defdbac44f1b604c2715de76211e06f9023fb2dd7aa97996b99edace5a1b63359e5f76cafd3c4c666315aad9f20decec41d1a7c39af0321b672ffc5faeb9ff5b736ba9b6c47bcd5834ad083d8cd295d0c04dfaf607f96e188dd76e88da57679aa6665bb3c8505ea767bcb96254030d73d5b9bb0f3eb4cf6810b9ffbc538841bbf988ecbbaa6b289e4e2fe67775618ebb9b29cefb8b7cf55d70c4befd67a79d5452327e795037375ad0db6efbaca715e9def5372e4996db7c2b9186ee0bc5bb694527e7342f3a7477ff64f8fdba763580084fd2aacb5d62824a37dfca58eba86c040fed0e531b1fdf08b41c6c2b7922f18b5fe06fdd6f3b75acf793c7818f9e09d00da539f68830d41ce045b0b8bf16c74528a04247e114283d92f4e3e6216b65daefa12e57ef6a1d0164bbe92070a3cef36379913fb320196c794ed2d0afcf4734c70fdcb2b9a75e3be7a45f3b9dfee50b4b75b3f9f6539ae8ea3739b5129f5764c80773ebcd3fbbc8ae328047f7a78602ffe80bda21c1d8877fad89e8711d1f62d1908b61cf13fea7ad7b66d8f6444b47948dd531b5776341744dcbb2c8713ce0bb23d52eb5b8fb479dbb790b61612c7bc273ec5480bd538e79c33d666c91a2d583c2119335d86b9cd39e79c334d0266380f9667ca10774e6b5d4fdacc39a7cfd49426302a0aedb0b7d300fadb6f5e08a6ec70085a4fbd1d266ac9e40f227c4f1073bb1e1ae999f49c700f01cb79ad6f073011f752e6975d335c469ec977f9fe547e2f3e0dae3bd7da6a27e794d2a9fc39faf9217f681bfde8d28eadd5da2efd6dc776e10f10fb03047a10ebd115f588d591ab235847d01cc93a426389111f564c49d5e24c9a171a6848826208bdea42e5a443ccb40f9f49c38684216f867aa394524a6badb5d6a4a82c3541e684b1bbbb8df4135a72f0d3e8cbcdfced0d0581506308d68010be7b351a0e8d502376ac015fb01fd7866ab55aad56ab6d27b076091257eb0c97bbcbae7731195bc4845678d1712434507c9b83652a6efc2965c8b8ce415f0147250bd2a7fb0cba744b41025e0424003d80d3fbef994920c9f6db207f42bed770fde3d2951f217cf26af461a1f9fcbdae2c16a50913b8f1db55427c5914bf880e0e8e1e61776cd803c7bdbc1ce745386445f3650bb1fb6dffe188156d4f5f429709b3391b51a8f5430d83fbf82370def6b53fcea7b2af855b343d1cb12b5f8693ae566b63b1d92cc8af9ed64889a1c6c322408eb39f39e79cb359679d75d6f9ddcddd1d438c71464a5b3a329ce594d15d7af4819bfdf0cc9e48638cd1ab387aaebf7476e7e7e7e762c70859b2696666f6c8cccccccc396698b8c6dff33d8bdfb29937eb793127fc2cc6686376281661841fb3306b61311babd1b35845d3fd827e68262fbcf06f5eebfbb9c973061939b5b2fde050db067f801e38b35b91533af48a703ebd5a679d75d6596bad15f28c1de79c73de1ae3cbee6717f572d0e780d1ede839124248f52055850b1036479849238409cd0c56a4a8483969b9d265882f5814490205cb94992435aca32b7ce09205481243aa0c5bb834160e82a8d292850a64595ef8b8001538557218c3240a2588dac8ed6fa3e68d19ee9bfccdfc9165939927cf39a7f7e188b564935b367fe36fd9fc6dcef9fddcf44c90d4b5c88a475c43c1f83ad8ac7dfaab8d4d4599757f5aa8fbee6052b7bb976ab8fd937a52ce5c5acf1aaa678d65dd2a0add28666e94333df39a54acab77749bd8a0209672e93b5b7850d2e08ab5c0cd94c5a0092aab8118299bc10f6070f8b203d3cb8bcde0b2d4939b5794855d967a3a83e549cc939638c293d413530c23f5842447eaa947152ceef7415f88342152831696e3aa0bd5bdc2708fedcc0e6f54410144911d0b667e9e18cc76b556c995ab4c024447d98c382104101f3280795a82e5062c3cb80d3b74902c56baca09385c2923c5539c1138d57085862c4f24539caaa738428698e24ab040b109a4f80c599e3ef14c27db9e93b2edc6a2d06c5dac68d5f27eec479b6853146acd78556f4493d5c2f234412f7e701ba8296798e891250a2a1bba993029c226892049495b7c8845212325281224e981f5d4860c5127ddfed9961f6eff4fd0962955aa8c68a98ac1eaef07c9f81e105e1c7110a76b77e5b284d2d3141c1f9688fa852b837a71d433fbe971042bca60d6f6d4aa2357b72e0100cdf257a6b1d64ae184f02f2062b9d6ca313284be86bbb9fbb9bb999b99b9bb3b463b1cbfdb4ba7bb4977e953c66f211623f43e8875e15bf9a862baa2610591517903864c14394e5891e1062e4be2280122c5a98a9903143da2b49ab87ad130e3a636654142881822a6a6dcd0240b28512c992c0b9248258e3624ae271dc689067125890c8106cc51ce902f4310f185ea0a297d35993288c1043e66e8528b93c30c0245822c53362b8e893e11e609324f18cb1a51c2d485e908cacb91273f22cac94b2d4895488426e543dcbc8050b144c65c4ae79c73ce561005d0aa28e28528b2ec7044ae21420315111da0c41a4949a490a2a623aa5050e584458a89d4e449534a290d3e030d898a16644a8462522b9539e79c93d2297168387165c4093694524a69a5d221f1d49a62a4140595244b91a4297620a26890a019411457125915861c6d9c96dedcb0440921b20a285a3c8165ce39e784d2348068aa94b65a6da5d5a2e2c30f592a38c3c41497315a4c71d9c2c31497a7d60d535c6c70ad99e202c3149721534e47a6828833154416dc67bfd86dc8d5dbadcd029d0d6e37f4e9870cd47ddd745cc86e7b4cd3c1edbf1b8410ba165030c6080415571b28384c01a5c80aac065a847952852b8dbde072d49332174cb1dde5a82744443d09f3238ecf7ea29a74f1a8275baebc1cf5c4cafd3e480962c127aeffc1a5eae9d861af648a373eb76acbfb6cdda0d2b6419a127c6a181162f1400ffa25073058f84b91e93a5ce20340a8f47463938e1cb9373116be8d1b3662b1582c469731c69c8d16354965b45c2129a3a596a44c131c5ceea285c8d5b9dc454b152814d0aca0aa8458410941b34262e772172827f775b90b54922a4f7c84a9a2c38f30557c8429d3a54a0c975eee5265a98720514e42a2bae0800390a82bd7e52e381c59039bb52ab0a0412c35353d921e0b0763621646bb9f7d19aa9e2c5539b1aa727a53e514a66b505a7a78ba50cea6cb713613b33375139579ee33201606310dd29a091e001689d34951432b060e8cc19ab2248c1221c6cc2f4c514c4344715eda8819eaea4c6aa2d65ce1818a04523071315f88d810c55fde68a1728a4165c813202af8018e0f447466b9f40b9c23948952a32548e044518394171da620a2f4cb16476886c0d05cf692c6eaa2b9435d7fd03273ce39e79c4e7b80d1566c52af5c2bf6f90e593d4a3de94e458c4f29c5f173631fc548e99c73528e94ce1f068a94d249e994d5a9e8b4744bb58ed62dc120ad765da7d42975b44ea95bd2622449ac862d9ea07c6f18b2699721ad53ea96603cb50a65d36f3adeefee9fb77b7bc323eed3dddddd7dc6ba235e6e478c96fd045cfcdb358c4f7ed7d3336f190834fbd9eb425c8f471d33eaf7733206f26fd70c9da1116a348cd6c718638cde36d451e6b7655cb74fbae92ba4663fb2d65aa594ae19ee10c2af51b9a9d678a97506fbc34b9395577622af27dcdd5d87364e4e0061cdaede2a46756384560c50f3aa2b7ab12bb6caf90ee5fb4b99cb7974e7d37d6ad70cf90ebde15b196ebbbaee5ddf7aa4adb575effa20dc23b5b856e7ca79242ec7f55ce7ea5cff60a450ddafe74188557e943a1e658c0cb0e28dac9b1ac9964ae428b1a2a4a6844a8995fc4abb3144892b519c48012d06294a5430e79c735ef130939c929e92ac24d5a080faf9a34a4722a67d784c35d33e2c44029233edc3f2eb9c73ce99040514e701b831c6370a6aef6a63efee714e367eff099dd3a462c8080261f6f33db01a9d12aa26a782e3b883d5dad6762cd65dc76d8bbfd5a7d5f3ae566b9bd65a69adb5722d0e7675db36efab0e87b915dd23c74c0ebe85bbbb7b77c376d95959a1f4af73869c92a7e7150ec71ce4ae317863ef906074e1dbdba9105fbe0362d08e0df946d7014c246740300c14eb19f4c0657b7d8a8531462c574eeef796e270638436166b8c4b6ef44114631c7719ae9430c8b94c958237f7fb20264cf5e3f63b8fa5ce8536c09110db3c3ccced862cf48196dd76717ba39becf6e8139b0a17986a8b26f793d1bad1e37161b7c401da978d2f22ecc7572e2469ea70c80fb60117b0d0fce85c8c31a8b8329cc38e2e19c61ac208237e855dad33a751e86bc7953d6e6adc4de0ce1c6b1be81974d3dccdcdfde190eeeece3a4d3c7e377b8e8193f535414162d0dc7e105ac021633efda036000643ecc768a24fdcb1417f3e1375d3edfed8b05b78bafdb03b7647236e07c5620d93a17f032d9cb9fd3898a8d9d890b215ac56d8a9c27e6cb5820ef726ac0d3e23bbd1b37e1b2f1fecc7544a38eef904f0b2c21ca461c3411607683448f2bda8ee8b4af6d2d233d8afdaf7e2e865e565e5426a7525cf7d71c440f0392af67bbd38baf0377859796969212bfb5efe6a72e1b712160334be98f42cc62ffdcd735f540cc4517951bdac08c04a8dfb7c28657df651eb732d935f6baddfb2f8fd4391d2a7ecef2c02c39a141f2e9a2caeeb99ce0824968cebdf57d88fb17adc8ac8120ac96687ec42c11e5d6b63b4f25b88f943198e180a5cbbd173427b22e9c1dabaa053412d2cc6d3b1c67875040e15b4f25c8ebaf2340e6836fb8fc56a64117c5868a8022db47d3f0b09a8ffc1d26c9ed7589b0f0b514f077a5f08b73fb8edce9c02174558aedbd682101620a800d10884124238216496eed25d0dc73d1f6701137683cbdf8e9f3372c03877c784f8dbd3886f74a934babda33baef37ab85aebc32b3b0b98b02e2eeb30d0f6b2767d56ebebef8851ff01217ce0e3e3c2858e4e65a0cddb21a12fc3e7aaa71ff7c8c1709289d71093b41178a507977a26e97f70697ad09b1d74d180de7ace713d77dd851647779dfb8e46d17cbfee1571deec3e2fa2efef9ebfbcd3834af0bbf62338f80d2fd792b2b8eacb54d59721aebe2ce1ee2e65961494d25abf2469511d5d1abc4a3797c22b57d187afe4f8c5a292d0e0e8b134aeb8893eb1052461b9f778420b29aebc1c05246b89e45e32e77d3bfce5c487c300b7feb6b5a4947293f348327bf0c9a57caff3484a2aabb761aca8836271a5d5b31e2ff53356f47162201a16d70c70b03ae0c56a18f287fa6d6d9f1cf8098003a22f03f778696c97c28dd4b2a86d61819467311b0cc363239138c48d5d8adcd8e5c88d516ca442d0a8b9d18b52ed8536c623805a14192e2a889bc1e55ad41223e8c8fdcbd95e517ff7f3c5e26d11aa37f4021506e2fb35f5865e90c21ef4cf18bb63d5c1c277a1d02718dd7e4eba9bcbf22594f5107127b8d961d084e769f0d58081e6639083bd5d6735e89969c022c0ae8c8ddf301f767b165804bedbb6b55c2eeff57cebe7c87cbc9e0795b9fef5f25e4f652efa55f685e028852ee7b9f53932242322d9c77dabb5c1efe9d9e67520c4be6e775035a489db1f3f480b371bad9f8b4b65b20950a75487a1a4b5d22f540b2e0954122d49a48ccc1d6890bafa418029326e728841216c84bc2161c9c6b69873ce39e79c574de01003c17f9184e5ffb97536794a18e37c2e9a3f8bb25e791665e1b7b7a982a13a27c9f2dbd8d1b3c83e14a1572b8c0fe1501c1aa1860fd570414d96951533337343cfe2b86787bf9b6ed7ee4719d9de183d038107eb5fa385c9a294b3eb321d7eeb8ce192c3b1f6a39452cade82f025e0d17d2121bac416f9c3a3db976b42ca5c78f9a32b05d8e3f2733376e6f38feda98c5689e8b3ec13c18d3e22aaff75c0affc9d1220932bbd9de9d9a0cff78625aadffc9d125a777a395e577a4eea6774f987e2078fe0d1ad3299a5c1c287d7e7af65b7c2319c1fe3db883104f3a38c4fa917bdf93b366ad3b3d187af388bddf8ebc8a182fcf92acc67970a3b2a4cf9d3332262570e1bd5e3e843bb217fc706471f1e222062d78d9df66c70f421e2318d603b931552352bb44466e6ff19e7fc8d9c77e5dc90eff278b85e7e8caef37874419d2ca8fb1bdd73334e36e3fe06f7ad6fc97edbb61bf2b7cde351abc7a3be7c59a7cce30189e6b30b02f269df903f3d1eb265d4ed598274da40e9c0b1554a1c4b75d8b2580b62d0591325c816517a746a6cebf21494157453a8d1d9c1d6cb5350a0d0c9b2f4f21414ac1950aed6f4cc7e82805c4d3d411343d75a6160ac60ca59636159e464592b054c8c7551042ccc1a2d4440d512ac91d28212b5664914cb5d8e5a6344832c6b7ab8c4589dcb515959734a8f3cfc385323c2cc574fb793dcedc8b429af0ae9a4745ed083e52e4f05a1c6d584b500892a2aac8b1d5c686cbd3c15c413d8e5a9208e3c054183b22e2dc05461b5a58c0c5b4ae0d2a36ff972e3e5a92d52b5cd60f5ace3150cb67f2021452cace8d32e1ad1082378d6df7239201ad172752044b65c1d08b1b2f5d18c191af14ccfceb49e9bf1ca8b570cd4df2e0aa5e5b486f1f9d16d91b07d6b3acd973cbeb9d16947b7fee6f992d3a80e876296b94a92669ca20fd71f73be9d94524a6952ed2c2cc6f35e0016a1000c540006fae0830f825804e9ca2119486836fb167a7783a6e7632d14b3f7f314e4efc43e9e986d21db3ef15ba8d280ddfd7c0e61e2cce40976734eca63982cc52c21a08c080165e4be683613e3328d28c02b5170783dc8d19fb2a238bf561c326e07e09d1304d953f6ef57858802e67e31384136f6df33fba973ce0bc8d839aba66877ce39e7d4c2b660e0012285c95e7084ed2e574da159c21a6199bc58552f6cbca4a962ca7ed9b2223741be994b3f3e5f98429469acab84d890ea4addea2a214e28738eba4c801cd7793f3cbad3a11503c9a01812da950204738b6011e075357c44d6a5b4ce39e79c4e0c6929a7fc1e2865dcc86396c10e961d0b1d1a2a938d21a64487c8ac4850138c47d6ff63ab18314288611523023d8b58439e8c9e6d4cd81c2cb6f0f163871b2e4b909861054172b8018b8fdec20588ba0588fae285173d64408460868c1113907142c40d4090a8a9429206be64100d39fc37f7381f4777bd357d3ad36fc93a08329f931eb76e494a09eb59c3f84090515a9f7112b1582c16ab7a21cde5aa177e54f5b8aa55f960d2755dd701791b62dc5d4612223f5fc99900ff84663136eef8b0f0868d9865e13b642b65b1765524ebdf0f5d087a1f8c7a1fcff5298faeafc9baf2390cd86e191a0b659667f16b74e17a951fd1400865b44c8781e05bf065e0f6cbfa142902ec57a5066ebff41d773b74420bd92c9e33b015c09f2b5b596ab838e58e09f3ebf6524a4d2e4b0531720770598a86e6d686e1a4f5f13b292537f72f4b295d5dbf5c747553561fd63ac309ed895a4e70c4e69d1dec97bf41d95f42dffe0e58e033ba29cc6fef6b570973ca6bbd4b8dee3eddddfb2746c687a851f1544b23151b7382bf320612a144ac4d612622754bb7d3f2862ae78afd20ad9fdbabfa15704c4d78dda218dddd5d96606bf4185d762f6a163ebb47f7e8627a48b19afdd45a6bd0ac86983131acb038eef9daea7eeef2d987f49752ca67997b5f851fe7ec9fa1d6e1373e59a1bab108f6894bdcf81d8da851dc086956dd64fb89b07c590ace98fb554fc31072c798730de3ff748410c661428117a2409151020a272ba2a5fbd96b63842626e0ca3d873021fafc638d1eac670def0773d9f7732f6693e85a2b0c30d06a11fbe23298a62832d862ff329826301a48590e2e83698a224353112456e73298a61e46802192c5098834b191b1afcb60888cb90006eb97c110b15272e397c1283db9df5f38243ad1b24d7159589127ad031634291dba94fded524a29a594f2a594524a297fa26bd633f9195c71b983f56f82eba636d23ffae8cd1bf8d0836e98f48c99999370dd47908f2e43776147cfd8a1d1067ac66fd4502605bdb5b0180fcc360cb4c8a473e3c768116c74786b61311e98954b50466063b556a52b906451e994be0616e389619e6eebc68f45aa30586820e204891aee002ed7cc34dd1837468e1c3982706bcfa8f0732e759dcd75a9e952f38a6debbacb1ddd22ef4cfd68a66711c677170dd96ea3acf172ad56cbebfb530730d10f24fbaf47ca79d753d74e03ecbffe86adfff26ee47858d54563e3ba0eba52e89efb16099d579f6b79138badde47875acefadb959e1137be08dc686bcf52438ab58fdcbd4fc6c6fab3578b3a96bfe3c3c258bb9fbfa5d2497d16aa44fcddbb0ffca0331cf7448ed0a5e7647277ec0d5e880e7bdef54f16fef7d2be0b226cf4e84a1c3173b403ccf213622bb44015394696ef903948fa1352deaaa3109e93be9c53720c1b376a113a5d25f6abfe04e72ea56c29a58cf923c16dcf3d9fdd64f24a495f42195f06eb50c35a2ba572567ba7f7b140ffdbc0ad5e91fca8bc9b8e94d5517f47bdec41f582e07c7adc09cff47ada277e096c84d022099dfca8042fb73425543325002001031500001810080502816040241a14ce98b90314000e777a3c7e5638954783498ee22808620c318618420820c018628c51aa88cc006b80e038a8435fcec35f3a73a158faa975c15db94548d50850aea45bb00800778a22f2b87b3b86ca2f1b749d083410f1ea56fbd4b2f6b2258d4c308d036909030ac56c68034d909b19142ae0b20b0a4cbe80c8b1bdda8ac12f83ae6b23bd6e1e745ef175cdd7dfb043cc9756b31c1ff088f18f5b428fdebd3586e0d8017ed083e5c6069d79334beb8bd5200dbf93ca34c64b9856831b2194f444367189bec1f4a862e057674e912b4f3ff273527545eb9f579298634f537089e00e0e3278d6ce975efbde8b6cf44ae0007d4d193de71ae39ddffec6c293ff95cd3ea404567120cd797bf177eb4734f677d21d4880ae8fa1219624719aa18a87da94316ba7bd2cf96796be8eb80fbda86e35cab6e0ac2660eb79e641fb4f1782d454178d738f26c657d922a97d167c9c180f08ab42ecce8d11d43a904e0ff0476a75de186b7e8791a4b088efbc67afde07cfcdb28cc5c73bdb7f22babe91513dce776b69e1e71cda2b0d530d8db2e3b278d9580c51bb978e857e64c3a30e08cc87ccf08c8c179df9ad58a3e71a80abdbae180efc0fe5c9e229d2c55a8833e734894f54362494b4070e30d1b74bd093e0af8c81f873ef9f3254035636ea99dd20267a1727853876c17ffbf96d37f569724c1b0905519cbafb9a50d85aeac989c96710f925a45ff2032082321760c69092b8f48370cf908ae3864ea43a9a75fce8eb2f6af53379f8e706c85547470af452b69c8d50a7723edb6d2cc563a51f5d9c75eab7b4e20ea57988c700c4b9220193457d72f3b518b96e4da451e888ac3a27838e18b94eb5674ab2d142451bf3c10d981c4b763e7ec473ca937bccd64823380818125e4005899ea636fb44b139199b603c9f199810a06057c88992f44d017ccbd053fb6b67088f70207813b5ae90d5ffd240760909bbe0967430d2726336c70e5998a53f24e516c51720f54042546b67f4298644ac0ebb44aea09613f3cceb05cb5bfc52fe378122061a672860a42e5ca93dd750b58c18cfd5c23f3408cf2582fcaf2bdc330d402cb42ad3befb114517e7a0f05990f7ad4493c8f1508e045439d8852f88037529c1e6d08050e82f1673df7425695e01e6ca34557f22e7b98180ee59415e6eed2212898213fcaa485588b3a2841d110118ad8ba2c765782f40b57ee83cfca1441e1c00b614a9db42303ee9e1f0209ba02b3121e1ae325244d114dab1c6740dd293bace715e991495fc15fe6424479a456788c3e47047d14bac1ed2ea25ef73de71ac26eff804dee1b7bd0226360c245ca021d7d12175d33f7d0942ea6e9b445c69d92dedb3975cb42fc7bb42344ed74e2c060a8253c46088c0951d90d35e5cfffc429625ad16701aa4495ea6e44be56f42aefdf2ef0a60e984d8bd2748b6fd656ac2ad857c33485cd18c42c6fe04b9e2af09e4e46db48ed91cd1cb20dd54d4a2d6c6d5c16c499b367e10edc44dc32d099961929014d86b69bf6e265da511731ce7c2db215df80f0496b4aae7fe3dd5a98df0b4bebe90380f8ecf0e4b142bc6fec03ac169bce8b797fa4049a15cb2d9a0eac390677d067ea11a439d78f7cf8cd5c4155937f867179986b6f28eab4fb12fc43264be2ea62373b955849eba896f7a01a0b29acbf7b1d124c9083984a360133b610e89750babe9f80f7883996745e6e7272f022386607947a1303586850c649a2e23d33b8562755127aafc0d5fee280e440159500aba394512d88ef8369279671b2060b27fc00f28922329b014102ff8760572591c46be86a4bcc9a3d1b719acf7c4ba58dca114ead7dd49e40ca5d87c1167fbb55612f5e9dfa89925b8884228e6bff1d11fb35546d2d17596726bc32823ca04715ff4a61698e32658b25cedeba34c6194922bb45d2fd92eb8c58dd218ab43d09a86a0642b461cd121970f5f73ecbe4dbf2a0289a1beb7b8e5aa80f2456218bdafae888af23798baad368a6bd64393738b6086bbccaa90bf2886d7e9347766f3a239f7c7f2c5283eeb6cd0213cb7743e546d9e09d6419a9755e149f63218a4362ff12634866dad10c4253f72dabc60f70afd0e092dfd848324410220c9b9fb155718147a4033b4cb6ca14d2dcae5589cd38b27c16fe8966049e5b3e2f36d00d4b4c7746519928660f740f12370d8fb264376c480093fac5a33957098e0910e0e183784edc95346a8aa1765f92f97e35433da14e1f7331dbbc6a6582c68b3b0de2b94bd493fcf658d459693f82111c4c022224b6058479db903c68a7b0f50fc19a6028cd4135db9dcf3c55cf278067087c73ac611c4720674a65e7343ef60470c1ddaf2107de7d69412278c0d140439994c81d6d298662c9e887442edf26bf7858b397bab8717a59353ac51dd991be48849ae9dd9faf8889697b64f33709f777bf8e9f5c1e0c471339566a2cec52f8bc16c3a1e947898ce79e2a9081b8c0b290fb74d24a246e6f9c7f6eacb2e5f0ec4d149ea246fb46602a9d33a2c29526aefb9e533ae723e7454bb608212ecbc02fdb795047b35cd36f4d8eb671707c19bf8f5c91f33c79e0bf140741e72416dcc71d27c4bebbd516c1982682efc37fc61634d281423329b2883c02b1b4d82dd516b4f6e8cb14666f4c267164cf90059092ea15a2a38af3e50d1dfa44ba5e1e214d417e231c5bcdc3063eceea763a604bb4f6156602ae68b189a7164413757bab15067dd6f649d1dc5b02e23a09093b09365c09fde2d709eb8ba447b1e692e0d2db9285526bee909a85aa9c4b36ddb2050e51f7a79adb2bc946362c491524c0cf8f8fd40e5e5955f3094354555b7f400683ef5eccc6feb26a9fa8599f05b7c5af2909d34be0dd5f46c137982886e7685ab63e489d84e64ea0b0f9e92277e7377a2faa49bea54488356084953f550d0a97a926e1279fb59389652e6f02a733c7d70af3a69ac118320c3cd4135f81777f0541851b29382b6d3aaa51fd5d313023e6b5c1b0f50f79fa4a466e93879d787833986af4970509d9473078e7da06bc29acdd550383897afae117e500618dee2276d4feab63488616385e4bfb78b0c6dadfa2c0fc886cf0d4e355a6b2a7dd4ed6f4758f0802d7441c91641251b7dd2179c6060a3626d6ffbc92d7080d21b5e6a7d4cb35cd49bba7a4c7844a7840a4c8fa501d09fbc193777228507e623a53223172f649d0a0ecefc967ccbe67e3de1159e42d4524b98026f255f02d724c97aefbafd2e0cf39740e697a112359da44166e5074b60349ebc29f70941f4bcac3ecda1fc68b64ee2060adb71f04a4928e180b955d408a443047889fbe643df1b4cbe26c2f0aeed16d37d7f9805862f743741c82c21774cd14841a01e0a4b1a7e4d086c9bd3fe42e9a252ea6b50b923d97bf64f1bd016e016f514cadc529b82c7ef7287d14a12505111fe4dae2f737fc75f5b20ff59a02f1b59bfef505e9df88fabc69b2a6505f72e91cd082990f5d0060ce1f79ee325dac8d028b44b1001162e51ba92081066249899888f0ef65cecd44a36e8091bbf4de479f4c22073e4eb35fcdfd99593109e0169d1bda9493a925f764536018a7bf13cedcc9cddfe9fd12c798f339dd3cad7a6359e8e2cb012237a817f5f2efd6328c9a7fbb3c001a78a7339cbef086a32b913d427559eae78d5227613bc84e1bb884e83000db6b051d1a77fc226f3a2b0991468843820d02d63de0c7f674deaedc7271b9e273363f1bc740b84361f1c03c64ccb6a2278402ac78e0d3e92e8939b0f401a58202365a758f2ff5b79f301440a201b0f20c67c008a47fd9f3533f3f381f6fa9846a80f0ab90cd68a1ef7f781f39f55746067a2e9005ed3aa0f83b1f7309662718e34e87da7167da364ccfaf91c86c412430c90112508ef17bca1da76c59d433eb4166500b47710d2e8701a0c77c8ffd7645474adb2bcbfe23b19148f6fa3a9b9f376801988c9aca1baf092f2ab9f4340c2f5b40c043f96b44a13e2abb95e8750835260ca2f2f28a2e033f644ea4fc50ab2ee90b1c3893f735bf759b7d1721c937b9e9987e34541dea8d40c78bb19b1f2feed4d18aae8528d18b19c7a566397d408a879dd1f141ed1c9c0e29c22a5e974d3cb4867e2fa0501dd3e5d7cb80752dc0da89ae3c6e9f69b0133d82b60931c2448c423de7c19f5e275822c9c855285b6b9e6503e34220bd3aabec12589396b0c7e28c3b98d8f2ea35d90b49591f4ab416d3ceeb65964989961955ee1f0e58c55271fb80e640a4701133db14d58d98a782f0f32801e6b4195a12c8e13fe9bcdd93197e26cc5c70a6c01be07998cd7cd87a44b584f2ef486fbbaf90d4980706d8e4f095f9a0ef1d1e7dae6e0bfd4518f41d2f43b042ee02c583d0f24c129e10feb86c4019fa8839f18915d474f5f93b2418f2e8b05a2cec035829b5fd53a1182df2c2095349197daf12d696600a9940af1295fdcfcbeb8c722f5353bffca7981f5bfd6475820fd1f5585e42070313319457066bfd2d7f5ff16073cfea296d78248b9618343f2f9e4a8a88d46217678a438ca214cdd88e2d08900750bfc74d9ecdf87d7c2b4afa9ad76f0c2508e0973134b225a25609e2049762bb9d1eaac2dda4d976efe6d567434b47061cb8685bdc9345c8215fc90f45abf2070f8092ee4d6bb84581279aabf2d4dd7b475abe6ed0486620cf973ffc8fd5b0d9e7d21968b732ec149e7e2136b95503fc7bb587b55f13dc7b09b090c313a6b7cb6fb7d2e85ac352ef03b455bc910f7a643de41bc11e2996cb3e16475b8d2d2c33217f73e793c1a1abf518efd432edfb3dfce2fc3acd89749e64bf8b5f76cea615b177f78296bbada18d87d635618c3e3c5e3423ac83c056abc8936923ee86240a42b5ff9214497d67847d960fe65a8f05decad32fc8446fa046eb39600d3342bd4d71f2494982fdaf549fc7185ba16d5d867835b563bbbc7b04085b01c7cea3d4c5eec2959db9879557f74c7eb512adabbbe57b356f924bba4092fbc58067695012ae8a01423d56f98d8615dacf49e6577094f61ccd68c4a72f4720668742a0e71ce7609b80c54cba632e96216ae14585c029d5808a622c8648383428b6356b4f38a2f8d3599bb2d2e8c80fd2378f5e5315c202f3114b66ff4c7add0489a8f9d4ad27b07dd2db0eda31af329de026641a818bac1c23a5d2dc547fef575f23391cf3ad96f791228c6bbb8a476f931d034e83ebd5d54d06f55713854ed9303d859cb35472cc420b8aafd301fd4df24a28910378a6ae395d67b616a9f0684960083f8ff67801cf3aca7f6c0de392b75d4ae7082a453bfb425121d402a546802a3660f16814006b101640d44533a35aa8b97fef7036b5386cd9a12031d04e5640fab1569df1ea78bc96ae79c2c4e85d03e00583f7070c511067f2910ee667ce73dff1d0e5b0027e23ec9a368e569a3ac4480140c8daadf9c51c09972d335b7af67fa00046917329308d4d5f5d091b937e634851dbd8251688ef63a8f6d8500733d3931a347a06009f800f1faae60340af89ad15a404703260e62470c5e7aadafc8e6e98d5e9b038065d8d847580727c7d0958033e0832763bc0a77f91d253601379d448352802b875572bcd78eca5b6ca2f60873357ea03fd9e37158af5af3008626d4fd49c9b98e1af10ee54d4c4505b67bdde16f1b3681a15b4da75c0b76eef430f438aaad3048e9e8236ba0c4f434fbba3c08a18e3d7eed45fede2f53838cbae4a5a3b802a9112f7a8111fc7266e834e0726978eeae3cda96bbbf360a62419d4630158f5990b851718b42156e72e33d4ac0644a072c7b9a1df426537b2838464ba11dd8410e513e3dcafdb82ec748662123e1df6945b8a9f331fe4a7499cc2b0f9f9be5f06d76266333aeb42957aad63b76615368f030665496136f3d3cff9ca1d278fb329c4a35ad3070fe0e82c82e2bca6d74704cb58b68ecbf1079dc501238d94e345a9ac3f18d7e663d4d220fc7d9366451a3eccc6f9e0488671b97ade47e8921a76d3e600fe1ecaa40b9dc77e4b69dfd83b569a4fbd7de131c096f361c1cfdc42cf950a236c41eaf7cbc5ec006da68de95ab000b500c8e51d95b021249e63b7ab115e95ac491c82f2008d0b6c867d70c68bb5aca44dcbfd107953984536e301b8a385462a02584c3adad69fb65cd06821f1ccab3cb6c78081c1c96296d063918d6c5a00a5d98efddb32a66b2f17e4d9b7c5d4eeb75ce27a66203d3c25557531eb9062b4b34cb9effcd194c955f8f320df293da69bbb1127390f0302cd3ce6dd5b2792eab31046bcc819346cf344af493eb0db5a6f70ac08974c806c0e31b11b42f8533943fae7702777471392394a85e7671a3b586d29a2e9e0d8338138cf62fc54ee75b9f279043e1bcd36e3b7b41e4031f5d64e29dfeada2171f4b9a2302eb62a8dd609615bdbf62251e43dfed231c91e1e92f2d76e8768ad3e27ea4f5869f78b18f8575899c70576b7d36b8f44bff52bdc6f22966e910ad3da7f0039d05d890eccc6964af9323b23f5e70b51d4fc9be705053721187c6f892d673c5ef818226df5431470ccca090bed400d35ab2e4929900529b596685c1707606bc702c9dc077379c616afd3386754d28336c15f755002bc1fa02d126d77237bf9d5e0074137b2555d0e8ed87a95f435c13e860a3fb83a03495c594716ea3014d124fbd68279232076593b89dfc64b6f1ce32d0c9e5631282d0af49072ad693daaa9840a1894886464533088a58363e40bb3399fedd916d31cb7f22011c2e5209c40765b3986ddb0852c13396bf8f09d402232067d5bdae6ce9106386496e5225293d39958db658f3194f1eabae3e7501b94fcbf5ef44d728299dde57254ae5055019428b706865122ab9a30072f74064679718c8074c807d75026bcf9eb05ff2528bbd8fbc5fd200e368e8190d32d70f2f0fd917fd9e50a7297f659a5faccd743dad67caa5b1b9c84d7d895be8890cd143d22b375d04981846b0c1a5e4e0c2aabd3930239d72ad8f97b10843801e76da58725b1b383ab00cd8af4c77c705c43acbe42f1a04c086eb1e55ff059e34773f3e59b9212db90b514fcb575af8e8303074e919eae97c50e13050a4993d5e91f4fd97f1712c464d46e186c6dfcbc4a66eff7849fc67f345fa047a601bd2a861a4462a4e7d9422896022984cec7a2283b037768b25b690d09e6bdbdcbaba83f4dd363df402a101bf158ac15ca9cef6448b278629b3ae547d5a3f0be050b9d721690f2bad6c92202cb8c73227529f3afda816c413819288144e863c87a6897bda59c9be9d66d4a98df0697dcc8ab3d073297fd4a27d2f90309a6a44ab1db52a7c9c940cce76edb58a4a38360482c35cf7766400f990355b3ed96695df0def8916263392edcd4c76db366ffb5a0ee6cf15645fdb0b9f2444afe51f26a11da85491bc8c539a1a736075111afab1a08a45c9c29ee4f4f4819f34b216373b21b18a75738406bca405a1432c4de54d5e06de7c2d895370a97fc4671418bd49238c67077d5d87d94ba8d565785120872136c042eff29a7ce373181bfe0a4b5e108f50d20f9ace9eacfde391cdd2c3a6159adbe131262312221676e0155268918bba3fa92b1327a0ca0f103be3d48269936fd531ff58dc313cd628cd7f9a311e164b09199095ff6f1bdf0ac9877c8b111e968728ec5ac478973cfc6c1e2845446adc61d7787da7a95d06a5aac9d7f5711ac37d17a365a8728c35de2d4be4c7a6215d44754cd2c74891c5542a6a8609f5790f55ee4f84e03c8c7bb3405193b5c7ad199d88297bff7b21a9c4f633970bb93f134faf4519c799b6a90f3fcab380f065c7cb8b9027f7fffcf724c1d9f34b998c44c620526d59fd95b929271de2bf44d6b5459210d4cd31597bcfafca518982458d067547a284f19fdd28b752167f953b14f250c66c1a2a6138832d6e0bb34faed458dab0678f078ff5d12ec5870d80f851d52bf18f0431a12d11c8474aefdf4ded871846e269884fe0be579af3a8a9ef46ac3c8a1499a2655290029144e54a06742e1152097b8870dac01efc17957be693e32161b84a8163b3374bd7b7cff12711fa7b695e4f7f398f01016e9732f3b5633b3961004d754f5b8b003c235e0aae1b976e63a8c512bf75810537580142a847cc0a59d9f62c3b7265f8450f527d2419c298b8c7c1e59ef61964f02e9e9c3fa0d83e730d35b514111a05b60c0825138e78dcc6dff1f233bed2211e13b46f8a648372ad74e48c25068e166a7462e9107775f8ec1a50a3d2f1163ad144d14b7edb30375256e416fdc0ca14066280de5f76cb649817124fb5eac8ef095e8f27172017f149658186ac4d046075a2023d47ba4aaa46adbc4830822f00a828d2fedc501ac07151fd0acd7f252874b9301d8974961345fa61433da6189702afdaaba578950431a982f22375c54573bfd1d17bc74c1094b2bff6dad1c3805f4b3a1579976ced441014f94eb8586e3fbe5542afa453488d136d2794a6b9d48b7e17312747ea9ebf45d36c017688c03ec7c317d134a06e0e7a741ae1b9517457f1a630966f24169387e47a2774cb362e50133caf77f0e6ca2f14c839280387fb26f594ce9393e68798d2adec24f7375077653c45c28482a4a93a360a0632b79d2ff10a28265c55f65da8692bfcb8d95536e227e8100861c197553616a3390d17094b099c5d90271aa90b1fc165debd5c8b568884c18d97033cc745db6ac6e7d0af8ef332b17e12e9f762b3c9845cd590772733e4d281e7502bf47e70f4957575d880a59713b29f8c574885c773dcd8978980a9fd453fde20b211ec3a8bd4ff08c9b4f052fe796abfa7283a438288809990a811899964c6bcd4b4820b85505355cc301ac3bb04a6414425245cb84ca0c46fc9f0f6a4cfe3ca4d272503fc99b3a85a0c17e1090508cd0e247cec03f95b8f0ebc7bac92614ec58915df307bc96726a2e31cedc6af47afd32c680626f2287c3165860a329158e59710e04b13b702b8247e3f4f7a6c1b80a9a8ef7ec9c97ed3f9f4667e0083fe636f7a140e27061bafc7bc7a64976a4b4e079825828ea6e23a7e6599a1ff3b22a7792f991edc007b0e5159b97f983d69ded4c7a61f0fa2d95057cab15126acfb596b109b12b46b4577ef8d2bf3c6ae2bd39d4f31745141246cae29835667660652383fba3de2387615b0ac9d384578c00e046cdebc5cfcdd4ab1d9aec0fb8a21f4e0a31f403de36df584ddb0546b916381a3a804665797e2443325adb9199aa2b00cc14c16c213c932f692b346ce5c731e284a06dcaf1330b1be24f278603920032306b7e5dc1c02e1aa233170f2baeb32b970d5c956cf829f3bb6b315d07798acaf7cd857d7de3fecdb21ffdfe51ec19b38d1fd8643b6b8e751c1a50fa8a0c565d9369b2a3c109c9bbbeb7bbe823a02eaadde9bc59d06ec83361c3e8e79f3cc65b2f576842e96e86e8ff9840145203b1be21510346d79a5f520908b30fe3abcf4c7ab508f43d2ca8ba6d1328ebf16da3bc2837cb70b800b417682bd171714666033dd99111e85aba8263f3275bd84e1a19149b615ec2278c9c3968a3952616cb3701f40e825266411843ff528f26043600081d9b5fef524e07b6a782c9c6948bd4fc0c8f43a9e10bfdceafa8e5b1e8c066cc4c6e70ec336166f5415bbfc77039c09057544f2942eb026d6181dfc4cef48b68bbc4ca60b3ed2b3aa8532012fdbf54d6fd9f5e502078adeceb8cf435538cecc1a32dfd0942a7ca980181db459eba1e5e43acd32b84fa90f5613ce9145be71600be73256747fff4ac0c5fc0ea7a4c360ef8493d0b31a60713f2da4d3163994393961ab659903b52a94b263545c734da1fa4447ea7e3badc02837cd5b9f0cc415e4dfd088f9ec00a5923b42fe4285cca2b8e58c49739a5e2082a1b7bd98f8c49c74228828e135ebfc672e83be11a325d0810e5bde3d886298080bc1a8d32e1266d0c41a1e31def917fd6b7899049e34d53d3b9e0dde925fd018e6d9a409b14d628691a4a4101fc8da93586c16dddf7d65d931d0af9c173688e52899121baf2a047886fd22ad66e827d8292e58b73b271404be784b1a01f1d95a139291d94c037fb65682995ec9f4f6d8d40e742d35c28ec8707223f4b7858e26e75ed8467e96ec37aef59f24c04413b91ca885fc5a2cd0107fa8d5ae43ce00f1f9b6ad002477cdd962ff214135be2d6e9a176c4813bdc667c102d1b723c5a29d3976eed1f426c5ea30b0b7afe7e5efa826f5d932e8ccbf45577400c1e47b4402b0ee9393c5f2fac6204ee127716430d28f9f226461f8313f45140b836665c7ed8d3382a265d5e7235e1b1963c536f217f9c444c7510ac5d08cfd3a9b25387db901a7a239f58187d2c57e7fb33db66292bde4d740422f502baee7c91e9747a3133ad4c3752422dfe5ea3260b7e8c3c01a7d419200fdbab559718aad2c054bb13eb5660328d293b242d068e7551f965f7c706970ce56bed717bec8386b83b0ad8d2f7d5efaaea133726d348bf9bfd6b671183d47b0e6da2995c1d0989bedd91448b9e7070976a4eb188d3b10661603a2459054def3b78107d29383e9e4c0758a5bf03872bfbf546ecb98dbcecd449b99e8dd07771b14389a0c9a0b199bd639cf4de37c72fcb4c63087c26b02d805565a2ec2bbed374a955f0f36c941a3a79267a0c3b9138da4edd8a9b6591671481cc2f544a38014de5ffe4a6592f0ba98856e08080302e1d74e2153c2d00233d42b733fe78774aca7b39bd5332c3b609e0e9226047ca04bba8a7db63ac6565a67b8bb957f6a19c82e321bb79842b3514d775bf8d0ce885f3e541799ee91f72fbe94a1732db88f1b8c87c1a955a1d0d4fedd2aed92393086f1db10bc7274be07a4d58ef535bd112d56cfcf5bf8de5a95aa43c7dccc38ff68e0a00fd7d3d68e22cf87222ec5816b39e1e41718835e6784cb11c3e08a14db9910a7b59b9b10d1e71f2867ea43aa48b34a923f731f1b9b9e4fc9e814ef282746b088560775706502bcb3227e5c7f4033cef569ad818431fbe2d9bf0d3cac9920232afe2a1ad7494845b3053c155fae127759126bdcd161000dbcdd4754cea2b1babbdf5c90a008a9d12ebf7f141be0deaf2e43c911b9cd14bd806f127311953f7f38a44d45786b1a2b379b9daa51d513556927f6d7dbdf5d331ef401851136512062c630b90cc53f5baccb0b40c6a4fc29efeb339172cbf42dea2a9983347a3e791f8cd6fff7575ca7afa0719e737b79c37df44b675654f4f316bc56bc600041cd83e49dc6f338d5324541245b4aab6a6ce9b0bcb91373ba7e4e9dbea22e54e4c1687bad323d32e07bbcbc500d74b4eff830e4dc262c3380039e5f99cd6a262fc08e798d4664c39ef2ca63d080ab8f457149499308d8372af650700d7030b9ed3f91e5fb4f5df0986d4cfb7eb3a5dd8f4a995f5aab77c568bc11a575efe5d66c0a3645017cd3551486006dea9ad82f981ad9152ccb54b2ce233b16c963bed848d336bc29fd20b890d54e4ada4d2657a446fbb383c08442e382208f70b4aee05fb924e68106be5565fc8ef7af67bd107f81a215f931b73346dc8f231edce1cae025eb19ce1e70010c13d534ee0439b96d0c660a1c814a7b29473433f6a1ad266e37c1b49ebfd00ad1e75ddd7d03b68b96653abf03e06cbd998c50f36dd9cad8fede582184b1b23a27ec63c1dca47bf225dbf12b5c809c78df6b2d10f9829a100a447470a76dfdcc315ae2882999eb67eb4853b8e84db9ca9b2a17428013b5b46e41a7bf4d9895088e834ef3e715e4dbac847f493c03900e34b3b0b0dfe1fac7a8c0af6d0b86e2fb284994c99a50f229e69070f46e45fbf749e4f7f00c2743a5cd6ad9ecdf3e0c91d7bd4d033b045fa43a0c8f6c9cd29c8103563a889131ca716d173b3deed0383665cf594997ed239bdbd8720a4b1499d819462311c8c5ec883637b8277df02d5be31e349c090d4b5e5bd94706a54e308d86f02bf3445ae0749f965a5cd0518bea2e2102fbae7297c6496717a2d8c6f3c521d3bb151e425efc706f61c056e1f9085a68494621c816eb65106865d03c7a3254f9ef07bbb07e80fb2f54e84a3c8f48824db73288fb0d0b89cbb7982d9974c728da64739aa529bcf36edaaf2ca84dba9b41981b27d208d0982a7ab840fbe9050604aeb5335143252b1d7a5612350fb2357c03946df946b146e746beb6ca3decabfa4671e89e1dd975f05a659464c0b637266614e61ed97aa71b578e305cb0e404182f627827832e97f6c592ffa2748287cfc847a01156a74158b145bd492414de68fceacf42ee86926c0ec270d3198042f69f306627f450fac5655f790709a6c94a2fb8cd639eeb5ff4d3af872d5391db147e79a55dd7d66404df80a70d671bd7edfff3dd5be7e1e5607b882b80a77e691c081e22a8e43cd36e0e341262683e968026457ea4dc76084668ab60b5ceff67746e55f27350eabd43275a038b303b31dbcc6b04cf214bc385fe9d529ed2969b517bfba937a0226bfdb8484fd75a5bf3f3f6f591f71cf500ec1dc6430a62b7a3628fab748f6de8933f4ea4e6cc72bb5f65fca8035a4cb9b15f4555882325c30eb7547979b3e76cccb8444d874f66cff85e558dde07975775803a57832618d68d7a390002ad6a45d54bbd7731d6f2fc3091fe0a52be8dbc3546a2fb42f97e4464e908fe6db0af9ba721e7305d20dd68fa74c9f14a4113d1a381300213e4e8d89048743c066812fbb3449224ab1175ed044dde8af4f52aea63f1786b0346efca9b2ba5359672c57405d68a57fb28f4eefb2a9ebde2776c41a0eed586f6522f9fbc3ec579587b6059f031fbfd5eb53c07405a246d9f897b307c0a721b335f59190b1c656cc5f6098703e0d3072839501533637a2e2073138e1331f58972748c0ee65383b8c81b034dad65c67ebfc36cbb7301c1cbb6241d2eaa7cac34c05cf57fa68295801080418406ae4d21539b42552dd2ca85a7a48d87a6aedd90e2716eec611d7419e8e4347561fb8df4e36ae1efcaae386bbc710ebe342112a9e0257f7d81022604c65a0f5d72ba58c5b90a58a0329c23693f7c597d6df4be9d0a306935fc84436da9bb6140c872c63448b3904485527e5d45536fb5e181008d31151864e28a0f284d38002ffc5d1d37ecb6da3576c407578941e098c3e144be687bf5455da0c23e95ea1f59c599f8143b0dbfaa8851dcc7bb8238888d129a2050090b60bdf0cde3e91503a073b65f401e7914bfde1ac92213a247d9093df92d3b4ac0a21d66329349c145363379138742f087c5b5f4f6fa55b7b8c9836500b0fa15782758f397a63acfb3367c562c91102a3a453323fa8c60a739ac6b92192c2299769b2f68d7ecc2e593273ed4bc1fb18a39f193d450c4278768e90cfc4d7da080851a1f6760a9069bc107236aa90e2b8205b10347d407dab54a07f8deb02ec7b1b05917283113de4bd12a0ff3b4119f355f68bb9302daad7e4d92e149fc7a92c2915f4c51f2cfa9ba3e46efa4333e901054ad541f6c449cf41b2a54a4d2587ea51cee9d0d4964fda614e29933407f54dd6c983889532ed5c83d35cc1083196293b72ef45d2503ff134f8dcc74e9831e4824b0f6a86914337ee200af21593fa9a3047e66a4bbad0bb41cd4f99390844a2bd5ae4a1ef9939ad4ca4f9ad291ad984a8e8d7e8ee897e47e20261579bab5be8afa17a8d699c9149387b3e50d30ce3e9b03bfd81ccf9c0316a79183df47143c6095c147018dc21280b6c2b90c7b642fef472bb51c7cb4dd6314081d72be877a1639d3670225348764e9db9ea139ad75a7fa62afd6f17314a9548e6ebe6d4841a5982dd00b2ccbda5a2c25a6341ff2623399a21972a6006e4a7e49c03b8fea545fe87b8f409b10da93bc865e42b49aaf69d8019f03b092605ec48c8044f5e216407550446578993ebc6727fdfe4b292813c3b874d3315c322fbd75459c37b3ee5b2610cc1a97322d304f39608865893bc676c86794218e4709f8679c5ddb13f39bb42612e850a01f8e2b630d6ad7e24151290fefc6565cb4ed29a6844815cf18b95e87b8027bf785b218f7d15dff45507edbd722ce3333185b585814fa94953b1b20a77eb53f9907bdad712819ea5faeca2ac39791f147223cf1d86e4e168554705b2f2a57d32789d7d21340af87a153e0c8684acbd24fbc1d98da643455eb4961cd54bf86734baa6bb43fbbaa208c70b7229321ee3f2aebacfe4c6a0f992b9fadbc7587fb52aa7de1ecef88ebc0399577808f54a205971a9fb7dfc1a684a27bce568abb4ba7c1aa8b264863128d9bab9e884a200dd75e94ad1f4af69a9bb8d4ca951d972c600d1768f371297580b5eba564021588165662a6b0cceb6a38b233cbb86754e03bd8b9c4cccabe8c89d1b62b19faab9a85f12a710f322bb7e7c0262593abb0cf0254bd547635f73eabab9f2ef12439966d353557e8be8f6d293328aeb4f9038d145e033e11c949aa812357aae70ad6437c13ab90394a8fc141c87118ac6fbdea65f2ea37925d4844a2dfd58005212c5d9655e4e95c2640fbae9a2e87d1d89fddd73ff9ce6b7b22d9b965ca990b7cf3c9a94e63ecd123acbc57814771f2902527f6afb595e5ade900ce573389dbb2d6b9139e076d9a1080e458ddf25fea3fa2ad583564ec8a180948301975681f677b75b1f8161f72ea0eb9a68383cfa0347b733b86f0d23340a2896e9302f5937dad95b78ca900c22c29d7bc712c800b59f6e65451e59f40219cb1c5773749653fc1f5879b52c9fd1f8fc65ca5a9e62296e3231253e5348189dc50b24ebf1587ca1050a98f29dbf08a546d87d5963dda9396a726be3f05db2988f92c03db7c405ee99ba2832ee897c70621253408913d15d412c42f22fd82290b4e10204bde8f059312f3071a1162bfeca24ee2abe18ef948dbbb8d79c2a9f1980fe1395480f59e5427e48b7af67db1b09f3562a35bc05a613b86861e786f331a2ab70809093fd2108fa25accd0269dec5cb0477fe6786bfe04e6438f171baa47cdc12a0920c09d4e324258087516c9b96b791a47f0dbde3871fb283ac853c4b21227d95344196dda6ff7f8d1102c187a28042e461e48eede8910055c94688b120e77422fe87f68121a2fb0a6fcfa35ba70d1c6b85fc52b22f7bd88d6efe63d2dd3134301bdbd877925c7f4b3b8b2ded8a569cb31ef963895fc97600c81df0d493c28752a25b11a9dda916853c85656d4f2117a2d62717dd437e52251c1373ed30e47593e7e155202533742a224ada80d0ec7469ef48a6f739e5aeac714d8b7c6649242ba9b1b43fd4573eddcfe1b935dd83c3a23d1772a344fe9cccdbe1868292934e4faa642a112e2c10ef8f633293f3611393e6d10e5e44773ab12dabf321f7b925992d7516e2469f1ba6af3a3ab13d0d229e918d42d690fc9407229a9f098e36e11d6a50fef8508298eea823e96ee5d6a1cf37525b587a20dbf7410299d647e0dc0e3f187588c15051e8b1c4a8d961b8853fec38a8a643fcf664e26000321e78c509231f2b11d80050308ceb3295720cb020501934190a232dc5d0f772a8dfd33d0d4b066cbd17af7989dee5436450d46c02c2928b03f03ac9a04f5db7a972951a1bea23e72cee4303930fb08d61b8bea9298f4335c49154046912733ab13cb4210043e974a3428c7d0b253f71deb70cd09e317165a9cf244f42be5fea896ab3f6203b176491ac5be3d0294b8d8fe42ad32b1077869231be45a1364435eef856a387c946958e9fea78b569a9f4a6f4b935ff5f66672bf6a9afd2fde20af3f4137e4f5075d8533d37e515ec20b6996772be9b3f4f3eab29840312635c52bdfd64cee338d1093e7a07513489f6f8526d0ebf32d68fd9fd397fcd5bc128fa9ffbbffa9c613c3439c67a56b75ba3cfebf5f4b122d05f5ba373401c619d9d0f4ae569da6ea040018a45ec3453990c65fea6db9d2713354848eb238b70bc722ab00d0a85faa4d3a10e4c3913d4540d14c60e244c89e6d9afaf4c3648fc777f781c4bf4f3b8110c59943fe14b291df84f46261a644572ba36c48572181e0a18453b33ecc85d55134a472e4b7fc0088262b3d42fae2e457e716d25995fa83340176086af4f195afa4a45023562034baff98a052874b7fb2dd1d9349c1393edf6361d4175dc17557f5d286d701f0c852585604e770d546b2c6b340baaebbf988a12654472456a1899386b996fe63096d29fdf2bd4215f01a92ec394892f5ea3e880f5c27335b7095c37931f43bdc29b9d052734c82d0777fe005bebdd5b7fa52d1806601d3329a722d09ab45daba85cb5648770cd40aae9599e3a509416e75071b7689c5effe438604467b1a0a7ffe79b3b188818e5c255b8b775e8316f4ae93b07b3386f641ad46e8bb0ef551e6200ef00c7419f63deb450a76b5669b11035238f0282da3e29603b91fccee6191fc3250e0c0f322560b004594507c617d9602e092cf2a69a3608a0843ddfe18e675539fb07b5673477dda7aff0c90f151f0658efc6c4e7b29079bcc45362760e08d636e50b5d58618892dcc357aec364c47c3aee85609f10169558f4cb9fcacb31099dd6dde00941327887083da469f9ba3ae65bb206526716cb40651db116c59ed627d4230d2b4c32cc0cd813f8efd04001a18f20ac92fe430ac9f2d137bec262d0eec02f9b3a62885aba76c9f65524e2b64b93a13de00aba8ba909c0761773fc5c364bb563ac869fc67484de94247a187c68a5bdffab7a413861d32eefcac200a22a889cfd5bf50f158726a336960679e1a16ee2858e5761445bc69a130ad82683b21fad5aee1acb0a2f0e7606aa1efa4e10e28c90b423f45f8e35b5bba947168c4d6458602ae1d4507a298a4df6ab78382ad11a7cc4fd0b7db1c037890274a506b871469e1f52850e90063ae46f330eeead0b8f7f191aac6f8207a457de0d30843d9813b9ff9d9dde583a02e862816b5a70bb1a891b54d893b6e83324b2d9ec783f6171db1ec7b7e153359143a57c4e09bace0a24871fdf5b8daafd6f741a309ac0ea6e11e7c2c449c2407cfc130f64fe59a3dabbe658b75c0f092eae041b195b4e6ec6e43a398d0e96f388c4c328b746fd635d9f6e3e503bfb2fd42c01c096f9aaf601548ddb51e5a99f0b5a9ca19db945da2a1c89e2041f429b95ea3d390ee1306a70c6e9881d0f0fcfcb69cd281c55e9c95303669821ce3d8abe554daba9393205c2a3dae6d5fac3e1e19b7af408ddc6f527030464e84bc8749ca8a93aab3e0893eade2d89b329e3c8f3a5f6335a9a4a1bc736f3cdf878caa0631ce1b917fac2d0096621cb627dd8a721c674d41e3f0db320bf9a103f1c0d09e911e757bdc080b706d284fb69499985b0c1148099686e255defa85ccc36bdc498b450521c11591f94202eb7d8ad2d2b6800045c7cc78e3badcd616b0991b01c2c43c4b1355db52790064806c9e80224028db0a26727560359b842ab487b989a7e17c71627f022f2ec25e6fc8e10d6976e73d1a25029f2b3565c7bf00fdadde6233133d28b02ba392f9c53051c25152b5759a145339c5565ab70968e09e69a4c09864ac991bceb7d7041601c286690118acd31107976766b226e1208c6ddf5c8f620881b9cb6f816bad70da514987457fc64d704167209809107fd146a55186f422bc85debad7f2044a3cdbcd73572f94142bb5de1f4e08c9cfbf7ab9c76dad38c52a62bb312606b8a70a993a1ae13d53f0cd8b25bc38376ca30fb28e3d1ec51db18930a7e72c04c515232bb1c4fc4a6a46e022da7170aed42f2558ff66124215464c4fb7930a033050146cf1760d664aa4d63a51b95ca263574ba112d6b86c6a3865daa52d5fc4741adfbbbf97709fa38f80ad74af949b99919a7dd681b5edc1431ccae9da57b836f665a34e65ee5b2022293e4468cfb36c2626df78d8ef4b67942dbb5c0e974283bc07608218a62416dd5554b6c47f7487f99db2d92682b1ff4bad664b2a450e1b9084ee9a4c8a6f53ff676fa59b78bc8c758d9320ac4e071a1347cddc8854d4a7225e055eeb8b635f8bd95579480600ee80d15381218c8c93803561b18175b0bf933ff6b1ab50217b62bd71d9e70f91c785dccc7a8af2bce1f269d7dfd01eb65b0e72b0d6bd3a4e0882f1eb99430aa2240efe5ef736db72e8c03450436687eb22adf787da23a35798ac56f43244d783588235267c8cbf88cf0a40c3681bba4d030e2a78235c903cead6e937234e722e9ee89773275af57522812f834067ab8547506c3c67ecf5d925fb7f9a0d7183dc0b98910d565496e6c30bec1dd27511bb8c774590cd28fe1ce16ae58890b53efb6c54cfbdfb8c0def95c0a7f70dd7919e28a2dc1cc2e84f597a8cd872037922975752bdbcfb02126bebc760adac14f8e0c5c246b636bb91b857e213d167f181f33e10553a404123c22f177d72de2bf79b603d4a2a5e422099848475d9954ac33a393d76b31d2cb42328c1e8f474d836ba274a18dc74203ba6deef9df133d90c039bf6c0ad97e9c82ec42a1dbcf4857bb0ca1cafe7ca5659c4eb588a5341d6196651f7b61340fb18e03b13d25d1c7e3ed35c104908421e7a837c839e2972d51027e8a1a7a88e31c81d99fd9d5cdb5bb4d64b5a6bc10ac124c8d258ee925525582b2c590902dba474348a4b4c7f6c86687869132b8e21b06e57d9dcac42e460ad9c82c8604c61edfcdb4f65f629b4647758c90673125db39835567041505780f620161089d10e79310a8b1bf2c7ece527f03066746c708140d2098f6a386524ecbb62a225870944875c435a1b3e6fcf1437a31cbea02c65755cb439c9b86150d60886d3ee93d5e24b8a4307d4b3e87e9a84fba631b60dd40d284aa0c379698a9f756a6c30accf2a20213a46af3764f9ace8828405d40f6f9daeca4b56ca767163e132dfe4a42008bf1b1424b3b4f8592da01731961622e11b55b4c11285d559d4c4d1955b4c78377ace9a0e5012ce72d929ff70da9c9011512d21de09b77f9b15281032db5919002cdb2510d1799f2a12a6862f00f88e69852bab774777eb1dd7498d33dd45826a775ffa6d56b77a57ef35abdb27bcc308f125db1f1fac2b09afc7d48a21af58ffee80d5aebb0badb2912b6db4ca7b0cfaf614d94b3e2f553cba3fef3aaccc35fc48a9afd8ae9311d56d7c55b63ab249f75d6ad6e6fb97b00bcad591f88af57ed701b2648d012f56f4ac03edab2b7d161db4363660388c683b5643fbe27f33b8e5e2e8d6ffcc62f0c6a8e8bbd11e9ce5ab8001d4573b18105c63f0f09be1fadc94149a9b6e9d9e5638835a25230aeb4b48eb7c435464eb6c0a51dcd69ee5471274501ed61d4bc290174ea1d232db9eb7f4487e9416f035170d3dcf8f3d38dd25a700c839a303fb3a1347722010d78f45247d1148e98fc7f3264ce3f62399a8bb024ef4eb7676829a1093a75a66cdaec8eac02ec4d3f67773cb8ccb1cd770ebe34d704ce80900f9fff25a05ea6e091eba79fce9b39c808252f539bc961e578824566ddc54ac9a7675fb3656c990d470d84619789e39d77974bcbda8c8571d7f8f3afab4190e40b76ba3870ff5b0a58f39d3826a0be3b5e9e11f2c800efa68022cad3540b178f769beecc37e1972b96009753b5448fffa8d56b57b9260381b500fc76020f9d0eca80de68829ef2bf85aebd1185750195ada266c4b56a2b1a9216f324e2d1cbcc40c9b90eea870462648bfe2b6fd0a8bacd969d62eafd2488be1bb2bf3dd5a6609fdc5b5e5e015f4a51f0da4d6b8a44d6b95aee3ca63b5a9ad59d39db9cf6edf155f939c0cf7e2bc0d6c0d25c6a2840b1a4e6d3bc2150566118415414b4f16e25979b4c6aeca0f8cec9424ba65f44c22d49405ae90443172bda5b45643990cf7a868254e8d83a8ef2d3e0666aef87b1bae15f1308f5de5217ef7dc4193a1b86d55611830ce76138bab49507aba050a340bac59dc96fde620f9ea2f76947f4002d28c8492cd508818fb71b9691702b40ba0b3f05deb7c3c3c87b563f02c1dd62ef6f8d7ac02272eeaacd31045748e4669b52137db22ca35a45bde73eb359c5a21d2003ca0cbe118e1120b6bbffed42ee5767dccd2bdee24135efebb79ad1709570583554ee2841bf7bdee0ccb01ede1b15ccbe52c176dc3abbab2f7b746cd415b37051513514cf612aad1c427417849f5420a3e494c6ddd04e34b2dff78ec7b9051803393586526749efc19a15c05ebf95467665d7477e7e3ea6a61da01f4da9ae83f50738cfc0ea01dc77a61d54985d58e65dd32cffc7da5c540171986cfa4781df3dcc2ec8f1a9de53b85c2f584d39b13412355dba2a02f33bd4675b5e8f56330f3923272cfe9ef2af15dad90e73461a2c04aabb1357f67a668b89cde44bc20a444b6681c9a03df39ac0ffc81b57a58024bd3d7a6486b3547a688ec4a24e8c1575b892cc6ab3edb791e8eed4198552c4deef6005288c5d048d97aab5a3470ce4e129f61f79adad135064e103bf394a71dd35ed58996cbed493a61ba096951ab60499ff41472ba292701a34bc8ea46a9808871a0b1212a2c97dfbf5617294e6cd994169b6af61ac5b270fbebc4daa9f7fefc35aa9a765a9d8db365ec6b193a2c7e12781b712cc67ef05e1cc8e29e39f70071ebb13b9cc41d151066de55c57b5191bf4602f926b4798eb434bf0c83fc8f13c75c7666e6b1ecd5e4fb072e7dbb213350573c733c4aedf60b1d40920077e375a704d7b0afba0e232e81b91362d42bb24caca2c90050c642ab8c408256269d0edafd9e616cef214cd58efa40b94fc4deca10d13907d92626418427af0dc2b15751d95d979ab15d3c034f9b402e42a45dc05008d1a552d0acf80d0c65672ff2c7c2142a32b6b6d4d608364774b10b4a43d5ae8b89197f6ba4f9775deff81beddab533a8af3431f69dc30d4c7e1f1c2b4cf320c80cf39f8f9a0ab81e13a36d8ce73f966d1028e8820fba5ba2ceed81c6ee5e9e9e7d0eb57d08463f563a572fd145afe4c6a684874627b0d140659436dfe7a603465cd739ef5a77da15fb4c0a1bcbb4a930299495e0163078b2ee7734cf6751a88980df1a1effee57cf5ed28af3d1f4bd49ab141b2f8c55a9b6c6e8147879abf9fb6d05f2311bb7691f8a85702b760a6bd48d1938b73264964510a4da01ff5185e020812acfba707f01dc7473e13f6bc45df7278ab58a091c5ab5c6d55693b6476145e3ed8e96c0c78207e9455648bf0aaba3f0aee20016fdc6e4604111c93a8a5e3b6d12cb13f2a7af3c84068c8485866d3502fe2c4238baf5a72d62fd43a6d78b080640f0f5b91a350fad43f4d8143eb70d9b2ad4e94480673f8bc97112d1169343a817db66c6aa268e93db41d9040cf9b97559525cdefbc3f5909bfccdbc601c2796c58085e29c5739dea1332fa0ab965d473f45237ee7b8102f4c4852f592832dd32092680a6d4e22ba607b904eda916360d1538ba4fc6827dc9f94e530a2bf2c56453942b984cd65710c57e27ec95830b97774339c84ae04103cab2cb006d1ef67f1720f8d0663ed8e5e1068017a2f3c1d17ea8e31ee088ee491ab5cd651fdea3c3e2a8e56d3bf4c4b87d5ffb467d9c55cedbc974cc48e793d51f0380c36753eb5dfeacebd96b0df3060d0e9cc6cf2ee1292206a8b2b62a6578f5e3389a0b3e626cd6cf763c7b6e406313c52d6ac167c08e3314c92fb37d5b50cfa1aa828d75014aff2432200ec6b53cb60c99535f798358636a4ebea36da392532b5b6aa77f8afb4b38304f3b7ee8a757e1c91f0343e49dee3984a2edf0fbe15816a81daec956135d00357c452ed8301f4d86c9df5ad887f617a80ffb625cbeb61e59b4dc37f7b5fa7ac355ab54471f8daafd3601627be36770691763d88cd11d2c0e93670a7ec50a7d29cf94d2b5b03e05ea33e456cf474f73a149e9b8aa57e99a50d6de78c8d8ec52278a81a01ebe7fba50e6fd86733ea39b21527d24c590addbdb75564f4a9119955dc9fe84e631e1090c5ab9ee825a68658244ada1f7631d850261468fc03366cb6f2e01fb5b42c5d262aff1b009a483b3259c2760044e49f43508bc0753b3040cca8b22c24612f96ac550682895c36ce299aecfc35571bde5d5805e171a96daea4525d3979d909787576c48076cf5f6cf036a05bd6dd5e1b102f1357a19ae6a02980a666a05e74ac034d4d2aaf84c06e82ba3ea9c5022bf0222be2878d15acd472635f88022f5e2eb0e261ea075ed07e20d35d1d3f14da4424523a8c39ed6230a915cfa1f87be192afc662637589dc37e0831b13bbd05490ef3e523a107e8024a87d21959e89b91d7276c9abd66076426465d27e6e68236ff9e2edc0f3755b70f934ff0c691a5337b6446e1aafbd7a2a5a292f2f8f7d64b9ea7b314a623c777034f4d458be6a4da92756fc89d83b59f213a81bae02ce279faa607f31a60e45ad5e7db0ffe570976faabf0d424f930e06b2ccd0808eb2d43f435b1dc27b1069d5198953e90a788edb53a7db8623d9d3ca6a25d0bb8ba3e16bc4b3554a965caa90d5a300f66e8f8ffcb9cf9d08d444748c9738d3770b359007e05dc5ac3f5cd891c56684f6f19d2aa23bc5f93e0c78a08d19f8b4797339cf4ac06179fa638653454df9e834b421b47826d86bc5c20504134e280e1a6e2f39e0f368cc2ea791628b52d88c2d5c1f8d1a46ca9848ebadc7322ab6a885e54087dfc4c72dd6ae26fc396272fe2c459720a0491192a0f58ac1d48fa96f7cf542548c299a90935f139d3f9108f03d55ff92a1d8996af4c2cc0d40cdb5b9690af2861659f21d9669e558566f5f978165b28266adce667e32723f53b229157ce1ca60488b9d8f9887b24378a2923a85996aef071dc621e48eaa4beeebb90c439d23898c1a8016a58bf655a6da40ac88d8635cb60e6689e651bef158801ec21453e9f2b0a7ce3d1ac7adaa45c4c80fede2977bb17115d3f70e87f6ab46155cc548bf5014ea7e9ac99f03b512b7d7125310d32fa046ec271e685958aef5895eb0907e8d74e15e40d9a9aaf76c016a3c4aab3c2359aad89921c2763b56bd200ce6db09f8aa88cf97119d93c7b9044fc42a2f532b8c53026295fd3b2b5118a033e7009639a22d40056940f216682533089ce57c6d32da3f52badf80ce2b76539294a25033c1ab6c25780b3d99fa2c9835e1fc428e40cb6244b8eb76ebeadc3c061ba1a543a395a69e880f0292443f58db51a31b8a66e3f33f29d5fb45c1a8a3c28da1fce616eeced809a81d498f9901f8803ae233531e5745f4d63f73f03535f0659265609f270aabccc57866fa91e9b37399f84b1491e780ad2531378b5f9910619101d68880dc8f200e1280a38478bc25c93605b8efba65e7eeabfebbb504f75d727b2ddba339e02fd740dabb4cde551abf4d737c36a6fbfdca0fa8d3fb413909ef520e29514014a28ace1a1c6ac4c8e1c664c8cf54f16b28ab1114fca5803acfef782cdcdb6ac8d91cb48f01c62c01a40e877410ea07df5130cd2398d769a725390625fbf64c92faa61f3b9197017c7e2ccc3cd01da2af4e64120f638648d423042db80aadf728fc1056610144d142e22e099e477f52d32be542f126d842e8446605617e247bd087993045f31b54e8f2c683e84e9ee79ce5d434eb01060c62b001468a1131c6d4898c14f89b9fbf98795d65b01e8a0023ce6b4ee1b7f4a2263981462b46dfe241a3383c48bd652be4dd370a7a184fd9de777adce991f664189515ef4d5bae236b6961c5eefd0268352266614930aeba48bfc2d59384e8f42127b845cbe815b5859fd24c15f4ea8c6f5c050e4645654ffa3f464a7589a6415d55678b2aaba8362bea2da1642aaa154493f5b9df6b122a61fc659f2e386baf5c82672b7a964a2aee0e9a7dac739460503c2858076f670e4b68f64465aa6a5f412c83af44adeccc2136ba0fc5ee4d74407d48b737e2cfb9fbcf1a71ad0e8e486ac21106d92908e2dba58fba2e07ba1ffe1889eba68020ba30fc3417f748de0e34f60e96b5f2083db0077cc0ac236621a08d96351b0e5de0b91c05d013c00738b879c11717989b0fec609f6017605a011fec5ed4b2a7674e80f669f5b31eb59e01cc94bf564dd831b37547e8f19baf12e4deb0e3f54b39f0380bb882dcd56f905dabfc1ee97def7b5145f8c95d2aa5b8fb2855771ecbff25addea6fc3f7e7b83d8fd42d9b71586638410e26f2efa0226213d12bf931f2daf303c43eaf7352ca6ea3f22195ad89e5053e719a8bb4578f26fb364c903b3fe167c399017f63ca5da65185f7aa047fa7bd7bacbc87551a996ed465577ee20f6b859a91f5708bd615a23636db28fdfe5a5233d9259b653d463ef3efaa345556c6b7a349f7e56cd389b99cc8554007466ded45e098642973b1457e592fe1d349b04179f23ac4f1c864670bdac3c31b588a31e9ba1a8d99953920012f23229a7d3e486d094aa62325b66cb92b1c6f94c4a091af6c29c0be8bbb23797d12d3008ce2a88b56df56c54d0855fc98eefa7e25cb003a49483c7054f0895bd4165e8ee552054a717404e692a54c4315df40dd31f38daf8e30b13d88cc122803b35c562f5ef5083144486c326c24b46bc57c7c2d49233952feb137b8737c2a49d3ddf3117cf110c18be144c89908ff1c21c35bc28e70bb3944e350f7fb1bc7a28f7970649222691e09aee069ef77af05298084d54f6d2a240fa73c28b2c50d20bda5e2f83608907e416e0390e190f5ef24f292c4e72140e745bf297e5bb2db1d1305904ede73b72db1e7fd999c9a3471d984588b6c946e70aa378e0cad9fa58502e7bb14b0a835e5884f699330a0baef985dd9bbfd7c5be056bf1e745b07d67b1d246436257ffca342f9f5052adb39738b425d255d374a340446e4a5627d2a500a2eda979e2ee45cd3e60d703097712c780a6bb75493bea841e4c1d5ba95a3ce3622b3750ba8aff19d39918a765ba435f2db4dfb1b81319cbbf1823b8a81405b7dd1533457e9954baf4fa844f84a4b698cc47d32e463868132daad32a1d88b58b20bd72d86160af704b1fdf5fc13571136a0a562180967db0f8a678f0025100f791ac366cddb55818ba3ba82c62adb7ff57e3e2f628f86327dfb26ceafd4c4bdf5be7424c3d6fb1f25acda46a4fd57924dcf5e145288a54e39625dd21a60163270328b5086490b8d290aa30e2fda52a93cc63ca44a698cbde62cd8a41b759f1474764c450003273d6f152283760d6a8f887e947025106a44b7930075dfc9f04db8b951ebaa5f42cdb7fe6c546ec2473ef0ecfdc7b369bd26ff53e4ce335c84facc2bfcf5d3d8c22d258089e77619696179d6a5f791f4b88ecb001d98c7763211f4ce894e220ee8fc1b7f852e274c38d178430688c4792178794b5ab0a61689b219bd8361c0b6db2e1934de54496ad7de044451490546ba83699fcc55166d37febfe06b0b8034af910112eee4931aedeb6497c41a43d86b56aad3a8afd852ceadc52a85a55c87cfd07a2bd17240e14314970601a6c9251f2d5fd7890ee370e1201553fadfa84bede0bca947e065044eb516b199e23dfda9634580db3f54ff8c252e94cb7527f405b2779318b4602925b56e8bdaa67d1783b521e61920b5cb7a8325600e7147c7f133dfad13662192b019912d9fdc8f2f3ac0e419b47887be1f844fbf9bbbc05aa8c4356a990f26a2270c97b67d009f3c69b4e2ac3049eb25f666c2950814b3c94eda9febc6ca18c3ecd273f77da8c3c870d5542ac38dd6860230775a42a763f6c3fd315347eb7c927dc9d4fa013d3a2acfc36f0f7486f3978167cac564f79386ac9a0c0990e58ff498d226fa05e47dc82f833ecf22a56968f1b825b57a146ef68afe4a621ef2075ec13ef755424016ab167044cbb1dae84583b3ca21fdf137a47d46da3e501b5bd99b938e84956fdf825fad8dbe4b53cc7b8a93688c2f8fb15242d457f1d92bee05f266e08ea18e35806c7a9593bc84199f6b451c8038c8341f434adb8ecb5d787b108c9bd5ce758ff165c2a07b126056cfc72135a3f380676c9ed4916bca3641fbb2339856dca02352a5f3479de7b5a9d9dac333a708e2b437f657f8d4e5a4167272b848fcc5324a1931bbd79637d2f2099d70dde346605757576b2cdb13239145d811705a7ca6243ca34dd98ce0de701a70dcf71d7e3f3f38b136a3e007c2a19bbfc17bc7f2aa00dc1cd4364ce483a60b62291b9a755dbb0ab1e5a85ebaebb17ac86850df24cff9d9879f654357a8671206e9e81a9b4abfa24b4d7a99044bf0482c1df1740d47d3312b9779ce223a654a698b0a4eb2345aefcad2bb0fc0c1d8651def1d3a17e5c0cdb8154dfcd705b0166155c827a9b18799e0c1d3be075451763630babd61cabf3a2ef5993c5944069057196428e26abd5f7ed946e575678ca35326727e242567e21b8132b261a70c85d7ca76d7f8ea29632392c41d9c7ddcc2eaf35bc64770ba6de7f8cea616f76da8ec62e55b7e4e56ff1cc62b2d5f8f5dbfec131b3b87c75d1baca76ed5f91c41d798d5edce6b7d6a8aa8576f6823b6aad4051da450f547ea9029e6a77fad7ab0415d5ad5810fe70d8d9f9ab80f76e8d69e7027a702156d933bdace9e83f869bc07f877fe0df05fcdf42dff262bfd90937350a6d9ef6904fddb4c5c0a4a235e2ff8808e199b4974708eb806af50c45aa96202fea44ebc7b52a6cc4d9c19b2f93df1fd965760ff33a188bd6d968bd30e8abc9aa0d8e47ceeb612279e83361ded5bf6ad0ea0d101041b7a6fbbd174c01330dd5cfb8a62330a4863a34f26e18201beabfafa6b028796d4d790defb5dcd03eeea76906916b82cc8c4ce519b1f8e31d0ed5ef3039d7b66761f12121a5695cfbc23854a5db1813424ac6a2556984440c39d4b18ed38ed6570b10f98413917c56b954580bf83e3b24d1fbd03946a39fdc1f91f37907efe1b3c31b2caf3f042afd3a9e5e72a0eed3c0b0613149600263a324aec0c690dbdce04d355036e3c9ef72560d446aee4b17163252e44eea33a16b4d6a7d8c5a6f07cd8b8b7ad067feeaa950a838259f2ad6c93bd3e3fc1c0b43851ad76302139db7e3038e29e89e7c67168bf3cf900af5f71b4a5c10b5af97c957723a8742d77ed99f72c589bd835094294a9c949527dc994acc74c546a3461dea3381299d659b270f29d13f79ab8dd89305e41403fac6b55c5c400cd24a07f7023e30915904934ae9e1c072b0def91a7841249df861011453f345e5dae1d111a95810989268c95f09d4dc553b77638f803dc854f79a909e4a6ca67c571188adaac059b5b9699fb4b4e28abe257b932da59429499902ce05ad0589056c4670c487333ebc006583932642a6441cd668a005ca136b6098410721dd458a355c9c7a70e1694dd08f28215456f0f186a8493785c1c0922b5382f860e2084d6f098287345d84be1cb9d0d867454a83fdea7bde0260f000f03f15dfe0bc3430b880191be4ef84cb0f735cee4aeda5f63b5173c1882fe8174617c36d3ebc1fff70bf0b2fdccac84fda32a4c528698bd1e5d90dba1baf40e0d9fdd8cb9d13a85f4cc20544a0f29970ffcdaef987128eb03ffc1089993668049b74f17b0554b956d71958ac74e7a327c5658a88d00c3afce8c25a6ae8b2e3f1c4346a7eb0a024061590ac14f1e36141c18dcf03ab58ce541438482bc03f144a0eaeb11fcb3e90523605a9dac8b58870734ea755c40c590020f1672e666b1bfe12c6d8eeeeb267f7c54b2b075720685c5c81a06930767140d9657ee10284f8f259e623ea7e320241d20accb6fe773c9eda189c7933e5645b9799a6d091c5e65c669ac2c8144d849ed2293d09a6376fdec4487013552b09dde772f5f8825a17bae2759679773db11dc78d0e56a2a25421f20c454f97eeee4a56b8eeeeeeee2b74b0f6f292121d2bbcd80d8aa524504b49be2c25415a62298914142c254132644597a5243b5668593252b30269c948cc8aa22523a725a31e5ad328cbedcb4b4656a660d4bfbee5adbaba7ed77766ae3146852e7ef1bfacb51d7ff33b7754458bcee909c286ff01d08eee80a2073f0223c4181f3f7dd05cb78ed72f1258d8dac1be4eec990f61eb25c3a2c7da4d27a5b389edcb4963a4701165e3e5a43153308ff1c2e2d7c86ba414255559c10b291c89635470e3f3b44b277a708cd4853c8a884c5fd1682551b7cab9bbbb37ff8ef70328f21ed92b342a228a9e8c2b1a47d4c54c9976f0084703d8ca9547d5bbf83188cdfdab9defee3eac4bf8157a108cee258737d5fcadbe10ad94fea6bd50d5aa6a7bfe96b6bda67ad2bf691046130d5cae4be5d25cb019bffba50a8f1d63955500aeeca65008520b47e4a5b467b158ac043f1f7799ca14bf385687f8c597032421fce2fbb108c0dd62cb67c2c950083b6d2dd9f890a3cf22632d1366b69c57e1a8721650e101989f6319abe7a74fb9f856e36ed498fb78bf1aafcac5abdf562e8e5f68af727dfeade06bf4b97e15d56119adf305c0b3b890445b5c92712a04112afc821c4a2995449712758979114a32aa63caf014ab925bc1e509b28a874f1157442a267645e4812756883a1ab264944688101f8490d1b4fa44d328776483ec88922e9189f281049420c2c85084a6b9901da69ee8b1c3cc932899c4100d20891df1668a0c6d841021830e0722c596149c9e9286e0e1441026a8c15237140a1d40ac6004cb93211d2e0869da053c62d3599842c90b991809763cc18244a288232f7c011473cea94d6d6e3f5c989d40cc9b324bae14a19921871b5a254509d0d421322978a2c508142d50da409d5922b652491d71a34428a56ebcb819a369f4879b2b6e96348dfe70d30388bfd1e6d49c736a539b1ad31112b9436a9a16db6677dc895ced16d484134e38a76a6a73c33127d4c1514c1f9df9aaf995ce1a6718fb5ffd5c9c307fea9410634008d4a3dfce778101cbf087d1b96c5ad53a50b50ed429d9a337bfbc03da0a847afb21f4e14380fc5c3e5d96faffe18c16be6d898def2c9c2c8c2c1becd7ee714158d95d831358775a228d3c82357e191c96920412ba47f512befc4ee29ea62f63ae94dd635091fa456714cb2cf6ab619ea2d7b3bfb3731952f7a8bedf5d1b91aadba69eb01f95ddee0b2174d912ce4c02b1363e7a6d30993c524a29a57c147c7ee4c7b7eeeeeeee1fbff5fc535976a7eb03b4fbc0e49f76c1d8e5d574c962ecbacbba936a4846222d0c5c00fde6ef0685b0d384602d8c6b42684f31067cda06c688b01f6c52240ec1a1eb91888929a79cb2f339a7248410c286b063c517f70b818623b394d2e268f81001fc827f613842b8371563c49e1ddb7ad8cb607596828e8a1da36cbf9c2cfcee628444d18345e617f95984287ab16713750f84311b7b40a20f22813d78cd0af77b16928f67ac666a020928637e58a207272c5c091d6539576c4e180b4b63d484c2ac4988cddd720e208687d88ffca01f5615cbe36940850728415cae7a30c2a65817196bea21c56ba3d9366bea6144c75feaa1031e0e606cc0e49b62467698c4dabd4d17fffc6c0d7d3aa0e1bc010f62c764be4f3737373737775b90039c5dadd6b65a3e9efcef853f8c2e64c40f279e28a5947fe01912620cfaed5abad008f7b83ec03df086431a5e495abc9a3e738befd154dd8df8a24f99cda5d4bbd277772958225c4920c62e175fbd92c06a03d1d9dbd91d7e775d7d7a708858dd1bdc76c885d2a7ee7196d57a0f092bdbb3fdeadf5c70c5a49e70e97c8739eef4fe1dafc2a21449018adbc68c161dbadc9ccb5a90882eaf68c070b872023274d969a88ccf65a71fb2db6686643b1857e7dbee813f75d3b4a0abb95aaec17a87e5eb9aa6d25ea5a93a88041a9db14c4df0ee3a86b2ee79326f0d5780437eb9f38b28822752c6e91261e8090e9f6bc3bb413fda6fbc02a13e0e087b688fc2131c3ef7844640bbaf3c08fa91df2702b982c08a2b5721f4ed9fbdea979ce67ac28148bbbb4a1cda7120f684616397091eeb36fb67b81e205599b07d6bc418dc53bc35620c1360adf06b9429b520e57e2c9ed6d668948a98d0dc680423c081ea371654ecd7b2c1bf81c0bf3d6bb341a5faa3abaab21e4b2eaf361f17ecc96e12d860c418b5fbf8b5577536f855bf751f771c905e648f9e4c48eaf2aa8c958e65c8902143860c198254e157493180c14e56ec9676c2f910eab83e1e9e2c5beb727f747dddae9c29a8a68c9928209e6de0c303f3b9fc11f277a375a16f91d065ec96de52c1aff82cee81c15c42f8fd2ea59439b9e0dc4a424a1ba377fb4e2925572f7a1aa0f1d86bab75c561c7152e7477cbbac2056feee6ee6ea7722453926959225b6a2216c9b648c97a8082ba5b8ec32108d53f21eca23b9fe37ce78895d9e879b0c7c617bb43a8db3322565b6c8c33ce38e7b4aca8459c3857afd1a9e1f48a866a4e0b21120847d01ece6895465d734ed947f38cbb6b6bdc9ddbcce5dfdc5d3a94c242e94823203273a3846804472801a14354e8eed62e3719bd703ffbd14d4baa60049b39c5ed1f7e4c2d45a102590f6c5458120398c9248a2db322150c3c382991e4c712314cccccb67c21c3a509061f38175c6e82a188eeee86b0bbbbbbbb1bc26e08210ff15558a12eda45775763cb71817ec9f87073b9e0c771c18ff3413f4faadfbe866adb1ea7cb11f413f4b3d1004ab22674003b80fd2b974fbfd802aa2a256b9576522ea4c5b22d1dcb720273df2cd990245b4a52ea7223bd8099efb90a850039482276e5662561b1588110fad3aec5de7d47ead1219421bcc890bcf0f08397251e5e7a588117a626bc387df1d2a587172f5e664e5ecedcd565272f61a22bb1553a29991d934a119d8d40db51440a8be304121698177482d878d94966e42453d2c3954503149cb2a87192cd506653c560db8234d6ab9c7cfffe6d73e5d89e7b2bbcc47dbb542ece9523478e1cdc57ee42e40268f5ab2ecc4f9babc12e17475f8d972eedbe202b977edfe0a54bdf9f502c6e2dc7b38475ceb65aadaec1c353797633a2178474c8c3e356a22c12f975778feed1797676605d7c3e80f1c50f59dddd1d5d3b3a75885a6bad5aad6e3fe737ad6e2a54a850a1e2ab8aafafe2eb5bf01a0ecee7e4bcb52aac6bf5bcc209ba39ae113421e0b641589dc5c3f23bd2b44f70f15d87f5cfb27858edfb5bf56d8c51eb84ceeef4a54ac53df3e03e47d00fc7711ca769dfab10b66da3de8981412e846c028884b6e3f1b870c11a597b5926d5c49a1d44d6140559637406763432a39419f664e6e8b194b4f6749d2019b2ae43d89482a51d96a879c8314666e7e633c7600a7d6e0d4b623d7afdb00ba5ecec4e7cbd65cf2337d55a5bdc0065668d9c5902458d0d50a65aa01085c75094232da2589ccb4a5194ac60e765a52852a458d565a528531c004534a7f4563a2289194618cfce47ef7558b6b6b71363d7377829f2d28d9d0dd80549e83ef0a83046688a28012a29e18dd695974e1c1ed6b9c532222bbed0b4a12a405a2206354644539088312ad1dd2ddb3b3eb1f023ec913c9e73ce3927c36f71f43c42f81e5b546a4eb5f66bdda04c5254c6420afb49a20b7f49f46013ca74e1bbbbbbfb121b7284b0903279ffd08e3ef5ebc8c2ffe8d3ed27ca4499aec71c2329b2da4aa2526f8b7476276e6b75396b8d3c3036d889b1c61859177a472cb449533ae79c7332613284568150a44be79c539bdad4341f4300a20c6419c87292c4fec2c5283a73177d9a93a45e20c52f94ec97812c03d98c5fd0eea34e43831b80eb4f67dd6c935f06b21bdf09f0e4cdd40da2b7a389b11fccbb7f0954a38ac02fe2f3ace34ebb602e189c65f7110333c1167b84a1a20c74774fe91bf45bfbf43eb576adaf5c758feedcdeb74fcb38ccb77a06cbaf84cb5d295f763872780403d528b8f1238c6e5bb6653db67fb0428157a96e8399b58f11e6c5aa695aed6af4ea8d6f5b5fa9500e01130b29ec8d18ab148f486b6451c2595d4a2689a458f85b8541347c46a41a91ae774653a298aa1a1c8a317acaa5ae58ce36d46d199bf2e8ee117a85b29b43d18b2a9095b35e5d936a13990d9432c532e0d46535979d86d4dca4cb4e409adc76d9e8750d96016bf08beeda9dbaa4dd10f677cbfe5a2d8bf07311cb8045971f82d97c7050a2f2e5152e66021670f933c0e586368c85cfa2e39b7082bd10e017f141e003c4f73e06848131e0b2e0623d10bd6887d825960aac51b908143df840d11301d65a27500daf73fa8be03ed173f70dbccab6313773bb181299e393851fd9031533377337bf20a5bed56d7f0e58867cefe28d2835156bb8f3bfd5edaf2352bb7c77777729a3542ff10b156c7face57e1d8b52514a1e31516689193fd50a10bb4c77c2595f6fe6ec5e6f5e6d5e53af37b300526a433554ec061b7f08031fea9e7e8a2f7ec95e3da6ee81efcd2e770548c1f6d3e52b7d4589889103e7f845fc194c5878bfa02b5dcee217f181663f83d0351eec3f9be0b9563addb636cab15a757a9d2e80295602d5e5e3b0d50f814fbffa73d46f85e07faaeb218d2b1a4ce7cf0657347ebea33b5ce217fd49367bb7ca3d7411e5ab7e85a386ea572f3b1c35b6d7368e76397868f013028db55ab7a700edb60fbabc8aaaa7009d11e12a7ebbe4dda28a8baa564b4a299bddbf63ab69204158c680710ad244112230b58907363ca820fa68818822528a8ef440822df54912103ca460c565a7d9912f3e3440c129c949164503a19a026bd15104961f3fa69011315150ba414987695b32cbb2b6d6242725274e49522e59cbb2b24841c1d64c2a5073e5af10c63996f30bbeb550c24e764ce6cbce05ecf8e78232f6af33adc0cafdec8e27f0e70e173b371861776482850f5713803f9422512496a1438b162a5420895e771ded3aaa5f3d33c33272f8457f9b6928277224b10700665a0d1a248ad46d3aca633ee445b7df61a44831c6676531c69743add02509f87d80133da8992818941a6468f14297163158b945451459a0b0f4b29623a416478ea4b47062eb652d474d981063c16c4a759406891661d288691184557179294d0f2d844873a54599343958f0439a284f699a0091c3d4d4d4891e0ef606171fa6f32342b1f027fcd9eabe16b2f042779e1f2177eb74c14b55ae9df8fa3ab93841087bf6ecd9ddde0fdd794a3e8ce5f0881d111b0a628218dc02a19c56778ee37ca7c95aaedeec8e1042cb2bb8c785b5ac964ea5b5760fb9d94c8934b776dfec2ccb5a1f50b7d289c394deb39665e15c9675f1e17ef663946d02cada5a99a494dc97918dcf3b51d6b2b04238f55964e49ffa04c42f830cf45776384ab831ba94471f7304366c9795e9ec762925d76ea7e27583743a85133a74b76d2d40b2333c7ed10f3bce9b4de1208c0e80262cf488410f5fa1a3b776d8de6a71d492b3a5ec5addaaad590b4b1806b0c440bf30c607f378e8843fbd5a87fd33ae68b4ba07d6014c6c5cecf9273b90dc045c96e998dd2d67b59591c5ccdccf27bc90c6a41b9c3f7f8b2b10ac3b07973e757d2ce3e879a004122e20c2a5ff71f43ea04bff9b1f5cfadad49d4f5dfe21d04bdf8583de89039ed057be8eba02abe3c3d22045962ef9617552b0f3b2d30f6184ecac470adeefcc841c15ddf85e9ba22c99f12144fe6cd007c1fde07308dcfd4cb2f0bf8f6dac40801f3b1bfcf2a1b08122932170273bb98280bb0dfa7e6dc8fad18e037d3500bfdfe7c20fb2d55aabebb0bce95b8f7d7c66387330838bb2c39ef4a03fb3e46781beceabe8b388c1eec418f43dfa56aa708cacaf6aad55c3c1b1cf3cacfd4de5c2796bad7d950ba7b3aa5fad7272562eed73349e6d277ab583c9205dca23d1b664d28e2297522aed20ba524aabb1947444a1434a09466b592d9d3ae99cdd8d9d195488b665936a3872e79c93c9ce89011416e772520d41e4e524272bb89f7d2b3236bf5d73ba7be76d640f3617f66fac65b150caafddee1ab2735ec0c67a3472a9a90ba381486fd9218822aeb030e28baaee30b4031159dbeca0431565f66827a52a2398b4d65ae5489525ac14a4902a2b3055a9b5561f3b54d9e14a151e2dcbc2810c98364d5dd434758965e0268614781c1d1195821233d040cf40f102248af48149930f36b8a26c979b805802824dd30d529aa42c3d3185c614b10a420059d30d3eb892b0b1979b6e5073ebe5a61ba0d8c2882fdac180c110c02f2217d3f14104a2d70f04049962071481119e208c1883fd5aad12d8ad8611f683b507a31401287ad7081f1867d96144cf881b4aa080dfd8d52159812111cb3882461cd2e04e54143dd71e16c1b0b0bf046f4971f115638c5ea7346ae2eedfac18276c3b00225e23744e0919cd881a273838d9610b5759a8b52ae1840527306c19935443ec5e7039a98623305b1423ab2cf994a5faa484e90725651ac08448067c1103d1f501f40c4a3b4d4a2212eb6556608470f96271ae90b1385186b095091821475a0021848516636c5f6e12421433224b7d7a8a2f361325e5c1d394076362404829a5748228beb888511329349c40da7e6471aa44e69116a478122642454149414da189a119424314c4cb29254b4a296591292331234346888c143162145f4c612c1b3d695beed3ce8eddab10d68ccdb9ac45a8053396bbac4568490b4252b6228b73598b901211425f544009956912f574fdb296262d28e5c41c6c3c215e9dc806721d57f05b477b777d65a2a5d33ca1e6b2d121c0ca393e980d3853ec7cefbaea5356444bce2ae05c8e655081522e3403a56481ce31b30e0bc8c44c43dc8f05069089297a4b6c0e48ccd4af41e10fed5c3099cf3ff4837e38ea69ca96ceccccccccccd29b3f0a5d5a39f284cccc5064809f75345bec4f5e872be901df8ef74a5707f1c287dfae0ea0ec5c91e5d0dd715895653566c0ea93e59e0e828b1820624f8ef0e1277e8b7b828a6644301199924315303f412ebc10c59b3028eca0e1859ff81ef754e0c70f36042162882a52fc40a6adabc37c7e3ee0fa3322d3073c15935977cd23167231c21a230174e1dc2d72ccb37359ddc39241f70ba794524a29a59452d6c7b9b5fb445023477cedb58efbc5d5c8c1fd9afd822eb8cf81636eead5e5e4ae63496b6bf4ec951c27dff65767672b0d4bf4e8c8ba3bf0bd97c87902a559b2ec624c5911dd95ecde1591ec8343ad290f7079baf173544e07f6a0bf71770dbb1b7643292110b32236133c60133c88efeefe39bc5b7d0165708411461821ec02b85aa8e83a36141540a6a678862e0fd28dc5a801fbd52c3c433c435f6abbbb47596d5d12a26429e859d3ce91663dab9c6d59cb28911397bad2e88963623fd8fd6ec0b83e4c2ee5524d5aed22962646a27e3e7b9939d22a7b1261048eb487fe77ad9493d9a62f42d76a5b4f31ede9aa86cc08d90f16ddf82b2cd63fceae7201e33e65757777f7ead43577777777777f8d4ee9eed58a7b0937dc9d06195c4e1b0c460ffaf579c40dca957740d16399af6a44ff39e19d4c6a37f43fb40342e382996efab1d57af8914b656eb5b4ac16ec344d63a29a019e10a8e4ceb79492a119020050002315000018100805028150402c20938cf3dc0114000c6c823e84643694c783410ea3300a628c31861840002084104394518aa86c008f40efcab08c66548849f1ad1cf5e187f77566ab54699a5e2bbf7ce24d9caa5145a5b847df734ee4fd8247ba314696a8437bdf15e61774c98177d2b872113373e2f80e8f9141b8a0ab202666fd721a1480e22a7eabe190685a2078f5b6f9d89af9485ae680d524d503aa09114731807a0a25987d51834a2ee284c23418742edcda8f9561bf2d56903cb1f62c2cd5c46c00f20fe1a25bce26839e74f59ad88d614292241b4e88a51729ef4a035763b9a2e27d47f1a0f29831e67c106f7688c882c7f16803451d375a8fa06511f0bf11244e1e0d16306792912ac7e38457eb512eba37a2676afd83f304cbaa40717192d7fd04caafe0ee817171dee61df1ca3ba5e240663a0d9dd8dfb9f2c711c66f3018675905d939cae5853bbc1d5a9a14824f44608231962ba9107d8659e84886a2cdb74d3c8fbe6bb9939159e4850d99485a807b933d01ff6bfc391278bfbe947fc7c010f39c9ebb2e4bb52c1ca79d72c1d0b10344ef6c71f817119d3548890dc65582517951e990d20f42023cb1145110c2f8e8ac05fa6782f2fb0035872ec44838bb9ca8b4f168889b21b451a87b9e6e78fcc500c8b120bb3bdb07780cb5dba614b1364767e050aa35a2546d5ba02eb0d9451b6e46440ad176b2e815eac132ee713f8dbe81bc68df87926e3367c2c051d21e5f536cedd4184fda998a2ddfdc3246daa2ff2f1a8919332c2a3a432320972adb5a7d96da842e343e919928d92a2ef4232646c2cefd5d717ebe1a72b630af07d0f1c0727c418607248c73cdb97056040046953cb1ae2b3f5c652965ce616c7151d2dbb3c1c6effd11b84efe947aa3e3eb92f503a3bcf7a7f4a6ad67d17b2cffd268ef4fc9c9ce64b121fe945e3c7f54fee170a93f03f5f83a4bef1aae2fd19a8ea8b4145f7cf4eec1cc3f8eb684346fa79577cf585689c8a42ba2d22566b38cd135275e1ed51e512972d54a987b7797efe512742224e2bcba312046eae89db96fa012a84f108718310b72c69ee15b3e84b8c8992a47daaf3c8f70cf84f7d486a52d000be8606a6c42b72248efe4454d4468383404cc4e4e225b193e2ad54f1594980a92c4be0a858cf55ac17390eb28ee60f9005d7faf6feb7caac03e14476fbf23b7a47df73b99df2cc51c6ba0448e0db1e835b11af7ca404f1f6e69ddfaed670bce8e70c25d4ab1048821dc9dd97f69614ca11108745fbc12533980836989afa9a0e6f1efb38733e69246073d6a9479bc33f31073db9a3262965c0f0aa73863133735416fea8b3399f0696424284ac539f08bf8b9613599704a63ecca77d4c853c305635303387b3881047ce316ac927ab7837f10cd3055bfa8b5f08e6f89e84048371e4ba0a3506ffe6aecc5d5aa3ef1a4e489a7b8daa76584c0ae1938d427e62b5acd99a59cb2f29a50444d0277cc4747938dedafa3cbd2164c673f6de354f94817a243b6d76414129f24819b921ce562b1568c683f75bc427bf8957fbb53f44267876812224144a3eee9b6ffc36fb67410a873eb08f296a4da37b7f15e71c29d4d6951562497edfcf1078bbfe9f7bd5a09f80709f20ce140177f9e06cad7617c49817c7385be78ec26a24aaf66d0bd258a02aa24fb1847c20e2c1ef60c343a0c4d4a469312f641cb818a50cf42d45e50f9d4b510c4a2520d5d974e2a707944fc516ba7092a72349523ab8a2d667f59f9869e5b3320d7996d60c41261c7928c28ed488623392dc847aa4560bc1d83cf89e5d5cad1681807dcdfea34e4dec77efa5da2e6281f81b43c99772775adf985f0934487184b0b3ca764c9b31aa28e6d865ad26ce2b9e44eb3130b3519aab7994e1adc9c744732b4e485cdb700862e8e414ea7a650cf5c6e5bdc1c8a465bc92278062ca6cb4195e6570c4f80682215099c33b0c6009931423c38fa142e4760a4cf9f4adac918b083e849a86a1a16f76ac6aef3c38cf517002961294300782c5168edfb1e477ef015c18a4a4ce9ed8561a392f888bd1ae2793495cd98ea1e4b87aaf4c2a1127ce0d629bad0284c1bdb7498cdd12c499f9b2c51ce192d3afe7642cc04e82e5cc3d9320c32ed72b593a9733555401f7f9e854a03fb16e04782d9a557b805ad2d4cdfd72d98da511c8551792a02d37a8bb5000cfc7a7bdc82a7303ed3f439ba115d8febac377c5a20f13be303d3cc118c741ba9dfb0169ae0d5406a316ba596b958ad36052afb4fbf694b444db5e34ecbe5ad6d67cdd860313d946085248c24c30ece55a4286c5998366c9538c48746032b58d9c5f5d9c6b7ca65995d201cbe5a29884b337324176a4f98df4d251e72a1453d58b96449d8643fd2720cb5a38258c329d2dadb24d120a1db06238b0ef82152dd1b8d58c33108fbc99a3398e88594752d3ccb04410d1c8414f446e957a24a54d8a02f9f79184b894c074f4a4be016ca7ef271e7b2950267ef8ccba08d68133f01358f28ccc79557ca65be7fcec938585196b2cbc6dc9188827eb252608293c3c007ac8db214be1799a75b8cefa8359c6b375829812efdc479d40ed79946a1de38366ca846edc8157ae9b197488017183353d8b192f4726285f22f7765bbf71f5929b16d749c6a15e123b891692483fe3d15b08aec161718a1e0589e5af552e868545a3d76260496ae8245488d5dfb8bc0467581403f2d842330e78819a40bb8f4a735eb739dbdca63e436c28e86c9ab76c6aec633860ba5834428402fbb005664a880dccb0d32dfe4d20415e3d19cbdb5e750f610558df00ff29c70b0b15f9768b4f4491c93efd29f6580eaf9d7d4f098f8a238a7c3ce12487780bdea905740f5ad1821edf63f8a04512d49bf72a2f877be7e4cd2ebd2353af5787e7363a787f00344102c137db0aff0ab0c76b1e9825b0aa7e63cb037e88a3b2f8edbf45874bcf91a7d5800aa3cb76045b01ac93443c19049e6986299eeb7d6d219cfebcd6b22f4abba3109280ccbe1f958df0e9d4f17a29b37208b998b5533396725b4533f9f45eef48864ffe03b1b516abb050782354067100fb138b2fd1c34a71d5b77ce3de47f5a7d34fb96c25ac8e5adc5f295f5dc7fa7a9cf246e9651c23675bdd5b77884874b80041a004da96209b37f5984c14c38788c569843d9a6b2c61baaaf96f3c575aae96cf931121c38aeb0bacdcf34403a656b76ae42973c318619df8a4a0b30ee3079399822c32b23d20008394a4d278e30fb09a48377541147b62f58f1d27a8d21aa44e6f9664ad0135f988b49fbbd8f9e92145299e3372aa2f6f4df588674eb03967f0195e480fb7716146c87a4512db8e6054515da5cde4aaf694ca67e41722baa78bf55a959699999b33fd00ee76fe4b9d6238e000bf53ba887521277075826568e37511993c3d642712b40efbc2a50cc34f92511457dcf90387e977c2ea5ada0ebf81974abab43516c694a74ad948456e036813c87679c57376fcb913ddc22e90c61b5ec5a29bcf85638b62da5054841e8f13d9366846c25af9f3c4d35368a7ef310aa13a5db3066d4f9f82acab959bc391b448b3ac26626d370e6008c5389d26b012893b7f769576fda9ac83788f7ae5cf810a2cde0e2be04076e898ad22e681ef7a0b58c06295314a10b9ce9ffffc77a3d81fe74483e705e28271fd74350f2ce90bde397919230e7753ddb85c2cc0e69e287aa2df3e4838eea1cc2d514225e83e614a5a28ed067017c385600bfda88307504943532ba95786909011c1e3aa7ab808dfd9d93bcd7f4328f3ff1312a09239708d84613db04e059e85b7088d645dd30d429697b367b79be897dec10adb473f4ee6f69bc357ddf505b3882f1c2a1be9b6058756b50e1bee490484d2aff36bc7a3dcb5034b42b56c317d61e4836baf9485df0dd2dddc7e3170ec2ad95b3b4625da7135cb38134009915703938731560f19b4a8d096e48034a162e53f3007a7ce4250eac09add54c49016a0a5ab65d6e635c24886add8ec2c50037bcc6c92b0e8ca2bc44f5c95940060b0176384fc7d70c0de456c71cc5823f00c174ffdfbb763e3a65de91d390122beba45d1db19b78fd84c1049dc6f57fea9fd3146cf0ea0c14451feec4c6fc3ddda4b05115279fc6782fc9c4f8ebb302c7ec2a109474d83b8c32b21325aabc9a34a2599d0650448eb350102b68766f0ec02ec4f191132c74d3c90fb9c7caa14ac1cc216d2e11447ec214115f32b2d7a5c8789772cd83a7bbade925d5c336b0e683d23ceff266f37e00a79a19dbfdf5d63ae5fced0c02bbb82a037dedcb404cfe0f1b0ec4cb9f7d6a9137e804e63ea1c886f1feb918a44cf44b183e85d75943a597a6342d88bcb206221f431776847bda345b0a190396d5529ff40bf40227e08ca34a535579ac28408fc1a925cb4e131c6bc1c1c15fd242595d9b21183217f2f68a8f494f39856e7471eee54c60ab2acc03a861dbeaee559191e3095d8e5524522ca823fad8009826f49b8d08c020ac7684e8120ec39df8d580f14453e491983941b240f796de3fa5e77597cfce8dcae5a08571f4ce60d2744f000298ee8b36e5c7c6300fc71c258519eb4bc74ecda61b335e205205ced50b4ea3980434336518cb395c6e7f4ea6febefc4cff22054adc365d5027936cd2898d6bcd31c0f767d2cc484d0f55dea4ccdadbb9ba3bdcf7824f580c4caada3179eef5a55603e22fdcf4cf0dcb5e6ccb341d23ed702742687f80a384657f788114922c349896127b038fbc143ab5709f907c757baff65922938ca5a4b70fb02da48399888a172a7c5fb49ba980943f51f57008df566390e4b24566d496e8a61c97867cfa13d75914849c663b52027d5609eea1a9dccc0d4f0601edb05907c71319d87a3e5dfd7cadd8d19e9b1de46054831c2a15075fe8c2b032d2b23dbf36a5da2cc2ddc65f980d6ebd710bcddb2037a1545d6ec64549d815bfa82a8c25064170e9ebc59bad2ec92aec99d8aac4ac00e6944cd265e9a61bd8b8892c32c261bae0ad3f7666c4a8d601c2444ce5b5ca300a703076100735f5c9849f645d188c54edaab2d89cf9e92f9974e245e548ed10a99c7a03f63e0e459e821736dbb481612562e03afbd19ad186bc2d5d2a252e30bc6a4e819600e2700af18d9b95696280301c2feab5f28241ac3f1cef45347072a953693a95c0c8e20342a054d41251e9b9b22328f56f3914199cc0c811ee4612f532789c39f126269801e8c48b19365ace714ed2a931ccf3f8e445eac4b3c162c5b2eed14ad4d4f7f7d343dcba3c28657154f9ef45166ec382608ad16e240fd169683fa91be1ada9dd4b0e812c552626821211dfed29de53427bfdfb36a4fd9c77ad112787d5b6b48b0078da88d5434a9e79eab6524a23fbfa42006364de11f62ff6b3989ea2e3e21b8c44786155f9af2833ae62c6d02e0e35b0594953a98a091970abaf44abfba43eb4770b7b8c6cca1d46008d7156ba42bf9f6030e666d7dc75086bac13aa8194d25e6669af2aceec1398349113d55efeb1c2bae740f4b32958dbbd3b4ccdacf023dfca9eb3664374766ba52f9bd89abaf39e71e1ee55d9016eb03d3654661b687635c5790aa08f8d34d8d7d764566d96c01585b88340b6940d073746f836c43d9c2b23e06d5c8e57ad0a760834c6cdc6a3fb5f3f7bb3103b3a20480736c1dfef5446faab2656ba43054940c78940c77bc5a9900e62a6d37b6711d6069756751afdbd65f0126de17d80d951ccfce91af888747e5a758c251cb5492298c28752a32f336f765fb462621bd29e963757044474b39141e1b582b25da0c2f5c50559d390a8edbbdd9e7962da5862440de669fd7d53f69283ed5a6efe6c717b17d3a94351aa3de52f380fc8b9fd3e83c42198bb7f1be4518447dd442fc2b47a881641af6583101000e5157ffec7860558a2837a1efb8f79e841ad8ff7c888cd0434055a3e3b53f126c7bd98214fb9e018cf2f52f3019b4c245711d81f15f92261c78b0a202c47e497ddeea0194de45160206cde17b2c28db751c45d48b9fea0a9620b6d6b881036058a514c2e4a780f1b17f1b4562fa8b3e9d128071126a95789f32941edceb0177f4a0e8927f3f86e572d888f255b8aee32637dedd2424169b23b435b24b1a9492d5026608324a0bcc0451f5442a69e09d8ce1a72d5496e58025983786393da1edddc582c3f60c1eaa578c8f710512ba7dda9e194a50e323dba820a2133a55e22d9a040ab204786801b5f1ce5818c451f41eaa79e4dd90a4cd36ebdc45e473330b13463b8b8bec3170c9d0b00c1643324a75a10c3db9b96655cd91054db2bc145ee9b7f39cb9259502a8834bd818d956513c24ac1a628f5b171783427ee05b1ad05a34229cb3c8299a4c1ccc6315622362e3fd5ec5f1ae8b63a228be332f8297ad371507bd0f4f5c41c1f04285391f21d7c13645f4fac9282375da80d2e60f8b723c9f67044164a58eb006fcc06b64c2d54e06436882dc274f08feceba5263d865b2e8c64c4a3bf57112d28c9dc5d0469ebbd54eefe3dbce81cc5c2e27dc9032644ecc181e176101784612d650c8b05c6c98746e55542ad7b89323715c2983ae10054253450acca077eb6f0ead1673d5ce57eac267370203d83af04f2d954055aa9616b3f08fe7bedf6aa0181c610af991e0517062ca15403b1c8996429197ececd653a04bea6fc6eb6405e045e72219b6a38c74b44cacec74d094e62b6db492c13713b9c3eed4619935f0ec9cc451209ed3b1e4debfc738c00ab9ddc7397b4e765157556419511e1712ada1852bd1c894cfe3702da12084e6f7a06e39bb769efdaeb2a3bb63a13a0433204f959e6b17f66f4f9dcb1ee1a069dbf3167581b02023a747a6d04b973cb02fa10bdc285f1ae87378dbbb43bc6d2ad8fb20b391c06e839b3b5bc7ab1079cbbdd15d2581e261028dcc38276b1ed46e332a2438f1d1d70efe83c24c88e5aa5fc8eb3660cee7b69de7d550e788822d9ec3edf7347f3466df5169acbd32a2d40a194ec8a20d46254eca5743645da25d6a160771fb7ce6bb656853581f7928b9cf37d9f327ebbaec3c22aa3e31f2f0cc4a0eda38e3341510918f857cc49cbb19b2dcb01d7002c3046bbc670bf563dcda6809fc0845392b714c1d6de02ad36a0bfae3106f187975f2e1f220bb0f40f1a3debc9f1b81fbd444fda9ee6325132c16211d8b5a7308012d8515a409af465e78f6ffd1e07897de49ca60b1af521360374901d085ac68ebb7c36b7d8bcea15eb3978f8958535581b3f7849b73d99733eda92eb6f1a6863f5a7f2dac3ed8a92f7993111bdd1355d593ebff7b3c5cc4c8bdd0e83461f67c69258ec753c99bb861feb823e244d73520b7cf52b6d2ffbb340df0fdd89df717a3c7e433fbc5ba3baae02bac6c6341f19f949e1dfd795a8c6f1ee609a20891ab4babf53f0d869e7942f2d34ac2656e8cf3c24e3106c3e7659ac3806dc4063492d0042569595ddf4450be2e3ac77aba563aec5b47c21882dc5b5518faaea020cabf68f51fc9867b54b726d97ae63f855ba5f7874378ed25852274097051f7499eace4fd79dde7862cfbdd0df5e7c311bb5b86c2c7c7f9d3a06b341d7611d0a27acf8f25b65a12bbce2e0d9484ea092099bc4c6a0614a66a48b27ed1803fc1c43601ab2e57313c32a5fc0311d63d8e4e3743a7d31538ce0899121d5d611def05ae3956939ccb61fcc1a632a71941f84c89814695329e551cccf18e8276b8c2b4779346f7a28048b019b6228ec10367a34c143086bf496a403bc3470d96d91c87ea294c8d46002190900319c94fbf7e70619612164d860c868ba0f1915de5b6cc8a86c3877f13ac6d209a561049dd1f7adc3673977b6a019001c40cda033831ef5f5dd83409164e5d0fa18d08ccbeafbb4504a3489689ab2f552e0e2524a5773fe1a36ceafe6b32532729c100ab6de1cd967c5f5a5a3e650977f5b08f31b4dc91d71ae92b51fc6296602c60070f9eb694b15da950d09e4a9e63075cbd39e723aa761ac6cda86e44f8c5008413337758b8381cf537c1fb3e922f4a494afe92bb32e83d9b9f3f1a8b7d05ec28b5422d75d2b4d6595b929fed4977019276c28b595fefc19ea3d987cc7f35fc259705b10cfa63a76022d1f3ac839d67d77f1981cf7e9f664e1e0e12aa5c2d585a4061f9b2c1a5527eb1ccb97023891b302aaf4ad6c809210f9bab3e8bc712461b02ab6dd902d8fab1cc5985fa40de317bb130a45d31c5283e54da49965a24f0a5cd1ef63543335473367de493a516402fbee6e3363498b6280cebc471576988018ce727447d0078601cd10253d2344f1e7b2ff6b788b0784a50666ee7f68c14ea9813952766b9380c68f90000bb9fdc4b07cc9667886177f6d6202450238d97d056fe7fedb5399ea99f3d8d06cc9bbd3af60ac06cf1440a661c92af5937e1fc321396bdc9a03a96f672d9130a0aedb260da4fc59a650039d2a5b71478a04083d67d9dbba51e1f8eaa563bd15848f12692dd323f5644b088b61e823453881ad698bda99c27011e17c4b72945ad87f5eb007384d62b973a9bc20326682ebcef976104fda547fd4a7be62041391d790fb3d083281a62d24db103363697e4a4f40305288a1e0ddb5f5196ed0f677be9882898c1b6db6627a2f7f0816d9e4360c1625227bbcb447ecf33652638b9b93bc9151233880f5ba8de13b706716946fe955f51062d8d3dc633ca6a9d65e878e51e1621c26f9cf041b4440bb52b9571838673f442475417ba4469b723aad38920272cbb42deed900d9f7b46c3f9cf221502c609782158b1766a501c07cc57260c40c3f673ffaabb47c92141274d0e702a4d50aa141647c773eaa9c87b7ae21984c9e89087fa6ed58937e89743dbf350d631349eb1978f00277ba63a75c58594d28822ddc3d1ae1140efd86b5e3f9a766d2e1fe8d00553b50931720b8471921bda318e239f496218775fea747456666c8c265828e24349cdd9064f1afd7154b3181035f0f7b721c7a037f8944baf9565bc371c7aaf2afab557de8c0565f555c23939ee2c018cde3e5fab66a9b5360a26ea5d37483849e28b8e277f64f52d1279d55a96ec01fa99d34e109359f1d2d65c97bd01235545e095727e9f095f3645f66e7260a2e44ad087668b64d23de41804222ff14697693797e17e054d215eeba7e4c0039685263268ff227460b6a70a5c018dc9df351b9b13d8ce53f4b268f3ade643354b5465634a859e0f9dbbfaee91e1368a399e9b77f300af3ed753b0c6b605f318aa5d38530a02948c469d4f3b4aec1161fe38e07eac8f7f2eccbd0765cf4b7d933368c52266982f94628f46834fdf99e83607aa834e849d6605d0f60b77847170b3d0a80207e8661a56b4aa815bc5bf250419d4ed65d63579d54e80911aeaf5bab58870cc0ea3e44812c6105b03cb0ad20b9111591840718733794d9574e757bce8781b2be155a1886164dfb04b925bdfcb15e2664c399172689a9dfc7e5568dbf2da8c7ae943fa5891a96dfb7047f96aae202796d85627cb36d8a128af2c7a1b9a2fcc3812d11c234162db56a42dbb388e1befab8fe3b20c39e53de10c77442690f1ca49a007b060ce1154e007785fb5ae3ffcc810626f6bcbe70be5628e19277780db1ec396cdc9ce6e8230340d69efb28d737142903fa385a598964d37759a02b2b8698f6cc31615d3bc99e1318ac9b3aae5046b04eebdfa86c80ccd3e1fe9eedc186eae7d7a2051e3a027ee5e55760f0b50ee7ddb6d5cea78ea7c9b5504fe27ea304032b80224c3014c308e33b42cc45675f9d7d09eae3a396af79566ddc95baf4fee01aab90411e27c6f552106425d09d3eb2421edb6c747740bd8b6d64b46cab274bb28260bc4c652105342c325a9e12292568a12d95921f7f3070cbf0db9831340407edeb42b3799412fcb6f7c4031980770ff7f153327e3fe230a4236d92c1a4449ac61d57f16d9f1506c1f29a22aa4b0ce92f1690b120a018a941b363a11920310514004ff777373ad7920eff9bdf6de55439b5712fc0d48b95e9051f8eb121530d9fae64a60b93d91fe4f4e2218fcc8c63406397c7ac9953f252e6712e4d4b2099a7b4be9bc63219c40517659e543b1f0919a7276a89409d67145eccf41d41d70787f0cecc6740f4500b9a4b5e86ffc871a1f6fccb1e0f9c15a2b27ca6ef85ca74261940348b0df4b046b90e9ed918faf2e2999893b82667c19e038b0c4494d430131ad9dc475123fad5ac63a89925a14de16b45db7ce3c696a28ecc3610c968f3e340b848add2b18e5bb362c6d8132056ff9cadb9a0c05de31bad94cb2147ace63cf7f8433627bab99da0b884797daecb667a36472a5b80df6b12c05aab5b6f0463cfac01a0179e21ba7407b7eb9142ef8dba6d5f5bf45505caf48fbf976ccbd1db90597d82eb39ffae2ab2e496d85fd81c2f0023085c571116726dad1eaa3bbc3f2b1b96c0119c2c17d17284cf1dc9201a17f460c6822b505d05e623dcfbcb01e32b52b82be71041f3bd472aa60da72d85295a9ac010bef20bd43dbd13fa151262dc9087ad414c7b913c217a3ab670e11233c33541a623889ac6c4e979c24c45a030dbf018567c9c3c95dee0adaae1a4c625525834ef063f109ec77610aab9e98ff3afad3b1190d941df425bdb0087274538f5de1f67ae06778c17b3017b251b6155b609cb5d669e6ab3ffc0abd45ef737e569a18ce6ae19581e8712c1bc3da3000e5597e7999266ef9475b2849ce63842262f45b83510caa6fe233d66bfb09a010771547e96e0f242c7251eb1edf709ee9f483f8e3f3fefa9b9c72153b77553717fbae39059308ae049ca38ddbc87cf2ffe4a7c5e7fb20033dd15be3c8ec925c6859c34335ad2b61f86c90a8be829b0ffeda2b33b51db18b66001f449cd1fc327178183953da436a73705cee9557c7c1b0d42955d4cff74a7c283977e7dfec7435afbab94dcb36365abfe777be2919396ffd338034008e8beafc8828f58085096bb23d3004c23d24a0400e8ae0b40206c456317d18ac195365b2372180466d1a128d8d73ad14644a9ac0761bc15da61525522935236425a83de1fa9a6134b1c4ef7854012e321b78ab680ff5c4ea50f5bf31c745a6f3e9992f0843293b5c41bc92bb819634425e06273fd42b60a236f7207491e916b396130d0dda02518398762ccabc5b1d948b39aa51049db0296ab429a83690569daea7744616342732a36cb4e2487df9f8becc06e45ee7f67252f13257352c55972deb6e8417cae93a60f5034f74d34e40c699412d8ea6194f9e69eb1ac47c11050e60b4644909e91f0abc77ffcb5804d1171a1110558a1ac284f7c8e20c918fab6aa9bf18edba7544c9f1cc1ecdf01620ff93da83aca9c1205c789fe96f0a4244901d64009dabeca1775ca487edbec244209c975b31675184e34583eead8ef7686d66d261fb1b5953be67e8ff33c96b83d8231989b9026e63485c0d1aa2710f51eee91e185901ca4e8da3f4da4cfa7405729c08167744b2ae65b92018831c03931f4dd32630315fdc54eb76068e543efb7975c6f6e4c8ca18c1ed22b473a9616595f6611b7b1ec5dc065fb6127ef45225bcb1654b1a0524e02256aadef59a148449667b2b543be78594baeca2a331741cc38b74b582ee490b8cf4979302e30bac6882e796af5241f6d61a79ff614e81697f0ecc6c80e3b9615e9a0475620c0e84a491e702e2629322b84aec53493980b9092b106352a39c16457a3a3f9f29b161690c9fb5e9be10fa42400ade0b9cad996b495b875355bfa56dc459637586c0c5e4d31a57ec7781873de95de09b10175a73f872bd13bf1100f588ddcfdc35e59ce21f04f4b61ad5628c028801145e85b64ca7ed6845baae1b82c9f06f38d1f616f019336ed5a69581d7b83589b4aacfe36cb1080343013ca6b17a670b5c45f031fb1dbd20ae857e825aa04ac44f6120101e5e9fc8c97b43a40b7fbd3d35e3e52f71d1e11814d91745b5a871a8e478503df124615ac5f803fbac6b21fd10927ddcd06c025a58535d756373f798c544d38c8eee8d2b4e3139ddc00a438e99c4d25cdde1621591408c95e7766956b4cc482be37705b705aa7402eedc70f66e01e63159ecb2ef2ff83267b4ff912be6109cf52c8df8b7e645a0ba48fd316190ad7114ec0309c9995420aa4ba168246899e4253024919639fad310a9f63ab83ab8e9ecbae80b4662d4c0ed487336dbd087445c197d4ee8be815cd9455602b46aba828fc570867f3059dbb4550d74c6f909edac69bbae6020e4697e34e261fcffcbe5b732566d63b1def296c847658e8d1c4069edd5640b57a7e8961c7900c0d95d6150d680744e2ff6da770e176bf85fe3d1559cf235c869e85d2198597c8df9d753b1f8bc807a2a1ad9db59e375149eb86a3427e6dd5e512cbfece071150dd64f6b3846171b7b968826bc528491805df30bd5be0aca2ad61915ff0b58bd3f1e0dd88251a174ebdc8694343626db87a586fe85b0402c9efcef73624f86c7b94e19da6595e4a4b134d4345c16909daa5e7367517f58771f51e9ea6252dc0292b4a16a45a38c6260547ac6b0b31107012798455ebe29ca07a33eedcfe0caaf5204a77eb6530eb78c2f11b2d6e3785c06221b032c8c4ba3cd1d58a83af6ebb8f15e1046a38805cd15f0022bf4175e0a5f38a3386f9a392c4e57018a8e4e12b2e187e81c52470bb5b3b648145b23a41b9fc849298d339f0be4436db991fa11cdda53d02d589b15b9583c966dd2278af1d67cacb06839a3ab76c3be18283c91f55a453c9b761fdb60994a30db8150979066d02622f7a4522c6c0d23ef228fb31c2017774bae860195a5a113804049349ba6c807c6e1d86f2807c56584b2555ae8830cfbb15b61dfc2531984a0fa9de85ca6bbd8f5630900c216b7ad32a9a368c4302aa21b56ae88ede1cfa6ed1351765a9ba1f637a3eb547704cdb8b3bf7ff3d270f86a25f6d19be3c7f22903f1698796dfea099f79dede553858e7fa911a088fa0b4663792eb763e76349f517507891a5e8fe278672039974a458ac98d0df14fec26d35bd881235780b05942fa6c82ad3fb824b4cce55d368a0dd75fe95d4e86359f9f91efb26644b02267932395b3bc13204e711e83cfc128aaa647b92168bddc88720ed10e4d2d7b13b75c5553b5b8fd51137a27174c8d968cc59a6bcb380d74e1999df77d03c0ca35de3c57e02176588a2f74f6827f23607f613a93de8e9d5ed336a052c04d77872c3030bb9e74d658a675fb5478113a46a0f0e8ff52f39a7616dcac79a0cbf5bc428524674abb869d85d6eb7ccd048137e4d15a2768ac59e66a7b4727894b6b044d126ff4da556149044446cb6b0edbb3da1d51fd3afbe8c801501a9c0eda3ffa26d47a1a177b1f46e4943a5501c2142184b2105975b8d46751855d3f8dce60ab11fb08443212f7737fea82e236c360f4dfc57b3077036d62daec6e89ca02cd406a0f1b259482b022ed0a827ce0d38f3283468386ea62d0b2be48d508b8e2a2d91e62f8751b669ed17707a13de20f4e63e9030ca7847257408fbbae1378a5a2a9b84432ee53c61e25599a48ff8a7b8a95b7b57132e03e9e64ae235286fe2cb618a293d1753b9d39298ca351f95f51b57d9142539b3dccc16209a68b8db2e0969caa66d2cac32689450cfc4c9ccc00026e5b56d76178fc3689de777a9120c7281fc91ee51c9a6d384b904ce4098d5fb4484b290e4484b951af52af7517260b08216428de2201bc2358659a4cfaae667f4e84191aa26910e8bd5556e14e30cf6ffe91d77c726a096452cd5bdb773625b8e5289ee69f8d832a750759b26b998d45a0b969344af92aaee5844724d524b904e6f7bff68461b3b4aaa251626b514b83ceff466e9b5f4cfba2cae0f2f7548e7d16c45b8c7eb27df6461219069e6385d3c91bf32b183f385f29d670574d392c7ec36048c528c0564d2dbc553c0519dfc0af29a22e631fb004a9cccb49d554c07e21279ed4731f6cbe0671528267de9eddaad5f47f632c40cbe04921ba8f355af2aac3553d6fe94a7df9432e69c987d4294e1ed5a3a7465d0ec6537e996cd75f2aaf8919ece07bc09bc5e6637284d7135ab369d47e47b393c71b6b66f191b4f2917b68732423d14fb34e52717e4d474a493899080ca5e0625ef5458c2e87b55a8cf2f38f7a01b278ac9ea8d5f87e697638b0fb66a9bd938ba00a30f47efff98c3652e5669b231ed6ef0ba01705368a744ad0ea6f53fac22f67dc077e8c1fa1ead29fec7cefc8a6695b1505fd5473825c7b50bbeb31026accc0f48ca6d5580c616261f02724fc2a3571e2b1435953c2f172928a0634f35f4b7b4b595c954c74c5aede9900614220001dee2e5ef6386da98ae3a44feef9cc3d8959fc8c347c8284306bde161284980836cc9ea6ca45eaaed779c4f17304bd7d427fe34db73358277f0f2472b53fdaee3bdd105ef094f498611086f8d5db119b281708cf7890348246c9016bb5294e3867a7c80805910234b47e2e7d89520948bb9915d519e607e2f6aadd74468497bdb515cbd7232450849590a67c7147dfdd6ddf4132ae9b578633c6a2609b2d5272180c8f0a0a512362e08095a170c4abcf2b5e37043e790cfadd192b296856e8a22680e080dde67a471a3de2b999effe7bb1ed983aec40755b2b38c23437228e9e6f17409363e81f87da6e24e24dccc9426c1ca756e68818e82579675d5b57794bb02340d653139db70cb9c40578e31c86bd8606171e508b421b02b204a6c605e0fec4d476c206a6ddd6e5bf8d0bf74915e24b4717023e7380c17c6a8ff92806d3388e89f10773f5553b4bf6a01ca27199b93b41584df058c01a9ed96051b2957472ccccd91bc90aef33c583f8341de482aed8c0097954abf08170977a600d264b77bc58a8cdb82ecd8595ab748c2fa589002f7846686f9dbbf7216a47bfacf59ed7b54466d0edc0e80755eaed0f65bf9323d8f3a76b6ed591cacd000f3792be5ca8e4e29b2f70a37845009065479db5397c69c9a9828b5b0edc664ebf21897b2d42ed6c33f72d8bfb739e99a416348ebbfb68f27ed3dc19276f0670c4de076348316e4c3cb8229b226f6525da8c487f2b62e91bdf245d9897e5b0e3041c4fa2338e5a7d8804bc58983a164b9748d50c6174188db6a28ecd0b3c50c45c3f2c42421ab14b45e26bae4b177265a89a8f20fc5492e4b4b3abc699b9a2ab2912964c0cb1f49ab887b6ccfa0a84960c5d2a8fa13f5eb8c3e2e1fe26252f6d315dd25b17f13b8dd7cbe52f07d223df207df631ca0607d9cf413d7a8d703ff15b75dab7b0d1d1f040edf58d511842896ba6f1af7440240b002eac9d44166e6f9147c259a772aff427d4ca41007eb789fea1814cddcf7aab41815b3ba4cac5027a0308d4be658e496270999f7b7d8caf786705c9a7b7b7f2f53f9f35ffa9f0e62f70a195efe1b6f963ce4b135b5baeca7ebdc252663020afb9af731417537eefdcf05895bddeeb79c467843a5e0d392419930678249692d5daeb663cc5e1531be9b072c3e695d662027fcd368ca69be134b72c18a96808c10abd013c3da3c345a32b576e2754c2aa4214abeb1569efe972465770885364b7b2f0fbbf41866760500e9b06897f5f0a463e69c18dbd3f1b531e12674b2e62992650b75530d3b6c62afaa7a4bbe0abe0ffcedcb2ec1f980d1a25d79b79ce2f93dbd386953e5b3c71c96d21c48e2b49ee1ebaa8c952858a597f3b9fa62ff9bf99c2b6a8be93d409ba27ac9dcd676969e3691892351b14cae07064693fe1f146a6391b916d980eb7399ab7a4eb2153c8f8191596b52115bf77133c85430af35626ceeeb2105b1730a1f648bbad418db0e176c746cd284fa090f2a9c64f075470e5308b418c1d63ac6515eaab429d7cc879a56272c60ac7b862a5b6a6fddd5edb115540efd05e0e60bbd327659f5b2756c18a6e4f542f849c28a37e61bbcb6b5eabcee4c18be775140128b61ca387adfc9c21b957523017bbc04bb9860bd329a8cc566835b431e3f2c17c96e08504aecdeb47cd78f0b23964c6697ad9f877faab579e6ba64ecceda28cad76f870987b9eb6ba9274f90a1c6a3e0e98e2857232b0ed154276eafbd3f2ec092899165b6afccdbe26501b1f6b637d8ec84dd652e048eca0204aadf32667c94e43690a6ed0cff799b2007a4ac64ae7894253d6e9a8aa47a7e496fb82b0e72b8472b99da24ab04135531e2b72165578a7ae5161c51e94904a5538cd0d0c0f5fcf430cbf61cb3fba514648f08c2e63089d85f54601319cf23796cca82327813c1315e2cfe7c236de06e13d1ff9c76879afde403f84e48d2d5550ded84561d11d9657918528bdfb6d78b8426e34d247b21728ea59ce033c50e701b1d2a82f18a548e04495eb926b2caf29fbc1ce2b633e60721ef0c735a705e7e69b1283d26d9b226b90019e21c61b16c4e2a805346b9cb7b55bff26cd267cb6edb2f0625994fae232beff89b24b669b083d9929e3c6f9b744d640903ee57b4eebd6ee51e51055341bbf0745011cccd757b39c174164b5f5f40f110f70c76f38644849be87456c1da78b232cb016fd838dd9092bbaef1b89428ecdc515ae26042ec74c710f27b91fd47adee4c9eb05aa4b42bbdccaf0cfbff204a475a854e90cbd1864d2b56f19d2197826ad77cbe90deb12ebbf123673812beaeb56dc9801450dbb59b3e2149555b1976e245b57e6702f8120da5b2ab39254227a6f4e979d4392115a905a7780a5e4c14fe62b7483d8d1d4f9644c75ef16059c66c4a84bb40a61eaecf534c28224edd3ba5c2d3b03f207d1406c91a260025fb2bc0f00901040ff873b5dc3c0ac931e26b2ffc9568f14d567bc83b3724167ccd8f3cb5f0746c6312ffcb80b0a9fef974f4e71b21b6a4c064a343df3ff083555d73b0aa3b7ba3681924504db9a77929e58384c820f03550b7b59a4b9f7513521592bcade7380a7726909ce777b3ba4df6192bd80caef94f51a2c3c230f0efab87b2acc26cb6541b6512b7a3a8cdaffb7de1d08b3fd4e6e242b20a43236d1e3634b644aa9f34993aab6e7313f302ad6828f02b415886767b91cf6d7644842c6571fd9449bc4c30cf2779f8f458b51be50275b0905c11980127702a4597acda8ec680bec7641bee52f0a2a011216f1563169c060dc82fa53e24d93809384d0dec201c097b5cf716a639015452e68ba082ced2c5d64e2fe1d138e50544a14201111b0a85e0ae42220d6c3d7cb9ea14c98a715a4ed1261f243eec2ea2faedae6d7fe53b4f503468086257a86d951fc2f85f97241307f91759189d7579e17ba2c3f7ebdb904fcdf55a09ab60ab109e963c1a1eebc147245acd07143748524ceca9516a81497e306e6135afc1ea684d62f4d37fcbea0c1440524d04b2b8169d1cd62663df2aa1b7a0830a8cbcf9202789742780ad6a37ee72ea9e61e127a37b9baebadc4bfd7ae0cd7aa04844b199e8807829c5608a8d335d229fd2b16b43230c5b19ae1e500f625be8b7279c2f29cf5f1d2fa4db14549ac6655a1626e23cbbfb2c9a0df1ecc81c677f838bc5806edce64eee259be22221712fd1fc216563fb202785983836f4796fb1cad7ef06788a369e52f3220c1ca59060b39a29aac2ab06b921614f2c089f7388d16035bd114a878087c3501eafa29f431847eb54c2df46c1be084649ddfb4c14c6a565f7ef4e21dddbf4d9fc235ed9cd51c0a5abd858f8cb6b7ac4d1d09b61ececd28de2dce89dc1709b260621691232c9fbeed4778478fc1db03382dd244f781ad41c2c3530d3a2038b1100720ac31d1fc663bda1662e3bd682508dd0fc6a17d8f511eac6b5b4f2c7794117a639bfbbf55b42a971c4893c8d31ab2f451405d98762a90055c9194d263db2c7b574e3401761093e2ca246b1d3f39937bb76e1f014dfa7a0160a8592a04820c4f2761be63fc7d4940e3705c8d17b0a77bb44c5376d652baa45042b591de5e7e60ee575d47cb14a0e9cc362ed4d50367846fdaee560e0e4844374b16f6873de0840411698f4cdbaa6482658bac406790e57b04ce034cd5b10169bba9a9b4bceb9e0275798c72c88e8be57c35c705f37584ab3aa87832e8fa155d9c1c5b4d991f0a01f1d92f91358b7ac621d2f7d160e510c776831b074f7a130286490e04634a00c3be2521fbec3a7920bd60955fdb669234bc5055a1639dae9535b325730f58577ff2e6319c38ce7bc74777ff601e8379dc00c4600d55fd9e8d109297348ac777e9bc33566729dd57851d6680992865153a000a5b0a25878cd9dc9e96587e77b24bc890feb5c6a57e0505449c6600c0005d89507e076e48cda2f922904bf8804a839aa85f8c7d8efba80d560c9af577f3a1c3c0f2c3b690038df5937789f238fcdebf0b73445c4afc5a22ec39b1a806ac849b7f0316ce30336fe0c2c9df2791e919502be8b240fd531f3f2705c8d53119bf4e6973b2c0f758ecd6575b427682965ae66cb276051b94825caf9fcaec84f88e8984f6e7874ca1d5f418c459e76af637d469be9e1615c3b1157430b674739db009895ff7f5c8a04c0158ff271022961cdc4e62e2d81f619f6718e3eb69c5d06b1ef480cd51e10a14026f7c550728b4a89dbbd49fb68d138714b984edc78d359284ad82305738ec5309c233d1212e9633e7680b1cdd94f4bacf69da8f8727926c204970413a5ec4d24252b9de2c3cab0dd888495353653306cf7afb519d6925c2de8b002a19e2208b5db8d15bf2052ed629f9df96c56b75c959be794df9244b655c72c032ec286639200bbab60704adb91f5d9640325191ffd5d9e99094e987d1506cf40828f5f7ac8f3d5dab4faf41358d685c70fdf28316ba17cb981c4233ac1e22352706f8fbc9203b1cf67ee98e17b4634a7350388754c93a85fbe3fa1178eee32e7d5c6f458ce3bcf6c08a9a39aa4925e98f5df40ff24545ba1142e28c3aee037c0c71cbae0255c5062c58ac10d6edaa9986e00242c70bcf000a6d703a9fb0003334a557f259155324706c1cff2e148d6d1358b9cb44711cc7fc0842b9a6394e73442a2672265fa8062a53f50e72f641fb7ca352358664f018beabb1a0f7491185313d789d946ae5b074c5f73f011a2a7b10a13a1eb3854f8c9c11070a727dc99ffb8dbb1f04333a1530cdfd0b466d393eaf3618a007ea94e6551f7e220a34e6ff5b3ec23fcd5fe0fe22c56993320ecb2a7f6a85283ae94ab0d2f7f23566236f2d6e84a241680717fb23676556e9367afb96eb433b1771cb303d30d6ab28127f06255b526958006d4f788bb56f8c28e351b5a0ee374a03323a3244df2967d43eaf0015db2b9324d39a3e13c198f66cc9849e311a2bad3f5c1af6712109434ce6528ad3a50561f92d85f48e371fc396c5363399208e47d3a8072a65672c91b6061af2e229974aace57ab5f1493a91d566595943df293f48151014277a5eef5f8748b0d825e81e40a11f7262824dd7bc58f00da403d4785eb827e52fb8f024899f4b8f649195a3ea8feb3afaa4d787cbc9864d9e2af6c39b552518549446afdf3a220aa45d263bc7f7262061a8c8ae85ba77f024be773f48ace9b5b473afd76940817919e9f3da228123754bc9c8f79b3e79bf2c96c498f04d72b091f1ffe7f20f5c9543a2ee5cc87b492dae47df556a307b548094053a138e46b371c13e35436e81e9656b25929f7f665b87b43c8065874f5c1784f842b68ca16c87f32c16759cc32cf2c40cd36257c5ad89c451ca2924480a9921f0f27f81acb5922ec478426caf62920bed319db4585a13faaaf48d4130684fe3dcdea35dcb719474382deed3b5095c2f89dbd17a5301b1f2df49063dbba8d1771ee03798d9a1739568d94ed98fb9e42912363400f6bd50183b96827822879569d0f5e851b76600b8da7e7d2674b2bbc36b1d1f390c866ffe964d6a0a1bc147530005820d198e8fcc165c378a4aded36b6152f8c7139259727d4404cd3e4ea88c8497eb935dd7ed6c7772f8b4da0f2fa4387245a821fa22cc7e1c36f5612bca1c55504455b78566a305c916aa2f82749c974dbd6a0364af34f0afdb18ebce74e9e313af7b7390fd7b447df08e58223270a60685845afb5a1b1e499a8750abbed605bcfe0d6ce7184dd5603fc3eed81aca5d92e7a72e960625db846a97be1b493eaaf431b994972b56db47ed74161b846865537c29bf8b95fe9df7f689927489b404027b0345eb6dff682d475358ae7c0138a4c756d24a551134bd40b2dc436dbde3068a1bd8c4215d9a8d48764014cb923812454be4147a1cf1a6fee27a93bd722ad7c96b2f449307801b7ef59d4dbcd1fea422e36a4f600c2d15127ced3a74908c5000c557345b94af84b61d1aaa048df9bcc342390e8014838f6a655718a746fb0d8bd450fff2a0ab42e8df460f87727a43bc33b1b6181a3140d512e7ab0687e93fbe5ca37b60dfb452196ccead0af7c219a838aa2ec54d7bdc4cd6cf7d47a22e0d9630b53d41a8bcdfa9d0e1b6563afc64f3fb3157b3846512c4cd06267b61fbd3ee11ff3fb909d202cf548c3237b0382ba1bb71aa29bbce508d8fae67791d99c5011e92b5264deda7ca4d23b1f21712c0c2f957b2a9da0ab2947c9e198e31050a340b434dde52dffc28371e99eb0f1863282eed53431a9151a09be04d315d984abf097176f68610168364ef51bf662754877db96406378a205f16823e34887cd05724b59474a35021348a1393fa7e255c061751d4525121f77d53ea4868844be3893533dfcc1347f0ec881ba60a1baf612b16897d9f8aafe6619ea0066fcfd0a5300fe92bf9f0ec240c2635acccc4e062fa5a18d8ad195bc1971f5eaef420b108085f22b908f570c0d4a76518764f193a69f66c4f2e522de49c80fb06a169c16adda50a0afb1da1601fb3886dd5832d3c26f5287660c2970a71476f17df2fd0570917b769c58ad8cc80c36adecac5deae9904b8510d224d1ab809b5d452a57699d8b5379ad64b7143cf8e8597ba2f111b6ae0d38d96172209383c3f5dc8bad5e983f3f25b5a3ac6883590408c3831bf5349847ac6b186f2dd4f2112f13349f62bd105f5c09a5fe6ac51a7e24799c982c717232cbe3a81248a08cfd7acb10c735aec24a0082649f08cd43da60526a0d493b2261e75735bc799a416bbef1e7d3827f227a2adb06d467f866e25c2e117718b4f90480292fe610a52a8ae29b950fbffa458777dc60e2c12be805735b8d080004a769d5a91bbc3401992a540be6f8862a204746621999510786bf1af5da0e898abd41a2cf3bc48866ae7e514bfb45a18d6bb813b0e27416f2c23d356a6542503942fdcd92ccb23cb1507736ac436166ad260b043acdc8adffd15615bffcecb3faaf72c8aa07bc9454cf54b37d476550244cc69ce60e2245677f0ed474d4e4d443d78cd30886616a9bbba102f19a4da82887514e8ac4df4f78ea133cb3b52ed23523329cc0714ef2109365102df57dcf0cc58344de09348996bf25cce60b639c6ce216d2b7e37fe7da6aeb7ba6e509cae0577b95837fcf127fd51328e4dc88bc68a60380e42207de3344efdb29c856c8606a9f6d52cf95dae0b05b6a338a8ad1735619b810ea6071dd3784356a448740a6b060f85a2229601d1687e4c7969b43fbe56da2debd786a5a5c6dd3af81864fc232ac9e899ff8c300a436c1d9f0a0bb54a91ad93573bb5723894ac05335ccff8b02623ae2dce6b77353b112fc02e8c7d85be7039f469e87c2ad70539119804fd4d5eb857493c9031af580baae2efb446ecdc2df47fb6e8c41374c75cb4276ff5e86b6a8d60648c0885a668ea7f88c6e85de170902ef7d0205c281cf68a276fbc781590e3572714810fc0a5ca64008d1a64f4ab8abc8e9bf4da00695579b9edaa3ce1241f9a71a12c1a9cf2cf02013ae3af742f12ae871ebf2a1442d7a4639cf17c5c7ed18fefdb03938683be985a1019abe779c761f1fee9fed3b24688652aca8d1667c9c7568841ac0efc23cbf7378039d4b1558f90705cd13a738fb84f5d4399bfa54af556a59ba68bc211e9872e07b34f8a335676db2c4c4a0eb03ea47ca8a68f4b16ee7230ac3c09c1ed43a2391fd81a8e3eb8ad6ff1f6f8c2c9078ee11ce81a75cc3be3d8d0df828db9bb5c3f61eef8689191f948451af3a3ba13717552f025fb0fe493b645f42c5ba84fa459b26992cc2a61761517a18bcc3b0ee2bad20967b1b3ebdaa4b91f643f642169b1100f56af94d987f5bc70b3047bfd7d27c400478815d633cacdfa1a1fe49a9844d459b675ca2e3d1f2a5e1c7651d55d7f4039e342b85e8ae752c67a9c736ed4ac4085150ec3d785b402b33f3775277322dfb6116a16e7c8347a432cc562c6c4251ad09273893334c231f84ce030b6a77779b9b6f36b522c22d398d085f8fe60313121e8bf2d1e1456ce65ae8dde45bd7d66654d7a4525edbcc0fc9a4ac381c45167f541e01b3104014337d934a554dbc242a28632105f290d28be652a63c4d5de15abe5caed3fd88cccc2ae0866b2f249740c805c40c00225b3837e81d8948d23314225af5db77651ccd4e6d38ace69016148c6112f6a64e6ce1fc83d29cd472e72d6cd0fd5817c01c6a483dadedfc25210ec64dd029d58b790df4ac6a52e2828b3d5be3719a613d88cf67e540e5a4645848c7ce3c3a271cf1982b86306ae24b9fb0f267afcfaed5111ee0b65d8da45e8374816b5651981cd319b450224e02ed91bf26260a1981d332bb684973557b043fe36a9bb21abc292c9f22bd90af30528c0b02122a266973005579a3bb0e1098ac3f0bc4fb889aa101411d5a36f8738db1882b0689122cacb818de885dde732d51f1140593039dcae98515a888291f98e3477ea14f924cb8dd15852dacf98a4bba6fb851f2032c4449b92c635593bea124e4576e0146a3c1b2c568b2fc9cf9fc5ae3736dcec0e5f6fbd92df221209d2330218d1c53d139a9405088725d6d3804eefbf111772bb2555a919c4976691d0832791bba33c1ec7b46755656b0d47b0179ad79e21494095b3676fc1d8e7803eae83a5fe4de5ac979bb6503d2ce8144c43cdaadf084ac2419d575089f4b72ba33ddb0f052c19abca483bb57094c0f7485140caa24b1c9a946199a091312f1c5af4b7b2e9939bc5d889541a64da7010ffef4f2b4dcf36d882c85c893601810a76269b9f65c38ccd18606253895608217b2959412520a809881dd97d4ae455c1fc07fcfb227a1cd1609a2aa29042034f5615a1b1f57a9decbb385b95f58c8894187eac7250ee28dfe655d3f2e5a233d80ce1aacc3854afa03b7f2604b15017702cfe81f754a5cf22cebdddf8fcbf45637ff79b9daadfb33158b5ad1f96ba10c6ac0053134cb4c6470338f80dc50d75280dc16fe0c415e33878ffd275928976f418a950a2dab523572333839ffcf6f3f133703c8bd339a84179a46c9144aecf35d00b9ebb0e4cd4093f9ebc8956ccd09ec6aaa449c3b9a9fd8dcd73d3fe5cdd0922c2dd57145e1b18d11a649a06c3adf8679b9a81d800cc7877041a41ad2e1c828847ea19bef6055375d0d0e7212e9a50c8af29afcb70c9930627d92af7fd5ffd0a1038e91c0d8da376325d51c3be710b296d440d1d63b727baec32227d21a08a8dfeeaf45ab568069adc22e59f33cc9878716c156f6e6c7297da8ec219a6030a1698634dc90cc38d36a9f9db9443c15a03005a8301f878147a28c98e6345bfbe9dcd4688bd1cfe7f71f05b3d98a700c459e9a78f723909fa2de60aefb0fef9b7afb5c2830a64dc876db131bc16de57d3951dcf78056a9bb285d172ed44a28ec0988aa4da3a9c89aad1256184c26c48106dd26bdf003d66a18e26a733ed5fbd81506626d4158cd9cf81926cb224c2dbe5fa26f5fc744a78e65b3a239a76ecbe33242edb9971afde947f52a9a722e281dc1d11f88d7aa5e78c94beff23d74519081d72c9ee897c29b905a02318df38d1087b0f8b69e05ce066b004884b19b82f9c691b37d4ad4945285f75ef054c1fad9d40ef1f0342b0d4a5330797985b9d3cef8302152ac18fea86ae4ab61b901d493f6b715cd994a411a1b25bedc20f00fe21b6ff0b487eb714cd8d8e0e9201748627df55435f740234dbb04f1e07d3554651506dc07233f1a19aff2759cf59711d2b44ecc099a347b8e68f3a58cc329e019230f36f571e520564106759d65d2e1363a46bc2a64de6c73eb4462c37373a6f4aad0400c5c0a26040a8c249ec39be3e6165098b4b8189189be927688cb20567ef18cd58b158840409ce5cab40c3db31eee2423b46641a270826e68bb14a191fe46d0a5f9de201942350f4d059d5002a60a0e163d4c684c2a08030b84d003a1a1da47ef207e101ab1121e3156d9f1b996c8350a11570c11068d8d0f681e1a153aa7b021953ba1fde8fa9f38b87692220a3264c7506e41805c6ff728c931ccbed541cc41d021bc0af3ad5adf9e311d4ce2cb42f39107eec14889d539e58d55f8a689128a151d00c432945e9f14d7bb5daad835114925cf3a9071cb26c71ca932091e867e7d50bc920611fb81217ceda3a7827887847aeb65d1fbb7d0d2b18c777f4bf580a2ed9865a7d13542f2af2c04a66468fd4a8cb720370b2ea0a2d03d9421d8d0e893dfab33321fc8c3c85521c494a8a93a004bde4f18c541f21e1d00a179491cb638ab6cd9b0450d92fe278ea8ddcd42168564defd2b151a251645cdd0b7ff40333eb5f833a263ff462d80c0e46072aa0b3eb0ca8f41be4f944f793b74a1258dd719b8a8ce5baa95bb2f5cbe5148318606080dbd413f02e1ae0b0e530818b4e4b27fe2c792b56eea135ab016db72b90b50d83e9a6e601bd195a169d46f5eb529cc353fd4962cc8958352d77ee132d4c18c2d4a1cfa5ae21694de20897053e2a29f15e46faa25b07c43687c9d514a30f052887f0806aa10cccd55e2df5346c1b9a467903b3b867cf276228746b04a8244317943d04f31625400ed533b49575a80188f5b9ef5bb2399b62c05c0ce414499f216f143cf2db8a132ebcdc24b2b03f745cd1a3b665ca6c240e9562075829660d1a72bc0d6b3fb8a448c138e69e126c598ca892663d2275321e9dcdc35238729115dad4a8e222c47454cb7eadef109ecb5348e83a964eb2cafbea135080d09e34091c868680d6d62688d7620588d06bff9431175897b9109eb6ee35d6612e024c224bcda4b385ec900411f030465463c3cfcd303fdef1a925f05e1c3c8d205637facd774562c0807145f7b0e5e2274b3fa8dade346fbe499177d604c3eb901eb53b9e49c449708b0686be6cee61269dcd6f5a4b2354513378508a9e3597eb46d1aee3380e46931da83d8e3396b194dea30459713b5b76ffe81d3ab0edb6b39399d36de8de0ab8a5d08e3f11a9671461f7022b3be60ec71af8c0d3576af6b86e6b1880e421bf3ef3c2cc88a9aae329e03652076758eb99f06e9d5bb8edacc2516a15f63c4322b580147cf77a852c6d4d4d789265510bc57e1e25cce2123c60ab5b6b0f4832cd235f91f50516d3b110598b2eca00a56121ef2d82acda1e67f896f72499a13f6fe20e1a3c093ab72e314742089c21d42af15913c38eefbe771787b2481ca54021b357d7f5513f95aacf590a74e06fa0ece2d57edd1155841a7f4c126d62ce0dfd584e588cfd130472039255698606011187482811a4c99f104036577b7fbc676a50502922d1e34110b28d9c683c08a62e171c0a5d861a32bca5aa3b49c9b886844c76ac53c14ce88cc4f8c5003c115fdc7b981630d437d5560584e0c3596e1ed04713b3d1e5c8f3ac4680624b42f75e46a0daa69bd930e329004942b121e9bd951f320fc3ae6ab0db36e57b20726764af6e128c25b9d83c325e4bab4c00fd1f1a358d8248c11432a6bfa27863afc4d0648ce052c4f127a8c2f4f820dd592dbe549045899f09228a0d1ab722b69bfc448ef6ec2fbf3d95b52c759be772a995db5bf1c57c4ebb04b4dadf6482d214f12b607d56076162070e93f9c0f62e26b66c9a819f62e41d40367b11981ab9b3575817f249a3f12044c8443f068834ef2f6ea670c6939ea3e252cfdeeef06751e20353ca1fe01bf850827576e4de93e3af2f8c1dc5f6a53b878ea7d04a52e3ad2a8a9d0813acb9eccdeb328c40ba7a730a06ea3c5ba3d05ccd1be4ac25252f7c75f27aaa9bc0e8aa633ab46f53296a28549bd97cbdc96a1e6d13330acf359893f6f81f5813889116eef31c7662636b70575083ad40e979fb4ad9d25c2e464400d6e8f168d334aad8e3aad321aabab830453ceee60cb7c0828938f6ef4d2197cc7323aa08010f0dcefa364cd1e3daa4946adc96e9e7b770c36d395b408852774e1dfc661110b15705a84ba285287e149943c22fbc5393eca49ac7ca3b8303c6b756fa12c9d15d1b7d353e989c6313753df1b25d29574840e5b13f123a73647504084d71529040f3dc9f672b6f16fc27a7636d89cc143f906e1f9211ca075c6dc12172b3c3cdd36142b14d437dc366de4f11b41472e3ec371272183939cd875d42bd367933589d4e424b1c426b546f131f05beb3c3bc9cd7be0e47d7efb39b4578ed4532ed9cae2dee3e6f6571d26abaead05c0076285944dc1516fac206dac824180e4bc2e5bd776a399faf850765af10ca06156eb009198b64c94057f3ff9f8684110ea629275aacb2a76e21c76847399557d4a79f3519a1b671d814d17db48e16cd6693d236ac6984125632643b6b443b8156a7bda2b678ec09afc206599744d8f312c29136e7d076f9014a323773aa0ffb9e3acc7f0dc40e895531e9041ac15d59667457c4ed81f8aa042e07904097b57c57d76de84ef11ab1c6085286f143b16f273b10d17988381bfaa1bd2c01fe40b24514719adb29ae26366a062a9664ea4ec68354506731ece23942649f2654248abbcf1e8218e1fc744b1992280787e426f4cdb029701a21a06280b7eb50c0cd988016b651d5d1e9d6d05b69402419eb6ee93f156a29617aa9d1b582baa0e2155548da028b02123414d2f7c9ce0c27a902c58f02a24631149efe365ea0a2de617d7d72f6a0567df14d66214d61ef1122c06745aa4a440445c10ed56f66b8f09152975282c816e050dd52901eaad29eaa15d2ddff98a72c95f92f8b722792da0a99a6c49bb564248ca150c44edcc06cede5ad657678a78b14e6ca475caf5cc9409ce2a6bb0fd2d9c3936d0eb4c57c69a5c571c066d5cf8ca16206177719b4ee40d626a0ca267603eac75021a79b94d5d4050ba4a0766153d547ea6891fdfb6573f7a9f2898503735c6882c71e649c04b8e307436bd205a56fff3995446d9dd1003850fd119a8eec4fe4672e2384c942f05d726d2bc0d8069a16a652f3ed46423a9938890bdc996524a99924c01ae04ca04ec04dc97301c181b731969c8938b286b2f230d59b261480a3c486257979186107183538570126f8c80443d74eca29659086177d11721f2cb4f1043fd2b1762e18d89d92b42bfe01f916a2918d52f487f8502bbd42fc8d42ff83188d8dab1cb0111fb753f75cca99fba4bdf80ea1b40d00989cdcd8bbb225861a58c7cbe48640793f4160bbdc9871f2084ed4dafc45ed2cc8893664d2f2e27cda0ae2b42811c748c2daec1411cfa0dc020c9226cd8f952c30e5574d92ecfa0900023c40213c5333051b0f899cc94a9f74dea90ba3b77e7b8f66706050699c310296822695ece7d2581fd9e3bc27ef556eeb898206c7fc76e843146b6e9576466189999696460f967246119c6087b6a1147289d81ad97ad0c2159195a628811b1b22e5b1972020825a0ecc2221392a00ccaa274c7fc8a41b8628e7e695cec97a34306baacc27e390f439035b17bd9e0e440aa4bd8c8e5dcbc5e41f6868c32ca8e65b7ac39401725acd6c5b53bd6188a880225220161e3b2938d231b368266a6684bf263943ce4d2399f21ffb98e5484ffc028dc74a1ac129d708210b39444826390132b5c809484601ca235fb82e5058bf01932b04c34ed69e0a4b6c77cf955efe57d0d283b26dab71a477beee09558d8e7572204bd873ba4cc711730319b1206cc9421601ee67eaf2be54b306d7393c3c697333cd8fe99c67922d7af4e4f418110ee9e7ca51b9f76b3db46346297c6508d148d188d98356293f0a71b3264c92c212c8a524a7f08a51b32f30b294189fcd44dec57a3f3e51daa68c2f4f3b3c311931d5cb0e2b11f51cf6441a6046761ee701c5eda5c3225f8c78f1e0bf39d61fde3c9c7ff0164bebf8c1e9039e5c2f7f993c8719c0210f632254caf698f8611eb3468fd009d6eff4027e824c43fcdcb4673ea4e77b0dae524252e9031b2dbe524254ab31e9a7fd9b81224347b3949099094a8e58a16262d4e5aba6889d2a245d3ce6c1a6a226a2a6a9a3529352d35357916a72c5db24465d142cb8e161f2d3fbd05684b932d435b88b6146d996d513232459990989660bac2c4c4e4c4d485294a4a2145962c59b2649152ca2d515dc35bb4a83bd6c7f5f3495e0f7881d04dce0b2f8852425639f355f2ed57cdc817bc9c6ac8f66f73cea93de538d6f310d6ff0802633d8bc5627ded38efabdbf6be9ac06a457f55a956eba453e210b5afdd97e3d603bc80f190b59adec3f05e782ebccf71e1fd862eae2157524a19fdab07577e439803f6a463dab7180246e8ee3e1fc208a36ba6becb8b6b26d649e9a493ce1c6084b2dda5e69cd33bc97c779e0c2184137a57332184f0d9f3aabf0db2292e28d6473ce2e9a955d43d99524a51e0a58f97725c6e6e6e6e6e7681c5aafee3d995fb451d7d03bed63c9c3bc74176ca492b07bbed6e1a073b9576b78d835dbd1bc7c18ede6dc5c16ede8dc5c14ede2d86835dbc9bb5fdacdbde07e472bfe6f78ffa5a7d167e789d95c11e20dc20780d9561a80b243608fd1ff01aba8407a0db5db6b283169b4ed12ac8b6792deb578cc13582acba19577db25f0cfafe3a62d095273302eb7bac5efeeae5b37efab8db73dcb356dc16e46e1d0adc5579fd0234007deab17330cab09ac1427777977ebf183d46f79a58f8edbe9ac1c28f4c788c1ea32369241b843242581f7634fe5cf5c085cf2fd91196e003f449c692f7d2edf71995f58dcfab288144637487fef81240166956c4355ea7238c458f3ed519d8afaa8a8c6431b29288ece2083271b144d544e5ec50e52c120eb7a2f0d21385e97e70994a942950d7d947a390c4c287fe30766470a707fe5c4782d441116e6f7b1d38623dd8f9370a7d832f140f0dad40086194230f99e6b564bf19b771c00b75b8bba7f7311243c8c28d0fbbbbbbbb7b06e380df6483bffb4c8432681871a75469070f135e378ec36c43542d852b8f7102fbbd2e7dd1cac5233186629688b912a31433eb5712548a768969a24ff429a6896bc07fe1c5c297f1f48976a15294892e51a57e5129ae01bd581863880655b5b9f5c5712b8edb3815c771def7dc6f0f3715d7d1306255cf712c96e7438eb0fa95e3b866b5574ae86ee35071cee92d8e93427729194676ca9221ce47e8c7326bb1d659ebd3ae7d6a7cdacd7e6132c758e9949c0960d571b49b5504fe4ba08169afd3cfccd3a57da0c2a27856efc3afff503dcf8aa77e68cfb3f29ea4d080db033e5feeb947f55c1240b74ad3edb7c969fa00ef51f9f01b4798fe7efd2387448fca7b22bd141a70e17b2bcc0b3509c02073e55ae44a5b74beecef1e2347e02b3d19ed7b481f9fec213d14b8ebed536cdb4faf65b28ef50e946a2450cab9cca27a7c74309105e0f20c8bd36c8a278610ca587572a137efe73c402f888cfdd3d812d5898532e5f63725d2ed2521f7a6165e7f2a12d95cba55762392adc538dab69803c661ee080204ae3fdc9ef35a5c436efc922d14b48e8bb603d72be7e3fa330991e38fe861b4aa699a56dd3b5aa402cb0f3b5e3ae5c2db2f7e4ad42ff83044f9494236e194b4e20219874ecbbed1a143a75b041d5147cfba9b4ba0f9918fd075efb3f6014b80602f10dd966bc6088b0f2fcc007f883828a5ef3b3c37b0ca0990af524d4e8004d2d593326e737a914188d1b9c8dde845eb535b3fd3b47c02dc4ff26d9f0d300e156e2e13fe205cc5c367f6a6b7c3530336bf07060c7eeb88fd50b8374cc58e9d99c4c6ffc16fbd26088c679044ca0d52869a62b1ad8bc51e5e081292c311b01d9e1a30f83d3076781a46bf270418fcd9f58400fbf18407fc1f3bbc263efc1f4f78d09fde0f1d0f7a3fbc86b32892c4e48a2878d8f2048c611cc4044b1ca14489d1521058c018c6ffddf0f8580c06dfa76f10e0e2605d4ce8f092524aa5cca414252965494a69fa96a543888a58976d593b44ca93141944f9e0e91e1db1bcc418a0a323969701c4e09b949c978d4e8e4ece4ba7d65a757272e4e4e4d0899ea3d339b0618fe088d28b264d94406d2184162b2a9c5c81540415c59220a56d86284e9e667001cc952f51402e14f9c418e111d8037d5a2e972bcef4d8ef06fe8de3f00dd77af7ce2524839f1c392f1b9d1c9d9c974eadb5e6e4c8c9a193a393821c12649943960cc52f2a882cc23bdfd88873f2cf7777771db3d3711741c78c51476477e2630d32c4604900e1d4084c80a463dd42c73ae663836bf85722ecd731560d284f76661ad8ee71778dfcd49b31c628bde891c2c8c384104964581c6122f4b2a9b55639e5eb95c3148354ba226badb3d62aa99cd24d609ac1efd9172ef7fb1d7e82a0945eb8a2f4b2a9b556fe3e2e8202733f577d4188d2ab0a13ae199bf91d638cee363156195d6c16f6af8ccb473de070bf57cd10b6df28f2a844b8974804cd0e1e5ca389b0267085d93112f26e1c6c1d70def9dd62702e19970c192cc935e2c78721b80d198428e3b20c8c1d816eaef5e85ea198c209ab5da64214858c14d62f53218242660a2b2f53217a42860d6c5fa642a414dd88eea14284c451210aa24234c3fdfe466863183bbe66aced9a6ebdccdd61ad8811dab8712e46df629beed267934934a33c6146973cdb06db5931da6fafd3bd514f463efd95e6710f6364e2f478d467793f807418d81038057b02bf52ca6ddaabb40e03a39edd5169e8eeae30ff1c2d486c4782c91a6191f9b0196131326281930e434549449090cda6866a7081954032290da8480c42ac80622f88c5a27cb0595452c684122bc6040d7e88498a2179124f53929016922cd929039a21694ab32a94b82c0e6171d2a02802e529a57406a0aee12623cc30245d4d3c30e214431522581ce11912855d5daec243022f3648612594cf5610558299520f39b880969a6e700508cd886da8261954951d1d9e0c45013475050ef6051fc4a2122b259ce0610ac942214d4da9c2e3a5698b20a66433d8271aa8ca51952890d0a258151e342a4434e127816bb047f7a863bad056c0b98585ef5e8ddcee515b84621dd99fa88454c5e7890c2905492021699911b25f7519771b1334d0385a8cca0f5d1ee926c68ad8a0a81871c3fd98c91bd2b8666ccb06fb59864ae2688bd8d10d96c4a6b0393e682f53f1895d661c7ebff674bc9c7e31e7e4e4b872f939e0a3713a901dd9008aeb4a11d4c74d475ab4703feee26dbf6ff08d1b3336e002fa692eac19c2f2510d885a2ce5d9450b477d9c86b6080bbd7d460f4eadb5dac1bb7937ab7a906b4cf7ea1ea51ee41af21bbe91259febc1e52428a02eab629737d815c62b17074a581d3aefb9fa5542ccd4d4d41630e9b120443efd1ff5a9e73d9181cd2e666a6a6a0a26b9e51d61d0e4a4735295e6b435c3b1d3e0a8cb510ca25435d8bf2fb800c855d830aa1e71b9f272a023f528064230e8c80a2c41b3d6945445370a2b9cdae67df5b2cafb2c6b1d0c1ef3acd5b267b1c987f1a2c8e6e5ea72fb1acd92dce0c61b707098e5cfaea7c2e67c8e3c2c6c4a193d2693678c292c7c78bd09fa5827745082c2052494a27a90e089b96c45055784d8d909e2043b418491c24815435daefc14b96283cf8bcb495798c456df708dd569f35b7da33a5df78ff94ffbaffe06e3996bbc78d1c1e83eed5d3c5c4dc0ffd3be1eb173fd614c89ba92ab2b07ccd7bad5b7b8ff607cff4718de5727c0e27ae580a9fd8bd769d5bfe8b4b7afd331efa2fbea43407ecccb8ff164e6cb4080f5aa67bdea55deea58dd4cbf38cff60bf650792e45ef34d919da21da29da99758d7c15e9a1de98f0bddcb77659552aa9f26a0757d897548508a1ec7e55f752679c534e1999999973629c44243552d588462cc75ff5ddfd80f0d60b23ccc95165b01edfc110d520840544311861419391943052bcfc50048f125078ea65a31f9c0041c568090f45a82c192d71e16e978d96c47c8c84a0849c04d9eee94959d5f385adea31ab0635127af488ef70159f76d17d8b20177a828aec54a31c9ca0c84208151ca486c4cb4638d86075837a44941126478011f24c3eb0c25d2e3a82891ac040ddee72129825ee16d39bec5e4aaf4810191f4c12d34199d7f8af3ae8d3c11e7fad05f683452a676111ce873be25bccd8cccc2c3bca28674b0925846f2f914d26ff7a93d30af6f3a726199488ba6a602fe733b09f37390e9dd235fd4d89543a5022de6449365551ac41e8a1c27e5e04b1d88db37dad7443422a66312465083addfe11023a552a936e03f9658b72e6459d035ee8ddc005f09ddbb78f85ffd9b8f1290d23d63d1fed49ef73f77a6cde37e58d3d3c0450cf47f790d2060254d0b56c32fd3b6eec91c20a7e990ca1f46b1702dad2fbea16b956bdea759a52fa44b457f5b7e3468d7e772930a19e11fa446aa5f42bc32742eb137111a99ef51a7e222ebf406210d9b1866d7b6e62a51376f0d0c14feed1306259096ac96958ea1aa6a1a9d2f0646980723d0c4eb09225e91a96095599132b83e2fa2303484229a544ba740d1389aa44b4b03c3bae9761c66c20720219fc0b440c68f102183801762eaeb6a28f85cfff371003b187c514858a2734cc0db2208d8625512c26a01597a0272bb8618806599420a025414d5b0ef28a285b1ca917230d800b36d248238dd115a574c918a58c423e1f0ec4093eb56466ca945272e480cbc5d59b49191d6ae8f22c8ccf45c0e559182deeab8671f4f39d4975b93c0b93c4e6f24caae856c7f1806bfc635c08c558abcb6372c99f30cfb1c0e40163318febf66cfae51d3b46cfc60724f77bd5b0e960e3eb9852eac4aeabc2c61f4104e92ca5cbb583fdfef321fb6308fdf25f267ebdd1c6953432d1d38189d035f23b90c2bebcef975c3db1f05d8c43e601f0ce9749e1f6e52bfda55bf13cc3c8be85524a39638c31cedfa24da4e9178cb9915724c45c22326070b13bec854d5677cab8874e9ac0264d9eebaa16554efa15551e6cd2af550f567b05b08b9366d45c3baaf7b192525194d51e8c044160c08590830ba100ae75f11db3fa8eb9467d171dc774afcdfb5c2aef6e85b076d51909f6847e7cf6a27745ab762d36c826960cc52f4e44714a5a71e924828644793125a865b7787a564a69fb25654b29a79cf2a7e792524a39a994d28bd4689072ca283b30c6a9a2d49bde08ec9c9be79a2749903206db3fcdcb46b3323b02a3692694c50e41c5ec8859129159133e566228b2228bd204d3f4d72da5d7a3bfaac4f6bb7baf1dcbcfc5c6e7a8310eede3af1807fd980290eb4a01de0f3eb852eb64aa078110aea49e0c09215cf921dc7e9ee20e0b675d5ce42e7384373e230bdbaf1bc79125b0fdce2dc0ae4e17b5b004f49161db3ef6908f824b46f94e29a594d2eea1fd7c27c1a97ca87adb37b68fdfdae8c7f855e9a1e0baee4fbc586105ebef01ebbeb465c0f2b7c958507d237e4b4f857895aeca0a9b450516145c00bcfd3264b8fd7093dd7e99e34c1654c7921a415edfc17e5b2cb6edf447a5db3fbb18182c2b8a25c5821ab29fdf8f0565bd174ab1866fef18c5e6718615167e6476668f317a8cce8e452d62a921f804d44b9fcb2e7f005615a8301a100860cae8ac2f0403d8545a8dac4f040490acefc7cb35591f0b353fe30300ccc8c8a0ac0f088d9a17010620009a007895f505b95c00f8370884f188526d4d558fa6699ad6bab5724ab3a67ea0766cab75d35c1fb81327baaad65a5d579b15677bfa70eb68baa67acf6463dc045b1dbddb89b6b73ae3093b5d37762aad6adab3661dc7a6673c6167161b652a413079e7c175dd18b583cbc1a5dde49ac8fa5420a15ed9ba305eb8b89bc67967efa6e2bc8bb91bc7ba1bc779b7badb8af38ebb1b8bf36ebb5b0ce79dea6e2e38aaddcd05e75dbddb0bce3b3aefd6e2bc0b978aa8e4ae5625295433030000400193150000180c088641615030241a13cddbf60114000d617440785a2e144784814090a3288a82188662180631c600839081462185ae0e00daecce417876157b0410f4fd09b84cc78df1c1777182d23dba22dae1d2b521ef91109543cb3ea2d307cdc3a893225901f9a22f7213937031fc55b149c5249d5d7918cdce37b0daa910e71ed6fcabb02b6f7df78cc57290077e42a564319fffdfad83621af873583df9f60054999430e5cef167e33d0cf618eb3c6d0fe371637dd2d2a0ec7e19c4e0ed41cc759f4c85b70e67c8b60f4507761a9dcbb0f6c01ca278186f02a290fb4d0d134580cb5c75f1564e3f0c195f12564b5dfd8b4e6d4d86bfe0de7f886243439c411da80b58c7e15d147cc02fc6c64d84ca0b9c732ae5c7f1204bf203d70a32a3a3c3b5db500db7e7329e8b5b3d32dd6df3f50b6d5335c52af92d1352a1cbe4d70925e3e75499aad926c7c4c3a8dcda104e61107daf8658a20507795497996d48b2096bcdbc2bda8633f49e9cd016f9dec663f2d6cc5f6dfcddf8077b0bd458af96441eb8e30298c5cc5f73cd5d48de55ed7eb5fc950735b795bf26ea39339ce2207d5985b5e85391081abb528da5cd3516590daf047b7828a7b4fce55731f16e0b0da92ad1356c602f6494226d605df035ab3d6a1f26ece31b246b564db5c9550d7a9f506e9efdac58879dd0db1c85de63853e9358e8d5d4857e623acff29d867ea21538fd4d151d12491b3f94c5edadb385931f99446c070474961031b30fa1517865c863d0907f03404dc0f1c619dd480f0eb7ad6685601f04ec9622b1ec8bbb6d94000b40fe5781e4100159b3f22250ff101e7623bc9d2c6a9961afc7dd501e64bfee162b917b92231ff29735cec103a89c9a41eae32febaea2f7491f9ca22d893da4b56a4a1e646435bf3076786e453add9fb472075114fb26ec49e117eefa39d8c8fb9b0212cef0946b2ece05345119a1d548fe1bc1d7a324ed4a2d40417f60408d2c26acf98e227a457d6298a066c44b7060c6162d4074e4a0cefb3c6838948c60c3ebf7c8f9aa81a3d2a80cb744e0c21e79451588e803bc6b1f096f0625299773e04a4d375558d6b1ca1f1b714157688f2f5779c44d1830949e34d951294cf80b3c9fdd84b2a848617035b5ce7d8d9da1bbe7bd7bd93d6d1b7e63bb628d0a33e1020fc36e58532a164c8bf106925729fc9c5e1a57faac1dd9471773215e70576a633438ad8fed86216a8cd2520845958c250000b128eed8df016129502024eb363c13337344cfe3de3bb18f168a03c96f404899e338c5e53c233c44be66755f9707d39e1c48f70dc2acf10acb312eda8771dddf31470c172e174c4cf4e267845d495979643672f1b27cf20751a0d8bd18c841445283f02a86033d2ff797d426e1fd95af507b1e66e3f492841a53a748403806e8ca5a8075de31b9f4850bff5e4df71c0ac294fe0197faaefd281b09ac0a425a846cd09fabb50825812e3f2ecc94893a7e51efd60d34bcb8a740e2b5bec58bda77b7837b02f55fd9cb04eafec6632a9ac539d5c3c93af1e29cc59ab43afd80b617d6677d4b210223c90ebbd54cc253681a17d10e3c82d13331abdc33e1441dbbd54de5c95d45261d95be2a2bb0148f41c0a82eb147bd617637884dcd8de3aed34c3339aae7a6bc5da16efdd5e9357460e17e783b6f0fde7e2f94b910e0ede25215f73a7ca8f259516d1dfe07cfea79954b7d15a1db0f47864121a0245c985ae1f799c625ebdcdf21cd892e9a53d6982a670684007204623d65d0542d69c7b7eb28ab18131c8e6bf165a881c64394aadf96e02424598748a3f1cba693d08bde42c5b6f523438721057e132c7b74ac37751e0a814a0bd4f0d9f2daa2d489034fb23762c5a55aab835e78f5ffab4e9c20fc05c1f11aa82906684a6f9c0b656a0482942fb3f995919e6c7f050dc9a97d4158a0a430558466dc9f055ad07f887b9db86ad976d8ac5e2da8a247013ac325ec381a3b973d3b9feaad5ee145b554c10ca411ce5691dc0169e5ce3f77cef82199b595c104f8b53803c4a9508b5f759c668fec23e545496b9848bbd03cc1003322e93325e5e9837696ca1f8ab8f7e8dd115827be1fa80b86ad565ae2cd1d8af9b94728a383079aec4923da234b63eda7d6fd75c62ae6375b18da2127116346d9a309849b5f32b2e99dac14316868647c5bc8d0eb324c1891b7601b967ebf42a4fb0bac5a310492cf0ca7d96707a0ce6f1c038157cc23b02d3b3900c2a587f8503cf11e24922bd60f34cb349c1e07eb7c4fe7c654b1a0e9f3f75544228be99027a9638826baf9999f443c50894d7b0e0195849d79f2a48d8a2494e4204aa0c8732c9df8365075472407c4da9245c605d25420400028097d4e2f341cfaf2dd372672986be95c9d0b0590cff5c042112db5d4afe36b6b5073a03f059c43e41a2db0a4f63a2492a2e58e13db6667531bedbca500376d11f7806e407ccc22aed0f2410c445925c954cd74ac9fed816309b2e3a047b4844d62113f6360a1e8de7c217274cd0c7a8a7e9c1b652cd54966e7440eb397eb598296bfc2e441a83489584779f802b96e4a0f755a2d58873329d9cfee910f7833f8515280faa0b394b1942408d1dd22ea6bb144497319b5d5caab80926179570aa088dc5d3efdb557752839a1c6a3da68761a2b22a8ebbe6cbfb1d2f0d50bd72778e6cbd233977911c1b8f70285626a90140babc1012dfe0cb4decc1a09d8671c6a6f2298890d46e43decbaac5785f7fabb31417d6cc35256a0d740668490b0c865cb9030db6cfde96bedd35eef8417de494a9b7aa36b6b4274802740c05f2cfb17105a803bd6028180c6c9ca4d871e4986a30c8e4413729691e54e911fa12553b4f40c8bb343d54a5302a1d04224493daa8e392abac5d4d91e389d51acf201bc11c6a8e816ce6c1972523638508e9096080e8bff80dd295a469913f2770a235ee8777058294a5cd4454d8829f08f1fab5924ea00024883172173f2c9a956cf25648630c38ae64887684eb595317b2a86b8cb9b3e42e6943b522695645495068614de0706ffb6703dc66e1e0c906aad3aff613553cddca3dc0acf6a255968e1ea4bb3e81fc287def58ae796028bd960bb76a19285a070c7948fdff90b2e7333106067c7a3c8ae75038f4891398e281f8316ee462d1a77913f42841d6da692fdd759e46a712d7a01cef864b7495345941c7415036ba32587494b4eaf4dfd711b306fa0e6c715da5ff7278551e0b122556d4475ceb941f8e38fbe336fd5231ecb40b4d7be4855f5e262fd519ff15ecfd89b0a644ee3d04c20d7df1499faf39c62601a17b39247220f24f8883163b76b67041c16d6db92625627dc0ca635d1b5eccd1de44aa1d48f7fb95c0b992900cb28e1e949df74936391bd4e7a8abe05a9dafaea079d72e9cae7a742ba24bf0baccf432d65953446dd59482d9abf5c03ce74cef033c982a7537ac4086e20c2f8dfabbe91af9c8ef51a21649885825eac4c17b88ba8351bbcb10bbd278b8f3f25e9ed72f323b71c6e1d0bd8dbf5fb3c17cc1e7292f177d460da7d6d276026597cdbdd147a4c3801762816505f92c00c296611c39ca156f3ed87d7c4f902551c12a3ca9ce6807cf3f568781e78ff8fa0a6054c951814f6589002d2fb2d2107a37ae5ac3b12fe480e0eff2e22c782b2c4239563b39c5077241b9aee98d8901834178f9500d5e1ae1b256f1296b6ad5e56b7afcf6d1ad8a2fc04511d3e5fbe1b3d4412abfdf2993534e0b96813b0f5ef85201e2a64a5fc06bd5bd5eaee489d5d7079a40de041460801f195412450543cd480f00f27eed20dbe37b2d672f6715b28424b89cb6194ab176c3a787809757c9a76bbe482c18a9bc181fff12033156b69194a0f4aa4e546fe91faad675d33aac28fa578ea9787a2a71d432a674fe966ad13245f4360c2170e50eea65920468bf892577d4cbc8c8c03957bdb1432e97763b938289de3d0a945bb3731a34318cbc17af51c27baf81ff212d4ed01999cd718c9dad51151885c5f35f94e7d49837dfd1cb792363d7efb1aa9515016609d53c86256466f63a9ccb5b4edf3c27e3447f1e1e15ba503a2d2aecbdf1516da289440c7821ee1fe9bb30f7997f43d4a8dd2b69e1a5704a7f8269f6b8a5796bbffe451863474d8a0dfaf65a047ee7f992870b023be6d158a0bd5991be39861bafdfd2aae01bc774431054da096a986522a7170fd3884fd2f8a8403a1b76472d4e9c28eab060960b32c133a479e33d48b26fa29e4ad0143a088a5d8610111ca124fd55b4112fb70479f91312568103a627c7279a1a4f5312f4060425c1ec90dc39cd0e1f2a7c8ffe69a8f200079dcedff7f61ed383f73ec26f822c015d607db853edd49a6d240050fe08324ddd0c93f74a334bd5d171f8ee54eec7cf1c6219f907cf53f0d15728020d4cd203221e2ca0fa116a63c9ba7c57d1822fb1fa64e95e22f5481aec7ef5dc5e29f0d21607915a8956de1088e15360f9d5aa082aa6ac78cf498b1eb8f8152818e2599c5117bdac0970b084c8fd1fba4f7d7be4b8b7c0a6c47f9172bac0c4d3957a9a08350aec244092943a43d3a8f30f2589e91db93fdd3709daf69d0678064c7521e5aa820f21a17dbfdfca8980fd5b94943a173d81c62c45ffb1416accf96780bc519da65a398341aa0ef4c07df1b904b1bb3cd8511d12f060c18ae001761b845d5eb93de4cb46f25642d9bb9820a482ae1e6d33e6f4622a349a91f031881e6c4ab7a5aa08dabdbec5bc1c8c3fb70ef79f24c7114292c26673c1a572c923cf07b9a7c90c899b6dbe48a50c74b9fa428a35ee4b11cf7a32dab4b7fc55aaebb835bd9dbf9f8d3bde94b4f85a1bc6a588585412398e6a1036e81e17c5c7905c3101047c3874f10d85916d0f3c05f889e91bdf27715ef5e13a5f9490cf1e675edc6d2127ed96a457d11ad8bdedaa34a43dc97a981e42947a062523e21ede86bca6960e9c7b8e40c467235d63ee036b8d431e7c6e94411226d3751734994e92c3e86b2ce1f11bf77599a3ee6ab9ab09d96e4c99b45e1978aebd7d245b97eb9fd5351cecbe7761e31641828f80ed757795e2cf7fe629eb29c2580a8fa12799af4843ade173cd4ae3c55058ea7d5d707b78c0da2aa80becb7ad7a916e6cb8f7abc8bfed0e44f306f895644e1dcd8e43c6ab3755729c8f2d1d7d0deee4667d89fe1b909e018acc8c6846b3e3751f4b8dea0179a4385ff015b5a3b194e98dd5595830cdd6aea439fb3238a2a0ece2f37c6237fcce33dc52999b0d12bb71155d622271c4e92f8d8e7ef7938aecfd3d43ebc63f54fa67b8c37323cb330c4510d2d6be9615f56a0217bef0675a2182083623b71741283cdbab1da373378ab947e1c6390516620b6f5be4b0afa55e4b2ae7f5a5144fec99e497fb32f57628af161e4319f5ded5b2a4bd62f7f769ce2d6956e962796a3754743701f4934c87849c0d9298abfdc52bca56f002a6725c9d0cdcff1f9eaa01b7afe416e5e07882c1673d0eff220937bd214046b5463128ac4a4798489aa1728210cdbeafa98e350a9c23147d49394eac0cd2fc26b9578d995090b20c460cf6670dd016f8d7cf51f04597b234cacc4c2f38a19c4faac2ac2d20910de79e05a5224283cff31deaab9a3cce881649a6fa0c890da7ff34d2b86ee63b6d6a4384be978332462980c3f52f9132fc4b9009befe15dffab5fc95a8898c059c8be35106c01f23d75c887b8920484352c60981d8bd925084a000df579b2d56cd59afade4a6feeb44181f2a1be3bae887f7b246112836d3ee971392ec29ffd5a064bd7cfbd3b0878b8014254028d7d68d435d2daf80f60720e54bdb104b133570336e581c71dd78a161d9c3bc16d466626447f63b8b63fea2a2c37ad609f8ca3154a3508a5aeeca72827a88d881cc12d502672a193bacdae670c9404988909161a0b1656f52c1e9558e6d4fc5579046452c5df3e710f16d8c9f887ed494a2d7c3a10b1abf698705de6e4c4caee2f6f0ebe99c34b89ba364954dca03ff38939b5215b132d5caece3aca891bfbd872d0fa28f690ac328dd57940ae64c2e185116083df194600ad820ca82f5ed0778cf6c2ca0272007ba192e4db449b6acd6443881af4b8c73abe78ba22022692f81306ec8d748d6557e29f30a924045ec2ce4c04a93c09c2867331a9587db1756515a4a869a0e445bccba11dc30ea38720b79eb9e8ccabc586aa2e934bd3a7a98d0ec545349f3882faf66e7ecb7209a614bbd9b8d4f8d32d842fc3544dc12b6f1a97a6760abb6f19eddf274a96427d9bd2b3f1af58d71b84af93861f01e6e64522ada79b459570c3242765e7cd29d4bedb4cda514147bdfc5204f702651f141db3a19281039dab79034ce9110057b76179f9122a51f1cab674fbd3e0198306b4892e0af3510c3a803d64722f40fc7231055f3cc1bacf49e9da6f10d58b4139a3a9a0167e52626b57219aaaa44afea134538adede5b7b08cbb8cfe61e9776816b0549141dde95e75d5f95e3bba9d2a3929652601f9c7eba3aaa408a325e093dfb7e983b92e4dd4d77eddf2dc1e7d634bc5e23624aaa571f25407d9681234d7eed5d1d4ea2af497238645938d8d38c02c03ba21ad1071c72d8967f6a6ec37249e52c8152d4f6d2b3a667d6a768df02c17b9d6f8ead6b114734a043f5e1abeee3c728c05cf9673614a41c05101db65f1105b01b0a94eeb9f192d35180c54524f39947948aa40cc9fc6a96a43a200decd4b74342bc66f8048baee9a47b9c17c676033a7fed7287acf35dcef6bf8d945ec88d1bc39189e8bb3c8c51348d5bf6b7dca22a5e625b6f60b1d879b8c5e9ce9f4493c6f1196d7fafcdb6c428e7687d13a546f814154e3a1b22e9d80325d83f94bbf3030d52253d72d3023abd80bed404b340ab9d0ddcc98a0c549720af79a6393a8c86be6768f20f6fb05b21b434eaafcd00e16b96152a5a5e2ffea534995b095ec33a288acfe8665e120e739341fb15f8a5fd33992ad57dff5467092e92f1ce04d1096393584eebf721d960bac4555b527accd06dd9965e6d3af4b40ee7a3e86502194ed75f3dcf7212388f10398c60582d756c9adad95e897a424d898e1726638c3ad15602453a14877b2502df8637ee6ce1d9e9989f8c9ba4041bbdc9608a6dc36199cd6fdbdf933547fe251470be1b67d894bec768c48898e8212c99fef2e3cda35e9545cbc6312fe420835dc9a914ccc2a31c0d9d69b5c9a2ba08d73e398791dd1fdbf13b5d159d14d928ae1c83b7936650157d35da9746ad07c8e2de9d7ae044f38d88c170e1d579e67e21b66a9723d309a4c47162be6fbfd8af1afe4be7c29854ca8b3578946009c639f38985fb8075a73e597a0de51a344c4c5335660e4932a63fc1ec034ded2952dc43d2570c83560650a843d12fc0a0536f555fce015a56c986f5d14fe8119a7ce6dffe85db6d3e2bf47ab5b9cc98bf97cb4701da5120122b1e69cfc3c0c58e7b3da0d2c49ad0cf7e4e9bccd98ec0f560ca852f5a996b8e715578522b3caf3cbf96527d990c9ae69c4922d48f9385a448fa0da3dbbfca1484e4f9c5477848c2ec3112dc97a2fc45b30915aeeb65727210599a1924a46c0623e940fbfa089c9996a333bfc702a85965c295104af33c9bc373ea48ceca7059a87b0bdcfc4b51d65db4535f6642b10900a415efc5c62ee44d9e061124008aceb7b0aeaa8dc18febc2c8c6be2ac1b5c732b70b7b4cdcdec34e23932d28a0cdf82f290dd8f30da62363661458dbf58d0297dba4404b1e212dd3fc9a14a8a0516c58a500b1b309f3d5186216a54069d78f68c185db6d36a6402eae4c31782a4a77032ff010581f0976d05681ca0e120cbc1a815bf02ae7d944a275694a7e9cb3becb0e5ad18473ecf193c9fa2ba79f1f76ce985048172c4aefaccc7db569f49ddf0f69f08ddc01a8461748f9619545061080a2aa752e5d09cb959e5e3f17369853f85ab08e0d1bd025226201eb1fc41e6fa2704f5134dace260c43d9a7e924ed0cd4d0f585a35a43627f925e29aa5cc5a92dc6c4da9a3c980423564f0aa5a51dd16a7cc0987bc5fdcb164dc8d4221f1b942509821f25f33787fd8206b88affb549e1240a7163322c08087f9c89417f9f09b0c419c91da2e9580ac1c282494cb244146b50bdcc048e34261f370dff6a2d6daf4ebb9bef1173c6431b5be15e91a8122462324201ac6291b62ffb74c1e5a4912213feefc9c6c3044c1166108de16604f9eaac21acb9c964bb8e5860f3e1f68a8b96e504cc1764688409970c3d045090b697d650c4a0e2826ff47a7a8b63b80ba6077d8f835206c86e1b90b56af9a94f4d319768331199941abcc70eed04bf407151f6f7edc2331ead9aeaf3ea58f2607ac0d7fd923a34e42efa513eddda17c844ee32489d636b022482323492ed2762f4712090c7c66b80650e5a0f9411b85e74f301248df7e8bb6e852ddb66177bdd8ee4d407de5736336e2696e0e761a4e2d44265f86e7efc297e53e496ced943df6a3bca43c1aa3a980fa888af1b36330bf958c77dd17b615cf0669b8cb1773887a85cbd95a429c20ba849df1ed878c16ed48a47e7f5a493601d8635a44a71fa06ed5ddde207fbce93823d5b57c7317d9780ec66611eece4b4a343ffd9099f5ef29af22652ae89e1a480cf04fd064087b763a5a73c2a7bed2dfe89cc44eed0445e62823802dd53eedfe93fc46982a3b84dab21b040d9b093feab36cb1955c7bddb4a2d7b0d8e78d74eac8a712dad47486b699cf779ede5248802440da27a49523e9ed97ed31bb4a2d2fda6d14e7a583da022588d1cbe0b7e4967633fa8a3c58c2c128dcedc880663eb892ce4df6bcb7f42d0714d6923cb7f1fc612fd544a8908406411ba2de73c52c2a9ac0317bf103c96aef857b96d3beda2114de0a6ccc1e3ea0f46f71fb12467fa4d347e9638b7a3cc28c8bbeb72c8b9418109e007ad3001dbab26712ebeafd0d99d40c2c8f106aea110d28352112d674485e95a461a67d252bc6d8652f996b8e2a92886ead2ef505fa2a895d754831b05633ebcdd1c03dd3a26ab52306724d9847cbee986d02e89fe3aac6a056b129941d2b9cff1a6c625fd1556596bd40a6599bb21f05df0f7be096604edad0c22ad17456b77dd7fc7be543cd1647fb84bfdd891b79798a9b84af871f4b2b4fdb6785714be5cff4da713de975eec7ff7c33e24c07924ac77bf5928bf890577671dd0c377b6bf3a6f04ee43b7ffee25e43941cff6f701779bdb2929c0c57694805d252ad6122761c649dc2631d64fae1d99625e3edc7453d054a9d269aacc600b9132cfe23140eb338655b62b6b0b2d237176ea9ae2b2e6e2eb38f96866a8c58a6e34db526a4328ac6756981a9b443297c85bf69a61bbf3d3bc5d06cec0075c14ab16a4073d0119c26286bdccb7c1a555cc30078e54df47c322c71625529435ef8f75c0659ee98177d7e3f2adee073aa25cb28f70306fbb7fe4d1c18206c0904b99f098335904a0d991cb07c77b409395b2f1b27fe57b01d01f9112b374f865d31bf7f16a69f9b29f3109008b4b79ff49353e22814c0ea7cfaccdb7776e35e459be1fde333575d5c58a8c68b97f6611066dcd7f027cc7ee84c0e9e53affac97c474222bccadc2d8fa201456552fd57faecea4912512a5e6ac1c196523a3abebf032dc5899302c208e32d66ea8c96e0a6cdabad472af68bdbdf09e0ffb9033e389585a400e2b7211797c7b088b7d36e6e04a925f8ae515e1303fef37bbd00f60b72bd18081ca72fda1eed5d604bcf7c0e7af2c734a9aabdb48ccd6335caf8e9fcfa66927e14e1bca942b188c55f70526a4a9ac60a48dc6efc0c4bb58ef85352c2ec29ad0464ffd2b3c49c985aa502e86838a5a38db8ce271e9f5c5c2c15e3c3971f2dd9f2a580fcd750963bc567df11a6b0dafb959c7f1027d377ade46be7b1f07e79cd5c8a097eef9fa2cac2c3a28bc95c7a701138f58b96ac2fdb94173fce3edd6df0c4106a12a91d570ca0210dec4bd13bf4f48343fc9c3eb0519517b90aa3df0e7332c24f298d1fe2220232a6158c35d391af3cbe9be5833cef302317f91afbed02fbcc6cb1d5c30f8cc7445803e588ed465da91d6d86522c28cf040cbf5d0f4fbc6a25d4b28cc92d783899a5a2d6577a8d65801c43b03a61d25bfbd86c356c6e42fd7c8d08782468f31e42497f6ba071b5dd7151c1e6a7492c518076609f83909cda568140fe5111b7e3db4cb48b7a306b36e03608490a2ccfe359dec0cc3fdcb910a7db30d751c556a2e96aa8fd0730f931aad8cfe83fa986d0c58d44a2714cd2df6b11a6ba717ae65bdfe92816799f184f3b058241a1c142ba444dc47541fc5671bac15751976d4d59a0181ca81ad3eb66cf46a53014458327c912edee18f7362caf71a9bed7d4053961d1265a2b4888d907c2cfe008543548d8d86897fb05b65720cf4594585f946496c32787c1c9d82f634a12ccb5c5bb709b6ae6b2cee0d6b41aecdb6fb7ae1c99b5c5b9de0484499c9cc0abcadc62b9c8d9b5a2a663611934c028d94677c5f011deae0709763e875b82be2e941f2b370582b91de75ca6736fe0011785cfdb81869e227a5ede12e58d05eb8433cb13a7611e68533c81f72bd7971debd6c268e97c246fa5a4872eb525c79a914712ac1d631b14f6d9c8da84fc18ced10de1d35c109cf54d4e9e37a6f072719beeed5468df526e07f15990ef0761d6d46cfe8769a034f63b49a991ce1f44f8e79f7074f3a0d8bc43dbca807a9abe9d11f7d4148772673da8d030ec384dc876836c0b806ec260419b0e100e6ad3e93415cadd9469ede45f87824e3f4a89dde29c00c371e0467a449460e96e2b3c2773f098c588cd9edd38897e9153866e8c83cc4ed020a27cfd84766209dacfa70369835bb87760c75d86e87895bd2b4dfd42aa17ec58ee4f3616fc9548940442d3a2543e1433ed9c45822f6093ca16975687ff49bd764146df378f2b9868c6c62a4166263efe65e365877e256ab14b0942634be507b6f90b64a11736c90e67f18aa2e3fd15f320fbd18b02633f6c8c2894bafd1882472d5ffd918091ad9656ef8538a8a460e3bb4bacf9cae75e1803472fa3c3203193a1478e06268443218fe503c18e8725c423849b10d93212121898c09cf5e5f44827f3e8886c3e7de75e13f7b0f3b2e4a0a4b35b0745c511ec4ebd2d185d46899efb64404c682e201915eacf339e92dffe53a464fd5116683e673362a5bead9d464039c85eea433313367f78b260a179d4ea53abcb046090e3a54ff414bef7e9b347859488488b5440ab0788dd1a5e547a5575a4e0f95265e34f30225676cd0a5527233258c29683c2d43bd70620ad06fe337d88967642ba6641a56612df2bd5b84d0d0978b0878b96af1b8b22a75bb48652da1fb2320dda03022422eb3ad0f763e9d8a35ab4f810497e18bf671d3976cae3ab32982a61eaa93b3140d0811d99cc7556189928852e738742807513f8c2fddc7468b9e258796c1627c8977ee501b5f9b9e05c732a5f07984ed297296ee3ae373d1a2037386f0b464a885f0f5811391782bb4085d935e2272d6deca4121d8b9916e775659d2b297910d4581a7970385fa820c899eb81d2a94aa26534995c150db35f7af592d4ab6ace52f7f4a73d89fb2e9afa99e471cd06d8d5163f3d938d80e0e3d99121d9535ca86cdf01bf6120f622bef6a5b76c895e7cc467ca0fc28597a59c34cbeac71ffb01257b286ea4cd64815b3a615cd1427227204103b6addc5e280b54b793788a2dbce67048ce53943de66305995085a63d3d240b506518c627d8d0cdb75af7e62a06622def72fd36e568dc4f46a5272a81627864026e54cf83cb535fb80e64b4b032bd114bca911bdc63a0eaa293c3a2bad3aa071f8e833310de5c267842432d6be9dfd62448430b0d9cd05d84204e1ca47d693fe1d91d84b0881104af69803a29978440687edf69c514414cf2922ffa9d43141d4c1d9629498a2abb57c3aa594f34ee00e7d1eae37ec31020fbb59ad22bdd6c532ca4ac2adcce61fe5e0b88d8b8dc31bfd4566206e74691bc54270bf40670c3539e6e938fc64a53d9cc0116888b27a1c72c175e109d508942c864a54e067ea94f1c70fe22a7d6219f987cbe387ef3e4b25839a8ab66500a0044e569287b09a9179cc4f744498d359a5ed531be814384a4795e5ae9ebcc474c026a0b54922408291c2e31829225b2b8c14372c834ef60b7740c889c14879ec8b944e0a2f5264da45cac504464a3f7e45d1db3bb920176cd9f5d6b1fd22e6bd60e7ec07b66a41ba1dad9d092f8a25aeb4895ce2162bcc999a313cd63484e5f73c9b04f6e3a4b774fc9c1807638b2ac83e2a6d67d9ee722d7fdbcafb5ceb80b591d33005d645abd17cf7b1340b3d653fde0e105151aa2f9ab202f969fe54eb092c65928c7d68ab6d486ee9f68bda2cc1565dfdb70293a84508e1c14092da35c52b58c6332542439587b0a197a5f99107821b60bf90749fc623da399c6746f7612518c3cef072f25de83e797036f3dda9b82864a44b8702047af2bdcf4bb28def978680a396cf5f6613033beb481a1e0a1cd566195a3d0219e66a2031d60d7c5fc65c71df540954857541d97a9fbf8cc77bcc084307e4afddc55d96552d0755d6d2c2aef0d8b78bd1667869a6bf1f90fa97353f2b747f1c98ef72580be5913a4336f98b4545b50378632206bba222430b07ad67e2b93f11a283058068a1c13f25a985ff28a105de0a0697d86dac4af58d5c67b0441e886c036201007c6af5629c6f742a0c57960bffc7f322996470d5e9e112fbcd30c89a07820e074168335818719402d191d31191ab2c046a7d2dc1aaaccafcd859130fcf640620ac4c7e2138ced8cf3bcba77738a92842c7bc2249c9b9a4af4d95c381de5c40d547dfff70d210074fa6b94f3d43656f35b20f46c060ffcf823b9b82c99d7641a1cc3bea65d711385b511cf916bc0ab5cf6d027e95dde645e5da8a049df0aaed8c9ac9180802cf7cc0016cde9bcb3de69945a64566bb4cb11a4547d841296edc319962594c7cff4074ffe95c99ad24c09a700e562c5d88a0ee320db663a83b3d1c1dadc379a4ce4bd69bb8a5e3a817ab8c770334a600bf63ac75577016869f820767cef87a885fe248f2868cc97c420c7b7bb1518c103d136e35c0d111d6b067b3c0c37dbae978f38882bac56dc9b0f7baa07c2cbf5212299d5a24614afe2db8d2a8b815c386067fc279284fd84e68287ce09298ac95e9807da0be85c1d45bc51ffd084d374e59f61fbefa0fe5883366b33d6f0e61b44903a645ffe1ed313ca9f429215fe0d4e078620a41edc3f4de65fb504591d2c7b85befcaa54c6bd561717f36a18ce4eecfd3b9b80a30f4aced7b89892627c3da4665a9b99a8b39589bf758fc953f12bfa53639aff87d3f1bdaba3e6b621c26958633bce99e7929208d346f9443b78766ec74d9a0e9ef097e7e87507efe6a733633a424ff8ef0f0a7ca675ece41fb824c2038e04d296a6d4b30e83c9be27cbd2bb84909d6a5f1be0a87b7d34f4122febbac956fbc189bb66aaf5870b4e4b2e5afdbdfaf88fded00fad6769e1f4af0028a65ba0b1e2c9a2809076ae8fbdccb4277647e62f2303d1c95524c707693ab17307cc1acaa903980742ca416cf3862ed6ac4554ac39e2a06d1287aeab8e099722643895684637af1d452e4395aa8954d56d95ff493545a490520d4fa02a8339e1dd093ee8dd3db35a8156098553e8b12503f90d30858f3d4e6fb359c742d53336e8bae7531b17886c15328009111103602d6c7736995115f6d5b4595ef7599a74787b50a867081bf258379c01924a441b1118a1642c61129b49b8ab3ce87b53c327dd193584df1a8fe0cc2143d98751ddd0b1c4039155b357a31beacf26f7096693fa6a3075bf03b2b06583be8eeb4ac433cfc4cedaaba448966738b056fd3310fa2409deaa5673911d35e5021518624429d1c2e3e08ebe5033c61f875ed2977c79ccb9834b91ebaa661903b2425aa191838ea5a2dfa75f5c46b9f9e743c38319e3f15ccfb5800ccca1f3c665455186504605c7f657fbe4114e4931451855138d4ab8260360a9e3e6165660ce2f7447ec4f1a95e0998469bb95c0cb6027e8283810d1d5aaea9606cde602b502dfb89e82b7bda986900f21aae0fbec00f066eec0de423fa3fe6df647ac3f6fc81e370fd125d919eda4dc93265154cac8be913895bfc820ffb1221dfef988d1fc05f4c586c073d843304081e3972340498d134f2d3ada27b1c1632764262b03ff27aff9a33f8b58d01f882855fca77ac1ad2323114000e0cea71912202d9e41c5358f456fafa43a975027dc6d935ccf183e4648f24632b795eee9ee44fcf65b1a1fc97a9b691e70490d6c39943d45a56dbfeb5d126430a96d4010bddf8a9b6b8e820bc38b48737cbd7567343d113adc215f7060486c39fe03527b8eb2caf16a2f34d118cc28f1672b3a7e0fbfd151c165fab3c5719be82863521ccdfdc703a473aabbfa89990681d757d4a61b454346094d66a65bf0aed8e6e30cdda131aedffdf33e7c8a0071afd7e46666c2c24d2f62d99f7542636d261c85c7fa5c733b24f7c67e4ee5b683fef5ba76228616089dbe409e1a9a2f59af1b18dc8c85ad3e78588436e035d925c472e9a6405f7cdd2d58605ea0f1d0e21d0fbbc0a3cb089bad0ed52e01045dedee962db7669f2392b07d3b4e9028794ed4d6293c8c20def0a334cfda0aff3b74220230aee88731bb0174f829df608821549d6eba30da5eb19a940a3e2d941a856a14a2bb035a4a452ba4157996713101c541374fd49e142dfbe43a2f0d8e5456bc23b88e507e6071a13883bc5cc2026cc4c43f66c54777a23452623ffcc4d358b7a0c90b7c12727fb68a26ca72acab50577032740332b75d07c6d81d4a8da4594df89ab557191ba851008b4391970e84f688314d2d6678c5319aacfc98d0396a61e400804d382c5a02e28a39874b021360a9a0be3ed664ed082b9d7d10fabda7e9190a8ef388abadcb328db85685673f2d93621f42fb8089d5a3ef83a1f0a2d088913594a0d476c07898424454d54619dff0b1e64ec5be0b213962e4f8b55aea30fa42cf9dba4e84d922fc7857812803433b038ab117261392c16c78bfadd3975a4352c267f90bba687728058645337b05fd11051527c2a95519aa745e1dc3a68a0e71be210c67ab4a61c57ed6c9cd83b85fb299a10f149fa068cd49b75b69a21d62277190fe903c0c55ccf19531a921de6ceb7cbc3082056287e2248fd34768363b6d129100542d0ac58aeaec0f8929f49959165372c6ff65463814c88bf1199c94a37b30609a6c9ff0bf303e4159f3ccae53022cdfad069b6e251331c5656bc28869030b61350840ae60fa3b11de5f81ebf5f4d7e367adb71755622def0622ddbede4653531a3860776b69c961a996da18f61da62b85258c3f8613ae4a0aa8962849bb9b84744e37ed1f9ee3d59bd763660b72574fb29ec9761382d5f094918739cd36291d9140a51712662893f45a1d1c3d70d8b1ab5ee3036059fb4ed7d34f8df0a83dda8f6589ae485a5d0d1cacc9fd531386390898d4a7d7f312a9900a1e9c308ecda86787e6422d59167860a6e3d2f7b938a3cd05d26604400942d77cb9f7c73d1fe6a24dce12a01242deac406e0429713e0de24e47dd4bd22feeabdc0cc52c3550f656fa4f20e09daa8fd9b5d569412cd662566e9c46632ec787c713f91914729120365894ac7c11231bb59d80b9f1cbe7fa19e577f4a51b69dd6b76afbcd574d473d08feb627f05adc6dfd8393ef3f663836c29cdbea4f22ed32208b22020a40960dbf822ecb3005560fab3ca88dd77683ca2fd7e72a7e99b7c858d17d66a66bb690dac00726cb34d9b04f1b717c4a631e15ea4c183eaa45225bd687fc4187e2f47ee51ab41454a912e8ae36057b9d3bea3b1acb08abf265f2073a25d320ba39ed401a01d5a7074c2233c5180f70e1831a98697002704291aaedd9a7ff4de0bc85223e202920553d19ca2214e0dcc4e64845a10aea52ff6f51806955ba634e32c44486b60e980a8851a10f121950b09554f56dc8c54d5c21dcab985115c5f1a12e1e92e5b575b56736e1337c0c0ba0ab344fcc053e7f45a70543916da17bf5e06d1ca98fa85a26e92cf8f1f9510dfbef72a0bfc4c15200c6cfd6db83e4e2e9288f002544af49af270fae2297026c47deaec918e9b4dc8507d68f85decaca39161c14c9c8e7a8cd23e7c217aec2c94d14e2931ce8ca437978acde5904be1024a3e6200238dfbc7718e687d5099d3eee2c61e1b447b481e5314fcbaee8890b328c77e4a7e014abf2c0cce30188dd6db2320e60dad0b4f5d9d27fceb66b0ecbcd40410bac038230d9b4bea05b1d4f0a3f2cba204ab02eaa9332565c5875f0fc27c37aff79fb825109de7fa5a2777a9e41444b293c22218f3425a229e50ccf28fa31dd9f9891678f652647d48e4dfb69b6458eb1a91a23823378d14f4521344aae2d9893b228c087cbac8cbdee94cdcab60721e907c2a99626d2ca41be0ed7070ba837354216c77466ee5091cd056b75cb4b96972b2cb72698408561822fc06da016209a436439d41fae1d959a2e42cc048c95ed5d57b6212759b4c055f34eb7718b7ff3aa306955362ff5cddea6addbe6fa56ea23f645505f6181fe18b503e94044b5b69b9577d2a30816e6262a4ff735f9861deec0dad191b10f3f44a783001f4bf5e46ab108deea312c8051102796d7aa2f54b5cc06181e7e4c01d2d29c1822d766d4a8a90846f3e381f65692dfd442b6f1664961ed62263bab603ad0aa60ed837df1f61e54aab55234485dda91d987723a7324d925136d6b558e64a60a0da41bc42504d524712a3dba44435bd158213f3c9a45db01dd44890c01edd8022190a17d2d0f15316d7be93f6e81833420028715098a6f0b51f19caf6ba2e54030c95b39de60d7332fa46c075028ec9d7bc3c8419fd97200798ad7307711955b9127361e50d2655083ed5b89b85c4a99ec0e791769e7bdd7f7a4ff54b6e65431f790aafe9920d07219e8ff9dbb7680595787111805e2771efaa26ead5cb7e831ec90e23d00b247e99cf4b3510bfe58ba2f5223e2515f631a65e729e8aa212774af6d4b5c3efacd11c069dfb6445f8ab8ec95d4a129f135aec7aef6c2c951026d09e20dd030b9b11c769295249c11f4a78597f6c43bc141dc77bcb1252ac073ea89909246e41279816cbaa6ecdd0e1c2605edbbadcae09ab5f66e31502ee402ca5b46a77f4627665218d3725cea406494838af912a62f98550eac7464b93ae5369e56a3983fc4466feeb23f68ea97e9dccf36b9e1f5425a9e8b50f5009987f45ecf74bee8a3f189ef1a9557b181723e459acd36f2b007b3f3956b3d21edeab37631a5ca35582e4f2b47d66b6f238460c92c648fa7e73fc4beac2481cde1765032e6a917b715fb233d417654169405038fd419759254d2c3a626b6f69186ba33866327ccd7cf41d9fc2db7283a34981bd4319ef458d6d5dbd7cca3b8db519f0b4d79cd760f34323170f069e500d218af81e9b3986989b892b5528398d51aa9e0d2c7b217a9dc774a5b904cdf8cc0883570b4187e7a7ecf5f359b92905b789d405586cc777d364e2aa31aeeba51f286b4febc7661e6db3a9908db52e2b52237219bd218b1143cd358f1e81dd51765edda08ad8c45646a5de4850afc1e92026269c324683e9c5174a21c8d9208c7a09691ad15cf8fcd3c97ca1c93104bc22ef7150291a70b594b6aa54796486cba07310e4efbd4237c2163591ab971b93b081a0b9005016c5cfbec907e2205ae82dca82542c52fa98af5d03ea3a65b6743fd9e1fe786856811ee59906dde6255a582e43af59f7e6b2bd71cd885e67667e7f1ff53b461d7ce737548ae6d948e9cd7b3b2fc6e7366fbd18fd26d6a2434547b9a48285cb0d04a9896514810ba1ecf3abd5716d07fb771ba3fe25fd8fafcf9d266911eb247ec0ca7c7289d50ffd24f5ebdd939a2d55aad37433d09bd131981a5257611ba9524e76e94f9a4f18a12b1ee0245251dc799cc8969a51df666b7499041bb39efbae65cac9f3091601c4b0c520a3669649807d739146711d923f1d5b63efffc6fe57d0d4ae4e4b2a43895aa30ae45e6368d677b414f8b2c571ec53471513f3587a206d299ba7349a4c0fbb39051e565654adbdbe925d4180168866f303549e804ab8c91d673358bfc5064c8c04013d1c74c651488413e98d1d8969b2ae7d8881f1b05e632c2bed8dc0cd661eabba49356520c03c76321905e732fd0c5ce7c57910f1632c2ba215ec47653df2d97564751364e8815c6bc0c03afe18e46a270b289e98c2a5f9d0c52fcae32bd0ea87f6dd55c285ad64f3811e3188e8bc98587ab670e0a497eb2e1ecf5165337921f818480e19ab191acc341376cc42bf569ed39ea5448bd21f8de9f147ab81b6637be1b28309a47e4906d9620e01dd42c35a12c3d7bc4a6e1dfc328e47b8330aaa79e3ae2df7748c359ac5a705cacfc0ad8f26fff7a9b5ed9d7928694e958840e3d69b8489c9852e3de8420c10c3f7b907fbf39e189d671f842724819b1f61fb51e72d6d9f7db621a6bac9515834371ae60f5ba6ccbad2205b00d57938006801566dd0b59ba36aa84e84e2f5520205dbf161a958a5435f8092d5dbff06d496e834439f051e8264dca18ecdda069c09c102d17dd94b1a31b8b6118f79f942ee290bb49644e307eb2b107c0707a732e090de2df22d5fa46bfb64e522ac3b0ba88d8f2991776ba804dd947853a7431258103a380853847bf382c5459b3ec9792f8ff495b2fe4f8487511d8e2606c43914e1306681f568a12513425a610da91569c63da85282455f7a7c478b3ea841bf606ce876a28af104e34c490c3c1c2409ddbb6eda3fb9240027b4ad3d3c0cd5694158517ff0faf58c2058b84dd015d39748afa6648754cda259da05fe465d083914cab98eb2038947752ea63c0b98fccdc04a38da534ae51dbf58e5628bfbf8855faf8f81df82994235128a2f1346254a18f37225d2656ad63e2f1f5a02553ee4ca827b41a0d3fa9b0333b9cbc880f64fab8b34d35a5822d9f41c5edc4649999af4e19b1ecaf4be36ac069a7248e54dc56e3b5d83345997bcee8c84c7f3e9f9bc48ef9363853c6f9e6c69d9c8b52577890fd8a299efd5629482de8ebb9c0fa75e342176c069b0d84c2097da1a49ecaa90864a7fdb1ce00afafa4146dd5a6e8b97099adb8af5b7d3d8e127905c0fb1c253fc3f218eb56b76c7d3b058b5137b4d46e539bdb97b86fffbada3d8670be52f64c786027023dfad14a6f17378b8dfd8ad2a9035d7a0232070de6d626dc5de5a48a9d3e99b5cdec58d706ebae31e47511e0a0a752dbb0078a7babec7f8c433af5810c986aebd9a45f4d9ef7161f03a370d395849cbf8fac1d94e1352ce351b5c9c762244fe2756077e172fd778bf418200dc12652001b4f686ed540943aea751196213a0eb44fcaa84babb69c81b8b7c088a272e5eb81183996dbe09552c171f23d5c71ccf164e211c5a79381e8a56104f294c0d56cf0075168c2ba14e66062035bad5d3d8828e7629cf429fd8bbb81112305cf66229941305ef28e4e952b8c09e00d4e680a2fe32312b48b2581c724c1d383082ecc0b8500b5d4ee0d991cca88afa5d747f8e0663910a682337c0357402fb6f1c37bbf0c9c249e4cf05daeed4ec434d6758e88489867cc11cba8b9ef8cdce55eb6f87235521e8f574626f6b96fc7d9abeddb9f4ba93567e0db236a52e8b62f5c736124a51b6a2c6c2824e946bdcf5611300db135dbfdbb1cc2dd81e8d0f52f5870b9feac3ce9a1ada06986a08a98a74f356a7ac04cb6c6811d136c8e4c2e72326916352c13725b0f7f672d36703b1ee589b928c9ae7466e8c23548c8e7d0ee305ef76450ba4a7594cfeeb5d51d62471f3136b4e67b332c48a8030768c2a745c1c2f0d75711976a2a1466633974be24acfe89e8649550e4ef30b3e1cc70cc1b0e72618c22ece039a94e5bc50fc3f817a25cbcc31f5b5acd78175cb024653371e995b079a21aad2700856133d42d45fc029242a6c7363427c85d21bc5d91720bc11c87baa3b56420ff34d82d99d488814de7ddd2ee7d036bd3390bcac5ac6e1d75f6962e9402d276e0602e9373da6d188fffa1bcfc344095a029aef044e66e206a962870fd0fd1b58702835d795940c2b7a247e5cdfee9baa66e5b4e2a6a805575d489b497001db888654bca947e480eb9bc2f65a20da518b12e192162c4a16855a3e49553f90edf9f1e85faeec8b2b43206594981177dc44a0ff49f58bc26d9d9c4a8e1d62823c9e9cc2d0eedbbe954c93d841b672baa875204ad43677a436c38b037f89cdda532ac29bbf1e7a147fe542ec41b9b3750b11df16c33632ab40af85219594a764cb0e971dc4d95aa7cee4bb4660e07cb4c02d9709f71c861aa28c0990482d47010c35a03058d41b90c5d594848b1e863c82bcf46c66521c2ef86d8180ba19c75d359f6b2ce3b8d4702516190d566e5e56770717120d36c77aea45a2d81ea6470d6f0d64053c40f6a2c731ff8c9b7d894ccaafef25161c42a14567451db529c4f10c118f28aeeaddd3adcc841e04cdc0317d90a8e4246cca2b5baeffdc2d502e4ed05547e6c7ae00e24fbda56098b0771696658df4b02224ee9f6bfadae752c06050b336bf6282cf731453e5be146f17efe8146907fc49c2beb907fe6199d359e910e008b5297326a19023b9a037c893281e2a872004e38979d33ba939f4164a00cfa248a8139e4de2165c620bbc24729a381fc1bec452bd184f0f3b7369187a16fcf536746d3a3a6e8461975000fdf5fa4c9a42c8dc85cdbbe5d7ffa708cf4e9bc3fc8bef9ba64b24afb21891fa29be4fe17a078be7b700a7786c28ccaf6645458b1c50602349e4117ea5eeb0e53a85e732ca333b361c84128cb7b57ec2c921edd239002e1f3df11f290b83a906523eeb23e78d94685640f84d3fa88d461c32e0ea88ce68b89f4f8117fc82acd3832dffdc399c39ec7cf937a2c2ba477514e6032fc0d38478cd75f60653135a8775515f67f12168dd0db0b91c7220c7d84fd00a2fa2a4920360e467a0f31f86ca88a68fbe96342709ec48377d829b1054a681f1256fddfb7ad0a98449541cb5d23bab962387285d2f68474540539e4dde3dacc8a86b7c68622742786242b8b3765b8450d0e7e51e717a21d549536e4d192749a3786c86aec5bf9d1067146d51ac1174ebdaa4eaa61d25fd3aa1693086db2ff8de353770a7e0aecee4eea0454701835b7817dc459130c78664036281537f639c7a1c43a91ab689424b296f1ca5ad3a65c935385629112a94ae66f9f649a02aa788d4d5c400cca9a0efb83a6d7895599a1a7cdddbf9c85cb8b84f793d4bbb9d4b0186fd9dddb6a1e8424d434618ddfc9a336482a0e71907d81e6c5563567948cdc07ca0eb1f936a450c5e89702d9f6f6f2cbdaa9c3a9ccb6ddd6e4de52269952bb04c004ba04ef0fd619b260d5ca08edcb5bd27fe051ab52d5341068359c03c141a0555b3de672edf4b02c63fc3f0ca64300c143d7377b7866ecc8541eb0e193a3b0c9f17b80027d59b471a9f851b123d7e6c398b606d29749187b30bdcc17e426631c84aa06a9b2e050ad0826febeb52b631f18cf3e3277af6da975cbc94c4670b851c6744d1c99c26686c101d3feedeeee93bafb983f92c4737308c799b1a075594b7b9583e33821519773da8f7bdd852871555c5e12625332d3fc50818ec072979d7e0cddf1d1fc98a160c2d6cb4e3f823aca84327172e55bd9e4ca7ff930f932f93ff261c82557be0c5a021c453325699eb6d8e0638ac670a51054399c7c4be44072c747d126470b5539681be498b95731b2b2430f147679c94805a32019276bad2b6cb515647e4095f98166c8aab8ac348402148d66bbcb4a417aa028632bb8ac04848d053f2c1510907fcdcb4a4088dcf16529ccbf2b54bcb1f2e70c9b03d67bdefa16f738ee0cc7efcee6e93db7ba431adff5563f5772ce3967d741d7b56dea68d771dd94b31c0339269f61cc936172a471bbbf041bb75dfcf1f0bc5b7e76724bba6ed210c88ce8d9711d872285eeae9a2ee5adae6bceefeb3e07c17fffe46ac5d3d57a7174bb111ebf9a524abfbdbab8de95fbe244441217899db77f721c70e3e74cbc66755eade64ab658ad56abd5ea756bc8ddd587d4776b5de04e7502528207285b992324923a1a1246d7a7cd9780b97e911c655142610a971c6e4e3e98cc8b8115664ddc20842684c4fc51268b91226e58e841881c4b40eee3bad312a9eb1f826c615d04b8ecb464ca4d71d96989d11ded9b208358ff25557f1667b3307fd6ff8d273356ef7f4376593afcfe94f5cca2ce07dcd7bf007dfffa1ccb3f6f59a081bae7505e1d9def5b3afc379e787f63f5dddf78d21267ccaf7f43d4f9c4192beb8933eacfbf31451d66e1bcb13ade77cf403a9ea8f3c1eabbbfc0aafe8df9abbf40f5afcf40acee59efc4eb172c64b017bf40d74eb72b212dc7d52abf55d70e3ebafa55f83e5b54dc91309088adc02d28b2b476e06a648fafdbdcd340d829c363ed80da09706e027fe6ab0862c7f93266ccc9d393dc235dbe9ff12e27c1e0421aa67062e9b38b0658c03e2eb8c8b2c4b86705ebe2a8fdf979e1298a7c2948edba3bd7a06c52b25dfee5fa10777c7507858961aaf927a54c29a594d266dab49ba797648a3bc185c95aa8264d90ba1b0329cb3c73ceaebfdf81c172bbb1ec46cc3945b78007796777b71783d4615b0a918cb194a26a3ba816bc1e63e7073af2b967852b1d59434ed491bf6ad291a2ce0795136d3c91a20daf958a967b9c7b5cacce39c82e2cf7f84f716c22c7f21aa5ed4a10f4a93e3ae47750d3957f82fbe83841870746184184a32b5f048fb98f0e193162c0d02193c1607fbbf21fd4c11ed3d14f1e935fa510120a0acae66f30100aa281352bf020819026619a54c83245a98abbbb14a1ebeefffe301dd7b348d971fd37f0d8e52c51be44d97247fb48435b863adb084f5e400881a52691d4a0486a205fb4d9b1f618db458a244cfe24e29e0fa615dbddb847a2e19ece56555c8a04c6b6385224db955ebbe324720088b1a30c922f63069334433882ba34e9514529490e3fa050a5188624d1e2f7a685291e849051c20494225114942a1959b9f47f36985fd987816c1317ba596bcd42e68285adb8c1ca1fbf0c88040b91655d561282c391a59795845091f95411beb2820d4420e961c91348f3f642120e4eb2e02043afb2e0304b72d33a9ee81479640c66796020ec61b10d242cc61803460c1e25d6bb141175d9276cd6a494b375657a14297797b45b000efb5b292800ca2ed883597db032e56645ca13178cb940cc8e4ec2ca94aa1fc69cc08b95130071fd79ec09a05cd6652b27587247fb3a0ae075ce3937f9257d7f9deef9ba572ed4e9beefc785d3af87bc440a2e17caebad64f3a42b0e87ff89dba15faedfb0773771f8c15c0efb6138f700a00456a2703b1405b853f49bc72feef5d7c1efa9a7788ad3a2388f8285238ef3e2bc8acf09c7bf3928547c1fdfef8c1d612c709ef5f461ac5f5509637d8a70ba248cf5367cee617d4ed862b158a2af429bd3ae24df30c9187bf0664bb53cbaaefbe26e1ec432e4cadf912feadda006f2c122567e054b961906823b3166bcdca11accd00541905f7817fb922de49db6aae93e3424f30a458880119ab032e47321fd5101d763d74de8eb4f430261c42ef92c5a0993d2823f6c3f7bbbb7f783d6ad0b9ca0f47ef6ffa2bc24533a8a8ba7684acc78fc0287b03fb55afb0f9b3a93defe173506a2a89d66b4dbb48b9c664b40237bb360e1437ff3dc66afeb3c86d4c03f005576fcf7d557f7f9c401704c83ba12e9f7938fe19955249e201e219ed9e55fd1f1ece0788476cc86cca139e42fd8712215ddfe15fdb3c87d6610ff388f38882748b66019cea18ad4c3933e2f678e7777f773cfe1b81e8edf58e37687386e752d4f29a594d60e80b7457104294c1c6be53a005e12ea83bdb2f7e5ca9d90b22ca9799ee785acf7b0ae5e975b1518c06589bdeadc8412722e73cf94b0e626c089230e8f86ceb335fe0fabd6055a8fc3bcc32e3a1ff6802f8c7b24f774952bd6efb0582fd6ceceed4a3b44b2f5bb4aab742e6c679dcf89b476f43b09883b9c5841aed6c9c8fe552b30dbb32e70ce697fb696b0b05486d19eb3721c471d081fba2954b3ca47ad21c8475775074b454493470e6e72f4702d411d15fb73f64cc5635c2d685dd64e365882e8c22308956abdf0e00088a2a1285d921e2b29371fb2a8e3e121f190840f361a7850c3020e6fbcf4682a1ee3da1a0a218c124d6f4c60e566851691c3981ca47080481e3af4d08185a731906ab58e8006a4261aa878341e740a52e51aa8788cebb7c54709f243b08bfdb1eeeeeed2dddd5dbabbbb74c98473b679bb1abe810dc839e5ca4330fc5ca1eb8a9d12c6dfb00e5d28e89ae886b10168410bbaf3bb94524a9f524af947d0b00e4e3d8867968247bde59d2c7e86f9b3c21d86b98b61fe9d3f9d305ff27d87fd3ba0ab657bbb8bf349d5959625bd881d217667d60588ed024608f6af2e425d6c5ef58da50a8ccb521ac774049627a884341941ba55aa224d9e145a37b5c0dd74190b12a86e7aea2b48bc3c714104a158666d2c876528e9f6097132b13491818582e9476c9957cad8ba241d961c6c585268b6216efa2183eddbc1093716b42e6be92c08880a2c4246540802578e82d4a09a3c0b5a97b5b41dca0c71d91d4b3a264474d132c5c35110524b34892a323b54a1b13f85bc1f1122a264c694a17954e4f8628511cb79755a5d72e72fdf05beaea42f5e781a8f5ff6639cee874786393387e595e0d70b37c081f9fcc858ff6d853a5814019ec8ad2b7f6c71add6d2e71eec3aee825a2c00c358cb95d462c7578e161d3cfe2ffc2992ddddddddddddcda2993b046fb53a55f52a5bb84f8e639f93eb39bbca7a458aea66739f5e9427e5b1f1da7c4243e6ccfde63efe92eaca779a046a5a9a69f32c93eda63db92d05021cd572006064c7be24d0afd1b75fe6b09557a014c1275c0df6c3f9fa2d173924e0e48425e4dcefbeb25581fece935ff72c615e0d7b75bb0e656e83375bdf7bac39418e7556e8fbcab1ee07a86305742fb403041212da61819815304a0608edf8016abd500add9b376f809e9850c3ee008170fe082774d6a0fb56d8b1022ac738d67509e8be861c9d93e2e0a47beb1988dd471c2b100bb402478c9def1d926c91245b74512ea5df7a1607dff7bd178e0e75bdff42ae8ab57174655d71cf0a715c19d288b9e904c0bc8b72281bd7d5b4eca420a9ea4a93241a84b468c9e2a32948028e40a2b6664d0c475ab82c4b4b44d71d4b0b4d635c68123375732e3789b1f5e84840c5635c770871352ad43cc655888fda14bf8ce7f515f63b2e164719ec05babeca437836a4ec9e34421bcca6bbdddec960ae0802b8e38599734ee912471a5e6586cda53fba3af82e27ce19919db3aaaa9ae5573e289b9aec5f3fb29f1fb2ffa9957f6432163fb21f98ac7d899abc800574734a16f50b6359c2f8fb05f4e7371bf73894102b9f1dca8bf4e9a26e52546caefcaecd902b4d984324508b739622c88eafdbfc6217e7ece63e36f761202a2f05142b3f5a1a6ff2f4e6c760ce39a515d03ab1e065a72358a08e20e91061eb65a723473a2858bfec7424069c23448e903f0d902a822443e1dfff23dd722b3102fbd99a8548935769e604f7f18077eeceeed4a777cee264ae8a11e85e4a29b9278f5fb29b5cf8647b143b8e9b2f58bc7afa0d55505a4a399b76ff094233babb9b46d8062c64f56f6c05da44816977adb1e3a2cf3d2c420f6a398e721c4df2f835b26dcedbed01cfa01cb8bb244c421d808622414652d4349104907c18fb709a34568c28616169c897a029b9761c953edde2916d669e723e9a3bbf9bcf39d1228bc03dd31d8cd750dd525cdfc0be19dda46e7dbbae867d7c088e49b10bf96daef712d76fd77d702887a23f5db4414bc4b6538979c2479b219660e7c68eb24b61bc7840f73486f3c3b2a02fe3879976240cfc1c28d6bf439030ca42c6e8532a6197724b266154849c3596fe675dde430d765e5eda7204c41618dc6c69614b90ac6e196a3315a57a51436b218c97645bf25ce602f0c372cf3478ac0dd6c519c2a6acf4951196fbbe1934b13cdfe5ec5863866c2cf71c09d33664471a0ef5e4d5eae55aa31a880acc94404e255bc8244bf5c5cea7d5a99aca21b73fe78b1d9d8ae3b89a975694655d76d211c4191d362274a0d95135779e9b94baa84bfac85e4e5950f402132852f0c2d4a7c40b5f220064e63444f40383f950bbf279acebc5a27934909f81142b0b80cf926f84c90ae3a99f101865e9735c918ceebbbb67c751e964e6ac455e3c9712b69f3e378b3d7d4e973d3205ed0b1115bea40084082698ae3ca99fcb27b23b6d1d171b844a6003511d62712e2fd960546bc51265c6254a902b515660b6203badec53bf9b4ec5ea766a450b830346c99430318c99a28d59753942668d50ce13329e54528274e7fff5fc73ff978fcc7db64ce6e01467cf6256a8d0c2633e104e723a156610317d667a4fb9224a847d07f30f4e51122688ba77b7bbd3a01f4449e664bc96fc5d4a29f5eab442628ac7cc52ce9ed36577f734c192134dd263666f25d9b182196077a754648fd529d698e6d41006473028ba60cd950cee9c1748294d1531c09ddf4572ba1889323140b2a3fd2d3366e659384e2a2a2465b72d2708cb329c553427ec7711a5b114db338a3486489527b756e54887d16caa55095265f6f403adfed0e387a3f94391eceea1cd93a79a942e1ebf46eebbeeba65d76560c4765d0939b7b9c7a744c19d2a59fe5a42d71a7d393a2753dde2057cc1164597182bb8772a8a20139d1c18e0879d2f93b0e6bc39ea4bb219ac1414d8e94fd0c8682a0263032fedb5d440fecb6671d6d8c739c24e86b5682382a574ef16d3e5bceeeef2b69452321248d4aed64e45cda6b8ec7454a582c8911ad99731387288c28586276a780a038433b2712a508d71599a10636c343ec2079325ba3061f25406cd5216ee9848193449a6c24c2d515a4285d50a4b113d58cebb17a1eb565f3d8fcad093a147592fbffa1f2b94752565573b4ecafe1e3ce6eff954649e2de674e96fde4829f9cd652925cfd0e423caf5bcf971f374a599345c7d1756d6d3cab1aa178e7dbb9fad0ee4fc8e13f9d5c109621a4b42bb0e39baa7ded7e8146cd3eed687d3faee290efdbaa7dd53bead903eb760c8cf7bea75d7ddf50c2dba33f30cba63085e5e62e1e62ef9658722686479894886bb44441be3f16b640575376c634e10b6e933d7b39e7d54e836d8e6f6f74cb6186a91d2706ef6a343ba0228d636c2b82257d23822099355345617cf036e31773f45657912a2bba5f481cd7d6273411762a6a0b2230882d5f572d74aa45fc3768ec359ad56f457a157dad34b70c57d87274e1499c5904406da0d48d0b94384da1a6677b4bfc6b3f184be8d590351f18608e88ba0d748c91204c48941ccfccccc939d2537333333333333333333b375a4149c795e52b2649554d6a730aed29a430e66a0c829a988e0454ed948369ca1610b530ea6cb4c396e5831599acd969e5073753831e7567067b063bd4b4a3b40e9c1852b5454542b306123baddf95d95db19bf31e167bccb895e55c67a95dffcd6d9563454c9430ed29cdd530a762e277636eef16f25dbd9baa7ee2907498d1b262a1bb4f97306a79a72aadb542be886a0209e958a8aa936e794238a3b89eefc293b7fd6c9c2754e9c476f6cff388fe611cf3a892611d30c93c9046d86a7abe99b7b26b3330642587f0c82b0ce1e047b330c9eb3f8ec8455f0b33bb35964f23e311694228be2d8fafa63ed6aa534e7bbefb672706458c5e952d0504ea9839add93845d50bba0d63434270784ec77f755d73b695b146135c5ba4fedee283982c73c66860b172e5caadc8adc928cd4907486cd6d76040a983367a28a3821219d493ad324c313a233678a96c860068c19aa24498ccc2499d952a484e4c988224648c130341415757be26484ca90a8284a8c8c8a8822237574a688bcdf79d771514f37aa361de7a19cdd3fa5dc1194e10d0c6dda183184e40536514265d834199214658b0b4a24a8155144911786b0d9846c548c06708695be0c5d2d97ad4051b9213b0004350376215f5a813aba2c2e5b11e2052f4a63a4ee07c03b9e101414746b80b75b97ce4b9f8aa3bc7ceb9c5d279240df2f09dcbb244cba240c1ce96c0338710a9915a8342f978c94a9991100000043150000180c080602815028281a948be3f20114800b6b723a725c3e930743a1388ea3300a822006621886010000620c508639870c0d40c03f7918639540db2ec068a13d89bde649fce0eb20b2b06b267176e9409f46cd4088f67c3a3ec3dd1078523d12ba6d071aa151d1cf8fcf1e348dd37b7e53837f07db3e1aefd925259283c590587eb25535058dec35250acd4a7c164d6a95df4fb315706edabca728fa2e1114da7947e8fe456789faac821680af904ce5a7998963a7561acff921625baf7085f08a03b14943b2616429b58c9d19426961b53341b9136ac66e08c405f1f1f440be7c788bee0052bc90affeb5b140004fe3e75a2fb467c3fcef8717e39e75ee4a57c39b50c7dddbc85ad28d38cd00841102c23e02065fb8605afeb21909b8a46893e508ba7e80b5d64004bc50f8816c5de367ed643f76199808bce7e62f52418cf342f03e706623441fbdad29d0014ede5e12cc5f295badb84985c013dc0aac01e8c4b9885277000aea705c4557951815e23362ee35c9d12c1c83b6e1017a291c6f6778141d14d912fa08bcb032e4fd284586d0957cba1bf48961f99965d80203cd4fa66d94a07fee66a154732ae36918c3a50dab75f37b57d530bc3e48a9f59186a9fb81ab6d85e82188f9824c1515e1c14d0f411bd303db78b7c44a630c72603e274e3c43423de76f7ac6063051ee5dd076ca44cfb252da8e8478bb4b164dd995424992161859293da2273555d190d3af8b6fb9376ea187fb35271c0c09f5a85a34a6750db442554236c093b3f987aa4a341f22960ee40c5123c86fcdbd891af5ea8ba8c435961ca1339063a413cf53c58e9fbe30f3718d6dab08d3ef3299159470a2928f7fa280f1795f4b3e25e17b44f7e98adb97916015617516597f1b1f331b6a5017825cf052813ce262864fe37deccb1842a32b2c7d28333adc7a2ea2a4800426266e804c09fc24b23ead7a90137e25b91e9f81ccbaac291616666c717619b90c7750b5ea5ba2a4841003345908229a3db0526b469325f52a29e53b2d7332f78351a70b0da027b58cd739132b1a4ad4b1abe718e31dbaa8eee2d4de715bf842760dd078474d547b1cfb003ed408365432214743a04fd6f495954e03cc46ed4da9854ebf1e9c455fc27273801a7a811bbe6bf00e62808c368eb0389c5052ce65a0208d31868b3dfcd64ee6c16cc4a605ea2ac232eedbd375482d43a39c69e3d5043152095c0512b8267b75b509d5f8905aa21b1d40a09a26fe2bffb10741dedcc6b6ad1f92c33d4ae88a6d93206afd714b15bb869d87cd61c78d8ee3ef61c36bdbdf255e649d2c7758109ed4f7602057a03beec8f4d78aab736913e5e2a924ce98dc50092cbcb15cf7b2c2fd1cfe7a2ec89db101f682618f4807c816f738314fac5293b9b0a68efc67902bf7a3bfa88c52edf767b7023d12c7c81ef5ad25013e763f14a414f0553d28c990c2698d6d9c32894557b47c4b307529c5e0d532b4fa65be659f2f68b74543f54ab28e75b3add2e9892975b09d86d244496bd7cea8ffacda8a96f46a64288da0259e1ba79a460644e8a0317f13f4490c6328087779659074da81bf25d3dd162789e1718d394de5a6c46ff80fccb024908edd8ac7da59c99840849257311aa048897ee60478b7449568dafc988e4b44a2ffd1257995c43d25f25f06e4adcd6f2a517c0205264d5147ad3b3df1913449c6d51fa7d4510bf313afcdf6bc3026a8b9a1e4c24260416d51e3b0af9e6ade809f732268e0866e0929df19d038aa8cbd9b0a546ccabca44cc140fe8ccdddbd5aeac60ba2f8a6badd0dbcc89c29d27576ca398d7c733030bc811a804c9748c7ea06922a83f10421cc548781a9acce479db645213ccd08c73d7a083691b273157bcde004112810a959d70c57a4e6a0be4fa4624080cc8aad8f099c68b887258b22e25fa943c57c22059118bc49911a7f1811eb7d226150f2d5d18b9869ff1b20d554c9e2427054fa7fb310e46f27f673cdf7515cfe262803c2de639cd56f3ab2eabef931d4e41e7f7791cf47aa1f51bb470ebaa704d4ca40ef8cf5dff8a89a1670bfc4f8f25f3a0c9b64c8fd1a58ef895c0e766294237397e5a2e6d3b4d1da86bde91dd6ccd83ed7f1bb5eab0c98d77803549f662612ffe98acedfcfac13330772bf02c445b2e9b7f53ec7e625b0fa4aae9780a46b24058c8a555292ea0a5ff06b56b0440a08445d372c1ca77a2c57c2b874836c2fe1105ff9a99df5ff3cd01371a0bd9896a2330553856dce6c1f3396f60e309361e506117c5543c13baf2023e59f23fa710e6010d4322af6f9e7e842cc33a08300ebc83b0095add40155cda269b1e9f3ff38fc1484bd033866dad04e26607a141748700c7ccba888730b4388713ee8795b5805d36c90f5019941ab5be8142c10115abde91df80b6300b7105cb61c0a76a03c0e65c1aa790cbb7181487981f19782f29f9c7ffe1ad83ad1972dbf54900fe53c540b3a851e3b6775cc0c3aef2012a8e0f94d4844c0edf916e373b0b2c24816760ba3760afc780bf2ca1a75075651e3f1808036c258835cd6aa539213295d5a8a0180cbe403d086fbd9aff636695b6cf29b0780dc84ff4ffdc36f0c4c0ddb1058159d8a82b24a6ba4caef5a907e6c0545bdba2a88528d3337d0b2b88abe928b7090477e6154016083f58e67da0a2389ca0fdf3d1025200b103d1080c08fa27187127e3aa145fccc704048832e981d1553f14d0ab779f17dd07b83b391e059e738e6ce08d130604a088936fb85be96728c3633cddc64a1f83294236d52e9cda0c2beca0fe5b85d15ff70002d94eb8410011403d5cf1cafebd9bbaf2577933b816f09617562b2adb47aa8dcbc224d8e1a1b6120bdbec768171ef5cc722b0f28f14d32170e1062eedbedd1c3b3209573fb8c08a15e78dc5ff831d8ab96e743788546a5f9315d908181753f79d0233b1ad2a9ce158c0ee142dc6670b5fe81beb083fe6e16132387c934d3814668156d5953b5d4530f17be76e0bca69e910b60f9e3f2d8582db07e2dcdd99182b1e1e3619439e4c247038cc3ef8424243641b831f9a5aaf22570ccd1f42e6e395cbe315d81989a455476093a5ace1ef07224628e11ec8a95ea882511e35d10c6399d37ac12d819c2c4414a77fad955094f7b22610da3a076c100d57eceda1c29a59ce4ec397e61cf46c05f0b11547490e8dee364820cefae26111d336c3b60ee72c1eb6bd7c3fd529d1cae2721bba04027816b1803fe127da245f6c4ec224354dd06b4ce8eb4b89390d3c5199988002f5aeb0d6bdae2faf3379b3b2ebebec917dafc878e91723e7e0c0be88e855de9889ce1dff9c3052bbad1703d9f305b3c91dd683bd0beefb6a96c267d87665dd08a4435f462aa77175d2c716295373ecafbaa548abfedc307c324d7b18a8f594294353cd933386b53f559e8a921ff585e8bb809821df4d4be333b23987cbd18f4d406d2ceceb43995eb3be68268e4b932b52f4f494058d3689bd1559755d9d523544af36bd1d14be9a78f437da873a8a69d6c7449251ad820952c38358d725a05a7fd4dbfe79cb3918937d6efcd55c879f6a9a912aca646625b57dc78d0062a5a03c8f4eda5f23b7f58a1fc8ce6d45ec57695fed98d58670cc93e01b80cc733627f9cadaba96caa78c60edeb62fdbe239495be80eb5955219d05e6aa866006ef9988f8c283f8848ada82058292f189d54cfcd4e86fcf6f7d942e4622cf7d2252dde4ecc359b016fdd563c48202b0da311c429d344316e51e9f35c0fa510f201282c0b070bd27ac624467997f32db028ee8cbb07df186bc8ead47cb18bf5700a099d2ad8a68c1c4476b272fccf264f72f4fd942060cd2cb64b7804dccc45ef26b3deda5646b8420886c8ad908574978223497397b674bf42b06c5888829085bed23c1a1cbe92700711c4dad5db4d3c774b083b4946b7852de33ffe8eb37326a9f35114858f36305b360e1307bf6b1c4be340b4b31691e5f745a1eb014b1c76009f2c7bad6c194ad9a2966e792b6d36c1f1b321f60f6c60911541f60d5a9d86f6dd0f5cddd15eb1199939165939b0ffd2f8ac08322dfc8cdc4a998c4c64c896946d066ef21c61603ef1ff5fdf5ec5481ade1c7c0daca4e10042d0698036b42473528d54e90357e1964ebf9f8d772b7929237e2a8fa2c3019550f54b777d944e48c0d8f09e6e1b6b2996a6c6731960f2c08eeba5d7f43f0e59271a25d58ed741db4ff21fc6860fc8fee158030a0405ed407a38828f3755413d505555ea570eb394b573007598515d973acaa2c77910c0e8bc0303b76930d6a904cdfb0a6adc71802b108cc225e964be593ea592597f8880108e179474b2a3be1d55f060cc8c236e1592de823cf2fcf1124f0006ed30aba2b479158807d21f2b779cdb2a99899896bccbf0ba46479c9991dc76869df3355ad78d545bc1ada8e195c90084d0a14e3733b3cc27054a04a6c86b541ac414e5028ee732d1727614f93f0a95bbde99f487ac611a416c11ac6079d44f3f783672e539bdc7e6c596d4061f9009940c811c0b6d9f2f90e6165bece87025cb11bfe7143dc88bda6daac9e04d00c5b7202eeef8beb5e3043214778f35d1a312cfd4a40cfaf0aa9836564c184833ea2411262134355308087c6dee195ac6d34acf76136f3131955456a59c25595c812cb100ee0485865088f3c94c9c79482b352c484c165e4763938a91dc365aed7c5224537c6a9341972e3a1146eabdaba9f4821fa4eb590a0d84905adfd7e86cc22137dc4d0c8762408264b0a593e6dd70bd0ff23af9263f225bd15ce89bf046167e138f103a5fa131cdea9bf48275deea0864e762983a598850aa90b531944aea296ee24e2e2b49ac4fbba89cdd5e131453908931580c2200b998a52ef1b3dd0342b37e4f3db012703db53489072d89f2f09f260b81c4ea4203a7760c622a7960955d6879172315c3acfcca18831e79c89375f975b06158019caa2eadfc7262dbac9df25bdd0f3e7af2ab44ae4289cbc5f2ca6e86e637049fb3cbfe96fe4378d6eb2f2fed5b052366af063b67f901f9bb0683ce47c14c467cc65f35426c4065b3d10391a60500ec1cfbdc33300b1e05fa83985f83724f3c0884f44678896cd06a7a918bf320f1011d295d7f283dbb6017ba916c94efba5aeb308dacd1615440816d98d2a21270f8b92e9ff596799b45cdfa3d2e7bf535b4cb0a789d4848ac10468b26ac8a667f1b068114d14d678422df6c90156e2cef9a53d2f6746f739598b2fb9ac6861a0922d13bbda3fcdc83b45e558d62083148e1f00e64a7a5e15ecd071e2bc1145154911515da7981f7f79958245e179bbb54d46d8cd9b6cb13987861dc9dfa3342beebff7cb46260f481047743b850c76f8b99cd5e0db1b04c5249301b6f60445a0fd45f3a35361355ac59e5f647c0c74b0c9b4d7a1d51b04c541bd4c65be0a740e663cf111b7a3f81863e522af636d383864ce04b5bab1ddcc61d641844d9d6439ab53628c505b125b710bf067cdc7a331b7a2d4243b37c467ad8d984f4fbc27ab16a3fa72100ec80467fa5bc67f36b269d4e691e8b832a18420b668a3b58799aae835d41803b423c16e75e081012e5b3943d3150d6740b086ce573074328d1d6200148aece750e9a7e86c9082b60705a13d9e8695e8760c7238220254bc835b221f0bcf594817d6ea2998dde1da2a04c5829709b6fe0f58375d8eec7869e26612ecd1510c4e68db016b84e4894ddc6410f67d06748dd0a9a86c3beced1665d5e054c291ecabf18e319463e9e83d2c69105d9ddcd98c88111d59ce108418d53aa44368a34360a3da156df1066e6545f43bb6f20b4e31f281c24b87d08ab91bdd5358a9fd159305b1df4f40d2a07b7e4160068b0a1971fd980bd7868a15a3893ff728128696cbf3a238987e9278b545a7fd2e179729c5e2d100c7f09398ceba050dbfc5774bdca9fab91c93521df5b6c544b6c2c783333c4bcbdfc04342a4541796043e3863ec9349ae3a4bacdf7223727b50e527aa5391210310c479d295adc1c47d584b43cf33647cb99967e8221cb52639d3e041a69cab2451db78b0e427be20fa84028353d2afc05e1a514d4cf517ef70c6651b132259a7200d2f05efdfba75130a1fd04ef7ef104e8dacaf54bb076ba606c25ba77cb3e2c8a7f74b2b0e50aaa8781628bc7993874b0315eb2cb3d5f1d64fceed0aecec3bc3c965cf4106085131ff52a07094af32b5a08415c7dda135bb8960bb025c524c40acc7e44e7ef698e1bc500f745b235307b2ccc040d08c030d04f2b2c5cfd42a5ef3e301b4f2835e01ea0550b0d8ac2ac7812c92e9a9a9ec650fcf7a751cbee06b7255dd19ece13b4e6bac7a798a705068368c314fd22ab15c142bfa88aad628d24aaa2c63b59d328bfd69c57e3b2e3546f94bf65046007b2d2cd2b8aeb2c4423150b909e5863aff46796edf9c527d355ba574a43bb29add8a9003aa33bb2b753f2ccfadeea824afdc6d3ee75fc0037b19ff879fdc4b0088d388eb948e28f26c314ee84c25065cbed2f9dfc8adab7ffacd1778ac1f7bb869507c24b9ac6ff3c2b9e65a62582c90d2f129cb835c3db44663ff0d1c8ec83baf2130cb7343163367f766f8b4118ab43cecda4197c6242bc6425e33460dd33b601d9887e68ce565e8eec632b20637f97ac02b5f8ff20c30530a58a42efa91813d8be2109caff2a18a4c0af939b5a3e0bb04eeba42494c5a4a540cf45c6126560ad03b2002652d1e37d0a006ed7c060bf246b33b4a57625f6c351eedfed217c5187490b2893b88a3ec1047ee6ce11fac00375e6990aa23ca656e7f470f13dc528355dba6399721916ba3fb60e08f85c4e649dc3c38f1f63a062a053a55fa95a7128ff73d82c2efec1085b7f75deadffc9608dd341650034e23cb0dea0fdfb1a15603b821c76b7de375d68fca5d89e09225a2ce1e6934730737b320d5e107442a4c9d8bb59ac5f2e3f7160f9bc9731041ab6f642732c431d9efb3047383dfeaf882f646c065df8c7c078eb944a3e225569feb2b6891dd625e34a5d6933ec9c4ef7f1c6506d55f3925051927c9a0805be109ffe7f03619c46341d65c283f50adfd0e837ef9b6f2ff6c4626ebb5207170bff6909a2a9a9b6b3992229f423cd75d69332f68a599fba60996325cda107fe84339b4621988dfa24a274d753583dcdf84cff662cc968448821ac1748c7a0b9322490030f8c187423cf5c69a9643e5ac0369f54900e689cc1b104bf5401a1729026be3808b3849bc85d341fc3c10a1455a9a51347b4693d378a1411a5741379375e9de81d581cc977c5b29a3cef541a540131eea5910f311fd33c5168bfd1a778c4335631dcce55eee93d16a7c7348cee34732c4a5305f36dc84efb038dec7cafe0e6eedea61ecddcfc1c754551ca3779cda54ae40a94fcba9fdc5aa2bbd0d129a18aa1a3855cdad14341263bf02f542a3133a3695f94d1616c2d0d4a9d64d2349427e96809a968b3fdc9fcba47012bbccf8981d061187967df5aaa8c184897070a4188d0c7e9641f0ab259ec46c292bb45a10ce60ddeeac20902afb3cdcc2e70e57f670fd52d55b54fb61ff2dc2e20416662eb46636c96b06bdbec31901dc144ad0f337c236ce084416c6f1c40068ba0e723fd59d09f084fc7ff12257c363c4a51d1ab7bf83fbf8a5d79548b1d58970e6c5a42f37f1b54def7ce537570ea21b1de33db01c576e21a2c2f18462208075f5807548a6bc9e665eb8316da4c0ceb78ab303a85880b156cc85e3a737ebdfd1e1ae907c2c23e78739a4e0497f8c939d330db3ef5035a3b216530dba9288117bd9e5b9e104ccdffee54b49f250e137a2aaa78ad990eeea978acb01dee15fea9cba49ec71fed0747c4af1119266cbd1268530a5e5bd0fa7a2a9c2adef336bc448ce479ffb0977f6ce5e26f0b90fac3b8ca5a810ac5a77638b14c2ba718e653c673901a7fd57d953559de7c14911617e7b6ac84993fadfb20fa4fd08152f6971eca1ce811e244accda60e072811130f372ce6fbc47e5665cc15d4d32186b9329c985f5caba71a4185dee39af3de0d72282553e4e0dfa874faf3f9fdee3acd6f28fbab0ae49da1bc9c0537c5cbe9e46fb001aa3d3f51e342e881b82dcc5c44d6e3a600ff468c586479279ce2f0fa3e350997bd1bdbeb72714a834ae8926c26a526ae1638164cfc2bea162ab3fc2fccf449038325d0d93817c3a37ea7b09f211c79b88130add50d32463369375082280318711eff051525a15dd5d70aef3964417e3a4ff5873aa38a45a2d45d4bb0b0f58539f649912b2bc5f62624d9f68d10d821eee21cad623502af4648b8699669c0590fd30120e65f503d9eae72dcac342d4774392f2073546fa70613418ed49026e121eb17990c866e6ccff97d624ed18fceaf555b64e8bc54894c807c07a6e89b1a1d5ff8594919e4d10b0a67b704e274a6030d22dd77f9c6546a10133d1e44d6acbd6e9adc57ab59fc556ad03644c8b555b88e7a4923559c2ca97c2d1932aad430842ee09c4da50d951de5f97a9cbca5764bf0d1f901914d265e2b38cf6b8565329747d85305304c7de055a835206eb647fae88f62693deb2b0fde2d407a7fa1a93969d56db88d29ccd2f8371878ad8db5f5a948fa7d422adf13befc301bfd294a722ab72b9f15dced9a67582b5e8b088acd6b66379ba8e6ce2cd38655b014d13fcea11611b247f108b12daedce49f29cf237a483434e09f7c43e981ab39a44000534dee4b71e1b2169b4db8433c8993d33a8b6b15432319050233496137e6839adca1b55209456737b956bd9d25b85437b916b84845648a0fada09b9186afbf90ef5601c78a28cf3959afa0a53107eac744a7457f01e06e5d22f7b1211a19b99e51a134e31222d4f72de95a2016a7879a259fd3d1fb2bd6eea134fb2fc64a25b04dbdc0543bc6916af7da6126430c0860d0192780c9e15658a9c804bd898eeba3f24dce616a164399bd19610a1b770308063df03503a45d48dbd03755aa7a6f163ec7fecdcd0f5e76f31e6e07dd5cb87341ff1ef1d252d0de9204cf17cc14b72ca27018873da2635e3fcb8a42794956115b8f25e5dae33239cc32aacd04fd46e2ba36fc1ab0bc6e17355e14923dd9db16e7dbae8c19a36e431941dfb18c93a9f73faef1990b4bee2eff7cce32b639373d8bc365778a33a9a022a26a7b7178cd09052b5449981c6881ea52edd21d1b726624cc6c716e8546030896e70516bb84fae3430396d0a7fd02bea36c0628b5a3fa0f63eaee9f94fd85ae8a098e52ed7e784bd104f0c605c107e560244facb4ac6238617305ede5348318f91199d48a77f54261443928d6ab925b886decc3bfe2d342c67078e58a3ebb34b8bc81b6dae62f440f0f65d726dea4f5c1c4a00f3acfa308e40da10461704cdefefef6565831c3257980278f70da9b34f5763afd9e9e35acb36203c236566c05f371667dd1b62deead47360080bf6d703e0d88328f6c8964f186c49f67c405a73667a2ce5a9e1d6f85c0fd9aa5ae38e0ddd9b79171d8edf10bfe4a116df9ee7eb699a686fb0a0addee545346e68539ff8b97b003d672290a4c4b7469fbced5a26db010702676f94e805df2517e7ca833ce35b4d1bb2eca1c7e057b47ea2968a6ce6a6b7d6a9a7e895878a33b7f720afcd432a13e14926b8b352482a001f0a2b7a1327663c9a7f8b44f70ec4546141d26100415a7ae80a3868df152d760918731c1e0ec6371ad286d8d49e1752bbe1bb01f0997fb74e8ec02aa5eb568011dd442d3489aad97815ee02740804f89b4ba741269f2ab67167812ab81abfb66a37b1320a7f2b0127d0c94141e6b1456124968471012f5de3332e1cb04be8ff446d49d9c7651af22433f057438e1834d8161acec4b630cad2b14f81354df636d0d13484037eb0493cf2d68680fff370649a653a51a4be2e46d51e70605326ccc7a4092857c34be8ac2ba34e58631f762cd14320d22bd01ea4465e510b1c719d45e2e51bec2360966e8d22358b941c4863cd9976d90556e61772c94b3b4f5a1cd8fd328aa93184d33ce2028b26d2870b262e4baf7426f1bad15d030340f2d75fdbfdb7aa8115400b201a88e404320adfdc7c40736021974d81e636154d9b13c485c8ee7ff2e8d5458ee331825b18e30db9977569411b06965f396873687e75c61351aceb59a221e3ae2bbc4d604f0d9ae0967e6cf040dd03734022aacdd1d7a1a5c2d14b9c21000d5d57ec9c844388e47e96ab144a6b65c86591b9684823263666754d8226380f6e954c2953d9f57d4975edc88b06707bdfb01c4f586cc29cccbf82266a317d3c55992c871df0faaca537b07f13dce912039b565d3cde9a2f88d7d0116471f001a18529d8cd91d7a8e2627bed845291b724a54182d2050014ece0cdadfed1e26baf438de49503e0d14ae4611d5336be1824cb899f9f9e65b665530bd4e2ce2eef271af3ef9dda7da435a4342034bee1ab5e5d65a7732a3ce33874e866bfeb61ab10f682a4ae021908bad56d85ff996b1384aae3e0677b1893e97071d1d1c3e710d71683b28528cb7d122ea718b6359513c6f94604a6545208c0c6b960fb7bd83decf3384f141f2095930fb7b5465199d5985f9ab8ae65bede81671e796cebb48fba02d00ce413505549cc9207259aef853544d564c269d4c89e6b7ebfd31cb37a441d685c370fd445250e21feb9ab70d821fa20b29e849501d8a73ea3704569c3ba56924eedea7ea482b22bb03f96660f20dd406552b3fb011d57dd276c8ef60544907abef440b2f8b2919a2a5f2e47d4e4ea86833af968f512f1bd095277d974dd34cdf0455ceac120521e5474076973b24945c6fafec6054259ae47c62437950883f562ed504b04483d7af838454490011436f4c4b5ab3aa965741e4e6e7b920ebb40175e5a3026e9613681f05ac8e85b24f0a4fb9f48cdd46682fe0c887010b1c0ccb1f3fd100b00bb9ee4cc4ba192132534c25001632a08a5400abfc5ea18e4fbfb93703705420e606dd1a3e7289595b63a8662a3f13971418f0dbc5d703f724438c5db5fec3b91258bb20981464d7d109dda005f54ccf5aaa26deb9faf274771451937a9ad3daa8c30332e5204ad471a1f782b73fac5adb08195593761db408cab18b1fa4fbd1be8ea2703a9d9d55def4b4371553a95437d01a0f26fee91bc7a2b95c1dc58fb2d2ad2143f73412d493cf84a170d106e1eca7da20960ad69b9b1e28e263ce0338cc5ce178a933746df27811efbc94ae719ebe96695f3ea6064ef705cef15e5630305b4d7f4fab78510f2f4ad2883d58e21df29060a9a302136f3186b8994cb7cdd0c3ab4db419ca8c8ee848a7feb74397fe3058b99750c4f1164ed117777ff3035ba410c2ba22b5e6ff59523776921eb0c17218c281421423c110be06f7b9c832675b2325cc9d90090c12017a69039bf944265f82d705028988868e95f6b655981700dd051edc26a464588041d9ba573267f41fd6536fdc721d152da34b6736caf1b3d3c863cdab9885d9400e8d7eff2d045898d5e27e176191892a4e94318c592ab10927f1c4d9a575508d2621e6c6d8c04d597cf46bcd1e6091cebef7fe37ffb5ef077a9050025650daf1cdc22f0a5d8d53b885d98abf94155f64b7bb8a6d57b685b2ee5f1ef5acd8439c89e43bb7ae9d2494a1d8e76c83cc499a367bf16b64098ddcef53a86f6556bca7420d44164959853a95864eeda237122c9bc9c8a589e4d778e69d31464e9bcaaa345f60985ad66d44d0cdc68217f8d1b9af02b22eb7e1187827c2ac4d5aa3438279165a33fd5eea9a107c1c847a63e310ec410ad7237a085604f800ef20dacb8da98faff7604d460ce5d5d89da07cf9a83a326e1527eb2f2cf783a8cff95843e8d8facd72304ed5903d7bbd3822389d946095ec18fe54d8cefc545a82153263af80c169e5ca385ff5cff1f31cab48b5083a1d2466c167560b203bf14f7e48b9214f7f0bcadc21ea452bdca61ccd8477a596ac6aabf290a90a1cbb48260e9cf58ead844f259652d103d47c1eeb3099847fc7a3af1a26adb58c3db509b18188b05f18f4c32417b4dd9521fb835b0c2dd52b97b66e65c4992c6e2d6d5572faf797e2eeda302a6db4066a630e811cbac7b647dce04a388d205c0592b080edd76c3a89091010760afebf5e9e970a17dbbf3854177e4a37c4db0662113d4ee95c37d91c96b2389d2bf5bc84ab8f640c18ddecd0ade17ca9c09ad8d69d05412eaca82bf229483c9f049f6d85aaf7c5b3256c8b17d3bee5d862b9d74931716d22f4031d18f7ccc31b38886c3c925480e4aa8d11e7d6bbdd9e271a303488723f703e2cd9e0c9af2cb00d2b6f1150af90d33ec1e2d50ad9524de71d4cb0a33e047f872a32f635a8bc07ca74f63a0ad9c8735033ad08106ff899c50ca51ce48a84a3cc5e7314128930145a797010e1d268e66fc8314fbd8e2f9dd053eeb35c1af77d2ad809303bf0b9eb897e2a031c5083155f5c02ac571e31286298846ea0861c8a893e84dcaf16e7f8f9594fe3c00e011b560e494e6e5496ea9004b33aa79c8081825ecf6b7302eeef607dabcc8a41733b519fa45b566760921fa4e09a4671e00e1f10d0d1f70e2c494788e458f5abba2a474b6ed83f7a8cf74b0aad60328386ac42ffd20f71b1edd1c2d66d42b872848d7ef8be2d8c4be82df30a2d001b1fbe4933455cd75e1de0a5cd6531ab5818af6110f40cbeeeabc50716c4db6b05289346386c7a1d0e7ac25d6b62b11c7af89c15e7749660e0668338ced80651d2f67906d06bd8c0c0c63b22e1f894843d521cd0397d2648e6ec21d6f1d9d3a5bc30c011cbc8d335a8e09d016b41f638fd7ebbdf9d4d4d399f4aadc99200c250367a86880799a4cde533f72eeceec2d93e99debf8e94366e79230e290835461c6429b43cf2ba1688322c3b066483a375786874a9fab3b2d4cdbe72a47a7b000a40363f50ca58f4a711f582838a5c98011ce233042104f1111f44392703f706b78f9113e14e4b34bfaae2dde3b2095f50f8d3c4d5207334d301d83fa638831655ccf453c1d719030911a3d347b81a908dba6751be4318891c9d84d9f364c9c889efa20ec7ed138d5bcb164d8b9ace81b496353e378692832a4e4a2b5bf044226eb28fea610da8898597dd92894735233da9c04606b3a9b610357d2c9319bfcb0f44ce5d7a3eddb492744fe4b622ab506c0e58b880bba4eeb1678a66a554affdeee1481e9c72d80153a177e142debd63c42047cfe8ef79a1f3437275c4d3407b1e70b39ad8049deb5adff788e5a5a46da6d5561485a5a2416e945087f8d13c801246c80a731b4f8839690ada415d2d89e672c877b7539ab299875c1aeb5f2bd8dbf2f0d705f3ea5d0779eee4a4b6d2f068c6137b7930357ce85d077e8044fd025a9f8574b6214a3125be6e1ec4eb092cd0a233dee45075981178b481e686680abe50c22b30c38df12b68ba75034df3fff30467481dd8f6f301f16d6e8c605e4b1be94c376ac68c09121416290b73b0543faf106b3f2c900b795eef3cd6e6582ed3dfeeb9559b042124b3a2ed81051a10963ea74dd23044bedca493354b065435f26911367195df93abc0a41db9bc541f6b5d94eb94b0e18c52002d5795635bd573a01d6d5ddade89130beb741b98641d39a552fc2c43f8d63f0545b1546f6d58828a4cc3f2f62fbd843cfedb75928bdb69dfeece455eba460ba7f7592d202392662fae32eec730d030d119901e87d5318111e82e672056c83315c41b942b4848bad745e4d1a806ffdde1f76da66043cb0191a1716921e7dbacf6331a65d89fb4e5a0c88e8388b0910f7249a797c92fc75869e77046469f7dceda7cd80db07bac076f38592d3e0178c6178bcd8166356c52b53a2d58a64f2fb3018b4c91804bc73fc0ccc5cf63156f7839263e45d2c9b5097f8533644a3c851030881402d626a42da243e5b9e2bcbae557e79f77d1fa223da0978d51a33a9a33b126ae316532c1712b69a1a070ea5a0dc20166b60e56fbd252dd45852c5b1540e0ec6cddb4aa074a2a760c988491532b64b7878219de83d463497b2be713cc7aa9595a2f529c826671ac79412259bac5efbc61c269cc48fbd30f40623eeac24bbc30cf6c96455213bd8ebc5f0203b43716a152f20322b29c581fa5a8e8c5be9d2034d11af692390d3027c07122696a4f7240ac0d22cc5ddb6fb214204358290789458dc1b524152fbd5af5c38b1823982dba02559de82e3d863e979c788daf5ed88ee20a00803ee169a883745c237ea53ab0bcf4452d24b14e3c271be6bb1f28f11dbce105dd53c2554e551fbf2e2ebdca9917b9577a38ee7c951a0daa291c848851a6d2113afc8bda0cbdc2769b62ea0e4a4ee2e9dc570027669e05fe9dc8d7c9329f666ae024576fb980660441831cf46625413bff242ad76f6adecb4e5bc44ed4e31b3297a9be13709da23a694ec81c257ceeeb1e078ec5c8e0e8e099c4c37f8681df1419c0f3f110930ad7c589478d6636ab44091eb039bd98ea7cc339c26796d04bfc53e8d965c38879adf41547fb9d68985f2372d26d744683d813c35b70c7ffc94c18139c03ba167f14f25522410ad491524ffc46c28909427e2112a34da460bc58628c51270ed3b96da62b840250f3f122f9080f45a4b831eac33f3cf6496c717665d10cc08247363bf0e7a4ca257a5086dcdc3e7406e57f1433be7d29b653a1467c1571f9e548718fed455b768efd365c69762dd142dff2e2c1b7086f22854c6f8922adbac1f97725272163cdabb86dacf6748c301700a5a3e39b37d84bc0f6c387c019044be3d71e0362abc46ab47ca9b3123e072c357a5762c44770930fb5644ef5c6ee718d0f99283fa2e1110418307353e52b51bc9f058a75b30843933046b4371a418dd8c90135f3bcbf52e74ecbdbfcdc9a3592c43a6cb0125cfae03e087754c93e92d4511a0dcf11aa029925fea33559d23d956550e4b022d95ef0c9cf457494d217cb68fd7ca02fd9b54728ea30b8165afa85deba97af1fb6aac7bea0f9a7f4f321412f1eb990f15f59a05dc14f0e08b1b1509a48c7825b42b30b25759bf620537b18c05ee78d6ef932e8dccca416c8727594aaffef258f30fb266a2e5d1fc65f8119a21ee33adf3e6f4b1f16f52e9d8d821b21c13134b1604c395673912f35841fe219bc598a7192e4028c0f6e863f963bda6d9821839c74b4585cd0d4a26130539891ed87d293e490beb3b7125b7c07c14a926f81d517c890445de5a42ec48cf14a1130a9e86d75d0e12e3bf0444275861c1d8f23d6b1b8614d5b8cedab14d191c1015124d1937244db38e2a5a20f0042ede5d088276683053dac9ce5b7d43a0f86adb7aaf880c53093a53dc84aa7b89d0f9add40f11db599c1ef7b38e76975e4c29766621aa810bb36b02cd3c6680f6493a4f079b54b893030fdecc2db250dd099a3be330ab8912090422cc444207097de70a8c73550e00f12e8b31ac3bc3d5506d320140c642c9a18700bdeca14d720b6410cf9c080493fed761e35ed0fd5c72a83aa3aca66d4a474899abb39c0f1d76657607bcf7548b2c17cb7e7fee0c311d646a10990e40689b85b1f62328891cc774fe2167af00ace21c915f6af01c98e78899b949f75c8c0ef5e432677f82aa3898f3f872e57248d13075913ca54d0c0d276e6bb411fc5320803de8c63b6c0d87b1276556a7d92f1f7b4a5562cd80533e597bea80eb6a80469f6f6b13d7babd4b5e8f47374211e8c7d58764b345d3d41244e3c182ceecc9bcc83351a5ab00f076c931d2840107954d8c8d7798248ec77a18dc96bacfba26d58001975772b7ce290782eac65d9dd344662d2eaa2c1014e662133b6f3178dfec365147c3e04b5233e84b73334e4d9426677fc31f5d5c7e539e3c618f801f4cbe8c787e1c05a6097f863c6b4153a5a3fcaf6b3c5f42776e80a932bd9b6f1cc0ee3069dc7445a236e28439c1199328f5e8343863003d2866ebca62dc3b2340d5eb0b51d4d7edf0b98278d68b228d98ed6b673605ef53c155cdcf083af9ef76df964ee9ebc33123d18ced2d7a250c0a7c67cdf2bafa3fa7aa647fc40293e89a20f0e22d4f8ec7362739230caeedf4d92feab3c0106f96d3126364199b21e7fc64c2cf3c7262fa20428ec502b596eb0700c15383a66dabbc6f8d26c8d8a6e88ff5d402c3c7bcc0cccd292a00f160c157818f228322b0ad4bf032f1c44c8fe12973caf3e507a2aa69f77cd21cf159983f70f00c84b475e40caf5936712241778c4857d031dcfed9984c4a971ab80aaad6544a8e054bee2225c4f8107ad3d347278ff90befeaf33604be07e810184ef1a78c7f719513dfa5742f27c3fffbfbec914592dbfe7ac370a3fe45d6a6b270e37208ff4daaa619b2da7a09b52d5c808d61b2daa2da7c2b76921a1be1d3c93437110aa5a0ea9e50a96e745045c72a718fd96966fee464f9b96d3048f9445b76d99a56ff92f3c69ebcf9d1b69aec011fe376ecfd6e9fa8089d385d80178c13d87b78914b5908b0e30cfba47d5af01bb4fa41862998ffd38a46a22e4887bd1682a5ae66935a031ddb0be895a7a88bb155a0c7e480b9d6a14505efb47c93a0fef34e6cc7bb83dd585a11174cbabba3b0b039249f22d29cf5ceddd6b4fad3d1c2228e498e59c19c5c4c337df9915f6d3fdb3ee5f0aab8009c980e07ac11df7ab3c4ecf690b3fffd7781187a03bb1bf3b9b691aaea273b01ed7d4fafa643321a5f21e6e3cc51b1c37e460e1e1a757cff20df624f785d8ffbb3ef831956f00d9af2fbfe4af21ce9693d092ea878d9166b1c46cfb7a4f3b2306b3c6c1d3741797649b4c6b2e26544d2b6ac8fa6a802fa11c845bde0e3407cbfb2126de154abf30be7e68b166ed79f952a70909dcce290ec444d7a12aa034429c51f0520e6ca13060810a8d9edd1590d7f064346a147397b6365bae013d8f66046e7effe5557018041d2732f3e48522becd8fc6d735de0b65de0427fe9ebd6349f78ba8234be806a38d16f14349693b362954baf109edc4d2df1b99f9e0c726708733c6e9560c476df47221a81c3e6c76084f12764165aa78c9aecb2b33e5dac279b056c0c1b64227ca1d4b6c84e6a823f6cebdf527f33045a878f3d1cca5648541412367703610b77932beba5a9415ca2de0987a09d6bc5b0b85778d96439acc12a7579fd0162dc51b1c0671d41921c540abcbc30b7c75641a5dbf2ea57899934176bb6adcf04c542a008eaa2df4748a6fd6c6b7c66d28100018da4a32dcd5a04963847fad6f28687be6709cfc8178504fb12cfefbfe847dcaf1a0d41b3febef6485d66202b5fc618037a192b1810f4c68e984716a4f33a54045854a4ed29c453874632e28927f93b856e7cc7c8a514654801eeb7136170511fe3dcc03314528959a40160f91656d47558567dea98ca072452e53a9e06e65156a430562dd98b94c98829bd1051a9e889a2f92d200c8b31cafefc43f202d4546ce3d150a93c29587466f2a72ee96e9c48c0ff1eb1b1d318f65ac931765f75bd389d1d8e7a5efa8e131cfa08d54bba1ecf60670024861b5bb304a9a742c52544e68a5545775ba4ca15271ed86021824148ebe3e5f99c2e509f05eeb9eda0b112e230064922c574d64d5a102ee7ae40b4abcd79fb0b3d9e67ae61687a1ca7923e4ed80e6bc36c11eb79fbccce0d06cbde58a62227966c6f5d62700b2057ef36d35a8e920d932f344aaa786c4296c32c02ce076f5933006ca72b2468817b8f08e106bcc6afa2bae7c54b272d8fd1486bbc49be3104934b21dd8c5e6492e228075353d6061c957cc104d2fdb10c1b03da2c0aff11801f3f57b45905cfe548a2b90dc588965afcfa17686b28918dc15536f58ecf759782b328527b18a7137d1ed3afb6d0852574520b9ac540a82652d5b5308e1f95f4635fce1b02d2a1909d32ef6dae3d6f883739ca60739a737a63b0f2aadf5a94b8193eee21a3a3c963c45e71c46cdc4ef3e7ce674139467adf0db5ddfa24fbe39c941986245aea027d38bbd7ac6f4f91b8eaff406280dc0e43ad8f066303059046146fc13c3d0bdccd6c805c1b92ffd406a87f0ecb01eeca76bcd8908cea3c0104f15b9cd46faf9a5ff3f0eb08d4475f87ae26d9f983bbfa1dfcd61e50dbe44c5532182cd1c6a7f6b386ed894f921c3821a32a49d689a306487a321a33a7dd769b828e60adabe8c4431df957183ea0cd04fc596a7fe97b64541eb103594248e68216a863ce98b08c697dcf37207c7d904331af715cfe272e6282e274aebd812086334d8d8c244d4efd53d37594e761b4c27477f98375dbf270bb28f666f1418807ab688f9a81589c87a7506ea6746e13fbb3a15db933925daae50a799f259080c871aef32dabfbe226c5e1582fb74a9dd23ddf7f8f9856cc2451f13eeac0d3cb98c503e0e3fb63aa96a079cbc21b17608083524c90f699e769e8185390eeab7e100e9e0298ff409b031468dc8fb47dd2fbd77bb5f0afc09656d791b7a8e75ab038d489997a642767af87676e2e85ff9448800ecf1196a300a44da552f06312d5b4741489308ed8fc2014267ff8bbf8b45c72d4449fccb9dfe47af7a8bf574fa8bf640fc3621e22a3ac55c521db339dd57e6dc99b9b8bbff7364f761659487f064d4b4a22e131a4438b4cb052c2e0c918d7676d4176d13a73a9413380c6e188c430a8bd58b7c2607114a9e953dfb80e271cad5925599ca54016356d7a9e44ab18d29940342f2a8cd021ab165c497b2a3287099d79ef43957d5812fec6ff1333ffd4821e2ac5fd626cfb3de04740ad1de8d8d6a8545674b70937d37d8f95b00e2628edb3aa6b5c7db24b7370849d973cb06ce9c77c05df46e782567bfaf2114dc994161622a90f2bac27823ca70ab020a49b849b7fedfb804f26384e48615c607aa37edd81622042e13610e6e41768bd58e0e6ef3596029effae67a3ffeb51f21dfdcfd421a84b80bb9370d177835f526da97e68d4d017e111158bc490e66720eaeb53707770b6550364a9beae5187ff730a53c637582811da9cc24c44dbb6994e94016f9833da4377ff09af20f3956a426bf05a00d655e42c8aeade5a28b9a484e61a2591f972070dcc3340fe2ddb0df578964ca4410ab22897d635a973f65769550e0e948df046985ac581e35dc78ae44a5ef7afbb9d2d78db97f3afac4311b2ec320a7c54012d1472330bf53482457f5585427a451cb464b12d58a930b1881919ff33b1d4d50108f4da9a79f2a1d4fafde1df5e558d61de2c9c0bab29d63fdf4610e22b5f2de9e081954017ffa4377c0df3f48224e137e87cd08e5c38f5ce093b21d4de042cd732bfa6a2354dd10d76ef218ed72a8e81dba8fa0504890694a38e35dc9824e48c10ac68b6805048833523291b7a8384343accba41731c35e6208595adf7e25c586213a80ec065aef9afc307cdcc1565532f7109c0f9e0398248b0fe02e114a77ff4cebad41d3c6ebc0059e600277b9bbf6a880fcb1e84bdb6b03b8eb057ba91f571790a21aedfa6d26dc00be428b9feab7456e09102d1258c244e51ca23c364d134e04fbcc84aae3de055f6cc2541808852a46432d0fdc2ad114c0eae7b8e298652d4ebf0cc9e2bc95e7e44934775efe4924ff282ffed88c853e7e00ab7709c3a564d30a85f2dd7864660b989df1dc1f6e3e18fc464f987f13f428b0e6c610539e79c9ac1b4d31fdd3e7f9742c6add502163e6366a7cd971e78d9ad5d72617ae0eaafbe39f66464b6a245980043df17b0bdf2da9412ca255474af36e16949a1a05628356231eb396d297ea4d1d07fffa7710d12f621b9d7462608549287a4bca4e237b000c3dab4d5d6629da2b5aac1dbd759146f145d15d1b2de8c319658a5fa4e05266a214af0e0c22fe6dcce9cdb368fa05ccb01091f43b97f6a01887d73666bcfd4165c3d40285f480a396faad09db15d3ef995c8b6b6d5bec37c9ed5ea36cf2eec90f213c15692df9849690ec4449d97063048e64fd057e3c98ebb0da884b718258f1427e57867def9c2cd136f200ffd7d402093823d4f00eee35a8dbda637b88d53990cef58f2c026f17d00614e79bf74ce46f869d07e2bc52aba9a4c642ecfda7808d6d2ae14a692c7e69437a7b8fb8f15748fc2bff1a7df74243534d62f35119c409d6b3fe2f04ccd494df05726c9741099393064152be5f259e4b64c206f21b3911a5448742891d9e4c89d14670e28f0441ab96459a1e6d949f3d8d5af8f51bf6af33e517dc298ef0079bf5b202c7dd924cce0770df5fcc87b63017395f2e225c85c631fe69f136b5f2e208da4d1bfd6fc206ebc57ce79e8a5f81441eba5ad37a99bd7d68404099cf1537417dffc71c595fed76286a7c9705429f55f86d89e241fc320d6e759f8a278424bc2a805804477ea971a647dfdfae7f305f6d14f280cb2257f8f88709a4cc994d87cabda093b96550c52fbf01bb89b26a12b384ebf1efacd9ef3fe218c25d27a3642a2f04b5c6721083f3dd1b8c7c8f57a8107c5ac71d25c05ea4bd8d3af2ce1db991a5d87b1ca3fa3bbb8d5b7f4517112b16e35245fb80bfba77126109f63455ce184a63ca3a40a6264311d0bc472ec8c3b1bbcf2feaeec537a746d36a6ef97dddf9d004bef6198047f414dc6c6b28059ff3deb2fe869d020301e1afbe9702c85d4e17c28b09e9f15b440ce0f627ba6ec9beaaa7d1fa7c85a0ea25ede9694b59e6e0376835bad2a378a6a3a6250f512abefe71b53b55b81c9531441e0d57c5bac0f06df2da71d6c400586fdb6ec496bbe2fd37edd8eb4ebea4087f1695b1311f8cce7f7548a63a071a26466245699055be05b2e50dd38d98499ab79db62ee50c01215289f18ff206e1ee1e2b5b377bf87439346159453690bddc6ec0a81a27ff363b50da95f4b46f052ec46be792a5e693a464562e2b578af1b80b8c8606e4f20ce2dcf96b9ce4e3f3187cde9fcd65e39729c1eeac3ccf6015e8a9c08b693449382745cc1cc655b980c18e9c9d53b8c1c8f325349b72820d23457c3f86b79916c51c9baf484dc9d64d1b968117d0048245611d6f324b44c032f9a503d555eb105df1e6a3c4c1b24330abd539e1e44a28f8a2ab7f15cc3a7f49d4ec418de90f60eafe4792ecb6e6cbc61f5927856b1f0df073126f958a37881c785092ce378dcb835de649e8fe47335e4f871824bfb70be759368603ce8627e7cbc6ad4ed3bfed2c65e80a44357cf5fc9bc84993c85d60411c6abe0efcef3434bb5cb9ae366718ca410ed9e2c714a734cb9fb16980210a40be88208f8e59fd853e0e9fab2b63c92a2aa21dcc017482ace67c4baadf4950b2c6860fe3fe957ad41d183a935f920dab13feb0f85f8ba069a35b8bd46c348b5f30df93121bb8243a5f8b8420bd9c02cbaf4578c420acf52e3d879c787906b0f8a1aefd5ae49b3dcf2a7a7e4a33d8d6f130e770fb158d3ef8cb61d6821e2be9e0905825ff0d3abe347612129891e419b7c75d3c0a765a5e700d63adff3703641ab704ea033a1141ee4af26e6bea2d2003bffa364be6ea3c91ba8a2d6b63f73710d647510db99a49b2b528e918e1aecef20c0947b57b23b698a22835759c735c3d4cb253cd00a98087a2a014ab8d4d1d65a17a4abc07ab5c51c2a5adc82c6515817c86ece16c907844f1751aba6f9558d54e66e0c95ba27d1af137eecdb6d2544c18e5ddf98bb4f7520168bc8c3f3ba1ccd6e4308e54f854c74d0d0d21f323029c6b6171f89e2e8c6af2faafa9052f69a8d907d7e15ec37975624e99efcbda933311bf734e917610ea3eb4eb07618b3510ec0542220610c258ff4608aaf9c84b225aabb2e441c1a900d0383b0de04d885a6e36a717974c06793bd38bb23e4c2ffece0641c8d59f4af03f9e75fa549b9762ebf0642b78f9c86c64c6995937cf8af355f76aef5561482538c864539f070dce230cf2f728399f6356bbb76d16082a50da07ce6cae3eceff83f75763e6fca55f6d987e52c26a06130dc9e6db05ec7f88d4bd6505ccfc33ea6728503bf9c4ce47cda90bd8e00ee94ef36eba89790559b5519b4561c1d72883d8ca18d1f22ba9a841150586c03da507076c78c5a82025c7408036c3ac3204d0d29b0da431b01af487f7e1cc3106192c95f2b91a9292118f1dced98d60801751c0df880e9a203bcfff5fb728b541060e58c5816a068dead2d7d51afb3db0d00842de50e2f148fc7deb7b95fcb7573fee95de703d76811aa4ac9188ab94d5874d405c12d1784cf0025b420212c8141875650259174c48490259b8e1280140aaecaba480b8b01b269d128c703a9200a8f657073065f5d47814b24d473c0c070343de5e4b7689973318154a9ea9e5f02732d16bded950d7f628af0dfb3b49164ebbb4190fcfa2ce52b4795fde84a3ee10a2d3ea6e32e671f48849b927ad8afa9a5ca75685e581d070afe35d28d449fdb59cec90697458c005901bebcbbb8996a6128b9ecf314e80e805a6654c0814b1020476848afebc1156b6c399da763f79121d8ba850b14a9630e875b20274b14e73ecc1f1adc158477ceeacdf843ea7066f78ad69d3058a5469d9a83b3a2079a0c1a8a80c73bdf9edb19d22961af08f62a521218160ca69015727ae16c71d0f23e294f0e3c516715ac1f81462ff1361df39f98d66e082d30ae87d627aa02fe9249de2deb5e2013dc321d06d6cef4a301a4c288cc8d94bec8880549fd3882260803933111c78cdad47b3661b1f2733027f323e7f53be49cdbb2c2ba1991641baf0be6d042f90ae1bd8b59d380b3ef2036263be8007f57016798213df31e57a88909c8697d8bea53f0ad4f1af9828894238ada256dbac4101881a73db4e0bc84b5ef50114349c2074d73e8a8088c970b047c81d606c13a4c4d3761b0dedc67479bcf5affa95b272f88fb537b0f64ab600b8ea591693c0fd889bcfc63912045c9def1575388ed512a2e9b017a1a4773ea0dbec77a44649e19ef90c58894464607301a67a80652c02f4e216071f511d0b3794fd0df49264494618b2c1d39cb7050f2d10a2d7bd3626821598b301863a4ad1edec7c814eca949ce5e688e9a8491c0b9eb4b602aa9eb5545830d0d14a07fbdc42a68f260027bef9c66f559474ae696d7439465bd32a8b4ae8626606c0e81c1d7004cb23cee354bd195598da5ca40ac41a3286c8d0c4613f41cdc3280c27d5d4a65db3a1ec7e214bc826444a29654a290590051f0503052e04e5dfc2ee4d43907441755fa81280c69693feb81befbb6e95f07d0042e8830c9921e418e53ec0942f44966ad37ad6493c28a4f950439f21e8eb0817cd45ab20481db1e45a7a82912a51e8ad58c2d7f7a67429fede7bef3d7fefbdf7de8bb371fbf315b3d95be8af48547b929a32a20f46c595c39a41721265cf982e372029e204890b45ccf0100315d48f22e6d0a0c411225ac85879f272c40ad31c255bee5019f23465044f0f62d0b0410208113774ac7ef80f573f78d5a6440c52acc020f1020c2e48c5f9e1de029c29292f3ca9b97942041249c3e449c90c134540916335040141c43902838f3773cc50ad9a26b5242a3600224f0da09016f8a0a3a66ac91141e03c226258518ae2852ace97309005a2aa1f2e8311a72b77aaabaed315393ff47b2fa01d0ada217e3aeaeb36fea3070dcadce08d18274c387941b0ec49e2068b678c105174009264083a47ae14e54714200c850c14a9dad1b76221a4945b2dc1541b056a02ca56ed581f50712cc7b2b2aa4f4acbb605a872053f4ed5f80d7fe6c9aa3f5b3b8655203ebcf15efee38fdfb387efb0d6cb2f825ce126eba06beb16651d7c17f71c0e6ec05fd1e26af4cf80a1bb3b6a7b06d75fec90cf411122f790eadb0e093e08e1835ca7437e12a575cf0c1952e1cb8048d565dc4acb823f070e6e02f62b84e23527261d9643075d188c6bb56845de32e77cef61ff986b8b9959e016f259d692c967d272da309b35edf4064a9d49aaace49b3ffc77020bed1a2b760400103436566dc7eaa20e46c1a82e7a780016dea3f952b7ee7ba1e88132a4c1ddbdbbbbbbdbbbb7a14835098dc22706dac52a9cc9ba48061a2a1469c0b1cfcce5a8e1ca11011cac4285504c4581f4847fa85cddd0ae0b858394cabfff268054e18a3743b6efb26efb7d19deeda8fccea5f07f7577b638761cd9e5e85018d4b3ee22f7b1181f11413736a386acacacacac2ce62ce81bb7777bb7b7bb77bb7bb7bb3794178f46a3d1988e764e4aa1ecdddddb61339c7dbafb1cb8524629e3fa7e8c1e3091324a199f1418bebebe4bfb170b0e0c3c7f91c27764710e07061e472173384c98af02241f4847cf027b147f722f80bf473e908ee0efd1b6e4621e213739daed59b615ea5caae6d0c17573c06591c353a0397c59f83bfc1c3a70c8ca7538b889aa02a49a82d71c3838cbfd7d67fd1c6550a663d6de813ef3546b89f23347d575eabcee64e3f6f75c1011c530327a30bad0ff8ad92c4a19100d9aafd745ee6da4c22c337737f910450345956af9c66db55c3eb75aad1627673faf61f3f7e181f6b61b65ad56ebbb9877fe503e50955ce416f065f88bc5a618b962430bb2d53dc326c81b3541a8c9ea21e6871a255c5d3563d2162663f0f494355836d844a4aabb54d980cab9dce025cef332e7ca0a993355cde5062f711ecc21c6e7b287945c6ef012a73589a4a84113342066a6bcd0c39726a6a62a10c89426252c2d19d620e1aed4c38d1ba83a513234f9e065ce55155f59d3c60a99330e7b74a9b281153267d85d98718326573648717365882339832ac9f088f1492965d57c0088c204122e40d030031596259a68fd030540aa96c2f4f084091e6458830455b7d295356d6490223731ec40e688ac2b78a6153267c69c41828b182e658cdce041dd335cdec0a49452ca7f515a0852eb01a485a42c429a8a08615944ca0264010344131e331c413b9211872a57d88163954b3641224a125566bed460e72ada10a7c69b247200460c1d19c0000c0c0e1c1bc6009182c31d2c38883354b934f2fac412168cf9e202106edc04c9d38298375755552f38fd8080e99185ea87aa7e53e5f3404cb0643083a4883663a0f08043969664a9da5c70180ecfda0aad561c142d2749541ec44065c4c49b2a1e7c68a2a343040203398353b10c1bd51b9f568bbec3f9105a4b0f06256ad06a55452354eec39a323828b106891e4de87135b90013a5282a70922401050938ad960b05f27b4657cc62b39ff110b7e4482842a5a07c195252f906151556ea28cbf76c9a503b14562afef688ef638cf159f6b86eba8056fb7d7bfffb9b54a903a84b66494ef5e6d6c507562873ec85eeabd038701bc9e8eeee3e6565c748a83f861100bad08e88c8058d72e774441afc385434d14413cf274e744835865fe7d746d92fe92fbeae555f3178cb1fa16c87f8f1faf0e1c3879452f680bfc97a6c4f7708fe4bd6e3f5737bec10941fe5920dc285bfbed0573c2deca387a83155aa3875ade6142199277f80da81889622524aa8a825645ac81ce5a0fcdc16ca15c56655c7ea993fec6a5ec9ab2b3b4aa4f48b0e96f2d0c1e2532f094b69a94975eea453c95a1bd914a5944dec834a9b21f4bdf62e20dab451233aa687f23f86d021840b1f840fc2e7fee4bdf71e840cb7b96ef2526d4e7e527c1934caf531729d0a7ea3f1deb9d6f0c9b2125add540152f5f77fed0caa49ea0a6a0cd68b77545fd388ec4c53c6d67cf95a73ca0861d058166aa69c2d3cd5c1e3f354c7aace54ede8b781535dd44d259126259526890dc482796212154fa11d33d199021f6a8805b35a847ea02dfd2980581e3453eda6d49435a09d3fcda8c9f4c3c60f999999fd9dded9e9d06e168367b329551e1789d59622a249f57f5d34f1d4adfa5320272298a8bec6a98e54f517eaa206d82152fd57b81d2ba31832b6d49fea2f0131d59f025d94a66800d55f031d702a024ffda0fa970048f547a18b5280a64801d57f055db44e7796a8fe3b9cc6d4aa2bd1dcc90836d5df5477c29261a7aaafd30d7a54f7a95e856b706f77f76eefee76222659a8d48eba5f897a9240120676777749982ec2c450c552eedfddbf75cf2a057a46b46dddddddddedce56b5b92fdbfc15ea008abeef9e5b7828cf10ea99afa8dfb3edcdc3ff3a5f46c7825a56310ad403e5f9411ada1fb353f7e1ae9043f16fb13b1ce6047fc1478ca5f29658ddde5abdd77f8208d8052c147c60aa4cabfc7aafb038d5e53ff2b1439bab556ddded46ddddddddddddccdceeb4481ba71d6a4e5143c4a772289401d5a1738bd399214b585eb4333bb015201ad55cb830e283d9e81ab91884df92c51eac06ad730573fa946d6e3f20a9b2ba67e260d5ad5f30191f3111fa2393351f72bdcf5375b93ec7f3ab2edadeb5fd369485f4e20e40ebd91bc225bbaa32bfea99bf6b0eed7c88eaefd28758185bfd00b4da75b481bebe3bee5c0f37175275c9b6b6268cdc1e3992ab9d06177cacb10292664a0274684f4114f1a4264d7d759faeb83c1e50ce091f4ed90cb7306731673167c1f793037c3accf531dbee42866f2184be4be50d9c22a8680775c9d4d0a512e950abcc4cd90317e873a6d59ac7ba8839ea42d06e8650840b0d9d5049d53bf61278eda8ddbb204142ebd7fde0f37e9912b7f0aef162815bf83f4fd85bd8e39c93ec59f424a122073057d3849eb5a150a80a71555d465f5389998f0db48bf1099a695f1ca9245faa50b1990225891054d4600122090cecc87992000556908481dddd7d22a17777b78b0d65a14128e18ea5d4359a7aedeeb235f5de7bfedcdf7bafdb5a545498ba5064943459d5561496324dea429151aadd846ac2a2fe62874b846e610bab00e46e6ccfa2bfd8817434370349db22fcf82315b645c8c08f8b9b3e042b4172f446b73d037af82f0d1780d1f0db1e5a4f78b2f0fe4e8aa776d04d64d44505a02266f29f50802a2c146d958a0e559299b1011596a1a254e1bfbae84585682a5c4015410649aafbf694a02d5ac2bce003871a6c387a4a24a076b39fe7140321de6cb5ba656c3e1e3b6cdbac67deeefd26549deb43eddeeefd02ae22291801c30f797240070e0d260d4914123755725da42d31d557dd334b487288f01dc1075b3a824f070e61876ecfd2cb731f64667e82c463051faecca952260d1292080884c82149540c41f4e066052bb51ae65f68b62205145d22470d7569a142b7ba4f4b48c14263dda73d47f600c14265744929dbb86eba5a2fe394320a0d156262403d73f6c81e5b1641b6ad4f4851ae1dd43660ed7f5cc72ed81d387905d5a02e4a61a37f6e4063ef5bf6c11e7ac20ef58ff58cdb9757bc566c3f350850dba78ca6fcb951dddf7d5f368a62be28d0cfe7727d6b0a066b1892509d2fc35b73fa78cf396173fed7f913c6f3390d180cf6005821fe73ee16a242b617e76ad7bf644750d7bb509c6043e107b503fabb597dfe26a5cc40bfcf5ba0dfe791ea4be6924d1f577c1dbe530fc8b7f6a420a6620a2844d0a228e557b949297f1f5117c93722c10408792807356a2615a53f9aefbf3ba68e7a63e5c290dca28b55be9401f590739412edd6a404a540bb8fcf49c9293e8a32c7f225fa24ab6f68284f1895e56d1fc64a82f24b2befe2f037a887fa3984236f21ecde7ac7e9596266f2740192e423aa8a961b64913dae03130f48819e1c61c64ae8c93ef63229dac53e1694e2d558b9523274ee8cbfbda93b9843e3fbee25e3cc4603926a5572b29d09d50e697906ed1950d3cd087d44f207edb6d64d1a4710d8a2d86ded7d07427d6f00fff7e716c600b648aa50010208ce56beb3c755bae8f9ce200cbeb7488670ac891a394973aad4b933e7c8996264a0bc543bb5a3ffd2e34719a37c1eebd831c218e133ea09c6a1bc624fc238401d668114d0683418067e64349d3b04778720acb2ad50f74b29502c684619630d4d9e1f5cf2d057b786268989664fede8d7604217750f26f620943224d0451d951fa38b4e54596381aacaef40b753eb0482d1067591c4e21c04d153e52f9592d9afec4377f71f8e63e87ed7bb1c0e6ea2c2df650897251b691a5bd7d5da1976e80bcd7e613128d4053914f1bbd6bb38f9ae96cbe56a71938b4c9bd7a1fcdefbde7a1df6f7bc7f669c3eb4ff9ebfe7ed64830b83bfd965bcf1e3e087f0445fcf360f750004ea193777c3e772064ad4192858a8b2a09edc43e82295284177674d31e9eede25abfae41853202e1556b70c0e526a479f8c531a27a9135adcafdc887e0ea3d81d842cba31a18de58dc56896059cc2ef9f2cc65815ca2f676c1bf3b630c6d78b5321f67ec91b61872eb5a3af9447e0baff36dede27214fdd4fc18e7ee192727262a7ae6b6b4ef6d46eafac9e40a9dde6f166da7a811e616d2ce1bbfce95bc3e66ff0c5b03201186643087e7be557614708e3ab48917dc9d6c57ca321dfe7a3cce7bdd8ab46e71b75d1cfbfdff88abf6d8c80d71fae9bd5f84c2b97e3d5f9625faac58d1ba3478f5e5efc96dfedf2fde2e017cb42f9aa218cb2b1ac048f6d0d61fe2d4b51037237fa533857c3ffc67ba48a54f986bfc357cb52d4e8e7e712de7b31acdf911ef71e263c06beb1635ca11f725494feed2fec8418dad1f742fa37cc463f16e72def619b967abb1066e3bdff7b15550001084a812284180800f800c8830e4ed01f1fd86b73b5a68c7059f0b2581636dec35f988d136aaba8ddfffc8504d903ac297f31ff7996d21297e52f7ea66856b5b3fa076bc39a52d144fd37ef575103ed649605fa68723f4f3ed42fd7d09facda599e95f5aadb338f800758380809b9502ce8e18bc580ced00fea96319283daaa5bc68813c78c38558f05a06e1923706a5bd007bdf7de7bbdefc554062978c8fc9bcf80ba275158178a881f406988e0513b0ac4031d3d52d488fa20141d36d555178ace9919e849aa12832aa3c7cc112e1b6dbe3acc36e3cdd77bcfc57b0d83e83e1439193226093deb27201828105d47c1b93704a88683169e1a58bdd9a6e60c7abd395bf0e5b78f560e7867b3151a10818b77227a92a29a09cd562c04762fbd35d194951da326eaa22ee6827bc68feb670f03e336b402655b5941b41da8fcbbbb1b5457c85010aa1b63c5a210a3eebfd8ec59b7b7b06dccfde7fffc7255c9a77f2bece9bb62af7f719d57f9d487784660f3aedc0f9fffe1a60ff94f31f5870f97a5c5e17840edd7e1557229c4da4dd4e66ebcab7b4e8f5a1a1bbacc96942d58ad9f40ad56abd5cab314f328897998629e2a31cf9698074ccc538bf1c1628c3f639c346c276cb8b292f3aabb848bd985766cc5585d24c79d7ad656ee523e49d0ef1953396755c158d970253efacb7d121a69dd4739df2751007a2a7cb8c0802e3e18212549941277cee0508b51203560bea4a102c8821aa304aa96454f8f3158a8c0e702c88a8dd152655da8314f5e98899899d9b9999999999999999999999fd9fd892184908d9e387784e861b24549741380194e4c811006dda1dd0cea4961cc789b8507363fcfdd65283493d10086d0a88476cf299668376995aac5a6284553a5f6030565e9fca1d53f201aedbeb6019ed0adddab329a8476ef01dabd970304a11b826511bffbc0b688ae197e885d0e853f3ba0d5969c2b89c27fb3f831ae5574b55edf9d501fb75c3ae006ffbd5cff60345c2ed7dc7dceac0356ff86d1f007f2b3dd0c85d01bfcb376cca5e0b5fb4a02fead5978d60555a1dacf65b023ec77f11b4618e3476eb1bf3b4273908bffb8c5c2d82e6b2d8b9d2f46fee16f3bc6fb10ec6e19a284b1fb28ca2211262a307e07e40db9a7d433269156e42969a61c28f1f75ef7161f5a427b4b3335d391ad5b9642cb16351e8d46a3cd6025ec78f005f5fdb471e6c896ea8f541d4603a9be9fb00a74ed14bacadfe64bcef7c742b6850be305b55422ef660b06dacffec2b53dfca0f9f08d16c62f8b497b680ecd1e9a200859aa9d8bda722cf2c4ab675fb7c6c21275a690efb56b0a297f6b42bcd4ad09e152633d9b1f650c97c5ee0c732e50bfd0ec17f65efc07516cae9fbfb9defd676cee5ce7e2b8c77385de0bdbdcf82aee50f9cbb22e3e73b1168aaef5fd375a4fc5f5dbb3d6c30870abf256a07ee17a77f556b9ad226884cf93f4d8409d32420059da6386268d60612825b4ea5317ea0814f95ab23d0a5a317b27d416000e6837eb18d58d7e4634835adc72331ff2180ce81e71476028e4605768cd65105372295c064998eaaa5be607995df1e2d680918b65d101e78c96c5fefeec598aee89d9622bebbcd699b08388545d27a529aeae1311ab2a634e86d1f0fa1a43e74b7f237f410446c90c748081063de4a13ee466287fb7e3a9f68cb7c3a9be751ff83b6ab57b53d5021c2be95907b5108fc04f4640797f217429e61892a9f6474e2af1a1fe062871bd9004cf114024c1c2972538485243432cc9078eecb901ce92a82166e05249d3eb36615dcdc0030fcbcc5bed841ddabfc27a65e836456153bb959a0ded107c05f48c099d790cda3746cf1ad6dedd2c1df0a05fa3d64a8a025de42fe0f3d664dc55caa2ac8fa02c12612221087d5aa516cbe5ef2e1ce2d82cbee23773e03d57f1a158667329a59452b2d3b288bf307653fb41a34c3f359f1d5630da8b69abb95e60d5a24d26598b2a5841da4362f22010c61865c4a8149b20fc74bb2304718bf79329eefba0f9ef84da750d1f0b329e36451352ca189986a814af1794d4b19912000100f3140000180c0a85c28060382c1c8fcbe6e10714000b6f843c7e5e3a12c762410ec3280a82188681100200000018438c31c82184e9008479321861d6fdf04ffbb4bf11bc1d003306b1bf5350380ffbfd7ab064a77644c8241c58fc6a16254a66d71f5765ff6a71d9966b3943bcec9a1309f94e558205c201f3d1c9cbb9f5afd7013843b60b2ad021e72985877a9951759e52c2bd987cc701c4961779422904722393267c1f636109797c4fb3afb8e745639354661e650b5a151c651de03407eb58c15007ce9534d69104da44284ecfd66de9032def40ee120ffb3efdfdab51e633bcf06ea2e014920782a6c0fac5634a40830ea54adbebd947e63e1512db208f03d56832968d612ae469b9595ef409fc6c80f79c2991380baa0c4db4fa8304fe42be2dc131b170a256e692d63c8a85563da6dd26810cd3847869d91f0055a2dbeaa97f751cee13f073049abe2e77e6aaa7bb97ae775d476f30a1063df6421a99f48ce1302c86cfe9d1182889609bbeca2ab8cdb621b1302f416d1d06b44e05efc44921e12956fe42f7670f69c6e051b0445860963e97bca07ba1e1e3599303316e2ce8e3865d25ed2e26ad4539002dfb3325b230129dbfae32eb4d88eee10895fa704950a463abcf3b16e21537cfa81ae205f8d04e4778c199eab6e1825558b6be35f423ae2995c000427cd03b2afe6829984054cc87452d90c9a8e15215f548c6678d90ed90f1eafa1a62ec31c3a986ced36d5623682f164570fb16612b04d973e573678d80bdff1d279c0c045921d69f226772f99499f9974d14f24091b41787a6f9d2b2f740a112e30a7c72596549aae32930354b28405d42c51cb3806d353a56ff89e6817835f4c372372aab3bdd6500d8d4672ac99c546400984ce1e121042f61c88174d8df7da39a566202ad75f929e92435ae24fa8f9ea201f97fed8324c7ad525a054b54fcaa141a9984e6eab209e62286724de1bfd4a7c9453f1b52d569115c35788e8a9164a3204ce202e423f2308c347b5e498fc86701022f6bbb0c27ebc4a1457e45d0077c480669f66011a2ae5b68e199ebe10cf42c88ba295404fc52cac9c332ec34eb56c411e19e6272958acedf6f5d8e7442c0e8cc078b15ebf0478d423dc08b2ddedd30c2b915b8475fa0249d5c41ffaa7da80af573299017916e96f5a22ad14dff6a503210ff2010582f0b784f10b70d669ce840f484dbfb9eb3c56e744f16b4e3b350deab007db7dbf08eb1b3246c95a6314cb819015d9abae11b0201ab39065224c2d700e59ff4a905578b03a0e8826b5853dc36b087a63d0504053d3d7ec03e3e8220ba55917b4129c48d39659a5220ece34ed3c69fce6543d1f7e4108ae8089fd5581086ae63f34ac523c33b5fbf1979a0682fe5dbe5ef29a5dbbd52739b83511a33affff8a58d4c606b8c0b60ad77b6dc8f89c090b9fef6a7e0e8768b52b4bc54f31677ba800925ff6bc2d3f9b9fd2f4f3f2f7f82725f67773e0c66748a865bd924a1db45c2d7ebe68d826ea9e6f2b5e3fe1492bbec092d475e206d64009e8b3d18cfe27569b6bb1c596b3a35f0c1d4ce2de6223f86085882a4bdb63f8bc49e011b3969ed7798e99b8a70e1e9a1b650696bf95acf3126b3ecbaaa240bb9d8c2245552c2a36437c38e340793028564439b1b363d44ba787c8bf3e1ad7a6bd68eca948abdc577590653d25c82b6ef17a9341aa58b9a7166143b81e967605d3c5d1c33f6db041b1acb00796b85691bfb78bb87657ac6e6783e11c03b2138bdd3f81a4a1eb9a877fc456578ce8a9ecdf267bbfc81f7b46c65460c0572f3ab836ef849ad4fb41182fee911421901b06109d41d22e972abced583cdea09d02ffabccb1d51d63792aab64902c2ef96bb4eb7ea4276c266d683fbff40602eda6d134448991c174d8bb8c2971a07e502147b2ce4f0ef0b78527917b9c98d1050cc3878e0dcf84d4040d70e2ce010cbcfb70c67e5d04f6de019a2dc61c9dd4b49e134fa3df754c7ce672d382ac46d4739fc9b547c5371fa3aadf66fc0453d54ed62de61afea2019c25022ff7b62eb0d9a4d5b6118d92bd4bbb48a0365e2089d2fc0b3cdd2e2ddfc379638550fc4ab3e9baa6482906a6b1a842506a55a61b0e599cb5482c657e0c44f5f43f38aff3e4de0926d42e4b492a69a973300d9d29209bdec8122ead573aa798ddf5dc371445e298c92788d5151bd8f140fb26015b543f52e455c9e0a28cf38c10881b280f428dba8233a6165a706d27da73312058199d2f5ca4de6634bb8f48f9a2dc55d8dd368bf2e767c878fd3ddbc1f3a83caa3201262aabe2e8f3d0f48f706087d972d1d7b26547fc07b7547f1f3f2b681006005b619dec59b76e131e6006a954db47c2bbf6b6a88844f8bbe50347010e6d8ea2efb3b77408dbcc0f39b80bab45a29b27b843974fd81030bab15b13cea31cd1c4b1fc4e8699acda43e9a930b679890a4e1d857632a5c381ca73bf2675e515cf57ccb72ffc1323d900c97b57be62c4dee699068542beb54e1ab0095197bff22a500ab9b8abcf2f52e231f8444292f364c375b07ae083fcdc2602a676223985506544739bc3549ff6e35c5d20738301d64f8671cbb713306325dee3ae782f0cd1fa29a4f50921fc77d811c09f14baa25021d0a883d93f044b6aad79ac8fa1da0efb2f3c48d5fee60a35791b3e1999ca9fc82438c5b108dda3de12759b88f14ad00fbaa4b492e5222f625c493a10816187e4f5c9fb279842d5a80e5c38ac8e649c6e151a7a411d0c9fff6c9dd85ab4612cd8c7b96f93d0ff8856074e715dd691858f37776f1067da7460f93c77f7ef0a7e2df8fdd967112a3549485432b394628403b6cfa3262fd9d63920dedf05e13efc8a084e287b32d2eebb5ba70ce0f26c7c0b551b6ee555d043b1bafb3d7251d949ff5282b6d8658c8faa206703f045f79e7769d8f61ffef55fe38f2dfa518de2ecf6fe6911f9770742fe60b47dc80d132d51730fa22f5c276563469680e752fd2e93cccbd82665ee32e1e08000170b329a606cf4fe8d3b38fccba6cb40589186855d35519ca13c5eaa04a52987502fc8b57ae78e97362749d226683d26c729c4eb8fa63b6179fb85066e141bb68a10f1045fe9e51c82c892b94a9498d83d6315df7437fe11be966ed1a3c1303f0b2f8081132753bb876a0d8cfac532ac7b667a51c67d6e8357990ffb12a76ac3acb130d8c09b1d4f6761e82f1b6bbed838009de95b77a0c1afd64b9fb644ff896217d442a7af6db9f42abecc2afc20d1a448cce7a38f52dc9bfed7ab27b53c5531130d3ad5324323cdc12c744e02b8ab5c4b353f1bac60f54b577d0d97553569000ab6c3c95097bbd5829645cd122f19d9e2ea8495426820f4efa41707e0202881a0ad5a5446b3cc172dcf9f11df7e0fd2c213ac85fd72d837646ac4ab738e82e190cb5090713cdaaf876b9ebf32b017e703edbf0ac9bb1faa912f28071d9d938bebda66f794065667e545f221c5e204b18ef6bb54a52b13f2fac427e23f3bf69eba2804c6569891d169756a2b0ffa52b3e0a29fdd9568b890d69d9ce4ae99436aaa34dbb1298c12f52745cb697189fabd19d4bf4857418e7ac1b5b3284a93cf10e0fec3494cfb0c2c548c65143d9ad662145cee32b9347d8b20c306b586212e39877f8058b1888e47a4b18e4ba21d031db971f3c220d549be5946584caf0d8b9811ad7fcd74408de666de562e64f6cd1410007b7ba7f22ad31dd68275571bac0eae392a524e2d8aabb9b3c1043b7f45bae532da0ff411d2e3f563bfb71baba3790af79a84ec189db7900cb944b6ea9926b941765086524c4817a71b8fc5c17cfe78108577a5746cca331380f210349e66602b848ae628ce5e91cd3793cc19154d3079a83771c6ddf82ce1b6d20909ee80a6b40af43da3a6ce3ffa4fb3a4455a6e326b065f7010700d2553eb897e06248897b1c5991fce8b4c57fe7c651b8d0d0793d8a379e0c3a95329801cd85097e9876f87648c39e201605fbb0af02d260db090f236052132c54a4e0faf1b024649f1cb3b5761ef8e81d255ca5f44fa553dbc9ae43848cab2da39b9a9cb2579a3cab2c79d35fc81122eae279f075ba251e32e61fc8cbd69084783ba06c34122dadf0ba93f1427da515f2e3c5fa203967458ffe70730a38f42238b5ade1dae17e5de8e2644a569cca836edae40225027a993024f41a42546333dfb55d065e8267bcf84871da0ef742cc796e45825e00b132eb45f033abce46ca07b55816ee247f8ab9a195a33da15157e20f5d91a95f11a675b3c0c979b3c67cf9d6701b0cf24573500c94dfff5b1e978902135becec290573cb0106c04a700489d9a16d3c0bac522a366b23ae83a7c7f78e00ee439f14b835512a4101da0d3d802e1dfb9bf1e7bf2d79704637aea0daed6d031784a7fee1f342d335790f2de3bc75f55f2c5f2b37a656251054847fa004e21f1a347d3131dd668b5310a2d9623b69014bbfd2103db795672aacaa16e5eb8aaf9f31225707b8a9126e5a19869db085b80fe81f61de25d9f52791c26a21d11d72bb4d8ec21e5fb9bc30a7fb8995d160b662beb77ca045fff30ee157eec0989631445789dfedc18d9a65e9cf9c08664a9249e913c9d935935389f83d268586a8c9d95e1c4d5b6b18d0dd7ba674014417930fa3d106d41acf7a1acb6e9ab52b99174d0950526f705815c3e971f62ca6f9cf28a778ebe6a5db43992e27829ff9b6964e6ab3e0fe01338ee6840067ab4faa43046c0a071200f217da62ce1323584bc2d4538b962d7611aa2fcf1543352187be98c6d21e394eab731d3e7685923935e1c309a43e18ecbae4fd808a65381a4558d189b6f5ccd9befb281d39f8972063f18b1bb83e02c53b57dac7eca4bba8cf394013b16b1f03ba125f16bd24cdaa74a331430c06a7338b0f7f2deb068275dfec1fd50abab16ff6cda246683c863f4594ebf308e83d8993279c5bb32ba586d15b2ec04d17c25dd07dd04d0ea5c039ac2cfaf45ac33f82e00fa1e27486e8a74c21c1e65f712b51d4b140a39f29ff1a98ce1c5543feeb616a3f75f07c78f6d6de2482cf62c936c306228473fd8f54e00a35e0bc40f32a5ea682f9c84146be31fb210d3f0af9ef9aa877d44b98594efd6967a05c691a985aece597c521911c26ad7be71075d5addf0dfc002f635d3b15e24cc09f1b93feebe4c4183dc65d1b1aefa92a5b2cbfc8a2580959654d0201001dae4b857eb294d315c9d4cc515b27b10a96692941ead64b90d37781cc051a19a9a906e1adc6b680e1c03ee5fa237f0ca8046670cfcf7ee7c5075b82d84e192f74af9981ebd45fda1d1566bef612a1b52519d3ffd2e09f0cd840e535ef857515d777d238698e383f61398dc1e68e5a61cb637a20dd537e5782e38f9623a8ef3cea9dcf4e26402e7baf0f5ed634fe931a45fc316164549765d8ee82f4e5cd3962a85f121f1e9114d6b27e5c004592cca7fe50097792d684a108c1cc41b812e681b0f877c1ad95682bc1c86d5722f479fecad45d0006e9b75ab34ed3fa4d93b2d89b98712e5df7808054db66a857b57bf603a9b64cc6566494371f8695795b3f66b7afdbf28a8457a341046011d365a17aa0a7e9657ff847e91bd5d8b8b53a9b5ba96bed1b6ad9ba598dcd8dd4d8be493d6bddae96cd4d6ad9bea58eaddbd5bee626356cdf10ea188eb79b02c6f63e8d1dc38b2e360d9e772f40a128bc823e157a826e8cd4f1122fc9b9bb106e0986b2ed58cbaed3e74002c19144187e35ae9dcbd5c84359c0b7ba28e6303260c77314027acb8fabcd36a3b51c4a95f42124a111117513468d86c0fb2bca699c303f862d855a8ae33ee3319de3513c9f671ab5b63a874d73ff5c8bde61dfe6c285f4b080b560a575587233fa5f10b09adab4c3a6b67da07d8dc20076788f20641698b15e31e0b706cd13b14e750ce13f8d37de81f1bb4f6daf0a77cfd87854e84d991654bfac7bef540f5015ed6d36a8e9fd042a224b2332c18050554110c65cf34228851a72c935ca20aa881ef0b1543c191dfbbe097421b205d5e0b58c25798b2355c05076aeedf3d802fcde9649e4a3a25b9661c1fb1f57916510601662f312df3f3e0a154dfda3fa077e92f06a1a6b7991ed94067a75917e388446004917a4f23bf9b85c2c41a023be80a2948f850a19dcc1d04790a8686880e5226ff7d48dbea0f451dea186469520d4acdef6e1c73437ced2d31e11d47361fce8b8712368fe0223903fee11205cd8db120ee7dce318efe330ea6e1954cf2d5204f7164426c2d490c51f13cadc608bc620b6274f0b0a95604d6e7d8805f36833bcc62d9d342d6de09c318aeaded72e8cdc8c17e150f816724c3e0597c7c7e53f7afb286c2c0b854640823bd12e815aa2269e5513ddc6bdf77cb749b4eb3284ac0ad808957d419ae7476f1a45d795bdddea5755a5b2d626b69866561692fbdc59bfacbe20b1e032c9a7dfb2dccb1b180f8bfce768ebc15d055907b208ba0a106828add9df5fc833c08a567c6e669c3a4a4983a4e702f52e097173e43107b1a14c7afc04d7a0fba75ea0a399434ca87c9ef18355e93419a462a148b071f56768a1bb2b00f82d1ed4752cb515a0c12f4f6d8114c5613deff84f288cc026bb370a39e5e3fd8cb96cdec89b50dcfd5b6e295210991477e15389d20b86c2ac21242ea9d5f8baebdc4727a8ea6f56bb33ec17d5c90ca48e8e8f366fce99dce9248b2cb01fc1fcbdc59359a319ed3620d859222b94ac989a96643ef89cbc537a2405631c35446d25bf78dba8ac2ae89448fc53c5fc5202456811697177176cba9aaabe3ce10580596463d19a43f711cdb4d42aab674203a85821a60e9050f70d4a96603096184e3e6edef86833cba3549735300268fcba426c908b4bd03d55682f34fe5fbc0c4877c9ee37ce59f87eded0084bda5f381e105ab842f6e5c9751719d467ba89c7ba6bd8fb5f34dd9dd63d7046d3365c77e68f99f6868d578f2d90585f73b6d8cb26a179eeca3fa33f77ab2e896af48921b58041ebd837b00934d00f2d7eb337b6e1ccf991691d5bc91a512833a3b42de5dc703f1a9b3574d2ee3409d37b32e48d16b9270c6566b31ae1c4573dcca44267a56298cd58ba686e972c5c1145a865cd1114313cfdc9b30e411a1adf08033fa9df12c6d550eab488fb93dcce743a951568cad5887c69b26010b016737efb27296c6e0f7115300b187dd169d1380397680a1d21ee1e0c5c8d87e3c4c2825e0e3d3e8f5cd18e330cc0a08a5f1ad1c9a3cb49a3952d0970bac0c976aa7a105dccf61f940899fd1326735a80c7a1717c79891900229729800d944fd44c01e3d3d118ecf5198f4b0157647b4b59b7ee0790685c80923979def01fc7a5fb8f4f3de72a872da5616c0763b1a2ef2db26aa0a7ef998b7b8866446fe280490083af04ac518d3cb98005ab863e51906320365c18c85fdf3e3ea85bd7accbb3705e5312e8a3e82d5b3f5643309a5ff268b7b39b156000e8dbad5116037a5a2df6693a3ead9e3ddf00900d5d1af92b421f0c166ce70cb9463cc41491abb20cda722b561adf5e685fd888faaf9ffc05c2cbc8c9a61ca4d26bf702b26cac7b0448dff592431e3066586e27a8f41bf86f3659ca27c92053fcead4afeb6116a9bcfc9eb8e385ca6f944d2a0103a60a8d4658e6a4ada4eb647b04c9e814061f4962d95269d0368eef2e6cfd3819930dc00bdb278ad7db1a1ae18370ad00fc8b079e8c4883f991d836083ca083f081b8eba28d13dd144f9e605240fb3744e3bf268e996724890b16fb4c73003da74ec4fd8b5baaaa5046bfc91905e71447cc815667bb0b25fee325e25d2b990a250a65d319bb82b1a50d5474824dd1f9f0e11da0992c5574393a74267eafc56f2ac1bb697ee16ee70d5a5c80501fb96d75f3e1f4c08c4bce4b6d00485bb42665ca905c8adbbe60a1c85b4d8b11cce1cc807cac29b37380492a043957874e736dcc3af88e12ac9203bf806e424ced9c280f6bed061cbc2338835018a7a7fe96cedc25d7c4f579f7c8239b127d8d28729d2225d574d51164945bfd9eb098574fcbb7b45de1806b031ab462de60392425f9dc2f457fd7f0d97f3fad46688b33a5821f321d5422b3889812cbd3c58ddb951b2e14b0b6805af1b38a40d5944b8f7fa1ebef3ad80b3dc3f23ba1a54288922d0be4c8c214adc63fdb97891ff26b5ebdbccef98b73e40af53aa72dbf25f7d61a596772bc3ca43cf82829c3f581907f1760bfc7a908720568c9d6c9424eab4a93f391ff59373d66144aa582c981717fb3d15ffd8a43aae7bf8f30fd22fca6e2d65b7edf47bd7e78aa67bd8ec878eb2fce84c8bf9b7032761fa03544f4e8732be84935b102f0f7002a092cbd0ef6f1421462c053e7ab411d603c4a5feeb15d7ec42413db2006994ff437c1dade4c2f74390bb9565e28fa92c62900706d81b8c382fc688770f7c42b6bb20e9e7d5abab52c256b909b813b0fc9794547642bd2cfe4ca933625770f42ea2f909cd2dca30802b94778146150130e8819431b5d51bacf5af7db5378c6e6fd1d223f6b8d59ee08323dc9d5a00406730b5d9fe4e3c41fdcc30aa83a9b1291b2101e5a104acda2e9ace41a2e3276799b2466a590ca6a211c597e1db9d62486abf01824e104bfab5f4d35c04318a961503c51548257f0bed2beb361979daeba729b67f702b1a8a8809e15ba65437431c0bf2a1f5735c92dfcb33fe4df3ff050de239247cc6b1b1454c2e409371784207d2d782e9a8d005023dcff0fead63f56a0a189acc2e0490b650828ece08f4e4559db875ffe3e5665b2b7e2613649b30b5533cbd919a438133f31e89c9f92cb978021182a6625cf231e9d4fbc0f5c15e29b05e6be5cc2fa085c7e201e6ad31af3aea9ea6449a2e0cc03fdbaaa99e488baa81dd5b7ba03c8348889f1309e2a706f531a17409eeb9fa4aeb541b9c72dc40ca7a90c0a37822ab91ff9c81f3f3b2deaf8a9252ac3fa9ca0ebdf7c6151c5154a641a0832de04942511f936c5833b0916a7363124d90f392d2da483e9e0f7e6c9510eb16a684d9749de20dd989a2c296935acd60def7a82a46c7c4909037503cd185faa9aba72bd3c4976bcd6a3d0cbc33329d1c5b1854b9e3bae1e01a526bd97c044be9cbd93fe7d60eb4f2fbe66ffd047c5248373cd18198b7a0233b3ca984f278b878697b51209dd8e031181e050b3900eae255b597d70fd6fa15a968988aa975f9638290bfb59398ccae27f95be09c7d580fd77d110721b95957af998245034f52f89ba65b6505955aeb6ed27cc5bae289c80b16edb08ee69851d2c2baaa268871fb6a54b3f5bc834e83970b7fbd914914ff561e4708c9603a8d0797a2d4628de90ca5db34e72d3e8b08dd65b644c257a65aa43551e056d8620f968ae0392fd5ffa5561a154b17cf541ec9ff8d10b6907161cf6ab55c11d4523f5d00a8fad8afb8bcb0e7030602031235200ba6a9fb870cee767424adb1c64f1f01f25e8aaaeeade21e946cad2a48e2cc79d91c2c771354ba5174a98edd203b2c4ffc55e2c451946c74285bb450b489e61880e45adee40c2a45f0d2f1b4997956e7a8969d0662f743fa023173f2cf65dd19c031013d3a0c2df3c3a50c6d065ec3d4ea7a8d080ed8d9589d57f49ede356b294c0316f80a533329a989c0a7394a3e2d541100447b8c90e540d666fa1c3e40364eb70f0cf04c5ed1a2bf5916916bb8beb1fdc3a50ba3c12955322cb0227e0db3587bb945cebc6055c82f2eb395d434bf40691f08e6bcfbb81fd2847c6f0cd07f7fe627b71978e752b8b2f0dba031e962b9c73f4d84d9888c1bbbc5e88d2b343d0c8abdbc91d88723093341484a58d088f19650022d4e6e87a3c2ec652ee08f33fbe8a081fcf1ed2c172a8d9ee22d4bafc99b18c3cab66f6bf636e9993814d51c2f85646a9863a68b05f497e174a9c77fe327fa92f5683122f0db8f00801a96b51dbb9a08b0608d3d6976aee19b008296ea3acb6c4caf1e0ae8bff78cc71ea7fbac61e3037e11bd28d05768f61270cab7e7e48270818a45308079ec487c9d837634253d02d3c59938a5cfcf0ec746eec9a11bd997c956cece6ff9edbba6cf17201738d4f32b26d562b5f081621a116fc94e847d67a3e266a8e0c92dca420b7b7f80040a6cfe9568a112944afb81b0263d3a3b0bbb710381fd5cae5ee299c1443ad5573f454405998ae1c0d13aa7d7d82f84395c623c1782b1d73262b9e3bbdc3f6e355168089c7573e380ff872d717735109906757005a14f6a7a62ddfad98e6c5e597a49050e0938c044d50b431b46a93cc74fae439cbf21e4ad4b1a4ecf8a7ff3defe340c5ef87f791b12c906d5e104b0b00ddea6f373bb16ca53bd5910943a10da311cd1ee7a3587a3c42e728fd1e548be72981c97a8677f45e37841e893705b30b2cc338aa781da0a288476df536c490b337f5042c8174e472677b985da213f95eb4f135bb8491a00d3134f7788b359e05ee5aaa5c4235800a30e4cbd8751f97bc49108a42c7f51f7dd408b4ab41807fa094ecd58ff7fedef53c722157400761f5ae44109f43e07bfb09482d9b3a3d43d7a8cdc2a59ad407e02ee8d0edc1656f370a30e68cc5ec20a1844050d9cd2daa306c3922bf000c10c890288f4bcec229599a296f493b55bf2c0b413520ae5fd13ce2d617710693dd58e99425affe0033ab12cf298aed41c3c77af855bdb34b1cd0457e25c76f6759ebb0afde4679e1ce8da8aabd161a1210de015271903e5956e1467fc1701d373d33ca80933502ed2941182e9c678c71facf05aa6c5b4168fa53fa2bb304ef5ae67a012556a4ddd8cabb8d49dde576f915a83928188b617dac0a84395ddbfb611bc6e2d12daa99fd62bcc41789c2cb4240b1ec07b620cf131d7e0c93cdeaff1048ca6005fc8f3937020c76effdcbbc88227bb0e9ec8e72db56e36d0c52ae9885d8ce83b3b136d8562a301313a472374b1af690bd0e4c3c34c429563b9b808a854deb6a81faf10350909de5c8b48cdfc74d2ab36f22ba45ad96f3612345ee7a1fed1f92b1da20df5da143bde9681b0ead41fcd080d07a2bdc6e525cacfad543743fe76ea51e5b2191281cf5c04d5433c7b75c26e70b0d9fe78782b6a9807447a88ccfb4f3546a24adec7ef46c05d0bfd0207270db1254b1e07f00eacd08db4c430f7f7b5c4a3b7f71394e96fa20d33453603a41f1052fa7b6f7300d47ac77554c752734261609b5d68fe470e0e0c6a852a5abefb173c455fc9484f1694c954d29e313c8460a4c1bd142e42098c95709f76f134844aa649489858a27945319991bf35f26d6196710198b9700399b6e5f9ab68c79d1e2f72f408adf36b47d4ea646ab770f22c74033e4c8a3e78c479108b5859083143e410e99a002d766ea8943154c2be4dd22dd8549024ca291f934e4d2916a47b21df2eacabb2ed95a6969bc9a7a727ff831df1141e30a56a8d6a9e4c5b281ed9cefcb33e4c977ff8a4ce73f500e9660c92666c3b838396e84834c9c9eefd80d0df936653b47d929d5b8e881bb55a5c2a9aaca000a88713ae1c403bd2b8233058a79503b10ca1a33022a2d3cb1c6f9f9ae9603dc8106e1b886a710d0ad31ce2620983c9521abfbb0c2c5154239eeeaef5972ebbb2c23dd4e9561d05e2286934b8a00960ac6c115b482b090db2c4a3311187d352acf077a536802460064f00b6f225da053789457acd3069fcaf8bb35a0f578eb1cc72f1ea5964dfb3a0d1a50c54c77714b1b2f7dd41213cd87bfb2020275614b5b320a3876e2dcddc2be80956bbf49d0c082ccc897d9ddae65100961c89794faa040df7da5accea440de5d030ad42b5968af6309bf5900674d668d540ef1853b12cfe28d02227b09e8f5310f95f0039b4a9b9fd83977adde9ff6176c7515f0baf878afc6a82114c58ddad4b21d7184011733280aa6ba638dd16ba278496f84e2768cc5ba5822511d9b6f1af64312c5e4fb688a8893c142eac153a17bb75b5350550a7882d6bbfe3982800bd4c54f9de3b77eba0aad6dfe1bf3815e73343e3d4cc1658c5394f4b9ff3d54af02b5c80ddc05c7a25d612a76224da9f1bac25fdc0b545ca05bda6a363f922e43cb082274e5d3d12dd05e17926c84f025b70d6b541e4464baad61fd2c6d6ddb6a3c680298d9ea5d5fca3b50f21bd3dc4d379ce63772f7b1d712f32eee92dd77de13acf0d78dca680f3516296c30b1c8b382933968a24f98da3d6446a334ce81858403954aafbca79c997592271a88a30f6a2eb413b27e3d8e8db6b8575728d8bce40deb888ed99509745443b67f8220e57393002b3a274bdbd196a9f6eaf31b5124a2925313b485e3db96cb4d2153fa70ac8e5a66aa3d33c56aa7918bb6f4616ac3e245f17549b285c1aafc4fe3e8de168803ae7240e72beb14cc4a3f26a9f2f4f9cd52855a80cf2ed386bc7480a558c8fa2507885f5a77475739b796c4f5204054d1306db90bac1edffb172016a4b4bd9ffceef96356b79ae1782f987344cba76a7fdfdf7c68ea54436e34a64d32e0cdbaebcec591540bcbad27865e717cf84bbe14c183f2ff49fd611857995e512d138398d205b6b30488388961ebb0510e7c218017b6728e536908b5fb6c25941a42bf304fc9ac61145d564cb2fd42ffc99a12de97d6977a8965a0750ee8b7f0af63ec01c7f1efaab03fa4ec906ca846ca052dd1e1da04d31d4ab67742cec8e4f6b591de46edca80e9ece52906d19978a627ff713822545a43b46cb8fe26d46c209829cdd666e2f215c5fd929d54b1c9483cdf18ef2681fadeea66fea49965c9558afe8fe04a8697ec6bdbf2312d24d59618af4f567385bf8439a49f7fb0cbea050b965c3fde3457ed7a79fea8fc255dd4722484832e92ff048a246e42e37c0e9a8e1d283a428bc0a68b7dac7c8b7407e03f42e86c4a7fd7c4ffff71f0dc010cd9fbcff1fd398cdc5c581560b5c25f83ad7552ff1a75128c3513b3327398eb13c031ed7f8b9ad3c1f35ac1e8bd10ce62482674ab5643dac5352a3c68ab833fd47a933b563c5f4e1b2cd464f6d58e4397391aab60366604397aee082dfe3cfaba9b07dfc3be49ce27d53b2a6ca09ab10c3e98138b509c368c6a45d7923c3bd216c2981cb6442561c336ce95edeb7fb187bb143eb2f6fdfc9568cea3a0937d5535868bf3044008bebedc398538801032df0456758bc2cf4785fced5dfa2acedb1d1bb8135f2628ff3f6d938a9a39cd65ff51caf55643c41584f8a0983354bf8af3f8df1a7c35e0c03ffe01de37c74427d69484719eebbe73114b9143be4db4a8d85c445761bf73248cd96fd10d9b73a0084f027e07785effd106f88c7c81d1ce7a0caab2f93d20af337334692bd370e8780705d4bc5c8c6a56a77fd65d22011342b47533b093068506070b0cfe83a15b94e6970b444e2366fd61d4233b8bdb8554d14858b88c0c60b4b2fce6a6c94612bb39e9ab7a12b079e7bbfd00d88715acc4eace56f45c21d7fe8c07740a1607e79e3a12746c3d527ffb5ccfe3365cb7a28158ecf1de5ed436490386c884465308df47f343b07590d28c2d7981b2ceb3d0ff24e39f161a6364d8fd44eadf7b715f64f029f152a1debe5c2ecd2df395defb6503998e0f10a9763e3c4a7bc35a7dabfe75fe13004c1e1e28c40c89bf1c39329a9c057007184c5e469336703de6f7ed256f91cd77088d18599a4aaa28361e6ebb26700c518b05733839f1051b5dfc506b20aadef07208154c461560d38b78755fa18ade6b90331a7c65c8875e262bd46619857abe83f18eba5490c466441dd016c7ae526527968a2a8e32b0f61a4025ffc367a161c387531a3f7b1ddbdafe4554bbbd1c72ec29a3ebd8d69b4e5d52a2c09d6be0ae4d81bce95bc706bbe4f7919f70f6892cbda45aee920d2afc1470c7923ed3a6ccb6a1cee6eb5a15300230ea11aec1d0a7b4dfbfbe1bdbbb8b50e59d15d2f1dad8a53875c10766acf133ec2e6b7057fc77dc2b61a2de1465fa8ac0f85ba8e703f25ce9f26c6840b0291a908867c7a9254fa3fb279a35da1bc59c98ab927738a87690eac20201a92c4d60d1ed9e4053245dc554b7d2d77f4f76c00636f4ca27af0f5b6686680862bc07da117579887e134ea9289e74891e5ba0d51a9e1d41052eee8d4243119f13524f0a254e62a9796926bffdb7055ce3aeda9b1962b182ccf7c91bec0e154b84540fd91a37d3ad65b18f5488261e5fe9d549ac4cec0f466e2b53089e375407b7103b7f0805dcb9b2f0b9b6a87213afe546e56b900644a7b556a589fa3a41a18039b01fd77e33c6708b5054f1fb2da5213d4ffae0dec9e77d4f427f9896bc05b6701a0afcf385adae8cf40e4b978f6820fdc92da38de90a93bb1e2e29570f3f5ef476bcc87d800234100c8eac18e915703788c4d4cf57ef9902751ec5f843fb0f5d1776d4ec886bacf5b6c6aa81d4739ab46f3475839b4fbbd9628e81f5cdef3ef9d7620cf127f362c4b73ac85b889ea7bdad9f75a3d6cffc5de503cfa57c905ce287142ee062e3bb8b736bd606c28a0e435f4e3c7b3e31226f9f353aa7c0e9cbbdc3fae46310fe19051ef80813afee47d26da1118c1ce52cd77aedac21fc0203fbc3dd670c0d3091bafcb22e0c278c981dc97ab3d47e2946f895beb92ec1d06446a776969825cd48acc1b48c14ef9722ef639856c2c35f8ace7314c1721124a59af543d4235ead5a0a98f37234d98a75b0912b4bcdad24a0859d80abed07856d2b4697716976e60ab753bc27caf612e5821f7afe6e1c9ea85d5ca942369cfb59242e812b874bb3a21ab10190ccaf741dc670071e005401762784d8bedafc180907798101ddec8330da52efe011c2538975f465cb10f209c125f46f838dbfff271d9a58173d1e9e3a5ce8392a8e7a172baa671152b363d8a34acd39c68bfe6ea5449e5e11e4e9f139e1fd749e8cc88db0e511fecede22a0dd980179c9edd5bcc7a909915a8b11b3bf7ffd61d3f47c3a52196045c7c7e5f82b81c6e5be1b45f5a788016844bd0de329a88eca431a3ffee484e1ca156ce2a5bc9d8fdced895861d3981c53f7035d30132a58b5fca3a9e0039daed8126dc2c4d368ff950f8c93dcb36e2e91f375a3e37a6b4d36e15161f52047b43f4359ce7bf89a92c88a8cd07520f49c18fd6893daac622061352b1c1e15eb3deceae4a53a50b81e81c8e580de1410a8534408a7416c0798855958d1a899dab9923bde52918d81839194aa5f137a920fb3c99e662adb582ae95c93289a4db3c06bf3c831b9bea243187757f8510d64a845f6d218942e2fde6ac8032d47b00c75f9fac8d912999fed6ceec9f64ac21a7519fec987b9714f62c72b9563554164ca3d68d9aef90b6f2b7e28beb6850198a8555b057162a13c75157c4b4eca17b2165ad6ccac48c6f884648cf494419281375285f0ed1545326807c7a2037aca282e388d9cac7dfcadd222f85cc13673cdc1c2318d1763da359eb4d35d77ec1dcee0fcb648833e75de73ec1de8b33639f0f36be74b4b5f167411c9ae0401e56bc7e84fb69dcac51bd5bd0070976d9a65844a260a3ee977c437d8bfca42c3d5014d799cf501c372e4f65e069729e5f494e6b532f1d65c41453d8fa651255734928b1924ed9afa66c471d9c9a7d099615545f1836657fe72ce94cb5fe416b8c85732c6ec7c18fb82772dea1ea4afdbc2fbeb4b1d01319239d4e0718f9fef46840c90597b9c5c8979f2fca158a066e5d9b899dd90e19b569a6d9e7daff30c2a03d424796eba141a6c34ad8215a23e333b71970b0fcdac80ce5f3f7809cf7c4bcfea1a771313a8234440a5a87274ab0b12308996ca290a557a4323013ed4a2616aa9e250a83bcd4869d289d459c1e0432132f060213acca5e3961c6c1b66a88c1faf45895055251626116766a22e940aa93269573e33ac00b8141aa16b661ef8770ea5a9a70aba4a387076450c868d25ff47280774ad9d9fd7aa913e42251bb035e50876f182913e9ee02d77f8b53ef35a6446040d952b8c63d2127473c73803b2a2c0a405d41c5a7968c68e46dbc16c28dc026a62320b1374b17571014ca200b0175f5ddc05c1061aa26df059caac77dc2aa42f86a4b294f9374eaee6681c58c646f6c79cab752352de3f192d84cbdb0fcd930b087b152ef4678b8217dc867955c869629a1247aba8997f3ee04e9527d4e9cc8da497fb1f0997bebbad70cc97ec67c952856328a862deb00f51fe6f3d0b9058e8a017cb9e9c2285fbecfeb4b2a8a2cf80cfa5b93dab950861042bcafb504740c265e14e2d0ca4e258306d430a06e6a49976edc9e03c659b0368b7a1aa15a1a9b39dfef54f58348c1cabf85a76bd7a62e2cf1e7d51712bd894cb8c67b933c0e3a18841603cf1dc1d68c79087b5ffe3b38413109af01dfdb1eba55cdbc607302c33c9b4d8d5ccbb0ec0bb8b6897df380866fef5d200813f7b6030f3f3c727d58616e3b09cfc9abc1e3aa3409cde5405bf2577092a78c6bc861e6bdc2544ae8949101c83b32a26047f9fc9959e285423b2bf8f83f21b83c77d948363c6664590244dc4817bf8f68ecf6ebc6ac3d7069ae80b761f1588400536d354e09a4f1c2118397e3f6c72663368388117c4347df331fd82298d56817422aa4b98f471e20e42e4b8076ab7a96a7e4206a177e113b5d8c05f580026aec4238a4d3c9ace8fe7579c00272e7bff46893880dec3efdd5994bbe7290ee19c0c45f2254407a91583c19dedb8c2697f278c1fbf551d44d3a332b85dd95d61e89c99134e01505503b60bcab547855c9fcaf47cfdafc82bd755f905aea8f69cc49030d52dbb4f4d4052630e8c13df6aa5191bd687f31b8144d4d0eb5007388d7277f4a2d460067a08c9d4427fc26abc3c0d6a46f2bafe24b4c4cecdb90db1eeb5a2d103f59a4b84a3438faf53d085f357e702a4605c3b37783da94c16d542d7d7781616a3bfeb17c521c09627208c2e7be3c60e4492697d333084db0b967a7f0944f24aab3c0fec790a737f3f5d204bfd083aa54fa5b18b39a225d49c061d52230423e5e6281f331265a08e725ddd6ca567227429a7b146ff419e89740c8fcc4866a18a34e6f4441a573e2cbd0cf848c343892ad204d3edddf4ec8cb78fc6983a6b9af5deed45cbb7840de0c1ec389045705733fba28e535bd44d41c88182462e565ba9d366f0630c9b3cea0008b0928661eff8ddd75e241220b551fd83028de58395dea9499205c7ba0b2f2787f79a72684fd0743d0eefa2a5b8667c10b349d1705fda784675077ea9c3376f9818b2142f7d149a912da71778fd20186f9e3d7d82b67d0010d44928dd7df8944094f0baa72d357415c5c22f7c845490b053abb404f1d25de231996dedb9a1a0ae2c215efde6582e28e8fc4f3baac4a202d5b16f41a6d0d4a8edec217c7b05bb1a19babd0f4ed7f211d5afda91991ae8139094679ca4c1d801b1913166112e6cec280b0e1206b3b3c3979fea0a3351dcb3e7b80b7f90b56026e306b917e9ee8f2fe488538f985f0dff38d42e448cd0bef117e4582ef12b2bc142f83f7d8b4376fe4e62303c80d626f5605aa7ebd1a960b813318506a8b948b325ee2784cc5294608551d28b0ba09f62ee9c39e68b3ea9006d7d8915e9ada4406efbac6c4e5e1adf5c915e21ce64956d2d1b8bf4246491de3ee1d9d9848df4260cc1548a480f7a728fbe5afa67dd44ba61d3b3ddccf16491275a81c3533a747e8cef3beba94c6294d3932a6f060f4d0a1b301afd7a6f59bf52903717b12f25e60ba1f847b373e82a1be26b8f703892cd81c999adb7f74b8f73ebc17cd269a6e4b670d27a3f4f39c07774107c3754dd93df5807fb8d888819e1e96ec301fe353a15d6f5f43825330bb35f49cf9beaf9c1630e1e06b09ff7d079e58835ae9e55eb8401a1b2e5c0eb4c21b5860cb583e1b246bfc175a76056619a89ccc73bc53580a96d6a51f1f5a250907e49b5a062ea2aa482a8f678ddbf609bbc06f17e443cc85c6c94de1767a382db480283c7b9534cbfb1abdd0e1b6d3a697949d354528504a0571c8041ca3e2d256830dc72660f4b9ee13e03766aa7217059c3d068a86d0e707dde8152f45c16e41b615db343ef793d5dc440465de1dbabcb8621d3cf19e7e037b1af51416be3fa16718d92d89710d68fa0b7a4dd25f7c0faca8ed880d810c3cf50b9e3b513dd1721c73a73459850ea97d3c2c17d0ed86dcfd794359be0bc29f607ce078a71b77d950db0a148043abb8c50644129bfaac29705d819d27d41e7d050d4ee628a9cf3b573af0ad4eeea21311d123b46b30d73ea511e8ca6be7fbcbf10735538a9a0869f1ab514bf7f0a4473965696ea7a8e17c8ac607bc6f1122156b09805e8c886d4071a2b205a5eb44009db636c695cda078a82e1568150dc3a6758133d0254053cd54fb858944a192a5974e015973756095926023ab49a991e899fd230cac0a2e2ba6fce048cb8ad3f672895411c1ba59d2490c6a8fa8fd76f40ff164a80142af6d937c501a3f27606dd243d0d07a285f6801b1ba86af29003c18c56bdf17e28267319709d4e701afc4a0765cfd7f5f97c857eabe85ea1bbb4400550809f94acde4e29848c8554a368b5c5f54f87b1365b3927fb664ae9d96d0901cde1d10dd0fe6ec26a65ac3033b9b249211b814154b9c998d5fa4b161b39f1468ffeb226a580659b9ab0c06f1383a62560868f517500067bfb663eb5c114528d3b6b60741bc445e9707a57ea9b2cde3593868805f793eeda1f56ffe4862029021127fb874c1d5aec2130f9c0333c969c39036426d5648e103bac196b5b72404f122a85b6bdf0ac11809f0729bba6b49f5f764e963bcba814345cc0ed4e73886325ab782296a5b59e5d3e26dedbbee5b866b1571a55da20e69375b53d38f87dc53d197527826231bacb09b75d58e14dd3be00e9c5d9c44b126f2761865685b24d88af1ec703eb2ceff2903647bb1938d9f213c02f4fc52086808c778f6feb33312a3c9070e1238de29430092ff3b66e0248491e112839bba6a47a6f479ba51cde2bb8a4664b47ad6c369678eb3ac5536e53fc94eecc07f519f616c99d47d6eebe9481c3b3a1f659dc95c0bb7df204f85e4c6d793cbc274ac4f352bb7997e01060c22c367ac2eeecd96e385be22458637685b9757c910f12e34cfa1a0177d4c449c52418b4228ae2f469e782575886f8351ce22677f3826b082ad86431549b6089eaaaa53b69cd9a25e4146c6efe143a3c0d9c7faeac9798e8c3c9259cdcac4b59e96ea460b0ae48adb8fc1100c85b2f1ca0ece35ba52b2cdf6fc4524762393137898595b290a5a2bb69988e58384a526d8e3628df681306082162c9b4d73982cd5ebdc9f046004171f74f8e2f472f177ee34cc5db0dfed9035902dd9b75438440cb5f732f5a032f62857aef4042e32deb8451b9c985528d49441c710f964e777ca3e8af5921d6874d657d93a05dc87925efe1d1acf9a5d017fdf247cf4dccd977f96ae9ca770a1be237a0e9c83a87a7f3142e87355175fdd8af59fe8dd18670810ae0cdbe9b0aaff150e3254be90f61d545f2d0d6df11417d0c5550fd7ff931c2db812a5a2102c0739c033904bb6082c77698e24cf9b71b841cf25494b0b7b3c2c55d2f30b4a974c1fd2263dfbedb2841382acf709768ebadd8548528016120dea55cae98fe668b24a0e345a35f0aa4096df6d88f54511557958299595498c1e35593233364b20b2615cd2e9d1f620a0ab089a18313901468d0c050157c4850b7afbaf7155ae6a85364f734672500dd513062245fb0b3262cb5265793fdd6c9612708ca62756ade65a6bb6c24db9d82d16d85feb3480c62ce0570ec7956410703a598b25ecf890195fb54c8fa505f8c985acb0d80aab32844b606fc765aedc84605d4c50e41aed3146f344d115031d2dfe4cd81dd017efdf7555ebab12a64d5b6f36fa793d93b09061887084813860762af921e8fd4ff724faa6f414879524310a4314511d1402ed842c303fcc78f07dc16c573de144b22c42cc17f5afdecaaad8a58a456426f085e3f64ebd00091744ea9fcd0454cb7e86db461192e3de98271b8d04b17165cbcdefea980be5d5446eb22a088e02b76bb200f2abd7df609a235c844813d88602e292fb1bbc391183a661b315b37b3c2fb65d31269bd803ac2dac3cad911d61e0a9511d28fcc1b737419b3175585f118d07712d64693c0cec333ff26ba1e88f80eb88747487524810f4382b26d53c2899cdd2e49aa193d76e8b30c9f2b8ea4f675c38c3249ce197a80cd06deedf39805f6694de55188b550a45ff8a8ea5725537127e374da91037fa8512f70c562ec1e415fbecce20c4561a80de7226aaae318c7f1a879e5553f5b13490d1584f7c5872f68e0943fe25069b9de8b3a299a952498f9b6c969c387057498760ea692f4b05bcc44ec9011d8fc21ac5e42661e752178df7b3994a15541d7811cb8b4ccba7cd7c78b2cd41f9b85dc2de5a8f6b3e6334524c65b55fc412ebbd5d2fcb13eba63edb4ef01284816cbfaec8551d75213706d2a94be5e17c2d19ddd581089cf326791e7f87ddef59e497cd276d1204fa5dd6499ab2e90e5165c4770f97a71c901c5e899babc399982b811c897c12346d5002376df01515ba763f85868c495d3504a505e550a988c68a8163867de61a8d7211fc425776a5ea6005e8affb06df81494c84cc474be6414ba605541888456b1e0fc46eeafc38ceb5275effd6c90db5a60935c81021573c06232ab3c04972fb3648d760889851e6dcd9be4919797441ca36b3e213aa60bf98358759a1ff9e46020e1849a098cc2b6b62bcc66457d099064f2b58c1d557a2ee8099edf2322e49edced4d394a0241492a86e401f36b75db8567fcc4205ad19e82a5c3458c16a0d122d68e3d837a21ac7e6c5a166f2996f1e0301c7db1041de516af78e182cc17d68a24ef68ba1e5c3edc758dc6d56f835d624a888f2a0b99c45a1356e0dee5fa55a96a9205030fa8945e8e252dad5c8b0802e3060a0eb80d7c5932c3745f1279109a4119783063866574126d3f6ce6b7f4c92b690640c311ffc8771c8fa0d69a1245c070947e36666764b7b4fb5a425116e0a3ec9c434337d31fce473d16a18b96866744f13e1efa984c195541180d3e93fb0e0587f6f3e6c4500560a31ec77e782749d0a328fa434f8a172e94b27ff2c61feb91afba61a8b9f127262df0548cfd373e0c8b815dd446827489f5eece633aad8384b28c939334d99649a4beae8b813181658b13b370ed0bc4cb9ae8d7278769d3313044f78705236d5a1341c2a9b8b84bb6ef611e5b5f94267e897145b83b853a87e81a39e610e153bf3b84cbdf688ab4ddb09c031e112cc9626bf10558a140fcdbedd3f41f706480279211c286b0c46d87e6869d358bd1a8717228ca6404b3d6286652e82a93299172dcf8aa4f68e9e7792799d474270f9abc53f61eb452ef129713294dbdad846ddd0a05d306727662c5ac42dd27417c464485aa571d033037991a66080bb13ae834fb0ec71e30e80db80c320c1ec584ed5071f8e1e06ca4a92061c5c406c1c8a5050c21dc0368941f90aafa68ee0e2e51d640bcb386b12509e44d68a4b94b589601944e1434650dde1e2b94cd0787c0ae0131b1a7aab1b29ffd9321996c9ead683b3e89798bea42dad439f5d90f2b2f82375122c3fbf4b1c1c3a6cbd7cf2e3d73923ddd95c6ede20587576a219421d0f6406b7fb55948e5500dc174f211d06dd12da1f292693462431b8c0b85d1a7f8a5d9f32421e1dda40f86c73756cf57d220ace701525f32ecdfa7a6c895a70f044175e102d7547d26fba3e520d11a774878617b09eece301b8dcee3d68f571e5bcd2e49cc0270d39f518853346d4b022b1d97b3d5305192310e05dad75a7bfb402070279438aa801a14dab16f239860eb2ec4d8aa1b330018c1e44c0f38dee42ea23ebc59174f30e7bd1830c4028717e3876ad8e3d1ac85a19a10ed94a57b042cd9810e3316b631ca670d226a96e3f718468bd5bd695c198bafdea0ec58b812a750432d163f4c5ad9e06c0ec3c025378d8dd0be2a5424f6bb4a1497dba8a75c6f7c3b82b427d22ac1983eca0c7b6fa551c3b84a730d29b7febb0df4de6c9b2f15405c0418b001f252ceb811450d5dfcf4a39514c61ac5e5721842f22c827338e5aac7e2c99944217252bdd7df974fa4a98ab6a4e6194df828887fb9c19165e3e8a14b05411b7fff6d596824655b124506a3c179b7a1af54ce0277339c365c084479a100d9f317ad8d144328939d9eb797015780de9ea5c25f7cd3b0fef54a12ed7394d70939102a587d4e5480c1897556239bb721dc09bb7fd9b9b4ce2e06b16a0822e39c192795486a099346e194d9bee36bace8a11ad02bd0daa6dcab2de1acdb4584d18ca0e6ac4231591a8d037f04cb169d941daf7c033f0f0d381cc47facf7e25ce11400dcd74b6da004cc6c24fc35726a704652cb7e3ada3996d442b2b6280f3f4b622d696f5dd6285fd1edb3b8657fac91c9ca8675321eff4bdc82d00dc225ea3a1bd7d4aa9579c5ee7bb9ed00cf2a9b0786ffde8843c378ed65f97a59cd218a2bbf449599b4462b39bb54b30cb1fa27ae92a53f44f4ff41cfd45adeb4c8e7d0aed8674bbf051d0fd8e82dbbb74238ad1e16b6a2fe5a7dc31c993de34d90383892eeea7663dd89f3df37e2b0f8d604e5b11708d70fa1ab614a0aded369b46c3919dbbd0a7836776552c2c62b80e7cd48167c4eddf58fe70c6ddcf10cbc7b97bbd74fe9f56dd32b58671752334f67088c676a5bfeb481faa16d0ca567c1dca5386b78e107bb3368efb39c7cc526a79288404b259c1b189a8dac9d0cfaaa8c6ab94db704a28633ea1872e64dead9ed74d2737620e7c2b62794d7d0e15f84d01bba65e194d0d60f87487a8e074d7618f0e627cee6a6eaed31eb8676c4295c005c2ced498a5989ee5b2e607c57d0a3c34d94496781ffc2f6530e8e28ab0dad48be3b96667f65283b6f24be10fca739569ad1d7282b842e1c30912286da48d0dec5b4cfde26de7b79e1bd591cddc99ee8ab6f3aa7bc2e2af30cb961c055a215625c564edd039d9335fbf55ba8bfb70d3f6aef37b56866e4bddec3ba6e9d0208de0bd67dd21c24e1a24f80d1a543078334d9bd8c978906b048be7fda31685ae28d8718677e7ea405132514adf741b7e1a0cf5cea405e20e989b4949bcac21edb345f5998efc1d889df94c578e99c0245cfbdd391883d93862d4b09eff9276ba44b1e4873048f7129781307a619797b53cc7013ffad5d2a775a504b2ce8ed5445f74f6fa1b1a5c1efb7dfdfbb1ebea9bd9490b80ebb4114dea55b7db90eaa81ec4f4e07ee63378610e33ec348e728c2128591c380b5a6c4ffbd654785ff9baa5fc0dfe4bf4f0b12d5b1f7ab6f6a59636938d1c44ffdcb19649c79b4d82e4f3b98b8099ecd4febddc108998da1b88179356c20a30cc2c0ca49cee85f102d1f3f28699d0516b8fabdab365a0b1dadcc79f1e63ab3c39522683dc235a03b8adc0d75f647a24045751b32617ed4eabc33fce0b13efc8f4ff216de237b2d9741d4237c2bf43f8c9703d93cfeb5fa8062547efeb0ddcfbbe3373b1ad62d9fca5ee6ab2b71cea8e1130a6d93b24bc1feece23123cc6f04102307cd74000dbf305de1c34176c9f3a19eea798d973c5a915205e0665a9198e300b228c4691decbe31ee01fcf402baabb9565a400eca4a07fa930792cdaebe7fc3a0886862a9d6fffe337e0e09ba238b1db1b257efde3dd0513af744f45250960341c1ee4df101bd178d0b0baa82b81d030682f46fb200e2ab44ba36377d34145fc6a066c9de64cb2da54c49a64e0595053d053e033e731ffc184aa69e3dbe7c62c82a46f04b210312fca5bf52c800cc6f50e563b0b3945e0dee934c791f7b0af0fbfbe5cf3538b68a4408c98474ac203526344d03b283d50e70a2a0712202e1d1831526564c8e9c20a6c579cd6b10a51be4ccdf2c689cb66ddbb622e470d01e511f35886bc95f8859021ba273ce39e70c74af8079f6e8fa11ea7e985848d4f675076a296568512b5f7c408b7a1653f7e91f51997e5a9416f51a7c2d849f87d09b4afd769898fea5b3d3a8e875563890300418266130aca94618a5dc8c1e8cb041d2e57ed13c393d18eb427a911f1b0ca9fe504b1583a0547608c05c5da70ad2a767235661ddd9fa76507b250cc598ad9088d1c18922344d5342054fac00898b189e2e679cc04083810371ac9608f202a6172cc53433af798d33c5c9135f5c3ddcef942634346119ec96688fd4b874f64c76774da8807db8bd36feca7cade8709acde0025fbac2fa9d3d4162c223038f0c5076ae76ae5af890e246f7d347cf5d296e40e810467616696a02848656fc08129b2079ecc7a71d7e7b7cf934a74475d7546daf42e1ead007dd5eb7d71d579555be64916e9552652853696d150183eb762849237ed1ba68f798b8a84fc0c1a0e60bf03b4372f3227428c0e7cd3382be318d1a9473168b93ddbdbe39a3d9d93bdf9ce364e7c2c6e6edeb45cc397c71bebd3aef560cfab1c745bcd15fd75e5f0d38219f71d74fc7449b263bfad23cb6b696dd26a9549439abd2a1958fb71d6442f422de5ca8ec5b67089ae75a17d3518ca953f3f5765d30135c1326d548f3b9ddbd9e1105581ea7360196c7edf15111a6b66ae0379d0e4498a9e1ea87176ec47a442ec618638c314ae98a4d817071041396fcf09f084fd488e1bf1ab20e50fd57234936e3bf1a63a2fe0b810b58b650513db43af23376ce9c273ec091c4aba0a1f20dbf332535cf4cbf3321500ffb9dc120e7db55d0505b05bfb3186e7838fb9d1949e209f03b3362e4db618b042a937dbf7c1d6d140adaa7c0df011a500595da3e80dfd68b192cf31eb65ecc8832d9b3af69f39cecfab56e9e93dd6c85c0ad9c73cec873369c93c274a0f3f76be8a1641f9924649897fac1603149066407daae496df702833058644272f4d0f9881b08853a217e79cb02f8e01b71f7db41f78c6004a02fb7d9b2846a2c67cb6667a26d7da970b987b6bd88a711f4ff60bb438701318c6144930c0f2e4a7cc718afc0b994d2c5e264eb052b4a11a2cf6840a470568fdcc40b4bfffab57282ab0e4629a94ba82307c1170c5b2f60b7931d0e367113e4a67697ab56c8d15946235e4baa7ab869490f37a71b75fddb9c1e4aa65ec41c15526b062c450cd0aceeeeeeee6ead6eaf12952721bdc38699959515d599aa25ce54712fbdbe6a5355a425632e32d90facb2e60889e8a4736ca4331cc2f460c9d34b2598d98304543cb2cab433d35181aa25eb98b819ab04549b8c3269b369022a298b369872707272fe6de092b073cd85e67d4bd4b9f47dd82d3990de57f49a77af5e1884103ae77d2e16f4be135ef3bef832f22365defbd57264067da4a7107fc68c9d8fbe0bc20c387d736ece6da31ed00b3191f45c0a1ded6c3afefd7ce47cf36d6747474747872539c2661b3ab06fd413cc615377809203447ddb3a606f9e5042ad0130849b1b622812eb6ef580452a46f6f71fd68ea83405da6c8fd003cdfbe120d91ef4607a0d55bf7d7a1852ae1cd298a86b850bd447ffa0ec2594c976d9b265cbde27989483e396e1eeeeee50bbf07ab96fb081061a0000003f3f3e3e2d5ab060e172ad58a142450619f4f4a4488102050f4fad3b3b3a3aad56d7711c8bb56d946ada9c52c6d80df5fe1a19293fb9bbdb8946c2eba76b2fa3e9fe314618637a35188eecd81db3a0e9418406ee4f03a0436d34ffc1a48ce18aeac1a17e35c8fe40979ba0dd526eb7cd1e59d018d1430f6003853d7e33e79c5741386897964079719503cf09ae34d1c48948642285891526504ca49880e9216a86b8192247e948c987122d7254c447912045968a2c51924a9a94382999297952123595a0140e5a2b505221e80066ce39a7530b3f89c0e89493e99c73ceb9648a8396aaca6a5b72c541db06d3b104cc4f25283e26b40a1047d210b358bb8dd876435d0714314c4ef5ff5c1f0c2aa9d0b71ff5ebe18ae03e711184feec31844a4366dc0642154b575c76343bc12dd0c7b387e32b030c6b865018d6b288fac1abef767805e564c002f2974a12d97f9446d6c1f5c056c66d39dc027d5b5660a95f7d56bfbaf9aa28a2d457214365a2197d28019cd7a379dd34729b2139a5ec21e501989ad4d0254e8f1b80c4e40b2f65140bda879d412d3a08f99d5f2d3aec80c21d0dc140983755d6a489820af263072345b45f2d4d292082430544b0a04989e709cf93ee37c6b85146d75e8fea473b5e9632bae7354f3d8c1841faf183871f5133aca04a7b8225ea091c2c6d9e563012076986199c2c58c860998293054b531617508983c4668919921ba208f1437382e5e9099c2c2ea061074805adb8638430883aa0488ae7c4d83176157727e1168835a869539b10760c1716ffb301e36f2b764f19a58c626e9c6931a7cadf2a37d2fce7b5ab0c7066dec07243ca7fae44c80a5a5aa02a724608cbae9e9e8cc4200bd5939b3348275c392204c949cb17294f64b11a13032c491f7fa760e952644c1c18f0ef14293590e9a1cc121a8c814d4ce9c18dc340ca0e2e5dacbae40802062a2f321db8cc8660f3fd3b1b624d1138299ae8f892b2a5941dbfd48fcad9327bba9a3dfd00e288ec8a88276c2802cc1baa98064416241bb6d0dfd9538e97bfb3279991e51f78186046652a36946b4665892a4468d4aa10e0cf8073a81625c68d1317cc36e6f08d628b8c857a08d7935440193ad24365a7f9b6b1e053b8dc862e57da25914e520a3bc999934fe8997b880a5d7bd29e90ae78200319c513b4dd402bab960bb6d5fc47a38c7bcd8a97a8905b21363373c7ee4897f81220f44b7fea6ad221b74d58be8164c5c840433041e1205576281301083c70c20916806e811272c0a5397665dc606a17d7968a67ef2860c3c90b10a736309c29d323b692a763587360ea07fb3ae331f5ec429dc1438fc7130f19961cc162eaee7ea2f0eabbab9a6a7a11c38e7a6a0f66534d8f227d1ad3b777544b31118b0a48959591c25858a191a7470275c042dc82f1f8a83067d8cf82c0147228ccd4d9c39c0086f18c3ba0d0d97f3839d200091f14547112244d0b2d4e558083dbef6e08775added10c216095126eb9ed59460c22ed1f3085be65fb4f33e99f0e382010504bd88efc380decb44667ec1b0b55da9bccc300eb1b073b5cf68ea07d16130910ffb468e519ea91f8c01d2637714c87d63068413da22cd9b2744e4a0e5a8db19e6f0f7477b43c3ee2e64870db9641be6ee6eca955dccddbdc3bbbb1bc7d7dbed66da3bdb572e972fd5221307ad937600d294914d8feb4753b2147f1c1de1803e74cab4aad88a38d5ffa7ddc542054ab0745d1869b598889bc5b039fae2745e22eceb74be2d09c4e83a9e8eeb78ace9ace93a1ee57cf3d68be545cd9d0d0eb21194614fd840a1544a29650f375ec004920c49132f488983d491b2c90a2fa594928d948f1e69908fdec5366a9ec7b574832adcddfd44f03344908306631cb7ad0bd40e1241d3b743011c513f986baf8e9e5197f908e78079e6d8c454e6483d3373cc4d73cefcb75149549ef01261ff3499e71f2553aaccb0a30833287ea75419d2ce75ab1bb666c03946ec2f28add2a353407adbdb36be88b935e7b99d1466c0abef39df3ace1c66ce394be285c98228e5aa3d4918514282c4550c75feced6242d55f93b5be3a4c59baafdced6cc226cb666cc9a2918985e56f96e7a7f9924e9032074eb42832a90a850f3be960b29216cc272c88a1a825b6766666666668690e1c667668edcfc254a4d19a58c3e5a9c88818a134190362a72defc8a5f2a728a80bb2ba594d1977d7bc77a91a322c3c53880ffbe211b5252133c99975e13eafba22e5f15e0c0cb9439d24614ab18f5640b44d2009e831dbdc00291141bc00f09114410532e94221849df16508a5c33b18bfcd1a3317d9603eee93d3d1ad36b507ec5e8391e8b85b1cbf6767d36be7d4690df2edf15e98f0a390c0c2d55cf0e8195e2eeeef6d68fdaee11f91c3eb88204135a403b5c185724519d3fa8bfd4e58a4ac7768017ab39d9f4b87e64ff553fa2dc79ce1c8311ac73ae27f5a33042af322c262d8d083da2e116a89bbf018a31f5e7d7518ca91a4cb851f2e460a8ed00f8591b284c379a7e69d0a2e0eec21819099455b8316e1b1144cf810810c283fd8fdbdb49217ef462f466ec7c7f3be7bfdd3dc072102dd059a12a453623e79ccebd41d0b9aebbd7b81523060a9de49e04b5a366b1a3603f11a0c634a6d8ce09d5af9f943a15ea7a6c516063cb4770b3b6e20edad3a17e94a7a942ffda0a6a4e34cae9d9bb38056ba1990b1c776f540994b23ceacd860b39c65fb8287d4ee8d0a184f9330413b529e7944a2afda502a7494755073950fccf877070cc2ce506909b99798c947461538519a736a526e5d4660cd8674c4c0497f006e5d97f6a8fdc9732bea2536d8748eeeedea4666b308cbb050113155a6912ca2a086a44570bf57357d49c413868852c51214baa10282ef7a3692689835689e98519279bf7e0fa679c534a275346e9444249c142fd24d31226429246ca483529538506a9dfe901821e8df81c93ba0ceb4a68972b0e91e1b6a96f5a6fb463747ecd70fdf46af46f0e5b3060117b3354e8ee8ed1790adc3975266cd11dd3b5560134a64708e19c54839d8caf269bd7c3416428c7815f96be2cf902e54b0e5fa4ec18a8315263c08c2933468d0f1a46290c531827619ac238f970285b2fa04b0d8b8fde32c11c2333738c91999963bb47bd4e4f4aa9550dcae83ec6236ac8c147e6822e1530411d71a2f26f95a4a5ffbcea08f2ed9a4944927ef09c951ea54453a58ceb62fa9c73236dadbfcf5855f99b45081f9470ca214414393abf59842012252313918939569e68c902c48a193731f6f1ecd5c5eeec301451d0ec58525a6a010a625a8fb78183055993344990f43812d358786629be1930993932c2a1005f7a771b884127d78bb9c2489dc1cc5e051dd25897dc9394160460c1031dc4b52a8dd1cad82cbb7bb7b78a99bbc2978ccedbdb21ab89eb52527906c61b2afd9d8283d33f0e4d530330b02836bcfc9d1265861d43a4885092024209a921b6df99d418213110d992d466cb90a82d4b6ef8d3155ca2e89ecf7aebc6489cb2b538e79c74a55c8faf7dd64e60d8bae8ce86fa69dfcd79bbd6759e4f0ce99d8b20bdebd8e7c6cee21afc9ba701c8c1d4f8cc561d10b2a0c0a6d0a32fd6b7b454c8562c86fef498a2a14788291f90a6b2e8986a9a0ae23f1f3aa23e5795054cf8e8a8fdaba5090ae6403824f9cf87fa6806b75713ce2992c738c96279ad2439c4e91b2e61d812c394b817940d4afde090230e6ae8030e59105605549db55cb9eba5a8ecdb413ed359dca832896ddbe846b557cb23cc233ed190e20a343546abcb5987f36cbd58ae61eb854bcd7aeb0c67a9caa83a8161dbbc646a8aa3ee7e7ce9d012dc027d3bb387be74c687fa543fadea77a43cf41d29da154f69607ca89f8bbd9e26b588b52826f209a1a7da0318d3a45ea372fad5aa66d8f19f7605a140a945bc338bd3b7e7940ed4a576fc8a3ed105c3042059e67f3e78097b199b610ced2511a624a88078e3d777e3e96660191aad302c6adbeb33c14f1aad3c189917185a234cc88194ceafa979bf22e4207a7129e4314d0fc2af9618925e4888f34ff3c96935e46a1bb7e7aed0ba58e7c24537d23c1a694ec2a77925300175966f2f3f1b3f65d437ef68b903e93a3cb6f9d6e013e333aae1736ab3bf3dc93c85725a8b84f5d643c1c66fae693e82e64bc246807adfb7beae794db3702ca50abd05900afd9b49bfae22063d6b7819660c70695d0cc151260a817ca3e892722c9dc512d1daae0581e3ba57eda0d66bdbb9cdd95d0b42bf0bcae2a7f3cfcfd93de7cde8ac8fc553af729808173a091ece28e39431ca8fcca5a758511db520b0f7d4431098a90234a4c98a6218c8f65c485ddffa34aec39d5046cf432971c432d46f01d048ddc030ac4257a1664685498e59c79c865b8fb2bb1bf2cd7b7a07cda0e9b43d70b9ba57709ae41dd827fa441eb418d96a2736ecc85eb86e66c8d22164c80fe099a146a7b49b3df2d496a669cad39cdbb67da9dbb6f9b66ddbb651d73c6e53ce29b71f6277f3d71e0cc899a55a4619b9b9dba3376466e1a8452c45822b9d1b22dc5561b76177dc8d7a975c4b4d73a94d98ab2e150e95c1c04e4a29e5420865741fbd0502ce396147de798ebb8e1ceb39ada31b8beb5a3ad2755e7a3b3ed0a31fbf9dc5629699d6bc3b89eac7051e3d3c501f393f1cf9affafcf881896af9c1e955fc6af941c97f0e918831461d72407261c9172357ce4c20fe8325e0ad58b0c195fad1f82980fc7c6c53650054ba586902e60bf06ba5890d1fafef57833d236e45208a50032e8ffad50fa1db9d1d6299dae48e917af355358f4e6d72d6c387938c53cecde5b66d72ca2dc6cd25cb39b9794c523b8eb56dd4b715372e479679e110aca97edd356601b00c92fe73c166c86ab8ce253d9a10dd556709d2a397c346ac3d19bd12c4686d6f8fa160c38845885cd39aaa1fdde55aac105319c60b6019bbd5781e6005155d4aa8e1a0751382127236d75432e7d2192b202c1c29b940159b2dfc3c220e08aa3c70c5cab3cb700377887a00042fd41e2a8e29678d1ec05eb02f462fb660451bc5d35b541fb573316b5dd7759db777dede72f9d578166b8bcdbc654ae919c1d97265c711495d96e2b6058a1d95caa80f265aa747cf48419a26b989324dd37e549ad45469d2ca3a883da6f959a16a55f3570b9724b838c1e5cd9cdaa3d65f2d5c9c7e7054ce8b0f379c9c26aacf8e1a1585820ddc3979d6c5fa9cb2ae8b2e2ce7c2f010454963b19cf5da6b63cdc6592c67b99ec55ad7ba60eda89bc35609479ae7803e25685e01189b3e1404f30851bfa138c4e2388eb5516dca229a6aaf8dc548a9158f9eed49517bb4e78db009928e8ee1d06235a0107f5b17d1350082050553a8ac9c98621b9cda2b866b99e65b78ae3b209ae6d3fc5ed9a1e3234df3fca2699ee38e53a25686b5ba54d680cb8f376b7c38b1a426d62dac38f5b0c20b5e88e185583be165480f1dc3aab6a532d702d7c26f15294b1f5b787e712dfcb608d0a3f63cad2ee97df0b5189bc72cd6efd6709bae71eb75456853d3a64f121ea8ae6aff4ee1218c115378b8f2f3770a0f5efe73ab09a98b35a8d11c2aa55e4723dd21a662aab158afd70bb99482a9ae311b71c2956bca02514b9e3d03b4fb29336b1857eab75394b63f741f9ca669133684cc2c179cb2030952ecab3f8968cc80731e488815047b5db01c2e072ce79aa2285379c2570af4a5f4e29c55ce3b679faf8d714b0416cbbb86c8eaa0247573972ccfc8a7b6ec7ad0bdde97428cb1f3ebdddbce1d6ce1d661c360426aa62029234332e54899ff160c0c8a795e88c451268270e8038749b913abb7f3c565a236291f7b369bd7a8a4cfb514296433030100140083140000180c0884c2806040341e16cd96e50314800a717c3e885e36930764490cc3288a821862883104000080318020e2cc90ad011e045da650d1388d698a1f8a75a90eb80ff0b3576733c4ca86436d6d8bde9b39eea1d8b8e292eac6ccf80f2d1c9c8285fde7e13646ce08a080baa0fcfcd57581a2da3bbea141bb98dc329133e18f9b4931fdbe8a8cd8447a04d836d4ed0d895b7b5f529087400a06f09d40221f9cd231f29ff0534516cfd7caa39422e0d45ca8aebe77e6d3bd5f7c28161c9febf685ffad206a2908b9e5c274369129715e9ddc7314490d8c7e50e60579d0558a15687e47a65036b02d791cc965b1f68255cf0a1c570e3dc662dd3a0dac380cdf3ca059524c69ebaa375da80532ddfe50d85c269086928567db16c8e809c6f4ce8f418467bce2202fb1e83e8ee8d65b004337b7f6fd66503d5e04b23213829b18a75a83d2693997a3dbf74e363539da86f57333b2e7612182dbbbda69858e33858a9423709158eb87c8267f432b5888c67a33489924b308b0a06566be8ad2806a914e230f139f6d83ca07caf912038f2535e463d33f2ab31d4797f337d2ca6ec7752b351d18e48c96e132185c9780c4d5311c61ddd2a55aacb4cc0016774073c7fdc106dcc589ed5e423d7d0bf721d745b92bb8cb2cc30c7b23ed84a261c9cc62ac03e453a5805e47c71f0270e18491dde427e1246f886efe14b92259d0cf2590d4d7e4d5cca81abd325068151909364d996a39d533bfb6eb1c72194b26601e5f7e851700889d9d74bc72f5b9bf705700c81c274ff7e2d7796fcd38115bb43178cb2c39baad301073334e71303f2a83af8e2a40b132273d0b4dc0c6b9ec8b71ebd2d5280e9e6b0e4a2ea382a0dfe185ecfb6bfe3feae9c43e7a6ccd43dc27fc46f0045fc022ac9f44e7c2ade768ae7cf25907c41117454c63f4ccd20865ef53c0f01e42ca4809cd3ad0496f4325a3fe668d5e6dad851cd2fdab0983b5af11800d815b09cebe2af880791e381b30d01fdb3f55312ea2c69f55b8952db6eb81a0196768668129c560c6069a8d7d38c7bae3c55e32cdcfbe5b36a4cbabbf2fb7033de2fe23d33a5bbe5ea66a51a674cb8c445f00c1633d982962eec1a45647c900c31d259a03e0a3d586581a8fe8172cf1fddc88342ffd5d573203b7feb0bff111a234742af860527b88f0d23e4489372fce467a27e24bf4f4602d5adc109d092d4cc2784f34ce8dc5f52eb1a448719dd285b17e1f8441e9db03113556f50da442b8d240f11859d7d0b0df846bd1455b2143b4e107b73b44a7a98af0e3e170fdaedef34f49408b45be4d065647021909a840c86670705cfbe5a7c3d7b9915429fcb3da0edb2daf44f96aed8afe35e2fb694033716c0b64408cafd5342967badbe03b0bc7c69df0a42326db1575ad973c5a6d103ed1ea2fff053ed5ca8c44ae3d68f0a14412fc3db7b1333a88c72d4d1d345a934ad5382fbfc746168213739cdb70ac64896fd7231728f21a31e5c2d50a2ad60175bcedb3fff2e439ea9c56a0b71084d8e9ae1b8d0f94df558632631e6cec5c8cbfa1dc77cafb17e50a06b1811dcde822fea5eb995ed89c9c70b4adccf86f7e6c64071f99852e150f4b4377bffd0e661c4b973fffb151c01f567266cce6858acadccbbbabd259cf33637c4261116ba3cfd1ddf7425683033bb310cec62cbb4be6aa5ea5a365b886673b1b0235bbd811c457f9f8ac21d6e247e773b148608b4082157f6001649911d5aba29f52fb27ca14002d80ae8cfff583fa4df2e67cfa531e25976544ae9f6503a762c00d565679c7c2c08bce4a6c2e781e727bb0dc608b81c29c71f5bc04a10a6c4b34789200493bbca350b61e4ad2ec625c1899866b96ce25431506ec6affedcbce3f09e728820efe3a96ecc99b190a453c6d7c6d4c1138a1b4fcfaf93d31140541de2ace08fdf69d03299286fee3bee8d0bbd092d8ab13136ca1888b9d624f03210988fbffa48ce1881e08149280e89caba3f33b84c5be3c529127496df2aadbe1a2b59b1a7f5e9bbc3174686f1e7dc9c4fe98ae6675356026044e4f8f9719669e45e542e7264ef5af9f0283fa95e1d1b89bdda706d6caff3ab989cf466fa910c289be964601570812f652231ba50e81aa1c41626c50361eac05f32903f364644b3bc429a799ee648857e84ce20f9a2602b0202f5d53208379495727d06050df5bb9675dd980f0466b8a760e0651b2e0083352a7162c5ef2402be36a675fb67ac51f1ecdee46843ea8ea702d472bacc9c16760d93cb315b0b7bd50f06f60ecdff301c37de4840a6d47a599a83beaec975fef6bddb6721608c5d096fa90d78a38a93bae226b1e0a9fa7db8d7114d21cfbaa7c830d0b94bd2ade0f2b14c4630d8f7a91539fddb3b04792c2a90f7899d022e78ebcc1ff5cffb76cf41cfc9faebb3b3a1b08407183a4344c0bdb38472982b7875cc9301bf61447d8f32c30f3d2b2aed280a3885740bb103a505f99897a2a5733fddea7e481ef41c397cb03dfc6bbdeb6d1913b908fd6485c2bc57c1fb7072ee3eccf45c1baa464c59bdc91ed1c9864e87c9addb1cdc26f5b9dbed818f6fe2d2c89abe3425e047ebc36ee7484b2aade42c368a57e2729749306bdcdcb9c5852f1925057147f97e2bcd4f3dcdcb4a25b390c6dd8bbef1aeeb04b9962ffe356ca8a97e02e3c7bca82a44aeeb9034922249415d17d817360ea250f9f181ea3b2c472866e871f5e78f78a438226c6cabf22b9a4e16e0100fd67229880ea7ad46bfc1dc464f64c84aa57716579c410363a01e2c56781786756b76f195d8bb533a13d58356831cd56fcc05039b7dbf179b7bcfbabb96f2ff81116be4313d35ae1f01b8de6a731754a6270cd82b2607930bf6d869697a97950bcd927ea31b2c0f63517d9bdc852186461ed0c327eb2b64248151f83328a9f15cb7ab21609111bcc0b0874b73b4f0b95385fd6740505e65e5a0bc54fb867a9a6661d654bf409a30adf25affa50c3b97deac349bc8cb14a23b04c7b16db1e59054e2e71f9b56450c37d7b68c0ba2a8d79695b933e8a95d94f0115213633cbeaafc5a2d0a6ff7f1639bca404b07d41c469295219cb073fd285304c54fd8d23be83f2c8fc04d091034ddb8031852989272a389be34004b664669d6182921f6bcfa65d8071d8f05242609bedbda38ae8aef5a8ba2c5958ea1e1899527936386240d344ad8cbea598b656a6db8806cb493deffa07a09e20a2ea5635c6c315f9b83c39c6a38d0534414c55530bd6382186bd9ef2c4d8f7c0b135ba9fa4358fed333f9ecefea5f600eb58b606084bf9302bcf593c46b99bf80c4aa846d3d80d17a21128eb4db4bdaddf3b9852145a8f3007cc14271f5e995c93c00c7236f84ff2d8954e539c7cd86fb566a298e3fd26d45846eba1920944052f0e6f468b9a993ae1e6f5b6bc3828c908815bd8ff0811af85c925782e0a0418b1c955e7ca957fac6b5a8f941d6081fa15bddab3789a526631e7a5640258cfde92cd3e732c18c63d618e79be2b1dc410d2f9ec843df6f122c481a63ea115c79f494f5a3e9d47d989cf037376121c9b0af843bbc58290d5d3e7c99975b7d602399f3ca188a6e06cc86cb7d8dc13c67e4591f24c63cd378c991a8c1d66c209d877ca583cc8f23f8637539da08beda03062faac7793991319a6421f2618fbe5dde97064ecd17f9745fe6026757d3a9d4200a860a87fddf0beea822c1e5010c192ebedaaa31ae51fd0c8fd8b6a52d4c1384757165606f85b8d026d1f8d5ba0c72a7309ad353d61bc5cec0d220a83aee68d225118e21c32e03d5ee4d932e1e6fbe4b10cda2404c3cf1bc426fbdbf21eb40dadf97a83b3e9c9bcd5a9ddd789cb20b2f968faf36029a2d333bbdc8e70fffc8d55850d3a6db93ed5a986bca1e7fdb927ac53e506a899941548a43761ec17b559de223056cfeca5167fe180617679d82369ed50758eb1a539d5499b6c2f8c8faaa3cabd40e713fe001a20eafbe46a0962501f552576166bd9f15bd8036e0218e485deb79eec9239fe78d81330dc117e37f43f29cc7db5e786b5d470bf751d9f035e94b4634ae0ea83354a829317f2cda7ca416759293f6492e4842ac119c4d1e786ea88b440b7ff2749385fd82584b2034a2171f1b65eac5123da07c2704b56861e219a612a3aecfb9034bb2b1b76896c81ef24df5d60261d94223a30b7a57f7a2c3138c2817158a63e9852dc4cff066f4be54040bbce85c73bf3187faf8c8c2038aad493f0042b11e71478190b1983f7a3fecd414e60d6a1d889ce4a8f32b1c9487de42ab013385f52283c5354c849f4cb9f706d2035f0bd093b9119b19332d2a7b0ca070a8440d9b013c24a1ea1be016b6fc881e4f1cd33e5d1818926bb6bf23f38a00200ae05d715f6570b634e4d743be84a97a8778da81e6be164e9cf71587862c8fe75582169b3df54c7efd9ae610648b5ca01cd8e0bd4549498c4ec984d1de07e76924e482c4732cbf4db4fa5ef4bd410452877f4fcbe180ecacaa3a7edaab658da73db32897613456938f7c475c60b1c22b7933a0d59e0841e0a8ba511d42b12cd70c6c725aa079c1a3d6659b5f95f3f6e439dc17ac7b332cf65456c7c228106e658c9d7ede4a5c566254e44cf72dd4c872331ebc0bda7023065e9fbda41fcfe59fe8b79b527fb4f20e96b6ae46ebe3a3e6788bc95793a48a83e27fc005e2274ee5e0bbe6338cefc74e7f4aec9e0cf43ea6c6bd46546017cffeeccf335fd9e71155a7c0edb1041955ae6691bee7e2f3da0c8c998df03e53de0390f513af64f853997045692d3ade1a4e0afd14771cacea79f18e880b8870f38ae63f8bb9bf291628cc4911a36bf02ec6f4b9756fcf46d4df18e39c3caade957a17a26ea3b01c54a93232c061afa605f5ee8850b769209c9412ac227431a5ca082247eab553e19dd050ac875f3dd33011451ab5f986a81d7257dbc05e36c254d282bc9cff11452017ea8df99b8f934856e86b00618f92c9d9e4565c7870beda1328777a59204b8a8b27267004e4288843072ae60b6bb6b69c3053865a001f49621ca60a2625400769f66210a85ffb059438cf02b5272be0528009140533cae2410978a97137f77ee1500d5636c00dae890c765f23c7f598c6fd3e0e9a91031e1ea2a2ce5f3a10f8cd063a0e04bf4d966494e61cf4ebab082b5b969322126c0a5b2174d406eca13d42a8c4a7c1eadc4109f2555c78c1e8a453e8be61c587e1ad5224902843850f31f6e9f358b6f3c5f04f8511eff88b0d51d7147f90c271e73e30194fdc9578c091dc7f2d4f33a728e4c5db5f8a705804e4d22a251d16f0273102d3aa22ba3848e3ff5680a553a057d5d80ba19c4c2a22fe70c050659a8165ec4f85f78602304d82e4c7eecb08fc03da8216acd6252c658fcf7c5b9a5d2a7c094fb118feeda465fe01661d3f5eafbad53f7daec1cd3371baa63b9993a84eafa80d3c3d4e19056dabddd9181a20b24afc96788cf3051c051392c14ba704c401a4d076d58a4ab92d65cf66ac8f51745cdb55e16d28da5400dbfcea917aae61cee6bb7b0b3dc6cf0080a9b3d3fecfa7c9cf07e83d23e4623d95e310fbce5ce99f0f778d26fc3fd4dcbed2041f5dd7518f9db3babc121bc57f4dc55a9c29fd9c0feaf320da312a98ec3333131897640f9ac013926ed1fe1f5b1aa54f9572b6a1d2937629394cdc7a48878b02e1032c457a54ab831a496e1fe2167e9196cb796dd338346d2558983882d958c9f742661cc5d18c1c459da66ae38777f0fe8fe98ab35cbbb8e5b4d1d5b88384eee29b374dc6d35f45ca50907a5ff2eb64c6bed85e6271c10a0331708c8ef3e82907d850e13a7a39de1479de366de8f8223ea20329cdafad6cc0687ebfc31bcb3bca360fd23272a96c0874b1c2426639132a544ed22b5376d527fc7805fa2421bc0f31af7587bfad34eb0e0c681885f800d280b5f4f6a314626cf7edcd9bd01dab96bd6fb2e3ce2010d9fd3cc723b2cb6bb9b49ced307e45815a3009e187a470f86e4b9a55254bc508018f8efaad2e76132f9a3a5fbd9f0562a1e986f16fea9cefe38ec6a54e32cc4b044e3e40a00c2ff5d01450c4c0bda0fe26446110c2e62dbe81ee2d33fec76b62523aea7c10c86c79498ea33afd4b3841ee5b0c1442369dc134b68806be939fcbe545e82e18dbec20bf287252a86d0ed824212102f9f7cca12b154646e66b19eb779e2ccfca52b68da30e151d872ce4fea3268929b7328a27ba6a778d847bafaecbccff1f9e0c0797297bf594eef1abb0537c79d7fad6cf70232183d0a63d6199a80efab543931c3b9cf084dcf5573e014320bffafd76fa50d3803fd0ed677966933e40ba96e695dcf124021a6a6fb808603a30c8dafcc99b3488d9202175163588ff14dcb3253930c6cae434501dabdfcc27809c3f57048dc4a040332b8a2703f44a09404fcd64389c9f48966c51b5fe1cd78124c9e924ef4630edb28def1dd9cc0c636354aae1e080e4a21a8123714cd98a7d325bc4f7998f745ea3ec82887e890755ee09222e34bcdcd313a6ff4ce256b4729de220fc76dbafedb6198e6a50c8aa14fa1845d2ba60b4f1f81e4496548d4410eef68ed7418b844b4d3783413f0b8a90bb3016338a369d5a86f48e85ebcb3d0a27978cb75a76199047f919ca3c2fd91fa685b84a8da1017d0d18a779d72a9542f5ece5047056dcc94d03f98e294e0032335c3ac0de94ba394a63c81be59bad99627ca8e15beefd0bf59f859332f70e32deb673d9efed40108160e5fd9317705ad594ce9e2e91983234ea1acb8ac246aa1fb7f8d2920a6ced94b302425b197323554ae826eb5a6c70c7755e63a510440df83ddc1e27d349aed35abf8dc4e880d87e86798ff0729d045a74c1e0c9e93a044b0acdffd2e7725b8e46a61809c2757a71aac1a727c82e993732f2d3772f888194fafee587c60b3205c5b5784241efb9e0de4bcb17ff4136c67764a8f4e8e3d6a20ade5808e4b9b14c6ae0876615214514fd0fbeba04c1f2a7d4a6048a84f1424c8d099d197faf87d3f33dbf1a70c12d05798c48cd8cd1fcc83c33330fb278c73446349b9f3637722c02471657342769345994216a3790fd399e5aadb60784c60021bc82750ac9225bb63ddd0de0830c8675a6b750fb9aff5e5f90e1a68d6138cf5c994ae7045bc7d97c927957250fcc3655593a546e651bf314cbce80a887ea988e352568980eadc5a1e8f42ce2a2f7ca8218a3cf13bc80d89f7253a52ce35e96e4040f8ea2f10fed98f11c2892c7c79ffe19fa177e45ac1dc241e53142cb774533743f06d6c563da9ea81e02d7d90590e7fa2ea65bd55820f7e8ced288cd2ece8a68fcfaf104bd0ae6388d3f8006c1dfa96e594bb646fab8d137099df0e9d15b37b0d73f2502341bd2dada4a184d91f5c9cee3d75cf0d8600b5ec850a37535124ce80e483dfb480e974f0deb33643944b9fd5d3186cce600a445f5df2b16fdd9937f3b1fc20ea82700f471052bb915c4cd2752ed043d449aa33929e54f4655c4ed920fdfaed092ca240481a51226a75f1ed5d82e2c1e0211c02e810deed4ca4c86ac265603d23264f12b08eefc3fb161d49efa31c5e4b7a2c42cc4c3b1d09bb78cce4730986a65c3fe37a8881fada098be1c972a55ddc22dc829a072f7020ef651179c26bc49de70a8e8147707adfbf17aaec4fa280533aa8a43541884d4be9fab690a162e09e02eee9ae75e1c764d8b3a8a868f42a3a0293934de0f559618c2eea8f760e7db598789aded9dfc45b57d51699a79af859d1581291f7e6dc8bd414d8f012941369390f4b7285da510f238b7ab912a2c312a2159d13c9b02a61f25e6d2e7ae479ea056ce7e5410c313014a3f81d630287c1d8db17f68a72a13c324871827d0cfb4417411b60e81005b968f8c2ecac5b85b0029c6115aa291c2f2be499e0af126b8546bae442cd83a1d6b21f40ce665b3876430e7a856d5de44efaf4570ab2653bf685aac6da11708430b43af3b187595f09dfa97361eb5d41a56ad5ca3eb018d2f7f844af44d65161d94fc1fa864b457e3893cd817a746caedc01031bbaa7ea701c171b8a4cec531301a860c30d55f510bc0481d36ebb7aca86fb60467c1bcc0719bd42c8755c65776519e1ec6aa1ab852bb7ced786463a11edcd01b034df8fcc6ceb59202f06004d8f8b22ef1a0e5fe505089a2f04a9d484104a09eaadfa67fdac620ef0ab00bb382ef1ebdea81e79cc619e9f17b38ae22fc97fdb15897860cbceba288e10eb9043b30d03872f6a63953d7970c39a5c9f3e70aa83fd98555fe943ce5d58e9466e8e950d7b37ff39dabd5e486d460f8eb13ca8543f3c49308aa71b7a64ece9a8ea8d390c7d8894b754994a44cf301d49c108c93a22be42523c63546b3a1b94a1e510e60cd3a5a7dee28a973793186404cf043585ef23c13d00b34ec897fabd76edabc0c4234e7550cd631d3b365787164e12b23b333d2935213ae7885d6be24ec2918b2246b669105fb7827f21d24627f7f2cd99b7071e3d90498171cd46a7e3e920ec6b5abe0e40f8a69a5d991cb16a39bad9d761a2b76bafb8f8b15e47ed035f9852543cff788e0b6babd26ff90dd25a77fea016c3c925dc5ddb7f6f8466eec23de6e1491483631d91b9dc6be18012da7d0838127a7961b64755187171db7a47184e14d209900eb509651e8c0f5379237c7f575bf904a52dff310d313d8319d7aff3acff273cbbfda4da8cc5f3d2685dae55666f3169218d532374d9f73e5f91737dbe83909f825bca41acb03dc0b990529d48673e5ff626a101dfa27daa39a21ecd7e3aa8e253bcbe412cebd9602a287c8f4057b591b918f1a6ae786a1d6e0d21996bf730178db464ff098be28c468c97540a3f2d013cb4e59af6015feff493d8013e725e1a4c0702cf0c889b988c8a6660d3bae48040ced1dea90e9a9d79c9b9028e0ccce833d7fe94583a325483b14dd0810e5bad48370d5961b68e3c6a5c982350edae8bfc8dcab75d6ab657c40d47de0e2b425b99b6c286bdac560862cc9156107d3d44e1ab9916fb01936af84c400ee0cb35782cefd6eeeeb0fee69bb5ce7afd7765187e0bb55a5a088012d28e9919eea9b134fe51908d02b4475cf537edf7602ac1f5dd024d794066ffdab09100df1dde73ebdb9e201015409ea31bda841309e9b4ac5cce096f4a4f8287615c0d7ff2e2406823fa4fedae86fbf3b7da84bbd428a4173de4592487bc0df9423cd9c2e52eea2e58d14b9b4d0eb8ef82dd4117433463d122122350f233dc5463b69d7a5fe56dd122bb59b72599ae5080b6a2dc46f81aca1fd0450aa868f11e3ed1521486c2914346e243d5a70f8241f0840e3f0a5816bcb753c7dfa346fb52087dc6a26ae0c68762a19e3e6c2e9c6bb969ab78c85e8190e0fa578d40643ef4d51748901576e3e3fd665b0e7920e41810fd26946232818d95d3e25654ac12fe9d9162668014456dbdd8ae38d3066282a29fc34daa289f580f6ee7e14270a0895d1b34765d17954868b1e7a4db92ee219c99b0df2c7c06611c8a029fe4ab7833b5f78b9eb392fd9fba294018026c26a6bc2d7ac02a7418d90654bbd2f41040c0bb36d2f33625b557a9b57e2ca520a6532f0ba07fa5fbea9a2ca6860f406f2b81c3663efe4f0ec0012b6117efd4d7121f1cdcb8d2eb797609e939aa04bbcec1e88790a1fd64eeef502f3e667c6c68915d6925383cde3ec23b20a0fa2fd64f23358f060957095b7ac28e05214ecac0d1d5dce7684202709022dce7162affc23318cfe243908d609f00ea12001498941c80827a3d610d6099d363d3de1a7023b919bdfffc3835d0376d6c86c8eda2c33c66a64fd7a14b68e0e00744db96b0fa88d7aa45ec2c34ff7b029ef43ba3f88cc9a89cd0f5100633c11978d6dada984597034f8cf31ecb62726e856ca9fbf2ad0a47d3a23a8da8279bbd8c6ece4579e944aa4ecc884e8d5b1ec438365324a74a61e450a421c9a6721b9eaa21ced14d25668fbbccb1bdf722108e73028e58ff2b1e80f2504007bafcc4e5ae3b2528f5df7ce5128d6d681b32e06cc88d8ea7ec4337df49dc021c611bdca8092a007bb2c459220328fef1ed854c8c1432aee5c23864fe7cc4c9edf6323e06f8f56489c3c80971e73d266419f683eab678415526de0c2488f31e6fa420ed162e2e79122fbb20cc512445f28747bc49d0a9257a4044414687c237bb0bf10ce3a45dc3b1ae9ce3f1b09c2b523c851fcbeed2f1d847f8d1ee5bc44ca330706271c2a15a7964e2e02c86cb03834d5bac797001cda15e22521c1c8170f6bab13aee2cca2989044120d99dfe71f74399798f7b94e38b0ed633e2c619b3682bb9733a4115a72c1a2b4858237101ff9a9ecbe60b1d61a6b2a9b662ebd5eb90b35e78292759596da17b396e425145852f6415a71aee141b6b81d21717c2126986b0e47c2db6eb8b4a5e89c85d088574bafeebf329c9bb0af6bd5255f22322646eccef006daff9079b0b351c1b82d978e0d8ffad22971672447e87d21c005bbe9050b0b0d397cc5d947f262ad0d0eb2119c54bfc322224d02fba73b68c40d33c42c896cbd45b2c1ca3223971c596ee69203c8d6a3af0ff73bcd9261f6dae3de1f471e38196b5cbf1fba2fefeaba3deefa3dac3cb776ed26eae5809d753372d37c5802ba078987b7034cb9ae37828590a6349495e0fc2dd4f9f66de59eb4486612a402925d6d8ab174c75b78b4423ce80297d3966e5012e1d2c1e478e5c7accf23900710dcedbd9abac8e6f5fc18ccaacf284f3aed0935592e6099f38fbe9668dbabd2b275413cf7dfc551ba03d3ef519bc789ba5d22083cb799e95711ae1afaa736ca53e9708f0bc2c00ba7ade53fa0b13ba458e013d8f66d94c55a55bd11f2c202ce7da93efe0e1654f71d497cdff662cbb24c1a27ae9332f893736f50b71bedeef5468b570cf24abcd64bea0201b63ba3a36c9e653d46c09d7f6c3dc2f0b524304f740daa9bb4f1c3c5e18d6695d1bfd4aa6fac7f90335a180caa85fc45146d067e2772ecb21b2ac37812b4c99165a046e6281ce964d4911ccc5ef14d87a1df9a8d523902a6da8111abe5740bfce41fe44fead919e896e33cc718cfeeafe2553a5a58315abf19f663725dc31ba84378312a55fa097f17ccb26460cd6257c72a561d5020a8693f2dc527f7ad6cefdaf1b0f9ca0d647e1f46f7e82e88ffca3bb5b76e89e2c89b044b0cb018c753a5acb1e3ba0f443aeaddd6a58b90f97299fc7f51737d5dcea398c72b7c859364079b25f9cce05e99b1d22629a50a969a65578d1731fc35b8b0fa981a14864631bf813bb3508afb5a7d923879190dd843e665143857eac27f01b137d90319a09e1c4847879dc1be8d6de055cea3e89b10909e7739aac6368291c1aa32474609f65103e97c7443358f19a239df2734d34cb91cefb8439875a71d9b5903d3964b8c69a2ad035096c96a6e8e98827c8bbbb79a00c10f377f1b31373889eb9009bc899fec1171e9dee719c55ce8ce8883923da3f99d758ef4513cdcbbf9d93d167e4f6fbf863b014fde2ea882c0bad7c328102316b70bf472b78d8047c678638d1d3b89f95430c004e72488800282b3faf1b85692e555f7ffe8641002eee04ba12d920ab06b980000735d8fb321097d8e6b2b078567bc2810c950f5aa0ff09f40348275f970d6ff9d4cee73a2e7b8aa336438fb4a442a24bf6c827eb648743d33995d06537e4994c0b1767f30da7a75adf08ec9d0372db1cdab31cf08a0faf406875660d3da258affd0c1da9df80542ad39859820db00f274ea73111b9c2568deb046cb7d4de32524b8f99262059c34c13b71552ad422d27c8ba7cb972e0476f97670bf056e36763cc46f794e3b56d0f1917728db8ba4024b86712476e0fd2bd338540a891e5c5b051dec501436302d67abb0cabdbe00dfac71b0cfa7538f98cb0aee8015273356c745d2961bc6556579566757831a79f1294ba801c8d044ee4d7961db4abf076645e10322bbaf1afb6492e051d96d30221dacb3c0e2858073c56a11290322c34d584320ff052806611b9462f387d1562f5b35cb047ff57e436570a5499e58ab7102f01cd4f3a7466326bc81bcf086065f6a0797372fb9a2bcf5cae11fc90a196d51e742b15b14df7841903885b60bb36f91ab03a77fc14241a50ac79c2756903a1bd055f779362f1893659e7bd30d29ea866837b5c1b9639729f048837cebf50678c77b05ab5afad4b9f74faedc63e5e8d0de86e8be6f8f2ff9fa4bfd7de406c5efd904d0cbc33a1207820f44c539f83d3bc45ecc8bf1cba87ab0a3be3e8470e0a71c823859109b751d18fc80ae67c490e777d3040d59f91e334235f0ac6ab83d002953ba8922f21d66e89f3fec200806d6d8cc36352eb8427277d28dd01e91412b494d4642ba58240ec46dbdaf5d99527045e702c54e6df35a2cd5bdd9220144f8e5590f0377441214f97cb70219120e4bf3cb55b8fed12058021c599158306ec9989bccce6debc3c95b030f185623fc58e3f7a3cff80a9ce4335f43790a91a0fc3c80feba4c4d68cd79cde16f22a44c911d700f8c3cf5a2cb983566e5e8c00d3d38176458d032e4e7df5a697d36b015ffc5f22940f65e6dfd1e2c79733239fa942bb3fc1411c31570b24be009c60e1706fc1c7818aaa3e326942c0ea57414a9d75ead1d5499b441f1c9326e3807396b0767fd856ca9e79e182a1a30404d0dbe83d032a9a62346d182d9383175df99a721ca72b666501166cd60cbfad21b22e70f5f2e24f1495f3702b85973cdd351e7a57efb9a1a2e74831ac355e7f4a77d0bad415a257d70c8ab1f5dfc63dcb41aeb3766373d6020115c7345d319c906147bd00dd4a0e2f0b48b0a50b52009535e3278809c31f3820de307ff225a2eaf4eab290a8f63b0dd9438470374becc70592eed693086e8775eaff9c6ad0952efe830b57ae6fd4a661737b9c08895c2e16233eed81dca2822bc10865e75f213066bc80311f544fa15715a49cb21a22ffd966746fe58e96904bfbf4838ea2ab458365bdabe2c0be97fcf3545646bf521fef143a0c72fa8c429ca33d7a0ced2744921d3701e40ed86eb5a384f723a92896213e79a70febb7d5cf6687bb3c19e9abb97711fd81bb76960df1b20e25fa7ec431023c43211208d4cdaa8555102ab31a61c94eae4849893f4b659681b8c2f1aa00dfd013a40282cbeb2cee94c71b25827ef2a3e75676a20c1b7b51ab0c62c85c8c25deb2b0ca65a90ebea86519df82efaf812931767aed457866259008153a110b749dbb5426dc2299d37b0bda57f6e95f1cadb0c14f58b2865b159665bbe4c35ba1ec0ae6af57fc7f7d0fc4f9b3572b0ae37a2a3297208c2e0bd100897a0c5e82819c9f969d40aa61fd8c02ef73acdf1996b0e8429f7fa69b89def4dfe009fb9a645ec261660f5c01ecf5406dac360ce6802ab67b489b76bda6cb6849290219dcd0ef64991e033b478e9afbc0767918523e331a3628c9a0146a04a01d68931ac75b570b4aa6d0135b732f147978a6ab925b56dcf847eee21fa98db32e812aaa56c8f38a956d092f6c71325ae3e195878d75c8a77d44df33cb3e8e0255569778b16270c9eac49da19fd36ca07f8e4929ac47f7d21bc66bfc63ddb1c17e71631ec4f6fefdd2c60777183500b212e7b6b64ba5307b5b662f5355271f043a74e645020c9e405970677038f967ad6753b515face2bc596a291fa6939b1c0938a3e79b4f6dc7237aec44cc03c9fcd86e690243c6c2c784d0ac394d2305232863106b04b7df1e75c92c8ff3c52ac39dfc812ba53cdc259183bcd20e34e4891c20b12cac9c79b670a2bcea77a09dda9be702a8cd2c8a05839dfe9d5f4428d45045890baf1a61f9c22943c6a2bacfcfd90672e678cf37b3f16b664c294ac3073f92ccf5baa5be56a834dddc9286a0e85d5d9a3346e7e4e7c58756955a54c797902bc76a757b71d0584f20ea4f81b510004cfeea9bc9f910b730e49490d5e12834b95bec09133b69009689e190ea9fae9b67f9000c2df79ac90c798331b0ce7bf21c74025d6df65c351c1535ef940049679690723e728e13d7e5c750ce066ed5aa5c363e869e9f38ba32c6f3746fa6828d65a69b70217ab82e85d5b38734e7bb8411b116f07a553753909bc1a491b30273173ec55e2bc116ec8d7b93e3225c5e6d0f1b7fa4660dac6e2c96a2986e3fa47523e589936c18a88cb6ac5f2acab7f330b76ae141c7afdef1edff067abb41c609d9bde33808ec53491e2b16044fa8cbd8d618d1f373a81768a2a294edd5c1af262383dae50aca2d9e1d846f415ded8562151fdb4351fa90efeb54f49a85d123e84995dea6d1e21bb6b2decc76386d31f2b361b667a311bf81340035ea5f02a292ef3e12772df236f1d2b0651dbb6498be335274cbdfcec98728edb0582ea6d23feb69d1504b55f614aee12802bdac0c7f23525a82cc428292af758c3e9ac2f519236359aef910072d126ff2437017e7400d01ae1911a2332c263ffe7cf8fa594e618de5b8a0e9fa5f70bde0df07711f6ac6483477f8ac72628bcc05fed12ece486a616c1a1b079160878b1c49e22da82819c3221e458eb4a684ade18104021a02b2d1560f6e59b6d287b11dd8ea09aa1e5ecc7d3723ec95dc8828f31983e987dc537b56c242ed2d133000b6be36844adc230620c2bfdd7d3c3d5c832b9ecf15ec266097995a164ea33fbe46fb009b34a29fbc27cecd3caa18fe0138ce4848a32e10a7c880940301ed900e79e0d6c9abf52e052457117560c1e9f9af493188d471233dc24dd67c73568ff5bcc90911950833c0d16603c452618e1a2e4ab694696cc04f131f63976ed85610602c6a4cc29cbc9c0337093cd90079edf32d9e48429982e1aab0da7c83d1b47151eb21226ffad1136e334d01622bb3f6f0b894a0eb93acd4df8e9d3862a1f98b2b1613c922a5995c720e9d248b81b508d74fed6aa6044417746b8913f24a108820f3c8558a6aab1bf54e668ba4f7622359bee6a132147bec18ab4165eb0cc8755a316529c1d18db5d95134262c0b7aeb6fe2ae76fd4109a6e5c24470dd08500f3fc890ec0a14c7f0b337baf802ac2e095e4b983ac6d7b8394508047c73a81736ae72873f97f6057e6bdf8d4a362948f8ab1b43f73825a7227c7043e5c232a58427d9283d48aad0ef9ece00a7c63282f1753f7ed9b8508e2d1589609d060ef2010638283bf62b59c2349719a99d0c19175c1e94fc4307e8445f7057ca45131772bb3e898141d664f2460440818582414567bd6e18129023e8c3c19b8d666c62dd6c46387f140ce2473e31cf6024f9d42f41feea93a0f4083b99dd90cc2a89d9637192d6b063c1c4371c105408cfdab3c52b4e4815f36430c0d862b3127685ebdd1feec9cbd210f39b16699a429616e81cd3e3705745003e730cd939d766f46ce094b42de3474a0d61ccf759c200b53a4fb4624c5dd652c93bab60e48b1d560b9d8c8ff8a0edce8c8f24ed6fac4f8dea1c50cb6536ae1296cfe85b592c907c7e87c8ba740c0f464ff6a12d20da48993b463c6079bcc1e1cfe071850dd3fe4bddf07b460d4ed52f5b84942ea992fe35d9871f1014624977044f67c51f7252027fb1cbb9edfa375a43cef0d883917a2997ba799052d41e425099be463c696a7a62d0edb3b12aeddb5c7144533e395ac3cebe58726228dff89f942c0ac1546775bc9cff1ecee86d5867d82de3f15e405a86440744d2f7739209541b4fc05fba93564890f09eb9b4cc38709e03a87c34e2a66023e3a8d5a88b46368e179c4f0b388248d3fe354e59956c57ed0f9207eeab3fa9cf4883b9a07e9405edc57ae54f27739b53f68d2d1c1c9e3a038747f53973e55473e2a8cccbb4c1ddfb030dd815bb60e5a4a83e25be54075e7df1e854c0139a2a8825708e867607f581c53106d35ce30e48659ada0559bdae3e4f4e93a53e320353f8e72ed515368d46f69c5dfa8f2e3c0f0e9c60ea1786eafc731867bd777be34f1a748b911891e39ae2673d7c87d7e70639e18aa92eea967628fea24f13cb5398fda44bd649c27db4169de982f09d2b340f8b5cf36310f3076b03d26025b02680eb32b868d7d34866061d0e9fad2448de0b35176be28855bf51ce97d5c08f977cddd4bd475b45e91ee5d51b748d99495097d94f83037ba9f701a11a8a41b499c0d5bc9701aa22952e9ad9424fd8bb7d397634995e22dfd6868961582a8f2f6ba1ca396ede5befed5891fd71148006b9396d6503affa87f64a9df50528d108a6154abee052c25ff606d4658f87dc008cb9b7177ec67fed4ebac5df240501459c4de1e94996ecc560aec1354c0de81aaa141c15d63b2969d5e802b38e427357e91b69d167a7b698e7a7f4d48dbe6590cd5347a05ad9d8497b9ae030b2c8292d096af1d94f49929bde465a34e31133e492e8d4fbb89d4687a82dc297eb561e80563ef7dd6ca466a3844f5e22de70f846dd9d916f3eefc21cab27f33a838f2227345e63fa74a89a9367790c35e1a10c3d5cbe7789dd2695193cbee475fa52951d3de24cdec15c67d29fbd63dc5a93d57f89b72bd04740cf3407af30395e1820ebd6e84510cb3a4f31fdc76650a36376507cf9683591e677e717db907f0e30fd957b2fb38dcb67a4271bfa9cd9fb2b891bab10260e056e0a3aa63423052197bbc965263dc41c925f646dd82045838b6e69235dcf1bc89ad7dfce888b964c189d3ab988b4e83b85f8eba6808373456b926f6fc53c42d8a6a753ecd5b818ff50244cd7501fdfd0d00c28ff744e5c122a3dd25f403c9f286088c427f0101ba81207d7b23a8d2c0cb2aaf04204155f64f24aa3201bc61b879a18e25482fbfd0d8c278bdb1b78a84efe8e58820e4012ca4b2cb5c1fbac25ccf2b4b02c640aaed78ab439ae490f9973558585a79405523d7e340c386138345ac8c4ae5156cfc873510a3d1a981194560070f907aa19e4a7d04ab9f29c1b09d973b4f28097f803930569e372a1898b94e1a95fda97779abdb24786ffc04a032f2f5448e87052fbf8ba0a14de005eb3bfa9d40b64b7fe62c69331a3166dd13b3af315ff69636a31163d6f52f7b1bfbeb1beae33dcb801ae34b370e8f4a31cc28337a77e4c4f3eeaf8e1843dcbc7b3e1263d85d9edc9c9a2c98b3d24acf6713634ac72387e8c418ca9f6e5040318668cd1394620c5e9f9a840d7fe1e1f195df6e80f9739ea8dcbcce702e95b0245b95c36ea6a3e93d8f092fd35fee347b3a374220baa16b349d01d2d25c28f44f1453e70243b2645c33d1ed4e74e2153bb91d3e20b0d5a8af08f67aa6fd618ded8b7151cf69606c8d0bffce6aa9014a2a02367dc360c8771cd7223d0b02f4a48c064ba454d4515264fe9b12a0119c46a904c21cacd87d63fc6f8ecdb4262216869760772e6762c68a58cae8d00304400c29f2e3b454a79e635654939df960cbcb320823265d80646a7a0ceea44ebf68125d8a13abc4c9c50ef1c576e06ec9678c92212175c1123a74db451487e905403892ba588cf05e2d36c18dcd949521b5b2fd2288a42e38c61a73e4621bbebc0e3aa63f1c8f55e393e30b85231d49a7d3d07a6d552bbdace143a6742a260b776b2fee6baf7228e7366d0780592db270057fcb5b1a733d1993c9882c18d51da6a41f204861baf29cba579343ac70f02766c30c7a07c3482bfc27f53c5e8bca45c5cf8da0251871998d154c59139c04d3df84094924035d230cec004a26505e182d0b8a03455e7b3dd0fb39785b7c93115a76e66e9cf95ae5b033b516bdde13080187c669102f9a65a5e14d6d0d8f01eba08890611d4b634cd0cd1683dbb46b5b1823c9c3b0a118d7ee5104baf15c38cfa5395365c5bcd63a439b2817027e3e5aa16fff3e16189f5714cf87990ad386b96d2e1b70d63fcbe644dd02341738416d80bbdc91e33b70150f91887bc5949113f154c234240f5ccd7b6d7393a6507f3101178cb73a72092bf867f19e7dad55c219b708e767df70c2be9e1ff19434c1681499fa0cdb4fa97d74c7b818901576b9c819d778caa33a56f5c806024d284d67328fafa54f532685dc3415fe9a07d168687f68080abc7d259698352bf188e73cf53c0c3627c14a4a3c4348a959345cc4b76d9e4cc5796c5f83b920b8471ec83fc7f9bdd8cdc5e1fe749bc828012f0ccfb78b1230ec4ebdf5b12a225c8e0aa0155d97b599ecafd2ad87feaaccc2eac06393fc981d10664112e4f81d57cd1a385fd842f43809c0c5d94411f0c50a149d9f13d7c5f67a5427a00e30fb1df9ca7b8c46a8e476193cdc04d902c9710c1db1c1f1b56f0d90cb3e2e58c4eae4a337c88d39797d5b437156fcabf98e20e56cb382dc57998760b15f8382cb56b064bf1dd9ca82e24a400c902062642ab5cc06808afaefef58982031d1a3ad944cc26417695b683e34f184148311809383d2cb1115a3e30410428d3e36686de2bd68eb2be3facd7001b57556cb0cbf3fa88b984d1bc574da9a8ae7397a2430cc4732866508ed314a8c27f421bc819f9c756e51c3d0276e73246ef192f8af957fb026fde6b2d2a6c44a2f4a917004ac496ce6b5d4f8581d409a74a9f49b02c2af2c16eb5d6442872116d231e28b609acdd3b469d0bf70653cedd7d17dff69b9fee72e439a4e259e1037ecb021f77284c8430c3335905c36049bdbb6f4f1725d590fcd1141e822fc4cc42272fb4a2e0ac6bac13f72c7163a7773a73c6e033d3ec450b4ea66181063025e3f0c628c250a934e6e0a0b4033c6c312414a0354c12fd3094551283086ea006d7118d06d55fdfb54ab15060ebd4e41a6362dae2fe70bb8a818ee91578cc419d1bc8deb58941e18da945108a895543b92f5c196b152fd23b2b2ad77805da387313a2180231b84334ff7fed906f9416ebcf4036cc99923d02a9f0f11972e390bfea1c4696b0158072a7800a42679083d44602d7a3a28b0d32aee09f8e9f620ad9572830b366827097c91833618452c5e76fd0b6bb229c87004ad4d7cb12e77f880247e0d92519e390b12ba07ace7740faa5b826a03b327e7d939da5c5e6088459e7d46a761a95da5db4573010290eab10f50beb7f4f75f3eebddfc9f5f644274b6cdd438cf82149a6be1e6e556411c8188953b3373157eb5c3383ecbefb97f05439378b55a84fd18c75cbb1d7886e6f318da2275a29d05e62879295c26d18673392cc44d37ad73fe3a3e65ebd4155c6d75697555cd196834260b1e41504d8630da4a25fca495446893fc080f8959a5510fa2e5397bd1d222c139952a85e094df65d98985be581354b7815383a9f2954ca264a3d1f65d9a71ae6d8a37c1a61b8e1d00e2cd6d8f4a2e3d1772116031a2082b48a1b9b9114431eae90efd6636af2d486a9b419acb591d1b2e8b2e94593f1537a33371740747231eeb0ec256267c838a2e63c5b499f484db19eca0dda323a3265687d82da69366c80ba4c583772eb3d1e670194befe54ac971fd489996e19c447385fd040ca1e3730f2ae47c64449d2b7cd2b39f8602fc3f797941e81ebe53fb891cf131599792094fa96a09518c3edf8019858e5b561067cc40cabbc7b3ca1c40f1c0bc348df46752f10def4c7ca491165ea46bc036fbfd5074f0f1c4119a6ba7d681c3ca98060a1f04beae3aa1ab648b7920d74b77c2b49b39920a47305249c3072e5b60ce521baa48cdd283f6c8bfc0d14767f468523b52c3c50f40d918bec3c37852b607cab35780b71a2ed91ec3413ef4c382927e5d20672b5153abe81c9f9edc2ea512b0d3358be8442a15c95b77d812bb6de72ab479c2057491183a4da227bbc2696adc056435a00db02226c3f4446ac1239361a3e4c3d850995bdcbb3a4fbd0f530118e4cb9eb4f4b4669fd4c3db02f43eaebe12267e3d77f7e87886449d06f5204c7854b69ca89ee408131e8daf5a4b97d492dfafa0d60f212911300233d9c9ae2cf0e7cfd8836b5ee4b86373f8aa43a8804e1c3922a61391edc553e8fede312249bb4045fb861e701d8b1806f467732cf835bf44e4631aa7f988c59977ebb1281b6f581af48f1825963fe628adf36f750083926743b359ac0fd05033bd349a739aff88e7812f0bd80490c804f49884d11bb46da56f1ff196d1f4e8ea9365d8202cebc186b1310913c1d67de87224db97a3490246f769d739142c7081551041207775fda18904636b27e21dc5c6e3ddea6f63468754e508d72b14e4414cfdd4dc57703ba10438cc5cfa7ca27464f13279c73ccd9fa8b8f493a36f2f75427ecf9ee5183f3c8242bdfd09a3a24d7a096de2a84eee614a71d8954b3a1a035e7f3157b947c5a8b2ae07bb07020b7687f51853e0786490e4c083cfd8bc825999600280f74d788f5c3dfca17042659903d84d54997e4bef408bbe499546d300abbd9e48e8d22daf29315d6fa56fdd8768de5320944006d2a234ec0a97f2cd71781a119c23ef98140ac4c540d3b23905de4aab8019b20bf1da8bdb5ded18d037c3d1e27206949c29ff667366eb99a0a05dcd2aacd8e38d9262700e0e35434c5e3bdad983377a7b649084fee03b39f8788c9f5ef22a7738949878c6eba333f7a60ba911d6a35cd72ad0563be6ba765a2df7f856231f3ab31a87ce743b8e5df7eb083517cae3822b2fa9bf8cfba6b8be4c1c8739b6e2a74647bd5a267008d7f9889e4162a2585102986fc3d98924102f73c283cdce1c990bbd8ed4a9688f0eaca54d287cfcd1bccf7fed308996c706e8b1811dc81580e61538d2fa3d555ee0c776f9cfc5e3f6859d0f3924e9034876b6d38aacc41f6b7dfcde3ee8d2dcfd309a8c6b27be9d973604897d7e1c9b1d8a6b41f8446b25ced29b09dca68c23e4fa00919ba28d38e5554cf5660c827f5607714644c3ca9bada566e5006fa251348d278a1774c98bd3788e053bea3c78eb1f61a2c352241543a17f04b81c18df894d8b2231c6a265d44da46008ebf950012892712932c1d2fd59fa3687ed70257f619c4d30a467dec77557b128fb0ca99a5138567249c76072713535b922906dbc979d946b9abc9621da9501e98db29a7a0bdf79c4dea341337968d32b1e3a17ae970fb570d87a9febc00689215bd846062bbd4a356d0111ad31724f9f4a1e335e37959303f41a8bc053c892b0aa27fbaaafcbcb21450bda732165d9a38850ea00bd9ee6daaf9f83ee4c375685901442cb77e516f3d98245c4de2bc2c2a87d78d5db8712d5ced8e8f721309a4c72a11faabad2e3d561ed922bff04762f4857f43b3f73162f709d8884b6f88c1e466ae14716d1eb88cfc1a16c777040abb452ae4343f5c7aab0eacfc94b4b500ab850725d695956bebafc70b1e4ebd933142c4b4832f3e47cc2c9a9fb21e9e3fa62d2c9ddd78d5a8787c8e4fddeae40f37a879e87191937df3141e70378760c7b7c467e6182452d9473d9ba173491f1139793702413ae47ef68cc1a8e814c1f63d6b8caa00691f036ba9e6de257cfa4a2d96d6d155942352d5d48eb2467346149b5d9a11f9046fd1238d30d1654b414c734c6060c8a7cff2c537682a6876cad281465bc6207f3291197c49cfe51cbd14382cc856d24dd3bbe59733f3e6f1c6c7ea5bdba2f9729196da5b20fbb3f66dbf01ecd632a3444ab9985bf1f830111f81b2fc08d988262bc0ba713aa4d881c969a54bac345e618df34438880909288c16a962a63bab996fa04501d97c4784da1667fbe242b85324640da25c1ca2ec7c92925e5c30aa84159ef648e6782cce554d130b9f4a8c8c9279a69ff51eb20e235b908402913e347644535f3473cb69fb22bf717b88ae35bcc2929449d764fbe1585c8cc12536f6ea37ee5414a9533ee2be470069f76845d21e398483dca237d23d3a9c6c725a6905fb36a43143d14ddf24b2b044054ef288925c8861b1699ce16f0eb09f769e6a038259ce3a9b0cf754ac620abd70ee25980712b7365a81f8b42626c031fc9372b86d93a601dab519aec1751f12f66b17215019086776a810755729da794dc0fcc433179a661d4659e00623ccd55ed3e406ee3b602aabe92820c0667d248dbaa05df298080ae44c5bb0d087e74d289e794ace95bdf5f5317b45fe47b79c3aab8d712c243a00869c571194f34893dc268b805eb50187df701414675a8a3f6bbc54a0a91bba9b45e34bd842a5a81cd09fc894e89aa56451b68a768bb3226cb6752b192cc5a3a167c090be34b4ec7d293ba33f03a1503495fe0f7b75d1d51d1c69e60ddcaf121bb50e0833f35f9fe0b79c4ba2542a13cf853e5bd7f9d6e562d5aac8c629e07e26db56502f1613a2a323d29fd47a6ccdfb2c028c3aa89e5f3cea79916b726c1c2de19da94f470a86641b321891eb3f1d26a41fbebd13b081964138a6bb9be077f7932427686c98643d3f8fb3ad2f2a2b9c6113deb71195954ad4e1c6375639598094d3cffc45e9ff656b55d008e991a45c0e9f211b019227d81d2348e44eb23c0907dea551b79bf67f53e454a9206c1b846705b524618ac3c74ab69ad9912af14095a7193068095a6016dc140aa3a5bdf8ea1ba54215915854a59f9a5fe936a29cd4423738d0ac40e3ea99c74bb9b61b0830685bed2b138ad1646e71707bd06e1defc8b709870e5aacf194896ddeef28d6198f5b5b527514cf07f1b87392ab40161d28f58cb0520e9482390f388dbb9a185849e80494b30969101bbe2effa7c042b5633cfec32e61d8e7a001a2b0b18afafee0fdf8e1ba750047d2b439e58fa18f747abe19acbb790b07f32d291f1b4c87507d37ced50a6df2e512af75e35958c305bd91c02cba0784474a227880a6ed65e27cccc18975e39422e33582d988fb08a54ca89764c78aa2a4fdd9edfd79a48666743e11011051bec1bf02435934c9fe91b339363ad7b47219e468f71349d07e220716d188011903febb4e0c71206bdb2a584d00b456c0bfa100621d30a6b8016bbcd8272d882e03e240b87bf9dd0c01d7a8b99ef7d6a3029dc2f4da5935a90b582684b7e89b0fcab321998851b5c0526bcd4c5fecc0d6cc38d309473a79920b7b9b80c5702c09b3f67686306e303780e1c700e3287092c1ef686550db82e7a1cf96b6abdb56e8e9ce41b1f6211985dafef01fa307dacd4500268acfa46370ae6deeab2d763bde6062cddf2aabbf356e65904bf7e428d8a617051261fe3d1ee8f7d0cfa46cd7586e4c938b5c415e6e436b752b8050d7e27985e6812e5f515311dbdde8d963a9dd5dd61ef2c0c063c2ae0761e89ec0098599aedc5d3d6c31207f50f7ab95f3cc64a664173eef3823ecf8656af053af274c1313b92355adce3a4d2951463dad2bf8a714e635647697c69b28ae06fc05b0377fbd8c263aacc07c3863278aa247191bdc1acfbabe0ddb3284771f5d53c4eed760b2273f9c5225c69b90900f83e1dcd6e9e9075be26b30201073834e48fa8e3c344f09a77c92c83532b9896bf93213190a9303a6ef8a27e43ae29ac4a5f0931b4a2b59408e30de4231597224d465685ef8d7a1e3549208b85ed210506cf01e1d51f9371f3906bac5119e6c30ae5b51015daa08d3f9f40c6e61fbe54e7bfa456038cee26f48a85347f484bdfb74d2e7f2009fbfb60e1e22624647df0f046befb7d47ed82494bcf9e16018fed785caf207311612b9991ac9b07dfac6ba7e650c9cd16760835e8cf86014e1cdc19c12a187120983155ae0da7d613988d0e64881e9b917b88f3c0453d640e826f1e1c2407f105a9c9f0f7c50e61b5855cddf04efb77188aa8e73038d8f2954aa61f72f28622252ee76790a22ff76bc1e4d13a064ad4187017c96b6c9bceb555808c09cc52640cae65138637eb8fef0dd0ebddd5c6d9b682271aa537c53b2e7efbed6a39c2dca4000ff8388f2f374a2df361f9c5dea54c21b5a9108b79985d2ca338cb39633b4a9d1534fb264fde2bf3021ba4f3941e7b5ab0dcdda0a8de984aa56176113f2e49d1eb1a349cc93e2c285c194025cd19c8392ef156323cecf190ca833def4fecd840743f8a8a9f1ea4a955b8c27afdf6b538a3c2937f472e1ea68d2cdf29229573afffa8fa628b8d96b25763cc458a5c2fe00a554af9391e4158b8b07cb2b893fc76525a114ce0e5ca40c6001e7db1ccb8b5f12567656eba8da3df700b5f7eccb55f493f1aeedeb523d46e0b503030564c0d9e20cb07385218eb9345ed82beef0c57b9ec13f62e664fe217da582af818cfd5822ef1808b1d5d85898785a9f8f49b9d74700ed2b9f3656ebf27009bcdd9718951f131d9f20447d358fcf37f13448b47f2329e442fa2eb8cb58287e014749346a243add1bc6354492c1b03ffd6a0836b82d4a09581fa349c76bac62ce28bf7f5a80f97e0afe86f37a66c199b4a02379844084f779d5bd0b1ed71e3ef0e5ca4d556241dccc26dc72f182e3a36043cfe11c847835af491994278aa29cf63f7a1760ee7b710956705d06dd8aa6cd6e8702608c4ab9a9191d5ca37fc46363707fa2c5882b70d5e02a16bfbe5362ea1d334726cf3ee4acaf3d4efe12a952fafe6bae7b02014f0256fb426491d9b8331c81039ffd9170cfac396c9203b550554c327672acccee12290f2e9d4406308d7d3efaa783ff53e37532e9b2777cbd4893e4b4050ca8ac5d1cc98f1b133d2f49f8a411fd5a8ed94ccc550b613bf7514bae6fb286e08d8ebf8e0f021f66f99e5b06ff2cb2fd0029b1ddb452e0f3b90c8464780ac850392fd1d41c62c60c6eceae1358b8cfeeb1882de4c88aeb3499b3962d1b9e39919db6e74e40d27812aedafc2b0626d18765bd395b18fe5c01da4997ea3e96831845df8caa5b243ca3f3946d0c1b2f659440b425963d28b42922b515765098f666d64cdcaf28e95535bf432675c0429375eb6220c5cebb6588320ce140da24d61198a9219ed26c018173d6930c7e518c90c0907e98984e5d3859be4848475f4f58b7817b35335b3a9c09adf3061b30f7c2b0b2fa3bfc72f3b55f7ba76dd1d91ebd2c2bb742eb4d4dd81ac6e3def75df6b97ce7ec87568f1aee3bab63afa9148573bafba2fb636748ad42e9acd2e1112b33cb139e8a0a058bc811907b8d4afee47fce6383e19f8147856d8017aa26c8a1dc6f6e3ac8a03481740732f4e54ab7d316263c07fa4688f10be4056993182688df839e87404b92597df68e874b3a0e88f1328411e1d66f1c3dba774ec7f0d18e2ed555bf60e27456a026fe071e75708b5236babb39dafd1eac122f3f5352612addc61539b67b2de0d8cf1a67c3b7c4a10a41689cd5edf3ae66619a4426d470306e4026b60fa2fbc6b7abef581cfb9ce4a3a26a6096c25f9e2dfdcd5816d41eb2420562a72c898c3e0ace7c3907705349f240d519d2263dbf2f381111d4520d48b146b158a1b721b599e073db1332198fad8a408879875c70c254ec244a19070762748809e489ffad248e0ec6fd5a6b8e2cb23932b7a00aa74cfbe02d8e0824c93fac605a03aab1fe66b64e650d232f071bf9a2009c969cd10a2550839e8b45c2512aba065e570943c93381c0db9e9fad93e0116446082d914bdc178b8b3a3b7683344ff63f413f8bcf72da7d7d7e010f465b71b991d3a962125f41a95e6f1a4d9b8822ffb1c6820533a89db83de83940c7dc5f123d06e6a936106e3cdc739e6bfd6019d80a8a120192803c2e5b7b188045c7ad09bb2ea337d6dc90761f8a097d068c32da1b624bf7471a7e72e21e9a51ae596cbf0619e74ed9a9d1dc83de8a795bce158df886d34928da071507dc72d6d563933e116fe28436f394ddd0c4a983c7f85ca4a725f5183ee1c9d3efe9b99cd202852650ae1a6e8137fc933704a998fc4a30d8fffa6384283253d7265f69d252ed94e4c856263d1248c424defd7a83d048c1039b85e33727cf1ce6fccf96baf8f8b2170c84d6c0a00d4fa17433d3d5d80fd53d793a5b36a10d89d871a579aee743ea90917c925dc911b0ce8a166af5335ba617750f88b94eee2a64a40c3089168bab537f6142adebb23754c51e6b09a57bf996efa3ba07be48596d7b5cf98d76d9791c765cbc8e3b2cfc8e3bacfcc77df67caefde66cee7de64ca736f32e6776f32e477dd33f2bbec33f3baed32f3b86e99795cf619f3b8f619f2ddfb4cf9dddb8cf9dc9b0c79ae9b8cfc2e9bccfc6e7b667ed77d665e975dc63cae2d431ef73e531ef73e63be7b9f21bfeb36239fcb26330fb8fd6763131d74c6467f34cde13e50d1de584a91bf0f872716502959187b7849b0915e9dbcc8127dbb7f1135b7dcbb7e3cd55cdf8a25be6947a8dbd56e0a8e44d2583d5d85d9ac54705d2acfe2fc3e5a1dc28bbd3e2b185be47c6360146477e8843df125d5e88984c061d0416f977ca601ef4c9ff3d8f72b94a52ae8865470025a5cc14959304ead930e62336b0858dc15c37883e4390f3a60e857849e3c4456e94422788db69e66659f5a065994eb0b10fbc4d42c193f4e4f08865a800aa233e9b27893af76fbb465658b9bf4cf4d198d83fa75f5416c4bf69632c9945254046b044d04a3dbeef9dccbd704e63b4a29f5fa35f590a44794522f674d5e67356ed03c61faf31e3691039bb0524a29ad817d54be1796b060513d91b9d1e6868fc78e9fc8c028a58d64c84729a55e4ba62ea56cc4244a29f5955dea458813199d94524abdaa905d4a7794ac647959a1c2e5794cef82524acfba2ea5558a0571b65197bb60c5b171e96c922b277b1c0c2b0e0929e298bbbd8828ff1b0ce7b4e09cd4d9e791c639a1d346b249c4fe8174ababff36dc201c2d95564a69bb2e9188cca3eb9d0c5d5075b79bc46d80835e21f7027bc3cd8c190c6fb993a1dc697337cb7cdbf54290d2708220a5f31f2ce78c73425ee96c668316049911e4c5ad5d4ec2cb014b9b70884d1b9f21f631f2dce310727aa7b2aa7b1cfe4c8f8347f01bf16adbd7bdd1751e1650fa7884cc400d688e7244f59d15f1a77c23ee718930c26cb86164616663225fe6f9186adb7f8983eb6bb3b96f499d163e776666cbf3f3dd2edb3acfe5317ca0287d43ada563d08f14e1b8d33668a7c79d0c84965a15d4def48b35dc0d0e0c654f09117c40052ae4ee4744e6e10f00902a2b3082044888f1504a27a5948ee1e4e101a3528011168c8c813a7382640a3d5333c1742142e3a2266b4817a85f931ee76e377e96558785ba84c7afc316a9521e9539f764fe02b1c60dffed0e6a49f8cedba206fab1336d0ada6f8340cbd67fdc996306da529ba22db5cf16b4413fe498021c5906d131831eb52ddf9caaae56e939a2b66c4938dbb66e41cfeaa6738263736eaee051703ae794d23e8873e241db25be14f31c5bd1a9959212d5b6cecca42da5febbd48aa275fb63966a6ffd11eb76295dfeb8fcc4deb9fde7087dfbde89e3230639bec4b6dd4e59085b707729db6beaba99acaecb5f44a0ae0797bf8860dd0f8440e6bc87345582f63f5c53df7ea801933a494851423f60a9fae52f2243ee8bb9b4b6238ee4cdaa5b76777fe964ec9cb7f6b159cc9b82c9203020d763e5f46ef70e3e4a31774e0b56a3d8e8b5ed368114d1a3eaea8d3aaab5d67ab17c77e774c0c9617b5303a75fa16f6781d8ee618b369cbb6c15a8d074df7153ebd165d0cdcdd8fe2ad46abe431c75bcc7fa18efd4ecda2c1131514a6bf0cc6e660cf11e9e61249cd1556f2f28d3f9ee69e2eda8ba94f283b42388602b3c25be2137974ab05e5c7e72259dcf3adb9552fae0bcd4b6ff1e68f83fb8a472d7fdf1add4b61e6884d005e6d764cc284c13a5364d92d0b883f9c2c1c6d7992fbb5d09bfff7d5da9f90ad2e6cd7c993773635226b47d902390801343529973431e229475ae6077fdf75675c5ffb4aa5b209d2be74b1f23ca0e78ce97de389d17f0db0e55dcf25ffefff3cb7fe9c4c11e75050876f376d78555d61021425cfe722501430918eac9a1a74d4f0e61c0f818f918f914f910f90cf9148579dac5cbbccccb3c8c7ff13035b19a955a58cd4a5616d6102cc924993c904c5776fd7880f5b839a4798d15060b8f87b3c351c241c25102838404a64b1b350c30be73254702e35e03411398ecf6ce032660b1210db1c1b019d960e002372190f3a83f2002723e2144b859cb03faa89d85cc0f90f37fee9cc8b96f73469d108bbf3b8676543410681b081c8d6c404d83a6d12137aa3913a8b9debcc6a28e83ac42fae2acab170c21c205d937038f3410deb2e3eeabb9ef2d557521151f584421782c8bd48669f57682d79c89e182454a929c0836840fcfd09599b71b60d03e27934dd1eea0706bb326dcda46a12b8e3b28da8a56e882b81aeec626d6ac09ddc194218c8b85afb01939d25957b7e2836f9ee72657578e6e4a6a1b04437710d4a940dd25d88e446414e0c8b5f009c87282b8b0a7742b9179747477a5b5aafda1a9ea7cea3e359a8ef60b7d381855a7629fe2ffb1ada43b8f4126b3183d96ac1259782e4a2086e5cc862b5194d2700d6d989ad80499df9164ca7a19bfb9447bac2c8a6b19923d1c46f9cf0acfbc5866669696f6a853eb15e1ea33d1dc4377ebec47d8502a8277fdb00140e870c153d60c4b3424512937e1d9982fc00e39e59fca295d4af94544896311b5b1ad881651b3fd21dc11dac7bd956377898adb6a10c29059b6bffbecd081bc8e85e3b8380a7e3f04073033d7f865bb560a3d860744ede40068a75dc00f288505fc80aa0dc671eed1ad70d1747397bf565881ecf21795d3e5e0f2578bb06b716c734f2a7fb57872df4eb7527ffc3afdd33c5c6c5d5d68520e1b614471ca39df95e018eab0eb5db74a9e28c961e5ba5bdb8906dc74b46e645fc666e158ccff6c7332f9459689e57452ed96ff5fabd5ac87381d38add0e432976d48e4484ed8fbcd5675e487f99e45e6b0a9badbfdb73e54de4040a9de1373d6d4eeeeb70ed6ac2871a0add56a352b71e048a9956e43eb2f657b47b156da8bc1edfef19f0eb86a07b783f6aa219371b7ad5b6e7f906557e7f6d0983bbdba5a04913234e4f65c99e6e54ae91e8a2ae39468d9d4d31aba3c977b44c66e48c26f400beac07107b43eda741ca744c5519bfcc2d0f284a1fdd0c391043f4944d08a1978a9de373b19a0d6ad0a9c5bd1aa90d68a2d71b69d09f4dd69c7edb40db7d356028535d9d3381242d90382360441d083b4f57f1def9196d64619b5ffe58e9a95382ad8807e50cb38163022526df0c3430b0194c1004a4a29a57fb869b0418f7f2fee0b51e480a96cfb833bad0717709ace11f87e70e798150219a24a633c811fbef9220dcc8a920c5f4ca89c502ea618b6f8ce858f2555c068a150246f0e719a4923c878e07004832f6b8b10226744d63c12b02ddcc44729a5548bdce2d3c263266ad8514a29a55a7a04174e94d21e02c00b56345879d14287f8640f876f74e5940535f64ee296311e6ac15dd032f2d292b1250a4ca447bc22636e249128a55b24afac4679445d3a9fb0997aab29d9c3e1f4597d6961a55ed214a5b47f9552ae4b29a5148951ad4629a5948e852d35257bf886a9012d92549171f5050d0e934cea8b891495b1dfb328becd713a1e7082e077e0f1e506f3c59cfddd7d4a777773770a4d3a5976dfc86d90aabbb97526466edbb1a727b7ad8e2d0d6dcdeafad6eccdad8dba8943e1049039607102781fc7023816707bc200adc26dfbb6ad57b9cb6977a06acb39035fb29491699420edde439b5a65f42eb5a014650e775a17ba361b4e1c14745ad136ea48b8ae51502ba6a55d12d2932e09404b1ba7f33b4de4b4d04dbb0b624f1577b7a0eb986edfbe5f3da0ae1cbd07d1e5cbd73d88c84f29a5d44a6c20e6d139af7693372d7132c4746d784ea99bbe5cbeee4465c9aec815a120e0f212a62ed7767949110eea73b92b4a18931b56228ba2c4adb0dd3cc72c3ac850dd76e5bc72b4d51e9c63a6916ec20d1988f9d88139d9cd957ca754c7d81f54aaf074fb9c2e79ce30a4d96135aafd35b8d47a58a8857bf8ea722890f4847bf8ce312c408daac1e5eb23b85d62ba06b779f47c6a75ffff54caffa66d8399a5e428f184bed24ec0ef0659b5ed0acfb56d9c0f8c5532194a11357b63dd67880b71b89fd7e8ee1f3600b0fa91d279388c5155970b1bc9edcbd52c1f04da4fe3ed1686d382b824904ce7095e8630184881f124135994153cee81643a129bc8aab2bef8fc84e0b97dc0caf230b292a9ba5c0e8cd7e3ffa053afaaeec3755bff43d5998ffb1ff526c9f6e454d5f1e86e3a6c55cb30af5b4a2983da89882ec2e52e1121d0959fff63fd7fb2cb757fd4c9ae244e366e78398913956fa8890d5c9a0f12c499dae309de8aeeabceed03e55ed2a3c8bd5d5e52d4c32a616666d6f1ff7f76acd6a9217ec2107e7e9cfcb45f853cc243b6b15b4adba947b9617f47bde998f00b8248b5fe3e7289743e9dbfc387c867e84a9ae0811d2018ba7bf02305c348488729d9f7c683a6d6aeb5b6dc41678d0a5abe3a6b7dda401004c35aedc7c748df469db43fbaa3a06f730f6c7c2104cff57882131f6e5b9ead5a0209383caab7742a911d04c9b939e77c97539dd33a9f11cc936b39e7b412a7847fe39cb063bb1818c3e6f1bbdf64248842555a29d642555ac61153810e746aa4ea1aa8014930d9f3966ea9f22df8737c279c59757bf32b2282a0b2ee7ba21c99541dd8f30bf6a408b7ff604f52551dc8bb0ff2c0212ea232a5f6478a786aa4b6f5ab037ba25314222f1f849eb273de98039e337ce2719774fa9d73ce39e7bc7d3b05296e7e4929a5cb15d2a57429a524e2b69dd4dc9c9d136f416be29ba6b1f571e7445bb6265a768f3b27f4a5f6849ccb23330742f77130e0b64714faa6867bcaa22f8bbe3e7a0bd3fec4b5bb7b7b67b9987277e96edd491882cdb9307c1b52d570f022feccb6794f0721e18f90a923f2cb9f13872732339d2230b34f08f4d56ea784a435e4ce51c7e2c36889ec56523a69e368cfb70dfaa86b1e6fb65c6176d2897492fb7172a6f743e050586f423ac4f840c34b63638614900f5db73fbe9e191b7545a406181b6e04497bbee988555d7d2b20801c20e709559817f140f3999800b4a1ed70bb038aa336ec907a9fc00e0233c8ee56729ddce37fa494523a819a4106294db22801c9b85717e2ee386b52739293e872beab63f1620948400f1b0f34feff2fcf0eef4f75b8a1cb8b1e96b2302f6233cd9013a82b69b4b89ca0c898a212a271e149095dd46c51625694f6052cc49daa56882db43701d6f288ef2a72c5020c5864c8c163aba9c80b007094d6001a4fb4028c355090728861ca2a12013328fc7a62a2a270587921c30b2c86331c2a502e402303541b2434860fca1701cc34e041548308070dbf2374e9c8950e1b0c2843b5c605603ec6b0a13b226b74f45301c458000a98325d3d2a467c2e70bd400718332a66d0b4b880650dd8540b4fc66a5722a5f48986d80e4812a722595cbc4089b6cca0fc053a2506004765b0688c665568a829a21a03b5a588aec0b583c00da330474757668c7185a12db4703c2579c0ca8f323248644e6ad2ac19564205c4ab86deefaa471b1f121d9df453acd2d074785a0d4ad17ee8548dc0061aa474b94166489316604dd1f1a50c45af286d8c5414b1dd4ce373a2c6899e1113e54beb4551da6f6bc8032aa12731ac18d2aea288b998677c59311ac819a4185c61453390aa9851cdf0a4324262e0b9c1c28ccd148ca3334d68646ea0495130312669663cfc106b8193aa166745e618df570fb4271e328c668c179134595f5c6428eb8569405a8c20bf2e2e7e326e4893654b91ada719d26e64200546e535661764cdc4e2d3f282f66480b4326b8e62183a5bc3a58595e94b22054d96002103c4f5102064f834bdc872b5f48556030d34aa71c51c29d4020e3984b0e9aaf142cccb35ff5ffbfff001f3ba751ee1d75d8ae9f0294ee4d6110e2964c2a2ccbcc4b6c26a78c2f12d188c05862a5e4f481832459a8a5998d6d611c8640b11132f6737aa7a8a99132db9b5744b82210b2a07efac050d6666831658b3ff73ce290474e39eb7351c0b4240957bde8638168480401c0b4240cc3d2fdd650489d1a44629090c608260b99265cad3534fc5d8b2d2112406152a2d1b3896ce98417365cad553516eeb48940e2abfb02128b16d93ae2c21f7d655154ae548b296b2bb5a1c5f89ccf3a3c4db12330c6bbdddaccd7d08f733b86a2132775bd9bb6e49f8774f8e8b6af35ce579416429a50521e4ed4a4184482dd9f08597048d922529178e70c990ea2aea71153de915497ac05795548c15acfca00a5fd8fada8a8a61830e2039940c2591f17285524a29ae2acaf2ae022e7ff900bb4e9783cb5f3f38e7476d4b02dd579d0ec7cb285ea7023bea58fc953bb1bbfb6b38f962044392332e1c39b3846a45f9924aa2944caa055532830dcaa4872f89d2272304092d8d528a2695462945934a6b2a3a9294660d0bac7e4b1307265339a0adc06ffcaf8de778ce0eccc956dea8315c49a2944d92225962513454fda044f95cf0d879416db50044cb0c3636ca7861bc9662d6d3928a428394012c9da9f2e506a3a524b11e180c56514b05c861ec0886323e5ec072696f4a0cab282c22cc0173500675dddaa43491b274dddd4e295eee4d0a1b2122519105fa80440b15e452bdcaf8759488256477b7ecc6cd91eded71c6ee5932f76e77a3f5fb05f9ae5fa99ef5a1561ef127987785678d33a6a47839c05ee018c3a255648011096bb6b7f15e054e4a299d2e8224c112c29b94524a9b24f14127a594d22420550ee4d178f25d54d1496b2e78a268eb96dcfc9481d50cc3194e1be274216e78238a38137cc50bf015c71745d1adc48156e852dc8a10778eb43b70592486cc2a540405a90852a122284845900aa1128254048574d6ba76bbc99e146f419b020453bc0dc71440fb16078a13f7292607ded231054e118e2a50a1763f7a335a75d303ada074c23e0b86fbcbabaf2f2246315a3ac7a6e1d59352003380bfca9c6b227a7021a594d23643a5ea79db24bbcb1e5d506ab2feffffd5f01628377c443e0297eda8c48ff684c766c604280803160000100c060243816038282094cc9af914000b62623a70623a9206c3c13814c6711403410c844008003110c0608c518a1b86d016a40e9e29f936f241312e4c2239814ad42241ee66d293a3a574ede404d8e3a88b7ed7457dc532092e6208667794a85fdd673d82db4ddff342d119946bdd4b4009617f4a5755514e2d59f6ddda686bb49395a9b22b140b5337c88f7348e116f5ae3c3de91258efb425a551ee6b53cd0a20b262e3b8bd91807e4f32254f94f67a37d795f496460ce5cd2d1151171ebdb329bfdb47f270e0c24d8eaaa4dadd9904bdd155f258c5db0851df1b6d432544d6c7bd888af2083164d81d4ab0eb7e4fd89583fb483bcea35b61f73909f8910f8d832ceee29311ba7465a6d66c7d8c764c0265e64d03baed6a8930ec0d9cb23179a7a7908feda8b7afa62c7bc9a747d950fde90af08112dc6bb7e2d12a6323865c1f5439c245d5f57aff98efc837c5713ab8b4e0bed9d28d5a4999abbb9a8340e7eb475793c73e77abdc927873fe3b8feb4e9754197d702cfd68d35f7a47baa48f41303f94ae6a4b9df4bb4b5386de8cd471448c66c12a49c2d85fad03c1a0e670285be26f9e50a4223ad25ccef3d4957037f92b8f2ff8caec9b3674bbd07980505e6e69e81ecdb7f5b0bcba76dfa26a49b0c9f9a8ff05bbbe22d9efa082a9251c856a54107d70fa3e22d185c39751e5e948204803b77b72b530cbbeb7c8971329d46789b30ca123f7c58dbc34275ce320edd3ab2435968195a68930e22c85916d305a5fd6e2245619d8bc45ccdc06a12777d0ecd6c7cb07c3db9ca4ecc12c15c69af7522c66af162c0a00349a08b00b19117267058094f677cbf06c18fd2a65ff9d923ede1934b64cf42139184b03084a46abe039cb536cad81bfc82f7c6b18e5b89a0012a3d5051367914fd4b5ce6423a4b5db1a2aa95fc6b763b2abd5d01f945ce8ace95d9ffc34ea84c155b4817e07f1be7a7bace7d17426d891f2500fb4c9810b7fca89ceafa55fd7a290fcb61c537d6b63fbdfe724e4cbb55914e55e2f486dffe8c860da5210cffa531ecc0a66e8f2e9dae9752829b593cf6716e989922e8d6841e57f924e1643950d4712c5c84b73a97beb82f9b3b3fb3463c44ff747ea85eee02d96302ef1a2f7764bc0bb1358f6bc1ab423eb9f8b0694f272f899217c80fe983dac55a7dd2d6482a67872414d3f7c3c9356b6d51121668f6a491bbd46c9093b77ef4734ae62664f785a3112a8038880c439c2a3f8495cf512e1c652391f70a2f3baa2d4f91ed2329ab24e442e1568936f327ca5123a5074fa4a25f64d865b461c9f6c99d1d4b8ae5b5e7c933dc6d14018ce537c1e800b62c35e917900854fb15733197bb5494a7f2ad25f527858d30ba9b95c748d374a4f87f583d84ac76c0e0f16c570f06e141823b1f5ae6993726c48b5d777108349c5ea95ff0c9bd469b6f7ea6402b03ef5929ac82c009e8a908d721830060581db756b5347bb0b60c13ae8aae34113a0d712e6051c7ecf07910304947d0e7f8cd6720f3183031dffbac4178ceb21cf0f34b84f94e212c81b4251c81b70f7aa20a0fd49d5cb6b05bb41f26c7ade4af722303d945998e8b1656ff1cc40afbc4a9ae49f142f5660225f3a79852b2baa6c14c3c727f8678c03ce650924c053b0eb5d1eb6d24220310a53d9e437893e72a283a38fc64970da8f97193a52e950cd814aa5caf761899f8c0ca8c4ca367320343dde441a1901a367952f91fd2b3212c6c655ccfc8c7289f609f513640df65a2dea38eec928756e5873b3a5eb458d2547448bb861c6235b04f24b33aba9e7c2c975c459d494bb8f827d213e488678cdfb4ba0b899151853112fa57bdefb9b1ee88c55ab11d33dc625b963cbd54fb8c00bf24c5cc0495878514cae49be5bccd9e52029908ad6fa30bbd9f081ca302322b66ea31e9f327038be0000866526c02761528ceddf23132f2df8de383899c9502ad1cd2396659a4219c22bcb1ba4394b5fb281a1d60b1da52781bf3d7186be91f914a90ec08bbf56266779097f47deff810ef8d5455f79936e254d227681902b5ee112c1e5243dfcbf2afe897b8c6b328b56b619fa9655bec9a8897cd3e4a6152be91bdabdd145fc3e2d81994c90beb796de5f13560b70d0883d132c6dc4a84a277d3873291cfc34e28cb427148d401c454bdd941faa86d0c1359732cce44b647091b8d10841870371b3cd065c6a93bef9b79a74a73ffd66ddd6389e79811d124d2937654b57fa1e633d96477bee2d750c0fdb0860651448dc6ff4d53b217ce05aa777889d2bf01ad86db3dd213ed7945b0997a977095209603217dc2228ee2bcb171cc532f54242b0f9ceecf7d7e3aa5dad3e59b514783dafa229b4f2e888fdbf210a4e205aed213e76dc0cd5676acd940e7deb65cdc11ae162a2236a15faafc0d4d6b1a38accf11c57b2824f5f5521f615184582deb9b170796b116b6c3bbed9a9535e0105c9a3ca414c82908dbb108d59022a8bc53d0a5905e3ba88f1a29d9388446324050bf11478776b57eb999e3195b9820482844c5518d6a2c52c3e77ddbfb06d660c55f7cecc458f453beede28593f3dc27d06ac5a6d5a46b4501a25b610bd61e3330f3039a5a4cc4df960797f1cde7e97cddc96568b44e1e44e7b7c9a10e82bc16ef1d5e9159ab41116e8000aad1d54f3daaebcb7d1885ed72107edaf4f0c212a7ac48b11030962ddc912b67b0ee61c6135f8f9927c0015ab07b4bc2f0291b7b2dcf4e53385dad327de55354a4229e351fdacabfa48dcc01bd4385709ad0fff6b3c7d402964e30cb4f44614968b14172e84256ec879c5a1d8c951245577f4a2268744be5837d0be9e56fb28692f533a640ab20ed25bcbe58a8826043472bb09c03db411f9b2c2b911f8d7e52bcdd0e4796019cabc1834a92550b1ababf5018118a65e7755d6cd01a8ac0fcee97db4b5ab51f3fe9e77f1c5b2010fb19c79509120e48b8f87760e2d13462058d26ec31e8887349121ad2464ea898850ce3006813feb171ef1be7bc4e0f3557c2f52d84ef42ca34898bb5e45d044760f07aab2884c5683088042628725d367d40612a726cc299b07dfc0bacff8529920b5d834728c241b7351ab52eac0d6ca50c2f846634a355db736d43c47ccdc0f2d5df71360c4b29a2802a2914f77b526c168a387690d11e5d69428e211d3a17e998e9a03eaa18d81948fc9a4ae043eee6c09af571fa7e4db780ac733b6299447ece759c381441b06cd4cd93b39398f8265a726378ebc9d8cd1c22ba0d23fed3884060f4e933477fd6f01a95a4f0662fd4eda6322e894f4abd288556ba7acf3745a1634c3a3b09c7762c66f778aacb52450dd8689d0dee2862aa8b80721686a1eb751676ed37dda3f975f9476eaf98eea4e8b356cea6b04e31ffcf671b1e84e6ce771b2565bace673e34a8f1b0df804183c7308d085a3bdc04742d831ba626f4f234ec3caf8b366f5996c5a5fe81fb1d2290687f3d1c03356c9078f89ee04ed4c6942bf1fd918b9fe946a079b99e8024770e7a46179f23fcbd49524de9cbf93defe7078baaeefa25fd94e8ba8c5fc726e95fee006438869d049a31896df56a107d7fe93d75f9083826318d887ed869274e9a4bfd90e72d2ed84cd14eec74e00a16a4e2a03fa0389a9e5d97fc8964a979333133d42138dfdddb5596e6353e66d65e85526d17b26ce9bc9d4a34cd5611d81c2b1e478bd789642b11cfe4f7bf587c9af72357a56d340b740975077505748d720e4ba3180f70e435da7283af66a58a5db44b4529c101ff6fe57165d397872349c95d31b7612b83e0926cfb9e53dde83f0717fb79c2dafafc1b0b18978bf4738c97ae682821406aa67128344475c24b52799257e3b11b6af98ae969a0880e203967e78bd3bf6baf7008c23d36db5dfbf0ccc08836597a6a3b8d219929420fdc598d879978f74074bc6f3bd2281ec1a20b2c37452a0af35f3be6443dfd44092b82ae5e5f8b2f97a413619b50ebad8e6e91468b82f9a6521bc48704b780bee9e62f93a6224c9bbb263f5e7fd15fd75fb756aaa44a5ea4778ec86908e70a750874067589726e4ba33c00fff8cb502f57d272a014c479deb30a2663712d4f234aa5ee7a97fef26da2dcca0410e03274d8333819fa1b755e9023345db3547920e26928aae24bfb07f143d33fa6f20523dea1252d62f57227be0f0590c4c3726a3b1385c16260a178fa0382ef9632f3e13ca441e67ebc0a69d77c5039bbf242e7f705e4c4355df37ba83c75efd56399255794556486759a85ba45f2821fff09c957906dc6190e301b922b231ae47b02cc6d894ee45822286c81ead185dbf01eca4e9108ddb5376b876e388e86709ddfc98043b73e93412e6057954613cb33ac43c079f74ad9e32ac1949cf585f188eefe45df084051e1acbc5aa44ac8c025f12370dfa50f59e3f5f97394100ac34dc4d31b304d0e77124e414132a4d6272185504b9527a1678603196869f4cf88fddb4d8631741b9e57e047df4587a3272dcf7a8a26691570df4adce214214b78589f9069c143e1ae154566c55d21fde0087d3d7a43fbd240972c198389ca329c7042e5816bcbe7a4cc3f5efdd304ab16e2be1303c7e461d00f5e4ba282af0ab601da9c2390dbbbaff4241195a81af9b8d370185732708ee9bf69f1ecc7ee718fc1dfb5a54b09160958001bb67fec92b4ea6d79b7c38c4a769cd828f71e286364022a5111b1c1668e3409570c4021419d64b67046b68823d37a8ac2be88c3e632ca4822c9991bb8b5420a0125a2b1ded56ba5e25eef3dc257e9a9847de0e3ef9def0ac7177ae2881c4c73793d97976c9d814998bc31a458e52fd177e90cc9b37a1de55d170cfc8d74b65037202af8b0c5b6f14beca99bb4a733200eb7c6636178386e8c56ef0c9f4fe761686860654fc5fdcb6c5f80683c914103e8555ec9bf1c1ade69b0a2f8f941772817ea698dec6808f9b6f423c40913f6893c67f535be96844af66cc85eb7eaeb172da19c67019d34bf221d8123f4dc9d8e444fb35f27f81cae8c42de928611e4d3efe59ed66e5a629b90ca82f3937820217e195e528a1a4931cafbba14fdb33f2cd9a6fa4f21152f6e950e71c72121925d380bd68654fe7340831388ce42785668a9851b6397333951a56c6134b247d10a6949d993fd5a32d3251affcf6ee3b9ace42cb99f16e1fd36b0ace7147ee72872cb2e5f9de6735253216bed31948320d8ad71e9459f84f4ae190e843d55b656742b8a8411e51de48dbf653bb6bac26b51d9ead39ffc5f9f25338d72ae06fe92c32e7ec60163c2c755016d971a77390f55885888bdd90b1d22b263e74db1ab5a38cd3708b43c34d8c315a1e75f626b5cf471f42302f2adfa474b55f612d56692034ef34d94865e51c5a7bf33d0c1c6b1e50f59d987511033c37d740c12868832522f67c8da646e943cbff91e0963492425ef20485c1ad9fd89280cc1c01f73adcaa053c5f0b2c929ce031d39938db1a6ef4f90f15ef031fdb1cfd34959be47e49fb35eb5db368ef95d06f88c0b6cb49de57ec816f8c79ee2985c9d90360e2b1c3f5d4402cbd7cdff8e3edd49e74a9592ac64e7c59bb8716b6a421290cf112e1d210191d4e5dc3f48e8ed3e5b675024bded2256e0226f28183c5c609b80e9daef020191870022d4a59f05b28e85c6db8103dda0b47e6c89bc8c80a85243b5029348c216f4ca5b70aa40f2a1cb89c28f24c226857e10498653fca07345a437c696b2ab4f9f3bbcc64fb185a7704ed951c6eab53651c2cb56eecddf07401706d6a56fa4d33dfe472f973680f97aece243b6d9ae7aa597bd0f658f3de59facedcec95d186eaf6599d9a6a4c9fc489bf2204e14012ebd4da1857277850c9df8216acc1171845f57bd174556bd429bba9f2c561e682d7fc0002581ae467dd2f2d23e79074c0aa37305a068345d5b5e94f08b52d63c963cd1524af1ded2eab84d8ce09fa2100df639800fd1cd6d7385ad2fc4c6383cd91830e051e3595e402ec4251b32ca88ef1081d3d33b9a05e436aff594dabf60206d652b8952bec1637a9eafbbd4f399be3d17355e05e402daba5c082c27f28438d2865d014ffd712ea10e6b14ca9976ba411ad775119ac0466487d0150a32976b200c8ba7a1daf797c517cc4bbbb955b3084fbb4feb3104b02b7531d40bbfc17a45d0f5daf2bc189d56e074980ec9415e48c15e2d55e8806ab5071ca105caea9681cda0412f045d85208832fd96ed2eed659c06c3e05fb99c1e7c47451df9dceb44dace46e87ef2c85def577b44ebc0e2e9c00c14c7f1e58ac18589fc01398d7dec90a44d638e979a988ffc69220a63a025d1d56c82b7a8776702af45fc87ec133ad8811ad48da9cf2063936c852a41db5c5dfa17c70d2c79cb712be1832fa24df8d61573653bcb8b27c7f98cf7eff1c8cf64e27daf63ddaef730f519a89e38ad82e0406115656601d1b9860b4da578240ccbfc9af90be4c1c21e81ac7abe4382a481db87875becd76258627da4094e089be98322622189cbac895b0cc83f6e9ec3f7d6d551e1386098f573f6007522c171eed0d778af655bb06d56402f76fd442099b2328a11b3c85f57da85d12686bdbab23de9a01dfb06b8e0d9d377f4b52edf1abb7a5fa46f5c925dad0e11cb076207860418fa999ad0dc252837cb89472011650055ba3b7a28169e55a8636b2e51f898504f04360e181548f522fe8c5be82c3f4f82280d4e03040ea8b8f369d792966508071079a25aaa178887872be8a0e0689ca81c77af08483e054cb20dad4362c87bc6f9c618364ba724be6a2c6d06d4ba672058d6d9a82ded0e289accea1a9e6ef11fb5cb3256c2ad0378fa20fadc6e0603265119251131cc82ea1f6f741448b4956bc651c405467cccaccb22aefacf8295e7cd320a6dc703c31bb815bcf4bed16a9cec9500f55bd5abd4cdbb0c90acaddbeeb6cad5065ce0e86b51f676e656e9d525bebd4c15f883656d5ec0cc19f94bfcd99497ccd5b4989c560297c06d8e8126893f74a0beeacb2ca318216c8fc5ddf54dc1cbf1eab8c4d4291c8d790c4fb7a436a9b0d66a0d7e45bc415bdf1a69afba2cbe90c1656c4b923109b1afb817e3254d026a30320015b4305e02d5c59123c6aee9a2c5b3ac22a098f8d5554a63dd0f66b1f0c2d1e18d0cb7e7f13ea63fb6411d620f0c57adfc27021ae4bdc725fb451f24e0fed2f2110895ab82383d8a5bef5066af6e6f94604462d8fd7a22c4b6f2aab7698779df4fe7371485fe6f349af45051d2124fc229410cd2b2dd09e9cc61d8113406b168ff668c075bbc723684b9bba2082e614f47d2c612dd5b1fcd24dc4e8ac012be8c11f882802fdde43348531252cdc851150ce8a9cdd383f0470c1520c747a670bf9975586a62e52b1f1780a12c02cabdf505631791d67b118d9388d563c5903dfb28c6c1a4a3652685df2e107cd9ce5951edb28b3aa9fe4746d2f5617a19bafd381f649ec3220c377589dde9e4c4a4f6b349c0785f94936e691a47248affa324dc1d1aa7ef4b02f402c004149a07810a210d45888c0040dd44fa9cf8b9b3efe7e2b8a139ba09f3246bda76a75c7f6805b261a076f01fe202351a86fc46242af057b3c3bed2141cc818ae1d3681b4c0a3ac320aa1521535873dda87ba37a6db2b01c3524385cc383bbb75cffb5b06c7a093c7d6ba2bcc422c0561ef361910d523dbb407509a185eff53d1dfd995973b015c50003de5b2bf343ef6d63e2ef1cd57a6b2a549e942bd8ea48056face2f92861f2e47060117aea7890ee93ca5416152b959ef6eff1b4dc4cb56133fbe3dba959bd412b64398f6ed9aa6dbbcc5e76cdcd72e457e4fd3a8047767bd70418a2d17d3ece5bd7b26059ce47ea54916e9c0ec7813415e38c7657e9c47fd3a500d84d399371ee8e9e2d0f9463bc95f42f528ca978d73a78f15022f3f741782525b36776b46bdcb7ac3f476fea9cfd839957eee388d5e6d898a19b5d45d770cc9fde314040eece738a6b7a5cce28cb6fa10f6e373316c798fb6d7cecec8a2ba7a78be7c425066a619a3e749359be0973ab491ae30748051a5ab0926bc0f31068d7035e580d89d45d7973b2be51470ecf385dfa5ff1db0fa9d3473c80d33fd88e4e5b72a7dd01e6d432804dd9f06c3d38874805f7e6fefa87c9688a3425497f7b7099b8c5b3bba8345f8ba93fa697b121b7033ff062448747b5039d28d8d5e678690b58fb53264664543ba93fedcb1ceb12163e7c8afd1d0c6fc645fd9059e4e673d6ce6dc35337873be8cd1d8f0fa97ba012a61dd00fbdee65f5f2a9252eca77b191d4e89094ba285440add8b22439b3d19d35baf6bbfa35d9096005c2e014032c1c6fbc8fde43323c92ff79d61384a2ad1729ac02d2f32d704550813649513151c91bd907babf5733a7f89a1feb2acb2a5877b28b65b6b4442faf565474f5b0076251a2905a4cc2829d149b59b836c8adb7f4e85568a0e1552bbe55426de448162de43bff50e0e40f3cdafc531a8c81f928969efd73d0a7571cd3e993237b31dd1a365892989072e06cf9a14f83deb40cd6ecd42fa2e18a606034b7faf0b36403bfa0fb6c558cef1bce2553971450fc67620d7e6663ba2d05d528afea693bf278c7ca0de7fea48c7d751df73a9b84a9d9ec3c6a59bfd50af099f24f0dbb690f93e066591fb0125c565dd51cae5568ba91017b0ff5574a088a538d1a844702e8166ffb7a251192a163420eb5712343c7994fe75d8468ccf11dc6c40f0779b884e0d41ae4976328ffe741d299afed940011b1217b2ee46a02e62360d9e93075e8678c90244cfccc94067a497bac21ba91ccf4633e84234625bb1b33943e332a396cfa1bda93f1a640e376bb20847bc171e2f153fa37ca5bf13f1effa2a3bfc11b90720808eae37caa80e7a02b42a5b60035e32f0684431a0584423b0a4c1101a84a3bc13f50fdce7366af18d9268526fa70395c988d02f134fbd0421ffcc208787b4741dc4aff87ba8e570aaa4bbdcf9a5bfe6c4317bae8e0c9426686f54066196acffe10e2e581c0bc94fe25d9aa0166365f5fffdcb06b8523d42b40c92abe383e37b349c1085480e0a893418963cc9515073442ae0188e622088a34b51ee83374301034ad71b19daf775a2f75ea1a2187283bbd4e54a19820200bd8c858005ad1d23d077db0f99e8e4b6a6e8fcabc51d37e731505de5538eb9fe80fbbbefc95b62d0a2ced28b07580a9e9b538daee49016bcc7f5db5fb1c23bfe356dd65bdc97098e9254a0137d29e7b4b4c7c0ecf5e0b52914326a619902009dbff3f8a89677f5d2daff991bd728e69c83386acae8331387c7057f81e62d08c5f4238eb424a5a4a75e1e3c62507373248e29e68242d073417a6f554820be6a8797af6d427509ba223b40547a677a13f114c45036273f156e245041c96001b6016f5d48c6209c0fc2dfe0620c36e93af1a1841a4a099a13aeb746359bdc35ab05a1e4b7b305e2bb81d890cb3d539a2b09a220fe29f4f5536a8404387fa8adcff591f06293b94ddf237f97c70fca7ec29d5762bccb58d987c2e1c53168e159179fb1e243c3308a0f66b25ad0e67b6d372539a33864c30bb423f598f0c45800dae3e09d1a3f2b383022dcba0653ac76159ac94cb11e467820f79361c9e2e4bb8a3090f67b42c0bbd7bee32eb9e15239f0dc7924c439aa55d92c880a2b1a6aae959c35ecd48d5921b3d0539e08cbe33321b303f36626f0f0a4e32dd3f2e289b0b53d76b83c878149b7648180d28d629f2d16d22d89c4eb11c6a5b4e89c22ae68934ae48bf674f63ae52d2b3ba1e6adaf7f291c831c560f9ae1fc05bd5ca082940905b4f10f311dbf1415a328eba15d06d8f934d0440c6515b1ccead27fb65c23b9002d2335ef5201532726647638c8454f954fca51040fd46f3b0dd1e263509a89520ea85608c388d5265814ea855c47d0da0328720d029679e2da9a8d99f713cf7fbe2282fbe598dd14105ea3a642f96b862841ed2f2072eec20c88358197015ac8e04814c520c1233936d420ad2454f55561c7f82536a59b6586629f73b7ffa4f1d9bf99219a574aa3c168447d0ea379e640beda15abd27d5980654058850eb9980d468308cd34a33a50bdab45a09ea8a4320fca20bab1bdbcef0833f3279f12a992dc6221c457d159d1de70d723620138bc9db11c3298c11641640827d73840c637b11024690b469bc11708829bcc738a5cc1d475e97885310b6446ef0c591309060e4a6ad0a5fec41a3b008a28e43e2b6bb68bf0a2ca8707021cbf80430913a0c82c94f674b722ef8b77b86b1fa1de1422a9ed428a24f7d6ff2c379e91cc4850b199503af626b3677bc605b03c5f59d46cb593bcb6eff488401b3af16e509eaca92339e1c5775bd7b0184279b9dc802213a9129af11d5fd7b1a6d393bfa30226ef74ae21e8a29d92e4b8a5e22371088bbc306f98c54b60c4ce672d3dae017700d1a8a63b5188630a9161b7ef94d9caf8cc50e281b36280564ceb11ac459e25b83690486e9f5249aee42d769fa609c1f3881303922113d5d0dc191ba56f64ee394a3dda1020b0d9443a78274d6baa3d8111bd25893183bd830819d85cc0bb99bd307cfa15441764333d8490fa4d40da060e07309d8a07a51219f6c608811bc3e6b7346073e0644c121da78e114715a662028f8792d880b168afa125cd3b376a2bee189e5e27b7eb8c828f62ff09be889908a5a0fb5d2bcecfd6900d20e8e8ee34e5db78ec828d6f924539f898c7d83e33eaff2080aa747e2b618f9da6d8b170fb033ea20b83d52636383a0fbf27eb8ca3af825b66dfab248fc9cf4f01b9f8c7d862a9c41be1cc229c5c0c14b036aa543aa575bf12897b1201b72b61d7984b2a66d30dcc13191ec86cafdbac7c298e9ee96d1a6f30bd1e47c3d21bab70b47aa12c5d732d356d1753b43a3da4158efca03a63efc20962b28096e311b482bd764bbb4fb4675b8e963a22d0fe54840b050314ecbd364b89d0a62b686c18de2c85841dd78ad8c81e5b14487ebb6e564da5493d874c1b9d62c83ca05376d5f6923a7be0a4b4bd7db4257c1bec043f5353e3db82965f74e0d24e7e6cad48b5ef90fcb2fd09d7a04b9a544401746e902cefeea799181bb451471fb61e383d6f087c0994575c2a78b705dbfbe4d80930198c406898fa6038e492f09f3201bc6ef7ea6afb7ce9ad179b52861878120c8ebfe000eac289544be687e0ab343071a85bfd4c29c446029a1fde2450f614ca3037d0155b163dbc30138a8eac415188b7749ed62e7d24084e5f08881b78fc7cb17beb5ee3f1d90b633ec684fdc3b22fb786f15deae622ffd569b2a73b31e1b5941109e63c58a43648b8d577b51e8e4c69a7d92e7e6feeb3be88882b2fc354114473963c5213a12d68723c3bc0ed865c6f06bc42ddc144b0cf7fe0dedf09a619cbbe452741f19416cf1351d824a4b69dc9adac028215dc189e09f25211b9752e6f6e03c4b4ab16bbec79cfd961bf2d646c91ae9adee31e5a584df26478106dffc10036d92eb36103c596a54318f66018a89939effbb1e535b56806ffff2c84191cf33fc65982f42723feb1a36aba44014a9458a926fb656d381a47c2a5a61ad342b0b317f92ea87f443e255f704150f0709b0892f1817719f132ea0b60bd8ea52a7a80d8fa2ad63c01703e9a1614362d8540e24f921b8697cd8835e04b435aa5b9b73e1f33c678ec05d5934d8bb751247e0641fa93af2697213af7735591986fd762523b82ba7046f69a506de6fae5e7ed39a7128a07bf4eaf6c1db62e688ac9c281d7d8b429b87a32662c838046819ba260335d27c44a89cc0dc69aec73ab410f2792a9209249344c937185d1c81bf84e88f799e4922e09c0c927fa2ee9d92eab0ad7e73ef285f84d0d50f4c0730e0295ed83f1a6e80f27c303bb15f9432df792725d1015597a2036c9270a96572197bc665c65a9fbbcea34b272b5d64db0e34ecc0ff88418356b680720781cb328e3e04482d0113e440e5c129c6505ececa444b62f7d68c87197d6aeacb932ca769f242088012da593d37cf38d139bb0c9b0517ce98ea92174ca9edfac849263857d4a613784d63f65aa91814b9f2b70d1d0c1547a7eee0b315a96342c36ae406370ed9ffb3194c5259f89e5d5301b5421f250e74a35c462b7ba89e5a1b718cb1c2db432d614b1ea359cc158fca697b37f7fb0c3a7b4f1702bb3465a3f01fcce509d7d2c08ea7af4fc115ca00bc655d2b3f94f910b08cd2be7ab078bdf57cf38301e9b113afb0fc22d5460c37549f609fcdb73f943e86ef184c25a45ef142f024dd7d5ff39e39141d046a9842ead83c59559ea662e08dc8193b326d0adbd4b1f84904ea7a02cf74f4b1991ab717ec0dc614c0a5d626e3cb5535d3a973916fd53c3d2d1fe81c0e2c93c2d42c5a00fd25f78979c7ad28d06d5e5c866144a30e34a2eb68e8535397cf1288e86480281784aaea5d7e19fc9716a701c605dad7ddea566bfd89984104560a326a65dcbf67f4d00afb362c223a020358dfe3f5cd075b96d6fa01c177ee00973045d4307b4284221a147d0d2845745c72696b7a758f3c30258d0eb8a61cb09316b8da23be77983a409d00beead4567ef1825f899c337b60acd97b022169181d27ab925687ce41669a4d7622dd1800c3f8ffec59e8a17adf6b4197f809f17bafd30fd880d6522b05e4d7879f4740d68d1089bea99f512d8a53396c44de897b8132a3c476cd879aed294b7d73535833d60bdccbab5ed115e0a32bde0c9273890f5b1f803375e0a46346c32f9a237599b43bc37ed857d43c71a41527aba251ac9d3f2bda9a6731fada976ba45509def4f1dbf9756ead6c04eb19d9e4a234d59a063333c64b5c61295c88c5fef3270d093a4f9f746bf4ec61b0abaeb0fa04b25a0fb0f450e8dd3878185733ad7a479762e1c57196407fb940a4bd94ef0ab0a0ce2377e3e63c060686f5d18dab0859b862c1a6a3bce08fca4b097cf061ebbb63dda8b55ec18609e18dd0c14c409b6a11942e832bfbb2be8bf941b8845bf9cd17367970bcf5aae9952f18f994e70cea9a777cb06ce44d3dce30c0edaf2a904dbc424b8d73aa26cc1df4a34a53a2926d96650a11f24ca508f12523a788efc2baeb5bdea13524a85f22adb5ba9069b1d42aae6b5a57f0fee559d3756054993343caedafc2ff88a4b810bfc30a7e6895bfce9d2bf37250b62858b9d5242de3ac7b533dd556d9adcc239dc65683284d42040e3d0d405fc115d41f33c11808ed71336d6855dab1c821ea6976cb51a134fe73ecb400db74750eabb2811fbbcf97733f7676a3b112dfd7baa6c5229e20b8e7391cd08891b0ed89ecd608a10959df8039b9f3589b57669aecd0d1a8ca684c862aa821e029b60ee3291d29ab3b6a7040ad66cb21e0126ec149da88cbd5f40e6196ea95d1f3db4893653e06bdc95c4cedca97e950546c0f5fe24589a8ad005a4bcc5ed3cba7c34d12e72329893edb877547538c29e19c4c8f273d4f75aea879491a6318939a0c54630ad4dc20ec7bc0b5099866953b2b321839078d80533294a235df7c0415f4c54b13f2e6bc1738bdc13da9159bf52e0c39f236ce317b36fbe68b75a825329400428db77aee5e13471fbe96be367fecc469e258acdbf715b83fffbf0be8ef4b7e5b8c4a8bdbdd0b3b163b7df320aa19231d6d7c7164f3f9b2f40c040d249af9f17b9930931db4b0d7e35a2684eccfaa3b3a4506fbaae2607f2adfaa3a2d78be27f2cf65ef58ae4193f8414c57d4a0500c7badceec257270987b3b99b64a769e2caa7b94c49df182ede2a9ae13e2148d54ac24850a57de831cb80f1821c63d0156c3e0239f56d93ef324a056f34a4aaf8e2cbf206fb4ba4cd5c3246b6f4f0cdcfaf57c62322b6cf10033c786df32667dae91f9af74190b81b8daf8c8667b9f94bc86b88f653bffc49dd65ff6fd4ff102795d1cb2e29c15252787025b6ee9c07aa826c6ec68d6cead4b63277fa0a860fb8990c024d58a7f0a08f98fbf9092cee4f39b23305c3fbe04f6a0cca74aac57039b5826036839e6d9f60dc9d5f24f363186d3691b812f0965a11a80d0fe86c6de7db4bab0795cc15be6af59844520a4b9e90bcef8d77e46e2e9b3e2630c1ab23a0695521498d2583770228db2657e4372f90e41515fc5b6156667a12296f0fa37e289701340a3fae498cef3c94339227167e94f7be75a79267de288b8195a7447724a52f5ba9e2376827fe12cfb207452660063f28898d0597436cf8930ad052d2bd6088de7e02f324ff937a0157a89babc9914e23121dd9cc04234b464e18268da00abf7f5a79114632e291ebb945d7416ab859ce6b2592a90a5ea67df9dcac6e2b2170d6ed8d0ecec9021ce849d8f101cf82e7789f3356d33a8dbe016836c386c095de388aa232f45375ef60d6324627d97a67cbbe06c2cf4c68789b35376eed57c6b676f6c7a0d0dbf86a6596341dc8a05200d92f4b20d20d9201f75c46095083987da48bad2cbd67daaf16d12bfb0693534713938b3c78ae63921b0f658b1689190b96c5a7820b6318e5540641d7d6a0991c5f03b11da9551cf6103e89108cf72273f2edfef805eaff7e3eaa9ce976441dccd61aa4c31e12c2c8b019bad53f44221b15a2603adb9293a9cc28425093682541ca5caee98cd0f071931306b6ab735f2882cf4bd96a950f648ea5a83087fed8aa96fc936683b31607892dad9b5566321a49ab4f5d58e6d2344e8bcccae6d570c0dc063dbb1dbbdba7b23579745afa394426532ce09f78c5a088ae404747f0088b5ecb5a7402f12fb7011f2cfcfc5c66417225844616f201a2d444accadc4f1452dd61ee3e9ecedb596205aaf0063db92c8d7abbf75dba9c970d6aab155541d49dc2d1693a2a4c7d85e25ff1ccaf4c516434f9399e8bd672958601271f89d899e505c18435cdf1ddd051ad65081cb0e3996d11c90d3e829958ea0e6cde7139fd032d62d48e79eb4a6b5a967c35a8659c61ec7cf6603cb437b03e1851c9591a77b4c3231679269da31b450853a79e7433d04885e79e5cbf278085ffac765342b8b19f58084e8cfc4352193d88206b449ae1316fa01a55faa52f83127dcedcd66eb393519c912e463710ad0e4d16084ee1ab1fc9ed7a29b98a99a16e1cfc87262c51cb0e11e6a10405354a2d8e42ac442ad89550cbdcfbf8a5a7730f2a1ac266e5838f8b2533aec2d2076dbe50e9a6734a2d980e62bc06299f47ad7225ee828cd45eda5bc76390d49c1cf90080196385bfc24113526039dce4ab19f0c8f7869238cc9fa612113510af5555815e65f1759f8d76e167caedc3a21a557fe6809ce289887fe29730a06c0c6ffcbbd58183ee1974d8af9d82020d8c1e51adf60c85196c8b1658b8e36df74a7028ccae4a69d7545b17dcbb608043361a6ab36ac66c2569b94e8e3527b1195133bab301e2fa325dc1061c702cd193a077cef43065f988b9d4c1421652d4773cd3e078567339975c6290803c28bd8c7db33dcf8ff385efbf995c5d861c3ed63425d7d8f8b42024ac5e863ca89977cc0b698d12e4e0c4e6958cde34b90cfd47827e7093fdc0e311c0bcbbdaf4549e30be6031fb8e8ffc87258964a007d5420004885befc69fcd784dc98a89e83d264a3cfd6951e8e42c5df9bb3c93bf04896a77a305ad2b0690f80d8d9d238b727e885ae248a547d39f695413fdf8bde6ed0e23ff0221f08cb0f64300e783b3151856a532fdeb94a28922ec92d1f412a10928eecc00c7d694cf5b620b4d26267d607ae41a6766c05c81e64e079f93230f5ae810670cd7305e84f6dd83d4248cf3ca7209d88a0ed213b1fff2cfaa24fb542fe90b1d0cd8066f25bc95c926d065b98262bb794a9d10bde28a1c5798bb4eff42a7cfe2cb09a9680ee1fff82caacd91ae287781f0178009a9972998bdbd497418f50e845019cb31303df1088d90405589e17037e5e3283c18449d18e301e230a417324d77266ebadfa8cb0aadcce53fbb7c77f6a39fe66f06a59f7fd3a44c7e2675f43ba9e6aa228146b8c2552c9874a9740f9d4f9a1cc73d66a8473a5d667abc5a4950e4689f7a1f7fb086d695f1d2aa57740906e5f5e5e05f34ab15a86203e29ec9510d21a073e649eaf62b7b3e54281d9d2f96a0a1231c45218e57e0c44cc4ae8fbd7635dcab3841146dca5b4919d88883f831c9d1db1b32859ec706d66036775307e8105fb90bc0042efc33182b46ed9e13e7c407c1754232686dc096b58d7e720d87c91caa955121d55b00574ebc2f708e1c5bc432d6f3ab0c918262d239c5b044fea15c5f6ef448a879ab20ef72788b82b0a2390cd55925067877ea42ead10465a16bac43ccbfab6089c41fe303c4cb6b576ba01a26a3a405cf91f0904e3e75a905f214c37cfb209f12765941122e1407c7aa06df2d4fee9bcaf30f8b3c8dde21b80ab0f5890dfe23e627bfb9ec455edc3a7747e524445fb991286427a8230be15a760cb935a9b0ae98f43e3b994f9577c8e82f4b9391725c325ec6f623d719b098dfd0a5a600c2a7954171e3d1b9bc0abd715f7df4a5617c75917258d8f13f7f4e06fad69e12dde467abc99b2e3649b15fa0c1cdaa1c50ba46a1137922751b8c3caab0f1124a6a258aef99fea88c8dfaa193e239f10c115d67310065868e1c9f30062b341a8db86e49c3b61f3f93952559a43658485534b7ab776b794a47f76108acc778f90731b99a57e329f1256b1adcda604acc78ad0cd72296077342422d8641ac4a4a781786a4aaa02c5aa4996b151d9e268c43a35ec8b7568c4aa1911630428b89ca6b7936ccee156a251ac81da2a8fd6e7c932d959463d12acb3451cbf1f3f4b203737f15a3719b5bcbdbf6d7fbb93599c156c7a1baf6e4ea0ffcfa8fc40837833d0ad8c33cf08e3326b0f96dcb1f7e3600e7a7393e5248571e5a445083865f4056b094a8318226c922ce4d7b4531ec13cd960113e99cdc99a432c064b4b86b4c1962c495c260ecbf8b03c9e7041e0e8b2c423449c3e0ffbb8792c2ac798ee5c4464d72be225c525384dbec19a2d337a0175e2e4e0fcb0bb64bfeca5472c201c383ff2095df700c1e86f89567075b03a9519cd355ee4d88c93c5475a6e1fae583260a1eac393733229c2954c7a0e09c362ab32c50884c4186db9d7a1c1af243b84cb5249baee8072103adcdc4048c658a787cf16e372c42b209a2afbb88058a763ada04ea70742bf8111678ba6e1da1465aa79ae83e3ab428d97d6645a5445e33423e04704ca019ca5fd3dce77ace28795e2a19395e64de5e46c0401185935f60a88a8e2f7416bbb412405b22fd704566a08961b37be8a360df20b3185ce039c46c8cb8e2b960d7f16d87274c35b181f98ad2aa8b1f401094bb662477d9806e19527ce2cb7dd2ca3607df7bfafba09d64c9075aeb7ff434ee9db1701596ec31d644b833bd951a039d75ca0c65faa861f6a7ac32bcac7a29373b721ba2c010acc555927654368e628783677153e903eb70320453f9f49aca47b3f652b96003c34504fc618409c328b5cdf0302e38df357c468717ac5c02082f1e8b0429368fcffc6f64f5cb85b6e93def8eab3f25250993c0674a86cc12b82aa6232d16087981c0e976ebfa1ad556c4e9d022db738886f282aca80f3f63d13365abf66cbb47283adc657425fd96a0c9de99a9b5757a9aa31460e0d473f446151411d200a7452996f0deead17bd269f4ca6d7d0f0e6afac23c9596a90f7b3b52f2cc065f4c59ae1b8ef5595be2eb9db7d436c49e82c72acde3a1443f9c43a701092269f69a8eb4915cb54db460e85818a01c13a8410ac3054369b5db075ebee5d1dc540052da99be1b5242f88ed663b6c5029e57482734c1982bf342ed8261a93e14beef760bab12bd650c8fc976628133fb3c90e19d299576db6288df82d1fad2e589aedb72db60ead966dff3ea2b3abd24819c5d8ad5f15757d5b4ea3b662dbc6ac4659c6acc3b658e28202864c8d6d33ee9d86ea73e00d0c53e487551ba5b45b28e4710e48b790d52eb87d6c55ecf45b71391c9aac14299f864617434a1a5658ac767182bbe63fda744aaa6790408326a4545c15c23206d84a0ffb2a349f9ddd193ee03b1f41222e1a85ccf89b7ae5973a8d642067f5e479dee7e9f9137c37ad04699f5c204805026256e8fc63156c236b106ca442bfcb6f13724f478f92c84238ff14e41549a628f5e9edc29375df4a0fc25b00c5bb4ec331185ade67c9d9859469778b841e878918aa64e57100022dade009da3ea5f934126ae116c92196110b8d4fdaad4f9973df9983894f21a6dff60cbb24a37ffe4eded25a88dcdcbf9b25e8cbb94ddb825266fd0972bd09077cac1192efa559a032abaab3e957031783fc6ba1e4976b07433e99ba85ddb065b9829b4c650b080403b63f801973596d454177875ba69c0fa4510de4810cc6c84565990361e984ab98690825408ebe037ae35db840163f4d59f411bf2f7db6954ce9b446f1ebb473aa6e6112726b0f2343888011b6369fa20a0249a97a42e61526086539106d75f56701e929059ed34da242bf40357acb89e734cee21fc892fd4a270b0d933a0ccd81000223f0602a5377b28183864ca99885e2462f8a231fa2b343eaffc6d4c9e70358005e06f27c6eeb919fa78caf9e00aca80ef623d9d4aa28caeed73878f8249024c748d055b76008f1d378963b35bebe343ca9cea7383ed8f53150226443857911c30df6d494804dd4d5b9e2a54218424c3d91cb359416213ea88762c6c487f098b13876b5717a58d9a26019a80a69850e9343a79feec9f879655b1bf2a651e4a2df2f23e840e6e12eb2fe6a95cbbce8792ea42025b643bac72e8b50b0663a4aeee6c52c53a3ec8f8e244905d088ee05e02adddd5c9d5128b629625ea96ea8d08c6444702b20d3179d531e89c7d03eb587a7c1e7949496ccb5b0472639e4e9fe2822e2798da7fa90f9b47399f9bc4a5c2f9b707db3513e59e32621aa2280a622298bf945c8681c5253dd8521a43606d28fd07d05c35f0c7d9e0c8a6c5ae7fbaf184ef154fada213ce5e4059413a9ddc98ea51e7bd6164b574dbf80b776e68fdf1d217d8fea295b7a9d2c19c6904ce246a20649ac0fc0a5d0c3569feb4f9dc917ae11fc66006c0a5fe82b66ec67935099c209ac290080cf274ce9727e3b37715143d3a8b3b5e059f2c6b0f5b35c8bcbde6a83f7b0712f0554c2dacd21b6453c1896309e50217e034ce3de1ba90a42c306dd75be6233503c46cb99b1eed7b44dda6bee76e36d3c19858d46aa3948d04bb8b03715a5c64bf4b33595f0799750f874ccd07cfb784f89917ec1c6a3a3a1887a59d47007fc8febd142922b3cd2b4176a0376951465e1272661ebd3f29b56b8c22f8f85ad7b9f0609316c4d4481fcdc715e72a534e7d8431d204a21981e4e9be034ba079c0d00bb565a43972cfd61842da70ada582c085311aa9960929b0f584f77953f3d4b237f0c00838a9fd774257c035329f4c53834d4d58c0dcdcc07c032007231c0422aa21b41d3da31725c2eaffec7745caf8f4e15c0d6e4200605789a13f521d417959babbc47267bcf992b42e5dc78c6ba541b4198e51c2201bbe777c4caa6140d7104551ca7ded351246068f671342a3b461ceafd64e5103897a1431d673a5492f7d386b4758e2872c733ae17f11d2d2ae48ff3c305e48c182f6847590972de5e679922bf0bd94adc51b8ffe01ef8ef9133d9b1247e1e28e7e773b34c51100583867126ca1942974dbca37c5fe34adb4739232a308d4d51ce366d9bf85b8f6229b65179aef259cf6bcd1340b353086f2bb01f1f345c95fbb30eb45db8adfcd0f169a17fc7952f3b388a0d6998efbae40b840e3c40445e41abb02dd1bb4f028f5f81117d8dda1ab4c244bd43e410d017f662d332bbcb81e2ecdcd978e5a1349393bb43fca7636d26d9c4c54dde01a5a01af8fe88e8432237c4d6f24ccfa3b33d2cd0f83203e556c20fae577ca2a077dba131f3cb6f60c880508e36247db8e8910b442880dd94427dc9881859b12fae9e400d4902cdfec5d752cdf492668839d207d6e0bc66c6c815c49b89d47dd057ba79f1f8a2af829fa4451f0b7d354b961d9df54860e5ca2b6a746dbd95180367530be2701ab7d1ce5a0d72c2aae33cb8a4bf34c473d25a43ad2f2d736a64609de4fa870d7a726213588f1dec90661f4ae7b77a51a18eaa304e9b06e1b6f1da5c21ecb815418b840abc70c97bff1c55c1e6336e5a4ef67a02dd6703a0bc7de54888300483352773b78765f0049c06e7b52ee7696e9a4ebf25c478391751947a2b556e5cb34ae23b3c53e90595d005338cc6cf0fe95093d3a28b914d0937162ed4f64c1c70c4d5a78a439fe2e6466d9b3587428c3b2851172276267bd65f0339f2221d256acde83d59bdc846a426ddf26acf4d7ec8b90d47dd8ca86c6e11380685a27a1662c2fd2b0296a9a3abff5952ff7c40b1fe3b3fd855dd38096f13005f7f49396bc8e26f19cdf383d0090409c3a1ba54d3294952e6056b75d49193a0d78ac59afb306894e4127bd521b4ea717e9431587686a18d135f0656d2fab5131b1cdb359adf83f9379641ed595759976a4c5e27e55473d057960df327542ac7b51615911556acee69aca182cddaad169c1bacc24b40b3d2955128535fb2362ebcd9f38f60b8ed7b851df66cf51a96dfde625e7b6d091087a7c8c921fd409d4d3cf4b48cb165567309899e3b4a7f8fc2440ca993160078b8732592290b64127a88a2e58a6167880106105f5e83a0077e85626c4bb48de80cb4a850984547b4835f8334eb680d17091a62d6d08ad4e259007199d27fec3a7ea966d930299c81261b1154eb9265e02d1e649a2d924c69f8c8197b1419c083249c1761e42fc7597cef4e4a729732d5884ec1ba4da38c836b0e80e3139adcd3b2b71e72c4b862b568f2607f0c4e30279302153d909472e4215ff288ea8a150199c2a448342a48b66644b98228fe2031fd6c8e650e676a8c6d9b7101decc2271bc3af704517b9644591a87149e6f9f0b1b2c60a12eeb34d379c4141a472439f4b8b004d42f764de70c64a9b8e4b8f390064f8706ee7672663a8c97b89eddc0efcc502690edfad03b7cda523d017c11b3980af2b8a6ecdbf7f1c0e5291a1fcaa1e2c30259df3505c0e399f2e887970395a7687c76ea269e7ca1aac65f3a53143a769f22f9beb65ebc58988a3c4eb4b5467539b041de32d94a8d2aaab0745b9d3050e832d6e90bf3265137ecb27dae718af38678a20e0183a913a728f6f50a0bf6aaa3a191c097880ce2c582b7a3ac8261e39ffadf8457359051738a35d282b17fb508af28fad17e2a6865678ce12a49f49c3d33b585c424576932851e64314ecb5f292a19c8ff8ea83deda2020d0cab0bf8d518c041ca1e18ed92aa18b1c931f5e7bde10435de1470c0334a66c433aad9c86e88c859263af9668dd475f122f16549d83b1e0596eef62ad5c6381bb5f282fb6a5acdcee9c2ac5aaa6c91010cd000ea7e2c1d46601acf011796c67669b5bbabd1755dd8adc335685263690c89e7abce34ad545da5af084520a2e36bc4a733139fce5082804180f88179a226c0d6c703d3feb17be596524a9952ed01b401a801821f2f6b6bf5fc689278a7f64c6be630b3da66d775b39a5a44ace0b25e1d24b31d2b794c704e567763bb0788f9360711aa0d12da51596f9e72354196caa898bf6e6a3ef6703591aaf8ec3cf5e8e6cea07678c8d128b15bf24254933b74ca363e62b06eac8e92981d09c17505b0db2cec8b63824f6cafcc2d2f2ca64b6f2c8cd02ec81068d08f4708489198160d74cf2f2f464d4b0f4fe7c70d1beb42eae0a7810c894d6647d1b9e74aa547e40f7b2974eab8a46c6b59512e34cc46566b841a18891d2249e3da9c57ba80c806f45e8cca98faa400698a7282b69e47337330e6c79591ac1eace7ddbc71745b14e193e9611c588f54ddeca1af46225c8fd892b9e85114d8900c81480a31adadc906af2ccbf97c327f603a70831513d56106ea415d11ca7ba6abc9d7c00cc9afe8ec0919f44989109546ce435c2c6ad2bb9a3ec98e88d9cd634b70931d2275766974414c62db75977e660432b2aa3622e72b151596412db94a8a325be3ba6ed29b81ed74e7ba4018501271900e93284ec95b5ff258e1d522dad75c129bdb2cfb48499476049b3b586e7853f728eb08c983909d0cd597ff9b62d21869999d58526a665df5e5198942e316c1da9ad71a31a2a907b90061d1142685d2254488d81e0cc97022f877052d48e9e90e3dbde4293207be1c4390b4013a55e9d0b83fca25bb01617b4e036eadef9916fcd987f281bea0f37b4de7fcde0872c18eda4b40f8025a4f4f07782a5fe9370d9eee5364f1685fe7e7692a50bedf4abc93bf8f86beff865fed49d25a096b75f3bd454598ae773dd365ba6a3ec8b3444ca0ef8d1633182eb242868b2a8da1df6ddcb646658521efdedbe8b6edaa6f6278c3db75619e6452dfc1fb26508ee9181fdff77d63156c13d62b8577a5f01e7960f56505b0e4249d60fdaaebba1a5f9eda2170abb58bb36dd9edd66ddcba2e8b8b13687317fda2bab0310b0b08589da0b2c071bbb6377019e208280a190bf28aa14cb22ad32575334b0686b8dc2d0cbbb268d9e56e71e163d9a257ad6e9a571f598e492432362e58bd7c20b73a2305b76ddbea8061e06514d8659d6c1775024bbcca2d2e716c8d418dd5b8095577e1071bb2e523bdd239369349f7466da9c07b5dd700eabaea75d5aa0f5b8315b59369ca48cdc93a607f56e735da64fde6996956ddf5198553695cd72ada64567fb6a280519faaada62a69dadcd634b1c9517ff286ca5e4b502fd77da9a24c724e04697486ca5e3938521681584511a7834e2911746ebd62fce6268f54d03542e52427a8acfed8e8409f666f666701ea06ea74bdd771299c77b9def91be73d4aef6e6d7c8df33eed9d091a37e3bc93f55ec6c338ef62bdf32fce7bb477aec579dfea9d5b71de9fbdf329cea9bab3f728fec47977ea9d3771de8df4aec465ce7bb3775e84739cb7087e977a0df11a63ecd8cbfdc2bed4e84bb6465fcea0496e0137f662ac843506a4250c5f204093d84b1265d31f21af2ba80ff228de1f665690551b933d55e8fc3ec66ff3e8c00da6a56c403ead46b79f28867dbda6cb8cbeb7fb09fc1214e97fffd7c75795f3eb7e09dff3bdf4502b89db4db4951fc4eda4f7b62af8ada71644b89f517622984edb4a9a70eff97db26fe50b6993be837d588584f719fcdf8ffb1ebcd74f50788dd6f509f82228f9cf087e0c11341061fa173c92a70ff7b34478ae4f54d3fc233cf71ecb66c8977e3906deefb2319d7817a4c9d7539cdfef38bfefdaace90f7e005eca91bfc71478cd6470a77dbfe8a5709c7fffd849b69b76fb5eb3e9b6091a4ee7c97939bfd77767d1efd7a8c4365995bfe4efafcd26c06bc4b76fc2fb4cf91b02786f86e7e4cbec2b517e080ffb3d9dd386427ff1fb5d24f0b750f07efebafa3785573e90ff2661079b55eee5de0e966eac1e7855c00e967a66041314b0a0a420815c390394eee295c8baaeebba721e16d6aed6b16b7c5b3647af5af39565d578bb500ad1ebcaee98a401a8172d5ebd7592c7a17de806d8f113bcc6da18bb53301bbff1316663d6787463e40bcc7e631863d7ddec566459feee32b8806a1becb3114a2474a7c93f190119ac97ac0aef0900ac08a948708b5d3ba3e9ad6c022407acc0307c2a798c91faa56d8ff13ec6af8e77cbc6abd65bf1c1d85b611b9d944b0ed1455085778fe7d2d79127402d286ba83e79785005ebe55ec62cd77595d940565565726594f3ae04eb5dc9a5dc525e29b194554aabe90ca25edd916c6d8a46b606b6e4ca8ea4772ec57977ea9d1fe1bc1be99d33bd2fe71094581602049ec4799f7b97b776116243794363a80e793c6e3657c18abd346af5c36b54a1d6b03489f23cdc181e51624b156414abf96a8ceacab6a0c4001141c03f6c82b055fbccfbb8e52cc6412d5d4171b6d91689ca06267164554a8de3ce76fa6686bea80605d9204b55954aae09062461598f7112898c59ec18f9828c7d2c5f250cbb633676e33885ea4387ba745f386c0d5aef2b4919300cbcf7de5bdd7bab7bab0187f9a8d3a56d6b26c90383182408c2107020c65114443265af1d138001c683d178240c8442e150180c0a858360300882201882600882300882302c033264ed07c6c7df5c441ebc48633279e809626f81fcbd0fcfc1393e0ee4ecb532a75542edc952b6b1c5d61357490e38111dac0e987c8a420a00271c9f3e83e8ffb3c65023b7e039c389f69a7c975319e4c599397f2cd8446569941f873fafc4db663710f1c8e1474a59b587b8df67075c4c4328fc838bd084c2f4440f11487311c015e489ee1d38280abc8cef321ba31c06130ad3fb51d495d047e6bed33b4656f5808558f09b5445202568727ef8f12829215fa6814aed7d6870090354a2070682f5a8a1b416772428446c65a2e6a9640a7981f28cc8a2524e126529ac0e5add1c6b1e842663dde10d00c0060161f601beb46bb10aa9a489488ee222654c38b9c8a834e908d0e33771ce40d518f746b6dbe1b443ce321fd692210e7d4adfe049228aedc5e5c997124bd989c4153f1b76276e4db62275cd76f5ff1ad496b35b4621e678f934b426779f84d3a83c290bd24e51c42c170db7771c8a20882ceb71847a83a586ff246904bd9d370bd10c6298733f778b70d9ce234ece79c768c45b1a2dfd4183fd0e83114bc28c5e2cd88db9764c67d0b6457d10662d2ecb13e04c673f4f1a7c9c4e24e089b48ad58e0168074305e1c14fc3fd5374d1b4343847d2605f37749a45c92bdf544ff8efda63a835ed29fdede63dc5236875c431c2c1835a4cd9af263be7e764f3963b2bfed88e2ef19528902b63ef54ecb5f5b24b0669e6906d004f3068bc3badc63d964ff8411727ab2d50a26945f84d8210bbb35467d78c0a54b7ccc0e4a3dd502262f0d533df40bd77c2292911ffe6b2b3f2234bc45df8c9a35af7ee9c8032879217cf5cf212b2d24b30f658af172e41926a214c927679b1b4e271333b554798dc86033aa1fe816e8c2850774133011f5581ba26db734be816dc2d4a1d5911b71f1fc134b2313e49e3d15859698ff26e211fbcc17c91ad82fa9e648258191e4bcdade4fe111092021fb11e9795288bafea4ca6fd586141073669ed28a7ebbba0fc0eff27454c0d89300176ae2dee035000e811bb060e01e4b6aa182b1f9bc4db6dbfb65379b6a0c2cfc92e82150e733cfe598e6f7b4c29c444858319b70517a3ce00f3446af2493dc34567fe0c76f8e728992ea683c9e8eb9da5f38f7e6be009c9180f1e4500b02a67d6903d1896a9b38ef304c5716417afb8ad840d1995107c85747840c1f1fe0705d5581d211c186c7357290187174f97dd50b1491c42c47902625d082e09f413f4256812282851e2d7f7fbc0a1b68cac43b7424871240ff5d7aab20222cb878f11e37c3caca98b6473e86d6ada31f2bd9d0a1678e6e18d187cc22b4898adc83b3dcf29d789af1cc833c3940369265c399167842b27d2986af47473d681ce019e6a8e1a18ff7396ebc06775194e20c1c04ac361b2a9a8109102a688321481cd1a779b20b3ae96f1f20763c5f602d5b42f3b261ec24c0aca0d4ad0b5b29d81efe94a5422a836ad583ea20f00fa409d331103f9489ae005b2fc37e6bc89b610f2c065f64d140ed72d11f69692026f173b512dda1f1c87736c0541761427512860ce8ee4334fb7c5e1ca9197f7c095ab6ae6ef2722626073227ce4d5e1470ea4601bdef218b97bccfcfc307efcb5cf64ff4f3e247419af1af3cd95fd0e53f745365b165ff93d79b80da6c61acb3e506306f39ace322f8c335ead8db50139e0e7f776e617b31988191c09fcd16e75edc5f7331d1194c4f8ef3390f84be0fbddb8d525defb8e91cc8b636485f2ce60c71e9a98b9582f03d0fffcfcf09b96a5df2757d2776c40a3182b37242ff552621a32ee9532748e18829f01d5fc836c778ba93476640e9ec1b7077d730c9c45a128efd626e21d24e4d84b24135b48a7cf9045641ae7fb511eba5c25662cb3d79a4b402d289ccb1327a1b3cdc2c63c864dc8fc239260c58622c64be2f31eaf8bc194cd7d267e2611032011b8d84569866b9f57e7c85091c5b7901961ca819c19ae9c4833c395036946586571c17e8ff5c9de1c3530fc97ad05f3fd4927be7220cd08ab2cbe87cf08574ea41961ca419e19ae1cc833c3940369265c399167842b27d28c30e520cf0c570ee499612a836fe199e12a8b6fe133c3940369265c399167842b27d28c3095e17bf8cc30e5449e11a61cc899e149bd0c3444fb44a61b06544ffb92eb8c18b58b845da9b38901c6c32a22998dfecdc3ea814c5dd9fda45b74e730dab9b5df76a7ae92e72a53fe61621f86fb21559f1d3e58342e6d094948e6a948080bf7a74b738dbb3cce107d3e13d91cfae9da2d4e2cd73c453e751958ef25c55571e35625ba6605427026775c714369c08e78b21a6de3b72079d45e121d39da9af3e3376ca91fc942ca68fcf3b8cc1c6931eab17275d1de01c1865c232c99228232ade6c7eb349d1d534762460115213dbd33ec28f02f81e5c85e1e067dbd3b34dab1680ce8809739b5b7544376666c1cc74981264ea64103eca70eee868b15e5205a48545a95a6cd2077d6823025c1494d76fdc5b8c869d15d3c8b76832f68ed0e88ac9700175f3816f02de45a545aecb0e02ef816d00b190beac2b70b8f56b26a482dd4055c8551c7bebbad4c56c2c0b9114bd3b60e2af18ebee0fde27758e807e9994fc52cd0e76aafd3b102a5e2b28b75b15f48fec28397d63a1cbe2460930a4be63a521d2e94238e915ca2db288d7b2eb62cfa8b660b480bd9057da16dc1c1c24cc74dd702c72ea51b6daaf1be12ff0be542bfe0b308267b8fe8cfb9e8b36817902d262d685be8b450fec28397a67127f42506dc5458b28e5ac4fa02c72e65a3b1a85dd41663150e13cbe294ad584980266a284de33cb8447b27b596b6c95c68770e92dc2f87281ddb3d16535549a435eac20d5202af75d49271e845d21739544938a52e0e2ba5bf5516bdc934f7c2f78ba9bc24a675e052efacbef0e0a5b76eea2f816e600b1cbca4d651f5a5d0c117a45f880a4bd9b7a8be045ba30bbe9b91b90a845a3acebdc0fdc2a395d2756de052ef80b6902a78a13e567e2e790296482dbbb064b15f7017cce4f1b635f47be1a14bb126ab88e3152d9bd398f612e07a885ce3f1cf3447fceb25a04158887ee1062801e746fda5095a872e5967bd0b0f559236995be0b8a598065ff42d765858211f134e962e4aeb3ed387af071b5db00be842a40b8f521ad0a258342de05ba82c64e343c98e113e4a16cdd142b7e86cc1b4805de48b57c5d32d42e89fd387c512b16117e2ba48cca985641907ed26abac045c74d12ee25bb47c91a39480e0dc08a553436df1b5c55455126d4a5fc8a794cc6b1da574dc432eb0414aa1cdc8e246b182deadfd755ebf58222ebbf8eb82aa2e49a7b188b50bc46ae985d6014b731a8e5ce26bf405b3c545171eb3949ec3616be1b083579d1e899540b4802e446da5d3f8b5b86157c1e6c4697319485e021c7cc1f8c51ba0e49d7bf1fb0b527929af9bea4ba08b2d7a16f02d722d2a2da6167dcfe6b15318e092eec2b570a397ae711eb8b4bc73a396a675d7c025ef661d713cfce5ed0ce25e026c33c6c6e2e8d7eb4eb66a25e8228b66116331db82d1166da8d268b42dd4e4bb51ca02472bad71537d4980d601150e6d3f2d542b8bfdc24ce70dbdd8da62aa2a5de93ca8d25a97d82fc56e6211bb50b2d0bb0720dd0c2b4ba73d17b5987008e9a4665d0ad679b8126e93f3626a01850ebe473818512e5c21ffc1df07153c689f72ef631bde3fd5bbdf9b394be9536b29258a7172c9cb24fbe18251f90331599fb52118200b8da4739aff5d37ea6633872b5f9e298105530074fbd2b29d40a1b6e9f1a03fa61ecf9034fd2e292e164aaf5aa259df5348e0c94465184aaa4cadec95d79927b514613c71b6775377f986eae40bac783b32f9fde623b4718cad074d5de2beb3758067b7b0d37884c1d9283026c488f6d661de2b68869963e009389a1ba219050fe00059b91598b443c6d601707603fe0216f1514ddb6810bd3b923b3439f5a866eabf834c00394b97d0742335cebc011c441b2b73c3cf555a6296f0749600d2310a34168d800e7881d0e6969acacedadab969cac7ab208d5c006e25bd542f627a230a2622b39107309aca37168c79a10160fee749a681d160736014209e2ef0ac7b8e83ed12b7a54b98418c5ec39b6e826b211127320a702b1c203173cf3bcf17b221e7faffa76782fee72fecd18cee6435c21116582c39a13a79e8a6d1fe2e74cc06318c9e2ca629e0b5fa53f91115370ffad33898584c6abc86003264a4265eb1ea8b028021637a236fab8e0be51a9e70cb9f8cddbb554a75d5610627ce62f6d8f031c1ae5c10ab59d91442ffcbda6ec087d2bf7ce00b121fb088333e6aaf74ee9514979b441632fc05846a6a183738f84e391e698af5e1e922cb85f64188fa76a6f8d66b0a70b223e8c88f40aa124f635512d9070b05d85725c495febfc63567d456e0c46fbbf91b67b1008b0595da4603d57fb7c16cbc0deafd9bd0c07ca04f255e36cea4970199f173e70bdfdb4d67a68d18d92de99ebc7ebdf9d7062069db9bc0b5642802fa0738730ff64b42873850da18f5704f28494067bdb0eb6111605170ae228589653e6a3aa1fc917436986c8a56531d6b9792db035d45b27aaf094bcb65f9f91db443942e42f7094b262f521d1b5c0eb7f2f580094ff5f5766b17ad9016834b7cf33a12ea0ecaa734418d8816a6867d8933e1653c85914f656b2bc09aab9da3255e2c6323229247f4a425c1c6969d9c35605e1aaff2a1ba9a010105bfd8985f7176462ed06423ce34d95e3d324e14ccc4866f61b9bf6ba1bca4a6691e91918a36c9417fc85b690c8f26df2456f013df387a90584fcba152a77c23b09c0c1b786dd88bc1e318b2d7d30f328ae9d5077f7a6f64f1f0e85c6c415d0e3d0fc2ee5c65da50015e19748b6209b46823707c8a7dbd9f11541c2acac0a53f9dd89adbb55c19648ed024f01c0808c049999541ec878a8dd8db7bb9368aaff186e36c0db63a92edfb73c312713f4e68e2f199ce268ced1e7c39316b22e2b56933c82a877882b02096331cbef51a559a69677e54f6a02423b72771da3aa78499b089499f3fb16c1aa3c304fd35381b4cd20177aaa9174d70180cfafc5b2ed73d82bcb817443853e2967f676d0676c338eb771e2547fac2f5950e842955f46ceb8fb98ecbf4391d2c444ab821d70910aba0935d11d37163af3fab1bbbe5ae510f2acd01e1868ba79d5596cbc5a2f66d232a889e89317c72fad112e06eee142d8b7d8f1c974584223e1ca66e8a36f4a6c0d5df34f426bd6f11a010db712e2df46a6a38246add5f7e43f080cf702720077e29a3612cecc744d108cf29e8cc1a9b27669df7b03c7377fa1336282b100404c89f60fee62acd0886e228dfa3d133d7a3356308eb5cec7bf09aff9514b0e52e19eb2f1ed03ed24f93ca8357f9d21936ec9f4c39adc65e0966ab575be22a131eed36d3bd2189473d282b191dce603dcdf1a4a58e35dd9eafe8cb3789f45a4076954ce9b69bc7a083546e0ebd494220d7ae216e236fb4dbb22b25a9ae04843b89ce3b8ce2142b52b66ba50fb0661293562b89a78155bc1acc3a94ca88dc1e5855591bd091eaa3e283724b9cb04fce7cc96b252cd4dc2b4a4af30cc6e097f18428a10d328798a0d20a04a7ff958ce04a0232e82c9eb895c8d6048d9b63172e6483548d88d67b6489b3480ac7c42b6b3bd56fb2b2f95a3e2ee4929da7f54ce06c3bea572529b7a8b6cd2025aa1d6e74eb30029575166e01f2145d92616de96513918171002489b14392dd494e4f3b0c1bd9a03d43166a82dbbd2d13b77ab2d03d1b7d207fe8937a34201c13918d9c9d851cc425e329af5223536b10681b45ab3b347d0181a06e9126080c6b9766069303f18b8ae3b0648cb49da40b7a115c139118a1b0198823fee907eb44ea38538b19b7d5489340a42d0f4630bd3389c29d532adb84465b3211b7cbe34e9a7b6c568bf254f1534eed21d1595cd6a64194862565033ac88f3153d36cefcf7306d9c6470a46719b5b82758213a37c32ce5e96712c372688024a1d4a2d7b4262bf2a98c731f294623f9586ae109f6741c0399a4b2e908c0e5a9328186a7843c2270fe2419b2b835bd290e01108b761474fbc3108293f6ccb8fe8a93706512e85065fbf23d725631f114884a506c907818186d1ba1951621250c4f5b64f725b4832d20d0691a8b949e4f60740a7cf9ad0221b14426e3e028e4bc2472cd2b9df042dc4269cbc24b59183dbc0a07e4dd74961a1dd0aeb1b87ce41ff86885b4ab24da86a7b6e23c9f3d49b41aff2cb0d5a884d821ab79128d490ce1d2536157c4b1e66c233f072aab6b48a8d7328aac2235ab6b8a851adeda28359a6074ebab927c5a44a4c0d65d74eae4948c4a0172e21ce4e72a32e7f28cfd3f320004dce85e55b72b325ce31ed05d9f3bc9c2c27de9a9494b79285a641ddac553433752b71994179715e94851b9590515ff400bc51842813070a9db2366725851b150d6b750241bea7ea2f4535a009ee85d6ca53626eb7306828294aa20efeaed49008f4aef9cf289f2488af647b3b7aeacd60e9a83699ae83c84734096d1f282296a48cd4d458ea24f04f089ac5ea2583ef4028c92d5bbcf188622f6a286fcebd064e2aab979cefb9921a732d24d16d15546c023a46cd405b404e4a4a07ffd3bbeb66e6dff623ccfa9effd3fe7e5d32f1da384196531eb66cf7921091d2dadfa9d5541615fba64b6f99833c07349e685cd0510da79f05806e41c17d99c56d199ac8d924ce780f253c4346cb6d89dc5ba694520afa030f04de03ff83eba8ae8e4c330f0c6b26da2b40e714061c518045c8c24eb8c13037b3af198feb43da1e7477776fd4429da1345e1a83bd02a807fc3d6b30d93d97c2f8559e6ad3709fba993852cf0f7777f77bbf73de5f68aaeb5301cd14d0d4d4f579144aed3e712c958f7cfdf32c1b0d42a84187d03528d56b4aa69a48e678dcb259ee82048a1e504dc72a64f771db48deddbedbed63da3f0bf1f9b5eddfbe84668168bd12f8e3b3d0bf452f360b5b6f4c67cb56c14d8dc1dfddcc9f23c09feef032d7e0ae8b2464c35fd74fc321e4ae4c3fa531fea6df7eca8bfbfbdb8f6ac770aa1cfa4d78e9afc1dc1d1c2919b6dd17a91d5fbb6bf873f603dd1a41687edbc4c93e99ac46dbd604c239e3a12143300e526b703783fce443afc5af31d8e2dfc9300059da537d910837e586996c02f56ca9538c8b7488c2494cca928e6de18925643165191f2cc6adb81597d2a294a2955194a709d45315464cb1708a05ed3213862890bea5b857799c8f6a725e8ee70cf34d83dc82ff19cec51a43df6b6ee3eeeeeeeeeebdd286560dc77159e4d7cd5fe71eabb1e9908e78983e15e9c886a823863076b7737347864142e8ee02bb33c300649ba47e6a8a6435911c20c99fdf773cdcb5da598323f293332ee244e436036f54e47377a7e033858e62583fc96f83daa0b8070df744c5a00ea142081d428510bac2c041f8044951539190003211301529e968fac60a5b7fa9dd6acfa76afa0f116d0d7ea1915f9cdb6bdb375e7e60019ba8542aa5c5df7c5e0d1777174ebf4f1ff2afed21ebe4d745b3ad9cc7917affd4ab80e28f6a6adefe308386e35658416a2bc82f461d385033870aa9fa9ee5c2b3840f9b90a10caaeeaeeebe6db859d1dcb885d024e1bba4b76b38edd4b76ef8e7bc0dff1c4f68a6526f037eea8526093cba807a6a9e07a04b85b65d28555555d55d758df125c8971e935f15950a93e4254b9297273a9da9495e908c70dc6a65b29515e1b855505050900a2aa8a0025c66c6a1492772bf23d7d127f37edd4676b6ef646b84f7a827d95cafa53d9cd009b9f10de6960478ea84614750058a470c3088525405142ccc986126cead19223dce44963182c66e073594e800832432179e5eb892d23233d0d8250b050e0d9519088593c2cbc4178a0b26bd4cd675701c3425bdeb3a42723f242ded07c171ab1c3972e4e8c007a955747042bfbbbd4fd5367eb22eef0b1cb73ae184134ee840478d50c1992153acc932c311456c3cb544682eb00fcbe232048b0c534019b2c3a37c8d8e13f79899b9b56f6708e1ef0c91fbd0b56f386e6582092698b0ca219050dbf4b72d04f28b31c6c8b120b2adf1c1d374c0224b8fbf80444a71d81fd2a49ad8c13e6c1033213e965e8862068636290dc23f2c0866a8203145cc15a518a28e5ce8103db01a7ebc3099e803fabb6676e86e6eda41090f8f92ae63e67625afd70b25ccdc8ca4eb90bc5e0c911c3972c48811234ea4eb18765d7733934ae536f8eb055fd8c062c1214386700d35d4c02ec48508010184a681878786aea3817d787d409d60182f310cc62f457ebbb119c38e18a6ff04074e5f9aea0f0182733b8d88cd95a5262d4a3cc92d6245696545b02086822e5dbccbae2acb5836f5a1403075035377263b991ac443165707c1640faa617e1b66024585e37d34c370ac3a03baefdc31dc75b33d1c5c46b21ec8a536849aa6c1de3cbeba624cb952aa1c1d37d845dd5cd4ddcd4c7aa4473e985eafee66262b569a54aaaeeb6eee6e6ed27c347333694e3427af570821c060ada5b52829353531144335f5533fa9911ac11e3d9a7878744997b8888bb6a3ede8861b1c068cd90c0673168b69812c10a85241413575dd0b1f1dd551dbdd3ecff0f0aee3e1e91ef217430c79785eb8e071ba2e4e9cd70b0e9c376fbaaefb8d1b37b04d9b36ec6cba8e0dbce28a2b185eb18687674dd7ad615f03d3a449938691301234ec500ed5c4c3d375655e2f8665c8ececc03163ba6e8c986e3162c4840913c6c18001f3e5cb972faf97172f5e5eaf65e26ddbbc1c30dbf61f5f92d541b870e374e9c2ae750961c9f63e21c48834c8b0ebbabbbbbbf9069367857c9f2c7e007fbb807afa04f1c48860bf4f0f68e77aed3dd3e43628221d889122122e0ff059df8ebb1185e99c0090230ad3f9f5842d38f7b08ae774d596310084106a1a84aa3348519e204569821485872846ee6369f8b610c2edf5c2b95cf528ef19175d64bbe822b9850b247c182e30f482d6b10af92f5874c9f64013221b3e067a62f03520c3094c51531a599a9c2d52b80798d01329855a99ab56ca6cd76da0cb0fec0736020d8890fa0de473b7c5b89849fd76f7b8f255f76a0c6fdf341cdc364e690cdd1ab2d7ed4b86d32074e5a087dcb782d3304f98dd7548e06f89a05a84924cf84c137aaa303eff03fc90debfca3b6604d01d88611b957ac20942082184aa1f709dd0349a46d348f8f0b1867d6caa34c361a669718bd419b7c87e9fed0b13710793ff99c8483f1636408f36369c81c10ca98d134326a0f2246bb28221466258261fe1f467ef3edac3983c9d1184adedb89c2585ece6ae614df36577671d1f5fd60ae4ca2b58575757d74759c787577597079aa3b962d7c7ef6addd0d75ef3a6b63ddcfaa1e779672497d9144d267c9ffcdbc60fb1b8f61e0e9d1bfcdaaa520c1c7e831ff22f1bc838f8354f235555c908d144881ebcc55424216a50242186981dc380b04a831fe417e70fabbb7f58d3378a53ed616d5bbd37c66dcd74bb48c277cd4435b7d1872f438c04f233706644717600a334bd092433389d7982c36ba906649655301ed1800cef74474c00dd2594efeebe6ce4b6c5df62742ffcc587150e6e40f291250ecd024c775610f9c9bccb04c7ad5477f755a8b5306c5b08c0b5bacb858b5af4344dfb4d3d8d11e36ae16ce8647f8f51a8b23237296d47554a8dec678f4be43e151c33ab98d999bd798a5509da432fa8b531e8f550c5b4efe1b121f83c626c550131cde3e1c22a069f6335f802d0535580bf0b5d6171f39c99c18aadbaded57591b25de67675c90d6ededb96c1dce5c2b547d66e826279b044ee0071c4fc60f0720f2b6b0c565565dd02218492618d43e583ecef748848feeda763822b53e68d98f949a895be7c89b6830809a96b037eacb95fa36bb0a402fe08154dffef478f3411d63b800fa94be2af4e14410a6e7b7df79d870a1440ee08fc175c4dd3c044758bd9944ab594c6e8e7b414664a69689ac6f29e4b050793e39d27c0e4b897900358b1d80816c27fd0c1902f7f6213ba6eb691d1760182c9aa3fc6ffd24000c0437e3bbfd67c31d5fb7e16c8ea54a0bd1c9fd0542da97abb1e0afdad11f49765d33d14fab3a113c78f3a4d0f05759a37e63e7fe17886c63a1590b209a58ec6428ae4dfe7c26da92df5d1d391f3292725c4cff174386068168b1e0e927f97b5058b6f85b93f9bbfe6e15832bccccc3b49d867577276f70cd440774e1a334b1ab382ae9dd5bd562cf17ec38570bbd5734fc3f1bef2063ca4bf093d8363deb3d9de8b913ab58508f565d5b3b1170ce7552c691a072f10a2684a92a52949c8a059c6e20c8b017643e835a1dacd66a2dec7592a19396f87fcb6dd32f9b7a597c052434d56f9b6a45fce548d4ccc14341620d804f05389c1c95423a652f9f16572abb3de07a4c86f8b26951f54cc9e85d9a13b35fd9b7b690766a8a47b89307713616e10666bd4a8511ba09b8018391822bd25f9d78a1a985b48f7b60be95e21ed3370cf46d8bebe5570dad22ad7bd5cb8e8ee0c63d59a0952a54890a9556888c1d42a39209939c0698142ff8f3acd25bb9eccbf5582fe3e075816839eccbd960662eee920ca80c6580852a798cbd429b6bf5e4b0331b964989b97a73becee5e5eeeeed67d6e8f71ebde25e676d73851c0e90edb9720d05c004051cd7577d5132b8a9702226b348ba3b75c5419e4d0ab6d1b6ff352a08110024bbdad29432881fd1cfd0b378a19932633263dcc9d2599f9d41993244c8ab8495ac2880bd3396476777777dd702a17486d9ea7a70bb407ed46270af9a9127fbffef7f78ae15c5555d5d7d51d06db304b54d23c756a36004c48fd75df25a3921db733330d565834c9ee4e427eff2feeae65c7753a328ab2b43a24b07b9d5194227ea3aaec45bd5755d5cb952b32ac5c4aa4b0f3dba27c3c1999b2f53e5f294175cbe87e762dd9bc20194bcbfa762dd1bc20d6d2b24f3c8a2c59c36887a8a19848c922c58924294649528898472e6cca8b0cdaefabc3c7d1ef48205de901639452bd1d394404797cac63192e561949c56957e60427482a954abd523327d638d9a283124896a8c2435a0c99dddddda54089cdc895a32223b8455f3a1a90441033ed613c4cf2eb3a19b008ee0604266b7f17c95f050239f7115c01a664980bb90bf1b87c79d51a013ebf0df83aedb546f0dfb7e19ceb727f4b84293497072e728feeee2e2f3bbb7ee2d08e16d8cba163ba8763a1ec88ed194015c1c518638c365c4079811a2236250884dcdf9436a5225cdb147777772f827d55b18d707555d52aea5c454aee890e21f425988c1429007e90df2b3ed1b1d8c18a42bf3bfe2b0f12a744f77b7773bf7737d01eb9c6e8ff9ca51eecc7c11ac9bdde0a5196c069616e928b1cd957baddbbbbbbfd3b25fbcaf676bbbbfcb9b7375b811b15397b58f7b2338287788825ebc70dc3748861faae1648fe6fddc8faf94a6ff08461c3d495f5757fff24dc4087d08d8c82c48811ee1c6eb0a22362767f0c321b0a1ebacc7e5623f5100536bb11001519066666665555668662a9aece88addaadaa5e54f24debee80b7e7c523989bbb0441fa590787fa58d0323b2091244105e2a3a1172dc45913810846d58d96ca30f78c8c165ff0b5df6d97979de42777bd75a377e6dc5cbbebf87464cdb151d3b418c8fded57c76f888e0409ce9be0546778bf7aaa200840cd2a16d79e5fadc4951e6c67f8ed62e8ddfbcac4062c58203f9e0f827410a1e080a1d9ec0fda9ebcc57e9c35f8c53dea72b5cb63dc10fa8010c220394240f58c6d80ce274547388971bb43891e310ee2c996a718d7699e9c4016e35c871c6e887150c5ae85124492596c9fa8a088598cdb54ecda164891a4474c678a142398c4b8948a5d0ec6062550312e47c5aec65224ce528ce354ecd2d13e8290cd6241fc8669cc4cc5ae9632ecd3c14fc89004492c48a7cc928e62ca32381d15bb34aa89136889712c54ecd229d01c7112e3562a767199990a96629c6cd14a4a50392ad2258d852315145cb44fbcb7ca2a32031964936cf20cfe7d4f4920418405e285c2fd7775b6ed66f6e79cdddd9797997fb7df5750b2bb1fa89bed4985e9941568f91abc2ff73b9689a0d77b4c966684b66deba46d31c628c4ef5068bab73fd8ddbf09f9ada6cbee5e298d7e871a21bebf0df7314934f48aa8281ef8fdcaf3fa00049e0fd8f5b0215a0bc7a9327d70b46df1b9e8b56cf847df7ed6369dd05b8010dc4502c2cd542c935b758b5933e2c3b8235f13fe17c28447923de04fb9a26bd3babf5fb0f6cad2b5894bb41e4f7e145cb7b3ab995df7d50b97246e15256120c41d18537d3546a790b169eeb3745619834683b9bfe31bf09e192d2d4c4dd0a84122931551ee71ed323ff7ea5840e7f2fbf0dcd70bc6722b1f6f1ded65a197b5a8e4ef3674e8d488000000240033150000100c060542e180503418cc539df40114000a616a3484663893078391400ea3208aa12006621804011086010c628c849446520b38970e8b6119b83894283eae03a3c087d2cd25d5cf413a130d10e6db6004f0450fedb69436f6af76c949e30440a63dac40c06120f65d56e065746c9f2f23fe9c352bb9b3b6c5b22d494646adcd8e617e0f591b360001076bb28accd576c90af698c6f96aae0e965677e4f16d8fcc9cf19cf01f3e788e2973896f213772597138d6ec38bf23335d31bfdc3ec13f49540f9c43083a688f6bd62392e732757b54f112024c08c6ac61544ab9de482bb6144fa6052d4c2b9c8d27f30bcf6c57a5dff1815eb3de9c4ccb4b76fc312075a52bb4d20e960f50c43cb5cfa6fe4c4cbff4a841767d3765dde0b5614242531c481755300d2993fcb954b321a7ffb7d269d674c4ab5cf2a895101e6ef830ac35a19553f829643108acda3beba6e52d3aceef98ac55305e0dcaaca595fe28b2f1bc9c19e2a4871a4f5ea476b5a048e1479ff55a7800ec6b5f8a5c7eac5806a1372e63bdd3578b0ef9ac0a78b09da6d91c886d83818a1b29353b6fd7071e053c76448edf3b7e31f2edc11addf23859c980ed0b3ecb21c71ad2dc0a2a843160088fb4392537ff44ea553eea5b558dbd26604723d57fc448ff4b4326eb377a450c764840b51e16e3ac00873e3564828e2cd76d2dc47bb44fa0f7108c3458c45e8eeaa279c20d51f843c8a1f9d250ea2d0a154d27d5a66c9fd17ffe2d7a251422e38347c829704febf9fe4e2581b4c06ee121572025865f2ef489508d495c3163956c5881740ca00d5f63d8c9e8e47ac960183eeaaab73f4d216dc07f312dbd82cbd234e8aa5c499b3311d8cfe0c8b99558acf888283094bb1cd9a0b1deb875ca9519ba6a7d2ff9faadca749cd5c8b2809833ad2f45e585606b2ae91b047168cf458d3559636a2864ac4c0c4427bf0c5e7fa1090c34dc5c58c93a7214d6a0173207fc52e884e3af92e0ee97d0a451afb735f0528dc4b12ce9300b56612f3cc668c2416f583de66da5a2d26a549735ab81f401e51834b8aab6516961869373e4303da353244c6a371db028152890455c9a963bdd963a28571c347d9dbb493630a8400f1e9a9a7c7a605f8b5effd930c6858b8c7183122d3614cc4fbd51b9e56378e9e7474d302a843d79052fe87245ac5fb9c85e0a877d1ece3ea88f99d7b8cfaf2ad09063f6f4402cd931659b4eb7a32063d84935251ae4711a4d23a44e2ff82a96cf544dd0609b8820e31a04f50523baf723c981661eec61ee0847ff865d043940b0a48df1adaf7eba116574a238cd344c9676ec200f20e934e7fe8c4ae04a4c1732f3290edbe18b804dc7d406f229dfb6b6905175c262e5c203a5aa268346c1e91009864b753aab5c63d643a7b9fb203a1771288a2f8ec1b098e841263b86b9ae3c9ab12889a8ec98072e392c1eabafb97b72ac50f3e1b6ea3cb1528c654246fc7013ca120b655bdeed7532afb0b69ad18d96a1ee12a75b24796888a59d84b823def3f13ef83502ce664596ab6edda3ee1ef110ee28ff72920f0e541862754e37aebe6c935ac65cbeb40c7f123430ba07d49a54962d3d7c6df61417c4e18f3fc66101160a4278facd863fb19a4a33c0c3b1ed72459d8888e1d31be4440ef9dd6f1609971b55e1765717e287ee37700eef6535fbea2befdca377b88633daacfe74aa76e94a5db4dc1af5a1f97547229d027329a2ce6aebe56c18cd5be7bcf018eae582ab61dd9ee7d53523f599e57ffb149ed78f53b09d4b2a3a86af60bbb46004f6700cf9ea71e36c144d21d5d05b896adae815fea84b21a007ed5acad75077a55213df554ec2a583b3dea7d4a87af48282a3dd05fdaafe04d674264d5d2e01df406716dbb3fa9ebe34ccae73c63ea57610e9ab5c9b4c8655f053c1bc4995c4b841fa38fbac6fa84566de283828019e4b42a6adff93bdda797c89d2646dd6888e8da8effb259a2548b4ed04a6380d6a0a2dc0158d9ac3cd4bf95be5c373744e79a2d0297c9005fa0713dfe1751627fb9f4c7c0ef112fec422f554343d5cdeabb5307488efb332e54d384e6c853757d10f193d7a8ddc5ebbabeedaffcb39f80a4acc3f148ba024418f7e52ed75d7fa931d9a3fc2caf9ba8b778dd60aea4b9f4fb0d5a8cdd0188a80fc9188850f55e44108a9fd0b4b19e3f1031e11cd3ceeff5200f3bdfc7254ec65dda70405f20b08b2038646b5eaca5c452b91918e99627b420211ebbdd9f021874b7f3159b3be71228e40b435ac401fbcb819727e509c63876d9ef4159042f87d6b413b84e5b289c36fed6f48650391c7bf2b52ac27d27d45b05d7338e7d4eb102c811233d685600d4995b215176e073cdde419b8022394464f8d0a2ab4526a683cd587495197f20824b8edfbb64835ad7bf1aa8f6eff844aa55b44f97232a22a2bd5451cd1078569788089f82e06f2fcc3720acf41a1d5a62d469f830441d937a1d270b5628f95c7a888db80b54fab5f69400e4490fd5243589d862ec43de464ac284d4ea173c740792a8548b12e68f48e50aa720f225c9c4c878d72ecd68c1db8b6b187abed6accbd354e38dbe7f7f64b8eb47b62915ff869da6f08570251582f6b11db3ef83b04f72d8ccd87733cdf5e2dbace5b710884f952d744ec3b52aec93ff4797227d912b78cfbb08d191e94c418d1f3d4474a3baaab5ab2a51b8b23d9beb2d6f29af252c8d0a379407b1d35bd0032f7e8278d84cc3e8d9646cba67dea3c97d23ff4fad4fb282cfb25ef8fdd70805e1779bb858dd99df5c80f6fd6dfa8765ee7c661990586c7d22f80e84dc4a03ac04945962bcd88f46784ec7d1a66b48bde4918a70d1d08de21c10ce008b289faab0cae721198b1521506435e8f2685467ff87cea41ac427b7b33095228028984a704333b2de7b0c57dda3472556c7985ef63bfbbfa7dbc3541d58e0b238b4ddc67cb82dd22509a2e012eb12bbec53d82ce45d1119988676f8a62e483c04a2af3b838c40c609e3ed0769decf5331791b425c67891bbc3407b44ce07cc501f28119088c5ef2192a64ff2e0ad0c74cf19cfee3be1aaf7c63371e07b0de5cd4ac4a68e8dd336ee151f8b6b311550f6f51192868f1365d41367777bc69d4523d130be3826f1c8a0599b1b398394e8642e5f0c7f355b243fadee06bb90262afa23ed17664ca63aebaba1198b4fdd3db8b46a481a538936cd74ae0a414af4693bf5a227521236af76dd19ffa360528e47c9f86b771237d2d8564b5783ca4632b55938b13448e680e029a6b26fccd6b2617bccd7fc05213eacf81dd8d3a0f7c2381010dc210424830e01c1a43dc4f759dc43509427c6b45c0e05bc4021614da30cbbc2f775af798d8db8fddeb494b1a6cc064a7856d53af22f1f14b72a881c6e54c4d1e14d302a8e507552268889c2edee3632b83d85a21e3e7d7cf5924bea6bf94284b2f8453dea91c3b806f4b37490ccd6fdd625423a6bd0e8bbe2c88ee0d24bf60d12ea0715c38a28ce41ef407f9ff45694757e038f4b9b235f18f5f9e3c5e06772f7057a8368a2dfdbb33457fda6f748a3db6df43a587d7fa4963d1b117c86dbe17dde6e53c53eef0c56617cced58a75c48e553ff371110b19df99ec8c08d841a1c37252042deceb921359f138b8c0a024e10688d14195b881e94e31d068b4f1ecd623e79c2e6d2c1013ac9a255f08fb7c41e5b2ac7282ce459e592cbd23a94b6bc520e8426a88f6dc24b0e79e8287a02f68d6ccfab0105a4c9fb15de9d1ec198928c1440b0ff0e6b28a66a93c1afe4815547a1f9a6f1a72a8e8419cec0c84c7a47da936263e92c0dd90bc0f9cbd50e01ef41553cfe8b42abd6359cf177af6e8affd45bdfca6af790c5b71627ddd3094c7dfa31cf2eb4a43f0fedc170700b46672e43087a7bfdacfab54cfd2dadb3cd942a4a6d075134fa336ef44c43d04a9a7312496887c1bbd3f931e2a9218ed91834502e50d33bbf039a154d027f8d06214c7ee2b7d0e09aeedac8ebdd004cf6219f460132877b53f21e570ce6be3bf7957ba5746257b96b6bd4d7206cef41886164dcb627f5a255191c43208681cc822ace444193476db779aa24418a8b42d9be1474e8e3c4c2c99e3a965811e82ea40bf5ae7127856c0cdeda8579ba27caca76c6b875ffad5029f45ca41ad78a9d83df5a8f7c6c3de6bf4ea2460e00801520b0418d945de4e727a818662b8f73cfb2c1a9a9090a4e84856276ebcedfc7afcdf0366c9bd6c57e552defb88ea57f40e1e9a400f250013c30b587611d0c10c48f315f311ecd7db41037df56fc72cabbec4a905528ab7c3de1753d9afe5eb2d46400646772a23a08e1284a894bef3b6fd548ae072364ab13975bfc454015fb9826c77e9a9735cc1419bc6055b7c1d8af1785cb66e1ad2210528ef346033400a28fe9f243463968369cfd2fc4f01a58392bf69eb7495758fe4132f336baa21ef522fb13809e4c0691d2349f3a8198a931e3832dfff85d04fe685855261783df3e7e051dc594f87a231d5300ee41f94b135c4a42d27bba8aea91d404544210dc78a22fed8c9b55fe52d6d92c14b8290ccfd653660364f0078ab0b86e39a25bbc25ff22d9317047fe733bbe2441a4b48c5f61fa1def04d854cf03334b6ee52f133002fd778c5fa1b7479c77200b622397bb9d53960ac676eff7cd368cb181a891c395e0682e8618cd05ba5f34723b65e7440a74ea30e70344b76af1f71fafd82c50851f17a82f654ddca81ef4b90758d0e4c0e76b2016cff7c62967503b1466f6348a7e70b3b5c4f2fac9fec43f6b5eb2c8d9aefd9be4c29efb37effa15468afb09248a837f06b0024d18f77c426993e90ecf6b5d5424f5970e6d8278c3aa9a90ec5d9ac4eb75ecac3d9e768de2da82c195420dfe0f994e9d960a5ee8149dab8093e14183ed54dc4ffc20dac2d4855ec61c43101e82ba3dee1611b42811eaf6b1635d2c5eb8eedbeb93627cee8a772327b0bf6217b4e1e687d81169e6a0b403ffbe11dd83776544c100cae096c0097fd9526f4649147bda5486773f827abd9461f745209385712f0015a4f023e1a9a20f0971a5ec2db4f73c815eb138b4257199fdd7159c2da0f82061b3e26d44835044e470d70845c22c0f884fac7b82d18a8f493c91942b9e2ada841de02148eb5075056197f05e0d9af00a1c5d3805a5d59154c07d8a5a0c72b36560ac142fc438030c96ff37bfe4008f1ad7a7ada3b5819b41eb2a5022aa153aaaafa7ae6ffb047b069cc5824b86b3779ea7d23364f04e4b079c0095b53fa9f13a4f2fb276105b75cfe783c6f07466b7e5d7c9d5a4b41a313f4f9eb74972a8b35b28bef0fd006a3e460a063c120442a380d24f668a93c3c9723a21a43d9c22dba8b7d55a6646c3b4ae7de2a8915beab1f8428ccd610b6a07156434858a9ff641612750f7299b3e06194d88238c7b000faa1cdd910080db70e551370eb7ec10d2b1a92ad920b1361573c395a4a1372779e0394e7351df48a7a55e76e2fba3e0d6797fd0ea563a413539ad2bda82e175c1db45d2d49163eb8ae5142be64e9b726a3d84740ac97c49e0f903cdeb7f0d2e88b8b1ffa82ff6b11e81fbe546a966e3bcda81f184700a379cd375f8f49ba04179f03a288da6f7e2adbcae373bf7aebb1e7f381b3bdb5018648364592193718668feb7715c2d40f14e3dc4d140bfae41fcd77e81afa34d2230eca7adb501ed950f48020203d665f6a8f330f8ea24efff9aa8ca330e1222289aa7338e874cbe2d0110af2c9cecc82a5b7b68373da9650c23a06ac37fd69f09a4ab218828201782c9579f79387a9e57dd2b9691a6556bf38be3109b30c09923af248e110553cc0c2da51c1ff65d074bc56980425b04cc1366598e2349e943882a813938623282845f04c2355cf022f3c42eefdfc4ebdbb844e515b4e4006d977069f01ac17b05dda9c1ea28af0d1146bd677ee0e36e61d8acba10567944612da6ed405ce1deb20bc530d01ca773896cb99bfe3b1a3f53c278bebd5966482060f19722cee7ab311503717e947a87694eabbf35a3cbc253ed8fc43f01176172324e943f59190e0c134bb2070a7a09609877c6420762984668f003ea18ab8e119fb51f3981941c20d77cd8c34bfc55aa4ed7366444f15b3413c57d4f385870b532ad4cb95815fa72be23fe2f05f40c2594335bcd53a0d7d7650440793d54f3e34f3f88b163c71e94b4852c3f30e2d4b318c2a679eb0c3b8df62633fa65deeba0ca0ef17b1f7d7f9c167c312d2f58b26de2b207e69b9cb36e76958090684774cba0ae0d014bacb3ebaac0cc014a3ce52381858cebc8da91cf26eea9de26df890ae8b917a68fee676eefc1d96bc2f5919962668443d42f1910a4af6e6d58657473ea9eda2555e7cb8342d3548ea96dd0f12bd468ec9ef1358b2711a046ddbe925760e3a0a01125d2f1c2a86184119de0e66ea54a11d242a9bb66779e439b8bbaca85559157f5d666e7dcb47820601d969480bc3c74a5406cfc3e269dcee2d2c3efbe04f7806680df7d386383f9afeeb46fb590006f3b14edde95a3f66fa50edc5cf259396e82e1cad2db22b8e666138bb8719bc71aabd4524827503639df426e64e501c23bed224f189a29f811d298eecd79099d615b8e16d702c3f43eba42b97cc9727d434e1326211afd453ff0ae78513ebb60b9121437fccd2441899fa34cfb017933e70932cf10d90621265b0afd38d7a9526297f185ba833eee21722261af6882225f1e45d171180fd17c43881f732e35f175915ce822edb50139c956784df259f65e5b939a5c6b3f3ae954e3c2341feb4e200679c0aa57994dd69812118390c0d1a1e92e49586e29215f3b13966ec23f7c86023eba73117d4d344e2253779e84a5a942e94462868b7cf43d858e03ac2292acf9aa542ad44689d42dff85bf120fe4e1ecd74d0d26bc3b583c0d85bf1b8ec8388e22f2d99e791be68485ae71092c7e991581a39f8a11a76b4d8be600b5fa9b239cc08b22974f699075003083060b9a04c1a8fd24ce371ec850df4156a3c5b9a4bfae5a7541a6106cb98568adf5dba4cf8181fb4860f19ff6f7f845309a12ab2f47dac4eacb0d80ad8d32e2b5333fdd88c75457931dcc65a64abe9c7810802193979f83234dd74caa3fa4a51f76814c4aa4fa9ee3144229d0f160b06d613bd64ee01aea313d66fedd0fccb6031cb3040ec1097e958ece6734d4c9529e3023da6755b78cb7aaf2dfb8020a04fd14a2f5777739278e5fdf5dd2250efa4fbb56a391800bdbb8006823e6ddfa6437ef84bff1d20cd45b65135ee27ea07f53b9db611ef09f6ae0cc644241601ee2b138bff434ecf62d55584e0fc3761171626803b97e100104a6e3212b5e1e6b058e8a8f3998895426bba834604644ce6aaf84160bebc408b9333bab2b821208a77cfa0ae010eac70c32f4472b28a9534ceb79046a508f87ec8a4d74996a384b6cf6c6df1d202881bfd0043a431755cfe1c2b9e8e6044af1667a4d88c38b26f782cec4a7df782183196a37b454c29581a8d9de25e7b0d87c020351c6ef394e8a930315d4a9368d428b6566768c6bd18f73bff289408918e1603c62f5f819cfea4b72fe9dbc90e031227f4365ceaa8866a7e8e5ab507a5e2481e086746da7892f968f7705f7011a824034709c1cab7a9eac10d7cdab1468234dc363407dfac68b092c3a92d1d0eb98f254e8ad2a910a0895358c381f919714372b8767b2b17207a2b4046044b82b16f1ec59f1fd4d818ee43aa1988be1256a24cf9c2b7ded951b8f6c5e6b11c33ae300c86e3a38f9f13fd08d765825279f8c5cce1408b3c47f2a4981ce7734e2d0817aa4e93707a9a46010e090181f6ffc087527a0b6d39f62cd912d40c7e01853eecaa0c874385c223deec610f0da2bfb690c87fb6d2c67d5de25d03ea8f7dfbccd0bebc0fa6d16e0ad6f1340c023b465917f2090732c9fa8092620502d08711cde42553fb6196ed975e7aadea7aa16e605cb7ab076fd72b55a14093a344b721813235531cd2b9bc460f6ff711498372e763b5454b20f2e3161f507b29824a80110bf823e50ead212f0e768117e2eb106afeaabaac71019b5a6db74670243700865e6d22ca2b444172672038cb2d1eb3690cd3b2393e10e7b4601c6ba70282bd07c11506640b5c417804c9242d0972c30a0f4152710c9c9db806dd83efb9b990254ed646cc7a70111f4fd703856171037c4e3a1420fe7a3acb9a8f4286e01a2cf6d673a1a89e45b418d34db120c93a18d7371b4bee03aadd326bb91745c0d15ea71d8f31065433854ba0b47b7630f9ebd60764dd38b494d9b0808ea84eb19217b493ec0b4664e278d25a4923efbee776e6c4d1a42531b7188a5098b89c790cddaa2940a99f06afe5250057508940d07ca13c8d0c41823c69fdb0a8590f7446e71193e02e3e823aa0c12faa0d8225e1a9da92a161bb0533ff64648437ff7501037482415b0dd1fd075075a62054bd266fd107f33bc251eb76f35de83ee805a37d88cfee1ad97fd29f9d5d5ff3b685c453776673b71181942db631ca4162c183b8a546c23dce24b10e470aae807ff209086269fbab03d00fce4b3610ad5c01f0f02834fe30ccbff01bf088fa6545d5e0b2ce52a120761bfc3e9e3710c73f5e0493e049423a2781cdc02894ffa969b7294e25b4a22fa012cbe84bf3662a6b9b987943d678c1cbf0522aa15d2f1c4cb06d322a01bd1ab25973cd9440e0b43bb3a33492a5b45a07998392cbaf8cb5752db84ac8139b250faf417d854887758080c1f310bb7ac97d3dc71fe6d0fa41019095aec66a6b7404972ed4e8ae708bb8b55340a431b65e16f7b83dca2e76405c3e685a66e45c4a6eccc8f0b07fe3a1b2765cb0b3e3c1b498b0bf84aa0f3962c0719838f77e92030452023f9c1d23350874dfe85a5476227c514a07e4bad5e6bb341b6e87b5d7ddbe765ead8e788245e74717637628c869307fbfebc24f55403c6164c94488babf7b79120f19948298b97dfc06cc9154997838ff96cb298e9dc5707524131749c41694126387c3e3a6894f21a549ef62b5ed139468d925cbe6c91e92b466527048b42fc496f761ed4f086fb2d3642477acd564a48b4c3367e2fecef0a402004064f54445538e43047ca3950f0022afee8257ece3384107405f7e6bd7f8a3a2c1231b235eb57b3ce73c3afa8093cf40ef8a15c46557e60f690638e34b8345f29999733c4ba6d27da6b8891aa2042a7b7b71f739d18baa45200f79a8fa86bc93f2845ab52acecc9707f53b4ff6f29cf91e588e80c4b75644df3397bb0f76e1c6e18e89999e3a3cd6eb414d89bbd850c1fc95c61fd18879487f763b9a8dfacbb14cab510529525e721a193fca465994f8ee528cfdee032ca8c404e774e82b1d0463c8bb0a6bc1310d55fb222b673995cf384a07dd8d11235d44b76a346fce1e738cb850550b8b3382ef7b67ccdecdde322ec0ef43b0fb08f82f0d987937009cd103172790c476117225e8be3e3693c0a89f845211c9064cc8c1fb3d79e2873fcdecfc72774ab84d361d821ceaddc60045a3b68caa43b8bb1bb5adf22204c57139a92a456dfbdb1939b91591c07dcf71b378679cac98b1f124a273beeccdccf51c245396ac58830bcdf0ce438100fc22b36c20f41c21eff3a36f72fa0e618aef172b3266eca7b40cc31514de405b15847a22b802fb482adafbe762997f030714f727504335c669f9caf7205d861580ad5a37438eca2dcdadb7848072ab87dc66ff3d337e5b61e929d5c6406c9f9fb379785e9de53d8dad9d343bfed9563e5f8d4482827c836e14640bfb4110f5e301ebe3d0c64193e7d87aa0913d04f75e8561c37c5742df6c60102ffa329593c6e89869dbc1c0603c81182c2b55f5cf716627c2c3f62f1606ae0c941c4396efda2f9ab9fb3597d6ab3e580579b99f6cabbe2af834c0c30c60b60a7155d067db205ebf8b810de1e50c36b64212d5a604b4782aa289c60020f0eb0c9406867aa9601c03b6fdedc205eedf41bc6b3bfd97729274d430025a6c07a07db4ec7408aa4b231bb7ea550f84716fce20c060417f0a7748a661524bfda31f07a4c2f71c5c4cc548beec94dcb359ee1583aa1fa13c1ae2a0b05057b819a673d0c4f8f7c221d137ffc180273e9cfae5d90e5396734d80499f759d73bca69d7609515b8f358a5339c649c1ad00648f451c5a61cbc5a658cb634d858282d14b993b7ad461a070e21074d94c85d3106b5b552db04f482565a48e0cde189cf489c35be0843e6ac4951aca9c6a0d3c27f5bd75d0f82189edd6126cd6017f2e3f9c368b974e2cb7eb2a677448dae4f448bf52e73190786285c367d2a93c929530f0b212fcd1bb5bc90aa848faf13d024e8f5f82e28a835583092277f39a71b0d5b7d7fbc36284259a3fb07ff57390853c49a946f4f635b280092abaaf1a314f258b34b1c09a8be5f9f85bf0357498148ef18c1334708c259894b966ee054c1057bdb6f433020b99857fd5cbfc65acde8fed34986fba169635a1bf1eaf21196038c03f4ffcd69c9f1d9cc5b01595417a46ca3cb79b4c6f9df32fe5af7723317290df2df1124d3c97cd5f7324f8304f587b1f0e8bbef6cbb7efa15450e62e9f1d8cc201cd073e8d3a900d2001548a52790c90dc9a99270f60cea96bfb0879aa0a4e3ea0f0cd9420a0f0d1ceb5b9fc046a484cb41fcdb5b90bbf62c07cd940ee16e7de40ab9fc1ef98d7b45e1df77291d774078b7f9c04526311de0e0bde001b576b9e09f3f45103a0a0a2dfa4e017693b3ede93fc742e4432bcb720eb3f95f539aeeb2fa8192e457c18d960467ad046621160ed09a29a7eef9c304b7c06d4b489219dfcc4caefd86319e0191275289738049cf6a0dbf3d8ffc2e48ad33646cb49f0a8fac001b3a2f2592d1c1c3213da8cb76f698ce5530647aa4a9af6c3cc7ca6d237eeed0fefbd0fc346713f87ccf6cdfea35f054b09e53c68f47e7883b309e2767468532c59937bb7ee52c9c7028aa60c2fb9d31c665c122d4095483019407a4042a89910b6e05babe65bb383e3ec743ab33135f6a11617abac4eefaf7212a68f5dd32e7741cc5275b888cb8cd49a205b537de530bd0962624d901196074b29fb6bb843dbd2e196c83cc3831bb3f66231f543490bce3c6e896479d5e077755b8e48bf306358586ed61fdfe6f42db6563ecf3aca7c8b1b158ae03d1d6b45220040ffdb5d30540c3342e6c01822c69aa29270e0735a295d8c030c4eb023930bb3c5d9d006054faa2f6f1e6007514bdb51da14313a7c7f14e1c208fb13c7472e09f4da5c7628274af9b690824c0ee42397f718cb8980b8b19fabd4bfbbe98aeeb3d67a4825a2903e2b846e5ce435d34252c2b20ffccf372db95cab14d45afdce4db3ce9c600295cb33af820bc2c5b5c54ef4fcc8781b4c7dbb496d9ab0bdb6b7a6f75307fcbc1db3d9a1d80ec7d23c010b283e282b8906b22544be5c7a4e001761733f4d89b8bb43c9e7ba8d89ec95bdea8e666860f2c7d77bd73d9c0458221966d3de28ccf0ddad3924aa380d03ac3cdd647ad9e9d2a91a1b27b0845fa496a8145b6a2792d3543494d8631aeae3c516348e488252f84553d58b52593c96153753acbbb5857eddbdc15744ed7646a386757d7a21f5ca5ac89ecd721989ab8ee15a3719681abd0315a1cc83a69a9ca1518fc90cd2d46be47527f05951060e60bb292e6efeaafd82d04133de9db023b8c61672b5ecf4f2c2452d79c8a0c9bc580f2d1df902bbb1b494b295f534a9977e1d443e146564a56463d4d604c695dab351b34e79c7b49d946a599cd3069a21e89d8b267bfc9cacadada78108943ad464ee6095d61a057aa4794361b4e08e11a139a011e3fe2fbcef9a2598319a9364ec5343f104f2b6385e0390104485cf953272d18df3e86389e57180f7d51124a3ba59032d20f988b8a7f81f2b09e1416c3783902448d4d752c53fa67540b46a1b54fb448ae01c55c2a8e3b5d674552538583f9821633682926b6e6926ed1f449b054733bf49449c715c977d8a93fde53bd033742672d67174536837cc9d836803dcd99d4b20e749888849937de2234a580b6d9484d29380f679476acdc3835b3552468fcc31ef047c2c6a2ff8e5e49f84c9721110dc64ec548f550a48414c08f9fa99c5ddb4748c1c8b9f94279ad21e20c020e35beaa95da4afe9a8349ef78eab53639195d5a9e5677c80023f2b4263f3ab6e1f21271a3fb7f473a8ce03546dc6c85d5cdcea4f2d4dbd98531a3321616df931cdeb8245289e6afe8396c061ed90e81b860b497a3fa22839cb86749267fd18baa7ad58cb5859067df2ce97a51474f661ae5a7cc7ae38ee84f75d7cea48b256f14be2f8cf1817fc1978ba4ae39fe5e97729c3c9d32e71e07808c2b19e795488fefe0b0278375d1fbfd4d77f3768cfb3c2d8e5ee0653eee65c2aef28bc89d185df519c517f63c2a43ddbdd2b47fa175b67c8d6b2d19cb7b949d0c8da3436dcca923e846c89999dad32a6f7e1d96cb16866054cfec4624a03cb5f3d38c6d10246493f9c4c2c95571632e9f8740fa9ce74913099ef50e117a75608120b281969174b2c099e0cbe4e6d6fee694c09588ed646f6025eb541ca83016fef13736b517581654271a52df5082c325681aa67f50599c8b7844f8d8a2c4c904f2ff567d55e140a9fab2a4ceb3672be9e93c356968023e6e49d86099aa04123a35b7c176c50ced6d4e30f3e75b8c33ee31df51da24292319c0ce259263420300127e0d76b4e24656e24486978c8fb1bb542e596117eafc960d19a38ce683b4c523e99e85da2904410b2045ac40e73e39ccc131828607022b03aa04599234fa0cc09c6e62d7f1bff0a43407ed97488ce6202f32ae1e0e51cfc140af097a3a5bafc4fae4561dc28827c0b2feff202d46bbd42e1b7e29bf0d365805587908dea4c8045303058a7932e8e1c819583d3ba3cd502f3c8c7ba4141da2983fabf15c17e7df8305781c107f6027add4fa701d4f0c13e4d330d882f478b5038ad9f607037000b0c7c40e6e6caa841cf05f60f0108e89ca8deb513ad54e6414c66e294ca79e8cb64d29136edc253f468dd512b9d855395a2c6939263fdda69018be3156fb6748e16866165873ac0c8d4b0dc91cc07e272b807016b614f372a1f416cc77294ff3d739691e2c1ce6ed5d31bdd3efa9c164a451f091db1e0472180919a434d254386818e726dc1879560b04f4895fa68ee7b289e7eacc4a82a55cec6aba0c924de446dbdf6cee0867160efa7d3b5e019fd0852a813a868f5a7946b8e51cca0a7b0567e8f0fcd9eadabfd60d4a81f2c2cd8700b3c7b0cb6324d597ab736576765658e436d38e8af5945b60c97a65c716b6b75dd3b070c65056aef1a249b9b1de248854a5d2b59f68f0157c325202ff4495438b11aa5a137875518b7a8c9b10c5977ac46f15b3f45246596532d56a4e2e9779bd0bb32ed6306ff2fd6d0ab554c0f3437158e167e7e426f52f16ac1349822f31e8ad28c595456b4ec281f1d344b32683f03d5856ccab41a9dd83d6d29e7d6af9b33a1a3df043374f749f796726b2c2cb49ed27bbd4ce3eefeba9b75658eb585a368736545a11ea1eadd0ae8bb134ce1c598aaf6de02048ccfd4d72c4516641f3cebbee4d97ed9c08d3d4c54b94665eb66ddf5d028d4fd9e5d66c9ce7233d35507144757d065bd7146a31e1e667b58a6c4892185474cfa59fdadee59b1ff23c026ed45a145f9541d06e7012dfbd98ce4c635dbad744aaf6576e794fb618dafdfc6393803153f2a26f62a70c85165d5cdae9b1577c5ccdba6758d42c0a33d2b5618b1fc5cd6ac42d6ca84bb069009ec466d32ceca9a74ab12f2d41ab6bb1a66129eb69bfd76063f2dbcbd91c11ee84b9d013b1cc6e73da9e3cc8ffc6a7a056f0e56e259d9c3cc35398111411e87944c63003ec73830b6db4c8252a433aa01c3e13cf24ce8b3c836498f5341be76b6f35028a024c7014fa4f85fc5d700cb856c813d14f694de7636385c3668f6534ac44bc1348af268d9b9234c7ccccbc3c54dc87dbd574296c43d6e4b2c5852e5b3a420675b3c1a7edd30ed0c9a6912998abdc1c79194f4c55f534507b390d71ed88e348f6fa71c1bb87c1542aba3b59aac72aa214c843ec75ca04486096f12e80a6c56ec5d1173108c246635dffbc53274ddfca2fc4483d55cbd815b76174ce452ec54f3ed3a361e29fdf4edba21fa402f57761a40d606cc55403e39945f492890c2b560f189124e29b16b70a00c3ae9509e5abdab9e303ed5f64b635df8cc84fab2f181bccc63aa831ec18a4f2d79f5d5e5b4d62e82e87ab1e6c6e520fc15db91996ab58da06426aa2d5c869f6fdd5a3f60430c42156e9f9b66087c2b545a340acfcff0303e982ede0d7c6231ed7c3ed232554cf6af0fb9878736149903116ee3360df9b863aefaabf7c5598256297978a158c98456c34280bfa465a257511467fc89e043211b8f327ca26270abd40e1e55a66f5a663e05ed7740077230ab364c0265c7d321bb04e9c23914c38405164ed7a2d0e73caab6f85bdc6f8fca37209e01083c210a4f9e24683d61302767c13b55bd3869119636c58f166853527c2e9846b921c35b9037e9af30dabf67cc94f0e2dd13c4ec6cd528d9237d4f687a473019e7e6e489793e87a38bb90fdb9d278fdbb4dccdcee30fc7315122307ae30229d0936d747823b8962924f6adca031a976323abb0e7ff39b6fd28843cddb2e89ad2fd223195d625d710ffdbeb490a465d120bb11897ab7a9025f1537d659d84d8561f8923012d5aaf9761a54f971d53909989d33fe37ee111147d218ab693e1724af0ef3afc15fc20d9e70600783ef3bd5ac0525c59fd42cfe1c905a8df7203f8c4482e72fddf9c59237395654c82e1f360c7b59be86eb10848297635f5bc33e36ac7a92ecaa20e0bb8352ed8d03e5d99ab0c3611c5d9433df2655734f938badc1f0940b18c37ed193e02e35dd404e8a64448c89cdabe66012206032e51bb3569eb4e74bde766715264c41b6204313a68488b15925347bb408774f87121400f41e41fd17f0804a62e6f3bee2c1aca7c03178a049031945a8664e4346337e288a569213b03f4ed858fe9f69ce8e527bcaf202a5acc23acd96f83fc1c9f48651d701ee6cec695ca216fb5320a24a6ff271657ffc84ee8e13879153ee20a52ab1d9e5a9b0a7d7968c963281099411d11ad184bd403de3175c69eff4afa852912f050c473174b7a9c8d75bba37fd1d304af6e00fd11f0b6a11b99dba724c64258aafcea3819e1fcd6cd7ec3ab992c42e8e4d20ec2b8cf049ff41a493135ad2d608e32b5b83965009f5e787e3c013fdc26dfaffe005ad4303b5d7cf91d42c924eb67481ceb8cfc88c67be2f47bf22378b9729f250427e2f5e95632af00a95bc5b892941a58ac10d455fe56f2b8dc84adc64e840195db7039e00c599eb60705328c4f50f621b4e6692d061c3bed5dea0833d14dcf193b4d9cbcd225aaa9292f76b499f7d0859d39390f02aa0e16de848c463f1545f889e67a1113b9e42b7ff2b94312f5a10a632e50c1c40aa6e40fcb239412b41f3131aa974b5d7407db3a633dac77a69cb0eed781362aba33d6f5cfc468f737b53a34e06d77d5ab663f9de0bfb63b78306bb1c0262ab284947004eb4960fc3a4c794a8c6def6c24d0e5ad69f4a17ab577b710b074b4d15ea7382ba2967cb781b1886c239c689b5aac84ee32f01aa48c4f0bb717edc3658a365283261f38b47e2ffae4da97d90034e4df600381c214b96a358c72ad636681082c9147bacf9c7f3886b47d44f9cf2e6da843e98cf62b4c6bc2b56bc0fc1aa0bbd1e46b1b8058028d4194f2a6d93c8904ebe59c15342ab5d64844e6ddcf3561e652a44815d7aa8f5f63e12abc722672127d644243325c31debba960296ec984d68cef6e6a8143359e237142f84de841a0b282de0fbb49685419905a3cff8df737246d61e944b09f742f8a1d635ec4cee24343b211ade3e53b6b033f80a8eddaf4e7ece65bf640f798fd1f18a6049d5cf78eb8b5c05a297b8ba47154d9294f193d6a01d51eb3dcc4c6750b02a2c89e521f62fc7ee68438e1cc112a6a213d3ed64f86301d25c53f4a70416a4b08a819c999319d4bf87a06590b2a4e81bd207bb7ae8fb3e877498f1055e68a86e207e4033bb67323579ed444da61dab601147dbf387d8a8a34c8b809c5572e75a4ecae35a12e58de3eedd12b9aff2b76c0d26617b7422e53b31162e171cc308136e68abf84bd5de7a654d41d1d36ee52a9967ae58a52b117b7e6020cb398095b681bee02c5907afbec3a1061f4c00297b26ca7105491be3fc2a8fd576039177da10bb7a4090d0ff92b0dffecdcd0588a10824f1a86395896c1c7025552a8b58dfb35b5f68182cd96883691c8992bb50d09bc58f6fe477f93ea5ab1119769da211d45a54b54016e1e964a38a8ba3c2e9148f785b754de25b623ee8726b9cbcbd42529da6ca0103518ab54065ac450255eed13f3f881ad5dd412e832b5fede4dd00b4af87de6389bbd7c26ea67306a1f92fafdb50f86edc82a86c1007e696cf734dd041a1bf45dd358476dd3d841dfc329fa54057b2369ef332404bca3801ddee20db05a882e618b8556b22399e67a8905acfdf71959b2835506e6b9a1653cf20191f5f8d3bdf34ab3e988314305e80b7fe954eca50f61e0d8bb5ba93cf729068aa2c2a50184347490139c69a62fcc760946297abb66ce6bbe834f53145e4edb6c640e5f2197f1fe3dc4eab1ce388375e4a1d364842f800882acfc67a7319cee49867bd5a4394e50cc5c1a10be7f1c04a4d2605d0a5014aa8420c0f1ad4f4d6eb1c5e10196d18b12bef466de902f312a00220abc3d34f3f69914f08b44fccd2535ba7d802af4066ada23ad6064b10f54f67567a02a36fc5953693c5a8eda667d71d2f331bc37272369f5447d9a2e28097347e822f76be9863415c1cb31c7b00b59d6b0ea80d3ffb3288013359d2ba0a908d85d60f792c80da29dfe1c95f139945ef2a475e61efabe06f34d254f2c3a055c4c5ca919e3ad18ff4cfcce86aeb2422fe0b13ca60abe89afa52af4410ac26c08c018c65cfa4b734e18122f98fda60d238dabe476dad4f5c248994768a851f1b654cc9ba154d29c540e230803e6c0d5cb5b0871317ed21bd3025f2940aa8a86f3072569067318af91df5505ff8dffe68bb8637f358b9b31b15493656f472dce1622b58c559c6802eef0d058a04190554b413468d91c764a2ae49e4fa21a353428be5d88dadc5d49f77a0690b98c9426baae2e6c5cb19e06a4c9b627af3df69277e57e1a12bb22edbd9390e0db49afa5491298620ab76ecc392ff7075a468c4051946489613015d7da8622c3b18fd5cc2a2a7f76d125f67a8337e3905d75124d6c5473909d1fc31565f258748caf52566802dc9f17e10b8d7b083980713a53c76753c715b23f8bd43650b327724b74ef214011fd3392f875f08986d5bdd2667d784666b019d2a51218fbdd67b71864a82567000f468d1192879f38b2e84b66af88fd819750e7e3b7c9b3da585c9279f2d8ad267d26a65f67da93724c09c928869b38b8e7b67a6ee8896cec3a7f7b4e582e83e2378791a7c82eb92ccbd0f1f5445e572908aaf06fb13018b09e6d994c6ad595adcbd0d28e4369a2ed734316c69eb04ed6cd3c9ce93c18d45f6f584392543ba553559dcce8e4200362373472a89c26788a73ff22f03d81465f2a1d7da911b33a631bc6048201f4ac6217764741692a551e744ae531b87914aab7ac8ffdb772a6d1c70f09420965796d962c9ff2944be1d77d30970c11aada35b3d1cbf8ca0b142cff60ff315ab09fa73c48806452e1284a4bbeede138c044680178a3fe4b36f71efa4be8b4007f0bf9a8cc355f1c082a9c382d00181b840e1a9f466ab69baa0682fddc4a9c1187d183d8e04d430b688a401215be1ca636dfd0f1b91821ac5a59d944a117eb6c6be559d8dcc8b13792788e929b83c571bc4c961e9af0fdff9dadcc4f513354b115f6167d8a01465812c75085aeac851c73e111c06772457356e67363bf8f5c8e4f992459decf0ac84f77964bd8a1dc931b1e11046b1d1fb3fe55640d4a136a4a57ab41a666cf84af960b449fc74b17d742002bfa3cfa7eafded68ecbc90c75bdf30e9e31334576125a59783e7e695223b967782ef0d4e30e175e8d2726dc64479847735937cab8e8214c901a23c486c3057878d8d319c5a5e31c20908ab14db63019ce200c67a769f9ce432f27e614bfd0c1c8c7e87764695acf14f9949b088945aaa05321b1e2fe049708b345f5fee647abf6402d52fe0ddcb9ed08deb8691a9e5f29e4d22c835556d0ed0fd76aeb4e987f1d12e9a5861ebed843155b4601e50cc1985ba659dcdb5864b24293793da0d70183f01e13263f1855cbc94873a21ddd1a088362f4416acc619b8b27e34e95b8babdd09c1b7eb0575a6f7b5354ad5c4f1b1347fd89c56571137707dab62da48ed8f49869abdefac4074735b8056d03da24e67306c28256364bc5ed54a947ff67605207d99699033e43a1bc9d82568ecf94b04ae6960c082dbdf8d553fee7b49a201619e5410f24944a6526b06ba37910053e3ad1389a66b96d0bc3aa1c528d5554ee4fc703e72f3ea9844ff35a2a5365bba6b78a66e8a67cba105d7196302759bd7650a109addccfa9fd351cbc4069849431c618fc8a23f78be3f586edd95af091625c98449690e8fc45009af057f14b16dcc82156e7cbc2c6a01a88467c8bce20f040875f426c3655858d274febdabbfef2d1d23d1f5ec6442028e599cffd29567e481ea8468eb0ca4144f8d71bbada32c35336632297d5d63bdccdb016bdb19539c8a26787e49562424b040d1e9cfc63724842bb5f7f19b757eedff5d93aa7b1cd0696c15d43f64462ce88b6f530db07e19942989c1b24e8b788371d2d076d9a5759d6dd7de69aea467ecfb99353b9dfb4133300bb3fa2822f39fd9fd9f44a21576bf100c72c01a0651b505d57481d468a6c39a9f8d0e757a73f84ee5fbd524c29a7821ad43ba22bbd25bcb840349e7e6cf1efea67f7cb8e0a0e072a5d065d44b9ad57142f738d9367f921243bb3b13ae4102ea2f66dd4288f830cddf55c971e675aaf5ca5e670d88f761e71a9ef5a3edcca6781c0be16ba88266c492b9711b4b3e17f6fdc179a466fd17085ba20073d5a055b0958840b93e830e059bcdbcb3065a7c74017e0e82145f4a4541b511bc2004dfd228015af7e030fb2e5997db03b31488d5053182e99258b59c587a770ac62f61882540fa2b8827584e808426a58e20527156a552d00df33d0982082b802c091f54932bf7e0976d9f954196ac5e10d80eec5c1a1d6fb0d859c5dbe7d3885bd25a88f95878bd6b9f248d53230f057bdbe07e5b3f9e93eb14d309079804c18772d33d2cc8f308bba5bfbc330360db9bb1dc30ffa3f636c0c41c7430504571f950832a6deb71ea552bfa90a3e2c370371885f23bb940d779fb6c2147f2479071db10de6a9e35ceac9a6fe62a177129a1bd7c8b1e826a29c88b27c69154230991d2037098f8151a3e361cd026a76804c06ad589ef491052cdcf3f1b47d6ee931dd1791454ff083b85aa6271dd8afd87611a12d2458a6ec74a44c14f8668232c579cff1aee62b324be67ff4d9d38ff4b7063b51c40c5f6a7be17c7450bbb79ae643c0dbdab1d6f1b6defff6363db78cf5f11de2e0be6a27bd4f801d64002b31c49038eb36783b57658ae964a0085a92c9433f1f5d1055d0743e07873a01ffa76d0cf653bf3b6267e70d66b6b6dfdfa79b5e9870ba48796ad214af7308af80c9573c678e217394f172ce123740c8b0028061fbfd8c9af12c370543836156e89573a3abe86206c279e03c1877eb4f7a40c2f6b29662b1b616c9272d823637e5f1f0c7457820a619d129123f60605f3d6e50f73af050d9d3553717e7e709e106438f87458735cc4ad12da445cefe9a15affe629c647c811d8f09ba9ccc30b4b18974d02a446e1b968dfc1994b7ea0cd7a8dfdf0cf7289134dc21406a63ac55f8c8b8d289da4316ad334f8a4750bdb7f759544e01a4df7ade5509b69c23569a28663584a5e722e05c400da09670ec403e037a22936b88a38429f956f956ba467c95dfc1ee60b979face6981a8e02739dda1d27ed657d9e1ed4e7c6448684f792b1733e0f597e52d6e44d71905e5b230fe8d2d3bef7d51cdb512da116e8e140ec8f6005a3e2be2954a9e214aa1872b9719c042ac0348c21afc740b661dd89d920867aae48a3c1339fa71317405a443e68483e8e7ced5e850482825a0044f93412be3d6fc9128a4272866390f0e3723b1b9234c92638d8dd7572990ad148e0c29e2e9c111b61dcc434ee06f04240a418fba5bc62b5d8c245320d81b64647340dde1f7af0cf4bf2f928bb99398787fe1a83b781b2c82a93b6afeb6363f4e775f3d4091347c5b39c86c8f542eaa997bf934fe68366c241994bfe4bdbbb624f365f390d75c8b7e629e6feef899ee69fb3169da8104098239afd948a241ffcee60cf3badb7c4711c1acafb2203c6a2a23e15ed087d898a4b82f104ad38ff29151812023cf71c62119bf266c10149a2f9ed36f1ea9f9f6566546fe18ad0112e5cce2719d64d8889a3f76f0fb7fa0c57525294c098a7047d62f6f4507d6e5579731336ab0b663e98fb155bb618dafa645c2dd9efa4c8f38f469f672196699be48ec5a77b76a7cdd9e198008d1e3a2a486514d4c453c6c44ae2da622cec31234fc98e49168f284db3a968c1cce0c349e1c0f50701c8808dbe5012c8163822d7b7de482dd36ae08fe89a96b44aada8a8b59f7ce7c2a4361712bfacf4b2f5bc6fcb696de06cb2992da31d38ce70fa12f28c0cf3380972a4fb48b34b3352eeefbc57f81ced6e9ff9b9104945cf04159ad432dd437348dfd5b156dd732def4b9a2b90412b34d9a6d7346f0af10fbff54fd9e1a5dca2f4bb881029daf047978b6c328cc28edd1a378070180c4b5a4d9ae7691c755e2ddf5a5521803c02b1b54bb3550f8c922bc5a566fa8f54efce750f3576a1f60ad453ea89f1400e2e9338b0435a23892bf5dfe3f03cfb13af9fe400264c5fb98141e94435c115679125d92a7b6e2bc361812f0bfb32a24143c3b088c8442dd36c0b3e5e49380995868a1a38558d8f77422b764056eda0c2d02a34fd2b860c0ded5a5b2e67fed0ec0cb522f89e4f4dc5c5859593c3c4b80d10db0742a984d000edbc1c51db3d3d6e3462d215aea326083f112a94f4e26ae4cfb8de1769a21eb842c1ec3d030ea5236d3bfdf11f1b3e5c68be42249aa6095e29f27b9e357b4f4a5d3adf8ea0839df23b505ef8685ba482803980518f2ab97d888b7874e8b80f8427ce6e5b1816c63d4f400f807bca1bb14fedc34544fc3d912f7a3b46e6ce19455786cc5fdb1797efeb0d735e67c94892c3f56d73c056168cd05a110ce134d41e257d5cc3842733bc72bfe847f0645f326f95c61f4ce945198a44c9435454265c67225088f28a4dd522b731fea54085523ac9d87acb6c3957cc1b1243272b102b6d089361da27070a372bddabeacc4a490f12b3671b5325b2e17771e6e0602149ffc98f005438eb385ff600ba71c13305ef2d9eabb3ff90f6bf70bc2fdc5347e1a76c4bde20b8b04c20c8af873c22322853b5ca66b4e1d32735531b5c6f8163ec3d2b6aa21bfac87470efe2671f97e7648415adae28684ce32a078124a901d1c2677d4e02115f152be7ae76204498f71c053b3dfb2dee0a11988d2fe10d104c79dbbc0da1b6c802f57cf08a2e3ef01607ccdc80a3943a7dd4847c424d3cffaacc70216aa66c578b08a491c942c160567afb43295059bb64eb5e2998d9ac03d8f0aecd3e47ee8f40f040b68f23c382c7eea86ec5c825baf337e6b88617308e9b59c7af820d03537f8bbbe48ceb2c206cd57d120761fe8510a17ef5eb5e4f9bd58121dfdaf47ef26932759e0f8c1e420bdeefd3617b0dd148dc4415ba22c4c10c094054cc7cc2a8c020a69d55fabbbae57eb9eb9cb37330f930141b3676c1a247e4d0dfb4121dd53b6ee1bee8387ebee1c4aa90c9b82091e00874a0ab8c072d42c2b0c246c0763c30a544d042eaac477105010104a1de775dc0f03e13d9c4b9ee79ee491b86b054e32e35cd23c12cf774e4c2ac5bc26abecaa98a749b65baa0ba9ecaedc936a19be81a3ec85cb81f64155aee92d56254751f07270336bff7b13295375116b10cb0f4d1ea879410a940ce898b92a6a82bed20c706878e34649062e5b627c9064c41a3530b0516a83f6c878c1e224c8f74a2f28a141d12c119326a57fa600cbf483785750bd3f6904f4c7e7fb9f23668b4f0227c5a5ff86444ffa41e79e247a1cec5608e26301cf2d85136af6e4b073e24d111f0d4c274800aa600f0c3927ee04edb9c2e3f364a7c547c149c48e84de9e267c6f3a27c89c70787b7ec881f0e3d366c80922782aecf650d1fdf0c3878da796be8a343b14cd0a5a5604f17b33181c91519f8e0dc5cd414d143e32a2253ab4af04f95ef742443f1487c28d85095b3ef0014811096ed050f94ce355f8fe24f27d914fc78612f9723e1a4a9f4d0c63d21fe034faf182be80010937189ebca16c60582226091ad804a005163e1d39dda13f362f60d152268d5b99314a941963870b9624a69419a3870338283c785b52252d72e17ba525e8f92d7c3d28050ca023a745a8b9877c69e0e090c6e60bdf2b9d414f9d64644e19e9d0592d4e9e2557b909052dd0b9fa027c2f4c2de9ef87910ee0d3b1a167fa6f4f8ed0b1a1b8f4df9edc3120f73302d5db97e38366a37f18be0258407501645024df8b15288a4c249fef65987a9b3a720a033572039ab0e5832020503346f601086489043768e005f2ce31a8c0481fe8fb03e4ec7e627c808eed0e48b17fc7a7df05cdfb9b7caf8fa866f83e690614b75fca64f2c540719bed8b368fcacc62e50b278bb4ee113946c61ac5c2d65e445554eb2a3da98c363f4b32e98cf4df54684bf3fbfaa05a7ab77ba8df6fc39784b289814e1aebb4882e8567f8fe4d20345bf972d66e56be8fe186fe8849f54673ba13487b4b135314874a9c2b6911161a445b0d365cbdd14fd6009df2e5256a88499f4d0c5852a8f4d9b0a1923ed0564e09c5a11fe971d0f09d28db17b62fbfbfea0934015c97145982e8e5d1b3441013411055d1e31b402fcd89a00204f1b3464f500c41105de9d54094c18f02222bbd38406f7a783004a107051b2f86a03d410c9980a203220bf414c02708a2297a82f804f1be24d0c7428a83a347c3e7c181e40e8a9af9dc59e80645e93f5008794d9f689a96cf682bfd4f1f289fdbdc635ccea3a5912fbfbf901d8fbff5519b661dbe1d0e9fde8f4602bd8d84e6368ffe8174e4fd3b87ef9170e7158afefc2ce03b9f87ef75961e2d69de9f330f2f62d2dfa81730690a5cf6a4ffffe32d4f9e25e99977d68f899d54ef536f54cbccd9340035af60d45022cb922ba32e7de4caf759ebe731dd606679654467077cbb27d073c7959741aa14c70f09740c4c08a0cb95910c0012e8b890c0a413c39a2a5746329d243180414a91a0a182e595919c8bba8b96eae10b02890782b9bfe8dcbe53eb7ee8de5d3e530365e9236656e06c72f6f0f94cd344e143eafaffa523396ff97c29f2697e364d1c8ad749df80ef73de7915b005fd6a82f443ee81740ff8fe03f34fd3e4f2a18001073636d03953ad85a0f8e9ed724886e0c090640ba4a04bf4fc49d167886f006f4834f196441aaf0b0ebd93014c0d6072c868976e613ee0fbf2bd962a925564808ee5a3b29c1e0dd154d031d4c56eef362a54b4777b0c29dd0dc93f3fe7b7704324451ff4019f91b9cdcfdcc7033a9622d529de2af3b2ff5fd1b19d31ff7f3e32277d388be51daaef955440b579f23892a280198a1849cfbde624494eb6257927398f76e694de4bbe1449203597b02d398fbe144920c9972209a4ba48fedaf1eed8b1e373111db8adb78e53c799b50996f318e7ffffc31685b00379a6adcd9338eb162c7bf61c71049a0fd858314e9cb475711f4ddb92746cb7c5cb4e4c5eb1664d1df468ef18e9975103267da02d18a9de6e17a125d0738fedca8cc19938936dcfd0f4cf124e28e940092c2d8480e36396311083049811eee4806567058523524c10220c1f0c0040c112bb35b45d9adb42842b497819400b70e89439d3427e00809a130f8c30a20f8e89b1a8e8ffff7fe7e64cb3256739b39c09831101382be2b4a3dbd04e22c6762a106d6d178c29809c1f8638fb7226441db420ceaeb4f0d0c30c47e83007092096a0213950db4105382960f1e00710e8a0a5657410a28a9a9b3929f87034c30b3aa0e0021321a0d0c3d9162c3c4459220f1d385c78409b7396c1f3d065ca972a6d533ab8e1dce14c87efe1ad4b9d313bb0957193031a170af8f820e70d14124e1c8ea4b97913878f0a4fdcb9414341337245841aa69490e50836369cc9418b73264644134beca0c10e326ca9818633336d36031a1c1e44127cac1c51c2932fe79bb335328210620d113ea0f0031c37672db6b47085cdcd1300c872ca70b6414323208922a06499a1052543984394418b013403f3b2654f0b3fd01026071fb45906ad87290698b811c0932c237400c3187ad6e6667efecffd5c5227359115cca9c00b1c286f509c54a0936c54f69c496db6494dd3344fe4db5a97746c77aeb54d994924be8f214c9ad31424a0633ba50a6a29dd9b34ef1d8397346f24a8349bf9de9cd266d12b6962aa75ce57709c3029c010e72d0e9c25be22c2bcbd193b73526da68825a98ef37e3c5054497b826d8ef1410641940ea5afa53418f4f5a570434d144da045c8a4dc8683196196454dd01d6e499b123b40454dd0bc3f97f97c6726fba32246d2df19f6e9adb5ce477236e28396f33ccff33ccfd34c0f75d2b124333dcc49cd3d4383292aa34397dd1ac3890bd4cca77b39a04513a0427b6d77aebdb1b1e9d25eed4c137ace9830270517bdf5d19b4a40bf8d08edb51dba0d38d384d67cf9880a26740026073d4a28e1e54a2fd3b1227dea1386a991f83e4607a6d6c149c9f236e1c0c8454edc893bd9984696a691b9bf8eb9c6d46b9c20211d43d78c3c9a087c2d4cdc7e205c3eb586e0f74be947d1067d7d0a71dbd4a8d677d2ce9cf3ee8879e2be749d1b779a4a57e78942b9f2e51fa32b7d8582cc555e3b370e4a4bfd52dc2e5aa6b82b5c8d14873be2fbb7c2e9a5f3344d14b8a313c59d4ad87230d624789f1bfa6cbf24e8796a1569bf0fd454aca5d00302aad37c3b734a02098ce86d6e23799f5b822f5dba9ddb12b02dd957b82edec66d23bbdd9320c9bec21d496024b77b474bf695b97947467647b8ad3b3292cb1b77b466eedf4672b9ad8166d364f3e5df9f1ae55f3ab799e6d44c7d9f753e32d392e87922082c41220cb69ea09a4ea7d3ed1c509d1125b98f921dd03114d53ba3e71261d75be52e18c25c1874ece1740dd9ca25c999862f48a0632895961a4b51946798c15d0a26af064ffed169a9de3f149ce0829a0db298d1008b092d64b952020b58ac802163c1950c4818639a3bd3ea3c4d130e132b178cb0824e8db66cb0954973b8085ee34e53eb26195860e68b0a6a0c50e175d66b55a698f192821a0ca2981101006a68d879ffff9b8ec9056d664240418d15746ca77b2b13694cb7edb29cdb0228664e10505d18746ca7b3b620e3517284c447a6f7b1e8e85844a68fb292b3282743aa93a892e62bfd48ba099e23eee039e28823ead839a24e9d3a73e8d49933674d0d73d6d410e7cd9a1a705853c39c3535c45953431c2a4edaa83871e2a48d6d899336b636b636b63d6dcb36b63d7bd240d993060a1e3769a0e84903654f1a2878d240c103674d1b386bd6ac7943b3e6eded4d8c0c64dec4881103a6853062c08001d3c50b982e5dd0a8e982468d9b0c68d46841a3a60b1a356e68d4b8394183d0c3628b9ee5133e413409c249012438d1e384451028da249b267ac403ea649b190d623739b3ce3c8eb4d1c1610e1d1c70c0014ed2973838c081b3e60dcd9ab7b7373164dec4881103268c183060c09c59a14b0c6756f0726605306756e87266852e8fe4dbed76fb0780eaf64e09cae633ea3acdf3dc47ae7c270c231d32d294d1214c191dc4a4fa682c2da30398148a2f2bf0e9cf0f04d4347fe725be25d09de6f7e541714bd2d72bcea03bcdfbf5d1087ab299cdbc29a0e2d3916973449933267831933e163c58f4a4bf734b922c71484f3d72aedc90c382070b13e967193981022d7c7440d0029727d2d2df687a6420b3838eb3374e54b1a300042d70796299be02a71e39576c48bd2421b928427fce0fce40da42e8ee4c42725184fe9c1f9c81b485d0dd9984e4a208fdf9e00ca44d85edcbf993d3fc52e799738a4b9fa009a10d9a10d084802684336e75d69c71a373c6adce19b73967dce63c5145cd13549ea8f2449b9927da2c3063041e192f9831e24efa403bde8c1178cc18718419238eb0604d9b3668d0a0794383860c193262c8900913260c983061bc78f1d2c58b172d5ab41875e12478a99f9157c6ed8cdb47ae7c1a860c396ecf868a96d43c1a8bb586f16ca86049abe81d4218628d136d48c0d954d00ab276e0dce6b9cd739ba6a9b3949c732e2aa2a2b5d65a8aef91ccac19a12777076dd30ee0f6899a5313e0f6d9853bb20372e43cfa92f714dfa3e6ffbfd92205f4f714fda209fa5beff3d4da4ccd9ca93451e5cc19884805f43ccd7de5d16889933e9a0fe64ca58fc60338e90365e9d850bdb5197c2bd30331e9d88c744b10534c2b368459fa8ce0e54003173879f2d6d541f5feb36906928b295a03b4864e8742a53add23e932c8567c198f59a48dbf5ba41a83c781ce97d1c1420d3af670845d2ddc7a555a00e3d6ebf57a36e847ea5d90f5bb1d8c0b7c3afd49ff980423039f2fc5cecacf2e73f1a520d356d62c812535b7d65a6bad8fc6e023a936a9f8cedde9334fa02d14e99891346b90f3b253b2630b020d6a308605cd8485a2342e3c91a2e6d4047ae3baf49111d75fa1a6d20b4860e045cc990bae7047cb03965ced4c25d397e7cedbd55f69113699246d4256918b73e3d2f3e8c78aa986cc18adbf90d13ff0a030439a11153461c6848105e0983764b4de287085d749b4699edbdc5ca7f98485186a76d0a32680316f1b6cb11a1323c60abe18c284d9b3c3191ad0483920d53b7d204d2697c3e1743e148766c9f138f0c180a18bf48e9c9e48bb1d39cd9db99ca9736ee796b307fbb998a607e6b9016f6720d09ce694b7f3def1b6d1e4f14cde7e7303240eccf7ed64206a00e4e547888436744905352369bb40c98cb4d1b93f3da5fc78f1fddf90b39c49524254194f7a961143263dcd9d41c81995f3816fa704a42fd201521f0ef7a7a9334ea70675f1a395ce5d826feb0e8878224808c1b7dbfdd193fda393ccd483d3c4e170a631dd9dbabd7b12c698777477527d64def9a5bcf50be86f3a20f8f2367da6ce09ca03fa3ab7a3315d97773395cc2d00346f7de70e163a5996a9dee66e017d749e708eedf47ea13ea8f9671a828f1743093e6dee5ccee79133e71572e709231f196de1b2990302d53b8bb04b77bb9c81b64e7dc485b79150dd66fb82cba15c7c4727a0faffffffffb7fe5c82ef79ffa76922999b869b251ca3aef3ddb45d9d47bf9b839e57627665b0ac2143c2a9f7b9b53ef398f3d4cf42194da4ffaa29554af5d19b53bda96ae857c1c7f5576c48307465d031b468eccb24d580d2605ea841c776e9799ea718d39c12d2670b2de89f7084799e5afb909180aea0bfdbed76bb1dd2ae4b519d1557d0df4fed94d23c0623cd2cd21c3c7a53496f1c5af71626f38840f3287e0a10c0498b67e3e62d1d434a75119b37cb8c5434f693669d11691e284b77d1491a4cfa2ff8cc6c6ad3c99d5c868db8a9e052f3cf9c4b60a061cdb9848d9c3d39254f32f8f9c08612d2221b544881f0f9529c394b8512a8b982ef91ccdd276d23aebf2a3a72659e5741336cdce6a463a85b9c346fa19de5c50ee8ef8da5cd910b5aeaec87e1425a74fed2ff075a7470d8f8fe68ec98c5a4e7d6276e0aaa232b426642aecf1349d839cf13b74f33b742fedf2f0d8a2ee8d88914444a91a68e906132441839422cad04e04aef9f9ffa3d2590a16129420570c45ce92df4537f068f931c963002ce0d03b8d2dbc54f6d3a4d2a70d2e60905285cd9706ef3dc3f3873ecdcfbdc7a97e554ab90a3a3c1e42d68ae2d174627e51c1c732af7967b4b730e4e9a0f607bcb81819113f304fd3d9603930393e6e8c8c04092fe3926a566520bba334e8c71d3e9743a221074648ec8790ab777790a77741ee529f3e8b5a9350a18bfa4ebe43539e79c7df86db2f0a60487372570de92d04991359a8f742f7f2e9739f3799e671a346752364dd3ac73ca399225003b50a981ed89277aa808bb042035731cdfd19dbc02bd7a81232025fb25157cafa4026af23892e6fdf3837b632393bed601ffbff4bf7cd4c5c32f90894c758fc5618ff9ca1e79d91213cc14e4515c8daa626a926ae2614d53504f50614e4e5155514bc0b8c36ccc1e79fbf6f8acef2c226a9434e3af531330b8d49ab96fd10873a3118f6d84b9d6ff57fd3f95dbff4ffd03ff1f822259fe3fecd11654fe57571df6d56de15ec6c62c927d934c614e5153504d544c4d4e3c38f5a442ad4f4f5054c13eb5d463fec670510933c1b1d22553bb51658a593117441e6d81f4fffd582cb22d140b31492599eb1e9b804f4ec0e052715deaec1b4b45411d8b3c5622d75edc682befef91ff7fd1ff27fd17b0823f5a3407ad930d8f5c7595febf0226ff0ff668d103ffff746cdd972d6b7b98ebbec2beba6ac78adb0e175398ed11bbeeca3b17da1bb75947bef2ce15bbc7202befc6d4ddc1be31dcb9faca5fb1a49095772db5488f2248ac0e011ba42bbb1208161a3f76ae762b897cb5b292c857ebff9fdea9e91f1ef698c7b09515b2c7301a3ce42f4fc6ae114ef236488f791c44ac65c5380cf71e02f840c51c3909745084106cbae450036c2877648742ef87c29b287b0c04ba5502002e900421c6801448786400a30dc8c9822c61c22c11a0e88222377240c03242431705367ac8fdff01ff2fe6dfeb5f27f0ffc34789ce622ec696f196a9f7372e32c1adcbc66a3f1e5d75c6ff2320e3fffb0da51c49e4abb576b1957d8be99eb16ef1970b936aa8dd0b3ef6b6e5467508c3fd156b5925a727e59ee1f4a44cea10b0f0d0a8c63c09b3ab11e65a56562dcb8dea108d1ffbbbf26e1caa4590c322c87548eb79ccb1ba181776655716192691eb30eec7234f0e61e5518954aa3ce658626c58ebe638eb6bbbf5236e95ae3a347b7b99bbb6fded71ab747374312e5c3bac1cc64631b67f1db97265cbd8b56587671cc9c2ff3bf0a8508f875fe07a649545276013d069c90d6bd9a57ee42abcf6568c856163cc85ff8fd48ab147de2160e158e9a2711e7f67497c1d52f7a78dfcbac7fdb2ee53641c514691774ee7d49b544e02747ab7c39d66cebf42035f7f067226905f4703f7fa73cea6d6ca599775ce660e029d75d66922ae9c7359f73a03014d9dcb25f5763eb53edbf299b3eee53c3af31e974f6df69cc774ce7a27441be9ac73a7ce46e89c733a03c92b7236f5ee0cced4a1c844390fedccec96733a676d0eb33e7b3c28fd936fec320ec9b491755a9f4d664febac94422a477036f932d07fbefe209f66d289d3d97c9c051988fcfa5114fdfcf9cc3a2391775a46ce1aa7b599f35366cabbfca3b5d6b91cf900ad4f9d8326d0c76217230305b5d018649c6691cf6ce6d742bd7bf97ccde67e13f313f3619cc98fe3056de65c3e7519289b55b4de599999cacc5a9f5bfff092322e675df06c7a11ccba97db695dce5659eb1dcc5ce6e9d32ccb475a99b3b994793e9d77baac71680234017a00f3cdcf29724eeb0c74a2e6a95968ad732e9f619987947d389d7119c594915620e7e3e95cdcfde874069277399b3a9f592b0fa0abb40bedd33a8dcb66d659fbb4eecc26cecc792a9b3929f3f24fce99462640f74c5dde9d59e76c95738e480be55367dc99abb42f9b9a806c9a5a9ffacc555ae716ba97797977ea9cb3551e40f774663e7767ce796ae72219bb1a2602b86c665e3e8b328f67e503332220177066ad735ad7333a14f469e5acb3ce392fbdee93ffd527dff96a7f7bfd60078e1707408c2084ff100cf2039de782a1c303e160860e84bf79210764b20861b83f7efc307687070c0294d8f1838b601507454c551c8508533f00214dc1e865a91f321f29621f0da4f6130f243a41c012b18b9e41678b3b63076520e036238917c4fdf362af087a3715449e888bf2fb5cfb37ffffffbf801bffcff5fff5bfc0ff273d8a761ef3759863eb1910c392a7dbed72bd5e0ee73307e0e94c9c39f4d395e6e3689794ebeda8ce9f14f9fcd135f0139b40268ac361cdca328742eb78e70ca001a84658f6bc7ed673068a340d65841372e65c0d334b1b3cb07e6bfaec9d3c949858d261cb38abdf0b1c69fa6c612ec95922f0c3f285906d28c5151273479a92250bded78f9095a58ea1e40eee2db1ac11f37610a5a03a9e0984233b993849db9d3f73e9298d880e78326c60dbe9c10085f6e170fc7455e7021d0c8c9a0a5c524f472f466ec8294357a5a602073bd46680c2c406a4f2a000cdd2a70cbbb206e49422a7b0642195d6d355e57a3b14e6d4d60e73809e0e5dda1650909d9651968e1e4feb27c85a4385e58a7386542f67a50228d7f3651d3db065d9db6911506cb2c499282ee780e47a381a391969023e25ef809d56aea7630184c5433a7df05608b988d18248c62ec907578cb4de0ea87b027a9ada12ea7e4e5d0b9c9529c5fb390fd838743c5def64c22d7052e1c8382313068e28c8dba96655168da25d8f88379596c3870f6a9774229d48b9109632509c5838047004f0904e17299acc01d49640a66c86994ba7898be0e881296e4bc20870dec0901082160a8e4c700693857595f8c0100718f0121244c843012d2baaa7a4180614b0cf17d2f449e2082212b861c0510b163a3719da70d902242b01ab01867e7c39346456f8d2858b160f3870cb2224e90026e0152b7df6e0293a9004122e0c5d2950d8b01b347aba2e51daa67839e0004217ab2aa91542bede4ee7c22805000ce9eb0f1f0a6ce9c8d2a002264a82e844b140c208211cf9f29a922a123a6780a384d70d1b523c5dae84242b98d0c105539a44b081061a40f9e1e3068d037eb213ba005acf796723a1ed9c44e81f7074b20efa066d034fce4f1c3d837ea3c9982468b2732c23ed06c0b90062a157e8a12cf453810bd2bf8c9e28b40fd7d3bcdd4eeb74387d6633e7dc03a5308dcc1696e793e5c9232763675d9e3474cb1287fbd1c5d021ede4a0e95cf1a345841c05cb93078fa8e7a2686dc96be074c024c017e77e763a7654b99e49a3a8878b61b913b3141a92c69b32b310e0c78725aecf12f7d3c286e54f7cd4c292578442eb68e0987054960cf95860a0763a59a680910286b9f463da15fdfaa8e110d851e96a9829cc1a3b2d4bb3471353ae97f3b2347db916e70c5f9399cf9f73464f070e015d03b916b95e6eec47e8478857c423d23560f251cbb530c1a8e1d62c0d183b917b68c000a7d54f8adcefcce69299e3140211e5b4ee4b67a4f3811b4291733e1377fe98a6a94d9db933793d17a7a913a20b4a21ecfd74395d367527d4c974e61d0bd3288df70227c2128597b45fee34da61a99d3ea81d0df7f77982881c7098010e9b354ab12051dab2ae12b031e5b64920c174009a62a70373e0878f3e6ee2d0f0024ab00a0638acf870c31b352ea440021726608c0b943114f8cd33803b73e4c44983c211230f0c7180811f3e76e87841c00a2232638e90308291098603b870db17287ce8a10872d9e70926961802b682e877839a17cab89002004a80520193e1030d7cfdf0b1f5c6cd0b32b050456b071ddeb85193c68516b6686982646d00776e90e3420b644c605bf6752beb077447883a3eb04933668530204479d2d7e10343c0beb6b2685829fd80deb86193e54a14b6be3ea0c0968e2c1a562880ce17a2ce1b3730bc30668530258020a50236220a6cd9a0613505d5a414f43bbf8f10757a8081cd0b69c6ac50020852a254f0840d88219121093001f738c1638114287870d1e6a409035fc10e9e34413bfbc2eb633ea1f9e09cd005d8897086a041d05cb2936e328319e85b32113037d10bed221be95a982c72d1b92213f154040599e8990208050ad4e28785cf45efc7d3ed723a9dcbe17066feff16ff6fc0a33d34ff0fbfc07e2cf2b865df24535f5d956d9547728ff692a03d23ff1fe3d11e034a3b69efbeb270cb6e98dd31bb69a0bdfce546757376ffffd2ff4fe0f672684fa33c3cffc42dd6b2dd68b695b68d1a3bc9468dddb262bd48c65bc23b01e575f97fe20e7337ccee1ea31589008140b02dadcfb5e051b56f8f639e647ae33f4dfd198147757974745a3686fbba77ecb61beeeeba9592bafa2add213a1374587e6d7bcc37bcb750dd716dfb43a1ba1a0fbf402654a7cbe5f9ff6d8cc5da7edc61eeee2a7b84f7eb86bd3c8677176bf9dbe1230febca37feffa3ff87f1ffdb280b81e2defebfaa69dfd8efab5465545551554d554955455541553d553955355505abaaa8a8a8a6a8a4a8a2a8a0a89ea89ca89aa882545553545353535253515350534f534e534d53c1a92a292aa9292929a9282928a9272927a926a9a054551455d454945454541454d453945354535430aa0a8a0a6a0a4a0a2a0a0a0aea09ca09aa092a0855f544f534f524f514f504f5f4f4e4f4d4f4147caa72a2729a7292728a7282727a7272726a720a3a553551354d354935453541353d3539353535059baa8254c1a9a054302a08157c0a3a059b82c1e059107e814865cb1423c3faebaa44c07a33927a4913ec0976047bcfe8cde845b0f7defbff5ffc3f01ff3fc0ff9f463809b6158e0122ce09c5c5c009fd3f8b474f27fe7f5b1189dbaa378348dc5671583feedd232ac54631f6dd3b0eebc724e2b65afb91e56130b761c3060cb81bd59823d1534e9c3de3800376ccf7dac954b6e549a37303abae3cf2b24decadeb83b8f96edd4d544a4af2d7ac555a59b52e1b277f10f7da8f47ae9e40fe7f3f7a36fd86d95859dc1b66bb31de56f0da2adde20e7377ac7463658fd77ddf2c33f77ddd2bf4fcf90702cd3ba859046adaf97fa55da3c66e4ada9f43f87f1e8f9ac4ff477ad4f4f276b1971f37df6ebcc95af635c2db8df7dad9b78b892acc294a95e22a148faa5a8354c1de9da4a8aa826bb0a9a9c989073b55541514d4aa76263586952fd3fbff411ed57ce01758648ff1eb16f9ffa3ff9fc28c836a33a816f3dbc6a6b16decb61f8766bd7d4de4ff1b785463c12f30562287416013b06909ee315a91e9c9894aed55c5b5aaca494a557bd312d2558145a53166c5d0de1866c5facbe48abd5c053229e35659543275a46b64fa7f14fff3ffbeffeffd3fefff77ffafd375197a34d7f9983d26e14d8c3991e8d1ccf4ff418f6631ff475ee622fbfbff40ffb81c59c7ffe74773d6ffaf783497fdbfd0a3b9f8ff36cefadab26f875b167e81ab8b64527b99d286d9a4ddf6e3aeb17b71af47a56b84b7120b2e24f1baf8ff458f66f3e1171823c35ef77dfb6ef95e7bfb2ae3feeed665631eb71dd98f4924bb6396bff1166bd938e6c8d70ddb5ce7fedfc5a3bfe4ff7f8fbe96ff37738f616f2f73375accaa3cc955f805aabd6c68c65f26f5859954f778e44c682f7f8becf1ff73ff38f3fc7f9d009b1c1450d8c15bf1e64529053612087968a12bec0d54113fc7ac24184350c15161b60316a0ca113e8e4cb4f0a88e94366882a382050540330963212530b6048907bb1a7a491ce1fbb7e5327df3971428a1c5f79a00f44f5f0af44fdf0ffaa74f87a639bdfad3f7e99fbeb6090c3b8029420f9217aefec7f76f4bb7f475be21a19c0f094b0268de9ff365e5fd381f909c9e0d2bc230b901c5922a451900c55981029113bd25e8efd7f974e49405fa3a5f0144a0bf7f61d0efa96803b383f3f3a6cbc1d9b9f1964174ce1c1893ceeeed74dbd1c9b9edeee8371d9d3773ea84f3288810d2b26b82f672501df43c35cfc73b73000c05ac68810f8c3d27112a98e0a4c010c39b9d1b5006453d2c71da490330a42340fa3e143184076e7d9c48b3a1003868decf268625442d66a0a38203187c822840f32e5a93a74b501334efa2342eec49b3521af4f4f960ecd1695e9041e3c109690f07232a3a3654a76f2687b7b48c79a787f4272d051367d2236d4fdcf441a188386e4dde4cead5441b2c3fdc89a188365707c041bf4c7a001c94464a0405394fe25ca0430c54ae0e80832ea501674ecf0f6d605e5769705c182505dc0838e1142a48d4d8a628494baaeda0b910dc920ad7a74f9f3e6a545edb44a1504a12352404e082707ce897e6c429452845288c02e6a583c933db2646a921e9e1cdc95520c9692f88794dc882304a5446b289c229605ec29367256b49b89c574e3ef4538b525b3b75885a5bdb41737ef2a0bcf682a826140ab9725e53b2894f9cca6b9b880489d4c9877e394992245c69488453965c388869039cfc6b80930fad40d7d27e6a6a6d398d282740244a6b63f1829891bc20a231791e937fe531f9d08f6d29f6c414cc4b8a508a508ab02d2ab3e1200aa364249b18c6e442296c5bb2246123129fb89c1295a7b44dd9442a605e57265f83c0e4454c3e14642259c3415c3eb101d334725b827901a1395b5edbc41d347f2257da8e22256f6296d2268588c50b627e41148271e5ac646d139ff8d5c2e443bfb43430af2334cf5c592daf250192d33292b44dfcda997c084d4b037b2217db1248da13c1bc8442a194293b682e944694c6c234a213957646f3a120934d6d139f4804e3e3d522c7dba22435cf27912bcd4808a20c463a8a40701033f189a6911b3113330dcdc1bcdc5c01f37a20c8eb029de3015c0e9c1da2286d7d8826640ef6605e17680ee6953cf94994f220f32e4bb23247cb1ccceb01d38bc9e46d51b23247d3dc2b733025dacc284b203888607913b9d28686da80e020827905d11cccab04cd4fa21454e65599837d15c95c880720a2a213b83cc0337be09353975f313217e2c2a64fa62173a12635b7a4bafc4293b9100cc11d8ceaf22b84cc85c484a8d1a42ebf2cc85c282c011d93bafc5292b9d0179ee73f1e5e3105ecc95ca80510035dd4e5978fcc85d22b3858a02ebf90c85cc84b092b50d4e5179dcc85dc183141049a0b85f121cc12eaf2cb00cd85ccd4110b80bafc5aa1b9d00d01147950975fa7e642483e486fd4e5979ab95091e7bf31587020a8cbaf2fcf7f6d626dd0d4a50b3ac4a8277ec1c81c953a8928170ee292f884124fac7aa251e64b26721ccc4bd8164508c6e7894844ae937844e47aa2111d629108b47ca85fb9cccd34546d13c1845188d48e10bf8678be24526b7391969689605e2d3ccf992824ed895f2a3c1ffaa92dc1c0bcda84605e2c3c174691a2c27321989794e76d3913dba2e44d8c22440d88da2f4d0d2cab45f9faf27c484d08929c8979b9222fd78858f42102597e2d9fa32f886a605e5f9e0b41f2c42fb1e76a5272dad9b689f905b16d3f7113b99ed806e645c3f3b6ace75d4b3530af9fcc85607c964ffc7a7a3eb484128279553d6fcb51da36314a264689f11cc8b2ca8d18b4e36d5c69694b620c22170e221d62ef07d68fae5cf59fa98e7c7e5bbd6f16d98facaef8a8843bd7d739aea9674b4c48f50c0216de4825923de34837de47ae2cd2772f42c0c2fddd30bb7bbe80eccd23cb3a2f3641553515999aa0824e544e52615151c1269557412dbd9d8d5bf70d6b59be616edcfda85c5da4ca37dadbcbb2dcd55d95f0d25813ff622c72bbed468205881b1dc9dbadaca15930fde73e635da712b8aa09da213366d8b861632b9dad6c521cd6795871bd3fe2b0ce63efbddb2111ecb3951d76b1b50fc954fec63770d982c340cc468dbd11d071ba20b6fbbebaed468b93c88e86c5f9df567d758d2aef6fabdc6bdf562d1bb6e211e848df93c81ec7fcffdfe929e844046ad380925282ad48f2994da92827ad1abf83524d5ae85ae3b72c81f87ff337aa9e4537045e2aca4948b77163536d191baa68e7876a515583674155c73f5a7197b12b5aecf2ffbd8c8db9586f37d27dc3f6aa1ed07295ddad90620dde8683f9ffb8ed707f85ca18769dcaacac6e18612e06a3f1635f5b33773dbaae3a54bec6b5e543a4b25d5f6e96549e71e419473a3d29871c180d8f927c8884b95954977aa2727262a2ea4ebc43f5a875ca298cea2908b5c463be6e270af0eff4a4bc41a57c40c9ff0729bac7ab350ba932b0f6d665e1b77bad3de66d8fb9daba39d62dd8ca4aedab9ba3c3ad9b843b175265407579b0f151d9e3ff9958220f056b0ffcbf8d4789a0ffefbe1d822dd6b268c7d6dd2befc7edc61b8ed9e266c3c29461ac11fefffc850ea102bf40350ad8047c5a5a428774fd079f1e70426bf9863bf2e5b0d265cbfa2b1c4235c4c5900db367bcc7068ab5ee1166b79357dc76566dd326afb8ed48349eecf1563f1659b15619d6df205d6a2f1baefd068f3916d28d61658e3d63ed6bab7463b875d51b5d35d4ee0586a2e9c84e3580000c4c4e299b004f802017b0d0808d2f595598d8d17111aa4430125c91c40905e4e9e1409e24220ed0a803e0828005213c99da63046386bdb20608a32f5c04e0c10015cea859d3db60042899c0c49b90c983126c044c7055e4c70c60131c6184103f80398195eedbdbbee368e61e8f29cc62c16f4f1ebbb1abaf6e0fb1967d5db8759341fe3f3ff1cf3f7fb767ed25e98e3c227a72eddeec9c7817154b76506bd0dbfbba7ceccf6220cdf3783de0865963bcd18a3c1eafd7b712bcb4b67c0966627a2a637259201056dd9589c90a4ec6b1318948dcf6b20eb6bbb18bc7e3f5e2b697656599712ea928272df40bcf137987317bd6f78c194c6ebc6720dd370c6c03d71e2bd57ed637daf1a80c53c21be666bb4d83524d5a378c390c41a58b971142b082a646d6106856a8d93200177a00b221c78c192925502e7e86c5214564c012c371098225da210710404482c3e0d0c92b380c0e9bbce00ef37eec5cc763aac26c8fde75c0c5219ca342bde0fc7f0fdb44b8550ecbc888bb1b61e55efbb1c8dbbe7b71c7b012b9d7966ff65d42eb64534d4028607049cc3ddef9ff24fe1f8947bdba0860b9cbcb65dab2b7fc5f2e5f2fdf5c3e93e53769f2df7bdeff3f05cbe72d9769cb6593e5ff7249c1522da34272f87f37acdd8a61ce838dd9760b02f6c85b564716da31994c3bcc8dc22eb1967de320c324dc91bc8d559e44ba39acacd4beba6a99d393f2c6f0edc9338e7c8f3c76e3e11947dea871c6912a0bb7ec1b9ff5618779f186d393b2c6db85671cd922bb8e3cc8126f17c25656431e37d69e4cb26f0c5b21616e562387c0d5e663b5bfafabeed86df70e63f7da63b527cffa86d9dd8d5d9b0671f8ba43e2da8d30dbb261fbedeb91555ec12f10662ae2ffb39dff955fb5666e4bd60ae947e5da8d2acc638acb05fc02d7b6c7679d06102fff31dcdbe1db63768874dfb0a1da933093dacb804c597bd9dbe1ced5fbab438559a49515dc763237b6b282bbdaf223bf2a6271b961edd6ebc67c6d798f23ff71e4c8d7f501a37121dc1b707db42e0bbfddebff81f8c10873a310ea3f7e5d23bc5d3736c2dcb8ad3afcf6b2feee754bd8916cdc2adfff57f1e80f37ffbf63bef7dadd1cf00b5cbb11e6c65609bf4026a623b7b282871dc9df301f640f04020f88fb7146ccfb2bb663d7c706c2fbc8f951a91eb9ba8d316bb6c55a56b9fbcb77ffb23af6b27e1cfe7f0f3cfc13a1ea31fb9aadbcbf301a17f61e3684d1781286f931070cf3a3dac3edd5e43b4c86c1ca98c74837486f5d1f5d43f54650aa49ab861b07a59ab490ee1be6f4c4c38217f2288f17f00b848f6cac8c3bd285b9985292fb76086cc0d80b2c5980f86fe6ffac7bbbfcaff3bfceff3affebfcaf4d9dff75fe37f33f2effef7026cecc990695d51aab2a24a81d998048159e7f17d9915568aaba10a87241e5c54d26954162d7479c54be6f8fdbadb51fd7961b5b2170fabaef9b753cf21c3fc8541e074922950a74b19673ad3dc64af68ee5baadcbc2ecf118b3489647acf2376edd1c7d7573b45b7187c3c27ec07cc7da2a7584fd88953fd656480e215a9c4466e9904cba7110aeb5afacca2a83585921cb7aebc2bc73e5f0ff38dcf0ff36c8f9ff1b6f0cef192a1bf3183ea086999be3c863ae2366cfb2e2b79775ae983dcb62cfb2d6de5555192466cfb2a484fc803c1a45e7e12e3337879bff97a14d0cff0fc3ffb3f9ff35ffafe6ff5ff8ff34ff8fe6ffcffcbf99ff2ff3ff6fffefc2ffb740e6ffc7fcff0affaf420aff0f80ff47e1ffc3fcff09ff6fc2ff97f0ff60fe9f84ff1fe1ffbffcbf97ff17e1ff43f87f10febfcbff73f9ff2dffffc1bf07ffdfc1ff73f0ff6e1a60f9ff2bff6fe5ff33f8ff2aff8fc1ff5f40e5ffa7fcbf94ff8ff2ff6dff0fe5c9ff3b6942819224ff8fe4ffd9fe7f4dedffd3fe7f694482ff8f00edffcffedfecffcbfe5ff9fff1ffc3ffff26dbff47feff71ecffd9ff37febfd87ffffff5ffd50dfe3fa8ebd12623fc02559845ea7814ff3f153c82e9c8cbfada9da29caa3ad35355902aeae9a943ad554f4d4f55534bc8b25e64d380cb7abb6376c34a63bc673090f6b0b2928a7212b25b6e8c370cf7e386d9fd9474d1a093ff7f7bd2dd2a1b77a431665ffeff451ee4f1df216061e576e318e6eadbc57adc6efd7f7ee051a639ff4d4dc0e0d25246a12405d78fffbf7a94498b2df2b7afaeba842ceb4c708ff9ab322d756511b65532413901ab80c1b2a5beba2af006208d5f72cbc3e0beb1db7e346e1b37e2b07e1cae47976da96104e83c150244462b2bb827d1e221949496f1ed2bef5a32c89ebc8e622e8fffc731f0a85218f8051ed958a9b4e38c23612e367c7b72d87bd8102d665f977d8fae5b448bd997278768c3757563983d0e39bcb2b132d9b25d65dfe410e662305a274be1b78cc71c8b8b2a4a4ab89545a58495318fe11b622e0f31f70873b1e1da61258ff97a432aca494b65936e0cc3fd5d570e25a5d5d5d66dcf5824dc63b42bfec6671d4a4a9944f218ee483686b958cc22d9e310e66252514e42d0e2a35265c3c2d875088bb9c738c976b5bf7050aa490bede5acca86f5b60fe1b72391ae5494939611e631cc3879059faa9caaa2a29a824f554ec2ad2c34958b751ec81e6fc530cb0386bbaaa6fd55c6bc156383ac5b686f2f73d5ce656595761d8f3c478f797f73e801de1ca50c10fafc692a05c7c90334b840c34d8b8421e68cb0c213f00b0c2295fdedc6b85b80b425d8040c2ebd3d2c4c595c2253dd2311261963ccc860da590e6c0519f6f8f183c7d56692218219194c9b0695120c8900a4eb1e8bc6b8235df7789581a0054079e3b6332539d2dc60edd49103400cafdb868dad94d4f623507d6136bd3c5af1dfb497c28e1dde366c6c23b08bad1d7e817d751be8daca910ad31cbbc63e5bd9feba6acb72630e76388cdbfe7663bb6584b9d68d1baf568d238f5b1702f6758d37866b102babcebef1300997ad2f376bcd5c2c311879834a5943ed5e56566a2fb3b25a6378988479ccd7980fe3b6c34e4fca3237393ce348add875df6117e3af1bc33e5a1e73ac9577adb8ed2f4fbef0e243cba9ccca6a18bb2b273bba491e73acd665bdd61ec32cfc76a1d70249dea3f7b7ebea7854ea707d88b157aedbf57663fc033eb23cee586b0f42f6639844aa67685cedebf01d0e3b5209f737e9beabd393723dba46b8bfc678b8b63d092b617e946a520e63f865c38eae5b8c61f6ac0fe1236fc5583856fe88dbce2659b5bf379474f424526560cf787b11a9f441a6bac72b1ef395c71d39ecc876ebed6bdbe101ba84622d7b2cb241acac90ea59cb8ab1ef0f3effc0b5c7318b44baaa1e2099ca8beebb7b71b75cdd3137c69bc32d7fe3ddf6a4bb5d1f01707f87671cf99f6f58d921dadb9545feb30d594e1c372a2bec78b81552645f152e2a8324912c3fe6384ba6710ff2f6e3da72ad1e04561e93af32c8da2ac33a179af24aac65d7a3ab15ab67595c6bdb55b863bdbc1f7388b52cec1e73c4c9aeaa695716e95c6d4ffec861d67d2491afd6dbc3fab177ad3d666137d9b1e20ec3a9197f5763cc7eb52edb6e1d8f3c8753195265208524bad40d1fc05b3377ef1ef3b723956ddfae901d6d2773bb74c42ddbc3ed5a3b2c84c71c2b767da4ae8f5ec6b560648fb77cb4fd5d8fac31873166bfe2301fedabbc8a5b9e6369b6c50a7b4c82a9604541cbffd7f09f69f84701080a4f610810c6887faf05feffc57ffa41664d1f6426fc20b3285c2f62aca80a521a3f4879e48394337c50d9cf079521f04165423ea82c820f2ab3f24165257c50190e1f64f6fb11ca02f568161c8f6601f26816228f6681e0d12c541ecd62e5d12c2304fdfc82e7ff822afe1734e07f4104fe179cfaffa0dd137b1eed83e2d13e063cda67c9450a488fa640e3d114be52fc82820ce083ba761fd4b5e283ba963ea8abc60775f5f8a0ae075a0ca135403d5ac38f476b601fada1c9a335b8f57e4b55ff5bd2f1bf25aeff2d0d095aa122c56f05518b9f12f17f4acaff2929f99f92dbff9452f89f929bff2905e07f4a7cfe2743c5ff641cfd4f06f07f3212f89f8c1fff9311f63f1967ff9351c1ff6468f99f8c16fe27c386ffc9b0f3f3f3d2f13faf06fee7c5fecf4bf9ff462c821fd484f5414dc30f6a32fba0a6b60f6afa6045d0d0cf8798fff950f33f1f34fccf4711fff34180fffd38fff763c5ff7eccf8dfd094ff0db1f0bf2118fe37f40350010308191109fd3f908a077a1741031c0d0d802ae1e55125de1e5522cea34ad479144f7e14cfd0a378941ec543e3513c5e8fe2397b144f058fe2e1e0513c283c8ac7cca3787478148f001ec5c3e7d13cbd47f3b878340fd5a379803c9a477d344fdaa379347834cf0a8fe6b9e1d13c4d3cba84d1a34b483dbac4028f2e517c7489238f2ed1e4d125aefcbfd18a270ae241e68378dcf0413ce87c100f263ea807fa413d62fcff8f8a6f81da417ad44ef0513b093c6a87eb513beea37698eca8fe53287914a9c1a3480f1e55ee80020817e40bd2a1c307e930e2837434f1413bce0fda81e28376187dd08ea40fda21f5413b687cd08e201fb4a37fd00ee407ed38fbff9f1441583d3e08ab810fc212fb202ce50761b17d10169433fbe4ccf93287841dff40156e5d1f5656d9c700ff19eca875d9985d5b57ed6f72afae31eec83757d167c66184ab17721a275e0acd99ff8f32e333e1ff7b3cea2500ff35f6ca2295924cb58bbd3cde366cec57a99a484a4964ee1066814af0964069b867c0493124d83392d03ad910ad3834aa2feff010ede52d5b049a3c1c0e78540438efba6f1c54042affcfa5e188a01ad5982385c2b2f5e52acc62a54174a0210ce1f1783d182c078fc7eb15872d9b1dc8590b3c0a02d5ef192d1be6fac857db15cb347212dae50b8f3916b075d996ddfd75914488c3b8c3565644b0dd7b900d241e95ea4e37b0b7eedbbbb07637c671ab7491dccdc140cbf7ee66c41eb6b63c6cedb0726db959bbb61dde7147dbb1db26f7f1c8c6f0ee2fdffded663b8e3b6cb6853db8b43690ef96ddc930776fa058cb225db56537ccbe2f5737ccaebd8cc37b6df9da57ee1e8beeee65dcb8bbd9debb65795c7437cccdd41dc3ae11e6ef461efb8b74e11de66e98857bdbc58a7cbbf0916f983d16371a4702c5807dcf106bd9e29ed15f37acbfab72f722cc2663981f7b1cc677dc61d6b8e303da98dd70cb3bf2c8df8eecc6a49b8459e4e61b6637b2c76ccbaa7bedaa7275df6437c6448844306247ba41881b6637ccce80d7d7356bb73690c37b298cddf0dab2ee6ed39dc00e6363b7dd6ecc63bebefd6b033bfbc6bb1b633786bbdaba7187619608910806ecf0db8db1bbdd7687b1dba8f2ded961eb125fde8feaeec525b463dc7665910eb7aefaba313f1e5d75bbb1cab64a24d255772feeb5e57187b97127e16db5817d551ed5ae0d344bc667bd7d37912cac1f39acac60b44e361c1e8fdd0c8c08b1afae6a45043b1e59b3ddcdf68ce35e7937f225574cb9e15ec68af1ddba2ebce17403d7ce1e9349de5757ddc6783d76366ccfd8ebe6305777bb05f670cb2693fcf8f6b21f42b4abb5c76c9135baaf90c71cab1f8bfcc8f2b234767dac4152b19635c6ae8fb5cd2294f9cf6fffd985ffdcc27f66e13f93f9cf63fef30aff5985ff2ce63fa7f09f01f09f51f8cf61fef309ffd984ff5cc27f06f39f49f8cf23fce72fffd9cb7f162183f09fbbfc672eff79cb7ffee03f6bf9cf1efce70efe3307ffd9ed3f6ff09f35f8cf59feffcc6d58c8502c5a4f24eeb7b3616cdcf695958265c5da61b1962553bb31879595959592bd8f10897b6dd9b01dbb6d8e7fad2bc107f65779647998abf67587b9ee9bdc39ae9c6f84798d9577e38edb5e65e5e979ccd7bd94419bff8791c0765b223c8cbbd8f1c855a30c86a86745aa1cb19444ae39ad52e5ddf168151c4bc8b2fe9ff5280676febf75dba1ff1f4331e87f0c5bea654b30dcdbb7075265a087f120b17b0c0277367e3bdadb95406016ebff11f8ff34502ee802a3ef96dd4978edbdfd815ec0e33fc92a8bf47fac472dd033051f7999fb2693698f79593f76aeae3c7234245289c5638e85d61780fbeae630eb3ee0a49018e63c8e1c7693ee2b747d6ce578bb506d956edba6adcbae31dcc558acb6f3808fc714ee30dc55f715a2b96f0c772c38897cb5e01c2b0c731e642f47be3de65f49e4ab15f335296465b18e9c7d7bcc7b20ddb5e55c46986b096165ac3260e6fa3886b55b584256a727217d65dfb797fd48225506dcce159f7558cce511f7202b8b15d6b9fa31c9be5d6ed7fa76f698ec5d477cd67d74b5e54a18de3af2d8ed7a796f40ac65e397c741c45a766dbb50d7c858fef3951f2bff39835ca50d8d02f5afb61d86fb706d3b99ca8bc3cebe71cb1a558e5c6282733cda464719abca3786ddda902c91bdc87709edcc7d934b2b0bbf3ad52c729d059a78a12946d6e18d36b3829c9e58407181f62a61dedff8a92a58530103ff4864394b3efd824698c7f1e89362eb2291aeeaa4cbd1890b0cb205ff99ca7f9ef268131cd0266da4fce728b9ed3f43f9cf15fce727ffd9c97f6e9299fce725ff59c97f4ef29f91fc67b6ffbc96d5fe735a3ef29f8dfce709feb304ff3982ff0cc17f46fbcf67ffd9ec3f97fd67e57f8ee1fffcfee722ff39f99fddffdcfe676426fbcf63ff99fdcfc6ff2cf69fc3fe73ffcfeb7f56ff73f13ff3ff4cfccfc34ce43f0ff9cf60ffd981ffdcc07f66e03f7f65afff2ce43f77fde720ff992b0bfff38fffece33ff7f8cf3cfef3020afce7adffacf59f77fc671dff39eb3f63fde71cfff9ea3fa7ff19c77f4ee03fdff8cf36fe738dff4c03ce7fb68a823281f3ffbd8c29acc8d52aa9ce04d59dc28aeb931414556fea51527c696969a9ed495767262bfc028b4bf40071b42291082bb9da8bf1bb974cfd3f018f2e61f1ffe9a34a7050320391b837bce3b6bfaf52dd70d9261277fb63039564c446311629631b55d66896b461b8bffca8f6756f28629270b302446f5d2c3875576590b58bb5dc9803ad2fb0b2ab3288922c252efedf5d95417637c659301fbaab32eec3b5b74a7755c268920cd08afbedc91db79c7d79d9eeadbbe196e571ebe6381e790e205a27dbeeaa847737c63bccddc4754b4d8964ffefaeca20fd659545328e2ce5315f87c3b8c3437755c26b87807d5d63ace4c358e50afceb2f24d576e376ac65378cc6cd8e1cc95f9edcad326c4f3d3d35b1301a8c226c8b0c8a001a5e6888e981d5d0420a60de20b9248192622e50c688a41dca34a8122d64001a02e80820fe5506080cd014a032201d40dc06900b20ae0288058e891f6e67ce0b3f226cf0c3e4e7f8c3f5f3c3877e69c11f229dd00f103e257c9c075f0b3e30be0d7c6b6b3e0e814f1805ccf7c387848804c7928f0ba72079e1e3443e3c51998d861e9b9e054b302f273dde96d9daa46436295c6a516b5f1ff4f810caa6062625b34951d25bd296d3d6daf25a5633f678d4d2811e579184adc7877e69cb4d144659ea71a4ded6f730580ac1bc903c9e9344c949a208b9d8845cb9895a4eb2d6040a1b1e1fa3242aab31e14a8bca6a4bc0bcda70dc031e07e393c6e3432a9864162f88e693654e02c6276df9c42f243c3ef44b4312b5fc9ac3e34368da1a5866797ce8b746415b4e636bcb6c79cd284a5b141c11cceb851d57cbe27105783c2a6d8aa74418252b492b808764b989391e9fddb22d6fa2118e28f461c7bf7cd8f1a19f9a6984839855d879b0c360a7b6dc11e988ecb8500adb8f9d8e9d14219528164811b6118931765c180507b168c7855272924decedb85048454d89133a9e848e0ffdd2d872d0f1a1205309922571f9c4a514a112b5242ae8b8175d121c44e194256b4a2ed0710a746c9b289412b576d411e9f8da968ee3d0450953e8b2e4b67072725c7267727670537251c6725c51725a948c6413d3ac727ce8977392b54d64e34a4b03f31283e379130dc8f1a01cff0acaf1a126707470fc8b8eda0b621b170e22981704386e028e7f9980e3432b5035b55f9a698423a7b50159e220a65bb82298170b1c57dbc2711c4acbef02e26d516c386500f179a013cc7ef69c0e9cbccf00fa47ccf7be30bd5f0f091e9fdc98b3881d72d7b43be365ea967438683eb9162607f30a408eb745c141f33d27efa33998d757ae8df6e1e4605e42359ab7d1634e0ee605c499a0790a7a4f50d1ae08cd8566f8f11c9849034e5d7ea9a0d92ac8c5d75c4d2e54000c968e70985c28021bb856a8cb2f2d9a0b25c95afa11d1fc77029707786f26176291a20c8e26f668e150975f21985c0882228435d4e51716930be5825d52eaf2ab02930b3530246652975f4b930be931b9d0111f6384eaf22b00261722a2cdf187bafc9a6372a107a88080653c5e70a52ebf5e930ba100b25da9cb2f372617e241642dfdf120b296aacb2f9fe6bfb004744cc1930bed90528d0df1834d4c5d7e099d5ce8820294aceaf2ebc7e44204c0e052d5e557eee4422f11074475f96582c98510c805bf862710470165eaf2cb87c9856a2880a654975f3c4e2e74c099a4575d7edd3877e6bf2635b764042717ea616674a02ebf9027175ae1088d0cd4e517135a4db18e147519438b3448d4e5d70f9a0b8521b34e707472a1ab08f814405d7e9d707e7072a134452029425d7e61703239b9100f5e11ac51975f4ea692e73f37cf7f61c8ac13a8cb2fb1cc7f08e4825f1be860fee2b209458bfcc526fe8b6efe8b6cfe8b32fc178551a4b0f92f0ac1bc34f82f8ef92f36f92f8ef92f26ff8b75fe8b6d3cfe8b3b7f5138f55fbcf15f54fa2ff2145f6c77cbeeb53f3dd0ee73a847175e8b10009db729425b5c8062a58c3a81085677c4661001c10b4aba8dc1ada14659e70dca0e3a62000e4bb26b074f7809ab6440450826146290d7c0bca6e47866d29691b4716535b6aeb42f2f393e84a625017be26edb44aeb4262fbc20ab29e152234ac2a20f11cccb841cff5292e3426999f85596e343cbb4b59c4409181f24481ac871330d5d4302269442b47684f85523c797446b4b611417696a9998d6c5f644aeb5e5263e716868199c6ba8b4ed51768198041943c890cc0c34090200631400303820148c0543e168a4095a06ee01148006628e5e7e4e369647a3911846521003410c0511600000001062084288417604eb6587c23b0b0913f5684a32db9607c669498f5ca2c520f99c0b56b01a0b53d4725915d72ed2a86c42f6f9c669a7310ea77130fdb81489ed03f441b4b46124ffb99a3df68eeca28d095a3c50d4977bbb4c99d3fd00aac86b9bd6148c1a9ef59351b9b26e274d688c152a0858b28b42c651b806b80cef0b7b5d0050066985f14fdf068ba6c4764413d558b0597bf2af27cbaeaae1b98831140d1852047773ac136ecc88dc20e072ba9a75b3988295e87203f76284af7d1b8dacc998c85efb3becbcdf0e9b49c73aca6768605ce68fb86a115e1bdfc1e8de504674413fbdf5ae2bdb00a5c9a4af2ba32f451f3705801f6d3847476b37ea1310053a7983e3cf8f0657f3b3a302ddbb60fcec1c7ab606ddea9182d53fae2270bf01faade0c759d4f84d5bbfec62118a6da93ae73ae2f0c94b82f81be4858de350edaa54763a1bf2474ceafadb3fc7fa38f6b049a587d587a176ca9dcb2fecbd12ee3c27e61a9f94cfa3d8bd0b7e27f98b9cb5bddff4709f46f47383c3ff7b487a55f0be7f361cf879664bbf0bc34be5e6ea64a6e9ffabfc0e2e914f559b19277daf812db78a1f95042fe4747b0afb74e0ea62ba04d0bd9271b3d850bfaf73cf2bb9a08236ecbe2d99de8bbde22e87743a1fb51dee6fcbd01dd3e6c18203d23c4670b047d9610a1f53603e8f46382202f90fefb14923022068b5e05e54c45fa29b8e2bb0ddc1ed41613779799412ef87c82b1293c6af44338cbf4f24aa0f07a050279aff9cbf2194025a8ad81412e4c62e4db2ae722ee9e1dbf470c0434ded56b2b4e527aaccdeb03a90e3585da16fae5339388cf9290419b04225060614b7882a4729a819877ca3357eab9ad4615c7b26facf5218f2338d6e646cbd08fe2c8743216f67c98d4d871d822cee871bc19dc906bf1d50fae20334441e322234fe74dd492a9bc3b4e6b1ddd1e94b1860c76f3cddeb9210ef0749dcb433be776d9dde259408cee977c524218858b8589a8175bd1169305a71ca440d6344223f234671c3c8f9345a42e3a5e58e1d3b443b75089f107a044dff99beca71f54be5837cb2fb8d37ccadb3eebca2b8c78e3c3544be122b2fe3ef4bc86d64de9e207858b01e1f6526a89d2962e19cd0a21255d8e3bca0496dfb32e8b321a75fd95ba10d5871a0b01f2e4e26cb4e0496820b8b823cf826685d042ec0328ea94fd0900afa8600ff27fe7e2728907faec218006718037e6fd42960b0e979c3da5f0ce68e438cccc7b133b7d59cb1b71bcbb29e6cfa305005f111ee311b958a22edc63f102fa5bcc509e0260b9c72dd78a286ac009a26f1106cb2b8258196ce080332178199e52e88f1458d531bfd4b0e1f701b119d73828d0b281048be1e49d7a291c452637df24454dce30c0866a05c75c1fd1a42f4ed0e6d5b6d4285079b71f2724c3dd8da70a9599a3ca206350892f3da2d7df66de7618f47719339628acf7ca65309ce03d34f43401b94f4d98c34efffa58183671d623478216cf7f1862762c60b391c6b44682841939e0baac2c0469cd8b2ea9fb301846b68dda0196dc1805913e8c1048a0262bb5f9a48ef3ed8ecaab6dbd65da202b8c24386604ae8687a1c1261189d0d68eea605aedcb53b22049b8d13d27d0dabab97b431e27cfa54470e8cf8f7e004331cbb14b70a02285be4e539bea3373c1d1b0a93c368694c399d930d69b0ebdb65afd531537499d7d001cc0d483ddda18fadcdd2646b943690f9341d8293be1d961c8f67f9b5e61789ac40c6c29c6b5089f3615669cbd31a9b646f6a7910f09c1a3fda8fff9c524014dc76a58db5602ec163a5a3b52078ad5f584d3c01863f8f109df38b95e9a42c932dfc0a9cbe1e9c9331fb88b1a8c4f85d341ef561205846ad3bd97f690899571c1abf9a04bce167536bb0d425bf48fe2d7fbfb8db24ea479ebd36b1d4205c4d3bb146aa5dc4cb5ade2e1f65552d28891168bbf67b341e9c529a0ea0f9bccf86bbed32f352cb80b839f6695e36ccd5e6d10d2e07f984440c3a13f456606469ea7392bc86bcf81d7676944a56f5a7a53fc2319cfd0e80b57d227d011bee4290e69cdc4bffb78ea54cce2dad0089d66bd76c9ef43dc81d6ea290bcebaae31032c8a51bdf23fe166cc93876997a04867e4db12788359cfc2f7bef5e8381bf5a10b5b50a040f91157633125f90fdacdfdfce31f95e66221e8f3ce0d50f0606257484306d69a9116704ecd37ae68c9da5550e0f751af6c4f90738c734e34d580d6728a5eb7a4f26bf7db00cff53d36b3ed31ce668aafa5b38edf4d67a647538f0100d0615572987972cff671ee41eb441732c08dbdd4bd1c1850f6ade42a058508170b0f159c53564b9409b94467bfd7fe31afce5e0d357f880350a0963ee1c7c006ae1c7f1c7901faae0311d69685e94f521f30f858b0e8ff33646e99542b72b4a4f7ef7717f41508c4112dbe6fb1030acf6a82e42acc13d043f203e71d34fdaf8d30fc3a5153e21654210481d03ef84e1f6a5f1a5e120d01d16f675051181dc9701a10018e5a3b9cab0eb0039c61527f620d167016f8e120adbe2132df82b550df7294985449daa42e65f191a873fb5a38d72090a6f69bd8d086c1e6355ecf7264d72c7ae0c597680f9dace2f872ef06c5f4bb47f44ca69e8b278415e4130ac11d970395a0cac05ab0913ee05947b20ddea2669fbd3515b20fdc274deed4ba008c9f470566b12e1799da52574757e3a3654ced911cdf4a3c790dfcacd8cf1274bed861e333858ae6fc1b287b577051727720d47288fcc8018d7316bb27bc1a41f9672f795de507afb4bf55112adf5eec442983475afbe03ded9c30945c7e6119e6c344a344b96c7399a7c6857ff3a3e0e46ab9df6b998ab8d28c20f869649f7ee136e7fd4c5b9982a35b56cbc3e8e7b154cf05d1ecfa413023a790df2b9693da9456c0a73fe9bd9af87926620b357da27699140defb828ef19cb79241f4d2b2fde991b9de98166d98ff01ca72f7c164b3f5ec5a0981af0104f6d696dd50d20647e81d038c37ccb5dcc0f53fbe6d3d67a1d75eeef273df04c0d9e0d3354838f0c0033f2665032d27175d63cd663b87beaaf6de556fe6ee6e73da66c757cf757eeed3866b6f63927c2fb06e463ce8807fc45831ca70b179ee79f445c0fd7907e4750e06713c03533af64c19dec015a62b42424f78582dbdf309ec47693fdbe049f157ebf082ef954dd7efe324720ca9ddf23c63c483cd6a76da39057dc43e74bf332051d443b398d549a470eedfbbce9f43de2daba1c2ff8af3c76aa2bb59a24f1c4da0e969dbfc1b04b165ac9cf67ad914a537f8aff46ba2d44dffd3670cb0673efc09b380ab510340ce3a8b7ee75afeb3293be1eb486ed5f3be4ecc4d2b256ce245bf703ad5d9cff5ab22a17f13a62987575bd7040f39bcbf352b9df9115df1be24de3e54ca39bb7936d22cd516068e6c8f3e0bb70d641597a21324080ba6d41acb6485fe104acc98dba2a2d353583180b7f5d7c79d75eae71a1cff3034e8dc9aeeec0c08423676ad0d662c58d2b94e0f9c4cc6172976481dfc6e8c35e55d9f94e261ba0b0102a15d0f3558f905d6c31bbe5bb4d1944c91b3737fa642abd4efb096dda34b018f97eaef4d6eec9b50853c32d6e4027191f0113117c87311b24c946ab698f80d3239f2ac653466e740420d66e48f3348f4c77d4be54862fa4b267856dd934658628956eb61fa562dc593ea6c93d4a29b421c8b5575791d126c74821754c5cb54984445daa62dd12e09dc3b274dac84e99ff0de29dc953d401fa2f26c5eaf9daff008690e361724aa4ea0829db461ca6a1fdd96a89fa897e70cf25854c8891ad6739e49ce53ac5598404bacb41f708d537d2eff2cc2731d477caf354924855e932d43c8f026939c6f1717bcb3b261517c8e09d8d3c5a994026b2d14653806d6c25bad3b010015541eb8c153edfc1becce0dcac881d0a4c5b5774effd7f5a40cdb2d278a611368c2ea5d6ca35b7da702137911433458f5ca6b88589a4f0af650092714cde0924fd345a162bf24b686a342b6ac3e45b07935a5c7618a5075ffb32563f0f9dbb18e64413273c01f4c039cecc7013e2521cd98ab88e03d4df34a36d79d6981c74b81e82d8e0a544eba13eb8c1128b2410b85cdaf38f9b8922264f07bde89fc23fd59a82636357ab6f4ce17656306e245595a668c59deb7a746f09777719a2eb9f350410883402488a0767e9d0aa8ec6935701291dc69ab49d409b63cbc231cce035bdd875f02917e75c0cbf160326606c4f383d885cc7a412e8a120af4a7afdd3a7c5ffe498a9cb4e81c50d55eadd9acf7a31e0be680ae23e311b0666aea7e1a9887353f8a404ce54bcea780f07c276fb94dd829909281f2e5c6d3870b22935f81a48d9d5315607ec7e3a8d95137dde30d470d7845acf8cee5f15a3a282c97638a6b1a574ec70a32c13afb1774bad17ed34bc77449592640d64a130509400ef56d83ee77117035504a99e1f8d4af5bbcf2333e73620b025633c0995b48a033f6751114daff13e48f6f95d709425d13a04b2634e0b00481910003b8b0238c34024cee5b2bc2e41201ee86d0feb210c43210605891ecf041b8ee4135f2602f3b08cd0ec6a095cd4bad5416b7347a9d9ce95ee78f7f504d3785b79cc6e36ace3b7c19289b0a9a1e61d2f643872e55dfc0420fc4aa5930f3aecf385eb38ef1ad83b795b8c6a3aacf8b07591d013304b0a355ed7363f0caadc2c953dafe3ea3b138c652d13efc6e73ae11eb387525b2033d965a2f223c9b34bfbb8dc8b7967a2d52173e75515207f4cc08dcc0980546150b9e5642d0bf7fc9afc87fa4db23b9ffdd923d0d5c26bb25e60a4646b2904513efab8dcd0951b9e1014e3c2f43a46b72be0028c28a4bd4d58fa280636570e600bf690d2cfe3cc273baacc1fe0f60d0a2e75d275e7ec8d5925ce782c2ffac39f858d827e0efd2feffecedac3f7f3bd1a8f5fdc29d922f5ff12233f39132bbdcc62a0378b2eca4cf91d51baa114379636ebc300d92f9104541d9e6755de21da5687c08d9fdc3949c408222738ddd6583ed047a34a968e534f4cb475f9f989d818582118ab04bde234034267fc22c5bbbe77387aabbea332fe2f1c79c3788d9820eddf24105ccf9329aa551aa79f7b73c78eef343d5dbe92ce7483ac1660f7182a7df394d011ff796ea3620534747716ca52af21fa0c1e203cc9cd8dc53c87b8c3d8e4fbd75e0b61c6669f368d1cfcebdcd9e9e978cbfadcec4be0adbda7a79034f8c29731f0ead9b0c237db3bfc4ec0a0c3c34b20d979e3554fad84adff3e51cad2d419340b03f86df8c386ae7168aaee08f42b53de972d782f4501e51b42b9b9c79b3197ea4dbd1f73b3a1ad394603c23b75bde6cdc1f6cd9ca1f1cb2b06d80ed16fcec0f24a0ca1af1e5a3a5bd6c5442b6ce31087ef65f3b7b0b1f8adb74a23a47bac3da7e3db59101b1c591708aae112317d0e87fb703722e3823ff8fdde8cfe6f44bf7c5cfedbe9629320d908567b20049d81d9b95601ea6a496e1011b8414c9d3ed5012cb89369968ded6b9dd0a4d8ad9cce1825287eeac270b8e11d02b0c049c7d994c605068cd3ead4028808473d2b5bca1fcd713dc4dfcd6a740ebf02d202c848c649a19c72ee2f8c6bd83e885b4984de8bb999a52febe693012b902c8a1e5746e06f2209a172273936e4beb86a260ef6e7a995e72f90db994f15735291c1200e3ba5fe10ab0e473032e5387884362ea3f4138f1df6e2229f03c0680700883e46ad23f6ba16f6b2c9f701af6375022be64a20858a2149278d8ad5217c0723dc5ab24bfa3e296cfbb19bfa40db78b8379ae5756d9c902a047abb522904713b0c304491f36292da79d8ebc788c11c9183853ff530046670bc061a8bc3193a2ad7edc5ddec4aceea6f0f9a21098f9d96dfcb71078a1ebe8efc2d8eaddad2b0101a3fcfd90a0f70d6003f991d1a7a4ce57af537a4bf75d4c726884c125a26ec922a4e7abe454342875227aa39da36d0ef665463c0d101bb300c555ae6aa11dbf9e5c3fece9fd20b03c0bbc0ff92ce1d673f4b4a7951c7b898644a5643dfdab129e32f859f4839aa9ce53399e189bd26318271e60932a5a0e92d1443847e70c95df34f6b68852ced104ddd5b56acc29b3439a60698cb9e7c1b7b19a8f00f135a3ccf5420f0855a3c1abc1d501ede5c6c731a9d7b6048695d0b6dac83c74ba38033c9c5707e6fb18ff259ae51ddce6a3a10537a87fe6fe6b0b9e286494add78da968698ac27780ce739925a65d0f1b2d483882816f4663b7695b04a160cb67134bcd1f30fb02bc853306994f9ec1304adfa1ddbd2c39c583ab6432ec6fed07318d9a07a526947a94960f6ef683800573fba90c7524c0b0b42a6661052f1ac5c28d26299bb357c9f9a75db2dad12225f1dfe8508e3d745513705a6b689bd4c6445c0f8d74dfea67e7b937cfaee92b75e7c992f5118cca5736107ca495404c505069dd22d891e4206cf07e2c5545349ac615b1c13971130e7cc4d2d44b3e050cecc0d553b1ad4ac8706b0783bea1a32942a59e2a13e1d16d42aff63038f78f629c020f83339eef5da365fca1fc239a4e37bc7887a2e7fdc7de65420344d719deb3f1ca0bf9b5b0e9ca493802e4c3bef282013bf348950308be492833695f9e2cced795ea2dffecfa4b27ae2457f487bef56791d807399a52cff30b2100326e3744a51fd1a185b14cb96f61b0ef384eaa961146461962669b4e1a21face001d424659fea5877e92881891311653968d9f2a513c9f6d4321566155f910b29d2c5dcaa4b098d13eb6db7daf467850c43239347a2413023a69c14bca5345ae5bd9ca0b955fa450b1bf1de85f25ee72076931377bc8a822c16045f1c040a67516467011bf8e34bd8eda23bb0196be9e06c296c3a00f2e439e0d7324f08f3e6f7e493fe2177f33cc0666ec5c2ae9300001560a75197137423d2a045ee4ce041801c89a0966abc441e34aa2293f482ba525094419608daa10a48e2c1603bfb7eb7399dde649931f0aece0ebf5ec399ccb19c0e806e1eb4ec95f85a20b5237cb7ec72c84de8d98d9c9bde40444f6ea0b6b9786da4904dcfc903012a6811193404ef9ecdb6b704d84cd58c4a343a3352c80eb4700d3f697a41ea56225f5cf6a2191cc51e6b14064b0ecbf4d3284cf2c965fb31ca5fe11c970ed97c07c0d753e4505980c295a8c71169c2e5a4436fa9fe3cfebef2de3b3ddb95b7139f7651c980bbda6929789c4164447f20eb63b861e169750ed8163e9f741ea55f397bbf211aa96827b739f037d592bd97f30abbc56d3e8bb85de3bf7ff495d2dde031d7bcab2274f65c2671dc0f0e8e3fee985fbb23deae700aa91d6c8217f389ef95fd1f301bf4f2015ebbab1b83c677dd64487ed3ef57fd2110ff6a649f6b009c23ea9c36cf5fb4efac28ab297ae37bafac5620472064aa2069f9bf67abcbcda0b967189b927bde377bced0cffbc185596c681b232b7d90a7491fcb3f137df066d94ee323a72b6a0afc6292d97519852964dc1e0a8aae8d28617ffc8be3d426c03fab6e732e1a7ce01ac5c550d0ae9213f0f9415f95d0aaf5cb20d7fb0a78a04665f7c5a9a0d3be0417bd0b76331d39f8e41221e1870890731134a3e0098e826e918e668ec14c71534205d5e9eeeebed28305740a4d3d466ab6eb6a8b51d52277ae289c4c606ffb0532c25fb0cc0c399e0be3c4806ad3c4ab228299a9974158c0829dd5422d472c81d87cfe74f09a0c9fca1d00020431709cb9bd2e64311810d2f8cc06285ddf984c22fecedf7e00e4b582295e1c6c1ffad7bfb4780c75fcc962ecb52a3b2951417ecbe311582470593a652f8918031edcc9893eae2d506043af55184aaf828eb176279b0ac65f1869b4feaf8761a1cfe2d04650e24e2e21b9c88bf838c7f7b7614eb0eff6ba485a151ffdda6818589d9df06a4fc25624cf6054e6399c094faa6628d5f3b686754470ec678bc11903ab552fbd88b4cc4d406d64c4365af5a9dd37a86ed9a557148a4cee63b78ff3e0304a457c9609b0d9ffdf6decee652f666f1a55a5f7c5b88e8c8aa6af3fa1764b59d22a2e587e05794a4ea6eb2d423a0ece8a0ccb0bf323fe33103c36569654ba993044632f3127dc688ea4be7dc3f0430457e5ce009ae0485b46140960e1b26dd96d4596065336191c3e4bade9ec4073f05edf3f1c352f6097f3119cd04544344b545207bb5f0c5b8f8cda84c35286bb4c569864fb2bba8d21a54a08803e721d4b51cbfe57c5cff24d87ccb8042dfd3f45fba3a3651b3bb94d61f1f7f21f218b09b6a1207371326817a3decb4cae6a805fb37514dd5544d0cd2d53299636c9f3ad50376dfcc0eb3bb9d520ee23157c38d8bf91d3cb7a9f9f5cf90fd20ef8748d895f9d8d3e771ff436b48888775976583aeb9e0372c1c93319aff619eb1b2fe8cfefdc9069c30237a67373d79379cb76c959ee4213dcf01cf6ea436f6cdab1803eda935e5496393234b69d012d16b30017d73f6beec82e1f0efbf94a6642cbfc5d1cdad8c6b3e275b26aedf87998cc591d4799cb250d63b87ce385673ba1da112cf6e38931bf52cd62630dad24de37a16453ee091ada0ad1213667bcf33caa2c0a05c021e66940f941d0745bca20a5bc5e7627590b15c775bda07da664742921380bc1cdc16788a5b9c50357936c5b5f72363ff6cdcc5cfffb46c0c873af9e05371b86ba855ed245dcfa7c14454cafd87f092ffedebdc34fff83865536feb95b6e5f5efe234ba682b4dd454fc5dd14375dc6f5d6f5409b77fa90137007ce50b1f37b6ac287f18ac1b0eb37ff9d489952ec56a648cfd943ee5ef6148746d19138477afe0b417590320863d484ba35f50a395fe4eb0f14f7d895ef747e843e5ff6cf6306928a9d10816f9553f6bdc7e4cacf3e537eb7815e1d5369ffe2bbed771fda77c47e85eaaccc842d6b8d005c1f373668319b5ac1c1c488450728aded26f88d5d936cf8630fc27322fd09d2bb6006ece2ff885979f08c42ecb1ef9123551c2c9368b0e138f08cdf3b6df0308e025642dc1f871491d7be69ca8d32329fa710b14cdcd03fb555c09bd87fdd75e13875cef617a776a9b015764e23b6f776012a69d384b515bf7fcd03807cca0e75714da8bce86d98fb7c7d38ef3072fdaf8bd02d01377f4382f2d82bcc715fb99e773cc0e3c615993e009768b2f26ffa37263cd6daa4864644234f648591ef82cf019177c43d9015370db1baf7c10b9850e49014d92bd33b3fc28cf688689b7617e23fff40937826755be40659fc79c0df07f6abd7006e8b5b0fe36ca97ff3952a5cf87f2e35afed0face05eb8a80484fac5e14dc1a14f4ceb2ad1cdfd10bd9de1d67226f3f5676b94912f1fedfd11be380bf323fe38dbab70ccd6a683077a3302ac69bb5b9bd3910ff0160e3942291d92ec254a453f01075e485b28f290e02b2e4b1f302a7cf1304249383fd6af89cf48bfb084d1454a455fc58962dcc296335427326bb31558f54c20a1e5b8116c4bc68fb8de98c8f1b0962584e423f12e0d0229ee5928c8ad95531c095c753198930b5e022d9d73c1cda93e4af8f479c461ff9739060bfdd21eec2ab9356fa010a91e68530fb141d1038e5c95709b26bdb1a9ba05a15892dabaf3b58607670e43194d56264cd182eca659a92923bade64cf3f8db7496b90fe04b710d0ac96cbf2b005b0e472c831d6947c08d0dccb1a4aeb9476ee136ee08a01302fdc2c1f620df0902d82e8770aadf04f5812331c20ff252659fdb8b524f5dee8e2318aafa5ef7c2602c5dd5a15e633f7772b3b9bbdafede243801d8b5109f896298f1e064e191189631b2127a508981c07de078694f671abc45fa58654f6522a679694c671abc45fa58657b17dad11833e9025d29ffc15690b092bb36a36b56761fdcfa1c49e770e2db96b2ef838ec224f855e1976e1f32465bda070c1a17e6dadced941248f30ec762fd0c7bf8d6393e97e3103550f60a1083e3fbc1c2a63320ae13f6474f7db365c85ff04a7074647c7ad4191d4d6899cd59cdcadef4e46ef2c2a4a583404db3cf694f57ebd10cb4c4bbf6cebac38f00f68842d86c403bafe6fae68d686f8bd2acd1ed9dcdb2821919630b8b9b9e521aab51a61e156140555ea6976ad387b57929e1b33744e612b33e5194711582132c046c5b23d3545ba35306fc7d493444b046ce699dbf83b547699914638f2320c0910fa8180c86b0a214707b4ea0683ec55e4ef4ff543782ba724d9eaa3583591d550ebbbc40b904e8477eab2ad4efa06cae9ece46c76bd002f3afe12babb4f8040cc2d09557e1d3e8a4a962d008d0091d451551b1fb0d0552036372ca0697c37979decaf363aaf3e247cd32055b454afcac112d4fcaa7682b85018b79e11f653c2a37d1482f23b7b7f3b59f1432213f7159aaec0982e486b8cd669812674832d9c95aaa94791da28aee293d3c8ad95f3c50b8a18213c4ffe05177fb0908bd8d54504d907f833b26e6a5e66da5d1f0d3a51490cb257c10fad1c5bdde74774757b88c190c31f6289b6071e84a4a96d2b278dcbc5c1eca2eaf7d5c3fc9bddc642652120e545cf8428a5be6618b1a11e7e97b266ee55402814fd32a8f960b3e84343792c50a9a6c4fea6d4cb80e3790142e82deb166646d5bd5d78cb5141516864bcb885c214493f1ee95fa253a5d5af3c9d1919e875254e5ae49d23df3e5537ec4860e38ceb4513faf85dbd75deb140739e231c7d2efbcbcd49da05a003ff0707bc7a0a13805dc51c05d00ef3df0c6007f1cdcd1035e87fbf24f08243ebd7275a1bd656871e739afd26f3de5a119ee43144ef0f31f209fffe5d232812afce18c86f006b4e47122207a091bde8ba37d0e8e7295dfc5a88b9a7a5ae668d6149071b4e3cee6af3f68becfdc17724a5206f40ef7df98e4b1f2532b20a8caed6d119868e3699676cece3d1e20e580785d571829a61b285247836642b098984544ef996340bb5d70f5ec6c967f9a710d414ec9a18756e43a762b51bf0f03736352c6e6dc9071643da6a4c8ae138162b23161d00dbb28d92b24a954a73ec8607a2217e0fa9c6267c6de54502ea097fe0107b4631f3046f9099732c88cd7d7688109aaf5c2b89c6d2b4a42723f40c9b8bb3ae4a9c1bd1da86b6deff6b9881ca2109e82a83e188ebd1138419c972536b42064372dcd6d8515db587bbc1c77edd6d40d513c8c0827638c4e50ab24f18fd28d5aa0572c8e97962825be90461c96be38e2b25b1d821b151987d216474b638e894c490d8223de8bf8e63257b171407a64aae79924dd38ceb2913a4b734e1199487da4bf23a477c7593a2133a18dd21395310e9d62b135642a08a43efb47b263caff0173e3a80cc948468358343a4c6c093cb5854eb2860ba775cee06719f153c084931f71ad35928d668eb5c6cd9273a90a3b9924fd036e4c8594e1e09495ae3dcdab654fe3ba98a1ea99140d14e6a3e537a71977592454f6ea64bd5e8e42e1a8b7efdf282386894b2efe963b41c7ae67a016d5d79fd525fcb1b61c3639dcbc131c52ad0ea886bb38ab7625a19ef134999a0b40d2f1a6ccc477d5dd09a96a61a8eab7c8f74e8e5a1c2a8a0e9e8607c88b15535a8f1329645dd780418886357f2c51d7a94e9d28837de038ff540d9e0221f415173abb0aaf599bc044ce4b5593940bb0cc983ed13c166ae336df8042f4b0187415ce134c85f9d0fe827c699d1aa871c97a30a88b206a2950d3d9c5e087eeaebd991016aa6f8e958f14829aca5d18071cd8b67eae7139ebca17e9033634aca7acc2f524c66bb30d9b4fafbc0459c4fea36d2880e71ad79176b8540d6cb1466b2cf363196c5d7ab591368000c790845519c314da4153140d30abeba370076be3ff02a56b3ac8a5b2297649422a8d4fdaae473557346d242bafa73aaa184065c90eefabe6b7096af3b61ccf0e7243e1674690b726611c89697d189270b9fcf406c11fc620c9f390495e8f5c5ab1811675416637d9786f4c3d92c5cbbeb2054d55cad626a05cb43f27bf6eb0913cc8b3d16feceb58a0fefc8e3faf2b519b833e7178afa1b3683354ca6472d586be95ba65206aa9ea64c3e1ae14c9b1a3985a0118a9149968fc6a8161354f6ed77b2ae8fd070fb2bb7896d89733db5b4c1521480a06085821e5b41e3367e62f7658f6f1d620ffb4bb784cbd0ed63b06c23a9fcd19d4c22a13f7c79c31d05efde5910c91aefd5b45a8046190c3bb847106745ef849b4769730ad36b9fedf219cd0ea22bd52bd45d3facc6757fed4deec99cd0c2ae1bba75675932e87fa1d7497ef885f37680534abd380d0d2130dfe81bcc61bb28d91c52eb09c6e42b56fe60725633bd35c782e3a23f77a2a4144e7cfab3afbd474e9458484460cb98fd9250da45023df37d1af551d0276bdec2020e961733a405ad633a96a7008329d632dd012ef2c5792e23e9fe56bfd730d5d947965c26b00b3dccf88d9cd3b088851fede34d3f801a22f0e021c0bd26098a251af14633b3282782d63b85633291339d2966b2a003fb641f22faa27fcf5f7e7f5c582e3d1a20a0d2a368bed4c7e4864d8bc9f6e370fa35572049fe2313eacdfed9746a935cb90c2c504fde2d8bfa27c40772b4dbe5bb12ebe57e6ca3a049e11493e4428067d8729061379e16f4db28ae0ee680ca7f331f9c3c1d3a31fd480fe079ca11e327c9d85790ed88b4f39b7738faba37a6a03055c5ae07e72e829406a2176a6918ada5b0e399d1f4096bcaffbe3ee71cef82d00c9f49fd6500268e8bf4b470283a93f7183dae3992f0cb1dd3f52cf30fd97c82ee0d27ebd465699431d892e2823b710efbd75b2db092e82989c51b78e91471a2cc00611c8929921456ca4078a3ff458b4ac440c8e46c21ce8530d3f2dd888eac8ebfe5bcfb89123344b84cd16fb3c0c0107e58bf2facf771fa1b45f386be9c2b4411a82d9d2651177b40383a109b9b80ed6d76bd86ec4e100061663f19c8ed2b8c49fc832628febb382d19111d1fdb248b15b30ae5d4e49b6b79aa0eb39577ec2834a6edc46f1a4ace3447ec285b56b44124cd8b192ede495918965c034c1fc42eb465e3d623245ffbf71fb086cbef5cb35abc82b53a71c8923562dd4dec2f1fb4eb9bde501c11f94995d15dcfcecffd0d9c3f5aaf8cdabf84d058b437525f52d818e2854ef6cbd63f0ee0e2aa9c1d88d88e1c3a15982e4c1760a5c7c422ed9d4a63ba713f97099912f95e3f6ba2c73954bee0298b3e57e7e975f9a667166ca3513aa00bc4a94df8d009135c13a06e9f2683529965071c519968a42aebd34019ff813dff8f0cf9fee117808e232a96e4646377a26e5afb7f8e259f33b46e674c78e2b05958d00e107d09d9d9377a48d7c2835117d4c0a5ebf0f94dbd29f532cbf204189c9cc57549abfda44d34f200f7039e5886340b1ecf5a91804d482b1c0d3b091c083b847eca1bdab80b8025f68b143ddf0c602b9155ae94df74e014c8093bb247d557460c9cde6f42ad09e1963fa960a56a88064c211558b624eac511d0aaf47fc890fd03f202989df1cfe9d3526644a9a0b017f00bd6faab14c4c9a89216232046bade8071be14bf6f65b70e6b7df3cbf5dd259a15eff8986b913b1e1dacb2648ea619055ed5a43a57d1289706ce86695a2818486ca8edfbae54c885868e07ef30dd7bfb896f6869e325823bee5cb3694aa657c6f80b7ba116004a7bf4c3178d0ce2ea977bfb420c6de58a183eaddd024c1558fef83f407f75c661db7df723f3eebf02306e046643c87707f8bcfdcc4939d5e0f24a119f6d7be6c7ffd7466e11e82fa963f9554093c5c9b6bf2cabf709220491f767c0317661f187eaa39a5e2791e3eff403e7887037ff95589e5467df02d4f69466eb74d0f688b1f60ec85aff87acec4f36fcc1a370148503bc6b73d5b7b0a6c1b3e6203d8632d64118ca3bd8df307bf387ea7370dfafe9c084472554191051e30f7d95a52b9f75bf93415b997f0914c446b0bd661e14224830fa6bcaf20c8c88b6a81efdd1b1d23d5a7f2b87d34c4792e4ff13d504498cc79f7b91dc983c0e7bc2870a19d217916d9eca8dd20bd17387c1365dbc01f3c518b9c7d4b05f01c332873aa083552103b49a9e9e3b0f799c839ca60ba7e88d8890da34417f33efe663f3a88f52d58d7c41c3cd415e53f86f9ecd0edf9d524c910f6138c71f2f71087bfc8199bf6f4f8d46b228ef5026ccef377050fa5e6d3811e3df2b6c753dead893cf226e839cf2857998e910131f147992d3341f70e1b7ddb68b742faa29fa6e93ba413d4a28238fcba7d1051db6912d2bf63cae3727e9fd0f32a841d3ee34fa1ea4ff057878cd333b1e3a575e600e591dc2fffaf1a2dc5971f451cc8c9d9eb741f9765e68ab13e812358bb0887464d8257cdf023062aab1ceec59413082df9e6fea0827728f8d465d5269060b07f1263cff16b7c4bdfc0cc5f49f3fabfac8d809a4b80484dc02d228246da3b88df51c6438760e72dad0063e9cefd4f8a02ba6733c18047540ccda4afcb04661e7421d6642c68c2406d7bae673ebc5b549fbf48ee056cc38c7adf83161d4935241652d123a7ff14e2826b1047753cd26170231d352ee9a7e8345116e39c5d71b5884cce1ed853a77036b1300c3154e67528279342b71965b1d1a269c339f7a1d6fa6962d2f561227f26441255d61e26dbd2c55cddd3792c633b2d49f90715ad7d24e0e42a84495d7bbf944262c282a241c26294567397cbe36eeae0affdab686ab769db3aa30376a78f098aa00cea5094b335cca6c00b37b40341bdb8cb258f1eb9419b5bea462df819c7653c379acc527a69210cf8840c535fe5a81c8ac517a214064c68e3da3f68e550afa8e436e7d6221f267aae94b7e49f5a89343cf1d2393dcd85b0378e3ed1f2c4f989a968858246df279e24825e672bf385fa2a99ad0c58bf23ea1f71b3ef1b7188b834bbcbb17030b0470fc29ff41d9809d93a5a5dc2602c6f4959624f88a14c8b808dc25749a8e7302a5cfbfb36dcf10adc4407b058cedc510713ac2bff9c7774e6e5aae9ecb995edbe8144d5d2160c532ae122f8b9872cad35f7a9b37a606c28961282640c09f10abc981b8e06462ccf83ad2d1cebfd6f653ba1524e996f471906e30727bdd5652e1eb1b98e4291aa52e89d68fa7f978a2ddcb6bdbd7e4a9ea0c8e9810293dec8903c994aedf202dc862243db9fc4221895b5daef221e475b9b3090f1549180e2ed95975c211bc2ea1b0f1bd6869c4b3e83f746df7a85a4265a773334a409c2143cf410e654afaf82d8b5e02926d218f47635e8b309d2891a00e618054efa9718460b78e3765a800abf0c2dd472c93161d9b1a25223dce45c028b093cbda2581a9f0acfe554f97d0e7a59c1959dc927537e99c10bc27b1a3b4b98b77d1fe8d59d11e66a9640a0e583df6ac2a20e80f5942c6cc857a3741c55b59b6568be9b588132142155cb666c5cf3ae1106f5292b351648a518367e51d31a03287f4586997626c90741b761a6fb6030663d62f07caac465242b43fa25851001951acf98234e7c6a43c4f6054a007be8e790093bcd28c1dca4efba74acebe010a743c209ce4343ff9ab75633ee9a737c60f5f105bc9e4031c25400f6d68f67cd68edd938c18b694253f862bf11b045aac27c9a7cfeed7727ed6db7015aba19fab4eab25f02a5780d28435ffa3b598518d5e2b8b070a32966bfd25b15a36e307f9b986ed1d9839ebca0f671d16eb464c2a4a3ed87998689c0bd03594f5458b7611e1316647800c5ce4cfc086d745cf8e6903019117d9010c3b7b5de2d29db1d69e01af94f59076bfaa1328d34f41b10b08339f825a1242226911b4a287f9b7b061df3953ebc0ffe227bdff422724c448434328678f266ac28ae84152ec7d52afbf4d3a837274ce06642e09655cafa0e700dd5f8e9fb953615753cba9af0a9f818d080a9b88775d7139b810bd29ed8087027b50988d2009b7ad1f1036aa23901c100e7d5ef8a7e9bda1194f4de36e2ca630a3c59dd69d75bc642700b0e7146d5efd00c17c7d478fd9d95fbff7b25908d4a9a2c8df62ba93e5a02e29d9e071c10f6a04f8b5a415219d2e5ff6c8556f126661a49fa9d5509bcd3e5c6769cd00ba279ac1d4810a3e6a131f80ed5b1a885a3de05d89693f51c65aeff9ba590666cbec939a81f5291795aeee1b35a26a6d651cbcb3f5103bd59539a051a6955eb373b2e67c53fef2692a162c7646196b829e2de3cc45b16466c3819d1810a4b52b4e20df0c5f71c23a5a4247c370c967620e295724bb39c0e31edcd72e257728e9ac49b8fd6dfb05d9a00b6ae4e2580f4d99744b4160ad4dfe11433dd5f9e1282d64381c4f0eccfc9e253896f02ace11ba93595b270393df248f242914b26bb9bf18f508380ce06aebf6ec38e1e6b3aed8894d68967722457ec971383bfe89a1e43236a7da8867126bac5ecc7d94a7e1f1083a631a6402accfd91fafdce6bbac4278285433fe01252566efe00c3d98aafc4856d4452e63a7abd07d1151c7a75bf43181843f03f9e8b1de1c3d92009a7be3b43c1dcf3549612a85c83e6b3565258d3593ad18875d3d1bf9071601299b1fdca187c05a969254176aaedf1f70dda16627dc2f02e42c43eee6bac0d58865f1f3f09f3420e0705d16f0000de81d0091bb729fc9892cf01e98f7908da3875123d7212f56ee5a5212d26d031080480d004754894e077f9adee71d5c38a358c37ce4b16f1e7e1814d7ea331d1fc7f21d9274f4c2171d4537014b889943148ee77ec4ecb8847682ee347bac42df940414a0146e78b9718b19536c325e16c1aed231c387eef10614fe0829734182b68c586c86b32b142d95930f34abffd21a963b1d44ded57093111d1b69357e65744c9053e1b4d5fb3e0512f0dd5557c68834a39fa28769b41ba0f81d707c3c0bbf1f14653f7b6fc9a48ed2333d02a094b1fb2e99eee22e6ffa8302c73611166a40f3a46cf99016c19695bc13c66b3be098d0d9274bf0c114bcc4ae3424986f8709e33d500278cafcd2297d90fdd21728458b0512837bb19af312d3685eba46f9ed8600929c9699897f1d446a809ab4a448d17d0c9fc337d6825deb2d29b1fc26623a94fdd0e988d7c37c8f535d347d1b9ca3259e3d3c7fa0b8b602463ad85c76c1b8bd905b3d8cb165bb02a2d16c6c9c061df654cf6ee19599aded06261938a9085f63bf325bd240b1a27f22076097d7ba36b465ac087a90da26a41b001afbf54a27bb85968bd543554240921badf9ce7244236b28ab12514e5f66749fd61afb7f407eb2ae2aea5080e5a20d007c8c64447ace608cf6e790ece6dcd952b48664e6aa79f889bb36c7971c426e0f1d1d743cbad2744f1c8c3699449e69aa7631001bab6a419df8ab409aa11fa6d69c2d0d145717e022d64d8919365d7846a427449abf5ed3086e1e9445c7a76a1263696551571158992d6efd0a0076bbb24888504949263a108510d93db0837b2906fc5217e226c290fd6b59eb436c9d6f9b480ee4c652ddbf934fedcb9f57ca2cbe5f0f98e8a92a99815feddd912420a3f25cccbd6297d1838e775dcdf7d27f64afa81bc529a5ecdb52c906dbc15b6bdc7d07300d3ae241da7894023a71bb47a926035cb1bef5d4d4d77bcfce33331b99c8e9adfaab9579ca64216f64553d9e172e45be95e6cd9cc568b2e39bcf9d0c678ab254289a26657c595c654d541e4d99702ccda55273f1ae54c7e3a143a9e79905217aad55ab9f9964ce97b356fcfee1773a6a9a6ab348704b5085612f66f640d57b3e9227b0300d96ae80b1f57c00c92c6a470713974526031aefd3eb9c5c273f149a1dd252fccd5105805839f09a2fc225be6295053e269a7b637d77d3b92c55717d575c602e8984d02a5f65751ef2b3300dc18263c8d7e7334cb2cae595021ad6ae3c7fc6a3a89bc123f4ed930e76d976a2da96ada4583fa34274fa482512270bbd0beb54780366a856a3853542280c5b02127519d54114cbbd0f299e01eac704a70e2cc5bfce59b119800843502d06690b770e28c60e2daf3d21455284501b4ca4d1d2885e82f66e469921685932c2a59a950061d46a3d432d46f7d18f09eb330b388fee6ada76e787352f396b9a037eae87770e3c957c9fef8ec4678cb90adc99ff39a8aecd4c7acfb689f907336cdaeaaacd43debbddebaf7c56737e044e6e4de423b78953fc73a293256e5e3903f13beaee39cabc37bdf9b605479d8a92d887d3605644c7bc462e56cfe0220aa04b0aecc1520e338f35ae7e62e82e815295e96c600ba10a249b1f248b603600b9af2d05deed606c3a57737035b58d6b062f9d3b8bd600005eec0005b33c3b76e4d773480cf7c402b6af7139b1c465aac5a44abf2ac900b0be02404b0552c089917a6ab421709a64d68d2f613a691951240a6a4086376b50d7ddb14648790c64428e0ead3436e549c27079f2d02ded0d09242230622f31fe9e326a4f91caf8862f3ece13d00047b11126f6488f14684836a3265f77d5849a665ccd4ee06fa67be03d17a4099d74698a11f49eeb7f67cd7b3f8f45e3c4ec81f417d50c219cd075c7102ca8cfd71621b929738362a3cb114fd5516103c9077fd6d6820bb412f3830e3686e3b79f68911100e7733febcc7a8955375e5100f447ced91c3f24b3cc84530752c734a0afed11502a90d5c92629485ab2523987e01f81b90941ce066e6de2897ea58c66d551b8e7c116842859984c57ff6158db134bfcc444f85e1e1e6507b0f9603ab407dfdd8847859f3f0f823585dbfd047e3f47fb4a7f2c086e76c39f43484248c0c849d61c1133024b760d07c8c449e8494803903713024f05486846d0c848501e193d091ca9c68b1ea5a94c6385dabc0cacd9c92fea39952ea71bacabbbe91b45d094436d8eb1a1904528bd25c205493e516116f10f084e61474d1a03f0173b2ed38aa9f7ce761be4cc6adc39e93294273662d288795bfc5416511e6242b63eca6b507a1d519d2cc19c991feac259c795bf3285ed32b5d280b417327f9d2a1506732a5b55877a231de1f2b2625e78126a24340e30a24dc4401221a682181668a92d0800612b650b090861420760684c00c71424b6c76f0c5c63b28e1148b9d0f4e9f4152b1aa6d0542aeff587ed98298bf360d4345f53972181715d6a6ad5fcfb7443ebd1ef20e5b4c88fae1a4838e311157b7cd3e79626f6efd901e0007cec4e6f4f25132092dd369ca021bc24a183ee74344fb49854a2a729b4f1ada01add4b2a0f21e8cf483266adbc06d302fc30e968a8bba4fb2ae2166d34a1413d51316a658629268ce3b10d459226f151daed5bd73ff3e5c973c88c8615d2e6d97d025a8e53bcaa302eb5657e94def3922b627c891fe7694a98ec69969923d5be8213dcef7e410115185962f3add428b754548ceedad2ce7e8dfe1fd17ca2e402d00e807e7037969cd1254351b3204dbc945ab3332cbdb7e149158f8fde6e1b05d002699eb6185658363239cdfefdec59e50f3e70aeb5ea32c154354dc05debc129c62a1957e5150b2f28e8d8e8ac25642d27277c12190774ffcd74072da390c21c882eb49a0e25c34aa6b6d315d7602b6f0144f720f9e66ae706427e029a96427270953ee631bece6ab1fe0b83086cdfe4014975e4bd4b9bc20bbd99af98bffc8e0a2234e2e9a5382382a51cf71cdb0c0fd2322b1500bdaffce3ea8c507671261630b8746a73c487405b31208fe8839645a112a6fbccd946e0d5af0346cc14c65918dd416886e412984b7b5402f836ce838cc235757f46257514aa17ed53d90b75fdea06b865cde5649206286e0c86f85f4bfa4d206c19a12dc035e634dcd66f72238b292e99b4aa353ca74491575660105acbed67c2ca3eda25f4388b15ec36838cb0f6e2bf6e6fba46873ef9a22d0d1dee41d9512e3b47bb4cdf8cc73143a5c638bf4f888d64acb9151bef0f2e7c9b6e35c1b3f8213a032b172d7e1ee7c1ecd80ee3dfe74147271a9fb0626a4968e2c293d0f3f8a6c6b5288eaa82489db3e834f4902ebc396308683941808d41725f0e1bbd422a2d6c79530b1bb83e637206d5fcf7ec4f0bfbccdb247591004fc373cba908cf51979e6937a642efec18d66ce2ce33bf6e9d6388eaf01c8fe45945b4b46aef2dfdd395e679618350c466a2de397aaf92573d1f94b52f51b1a1c565eef2f8f042210194f1cd8910a91c000fa6360320f722b95428c9c80cc6311b3d0cc459c440a91bcc43cfac9103f4267a593178535719691ee39ecf13ba5d8df55fa52f5f893adcabdebbfda15e27ea3b996bf914266a06a9c0529f63ed87ed4c24c52231517d72fac9041aaf4df85f0426149600890e1b55186589fa64526688e78840c040efabc56cb7512b08dd15c29bdc1d1e6d0ed0f551ed1dbb6bbfac8c6a79519fdc5a4db3415a37ca3ac78636663178518ea933ff45020c00ce6bb8b429485d7dec8ede19facc4bd8566e10968b1b087c797667cdf4a69e7092860871a1ea8d72148c87ecc7712a37a447ced1cb56a680885cf1dc01d516847a20a40cba8e33bf366a37eb7a5388d50bd767e05d2e20339d6decc4e122c3f142a8d2a3687ea2301272782fbeef8efb8454369f4ea10d652b3c6bd16bac34a0dc10b61f3b5394738b59bb23bea4af28ba3aed4090daf8b4aab3e47b02aae39dd1dd7434a705a4f2b7a7de38483a65d94dc43cf73a3cfa3379ec984e12db4e6f95a2d289c3fa758e1d6cbfd8eb3ea999ee10308495c13e8059d361dc786708394ff3675d6602d1bed704bec02d47a687d4797339b8e3e9cf5b8aa462da25f372cb2ae214ea44a5fe6090b85aede28a4b7f6178e48957ce5eb69a1f26731a42f5a0b7045765d7250a015e97b0c3f8c1d873d82ffc0f1a96f8ca6cbf3ae1fdc11ace4a52f43b1008bc56f1f86bd1ec2cb611a5daf855d0d9235875f707b112694dd175c90aa99e7084704d9427dd1108db187239ee6b2f74d57f6cae7f9ee1c62d71f5010cf684a39bc3c0fa27fcce4d3a2bbcd103115bd83d7d839776d91ea531e266eb1360054589d6feb33ce39fea69b3cf76f34625f10c58798c1bb0e81b4b1d517832044a7fcd29a8063bfdbbe5c03081a6d17b6840b4d22da91fc83e844f63db717b7ae7619822abf0af3ed7f53bf124fcb340cef4b11ae58a63e8aa21e50917b396d70f920ecef7621ae23f152bc7351bdcde59212cf07d3b8b9f4f2596016bab19ec586ed5eb6c1903dd2200205d9bb9720c1c8069f8fd04b7fde77e9f3c0b897503ffaf2b357616bd60e65360f190083078952284776692992f5d4cbdf4748d45cf7390aae33db48b8346829dd06d02146229631a92640a8c3708d3d24eb75e14ac56df172c4df08e1cccd2113191a10deb10b0297f8616d4db35386a70cd68f3c292d5dc5e042c306189c02019fd0de5710be7d7984e8b67098ff59a0803642db5610f0a16a52c872a2c89d7c622efec78f634afb7afd25a569069feaca1ea54a0caf9234da4826ea6e64597a32e119dc5d7dd38598ef25fcb743a7b2fdd3da159ef7c4de950cd88365360c732d6bc2317127f2de8843980d8a5480c08ce1dc30dbb885218b79d6156af6ed66a62e0561e95879b3842a4e5af3ae74937b6e3e14cde08409d096568efce90a0d0d597c531fcd938009e9f4857a9bb9f8d8c3e28cc9a69d2b56a5e086d43f3bd23d431e9b42026329478f83bb36186797f9f2fb45094291e990b7fd8a4f44253df3985bee21dafd798250432ae0e56092c5f0ead773fc531845ec73e16afcd15bfbc6241b14ae656fedd4c5bed56bbcbeb58eb9612fadcb8cb9c7fd13ead3eef7d4b19a64b398f6f134bce9485dbe3439ffecefa4282ff06ad86a32af2a5b2f4b2b23b11fd566ebb955c70bc88086c6a040bde8938464e5943f746d4b83a4531c6dfa7d24ee391b148f0bad6b744ca02dee74dd6c51be59c31251adaddf50eca5b918f6e2c0ff44fc6a38486e8048d2421777c710448607eb399fc64beac6d210befef466af3140251fc09d11bd2e6d304fdd0fe4e73b17cadae1691ecd673f5a0b8a6d13e73e3a2d1e9e21ba3f7e4900c205686f00b6ec27e91536474f1da62649dbeba4509b49d78eeefd086bcef9bc2cef571ca19928a44fc2ae4a429631a8e7a079382bab17a63b58485834fc7594c5e49cc4cc24dcd0debc872b4c2cebf8adff1069760ca1010d83503e2fadc51bac84001f370ed9e5f8dafe1c297bb69b140ec70499adab662c860d1225fac5c98195ec9a63e20826b7cd20af82a7fa860313dc3604cce17f263f723d2d9fcfe8fe62233cf189eda6b5d2d4d7f22846e447918c32e27c7ee4f7f41a0eb3367ec2837d01fde0c70030dcf11af7cf8ff95917233c1761854c5ae759038817e3ac601574300af93945c8ebea80adc956264d06c48268cb83be28037732c1a0033c049cd4af5cf76f32841c4d4b16eaa98ea64194b01a5b8473344644a2026a936e3efb04c07d7c0f93aee5cc742fd677433a591bf6e6a66c23e1e5beed2250ddb80dbbedcecde431f3fdb499cfe9deec86473c4cbb81e568287d83468d09902f37b57a65d3692689750e904c2a6391c3aaf3e50bb2bef1831993a01625f67ead0a49e8a8db6cf3c3852c2851a74488ce42580bc793df4b41c1bc2d27037f4864b30ad992c6eca4e9a2b72981edfbd33d21db2941c39e390c5771fd408fe587a4433319b4329b5374305e539d327add25e6e35813c62c2418c8ceec5b9fc38ea014f73403d7ab56400a8c1e0a850ae4e1f1c63e18800a599f3591ae576cd58ae30ad23b11bcbd1de07bbb8c7a87b79e3776643815aeef0925d345db1fb6a53d2e5ce85b63f2bf3f150e05df522623731ffa243e265804ffb706b6e79500b5752433b2c0251e528c3aa94b9e1f11133525f399210f0d12a81cc58c93e864e3f6d54e05242481fd9ad2900f612e826e4a78bb83435d9928df2c8e724dce1f67813c066a06ff111fc394cd53919e62679ca0d5f98f4e58c90f553b7f13d69b099358ddf72b4de461fdefb7a73c6a698e79c8f59246997a2c177d31dc9d788ba5da502cc1f1b5ea40d7085966611fec6aab49eaf7493ebe6d137da83594d040f462b174e469d0bc897dbebab920d017e10486ea4eb836c7232682bb6320f36a17972165c8362fb3f1763ab637c00ae022e3a9bbd3573d447987b6f1f103689224dda25958fbe77ade9a9da258ed2ff6f688bad70cb09ec14e5f1095ce8d76f5cd2bbdb7cbef8511c81779648d772d6300c11d6c9f3e15f81040c347bb03cf4aee91436c52028b28f081356bef963ed1810e7f13f9c471cf5e06fd837ea655e1143534927ca275833abe8b6ee47a7c8c32d639c096c24b3131031a202133f2f585dce88ff050a81c198c3b37d36ac214c21ce6b945215e20f907db4de549a7cfa2ee7e0796eed52af7a2a2cde82d64cf0a6ba55a26bb8b992ac5fd49c631a55f715a20929cac3e4f1f8479371dc4855af9b4dd4f6c72eca652de5c206274fe8a09d3f4b5b26288ded73f6e24a26494f853c262cfa2ca0468a1e0b8b21d3237da10facc3e978311305fd9bd81c65b2b5968ae27a620a515a23735acd3e35d8b87607d48946e6442fbc40e052868a769699ad33ad7c50ab73c814271777b635c226e7f73f590c8d5826159e6e0853eba9658a664090e11f0a7aac8a444df08dbc254f936454a7c60be83ae68f1a9a41a777ab6e455865e3862692120c34351c99b8823714488211a4463cfd003f6c5b2ce880dfe6ce8e5b7b1d7d82c9ad02ccd850ed371cfb5cff21292a3b4b8f5499525111ed1744f9d2ebac6bc6ba68997cc6f4f9759e49aabc3ed27d86c50946ea4f11451cb625a1f476aadc35d51daf179f73aae341bcc970caeac14888529f04a3194fe40e17107c1ec85a3fdc80047b0e0680d29d27decabbf352565f34f3783581d8ed105dead87ae84a7b8f2559b4deb7d6c4dc5db4e912952a1ce73d8a0a489c1e6086c0c94fd7bdbfd1891061965005563eee0970e04c60d326aa56852dc04eccbab46bd9626ef5ab23906eb3f54482e365de6394ab80138a52ac277f246fdca7412983d0630caa2cad7738bb528bd15452250c31d5ac1b41572c5376fada7fb3dbf51c3fe24e61993ab94c3c5cc6d160b17ad6b78c8aea3d1bcc1ec3c2e317b711729a67527efedfb0f7233459ee3fa85db598c51a6e6a7a32daea215a8e80b3ae1c50db1add443a909e22f5e548ea1e219121c8d2973514656623cea74193ca758b68fcce494e4e28caa643db56311ecb86b0a26a09742d888fcdbd0546a68549840941d8be469c62dce875d0ac212c544d4b07ec65098e7e3983d29acbbe73a6ee76f44ae32dac2116c9dd136b85a17ca2e95dfa94cd360ee194c37d6911a8f99a6e5293076b3e482fa0655d11278d4d9a54d34ced6d25669d05a1fde9dfe4ac833bb6de4241e3f3af224f1c5f939f18086652e84b899ec2283c179817d0c8b5d2d5b9eb498f99cd08e45004f55213724aef55567e0a80383b2b807d4140c354a20af18c13fb64daca086e560bf6363f6ce914811ea2831893dc5887451cdf029b00ac08cd5c423c8c16f2a4c6aeb832415f94ca9c97bd04ca0d42ecc3e29bce4da22cd8e6d02ff3988d6fc8bb329e14a3a199ee5b0b0bfdcc28a74ec1d0ef39e3a36b05a8409a27fa877555f5ba3d909ce4fd6d73d1f818bcedb727841e5ebddd787b0fc4e3fa4e9ab2fa711e057e5285218a3ba1cbf1126fa8af2d2783a90810b87bd99ff31bcf2dbc50ad6876ee1474e3ac51b01b3bfb7cc568051083d2cb16dfe14a914a2e41f150b73c7dacbb11e8144aa115aa3302036aebcc35df55f3c220691ee96021110a4016ad233cf3a714f8bea48e864274102b4192b5655f67953381aca3431553d6204fd830e85c74fe0797179beda59e8c82d3ee12194139c1dac6edde2c430fb932b3279c197c88827de700e864c515d7e66c2d19276f726ec94042e24c3a2421e263258f7dbe7d6554af6cd4e021d999a1648b3350cd1105263d2f1e7a2ccf0b060946e3ae62f9e0d8b2d5c81169b7dc9a29483a9dcf1dd4e141184b553759acd5858e5654d3cb9378c9f4f58db32c309d280e1fa5b7221728c46958c063754020d442701954bdef3e892773ff5ee6acca5911b10b49c0aa1c516dea262cc33e2914370a6235f3da791ef71d50a8655f881e587826889b39830ede6ee7a8dfc95e5ed5a568c8bfafc36c462c16d65db8b88e5b586af755be8fcbd930ea461eb93a489f0efed171e5ba9213b2afb2b1aac2e314e0c4f4de57c9553a932ae561607d4144b106c090ffd93a62272b5d8e2ab4aab2a040068537c538574aca98fc121d702b0a25c5a10bb5094720cbc48882868937a25b1bf6c1b5cc3ca7c2022d4df899d3b31c0a5c6086ceb149c18fea6c9048cf535c8de73ba32036aceec89f29acc6f44e070252ca35f5473e48a719d4c1e03fa763cd982dfed965b010fe18ae9fcae39c56ab85aeb2c5b687d97e3e213a4f8dd6d73e868fbaa2bc7536f97ae6564cb091e02ce555af6db534019c8f47f1fb43574665248c98712086763063ab25f553fdbd169d181b6a8f1e64ebd073fd96948a754c15203a85ab4bafad4fc411be67f612228852bc99c4104c2186d17ebf368a7877095c01b42647c8b8b8d2981aad6bbd49bc3efa561a407713383a0edf40bd525566a5466d02f89464b35231f115c6759bf00d4728ff730ec6d446683f39d082cb16e0b34d95b966f8b1f6a0b9bf596923e7509bb2ce606c3a460ba97b4bc05183557cc9b932c2cd3a8283316dd7c8a6b6ea05d37f234ef043ac79fc75310488d481d5c57330c86ae93b35edf78c63bad77073dff0a9d06915e3bc116ebec0040b6b8a5526c29777429b149369179b20f7bd218c09eb5a1c03f2874901a433cf8719b4d2c97551646f4144a9f7a784b52250cea0b9c0c314c512d95759748e0451723e82e89a0bb1482eed216dd252eba4b5bc88c6e687a2137be9dd127f391efe26bf459b0d230d3eaac8f33ad665a95e5ef71f80b4a99cce5c71fc57266412c9b531e20c70b37e6102157babb67f0801b4d20006501262422a42701e869520210e00312992e2695adbd260430312100c6c4421e2616e8c02965c0c482676221e604902add250c7497a2e82e5da0bb04459b58186262c1a56481eed2134eb838c0854abb00e1d200171f5cc69ae9002f50d0edcb640032ba53a96aeb95a1bdb47ac7594d8234990ce35e8645594e961f3ff813879fa94ca4361cde39e5fd7ab33299cc66d99c72e25e2623c00d01640041a9931f9631fd09af486d183667cb14801564c0f326879cd05e2eb3dc91f9819c5e49e43f64efd3c2cfae89f3d75c94a163fa46d7debc525a90af827682620e0303cabf2f30aa1a5e7c527fc1d7d272a556089421fd7e87ca9ec7d5497829ad8663edb6aa7dd5201d58acbbd444778989a641008274b789c88f49053dba81a4a1825077abdcc804ad283f520ca8948a20cdd124fc40c41042045102e287205a747793369d4ac039d0731294a50674977c28f5d0dd302ff876aaa323dfc5aaa3d0de9ef9323867f1ed56ab148274cb1cb9cd779c2ec1f05ada7db18e38bf119639d395af142aa96042c106dd9e27fde6f86bf37356b457bc8f47130a4774fbca5d989f83020fbe42e1c684428d090520dd39cb592e5c1772c5572ebc18da4f081226210d3009c9be7294af5026210958a14d27dc4e38329d10c57442ac6557863ae2abf9d351a61354a61358f0552afc70d7d2f9f793552a0b3fdc6a157e3893093c9840bb5b863699b0b39281f2c57d75df6d3706041bddb84fc93b4a53102c30281fbb1c1a5bfea0e842ddedc2672c1ff42c4d41809880e8d13d9880e4806f977ba323f8c55cee9bd46eab89a9842ba6124aa6126859d272606c662201091df295630e1fa6a169042af8478ce911dbf7d9b3bc2eba929ffd11c5f5693f7d07968bf293ddbe92625a2617346e3a99d4f7472028432c039f52939202eee5f1bc965c41fc20f1d043ec8081a9a50c534b08babba39fc5587a38d6b77d92a7c32028bf4c7b39c958fefcb4617717b5a914041944296131957830950cd0b62cc31c0ad35ca43e7e5b2c53a7d97ab3d7961d53a751a75e6f16dfbe1aa1aebdf7f1574afb89b2b0bfe327afb57d686f3fe62045cb03ab3cf3331ea50dc7d3e1aff9ace0fe5110084a9df9f375fa8f0e0b4d9c040a69c67f2d6dfe772dadbee740cff605d62ac53e3b8fe7e5fad969f1ecc876865a3eab9597ab586699cbde55eb39d4e4a2339642d5f5b51faa55fbc22f1f22d07468bf9f75a98cade8d26d7669f3c0902150e9aed696777755abb45ef964082ff9537fa8f10715aa993f68ba85b861881f6e74b7f46b89fca0c2862529fb01767737f023a68be5d14716180dba8bf4903eb2d879a38f25477db86469c3e1676a031778aa38b0a411ce608245482f0c9141149b1c18e84830c80fcb0fcbcdcf0f0b3fbbf8088211dd32d97ff40afdd599f4c85ed16d46e566f83e1ee73bae349cd27f5ccc2327e311c8beb27de52a756a95e64a813e0ace46a1eacaf6f5a17cd1fbe1dfc1f871b514631ade17ba5f6f41f575b0b7a726c11e20fbbafd58a52df6d7027dae52c7deb701bb7075d2731f3bc9f85f36e682cd9fff1f8ee775a0b0093eedb9b6e73f29c2ec6bbeed933f94b33fd6c6f037a9aefbf99357da7472df04c703ca8a65c8ddf48006532241a748e5470158309fee9e3ff420489bdcfe35ffa7d5c1b8073c3d6001c6831408ddd4c0609e8d64e836bb576a67d26fb61ad9bcfb5ec4ee2f64195edb735383f10b9f04c5bfee35373098cfae0813efdec81e558aad0d4b9f8c2f1dafe819ff04ed8b8bff46a10379873b8ce5cc573801ee9d4df46aa9bfcdfb9b615efc31287bbcf35433a3e759ec73bc31efe6d7174569bb799e7b97b105fd67eeb51abdb9e66abfbf398d7a30a8d52af6e2f98b39fcf773c614b47df969341b625aa5edfbd06b95e2af555bfea30729f8a5b2ad4641c716fc68c6b4d2f07efe09822d9ca7590913fbfbe2d2ebff2dffcc81bccb9882eeb162385e38e5df6a3fb4188f38d06c2a8fd66dcdb3ad389be35daa5227b242fe3610d3dbe7d9e59d5fffd95f4b1b573cb1a0d774ecdd7d9477ef9de7c1bc83c9d46dc645b028c317ec1da6591725102a7b1e45b0d2976cb1773bae2bc1f1a31204479abf2d860251be6df5a17c7d2ffefdaacbc6f0fcff5e847d36f699ee54fbb2f76db89f41da03825267041c3710600b25c6e31d6b94e63fed8b083c443c241e323c9ae0c1c203091e1d1e31e00183685fdc577ec461647047c9e02bd13a4a067f715f498132a406377891bee299d77e3f94eb1f595a0d58e04c622b86f6c55c0ce72b852cadbaee37c98919d39f0fdf96731fbe2d964ad162665f4dcc919a18243231317256435373f32a9b592af5598262f85926a66476bcd8b1028cbf60e9ee3ac2a88303be82e2b54a8f6cf84328f0808d9a94ce172d0d1c418417327ae040071002e863066c5c0a00f9b4507347de038915eeb0414bc905888b7c22470b1a2d1f6859a2c5869605b4ccb414a0c5d492050f208694e419432cf1b290a224859610620225234a33a5b03480920c4256222a75a521253e48628b4c42091490582d4310a117b0c48b912414222fd828b517a5d3d11925e9e2d9eca0e50fba0a928442540312192dd168194711ef9bf2c4084912f91f3eca37e5890b4912f9d1626801df94277bb424720034486002049fc3a649928857451e43f8a63ca1a3251122422cfef8a63cb9214922e00e2e19df942737922452bb4246f04d7942499208901588e0f64d79d24392444ad0871059823e84482e1ac8c5368294b12b2b31e929ede8e4b44a4bba4b35c864ffd1a3fb18fcafca4f36856a57da746254aa999b1c9a2edccf2a6906c7108e17c061061c65c0610238b080794139cc8be38f8ad7d26ad5a506199304c61b06e8fe2cab751d38dcb37cf07756abf0e8df28e30d2eba1b003de40d2bde7062c81b491031e40d1eba5b8aaf4029c3f46932508ef9938ef295a37c85f2d57f77b4188a3bbe9dd127333e72bfd6f13e1e220302c8dcc0e2060adcf8c10d1dba1bdf6e1683364090d2f0d7a428133196e5d1feb48f7194f6579481203592d932bdc98cae0cff965c8230821c5e8f501b0189ee6ad5de9be7fa30eff06cc4b6afca9b330219f3a9387e9f759a4b0ae6458669ad5217ac18d2c60fbaa5d72a9df2f6af04b4daa8ad32384ada4fd9aabb44a4bba4820782e3ebfebc76b58a395aade60d6243a75bb5c60b7c95edab56ed7d82ff7b2a0482ad5aa5f51694edeb416a7b92af147fe8856f160425a63b43f3b37dd52acdf961a5eee92e99ba4b43ba94c2cc0b8eb8af83bc19c703825267b5fae8fdfa35270ca8457101162ea0d2dde1bffea2fdaecddf1f392c6624ff89a7c410f6a7fd6446f26f251462697c200d591aad34ba0542a02dc0cde6d39b4f36b04fb621fa6403438e3ed94ee8934dd527db0f92001471189c0559c86a95de233fe6f053f6fdd10819e8ee570f29a308126a86a081537b30c5344bfc337f31973d57a55fd1edfd2490773819c6e0380e8393610c47727801e97f7ec473e86e220d0c41c34a374d77d3c5a46c58da9ede8c65f7c552094e4aa3bb49a55ead80ba7dba51a8f59033841adf6ec81907787a73f56bbf50fecdd89fde6c461e665ce96e039851d466b4ccf0ee761a70dc575eadd24a65f8d7f38ca53c9ab27d98ac600531251262466829b994fa7ea6a5527789546a2219a218a2f0c3b954e00319577c95f14fcfa39591810132982003d7d951be42f9ea3e8d0ca1eebe9181840c18ba7d656d37474d7cbbfb599453ca729fafb2b4dd1c5569385bd8556f41b8b1859fe6fba2bd42395014471828b38dfd57e5cd82604b66b923c3b77d58b6ca92034551eaf1511abd7fd49d4706e938b3b5ca4f49eaaf18c71813c0350b62e9a879fd8d24adbb7b8c1770c614c753b33f7f85c418c558a1058082355a09f69a05fdaff83747fd576d75eff0635ca456a96bd12d485a66b0d5465bdfa64635b630e4041ec698e2dcecd07cb5aff9b54661d9da211b963e319f9fe524d012d29130fae896851f6e48185db4aff093f938da836f970a3f9c9d853999d175918810860948abd5157f08637b753e8a654e09b62801054a102b01101f5d4377c7000c2e441992eca883067480a0fc32b6a12c4b19094ba5357aedb5b99b34836ed21c477f446be187eb26c9817f7693e29091e0c0ffb46ed21b32c86ff4d1dc4d72a3717e8c65fec4531dcc8b7fa6f7e6393bfe35c8539da73a189997204fb1701c864e26eb427b699e749cebdbf2d8c2fdac526254aa1957726382800d82562b160be60527fc8aaebd9727fc8aa6eb6684c0008ee0e308318e98e2889fb61553cf48662f4f693aa20046e821250a0a4a944e94377b953023a430e2a79b8fa5cd0823a607f0d15de503a47840110f5039200e54b5e2286d464d2aad03c2246d72000d153ba81cd152a2382a83630ec47401546854705a4a943c164184983615d18222a67c34cbd0e651d6590490a9081728516a8b081110e11121a43b0fc651d3e528efef98a56d9c4a3c10943a9ecb71883486e802557f08db10a73084b0421c2088326c6d46eb1fd5fb47b6e640de7dae56e5cca3b5d9a7fcfbd2e1dc9d3930079e208290410841e17e5628513a5925106b00610510422d258aefb8a044e946eb3687d66279933ea5ad05440a3ff8e087287ef09112c527751494285d1eadcf0f69f6dcb5e56b1d058ae3a48efab20ca5cf97b68f1e519fa287cdb6afcad45f9d296398a6e40ee68a38faf2b6d8949b0660e9ee3e291a7d1274894569bb2fe41d8c9d6e73f71d7df15b03aac44c0d10eae6e7bf2238f3620d40e20396eeae559a479b9337b71585e56dfa90041e7d282a62f2614837f5bc1ef2e8ee700f57ae2cd2a61e92e8ced443ec6738b88c7fb2b06a6664b158302f2c16084a9dd58a857330c7d2633838e157c4c2c1d99c1dc4d8a1023b2ce9ee6e9693a1e7a90e26d7ff6c08a453f4429318a6c30ab92bddbd91cc202851f3ebe898e65c935c007224e0b8e80ee3cf32fc709ea7baf9339ab5d5467b6d19046dc6f1e00270e3e286c40da79dca6b69a6237964c35109231e230fe3671a49f90a53f6c144c07be02ad8e7fec074b390b6ef8e22904e51aeca5beab30dffa63acf49d1e654979340dea53ad54c954eb3def295e779aa7b9129f2fc5a477930305df7e2a8175591e73ffba898cb0e82f48977b8cfd5eef8cacbf8a7e7a90e48a7c86bb54a9a15e56784e9f52c31f57252749bc5d151de3fcd730ffff7747795831e1da66e6795f46dd908b74c39dc90438ba803b109910671c664b1982c16dddd19f9d062230fe6402c6f9f33926d358269ab5a5a8d647e5bced4f3ecabcb81a0bcd673e0e707c570e65e0d875e6d752847f1d821936d31d51b340e71d4374c954af797e29f1848a7c87360b6d93dcf535db67608c8579ee7a9ae5e59fbeb78bc5f87a6cbfe4c57cc5463a444811225cb9e368558b26c8554a2a0a044f16eca1094deea6e9e368537dddd3996b7704877d8045e018bbabbfba73996b5dc612951a044f11678d3ddfd4f0357e8eeeee65832018ddca0d1ac7477576b7336e261be8332ebd8d4a87c322831cba646e5048715c3a105b16e465a698c8d8c0f0bc6513136323e2f38df13d1d88c8d8395569970b01dc97d40443c38fc503eba2bb5d4449be88e3a08ca0f8888e402c40739aaace0421a548610a0862138f8808f203513a811c40058b29850a08901b2c52c0b04aac862b22de9ee29fba7d9503622dd6daafda01b4bcb32ba7bcab20571cd4af711fd58f635b16b51ba73997e346309fe0e4d568b691094b5156a4d8b038d6eda1510941f0d8bee2c6950740bd159d2c4eea61575f74731cd8716d3321acdd288fcd1f8b1342ea3dbf459b4ecab5079b1bbdfebc7e9a7d1fe63e89e9f715f5f08ce32e3f983ee9ed48e9eaf467783d1dd1953b0d2704e2bdd2d6713734a4f30078ae22c6ad3c499314c21dd5f166c43d1c6d15f1958f661d1a60f8aeefea834367db91be72b45d96339337db6c772f6f974370a6dfa62ba1b7f2b74e3a7b43ae3a3bb677600a04d3334bab169d64577675a9d559954969b8de0c2cc65961b37a96c2633cd76dc6697392421c8239a082a6f56627d168ef773e9f8a7ad329b2b954d230fd7dd35ed87186bacd12d5a2b1373249b3bb72a566e2032dd20d4ddd41d063708c1f696d3304911ea6e2917e88680294a1cdda517945cd0f876ed03520a43683e4c304569a1f1ed6cedc304058d0e572aef4e13525ce001262842f0edf2d32026546b31cec99bd79617c56443acfbb10461f78f2c08daa15cef98d3aa553adf86eec649a08e465dc8f1d35c479b931fcb5bb7e3f21a7dc799d2fb133569913be674a2df71e67f254cae4aa7d197bf52c43599eb7ff785667d11d6e1f947745a7a5f48ca50d22c90cf6a733a6f796e7957edacc8edf1ee26bdfb298bc0f7713ff1b42fcf899816527f3017a929ff2cabfdaacbabf42967206c7e96f46629fed07482ed4fc6e3cefc9b9d95279683d8182b004e02d56abdbe68bdd2d0dfe8da5bfeeab7af315d4ca73a723b3f942fef66ada1f07c58b58e41ead2f35c3a7e3c7a574e8a6bd582d23dcff16314a6d1ec4f793fccf1cef346cb801edc592c1c99e58ea3ae90a35838ab150d7c184e486d3051027d4dd2e0efee3b786db5727f908aa1fd6cf53c8fc761f0ae4aa759cf181443897b779c691d1d0fe5329d74cc815697a4b9fe1f51b025fe3721aa552a7f07e7aa04b236f65ad2ddd324c6b77afedcdfa7fdf5fbe1982b05ea4077fd30e3118729bde59db7b0d1677fdc311aa41bb8a0e3a84185a3b4efee9e1fca8addb3ad5fbb32f746b937baa2bbca07ad9d4d1e5ca5ce0f0e3fb07ee1051fed873496b31c7a1d28ec456ac312e7aa0cddda3ca9eb4cfcb6aa9a24e9954cf60a72c1867888643c4c5a434131984c9663ca49800a2c3678c8311798ab4a7767da6bd69638c632ed758332ad82326787ec7d1d5cce2ca61a72d0dd32930f91f6d59439dd25354a69906e4a2de82eb1a0bb01f04501660c6019f0c50f7ce0832231a6b4986046f3c114b72a6f0c9d000804a70ce002d890a8a03483d21d25f98404a50d948e28d9d20d49a76453f2922452724f680250886e484420c920de2029b1c404a60c9148410ce15e11ee05510589446508f78818fa21882348f2c911a4205a78812427493e992419001310535ca41f4e20f5a0df68a0924c428930fa53407a8010a4680985a88c8eb56440f3d092c88e4d01757c539ed496442640640e31be294f7a5a465a785cee1bc91e2646dfdb74640f4a6c1f94b2c77f44412913ff8d4050d65146ab9456a98c448404385025072521a5f3298d4e1b7e4a4049afcd99e2fed603066714632bbe2d8757fa1fd999eba77de5ec3cbdb1fb55ba5acdc2f1eae4b084c9b559decf54de51ca3bca1aaa30b1aa74fb2ac8082d04f590168a7a480b3b3da405577709aeb00203b32a3feca83fb233e97f9f3c515aa27b6cc1cf71f9c75ce5953577d15af04910133aaf16cb9e202674d2ffbeed766568fbeacf2acd41497312a6494d12222521a97003931235f0ed32ee412a692625316384615a15b54d17939a55de2b61944cf045a9a7e403d30ba5241f48828529090baeb5471f1e7d92274c497af095eb7c4fe4c9dcb80c7eaf744c439fffd8f32773f398de8739e9ee0e639166a7590a8aa12786e3cca5e7af39cac2bcf3449af17dfab6ff2ac59fedcb3dcf73253033b81237e233f83f4d562dc52f4e838b34cbf2834a60449a5f3e507e321adcf383d7f6f89123fed7d61a45653c5ecff3bca39e9b390a46a4f9c55339f04a908675bc290f94e1c5b5bfd58a34dfcf12946eb37bff3499e7797ea9b52f88345f7af482bf074a2f53700cfd9fe6ad2c0fcbf5613207a4b2a7c3403a456e7be2dd5f9a4bfce06cb4d32d065bde79de75cf73498f7c3e08cab1ca30f7b6ec20cd75745186399931feda1c673819fa7f349435371de76acbbb2a6754de64b676e69fb2d5a8cda5bdaf832b91ded5ccd4d4d8d8ea377b6b8ec31163e9ffc43bcf73cf28c8937fab44e1b7b7ecf2ce7ead529a4dd98ef87df167aecfb2f6b7567379a733eb875fd1943932c774048d6e4795860062d292d32d2d1a25dd6253a4bba593a1e5d462ead400d2294a099596ec61c3a3e8198f38dcbeba74251f68b1a25ba8e896295233e8eecede0952ec5da53a50bc62f272bd865a4ff00c514bfe1d6caf9dd93b0689bf63cb53fecd1102657e58ace715eb79e5fab07ac79c58cf6b7eae1428d3ee8f18bb4c330cc134c310a6195e5eccc5785eccc532ed6574c32199e58ed10d876cecc199ac4e5cd39569af0767d2e8b33f370804c79e5cf1db1d1af8b01b94ebdbd8ac0fcbb457b5af21fb9a2efbea2e95a0bb04c617a329014230faec8fabe7c80c2619d25862444a1329447a026472c18b8ec9562bbc5a998a5099cc65920108cb598e0c4162c0410c1c081d840f23eb403a45a72057ba47afad53105b371f07f1c1e329484c770292a5bb8174816b0b4813dddd4d9973023285d5272037dd4240bc3b99732aa18feeee66fde99a2e5a828f3c957022218bee2a4910fb4482011ad3d308449c4668c06984d56984144e2e659c5c22e07283cbaa06f9caebf0e82bcff3549793a1e739c652bcf6de37c2326684653eb560e93eb55c39b55439b5f874db997c2c6da716ef53898f6e792a65d1dd7d2ae1b01499d4b7ddee679a64b16c58fadc2010943a38389b335df34442e344b2f222c59b1e94cee58934e544923259d3354150eab05838ab150bc6a646e5e3289b1ad5a9bd58cf4bc6593dc4731168d0dd5d9d48b92982164598628b20448b0080eeee1ecb98d10d87f074c570be277a22cc30043886b0c510921842ccf4470cfe18a33d37abb3154ed5c7d6f6a53cf542ed08bf20e9fcd0572fe672ce859961f758ce6eff47ce1f28f8f1861f5ef831f303d5871e7d5cd18710dd3d449b84500421e401ca55a62947495fe5de484aa6a81f736f04c5ab7b973ff5b658eab19ca152dd9cf285175a186686dd117c04cf2b679519cbf0c8cc82b323df8b587e9e120af8d302758f658ebb1092e8161d0425756bbbcd84e0e12a8415baf36c5f7ce480658244e9e038c9f5430bb45ac56eb606014b10d408022e08a820ec81c71e4cec31db030520f0d1dd5de7e5c73287f14add7b2399572bcf69f6c56542180f46e625c8f3f2c36235c87b71cff3bcdcecabf59f49db63691369eff3439a81a0467d230b8424c49f4058d2dda9fcb9d4cc81d0339f23eafed10f50d0b6e628974dd0e6be89d10d8772a5403508a3584238096474c321473d38932ca31b0e19dd7008d73bb24050365d46371c32bae1d07419dd70c8e886433db8d28326bc074b7a40e20196c6453c1e50d1a0e401037830429632ba6d4eedb85a59b200600768ec800a7ddacabb39ad96b7f00e7099567750d4dd1fc572b68315623d2fafe174c0870ed4e8ee966ed24117ad83294db39946a7eb205b107b0ee8c881951cd87290930300e811033db2d0834a8374d6f295f7e04cc27a845cb4ea55d2d96df9caf33c3504822bcff394afbc4cf33cd5859ea73e8f337a7396ee8ef3c380f488010777e0e00a0e4280035c77675acdb44aab93bae729a158cf8b067aace78503e93730e20643dc60890df0b001159dafcc59ca64468c74e1b53449a33117c7cfe893b3ee3f1def3ecbe994c5ca81d5caa6fccb62b18078622e1e576c88472868484856d40272d4a892191dc5f2d189b57264433c423218104fcc252b6a01999069afef89be27c2423f2d10c6cf92e17e56d9adc194ee6af08241d05e7a071f347b47167750e9ee0e2125ad3b6effba03882d97addb81a5b3a38beeceda814437cbe5a849657690ea98a38e33eaa852c7511ddeb9e53408a2c30f3aa6a0030a3a74a043870e0360c101962a9f04450a4a971f4e707c54f71d45e5d4caf37c35dbf1146ec1b42695799eea40f9dfb53d581030831ecc608e192c31031f94f755eb1dfe5a6dc4a3d01c2b98a302730831870d731ca0bb3fd3fb64b6e329cf7394873d5fe1297f68b6e3a9958ea73a6fb58a7912a8c3f3ab9ddd97c38deee9c27252cff6258795eefc18d72d874f7795a3bbd2f033cdf615471c517477d72c98fa2b144751fe64ec1f07703421e6ba59ed0707ae1b8e9b7e230b8ccd6f58e960aea547d2f6334cc3376e6fbc600b7a1e2d2a8f336c6db737b2b52d195ce9605e1c26032add9d0c6eba83c1ff342c6f3200626d76034b8e1b56dc0d5ceaaf98e3c64d2b06593afbcd12c5208b06e58d81104764b7afab55ecffd260b003186401032318b4d0861b6d70d19d97adbd1e8cf75fb5af17475d7bfb9a034518cf7ba12048bb29316d03016ca8c146146cf8ac01843530b0c66d0d266b2079410d5e80c40b90b8800e17546918dcefe34b41cf785480c3fc78f38bff1105e58f3598979f390a4b9b83e0a7baaefbf23b0ae7aa14ff8aa3cda1a891db985fef47ea79fd37aa52f6e04c3acef5d558428d1cd458d591c6116930208d145a00460b38d002285a20d4821958b0060b22c082190b1080861c6858e9eec29c1db7d52b4dc91bf6bc594750663ceedcafd5a827ab76b5aa41ab55cc73f74967f6947b37ce3c59959fecef88eb7b9e725f0d7579745c05e7cb5487ef8b96667a3f2cbdda1d4f75d77a1eea6f45bafb47deffedf1bc2ad1f041a300689c7046171d0c60986d5de7ab2e5779f3d1e6fc439a654892a4337a29e50c21ce28ea2e161434a4d3fd37737906095b98b1013388babbfb50c2288dcefc6d22caf31c4bcf81f993381e3c84ffd23e4c43d93f6d056574ffac804ab7e7663f645a81c7cc38ce81a85c6586c55eae2021d94f0bc8a5c3b3232b6a01dd2c982bb5a2ac0c1760a73f2dd04f1b4e7a9f85e3c12ccc03d47a15b97a788684642f9e2641b11b96cc7207e77b22ccf2893179f1fc08b98674603c3bb257902ba6c3f3f313a4232b6a01e1a8669c645cad8ea36c64461c16cef744b2496593ca5480420a60601ae30763b031e5edeb9c3a7882e0dfea1d671d4c7d71fcb9395b63d8317eba134309317030a18087eeee70bdd9dc8c52599328fc2d9fb2255110e4046c747777fbd7097c4e00000fb4e98ad7ddddb5341d491dd555f9856145183793098460820798e0071eb4a90449f48bb97c83a3b4b7a951a5ec7d1d503098c6c65fdcb1dbc8a47a624e7cf5a1acdd9c55da5ca9ccf73fa759899fe664088611603c0103091806f8a28f2fe4f8e28b2fa4f842872fa274378c4ccccbb562e72b233fe4ea2690a7aa7dd12c0934602281cf24810bcc8d98bce0c28b0974b7146f7a50fe8a3fa90b7991c40b211df8d386a97ab3a9fb622a27c54fd21bac0b0b7431bbbb2e8474b7af23c88d6085118c20822eba0b3fc380d2d2e8cbc554a436fcb6fc3011a0ba10ccd9e2220b1711e042888b225c94b0c51f5b50d16fcb2d2950fc1f3b8a063eced4abb47d92e29cbcb7e52b99e50e86c90ff37ffce2b952204c8db8bbd3a87fb5b9da72231d8e6d2104043b00c10a40100229408004087400c192ee9591aede31d6f3da717db993e279507c653128fd1f4603a5ed675eadc77a5e9fff7ed57e2e1d6bd186185a68a105155a0061c40876183a2d50dd330b37bab308220b5b775908e9fec0161f80a28d7ca0e703a86b3d108707aed0d0880778e8eefcd803331df8a30333e8dc5746ba79a39219a76bb58ae5be490716d0810460310716637446ba9b51ca4f0b04c55746ba559bb0f0b0d8e9ee722028671664e2abdbbf7890c71558ae88c1156574f77d23572ce00a992b08c0012c1c40a36fff0a1f94beba6fa4562df8b3f9d765e2808b03a70db4b1812bdd9d036f5f9d66dd576ea4f32efc4ca7cb57b77f6de0b58117ac10c18a0eacd461a58c58cf4ba6e52b2378de95912ed6f3725f4d2a33d24d2a33821d86ce4a95b632c58aa783bd34af4990e6569674d54a17491571541159119f95d6e87414be9ff383ee72e9c05a33b44903659834806b7026ef5fa9819bc659ac28031cafd72a9d8fb1141d3bb1a2092b84be7a4e86464156007109b5bc0a35aaa8d2dd3f279d5d5b05aebb2a965401a4bb65a870633e15553a07562aa87438fcec3251e15353a3a26248b7b4798a3c3005bd954577177e9e82ca4f21d43d0590ee4aab1479f05c91824a7733365278dde54a4397c26b95de0ce0a0bb59448e6a8213b361e913da4bb33903497419b0753bc9c0920c0ce9eefb345ca58cee2a56f01f99aae0ba6daeb2a4bbdbabb080a9b364b2fb229661e9b35ac56c58da2cadba307023ca5b0b0343bae5ad1505962b1d45956e4581ebeeae415178ed8ee205aefcbcc067ba8077edb53a94078a3c727d1314507ca6d206c508854c7777df8792957b2310a4b3fb423fedc7fa11e77ba2dc37b1c091055e9eb0a3bb3b79c7ef936ef3c5b9379a8d385b3b947be2468c1831d24910944f80a0896e0f46c6f484507727cab7392e320b1fe3d6ec9f3cf1d2dd20489b3cf135f93027ae132d38716ae204ddfdd3a626c626a274b9fb47308e572b4b6522f6fcc53d18d84b90e72b9b65557e9ed3701ecc83f90cde0489092c98908289254c4ce46062e2c50410ef4050fecd4f3cd7a79d8ca73a18194f793a9e07a3f312e479aaf3eccfdb5798a9026a641abe3592401510a2bb3b5a8b157b2c6d428fa54de4c1585e9ed52ac6624dd763399b85a32d3faeff5170ba2c8865cdf4beed27f7462c4c7f781e9c4996a3b205612c9c7ca550c6f487daa0c377598eba630e2c9ce9baf9b2543323ceb48a59b209da25dcf0af968213b4f36d5fa6372c25ca7d3b470c258abf2db68495ee8612c53b236bf3123bc070360704e577fbba5ab156ab188eb5dd946880123b28114377b937bac178b7afde8bcf9c44952472123048c4d1dd7d5aaafb5ec48f479ff233ae140465ced60e217143a2078923480c008921489010813522204604c46e168ec3d0c5c4c4a062647c06507e5eb28cfb029c800013f2d70810041f0088cc4b09aa1748b8f2c1cf00231cc085c68685169cbd6504946c6a542419d98d4a46a67a2309ce64b54a6d58da6419f7de3338d15332b0060d481fcaead25332b0460e5ac8096d460ffe68b51c71c0f1860cdc88010cda60638d17b8400d34ce3063056590a182148c21060a4e70250c1394008c2f48e0451723104108b868d9a205045ab45cd14388b8e8214f62806949e2843663077ab47a043b74a575774e3c89c09625968112df0e3f906e971982388ee02a2168e2f2b9cc64d2eb6bb7c8b2451cabf9d9d6b6f0130892f8c0ce07867800d64debc0920ea45a3a272c8a3e571748bbb93a01c1b1e7c199ccf63541ebf33a50184e026129a2bdd5494825a8839340f8bf27db178fb531515efb72a1a163c2afa8db254ab70b0f141ae683e0f8ea7621c236544b5d7818d0ad7279a1e809d1675a29ed77ba5d9c4c903e0163b420106c75bbc0b0cb501d69dd2e0b98d4456876bb04b5badbe54503d4373f36323bad9ac9c97b9bcc2c980382e3eba6688e2aece8f939605a6d96b7af552a795b7eecafd4877f7349031f7bb218171f1726b8182219a2cf5fabda978e6a66d2d8e07ed6ffa8257a20f93fb9355db43ae976e1691e507eb4dabe8f8198d6fe0794f4a3735440aeb6ba5d96f4c850e2b1090edd2e3cedb24363a363d4ed9213a3ca7d1397175c5add2e4b72df84894b0df94ab1db8535e91d41a16e171a70ba5d94ac1ab370be2792398259adee8b23c613a44ff004e9939136a5d8c8dcd0b8ae14cacde9ca4d9b73a392196fc6dc1bd1d88c934ed72bb4f56768ab6a66acb2a45b017fdf47a64855345344535453645384a4a8db25869ba2d54ae668b57281a1dbe5051717b0087b395180aca805742d95914e51f441333886476430cc4b7d301cbb5dbcbb81b8b410236a229b1f8ea20c8d7eba6e5432e3f744acf9a0b5b3ea62d59f369c2cd0da992c839fe57d2c521b56cd8cac18ce132f80c5f2e3fc3027e0c0d2460d3d45b8118122a471040c7c88f683c90cfbfaca0f9b1feb794dd774f904d498001412c852820a2709c41290e30315141ab0c404fa090b7417417150428f6ea1862ee2a444142b9d8410ae2488f4eb0250989e6061146cfd73fafa140133fe48d64a5d89ca65f0fa608cd3e082d707b1d04083b6801342443540c04a93ca205d215d31c51009e8e66444964e953292dff746a95ca559c437e3f744988a2d4c4559ab62481fd08398061e5063b16e70f2c39edeec003a98b01ce0a2a2061529c3a7228e2882051e225e7d8126de0822302977128287eecfd848bacf52184518aaae1783ec8bf493af4505091224880955e678971f536f9d82107281214e40fc9c7e20d24284186a949882f3c3141e1a010d48620832ece0831db2930fb61ef0e8530f3895872c5d9ff230a57958d28d9bf594f3134e8f6e5fe18e747f76bf36cbd1ab84b9e17f5a4e8ab2bafe8e79a4e5f18e79e6b67ce9ecabd22bbef65e70c4f267126c75f8b3ad4a6a1f7f74f7871606ca875d21795f5e9e9a9a9a9a9a9a1a1a1a1a1a1a1a1a1a1a9a99999999999999999919954aa552a9542a954a464646464646464646264615a38a51c5a8625431aa18558c2a4615a34a92244992244992244992e4e6e6e6e6e6e6e6e6e60609122448902041820409121b1b1b1b1b1b1b1b1b9b9a9a9a9a9a9a9a9a9a1a1a1a1a1a1a1a1a1a1a9a99999999999999999919954aa552a9542a954a4646464646464626262626262626262626462649922449922449922449929b9b9b9b9b9b9b9b9b1b24489020418204091224486c6c6c6c6c6c6c6c6c6c6a6a6a6a6a6a6a6a6a6a6868686868686868686866666666666666666666542a954aa552a9542a19191919191919199918992437486c6a68665432a18b012723dcfd231f3df25d6cefdb90cbb1afa73b131ced939b053fa7bba58f6c6b9d32a7bb450843f6855bf868094277cb1e39f9635fdd2d40e86ef94177fb40e2f9f1f0788eebe06b5fb8b6eef87db6b5f374ce24aeaf83bd3df526453cce1cf53909b64039e6d0c2832cb529dd2d3be86ed141774b0efa542bd2a3bbe506dd2d36e86ec9030f293b3c3b413a2f1ed950d0d0108f8ce7c7c94e1090aca8057457abd6b5f7f2005d7befdf8cacf0b30be77ba29bd1f595d62a8f0ecd94af9db5bcfbd363d1ddd282f68305dd302f0dfeb532cbc0b7cbcd64184b3157596948ef87e9c4219637b73edd2d597ca01b77b778a05b3a8045d72a9d2fb3ec99d4125d9c44a6a64635df663177bf4963536323f1fcfe4625e3643e8ed26e5432a3c4a48b0389eea001278ae8a326d24a77a5638dcebadb4603272fcbc9830108ae563211ab66c61b95cce8b16e543223ed45ec936c7e9fe7667e44a7d32c0dffe2db653abb51c9c85aaca842a7bb850af05e9ecf8260eb861174c3706fb8e1861b4e52a688b247c36a95624c81ba5ba4a8928b1283424543c9438a4772190f79edb1db726bb5ea6ec9404b159703b83042133dc21150889c6c9800039874675ad5c9b4d77451d9a9c8c909729c9edc612405cec806f3729391704835df6873d7862e03d10edd7d72e2c6c909173fb46e1a1d576cf082530c8dd0e62a6d42dd5d539a58e63c9639195fda33ff5ff94aa11a645f321af85826d25c00c3e9c6923a0b6796c6900fbac3b85aff99a3e41d5b7e6d4f7decf2da9be31157bfa3658077f84a51943e4e23463095b7cff10e8b35e0520fcea4a5553a692a95715f5393e29bcab49a4a3d96b3d4673196dfc5995653f35fcce5d4a4a97ca598cab8cf9882a9940e1fca9aa2a92d848a747f9f3854ad28813016633d2f99e5ce579d8863922ca3d151628ba11e1ea63023e748143398a852a0cef32ecb5934f80a776eefdb60f4d99f9bfdc1380954fb6ac8a27b864c346941132e7ce5166842a5bb93e86e178c50400d5ca832151e7d4b141780c2024fb438d1ddd244df4eae2c729982325f0b64f4bd0d56df48c61edf9fb9999b32d787b5e6e764329c5d8e9c72849850d1dde18763e200264138f93bd687cd7f7026ab93076734df3f9a3207665fb355b33fa71e164e3c51a840507e3c5d6cf6350be64cef13db6949befdf7047df40a61c9e4b483c269c7849dd24eebeca10347b794f929b4943ee5ccbafbb19cc9e694b20fdf96f3e3534e9733a49546ab8c3cf020c2104e2d528c28330e695ed21de16b69b2904af02ba10326c099504af13104f350050026e8834a0a394bf2a096283ce2f181dd9f56273ce20122e2d1b173848914ecf9a3a18ce391776cc93bb62cadba7ce86ee9a18587ee961dba5b74e86e1c211a000430ea6ed20987072b526c4048852fca40d2dda41a9680129484032e00467797669406cb833a247083ee26b13153a5200a047290a3bb4946e0a005983b02ce15dd5de2801a3900ed682835e86e170734d102ca1ea6178ababbf4c353c31d4614312208dddd120024d4d001134d80f182ee26e1090af0416263458425dd4db203084af0f007137520e96e170b782538613b0387197477a90d1b23300c501c41dd4d3a23052d06ecfcccec3e9259cedaed53929e28c1828482969c1254f3ac56d0dd2429484b9c5634355d4c4a04af0ca604a83924b1800b337763785cc074e572f04fab13c33fad9cf56b2d1af8300c6250628ba5cf63998365963b3cd8e51a72625fb937722441b4af7253d62abda3e3be3e3893b56a6bd58e21c60c241f29dab07949414d50cd919a03e0dbd164c93460fc484a04a3a1d23435184b9b4f98978cfb97630f9447de959ff35aa547541368d58ccad62fdc32ea938c0edabea64bfae46a776a1862a2c4c6c70991d0c9880af876d5522c3b1db9c11135ba7d352b3572d47d7184e1d66986227e5a640d236a22ca506643913c162073f20281eea81002ffe87f441b3b755e77772db4fc99b2758fd3c9476bf627154377686f0f956275826f77e4da47d1d02bb095af146750e5dee83443102379b4af3c4b98976e19329243c6bd4cde51b6dc20254a0b94ee161b1acf60080003d32f7874fb4ae78d64ecf4b2a465dd7d13f6a9880d58de3e49ab363c0222e281dd1d9df02b12c3afc8ce11e6289c6b7bc0993461524bb45ae56fbc322cb3c9a8286522c632d99581e1b598e5737fcab7b130c5c9f05a8aff6979f6f37ba2f0c3552bcba0b4b158302f2c9cef895838389bb35acdc7d9d96ac59a953651c51cb1c2af68b592399a9f43384f2be4d19d5648ad20aee0d35a014837002b2f6303f0692c0a808f9300ae9c0430a5bbcb81d4be4e02900218d2f486a9cfc4005ce9ee07a9ede6a700d8ba7bbc0150d29d7dfdb444ac2072c38988911311202a747152a189f69fada3227d5261e6e8a908a7d31da7d3946eefbe2ddf9126da3b4fa7936903a622999677b766afe8b45687dff649110ff1c1694817a72131efc3d07e7f3d27c32c33fd3ba69047372e824a8102a7147a4e29acd07d75467b047fddd00900e109000738a19082130a40a000744201d59de729cf539d2843f7561e904e113e0921c149c80d428874775e0eccf4a3a0887b9fb6cb55794216273c713a81a6dbb3d9276833cdfac904364e268ce064c277b7d7c92c77bcdb8b366337c103aa9da8743149f7b19c740ad18c000000800053110030482c180c86e321b170506b1f14800164b06eb8481c4ac338cb19640c32c600010000811180116d920163423f888ab4f54a339830f723d1fd44dbe13205fdd94ebaf9c433657a00386a57a0875d87645f0f1e641ad9c164c3780b4f56715b760edb579cbb1b6f96d9cf06016da5837137396bb082522ff904a0fe4e0dbbe080ad8e06a9e1df438a156ca1ab416e7168bea2c25ef800aaa6bda43d0edce6f7ef23888dd9f4d191fd1ff968cb7172370aa25226ab3baa652df54028dbbaec61fdccfe7a89feb3c9a8cf40d250731069feff71b552dcb4f224cef529134a094fa961900623a50721cb69eedbba1ad78587b071ff316f0253ae567757c3d3f02d1395f47fed960d579883b9aa00ede2ec52dbe2edb5b6e1711f96640385adcbaa6c51612982d256a0f8e4a187a57dda24af3af64954cd4326e9af073a2bf6194f6bd690f1b2a716780bed32ad89376ed0fe3bac3b4798bae4b28fa441ee28941695d757353f48d4fd10fccd730c4f272c536d2e69bb77ede4b03229476d5b779619c88165935e404db184cd3966eee6b1a37765d61e175c1b39250118a9c130dab1134beec64cd7b39e077a9bf2f90153b685400ed4ed17bbb0feead9e23c587aeabfa4fdd2fd4957b4416d080086622d3700d7ab413144ff2b0e68d5265b3a821ae7a1387344f20e24704c07287b62a08b630840d675b07ce9aa61fc73cde2010255a743d5639b26eca21fac7b18153207e50418faa934ec7f08495fd2a8250790cde91bedcbef62f8b13c359dda99f6dcaf941ca30052c926befcf1f5f37a8c003cfed1e5021cbfc46b594b473e75720156f5a40204b45764c25e5f764b465a137fde7b238ed8b588b6468e2424e034a754a21398dc19c09230f543bd52bfacd1fdfe7b880a7173eb45d3b60eeb0f2aa6a7064e900e33f57c526728f1ff3fbef0c16bc1985c9c656bbb93ab21141a91ba9e1db72f7dc3b6789ab549e0be2656df92d0f941e40170888187ef3df856e530f3a67f42ec802be2d01cb6d1559b907f8109ed81259d510f172f6b395f545e96e5cef0720f9e8c603d84116de0e6fe1f2d84432ae6a04b6f60593a20e6cc07819a8ce57162f315456a16b2eef3f9d7c7de0899d36eb5bc3afe98bb5d1268e19e41c8d013183eeb0717048a98bb5a1817f150aa9757ad586f32d6733487b648052bd278652318f25dd4251b206ac79e94a3790501e5c04553778418945a39c93a1809f223141977b7b2d56ed74a3335dcdfe359652d2d1bc585817350df7a4743f88547ed163489335b81e303c614205071a5f4965f2e635dae9f097ec3d89346c30deac8807e622d36c583d5a64e5c1d3310c9159c762210d0303d652c173f9279aa36b600ae1cb52781059d6eb4a18922dfebd3b7822cc5490c1bfec003bd52d1c1d066d319efdeacd4883e2cbe0fddf59d053fc91dff937d87ea0bb5121aadfd16f38fad49bd1e674bf9d6f95e9f5f543483de53ea1bf323d94fc3f2ce72a2933b29fb371c5b0f0728072ff7a276e755f4d1df4ace453d57c0ac389f9468b162e7b8c09da41e310e214538a9a93b2a0150ba306f6f0b417244147e91723fa16b19d675e0834b08df038a9ead817616751005fbc4b8344429eb32b2eb954747b5c970c41b8718122eb9dddc859d3dbb513fcac360c0f5bc148992a2f6ee470902e907c0e8910037f1bab94d967dd32a2863b05375d1a52626d2e5434a2fe9020a7fd53e2287c0526ca9856d3a6cb3e05a4fd0efd9fb1dd7ae7c889a0d8b3084dc469268c419a997a9aaf34be29fe2c2db5e8c451b4bf24d0ef8b8c341e80ce8447684b79b94f91412afa823bb6120b5446e55d11622c9385e37fbe76012a2687fd6c1f035100f2bb12634b883a2f039207d7b1a47b77dd9c7b5f6da47259bfecdbffa9b6af4e1433ef2d8a8f84d5ccd7ae3d6a76454f452360a318e73a395ab269af8dfab4a5b18880f2a27830d25941dd75064a95cc5f43fe013e418b00a54fe8386ecde190e3f9e32c29e3587d4e40281ad79f5c9e8877e21ca5e59ab9a43ac49050d5d91f59bc24fa777d342c63f4d8f34042d2f1ba001daee1c7b3bfaa24d408030b5f7bf0afaddb4229f6c76851f1524ededc12f984f5cfbc88e7f347fb068347eb9e119ee958b77559d1ee79390231a26ef8bd7aa362d9367e4354100da57b0f78be70258f0a36aee460f0a200106cd784c3498fb8761455bd7bc503059af4bda0fbfe42a574c34eb3e931f632cf48924e7923c9894657c8e3544c3c58787e62ca802969839344c4af9c7c0fa3c5cb33936c20794ed998fdf23260708d0a9670f6690104e30579219fdb14dcb89b667b64fc5f8deae9a1c2b9bf5a91dc8b632323dac2c550bd5b4e79c31841a5b3cda72b38c602326b1f1559a830381d9adbb59b5e917df5d8678ebbdce53e87daa7deea524d56f623425581b3a2076d0e41ee5e35ec1fb3af310f2251e8c91d23bc87f99ee0def6534c53df6c2f707bae0f8fb75c4fed7203eea375d85b1fd742c31076f2eef9a8e731861555b3ac97cbe5ee49eebd089ce988359f9a8163a2acb5f6fc3017cd0e64efeeb9bf76830ee2f4d10c2b13a682af667d006781980e34cbfdddb8fb68bf135fb683101f085f207dcce8a8bcab83a2ad70bbea9eac904a8d6b33038be5c1ec6fe512b51ec0285ff056c33f40c910296a320bb373813ca3936dcdffbc1bf85f42b29c11f32594dccc6517b77e6c1c7e32c237767ecb430fc9efef568a6c573d3be4de35dc9240a4f3b3770437d06379c8b8522075e42a3fe7fa891f9ed709ae8b795dd96889299a599e59946058351ca14c831ee4fbf73fe019a515d4b67f4ba87b2324f58d1bcfb51921b0f65fc6a72b8182fc49c12d4b3def8674351d3605ffd416cbb2a322136349573ca6d9c7820200a7ee13a1c10d2fbd3ffb410e6460b21c40dda864a9ace3da5b8e230a5e941fdfbb5ad11bda746b032141e5c377a10032ebd436d3f3c9c3687bf4db7774dc0b5950234783882bdc07c6014d2992e77e64cef0ce0c82fbc80af273fbc752013d96dcf65341ec3e4a9485c4a9d652ccefa8b95515d331fa7795e51345704e5b81af6bd053f6a3e7376ce98dbc71f59f77d0b167aefe68a1596c00af7604e14e348b7052ec7b95196867ebb4fdab17edd5d1706dc1d623c8a8a0628a6241beda18cc801cfd2aeffbde32eb916e3f644891f0d6e7f63db31130ab92eaa25d4c818f776fdf1bb3d4ba66aeaed0e33aa97a52ce9056148865563d4bba1f98f5490a7b5a4d8fa43f8b9d376e7a241a509a081976b026ce1bd132eb72712fbb989e868e98cf228ea3becb871fcc04b4468e8043f7522e1ba6604ef23279623da61b6f392fcd089b8c99cf9ed8e9245e6b7c427fc6bcbd5f4ee1c9f58ef616c617842bfdc78974b5bff6cdd8847238378c072ea893ae125e7ad41a95feed528d6bbe82b28cdc380996e0cd29f2ef768de74e2694232b9aca9caefc46f4379e6b7c1c01ca9d1bb0de6b383e03c392c345d380fece3ed127a6c47f9b6049d53cab1198d8ef139db72c40f39ebc7dbc35eb0b9b8bed0ed735ab354e6e11b230e340bc60744671ce07e826de75b51b26e76a3f2be2a2e24969e0c8473e45447fbe00f751a4e1436b36daac6f776adc9b1b2ac4fed40b79599c9616552bd50ad3dc78c21d6d8e2a12d37cb041b31cb30f76f48e8ff77e1753dfa98a36c1d367f3ac5a4810bbe32b3eea7d7c3d5c56fdaff4bce1d7eb1a113421980cdab69f718669d9893f4387b78feab4e4abce9a5d0f0ffd20a4a67aaed84acc73633dad2c11ce5ae3f0d927c7f86ff21ddb81a98393475c45f06e1ae870c1bb8cfc2418239e3c7e23643e00b76af48c5041fa097e9abb4be413641b951ab7e6fec6042d100df782e11509bafbcc4c78a6e29cd00ae8bc4154238825a9c866e1f1cbee575a1327639ef9e7653faeb0d4fb37f02bc08df9893767f9009b9454ac724bc38e3c5d4b6690647d71291384c2a9ba173d4380d33274b67eaff49a21c40a3a473fcc9dae92a5d18633a113c6672d87bb8cd9e87291476f1d180a6ce862a1c7ae128b0a68e872e08b5ec28e0a60f43150bb5f86840536743150ebd70145853c7431708b3cd2920f7f9ce104a08beff71e08dcf07291878f12190868e062b1cb4e420a0c68e071509b4e830e0462703150ab6f81048434783150e5a72105063c7838a045a741870a393810a055b7c08a4a1a3c10a072d3908a8b1e34145022d3a0cb8d1c94085822d3e04d2d0d160858336bb412e7768192837bfb7b56ae3205b58d8fcbad6d11a87d582a766cf8a03f03479f6c085d22ce924607d9f0da7a040db1d19aa915f43152ff0a26b406ae9d8dcc5c259e820744dbe1aa4ae50cb3b18a89b93462a2cf7b2e3006ae8dd904b05d9eb28f01a3e9aa6489116bb1bac398706aa2ee45587e06aeabc810b65334192b452043168ef073267390d84988516d80ddb3bdec7edff67c4aa19550750281100602d36c832434ddd0de7aceb6f016b8bd2df32c77ff9775fb062873128986760463f3cf0610b5721cbc2613eb77cc0c61ded0cb7c3f5d7117d1dd19693d6daabe2d00ce502cbfe785eedfd3cef047771d7ade1bb34088e90bdde08e20993b7e2603d329cccef8f604ad6fc4c02ecbe83df68a71d4e274ead4b97d3b13e69aee48728864af3606e278378c3a76f39dd3105c7eb5c72b444edae1301b5c9fd69d45264d0ed61ffbb46ee51899e6e0b5869d922e8739bf245269f331c5d5baf059ad1d2b880a7a1852eef25abf6da4d44bf1a9fb6691f3de218f0a814d4401af8ec88a9fcb7801a17f80176d21ddea33d7d603a07e058de440a47375c729c59b0d7ece8cfd87b1f350cefcd109bebf777728168229be25f10daa3f5be4d73c75bc302e2d8198412be2b14314c24ce4372cb214bd7b5e15f453fbfdb5f9f0a7b104383e0232944b7d313c594f223b1441acef8b73d39c40267f17dcda86dddf4512c87f5d7fb5aa8f6649028fde9530b71dc2fc39a826d6ffcc4cdfeba2b231e8dc34fdf63bb117a3cd015565eb3f658e508b70380b038621800832198ff3c429134a24fad9bf05bf9a7c423dc54df1b14d7e1d8605a45c16a54c93cfef2c2dfce684301ce5acf827828ed23f094f60ed2eadeab5efa06af686b86ca821f330792ebade1f3e69877d56c8bfd49bc55e3b3319d00ff1561548d593762403c45dd9f2d5e3c07e99924dd645fcb341fbf7c89417456f1212a90db6efaf67e0be1a5b0f00a407532eb68ec41f27e92a3fca4281ed7efa7dd78b0a311c9e783694d8f4c69aae06db1a1b4617f72dca0da36732cfc711f994f534af35789f52bbe69bfb22497286b638a9950de2f0264df617b17a428cfd360f3bd4573538a8bf4c0455bae19587b57692d2236f652852a2696f89549ed5b04dcb9663e54bba343676f9055523ff9db1360701ec6e5996249c372663f3695b917a68bf686f3b3816ce175014e8f8967174d43c01c3dfec86645630eb5bf2e74e6ca6d901585dc5acea5963fd99f85e24f344a1a85418a8bc1ef7d80c343cc0581fa610c68f10fdf0ea5b4f9f0277450b4578bb0e791ae8be0aac36d25fc80e3ecca9d49499292b1f5e9ca04cef8f89d37bda27572fe1e11cc3263b0e672193b0f5254ae7f54edc0c16a0ed321f8ca261468df5716017a01ecc5246cce91b19be7a3bcdaaf86db533e324fcff2cfba65b5e8fd7e77999979d16356a08d57fb221aa4ea913f5f02c3b2c8a3e672e2ee7836daf4a6c4dd8cce1dfdfc6a521af1f2c4775435e643a8d8986a0f701529c01178574fc203f8a3487002f908553f6c5bee5a8f3a642b4368aa98c5a01b881f36612ff0d97f81c549a32349a7d69806e76640d6b3560d969892047b238ae929f1fa90acde0ddf515aeb512ec4c68ede1c94e90d7a58d3a1baab4b463ed7c1560e61c7192237f03825d253c7d270d778684c7d1797a84aae2788e8dfc736537a2841cf29bba11b6896dda231120da3ec6ef4a9f7cbecbd2409d041442c417b1cda7a3b71a5d57fdf4080cafd6491d86f150a3390fcd75c5fb94385630b3a09fde356ae252e6ce54869207bbbbe35c95db3165fb1ef048a6ecf314bcf9a78b528d57fbd4ea2e971bd9994b898013864daf267c4775fc44522d5e3f4d9fd05708968f58cfcb405c1c3c55018e87af3c93baac9b1fb54df27391871b4ec6fb62d4d41be727fc8850e5eeb4cf3709565b88094c92bd4f258f026b98094cd96cf18a44e2c585c11174f72911b17ab343f7111d84c7e92c1600895120fc47153ca0c921a871babbbc05958de0d50821cf41cf749967fc2ec196026fc88f6c751fc2fa15e71143c3a0be880117e225beea1dce1bcba2ecca1fd552e5e6e66c9be981169d410b8461434dcd58cbe057387595c8f4247ef72f20ce539e5bb6362dc441dbc533dabbdd1f5850845021bc018a9f23272c6b83f23ebc45dd9a2aab315d078cf33df54fd4414026d386489994b7f7a126e2c7ab72e7489cf8e6ae348a8375835784123bbda0f945197e998a7925467c34ee0ef60a687e9970579466ab361f5c69de7d709ad676ccec8d23e05667cefc388bfa882ef42729c71f1a6c0d32e7398ff778d8d3ce93494b53d0e16634dadace8b827276f9e6ecce147ec84e6b7302ae4cc86be3e7db3f6656b86ada845678c277e5c225da19ffdea5496c666e8963bfff1ac41bfbc94a1c5a821c5822c245f2240aed692a8eaa90a41260490375fa032d626cb56371065faf27b7fa1f71b25cd5a8c65e3825373cf6125b525bcf9c204e16ccc67ed0b4951462e9999131b8cdf3d63bc5024ef4b633faea78c18e6162cfb1c916fb65b820b76d07fc75f0fd6fd9685e090ca5783984df13ccb766f545f25d6001d109084e47cda3b82e4bc5e0929fb7e53402d2f1383c008402457a1372509ae2775b2ee38035afad800901dde406798c122b31371150bbdfe1f5b8265369085927826669c20e185178646a24425ae8482eee01bc73c77855ce45c013f42aa0e6febd90e443445a9693fa8133f80bbb0b2ad0f4b313d1590bf258cabbf380a62f4d2eeb10ba9caab2d64bf7a61c611528178cb087c8121e4b6e0afd04e3756e999ab9a19e715737058335ff28bcbcaa64105899844501c4e880cae658dd41f5b1e576febb07708d8954071f21b7c838f50bd5b460357ea98d137bc7f3ff187d48c1ea8016e92b252e8393d1ec510e5c02e153343a28e3174b1a3d6d7a98ae18108dc26a6824a828018d1193a2283f11a3b2d557363336222f1e118dc25c11da30df9dc1d71923df81c1a17f146e44c1cb13c619f575ceee103537b871d601fc20f2f7111a7711ab8443a9c234c2a87649b3c7700064da7c3b0660770203bdf942d38600b51d8c65ce957b0f9d6a70d8f6319ac47bbef69856be3e76d75a09f346fcf6d0cbbbbc043de3e4339db83dfe7db41a32844db9741731ca9f596db2102303942df9480d4f062ae558e8c07cf7830f404301da8d8f8a2e1e9321da2f66b8178b29bfcc96c6650bcdaefb748e1a7c7c7fe794a63ebbc96c6031a56661b0a4a4714d59231fab56ca58e27f96124f7a1bbe678c08be0722164250155d0242e48bdb1420b8f4cd07401f5e159e3898218efe0298a4acd78aeed88ebc8f7f0e4f1c5b56eeff756127ff281c66b1dabc8507bed5ecde8c9b68d46d4902c4cc8d1f9060e254501ca00720078c7f1786ceefe16f5b2c5737ccb777d4f81103dd9e09a0891f182dac0700fadefd10a7c7777624a644128834941078018a728caa8fcf76b72a46460f611f20c7162a8cd2da76123c3b987a2bd4ac4a56872b52f78575d087f32e4fdb70a0bd5a879aac699f5c0c2e8d6e6e56a20b16f11bed17544e4a6072fa2e74f3a763bdbae2d1b39108e100aeeb79abbefd32febf0d534747e31695b639c5fc4acd0048a5031811c923be83fa82e1e607ad05989fab96dde614ab089d5c4cecf355902c7a285ae66ebffc34e69fe7574a3e0e397eb0ede779b3f8b8a58e3f2adef193e16d065b0e9a2037a1d5d30da233302057331103c41e3bc62076192d5f9936a7c94e683003647a06748f46147cd25b59be599938266dadc3fc43cb0a9c3b81cc2d37f0b01f3e7a63f705c3cfe419abc7231cfb59976429659582aca5d13b488bfc1e1fd1c8a141c9e4173f4cf291ae0526c682eb83cfcffe6676396daa372c88e51b1d5ebc200d948f4ab75b5c62db2bd844649389d9c6146b1678174bada8b8bd0c20b94d4c3b52b227a3af5a62e8ac12962ee2bfca923a65cb511d4b5c70b026b674c3ff78e1c6d54a8341d5e864ca14678bacead6cce46e8c911be3562f1cfd258b8a64fe83730813520e085b8a3e25e10bfb6bc8f7c759f741a92d21679f85030370b6a5f632dbaf70dda6ed24bb296b34cad454c01067fb9378b9eac5f3fb1b9ed7b8516890d6ab913755401597908482b0f90598f7e3aac1d16461ae1d4df64b03f27ae8e770db8ddab2bafe835e308529d29b7345e9e619ea0709c2fc098dc17809ee40c6f6e36da1d98c37f40a9e3a8c296129f90aca64619e1043146118bab624c75368a7e8b1e64168aed00066fc4784b8ecc17721c54923492a47a44f7433f9b46da77465e171a5ff675ca100931560423e019ffadd6a93ce56646051ae3570aa3ff6eafdf54d9f0d068d7c3e75d241d0fc064a2a78389174d17cba42c1a46afa8d52a47337e4e0f18f6b1b32a82239bd90f9b35b7f6fd20f2d8585193df65b779b935c12adf702d6eeb2eabdb9dce65d5d23d7bf2494eaafca68639650e193110f28fbb0f0b5201bdedcb0cf6558f84811720c6d18b55e95192af3325423946a6d54635c2ebd4a076cb09af751e31a7aa0cfc5bf8dd64a63a991d5ce8e9430eb40ebd7ace045264952287eba31153663c0a7ac88b8975308a94524abbdefa29f1156719f828a1a4c4d6bdd038ff358fccf47a621b672b98324097198362020d6564857065c65353cc6d7667de0146d0e530ad1530fd3023c3d2879e3f0bfaf9125b06a5b54d7226867142ec374f5862c320fecbc93cda90b7ebabbce77c54ea884db6cbca397cd59c6982d0fecadb0fff62dd2a752e13b586b7d17b63c477aabc79a8a7fc0437dfc4f06377b58b791513be5b1481261eca9e46047be68331d2ce5484431da5a50d1c3920c85487b06df60835d38c5f4563afe38720d9c78a51afe8a5cdd83cca81e1a270d2f775c19748ebd805b05da105175a177dc5c06bc55c3e01ce5e52f44fbc933a40d1e3c0de36b1ecca512ceea170fafb08f21316c58a300221b7e7e21783faeb8bf73a74185d2d7a50be270ffc3faebdcffb1f0b42cfc4f5f0b43430eef94cfd11de442110baa52e11fc99aca0e2442f5df1f57ec4fcf559bb64d291466e34d440600b8cc057ee715bdde84de644e50e16038abc11749cdd7f78238f451c03795e2f1e7d3572cc6dece83cf751f418051adc29481efbfbe94077d49e9a073afd16f69079906134ea15caa9bb3bf3f95c30e8f244e333cbb8f2b07c580e32d9ce2095df1cd07d6f8d3e5c135cd1b2123094d5c1b673eb248a09d01f2d4b5ad9f4ac8c328bd0b0747e9c7b06cc67897cf458835e11f30b87ab10ec6a1f3b11230209907d891b81415a8412f1ee08688370fb65ce778aa61eb74c81a7a7d753e4d049a41313f36ab0d45ec498be9a10165afc09820fe7c3d493c1eead80a18f182d46aca38246a08017bee656c7fb0c42278cdc7c99c774d1894f7f408494fc819af7b08b811fc0027d536d65314594143e22de2cd5c15c903e7b5d653000ad8225f2d8ed1f606376b193e506f9358f3c36ccd4a7d10769aa09d490b242fbdd38ea02f426005ec487f850d4de9d970180f00b1c7bc27a49d9f7b9c24bd767ccbee34ac7f0ded511dd970c7d1ce2dcc9563a1c7b95a14ac27a1f25ac76ba39832245ac8eec92f46529de57dd7ec935fa7359d3e663b0379b08106cda3fdf529a9ffa975f6212ef88578a3dc7f99707fa12d29e187558a6203ba39b242147027e3420024ee8af8fa1bdbd6f2f11bb0d27d8b3595c0f6836848b5bbf7567328f6a43b95ce0d351b8e2e5af012f0b6abb8e2f4972c81fed0065879c2bdd0b1ad1bd121d63afad4b0d17d8e508191f2ac2d46d233bb97e703c35105c9cb7044cf621be1a74d8c7606f808eb7241413e866d7a5a0a336dfb55436e7a4189bc6f3f559d179d59c228a3ac1f9bddbcf95e36586988324eb2fac36e1315e296dbb70f1d083be1032ff5a2e7d4e1a9885092d71957a5a08cd26e1ebedf80b066dcff0550913e85ebfb9bec3a97990a069e621fcec4c0900070997d7926fdc108f60f2ae88f0abd84ae2bc2c6584f547962046201f66a91c3ffee3c6b58c4e93ff9969d17dccf564e9d047edf6df5ca3bc64f62b735e2ba9aaabf9e10168833721bb097d1c99c57bc8c39b6794a06f042782636101d97ebb16d88009037fd2e1b81fa048f1b24e9294104677c8136700ae77b4f52947c353d7020db12033f0e9ec5a1e8036ece4b05267cdac4b736fcf8f462d52736c85daee5f78fc5c0337d29b37939dd7d1ef492110c32d1dfcde85bf4672d94c04e5c89ce9fa219b5133a0f856c7ca299f1807c0b321773a28f8ebd3f1cf28ecfad98df0f282e565f5209bc61e6dd6166ea7ad9dd1f8ce527bf1ef0dcf6581564573471bd74df2d67cb98c78a19db74ce1f71f8e4ac369a3132a67c85dc497f42b3c16bbfb611d92186e5ba46088441df42daa021d1097e70b7cdaca985637afe08bfe4c235a9b1a52ac4f725f9d6c25513f3d1d4a6d8c11f09ef9fb02911b2f714511154bbcfb33de238a93b70da116f2cdbd0cbb99531152519710241b14d246fa1ad627277ac0e48cfb2b94d8f76c5d461e7a72dc44f92210c70dab2886bd3cf0ec78c5c2a41d4151093f6b15b90ff056e6c557d7e8d0222395f0ef101e02f922772bcd7481ea181958cbcfad139e1b222a9d15bd0b3b55d886dca9e8f6e3a0e0ccb6eae5b94b38f1c3a2a637fdf105b363b15fa07f2f797713584f5acbe4b6a62921a96a9951f81b3c44bf6c980fc1f9bd7c65ae1b07997bbc6de2c4369ac74142c154f4e50f1d71728ed7ea0ea9debc79e70266be7dc11ffc3330a7a9884e36e070870dfbbbbc09f0ecfe35684d524539368cdfebc481bd026e172517ec90c11a4962dfe24a89e432db7d917914061c2193b8dae31fe7b61f1bb2b521e87198e5b7506b8974531a643a1f1c3b38e47453b5e31962a82453e24cc6697ec2727a07fb16fd9ac67f28d4b192f669bb047f5202b324f88e31fcc9032f6db602ddd879beebfbb5369cc94cf374e4baea3dda503999422c16dced33f34f749d47a1203593bccce76f6b49fb7f3bb95d8caa97b2c4cdcd14f26ece8aed1eca1fc933807a47cb90dca85add6070d91e9050411f9e55d96c740c240a79bd1efa026721599fcbcf051836cb443076ab21f51adedec2a043b5a3ac23bc8d61e021cf8d7a6533b13b902c7932a29659d82096ec1d9bdb37027e30c7035321f6d4f98d5e4cc29c791e44eed53352d58d5322d0ca038eb53b500cced0cf8aa1340d4bf1b55a9909ee5ff71eb0fae533f5091bebfac5b7a70a067c04239606b78915fc36d6efb90b1ad4ae57f678731202378482f2ae9024e7b758503cfc926a30f34abc3b6f4b40ae0af3a82098cdda79643f48a89667aa24d9038600b2bc8fb8752e2e9d8b735c22b77f17d570ba09e79a4aecdaba97422c407118db7d69ae41ecf3f54f3f68a859ab5aa9e0aeb3192ac61a4e7c98c610582d15f9a0c2d6e9bb2c5cf2f911631fd6aefa964e170ed53db5625dd5fe546a6f2048cdb279d6310c037202fa81b5446ddcc904c469f02c117d6719594264cfb0962176bb9dd6bf2865e7b4f17bf7fa16ede20d3ca2345bc8fcdc9a3aa2d7d58bb5cd884a1d1c581ba24c4e7fc56cd3fd48e9bef56e30a5c1b98000b8a896ee257e6bd86e1527c8dea16eadc47385da660d05ded920ca001709526a0ecd04e080b41e1afe68d668bbc10d8329d8c6e02ef339ae502d2b1fa48462f07f807500c56e74804545c0004e93a5c85379dc0e735d0ad1042b7d97358498005216a0f723a9e364b190c20e5500225b82fa678fd42fe711930a49d375cf1116af14252783728d1e602ca1bcb7a62a8c3906b67fb67dab73754a70cf9cc1ac3a0e27d250fc9f2438299e2e936a94a0613164b780970ca052100b29d657de20753b50e2ea8a5d4534e4b8ae16b40a632cd32ef0260580d6c305d698d3dc24917700294f727035cb770d33ad4db2949088311b88ae4b79b9b0b66a83e6ea1eb19c88c689929c4a868dc8d500be7fcbe84932980ca09b6ed59c3f27fb3ad506a233d4365d10c2637a0134d62c293c83f49497e9a2f4c8e2a9850e36110dcabfbbf2f135f0a199e06585d95d0616b8f344e08f1cbfb6dd5fa78ceec412c7e752a8f26dbf1924ab8d5ff5ec450a730b3bbabec9f39a7abab856ae09c685868cfeedf1f99feea35c4380233bf83d166991642f397e7a53cec1e02d176f0ba1ac9807b436daf74e99bf7c85a38b157d51e89cbf5d4cffd60964e794e4d706f5b6238f48a81535a85675eef04b430911e17c841e6c245ed422aa3dcbca29f31baf9f53f185127a00d4a7653723d4593db7b33d15ae6c443ba34f99d8ecca86fc364771d8d1c40ccc86b09fa7e9a83c4b239746914569f63d460cf93000a3d2344a0d8ad33af3b87b25d23ea33bb04196741d497aebf0791ab2a6db9a6b4c0745d318f6a4db727398c4032579a1aa6b81ffd1f7a933fef7e73d72e84109b77414eaef205e64e4515fea17dbf21c59748c719dfbcfa0f6c15b68cdce6b3aca30aeaebfbea1ff53c18afdfede305f4bcc94b349864843712264b54f961131430b0864533526130386b4e2d943ac2963d698c3bab35027ea3a2a7593cf63620e79c944e38d1d107d7e25858c7953464ac5963033dba5e3c5af851fcce4d753f95d9140e472fc306664aae2b3e2cba413629cd786fdc54a3b91edd15b916f5564970b9826bc8a0ecaf5891ec8876616529dc50d81ab6a7324b7e828ba8b2ae99e0c8bde5d94497462ad0dd4579406404ec9becb693f17e6e7c4bdc9d4951ab6cc1da2ed5a5207075fc07a5a1a868e85e0e20ea6efc1706d8714998e2ad1ffc2b0a717f12ee89fe0618affca1d3491ac8764450656442b4d6832601bed6788265b285bc95c3998c0c10af5fd0b8def02fa8c56e3ad93f9fdf599df893c08404d241af362181bb8b18106818bec9ea176290c19e133d3a03082808af39129961dcbb84714c0bc2297a643495fe2972e2a427ed9f881fbebad8fdbb35b3da01d5789168025e3e9b2af475548a1ae27bf0f6920410c161db38deac1aaddd9d340aa556826556f35c30ad5b1181c25aa68ec17b4ffe4c90818bded20b5cf08c45645ce7a511316d8a6e2b584d7705e4a06e5720432f73cc8ea1b0e011c9b2147598a42f82b0cd174140113aa6fea60e8fce3030fefe74f214aa011886a20075659cfb036b8a11ffded1e8c025d9fbfe949d1a05f8e0631606784105488c096a4828c4d1b441a59202c10491615c23119c24296b1d7e8cafbb3f1053019df5471b70bb77b152c30e6294606807f0f84d9eea693dde14e815ed55f776528b9bffa5554baf983fd2c4be2d5aa2beceff568390cc02ecbc7e9f544c3efd36cf3f0bf2b9da710195587bf42bbc37f952449515e57c9849d926366a49d1ef949752bca1ddfe67519fbc29c7488544675e9dab189b0d52977fb46118666770f4413c2f4765c2cd4bb5ec783e3e98980b3ee33c0c303648c9b5e0180c66ce90614e66ec20db2df978da4557994a27321d66282a36d94339d73c5c86282338fdaf543658792ff647db8d1c4c00dcc3841361c0abc2606247fa8b6a248e2b131427aaaf145607a05c092423288f1be84dbc1bb87dbcbd41b2974143d5c80d0bb559b6d756f5ac5df001485881115d2f49b0bc6a3bd0e8e371fea37a6617db5cd8f926442aa6c9c645caca9ff60052d7682623a1aa4066a0a7bb2a2a7a13dd9dc2a3390f66acaa63f7877849cdf8fdf6b28fafff567fde9e8d12e3fa9301b5e5529974a07213875ef738d6ab082d5c43c0b805e27459044a1d1d6e2103b988b0a5690fd15cab9070c79c1c173ed3047e98531d8181bedd3d07be0744ead7db839de28269686fcaaec6d0a8a45ee2cfffbf770488e4d25c1161fe2007301c54922efaf822c7ddaf3991cf918524bc703368ed6f20449efd2be3f3c4e2b0eca25420e6701f1c284599c1d924274162ba0e10ff9f557fc191c60c2058fb86af0a8af580ab5131c2443522f5cf641db30391551426c10dba4813775ced22ab084068e837757a8f2775f61e2a4cc8c94d42fba0a1d2a6a5101768dd562379cc846e7abae77c9e6ab20fa6741b2993f6302dcb306e5fb6317380b4896aa1916f4f7bc5785af1a992a89dcb7c6b9c8180166a72460042ecbeb535f4914ace7a41b18ff96c34a78e37e3fbcd1b1d18d0f9198e5469e8370d97a61af0c55ef253d4cd643d11368530dd29386182b0401928d0e98149bae9d10f4a2f3b7e5bd2fa9fe9b35119ed9dd9756a6980476846a892a2260289dbdc58f67a2ee3a69935319d1b07db8608602a345cab52cdef01bf4713a096b2fd552c26a352c14e90a770259d1144c3b7189c83322ffda2477927d50d56899ff627ea9f08ac09c3a8a154219e8c7388f5d9b30a072a86c195cf99ddd7d80fe483ff2d2df0dc1fb258c21254648e4e9097e1cd13236f4a87ba6640c55f5f9ea24fe7f1e2028c1c0b30763f16d78a7717c0c05484a986cd29108e99d092379c0478abfc6a4ab6609941ce5900efe4830a67e5f0c9bded3841a5aedff39fd9ac385151c1917b14c1f435ba06156d43ecdf297800ac9c8d9ec2f06dac999aa248d95d7df87c6cbdccb9caecf25303b03e670f48920be8cf3c68c723caae989f5764f73d8871a81ece259327cf3b1699fd149b73afbef8712b7a02d2d79d8aa33e3bdfbe5fbf5a25a5e58473fcc24cd06f648d4ac768f3d43b4851c7e195998b7901d2aa1c78eacd181260b6e86ef6203f7b769e483aff694eb3c4eebd0140455e6908d102f06257f17b5d7cafe8e6873a2063df4353f6a76d2148dcf52f7ff7e65566ac987b827550d914e8e947e3b22b7179a99115d7fcede28d285b4ea88e9b84ace58db8ac5591c28de7ec35d3deeaf177ef03aad2d169784ec58748ef18b5b779bfd524715798e3a71e840cf3e8095634c45ebe7734199c65fe2b6ee04a4cd8b97ed4dea79ca6585e4a002759467ca9ea12462e93de367b7b19522a9e09c48f70fe0a159467a36be37ecbc87a96812786c91966d1100210a9e8766d910f377e70a02f38f5e5d358ad63522136145142866cbee9ce97380ca00486ed11a76c6cd782ec94d8726e1967f0b5b92425c1841a8274300eeb9a5ca58ab6f620fb75afcd0487cc9dffb4ea933ae7358a84461698e604b2e35acfce55c4610030b217bbe216f887be54d914688dcb2c0794838df7f0a88a473d7d81a9f798065ee3b2c866c674bc664ebc235a44527b03dd3cc4ab8d56aed86d6978b7cbce80bc6f8cf748cfe4c5dc1c1e54fa10145e1c0218a1b4e838f76931714a2199b0ea120ec876cb13d665b128a2839437e7b8010aa9a09687a24fbdf0d09071f04fb0544fde139123116bcaa01e419377b1b01dc2b1aba264c0b8a30e43974c69ecc091467cf70c4b11d50bb3d878082c46a3586ecd257445f23c7a713d65a0dcf57bc66dc56edf051b67aa6654c12b27da5bcdbd184f210efc2cabff6c8fa78b0b1165d1e45cd110bdd4483bb1ed6d531042df9b013ee0b5bcc92ffcf90079ffccbc8d71583a93a0162f3ec1fab4d2f0ea8e183a6936b29a5aaa612e6448be19ec166f150c793abea85019ee5fcbbcac98938f31aa4e2c7f93e2cb3f1099297fb5a673821d1c0dd262c09d28797aff14bc3108b197ddb16fdd4c4b1132e738ee872b7feabf5b2c88004c3e9140ea8215ce7d1b15eb798daf37e0a1f37b61523d7a137605ed7229b9d09377f0b66fc4edc7ae782e410ab80d8068066a29c18d0bf32b7610ec74a03f3cebc8efe86f1e3a674c470258624a041cdfc66cc2e4e13f74b4997f2bacbffa9a9efb3ada83b2079bcdd04c3dad71d03babaa1113bf7845cd4ef1d42ea972dc5c7164ce0d1e1f86b02ce017c756a25ccd11478272d900c77634caeb50683219800b9b33f187580f895546a03b8b370a5e129973b46346efd9837c824bb42833db84dbd500e79c6d63b96223e0e0bc7f5d7e6656e88a27a735f98658f007b3ecff176f61cf590801390efc26a83b133cde0460a0edc7fcf9fdb3c8344cbe8d2f6dda7599d07875a4066e11a5bcd7bcdef622cb32125b8824d0f7c7c40cc9b514185790c60915dbe9e4d5033a4a04e32bbffd096aa9a573c89a212349e688d724f1775c31028fbdd09cf9bdae32a1e8f7aaa09c29148f2363e9d3cdb56c6e1e1393ff139d287c637205cf0b3162e2c35826114d22f77d4bfdf3d81e90122beff91479c49a3b31b085b6fc41e78e125320136aae0deb147d18b6082a8325ce49dc1dcea02fb70555b80c7c231776e3907150e170c6a998fb1f9127d18de8378bd1ef24c21e76714d5dc77b1d43176a3711e5d1b4d4cc907baee3ed175531c5af930a4ff38f70819d3771496294e53d93f05010734a8e79a390014188f3a3d0903639597f9721d81c00e6eb182bfb67704ca69c4edf170786f17b8e159c22fc1d0b4f064b58d3fb24083d4268e014590a1f498c3abae4fa804059f86c82751dd026707242949b3de1dd8d9e8005ae3675d4ea98240645359a098c7a47cb878745e1f1cace80035c0d99e6d13ba5dddd0e41106d0ebe94278e9837a50a2f851a702a1869e889c8cf947a420592e59c0a8e40a41732f7fd899e35fcbc403b33d498c43ee43af9e8c7f63c8bd1bd0754574c0bbf1403ed5591c859cad52ce688549e863df9a22f6b9b3b2148d4a5c642977f0a3b9b363917be12a258dcfcfe5336f52bb2c8a4680b020fba195a2a752619e636b0b85005d8f99d3dc69886dc8a346545e76516abd5148e7e8cbf7b3960ecad4c6d8701be9ebae0001aab6459c791341caa78332732b384ea601ae2a8ba2554e181009278f9c242bcd4e22ddf08a590c6b7d575f9068e7e047129e432bf636998274ad20cb25d0beed379dd700d09cd468039da34665fa539fa039b95f81f205d1ed20a0a81f4a92a28a2f89eb1a5f0966d3ce8ad63f632bd0f010e6f26d18efd56c3bee119c580ee08894da1c470968eb7dbd72c8c56108e576f040c70d51aca277b19a0ef7b1a2f2011f262982697616dc2d8772e1e3155a2b61797461e434cadd91a5e48e8e0f8d60e3cc2889d0a4e89e42dde2add2f747b0f71700208740a4a9d653ffcb861151c600958a39876ef8e6ec587674e263c1fe5baa6bab4f3d8308378cfe397be9ceff4f7ee2392298335f7305760356135b0db31f6c2113d977ba46f9c1df4ad43406a625c38613d5a5ebec0e6eb4d9ac5fd9c5e49a8816301449160d5efd4a450f265ae646897380e0321462d9f401fe8d12802652191d5045e548d622037b3c209cc754c154a2a68155939ef693ba8f8d7f5d0b4529da9223438b1fe7703424e3846905a1a3591d37c1f7cb06e1e807dde7d9370572d560122d8c9b690a613519d604d4f6bbf884b208adfce117ad1121036b40a887f7446b6508c60fb19751fdeb044fbcf86cc5c12a7ccb383387b682e5252a004ceac02fc1053a3dbf83c4fb64d959e5953220d1aac0ed841464f5f152e672634385e30b4feaac01c71344223765d3ad21a950544713056e05ad1378eb49e976648fa6d97fa40278b5b5f07c22649695cc4d16faa96b0f317a87d127e550248dfa536b8555b88ba424b7197a7f6f1a8bc5f975d304145ba7a5e447169e2fd024a6ebaafa7831091b40ddf3b72ef7244c9b97d1de2cc3e5deaab47b98b5765c0f3e3cce889857f6d05c167e7a356dc8588880b5192166eba76b7f1b20d3f9cd5b87a60b0a9229d62008b8163fa1d3611dbaba252442f2c9a5e1dc51291a425b6ca4eb2faf9393186cad64c158d0d4986bcc72502620c7e24c22370192ddc2a828a1da010e2d7e6d10bbb12b10df87f7e5aed82dcc3754cbcdc58ebf4740e16b46796f8b849d2229aa75ab69f6b546276a8672dd77d3b6a1093c3a34951c9796b8169e4c32571deed9ceaee00eabaa113544d8928f989a64c821babce49d1d62cedb2e3d988a051cc1e12b913829ed9256d746112e8a20bbf4d71b53c349a93a4edc0d03b697f1e029a3e19f0836113e7118cb246d0091fc2e4923bea006d0ffc8344d8576af1b1dabbf91e66697559fac207f62824de3e3c32bcff38e4dddff41b64b53eacfeac8fba63fee12e78a675635e713bab47f5a6d8fc94c3a8b4a7f38b674a57345e4205927959acbb7b00630d5b93b4057ccf32906ca46db6d41ce837761c4c23030bfcaea434e9a476f4f9c90d5011652e46c447e019930f6e19e36991c529714dd9cf5d858bf8c612ffeddf5caf97f7813f111f8d7ab2143a0bd6b24fbd0db2e4bf1a0581fa58a33db1dee08d6867de6001200958e2d9047b3551e65000a40ae0ee0910b9f992981dc9c892bff9c52e93dd060adf0a8a57856012c8e2e1f31a21a40d0cfb9e3360ecdba2c8309d46f4a1af62e9311a93d4262a1ab2f42559e7e3dab690db0048c6ec227928122c4f8bfc69d085108c7ad4827d3472eed3a31c42c152e8f418c92df07fb5173f57175e646ceacbb6464774299e8a8143f30077e1c6e44f6be84f2280d5e5083ff94ca8548b6baa7713cbfcebca6dff7fb2154827f7ff16ca7e5457deeaf5240074c780ab81a925e86a74658aa791b406abe1ca7b200f4c710d89a9182266ef9e0553bd26247c30fc5818d568bd66c94d1071738caa0ec7a778bc1b1659e0a8aa6f2af375f5d686a70952eebc7a9055ae01b89e7e80ee19bf0beeb6716303f79235f213749d1e34ed0e168243636bd102e9bf0a0f97c1e43c8a6756fd1c25b966563b9ace91828bb83e8abd6dcbc5cf1691bd3e0ce7dedb2c8073866a4d7cb974489eaea7a31cc559ece398f0f233e29fa9f88389428f83685d5cb3224b25bcd2e393a22203dd70a79cca934663603da5743bc6c88472ae86d81787ce2c44644cf6852be4394c9605bd82108d906feee9b0bb7038dd5a02c98867ac9bc9a0001447a1e68991a170f8270c0e30b31b56b4ada861c88d6c98f1da2845d9614bc877a33711fa2ef10787dbe97a9b0d0016cd8263d7fb94075d977ad86bf5ce0a9ba386e25cceb8efabeb698e71f16f990bee725e7c8c3e845ae7069d8aa501184d965f74a630402ed8e563a233847f12cbf2e522adf36968490057ecb1bd6c1aabb94351d0922c7ba40f9325afbd27bd87ee899916582a639dede2bcf365b5d705bbf495ed9cd07137c9ddbe61dc9d3392fff5277e26791585786f87d10b7bf7fe3c09eb27817a6bde6b8ab1d73fb94d5daf1d0397dd4627964a45f1b31ab0145289f636e87d85dd9f2b0007bd6b42e2b7d3e26400450579481f561f8686feeb3f4a3e088dfea22e73df99af3f82bb882b3e071889ec8ec4321d7b695bf461e0a0f48e0953ce3eebf31f7e39a11981e9b30f9b0237c06bba4e7069c7ef4a47e30bdcd867d7c5bf94711d3ce9b7512cb7f05e800a83850f9d354e7776de2c7760719c31adb946652c2c8d033f0593df3c7a4c613df959d368a5679e6a411267b0e76fef6b6ccf73d332490aebf76e21a698c72e008799452338e1a5bbaf113445a9133c35f818cbc317b353e36f505e7b24f3acee2bf0263108c11e343862ba32bf5f4a31fb10bb8f5db261879e489475748e7fbd12a128c02424a3ffb67b0e7642b243be5380f28e5d510875af71bfa5c27ea56aa2f7835bbb20860c3ace486a2ba5f5e97c4bb58e5f40c8ef55809846c0805a881ec2b84f867eab2cdf94a204864735a4d1b1740be7e7bf4563e93c268b5a1daf721bf064ff73319d854942dc92863188ccd357341fb31bfdaf861d83b06e83b65fa1b6efe64d9a7d485f47c01f39c491d418a550383d31abe53d01d8051e7db17a4f3eac029acb105e3b73eeec88dfb4444ffa5c8281f86b0ab18a20cbe0d9d1ececb6ba89513e99183d2884722ea0eab5d582a008d2f44e418e74e46aa0b57c929bab8660028c7388f39296bff4ffde9e1f83430b0e80dfa14485c27ff17044078707c44a6226d1f595c78616e575dbc4cc174e1fe272d507055d63399c4227c8e4da38aa83d63c845d94b8c0ceeed31cc31050b0b3138648633a7b2f566cd36b5951ba87c98bbc8dd5ea796f2b5b32c094bef3d69e56713776a0078be58f9eb51d90306f4bd1be2e5f195ea605d4562962658830721d3b761a4b320777a2e656c9b93616967f42363fb1f1efd3dc9c1836a388ba506e6337faeab4f418ad1f71e110e88c074ed5d44b9c11b01e8286e311cf63a40d053ea89b1a3a666cee3a8dbca13c1604a2f385e551d851284d09bf86bd652207bd55e4ca04cdfd858763e4b2697360bc864990d200043510d9c57c5c5bcdd9f2bf0f3059c31afe611691bf387e01b390c9825840f0e06927a19852d7dd89fafdbb1d9ae495eb1e22a742ef332d75e43ae6b5e476bd11b64a57e66dc467b4dc1781602e333671d1b8018225d593795eb5f1e304bee9bb30b4d440c78634df2e516a3ac03729539fca086a22412032150c364ccb1d5a463390cb5e1bce4a1f91c968168f26073799c24659551f159a5331ba706058113332ddbc17b5a12d7ac214a15035a9c0cd253ae95df2e17341c121adfea03e82d76651652d1bcbe2e7c3b2730e8afcf929da00a4cc2e3bb15f4fd71c499d19acb0622ce94615398269a5c709fd17c647398142f798e1f29bdeaeab75bdb00c02c68847abe560e4ff3d8b61c2ddad6e7b39f626d0f702059936d52055e2c73d61a6cca746bd2475f4dc4479f1d07a8ad9c45d2753e3d8361cb3556f0dec4c0a78383e69ac64154fc8d2814fdeb2765c850db151dcf1efde1107647178c7a625baeda6e5ac4e39e22eeab5de7785f35ffc77aafa867a0a876d563da69b037051ffadbfb2e12c0c7ab39fc4061a4362cfa2ee3522f30d78c05110d5763c921e5e41430a4a487e94e4504779c33ec9360b6826dc5a7009ba483a5345ac3cb90645daa6049113ca77026c6d015561c3866d3b02cbb3f51fcfae892ed6bfadbcdac2f1c33d17842ec1e811891e45bb73659676a3224ffec82615865f4ca54bf41eb1e92fa01c8f2885002c32237643cc6c1e8af2322e9724eb2915275288509c26d28c6e51a448802236a80dfc07f616da92cccd0457bf8e315a50b3cad23874d19b169ccf947762b7a43067316a6bff37a905e8ea5d304b02f4c4d9949027e4f0f17a103a5646df9dd5e46c5daadee2d120e4553d7787db5648f2b9ff3a517fac75cf5df43be14e21a3d2f55aab449b2fc8596a706dde2afef503a508eb8636b2dac8c02209edfa5acde9b15d647e6e17a3811dd76eb04d5647907da5c9d70c1a0475ca06b4340b77aaab94d891d58c5b994694239e26750f73ae658f188cd330bf3e8a2200c00a0235bed542a11bb0534fcd6ea626ec599cd595e1268e2a9804061f410050926913cc25500ddb73ba5a23cada9aa7bcd0a7eb7d9a4570f57fedb5211e8ed40af805f7d4ec1e48ff9612a3eb9408225cbfda1db8908331b44e037833753aa654cfff55ccf7ddaaf2072fc1e7a5b71c5aaff2e21495a0795e08cd3b0d3b11d412cbf0d7da6e8f799fb28d6bd47116c8f1daf88e3be5bb8a937845c734462a5f58bd0f4a876ad71b2e52e070b3c114d971284de424b66c3a4121fece3048ea79c2a24486a80796b47a76c9ba2a54b311510e58ad7d9b2bf2bdac1a66fc61ce59d666cf01efc1bd731646ba1441b7ef8832c44b7172f290b36ac557e0560a545796baee17550ad09f0163b037dfb62d22041c357987a6e5df184a19c69ef623cf41ffe364844274e7ea180d8d3bd1e6a232641b4658affc5af355c0475276b3124363fd69d1dbc89fcd8600fc7df0b4b68b9498d5115d271083913d1b68b87cb2e4208baf031dd626459fd3f0cb70f90c5974e07c2cde3d09bc6b3fb05efdce7a5754ac6a49e2049b8fbdafd7196fcb505364cea2f7ef4a5b88e5c8642ef354626329236a27f421371425f4127efc90dfc255e111e2a557b2d60a92f398ec18ea02ae519ba7f63738c30abdfd51cb14890017a3bb2ee2d994a2c112ce1167fb960a66f69b8e8e6fbb3301958e896028bcb4e37bd32760e48f43a52d439e9241c0051910cd1f7fde81dd3a72aa5a99cd2cb18d9d6abcddeb9a87def3707e31026aebc1a9ab9836dd1ca6550dd69275e77039d7cb0764019ba834d8f3080fd300229893ef5328bfd998a46b13788b8d724159026bddcf6fbbf2b4cab9ed066caba4e14e4cb9b87b9428d458fe54e670b0885905aa0f5a4f60a91e06b8959787f27fdf8b0b698886b3b0b91c271a5896db1f2c0fd5df088eb41ff75bbf4b95687db05e09d293fe56bde6119ea9c7c0afc86cd6874f897310fb43c2e257d249d5b384bfcdd67723000c8e599d20c298329d9596aa0476e6d33f6d66c458660d4f4cc34d849a18b684a30d9aba4ce75acec3369ea568c7f98bc860c108b55d9e99dc6b569977db3d8448cce42f0e938becbd32f0475c057be98edb625b4009c7ad088f2f939bcf2a4136d99302319b115790cdd8bfc7a74d5e8863036d30fb180412427966391dfd795703e5f9b1d302f9884f00994d93288984aebb39947916c4d885a0101d7d1b8e9e51fd0c790b7944990fcb143e5de84a4b3149c38a45d20f355582cba6077d7baade69094ac3f80c44a0f1582475a3ab7ddb89e4c80e52701c8226ec07d8ec4ed2ef9b607e19be32c4afb0b9d81dbbed9faa6addec650d8bf107f792b928cd391ae18382994a3d627e4bd8bffb6a23e16e7005c77b87f3ac46ce25f4295ca4ee3afb8cd2d11daaab4b00e308c258b7f1f3885607f37a162a28682676018d1d688bf507cfb711bd23c36f3959eee1f97defacad1226d7cbf3b76d91ea557fd67b6fbbd1aae63f0439f3fdf66091b8bdafee9555f9f29d68c5819cb944a994816f8d3bb1c78db03d9232f30cbda64c0293a780e7e6149afcb1e8deab961b34ec5e6df5422305995d526dde5454a7bd92483f120d2498e1a7969e86a31fb83cb5a4522745e28d5d10aabae6570c645ae16d3d4410e825dd8dfc10c1b3918cd3155e26a2d81dd18a01e5ed20256bb139cb54c3cd168a5c828768af4b57f8b66cc2ff3fa4eefa0f9416397ee096beaa19e4987fc471c58aaf6e83831358cd7ce8ff8cc13f72b7659a90fede38197a5efca66be40780b798e58f2c26929a402ef2c356088c3ac99a12cf4df997f02916173e88943df90aa7072de277ac5e3fad9a353586128c86d6df8537030b221f6cc601eb629c6f475a5e1bf0cc03596d6988b9482c507367e85d7453693999facd3e51f166f290fd78fa7b981a15fab32fcce89bcda698fffca72b91cbb42e1a648d7cdac5a0203bd56d6372f6fb1dc6ed038b4ca2e8ce2586a09cd44aac7ddb57484dce874e3f32da3b55425d726e6653a67d39e50b92aa2d09316297fc0ab0e4e6f230c5110c2559c82becf4448affbf72aafe1b961b5a9140b2ec03c34305372814b36100f2b0121ec930fe60f7a9113871cfd5b0048ee65d46a0da681264d3260f3bed7ac2ebfc0da43bbde9407648a7fcd27cbc34ae37c52203dae0bb7894ec2c72caf5b2e7b1064c9968206a029911f3f69c4236d7b3a1cbfc8d41bf8d846fe555895efbb31c70b17b67860aa69a0f23a5b82f7a01ab89f095c078e4709251add633f249e7ef8d04a9d4485bd0b2ff90972e791d2b1203326519ce712210b03f800315d094f92439b11f6a03c88e474563d5c7da4d0f25d1ff2458967e32edee4f2049d3b3fe55087137bd4a3d2af58b9669c46da16af3d1a03b4cdf30793bdf5f88f8af75347f8b915268fe404339e933863946c735bd13f40088fff625d0792f8d2c1c1b63216a9f9327cd7610bf73f18ea488e16b3db34ffe41a10778621fef35c94e3a07a64a81d669b7060a51c3bd9fdf04243f0b9b071a9c325ece504533d8a815eaf3d79c78e9ff9d1b5790dae8e8cbe87f8d3de1c7f7f8c61f7af3f45294cd5331ad4de7f1d3e5f992ecf7e816be3b426302ad8f6903b71f075a41e2d5af3c87f8d2a1eda3061d97a1d01dde9755797e0b57a63c2d973c40f0033911d5259a6199aa60c82895e586740ae5f75c8f6f35ce19998f571157a5828b0608f966ed3ebd8f1728f715fabbf031d691aca6c9f002e9d81f35a4aef6f9e2e797d52f8f4fda6c80e5cfc157b775a722977f0632735c1745b6fe16a46007086c47137275aef1400f06b872f12ccea0cc5c382dd957b5d814d0e99af2bac5f6a9435b518b33a833f3dc640c0a3c8950d380de0318f7a8bef6c84ae573a7116c7b73be19af5837acea51de07e67f84da03dc0bf626aaff69a8321d7d69efac1bd64ec55c706421be04ab75e86a390f04f98bffa6484cc5d42e180cc0b2b6631039cbcc41b77506e7eb246ebf1ce69f4a41dffa8f9322b32de48d8e5cc6f27ba5dea5227c8a734756feabdf5a210a9f130be4aaa39483a28f63cf4e0d6cde54d9db626e92e845db23c79aa34f693c82b8ab03889dff490101dd8b97d45981b7662da3eab99b2e1c8fc17892aa2895b8014b3b2e4335c12827491d5bf57d2d8b88ca44850efbd4c0d7c6dd13990a889714dc3967caf69b0df7e25385d4bb3e3eead2548010465342d76fc19d48084e74b3d1be3a0dae3a8f64860571934f065791c050d06fc64d34f96ee6f8c7ad068654b8e8fa2b3396de902fe084cbc403fbf247fe3c60948ed81ebfb8d0759da183dc373e83cd62f55926ebd36e8b905d8b7e142aca8dc6612ea0386c377fa25b029905a6e957d1994949cb56f0e0e96480cabb28f3061b787416bc759cf98c583f2fa8e58455f93a0cbcf4b02c7418001829ec65fa2976f38c29077a3fe651bfe45f8408dfc05bb111b1d8ef9671c39fd922364b706968f134ed80a408233a99a1c4984fcb47f026d1be0eb6449da07cf00798327252c567531978291dfd1674982f22c45b1e56894be28c25ebce1600ca68f0b7807defea677881d587e29e798ee15ed15ccc23701bf72549137fd20fac8f7cd075760ea9d4f8a5aedbf86c0bcbae4fb7ac50d95421239504557d2735803465c72a570c80c24e2a5e9d3363895530f1176c21c9d01e7838eb595a243e5ebc0583c0b38a71f061da7baf2323923e84e9944672ad83e5c47a7f9a330ed38490da236b5508859a213fce842f54f0feb3bd543a7cff64fecc673f0b577dce5de2b37ea09643167915f10d5a31bfcfbd1c4f9130e61c1272965788f399553b9e62d320bb7bae50b9661b29105fb630893dd90a35d6701fb014863529e85fce53ea8abd2dea4e728202a32febd3051339c9a85e5bca0105df626eaa7dbdbc46ea46c69a37175b6673c9b117fae6441d1a1daf0ece47b9187eed5e103d45add3728992dbf5356a3a0feba892964273b289a2a0d2bb4187d44f22d4ef07309ad38896d38f63e75cc3e0ce1b1df7789c0b52ee11c43091873022606393b67842abcd4ba5409fe82440e083590d118048f5d24d8ccafcf9e48cecbe6ae8005197c8078c2c9edcd222e25a44dbceaa7d969c98232b5ca1cb6d254be824939bac5c7d4002ff325d6d5b67001f194700833adb2336dd131d828f47ff12a3edc6caeab6017ba7acd2eb320d848a77acdcc961b1363d7eb31d1690437e799f27b7ab280ac34e0ab7478112fee1abf869b598480c42920f1d8c40d7127d5dd9234dbbd3c3842d41485f26aa1c747232ba256d1d3856564b138f44bdb7b1a4e8b71ba0917dc2c469ccd136710bc67c8db7e5a9d2e5be7288b004114e950fbebf8c4480dbb48ccc66779035654bdadf979953307052021cae550b49e3da5f6ece36357e718c206451fefc86bec5d259e1a359df5a0ed5e4272ac5fdbad84285d119391e4f920db04a18a0c8ca16410e5040fef2182e4040e781e67e3376c3ceda79e519fdc8e8540f01f3cd2a969e0eccb69d44445a273733e7f60b70ac934b6a436d11c1fa0669fd312d3eb078e44fb9405eb004210e9c36fb26dfc4cf4cdf4924d1b25177a6223de991cf44e7f157c6030e5441fe56e6832d16bc707402d3eedfe01afa313e9000200b801fe239d0e3efc6ae1d8354902ae8429fde3dcb4bcf5ef64b83997edf0e3e2bd40cca45cacebc2391bb12c74f54bcf496520c063e82be03519aa7d6a905cb622a3a398da4c06721ce09877956e96e54f92f2331bc963abb9edc507c96012c9ae6f65d270ccccd19037d28fe90a6b1939a2d93a29aa746b4e7d458e60e118c2c8d4c73dae00e12105ed0ecbdfb3c658b3db96e88a55ed41bd810cf5035bf2586adbd7cbe400f7a6f4402b728467b3793bd636a0def5e41c04837d828617b8938a49fe47c20976789c71f943fdb21a84a6fe5d5ad1ac35b196111645837b93bdc9eb998f1a9aff0d37521a2be1fc5a4c6376e0588f541d64ee8fe7e73a0bebeaedb0fa3c56d2c38fcb6f9858dfd808cdad6e0be1f48cc81cf3b9b44c92ddc617b0839c08db640070884d85ddb68ab90bb5183f91ff74fffaed8893cb33eb620ec7e7e3db2725ba991067cef8ad572e0aef05b1524fde207ff8aeb75744f08f687d9b764b0293a52a9cb22f21caf2006f201471353263105bb6beeb21a7b0ba03bf50f711328cf69c0ffca870039676ea89d317d73d4fd60bb0915788a2ee218a274594fdcdc5bd46e799811cc5dbfa6526c5ea169cd3931244b1f25bccbf2746e7ed7f80440fde71ed5cbccb35af9fa0834f40579300426e01de91d79db72e957a2916c94e03d4a4cf07c639ff37c3d4d9171c30e2fb337bae4510b18b15de7c8ecdda22d36f55f28643875049fce75d0ea02614a1562a1db4c6093d6307159a4f900e3318af435ad89d1e6a843db8540411c80985d41f741c22439e2dc0d197e1f6841dee0c88f5ae0ada6dd556fdc6067a49e814cdb0c1cbd3c92def43975c09e45f06d08ecffdb927bfca4ffc99e8f57a60f0813ad996b26aa3064c837e9b4682029bb6c7b74f6bd5dcf7163ae3df11485746abb5f0ca6d56c044b315fcbb5e1f3efabd9c6af5439341550184a028989c57fc6252ed63c85303b5ee480097c65663d2446c4075adb7405a03d5d718d1a650a74ebc4dcf5a5f8c7299d91cf416a755b089aedfcc4119d1894db53f0ed179308343a4f17787003cbd41bcdc8269f64e169f4bada547468ff0646820f8035867f6fbaf9a9f855073723a05a25762816f09ae0b76aa8e82c9a04e1265a81c171f2abaca43b3c40f4336e83f93c18b7630319b509784d5664e5853ab8117eb98f9c220121a2d36273ae81e6cccbcf8672769792890b27ce6f2251a71328ca0bbbb42fd391652128509164530158c1ab401a43ac44e959bc9028d9763da305b47814299b0358fe2022f1ecb523417c1894a54769d3c53aaee072058de398ff90c08fce8055eb366665979996ed55893e375b9dcf6afc11af9ed9b08c743b0842f4cbe0fb90eeabf840629303d91128b63770af5b979d4794dca55adf7ee436697d6696ffed1ad731e8fe4d75b85f4f49abe2f92a4b72c0388b3f66e167d4afa2f5d97d3d5f598a49937c1d5d2a6f92b126e3eb146cc9419ed902512bf3da91713bba7186505d7970d78cab5e3e245cf1ba14c046ef2ac87a0277c4a98ed61ce23ebbd844d0ed3cd9c515d96c2534cf3b574d8d86fa343905a5ba2e5aedf1cfd4868e2b3ac482e11c5b5a97365b15f44eb22056400c8d818e30e9158748f3a7c5a67008d42434353abb2327ef902ea95d1b85acc539f2f960724c8551da20aeabf46bf3b7ad59803a2b6d422501c4dcb810e6c3bc7ff06599d7df5c4c048d7ab15a0f0596e4132052a2c4f520b769490d26a3735d200ad9ea6624c725a7eaf0a184f41ecfc88cf7d46eb8dcac37ce74995248813914a8a9c34126a91577f8f37bc81d71e4163de775a2c32e3405ab9f7655c117da322728e27e9ad17e5831560d1bfe822c4ae4d54eb207b0c00031eb6008c02c46e57b4edeb5004b8e61fd76f438e8e805bb5003247afe357c7e7dc6e270534c3bbbdcf54e3349303bc467f6b93aa5cff775b522dc5a57a582f6c098d8754e836b11f02d74c6c1f0f310a57b0c75dc958bc74141fcf37465f6b0cf41370beb737dd2456245c57d19678e2f18fc533baffbd66720ff0d5330b5d659c7701fdbad0480802b34678d1325a2ee116bde12dee53c2f28911d059ece004b213107606e4a47512e71ab224d0a34bab7af89e76c486468d18930c78609ffa043a92bbf64f2e5549e235046173a10bacfbacea250e7163114bd6a8cf80ba04e01c92c8d4b2248c0c5f18472ac3757ecaf13a367e2f82291c0403083a4ec4066792fbc225ff0c853ec39a348f4b74cbe125460f53d27308a251dcbed569be02112494dc2bf55d5cf5f3455655b950ada67a642a82f6edb20c6b1c22beca75b44717450280cc976ac622aef8fa11790bc410983887c674e9886f1688723bb774f4ba1bb80dd5cc6e83a17c3d16b128aef04d53b1d4a01e9e51043cbc4fae3ebd616188fd105d5c03c4b76584cc942b620959f796a3b520a808f285c4e74ff36420417704642f78b5e61c63a593a4ebb276f21faefd00db69fc45e6742e507b61d4fb62dec019474226c3a5697c07b38e79840c4b5543b45235e094afbc3558431f0af51bf7b3360505d929d3c51e42e75ed0c9ee396650932e69819711378f712552f01c06586b0409b64be2408b6a0148000375947bdfd11f5dbce4a710522261258a8520a93653d01efa5357375a3535faea2a3b45a513d3915b0525457a1160b6d0f1f8a169ebf80b2947d11369eed50ed448eeaf9cb45e6066002c43cbed2000261a54998d72f95e6f6285fbdadbca3045e3cfa6b8058519445ecba34694be7cae781ee1687b38c026a2d6fccc186a45f62990fb0deb2a50f28f05bdd3db86fe96aacf7ac008eb71a0fe1f96a353bde1b90e7a41bff57b00eafdeb0cb90692b8c74a00ddfa77f07cb4f533087d6ab2e8bc21a1de2c7cf10ca838c5318e9116d13d88145ab47bb96fa663dd2e4ccd106d15f0dadbdcff2618d41600e4a56787753ef89638ff0fe6e406ff9d8deb6c1a83ff1efc343093ca44fad326b1e39242f9aaab6bd9ed9f207f03b7717cddf4e95686e178f201778cc440472118eed1e8cd4c8b95d1f4deba6d3f3d1836f61fcce378497829b713faeefcb7e038f4bb628481d7f609ee36b04bc6bef2df14fc1465dd6cc8ef9ba1658c69a0bb2bfcb2d63bb7f36d10975e79f21d7843b111ee53a562cbf9dc6eb522ec48fd20ca0ee12ae8efcbef63a03e4d8760b609ec2047e41e4da158dd01b366d920c85e070cd74fd25b3113841fcde18943802ec8b84ae4c73ac9c6a2725166b7770338ecec6488f79d67143f681031fe7f6a868fd351ec3135a54c987ccfb2f2f39879c141ba7a0b595498decf8e52c073b093fb615d1f6bcabf94385e7c0f213d0256629cbc0662fa163d7b18ed622896ae78e687dc3d3fc89235c1edfb74bd20cc49fde970f726a8f9775dd4dfaf7bed2cbb4e595c29c85131ed30dead0aafbc78a61e56d8217d6b2ea3aeac17d6e11a7100cd7db47fae56f455268127ba4c4d732a9e39a602df021e7bde4c369f905f8628a2e8ce4ebac503240519cbd4f11c58faca0d2dced466534e6468bce7968047c1e9ad89233efae8dca59ac506492acd84fd5a1963bb0a970e337f17c99a22ea84151d8e009d44fccc9cff10538ae7439524a1a538d552d61d3139fcbf4c88cc3605d5a5dbe22a027968365fcc1497dfaaf20f9677825a967b9466a8cd9fb97d1265d2dda08e42877e731d7a19549d054bf829638f73660900654faf10d5cd0b37f6c1143110471f2ff20c39da97e4d60a943e93f9eadf12cd627de9bd70c718c135839e4c502b78b7460a14d0963378e01f915d29e7238984bf37334b4d10b10961c40d3fdc55b111f39a78f910a88026877afc85b0d1e8cf3a86a8bbaf59d2942329021450a380b78893cbc42e716e9597a618fec39bdd657cac0fc4831873ac6c201901580fc0ae87b1c3780a268fae6d03a07698cd097509385a1d034c9ab157c195c2c6522ae52b5b0e13039c375f91d943ead710454db39e74ee87926c94f9514493c6d5e63a671cba9ad79e153e008f65920c08824101653a3dcc3f3dce175403e07f8c27e53e288be505ff52c9bef6c76b73bd8cc2f7b9631252837fcf36ccbc101bc5ad2be1648fb2c469038148d0521150ed765531c530dd01b27984d800897816b6354262b4847ebcc061943cd46422dbb70d75f1beb8889a0e59e297f1f7e2622af65853da273853fca6ee650ba87020313e3f901aff8a5a964dc3bc688b6321e163b99b8dcb7a41e8d95e54c30f0c77940bda1a35047152765b849d8b808dc2209a4b1303139c565a2b8b6b72531bdcb825c9c27e68cdcd463a20dc3eaa4329ac1a4b418e772e18c49fe06bbe49e4ac2bdcef347e8b84ea7421a70445a9e67cdd818395684384dd7278cf294a3811c269eb1272e7f4ff19648b3096ea7440373a06528a486a94187ca744f9d50e0b7f0350ff5c8b0d30b547c67891ddecaf1ef3a6eb0c8d9ca0c7d12b199a35bf48e6c4f46e8687330f1c47dceaa53fc286040c7701432528890eacd77879f0f16e7ee829ce0ec59be7f120b95d77bec71ffe19fcbc202edf7294bac60a7f8f203a23b6b293ceb9edccd60d1c53101c265300015e2998cb35f6332ad77e5d4eb42fe517a23c840808157d3132820546723f21a1100e90b112f4ac9e64713af6deb92a317e08354aa30589accf4011c57c2258d306da2ee93313a69c403fa986cd3249f6fc350e967575684a47f3d0b1fd92bcf7507d4d21b66eb722abe5836be0a5610fdcbe8bd73b8cfa0d4682f2b734abb2fcfd247a2756fce61eb5a046dc741a88cb979907bf4ad196fda5618f2fb114e6babe56f8508d61c218cf9cbc50cc4ac2e4e13814bb7c40b93883b9a75f9cd8ba8df787240e65f4956f26487f453ff22ef81ef416f5032644295fcfe168f3cddfdf33bdd8f004f3ab548570ef16c4a572d923bdd35b731eb0c53ec543e66c2725c8558e2e4880835602d6740974ffdcd1a2245ad3e583e30f2d435fc086551e0f2900fdb52ed6592069ba319d1d105e230f800ab8d8f6384f0768c8167462a134f3a2931e88ad74f27e60d0f555ae653e2ef6407a018340a461fdb12b312c0c7a8b1f87c200216ec0991ea00902037848c07641a831db1634d3103d165c7d0d7615c022708d2705147bd84192de38cd9fc21bf872a8633e9058066c75b203cd56a7d806d7944034e0c32436dd66eed7bd114487f3e5a37ab5f2da684e6354a17f510570cd1283518ed9e7345f469cfc39a8548c6c9c8b4897176ec1ecb3e4509f9e5dfea390f982cce5acbd415fab2e384cd3ff011d3806d3a8b4772a3b020d1ef3c63f3d041f4bd73df4beab4f8c051eb28eb51138aceb2929fb2337bd5f68f64b4dcf778c13c0ea848df99ab17745d8be6db1b84182791d786ba91d28e4a1210c97a45fce6cf6a5139af8807c2d26aded74df6d5e9d34122cf0f2e503c606efaf3b1119f9a8bb75d935471a0be725729c2f52235fb21811f8a18b91c57fc6fd31a1cf247b51e00eb9fd0f4f3b32bfbfe7cbdacc5e829519fb8841c06d51733c4db3990e8bc00367bf087b5dd021ac100cc14319074c084f7b570a615add8681e813e2ec36fd07bb521e4421d848c4707b7fd1120b8bffbd1cde3b8a2de47dfc903dbbff4397f1e4e5590cb1fc370627c8996b2d351338d442608cbf793c6c810f562e3d5ca91d76f27e2aa2e369560d3013173c4ea823e8be58c18706617c23c6b082c1c6dd704bf98cca89e002fa5a22f111e0cf444c7a16174600c23b912c15736daefa5cb1032b14cd15ceebc89007f81dda65f06769eda2c2ea1cecd6b3d5082ede93c4bc9ec15804907f65080c7678c5474e16fcadfe694b4f93e13e85f9dd7c535c842e89df9459b26fb3382711a70153abdf3a4ab48a1ab68dade2c541f138bd17960221910352ed9a4c97349cb36f44278d2b807de3e635790b46b8a31b7fbf47dcfa03a0211dde535110a046985d00950fb32a6eaa7f869f4f4dc295b7f1f8f1294337857ea20fa638933dac12e3913ae9911387a767cc9b8b1fa8a4760855d0d3d19d1ab1eacf070bd1a35ff14844349d5828f7010ad4a72d679a4d10aa9899a2b608c96002d4b209c24160f9332e621d4208a8a1f5b994b1610da3d8a6413423741c1576afe54fc3b1d016c3e51e217c9f3b057ce600dde160ce4c3a3dd377b4309ab3cd07ba3c59d5f338833b161bbf34479c69513fa3ab65fcfb6a26e150ea6a490ab70dd423849a6501d722c652efabf52110fc23e156e0fc32b162a7bd900e9765056d50077e5e46749633313fb51cd3755fa6c35be1f2ca4aac1762be70614b9363b8be4e6115ccab251a912873183b9b8e798299a7926c16223acc94dee066c936be2c209f1ee1b4ef0757c280a67d5baa240370e7152899dcce2c9d40562598c11f17a5d0110dcb64bf43004884ffcd45970583f45d2ced88fdbd60737dac96a459e25d7c0ea52137a1fd05a136256cf1a8d6f06e587fbe846cff683c50d80cb8bc8db47fdbee65d474d6e3a0cfdff9d12e78d6bfbc94c3b0485bf461ce69301d8e6e2a2f6c3fc4c7bff07c361b8394884b84678f0363ddbe2ce634ccc1322e7a80537ad27c3c1274db2a7037bcd5accc31cdcac4d3f741e7d43244ae9305b794d0dbe2f929f0c67c6b0f2b7fb1dc02f4d4370c4e28704910f05f9033a4c35f9a62ab46e42e4da3ed3aaa7e6341fe75fb1a54fa39b13003ce3f1c90c201dd6c7ca11b1f8f2d0919b3db74b9799d15cdd50136eda6746b52f068301ff9b846ce05a6ac64218471526041740c0dfcf764fe09a88c93ab0d875966b3206dee0313ddb3356c548a3a78fc5738d4c33c9169a262ba367e36be54fc9cf6e66e92e30f9fbbf06aff72f7e329c9f172a60aab0a1c4a08b88a10d9bd2387828db4e59c36d36256f5587a5535d9cf466215aba32f4ee5eec9e1cc829add14f8e027c06bd31ef47196d081ad7f0bb6386ead366a0905fa5953f199f3932b17f0c1858382d0970a10338aabfd8d7879ba5f3deb8c8b1426bc01825cdb01aa9c9040843a46cb70aaaeee5243a46f588b4e44fa0eb2c0f399cc0f3064e209fed25f9ff43e1c2db19ca43f60fc8a5ec0e97e2fa44d90bb790bae39aef91e1cf9c197fbdb8718b80e062fef7f7acab6dbb99e2d6b87d142b3abebdfdbd710000751a0a10f81ae05c0b123abd1d5e9c5ec5d0048cb4e6ab91c562afdd7a0ff9723340797daa1afe0a6a1d6b9885d16a3d9c4bf8fd93da8dde900d791ada2d40391b18635a3f9d7e09decb4d61c02f1aa52e4cb31601f5dedd185cab523792d40ce729522d5962802d191c465dd2c90c3f4c5bf6b1d4cb8544ae5e591d479584a9376b56e2be623fd4cfbe0486e58cc2b7cf5d5c90accaa34f93e54b97a0e379e163a8a921004d92865a802c2c963d3831e7792453e809cf8a362d6b61213c1ee79cb6b9e13f2816c0e58ac47f646e874159e31b50596e108e1288b9090d443950e9ab275e3d7f55f7217ebb9a9e3dfe37009b9c61cdf90e5b870e5a593a0ac90c0d346484b103f18587f03e72aa8fb1eb9b60b7a4de21644255d53bc23f83aec215c7e4cda0be2d742224a514ee312c252309701bf15bf32307eea855f79530195f153b836bc4527ad51df499ee0d96c7c22d9b1223521008361a14a982c0704dd4970e1077b7ff6364c34085886b17222f4badf9c9341a788ea434717cf106f9fb875b2b4cc3ddbffe0f34c5a55f99973bfe9c3786053b033c162c4f1ab1b4fd90d48c4d616055fb93ea84fd3d45d01f8bf05e44d9477364ad70ff4a56afd3934be44f16acb99714c544181e643064208324dca9e936507d54a78ae5d8af6ff5e126f3fad4959d709266619a1480f78e4629cfb1dd98e49f7910f9900e5cbc51d8e3c0879e60b6c631558f40d73587dd3b8df1b3dc93fd7bb313ec03648ce2ea883628c5e3bfbaa08d893b28623fc321eda4afcf7aa4f9810413f63c58addcdd1ec980736b24a6a31ea27bd4c136b8b8dd2e3eb494e1cda7fbdd9803ab8f081bbca72fc583c577747b87a58474891a344fcae04e3a996bf14e3b1d42df06037aefa51807517d0f9b3511beac24075854f86a0422dc2fb3b1b5e0ad5f8884500f6cf54b87f42a92f237458329e8daf37f06fad299957313867bc74477afcd14b050a6c568d3b4ac17459f08f26c8280758b28cbb8f03a95a82ce1b74bff66ae5c6f063d27c0c921cb4824a8bd590020de30bf7ba346227caa03d9e87864067aa432105ebe33b977d720c1e507d58e0107c810945432dcc1606e9790fd59bc3eba490c3ef253532cf6cc201c69b5dbf24b5df55e5a8c5140412908d3154205739c00f6ded13a15ee2837101f02efffc08b553fd6826b051b16f05748146898b157c517689c6892a2f800a9579ea03dd53d0e42b8d3b50407acff09d946fedcd0572c4c8543df994e322fa79c7d09018ca75bed6a28686a123998bc5554b7f8ffd2abaa8a4ee1154e1d2e188f8034f180c2ee5bb04fd3b645748374c826708a4129e81f98da287d73f0c3ce906d6c2f548a8d9a1ff878cc64d05af13dffd1060765b2fa9fee0cbd9d69230c3808b496e09c2df1f27839da5835424ea2b34737c5d83125f0f07b25d539af55e7cfdb2b54a47733733bccead23589f58783bd789b87a009e6ff19c4939ef1831bdd68f1e7876d5e9258675901e4bb37d14493f38439541f6c2c9854853f67bbeecea208d41da93509aa02bab28cb73d4b4bd992361ed089154294510dfbc7dac1c40d13d2123ba89d9371747a88e150c804ed47329aaba30c24c887c5b1fa3fdb4bc941240e15410446d26cb4227f233b226271b9f6356c10783c5c4210a588d923ed86d2b263f4407ef7ce23c9a738c3cdcaafc8e1bd8c76510aeddec436bcb56abb41989251ba282eb0170fc4fb4641abd5f43f0823dee7ad6dadebb8657a2d97b60bcc15aff3bba462cf3d6abf98f5a8293837081656131fa262a10f6132d81691629ca7d86b7e9405dca48189a8b5c65b810b121df00106562617581ebed427510b122d82bdac0d438663dea6998c680831f9a1b2f42e32e264b1013b323dfc56d5650cb5c11f18d5a11a505552c8661c11c66cc56979fb32a6b5f7a1762084604efba31d8a9157e32a0c23cf26025f9f73ab840453a0d276df5af8f6e2f040bef9f783269b1010d19bfda0a0f037e0c61485323ac811d7563abc13a7ebd61c56669727aacee6aea54b42e2ba98c76150ce707d44dcfe95cc586fabf57f81572404bff4ae96222a9d4088c1d16fc7ba319be203e0a85d37022122d8f4779f2530c147c4642a33653f4246165a72aa6fba2ac73baaca0d64d9bf14441e8dd0b011c5682d25549b3ce2b296f462b9301e624feac018ad0d9e8234133405c54e8c1165c44b1cee17b262877248fb1b69c35c6b1c5a8abcadf71cbb36d2b984c921be42bbd7722f0cf25ef7550fd8c283029503c45ff8cd8f8e2c5c0c479e2d2f20757ce4c2631a548baf85e14e2556b1ec6fb116e8bd70a0569d5813f4db4356c691c1ba5bbbb33cbf420cc70aa4ea31102600225b20b60a46c08a1208856ca1c16105940aef6345d0c49c5c9e7aaab878194042df7138887174947f48e55c2fb6085b8560988d99b8bfa5bd523cd381d974c283f6fd1d7177fb77424987c9a18485eb04463ffdd5743e9ca253cbd18fd31d83163f9759cc974cc0ef6de79d2095784585a8b3f5766a7741b9d0fb6c4a2be922ef715378ea03d5ecdc58cf68cd22c1107bc50484efd2fc07d6c2536d55749a50cd6826b6253c57a642e9fe4934c6b2fda63e1469523ee7ba86d113459677c25c878c68feeb0b78f26316db66c3245fbb8d0e8ec0315cfc4b39da2b7b64068a5626694c7a4d08768b51db8cad8d3048b8c23c9ea0a6d48b41a21143a639111bce20d4a956598d0d3d088d4e84ac374a2b250c160804d637c708bd9ec2a673c5045a97b99588161f20dcff67e8984c97cfcaca020addb07dd638adf637ca72402d4b896beb3c99f8927bbc951839ca4a4357c46cc7c8d2f794ec0cf31741ce834f1b23d90d9b87381d16caeb63bf4fd1105f96a1620212c2e19db06d9c0139d58ed785c71fc977f921600791b888dd44960ad94bd308d2ab9c18c7f7b5202f162f2bc08412bffe41c3f192ae7d19ddf8b8bf3132c37ae05006d4443606652d3ca92ac8f6d44a2dd5107f8890983037cc381ad6ca666797bede2be9846ac042253e2bbe0f4261e8c27c774f57802f86b1c5c952b261379cf07cb468436a53c78c509c5fe8ab2684b208db701320f37180b70481ed560dda2ddcd3b5dc5e217f418e28b8d3e1c5ec0ce6cca183a4709ff47e5c37f112f00439fd447828d87b23cf7de2aebc0e7c76907d095f53b102ab92d9815d7d77c61dbb3df9fb91462efcea874e293b16e38f8b17bf3db2065afef972e144ce87fd4aafc47e729222435711c35690b209b820dcf29a3d663d0fafcf3e3633be408577c6bed315a3e28084c8886b36dd8adf57ba062a702ce4ad67f950eeadb79fe98daef04a2cbaee3e05147aaa547e999ee2f9b5550e2b9d10c004f6ee3d6c1e47533efde923897dd91fe71a4cef84ab913c31bb4d78c3e06bab0a8ad0d9ff64163ba0b8e83b44ff097fb96f96feebcacbf42eedd45552261857cb3aaf026886659415465c80175a32021b27edface0fa0661bb056dcca804b006a70ebb25f0188378589eb9392e97435d3fb11e3a658c5987cb38ea0981bd5ee62c7ffc1f3cb9d3e01831c3c361078658725a266bcd8ae86c1efaf959761fcb96b8c710dd50226b55887429738d30fcfacdde1e30bd1f7ba354cf8bdd04f09777af86e8156fdf36add22fc628848a1434fd113aa73c0dec796c3770e90fed321aede00ae5d838c1d58b386f3153acef98eb833ed81f16e50b0c09eef6259ef234fc658b06f5ecf1838ee2851bd2351ee4da8c49c7c9fd965863b5180cf007c2c511497ff749aabed22bc5e74caa4f7ede1c952be305f296e3eec1e45f546dc0dbfad6820d3c43aba28f07018ba16e7b7bd7e01a3aa565fb379d21c0c3c7b3cc989d2a4cec899a980588368fd5dc4714161d496c3900b39c630033f3cd8af5a0720734a69a90d2675f3b29f14c66dee6650b5bf308ea546331074b1f633a73075adba04c02f541b94020cc2793928ef32221f69dfbd47b896127346bb1a87814becb04ba77504dc4c66b5e3e77c7eeb729753bbf869edffd7b1e5bd3617a384c73643acd4fc4271814bd9f7ab2cf0f6a99a775fc21a4339e6f53c8758f3ff56eb6ce9e724060ec04cde805417a03d85bb61b3e8b5d7ceb513bd846bf9a939d872b0e31658fa9aa241868dea8122d85a37150c6e6884deff551077253c8bda31e6ab0b77b2714965462e0df11fa08f19ffd1f5b7fc092f0424df9a6758835bd504cfbf7bb8bd9389a1733000841a32dddb5f49c4bb47d8eec4d50fa3ef4bf125f32bfb258f3b0a1d73cbef382cc9e3bdcb13374c0ced55ba3293fbe40b442b940f6bd0cc64ca32198012e5f4e3a9e55135874b29f3eda29e690d76a1fe078cb3187464b72d7ef82b444c56e7f5c6e1d51652e1c791a9c04f04a5795785d2c0dd254a01beab5de4b05b365bf886de57a49302a8a771e89d07530e2d46b1c13540e139ec9a2cff02c49c5fcf8c8c0978bdefbcd4adf16730e15e7126ed2b31dd419aeaacc6fb92adce24a304a2e6df42e83e9668bf969eeb66d1ea38963550123dbd06fe4c1998c0d58c4706b4eb88947abb59fc38fc34b2caf2f14061669541c45a26e007cded18b4e80ecaf9274405f00a2e6a92864fdf0085783298bab4850a296fafe85e3a421662e3167288666cfac3dbfc127e308d529b440105f89bb1f3466b6c48df3dca7c8c409f937112b98d94808c72660fa6c62cfe6015140e26b6f9b7a42bf2053cd5aa13b96b1af740c03cd0b126faa66733d9d530f2e3a50e24219937c530a6a10e4c17e68f4c6872f99c349fe98e609a8174b7a16194cacdf98ddd20eac72a16957e37d718a588412ca8d628a82cf385aca01f703d72b470c313a1773344d6574350d49168bd6a9e19d754507f7aa626e4c9003ecf41eda82afd1b4b0c08b0828ff6509dd079d1ae3350623c15f5edc2fbbf3830089486d63141ec2af03f03cb73af7a728bce1474dd9ca5c87b222b540fe45d535a18c120afff077524368f5a775664182dec1f5200557fa1702395196fcec9e2de46aa65b896c9112fb89f16d0ddd0f93bd6eb322190b8b5f4be00765b03210f3d352e60807080b94ec1fa1f5021df21245ed5e6c79802582b4002b98b70ed85c1db21d53158b9f285286197f6bc44360f72e6aa467422559170c65bc2e4c072a070b63b8dbb90c784da8f540a4f639d12b9481833529e150236253c5d85349bd7917b8ed31e7226bf3f8746afd902bd39fbbea3fc118267660657b21602b79ef388cfa86b5e02d2777584979d709281424dd56198c78b78b240171e8f338be67d85bab0afd00652f69bb158d3e801d147ad319222411f40c03aed144170d38202c69d201ffffffffffffffffffd2825f117e6bfacd1e529ffc94524a7b61402aad688092ad8d9da49452cac42ba5bb5e07a0adadad5910750dcb0c030dbde270ecbcb2c47608253e090eafd0aa2ea3d35cd4f886665c840eaa2776e94e2609216e50cfcab8c9b7b923e64db3d203c6042866a4c4c841468a4b481b14b7fe7b5abe9dbc870dececd9fa2ff766ebbb063f77abbcd07d23e6ab81f9ef5ccadef6447e42d2b0a99635d60d3156c6160df82ab55a8958e1de59161f3ccea0daa784b0dd55bbd3b05b5758140e07418819186b5f0c79722d0363fd94a896af436b2528849061714ac7d952bc0cf56a1023848c411339dd3773f6cf944321440ca9a9c756acd16aaaf3c3dff8d13462848461697752e99ada6d1d82611d4a28975246b9dac9902f287784da9ee35e602b2deaf533ebad747684748135f25de4b4ae7ad3b9906e172746a95bba45498e902d3c2a5d3d54cdb03d55a669e4885961215ae8b4329dbc46cfad9a853eeb2b51a96d8a6c352cf826449fb8d56a8fa7df08b9c2f1d3d7e8185ab9cc2ad3342a08b102e6273eab520c3f3d669ac6a59b668c902aecf22937f4eabcb74430be830aedf79ca5daa5df63b83262a4fc788969793923640aac34fdf620a5db984c0a9f99cd4e2f2175cd0d898242dece6b7562dd7709467534cd098182fb35755a3e43ed36fd135853a9fe6fbd72ad5c99a689615d214ee8839a5a65db4829862cc301305054380046d3344d4c4813f2d561c79916b57f3b26fc51bedbedacbbe7f24cd3c0b1a39b26a665470b74ec3041d3b0902520f409d57962ad1dc629d33464b4b7e8d8c1c6520921c819429470cbb5ff53afa7b33a098821baf3a921f7652b19181f2cbf230409e7b0c39e3df39c7d4d2147e05ee48dad2fbb4caf99a6c9c0f8e8b1f2068b8fd5448811d24199e75c5aa91d55580484ae0fcad3ca977a9542e6486ced6cad142b63a975258408cc1b294d89eb98b54b99a6d1e1c2b2e212d3342a3a5c54e0d246e3300799186b905183902128cfd6738e1e454fec08a191428e9a2bb6123663a669c20809c26af5cc47594befcce3120284a318b3b43a9ddbc34b659a0606664545e5450d905484fc80313fc8fabd315c8adb8bd6edceb196e912baa378f18a5d314389253e5f2803b20b969833d414fdf73925882e1695aacbeb6dc57d9c0b4cb4adcc98b45152870bc49ad44a4c29e7d263b768ed9a5b42a9d04aa4922df828a74ed5582ea263192680d46219a977af7479e84dd142d9255ca50e42abaa9f699a95a6691a1e80cca2adb6bb94fd3376b7679aa665078f04228be48c9dfa8e7b192f340490589c84bc68f7d159c7ed67a0c0e252f3d3bc129733f97905d374943ac78f42a7aa405c913213ed1deda67e9ab5a2a947c897f27d1fe3f200082b5cbfb5735c2956c77bf8585161018a0a521ac82a905af595ba7db5dfd5aaf0c6b21df493f830ed938a57d64cf46c15d59f47056bad9a2af5ee59c832d3342c8a0290532cb36a548e3e71430c53cc0031852f96942aa6bdbddb5e8a96ce69a53fbe76ad9714ed4f63e80c9dd23eab46914c21ce7534dfd16b0c8bf70111c5a7a7f4d8103f63bf5a0a43f19c1443e67bdaecb4b3b0280b4040817f3e21a6902f2dff84ae6ca865a2f2ef6df244273633157ef231c2938713bc0ef62b7f5c2afd2b16806ce2333d4feb56e6ab0e420344138c378f2f7616a64d5e1680640211b5276dda8e5abd97699a1d2d3b62008289477d56cadb3c840b0606e412bd56796bca14aed67b96e0448ad3217b6bea2ce2014825109fea2994d7bb7c34d3346a88819289d9e1021816963050dc401103c5e1d8b104104a34578a50366a9ad78e4026b17f76a16be9bfb56c97699a0422096c74869bcea66a529e691a1dfe058c7eb1a20590483c2a3f53b9799cff24976f3923c64fd04042f92dcfb50ea96aa5ed928971345ad4680179c4c15fdf7ed4fd92a6cbb4348d0a0f1047e441462b1d335da89c1ac10844b848b5f57c16a35e0f401671a70dbdf2a5abbfea2920440051047a3ef4ea3321372ad401920845e84f4a29ff38ae1f22ce5af7e90fbb765567ad801c820f4be8b51dc4c33a0d913e339f1d94ec1cb6e8c563ce70896939a3695e3c66c70b400a916aa13fc8ed575ba595699a161f2f282084e0a4cca8314fffac5f072188d50efb3cc969a147c902918ab059219eb36b68b5800002f372ad6de94a4fe6fa03be2e2bdfc1856995669a062603e2873ef4b7fe3a5db9be4d391f7af91a2f84be9ff2da1efcdf17c34fbe30bdb71e9a3644c974ad83992e0fabe7ebcd887d216c0a0e103cb4d5da3a4d5e96bd0791007287db5cce0e5af4bace4a7668cb13a19eebf3cb74b4ec8079f1c1fee23a9a0c955757018a1b28294089f18146d3bcf81b2fcae37d0d6f97349ac6dba5a5699a266408207538ad07d3ae84f4b4959b03103ab862f988af87ad5dae7380cc61ed7a5a7690d72da22607fd7308a1c2959aaf2ea3d2c3e5658ca6e9e1f2d26d80c4010eabb9add348575a7b4a0390379c66bda6d2a595d7c8334d13f3e202b3e23a5e9c47d37800c40d6d608e9b7cad852ddb3aa70210362056e673aab37d63be32206b60d618ddf6a6c396a11ad0c9eb5f8c90d7695d1c80a46119df79544a55f2c43c03050920687045968d653acb9a7e663a00728694afeb924a5d578bfd082066686b39265bead7234d2cd3343bced8014819c83086bd734e0a5b2f1e3eb40214369a860d1031a4abc2cd4c188684db8e5b13a9d5f0b7697000028676093196547a42addf6200f2052f203244489b5a8bfaaf6578e5a59b06a6699a66c5637405a40b8badc3ca10bb62aeed4cd3bce10e63060817906fc2568a5b52aea9fa4246d3e88ba7b400640b8ba1fadd66ab61baa499a669171e2b70ece8a639205a586de58ded1177b3b94a18286da494019285838af6d3751163e93417806081f11a3a7bbc95316b7f055daba5ead69554a1b215547b952b61c25465e9b401528554ddb831b5d554b762205450cc273129e69a297bcd01320510296466620a5163cc8c79334da342031944a1117a3c7818eb5bad4f26c6bd0002852738a1094c588212928084e4de5052e7f2af8f69a66954fa8ca63967801cc10845988308434876ec50ebe1623ddb5e002284759eeab918a54aac940d9020800001e407670d1f1c1b3d383678b083546767b72db498fd97691a9535749003c48cf75979d10f76c87f29e6ff86498e38e0f01103f382831e2e278d161e2c6f9c346e90c68e8c8e63e3bd91fd3035a4ea389dd632c7062fb7c5bf722d27e627659a46258dd54fc494b1a6a6be27334da3d22dce06a6b41ed53e4ffaa1c5f418dbc0355ddaa6907bee33caa8e8f0b13e46d3c4f0f8363490722bbf0831864bdd22763b991e3f627afc68a36956e2a801538af15a6b3d3bcd7e659a668d448363ba54a26a5395a84ea6695c47d3a8a0bc344d8f1d19981e3e4c8012061829349881e75a8aa7f93a7bd245375a5c76801c410627efb076c894aa4e8d324da3d234303d5cf0a816a4981183f7746e3d621e4ad529d334258001b746748bf190d23c28a3e22d2e2c62348db7b8b0b0192ff874ce534a94788f2996699a188df1c103460e4503450d946ed9910214941f9e029417143976bcf7501e4d03720417a09367e94ad67d69fb38c18dd4aa9af77462eda9d9165a70a9b02576a819f9591a421b29579d1f4a469d70710c3694e5e2b47cd0d1f9c5ca42823550fd9342e7746d29a5324da392b2d2b2a3695e62c260011fb59c361936bcf561ace0bc2bdfe6c8f85cbb731e7038aaf1bf97ef884e9dd3c965a4f17dcfec5a8fb3617ea6697ae50668b0750a1df58aa9c68c65a6695c62566054d06ea1c6f7cb4dd5c996699a95a639410a5652750c65af23962a51709a7cc84dd917fbb04cd3a8d134306fb8b8643870508e0c3052e43843b56457cadd53420d2d2198f1aca1c4e7e8b76ec9dee3042a931eb73bcad039f6362863a583b6f18e5a6cd3a5ccca9281bdd6eb3b6fbbcce61410228c816b55199d5bd7543e99a6593194934aabda3537428899a6691a95359a864dd0c77bf1613baf79f67a10465b854c536b7ddaaafb14102b94e028a73d94e72a9d8f659ac607096e2d86503a9eaa392a679aa6695460f40b1534cd8bca2652c753ebc53c31b446f029399f765db44a1d3b670829ea789011a9b4dc56cb0341820870919777f3a67a0e4399a6691a1598a6e16665650564080db2f4a7a9b7d656428de9981a52ba98cedffacc340d0f78e02f3e605c5858073a689a9814b4f64fa7c915ae678b97691a8779d11e4da302a35fbc80ad7647f7f7d339530b334de3292f2e3cf8052358ac1727ecd3d3434db552e7704f537a4ad3ea659aa6bd5dd24849897ef17974898bb133fa3c44467cb431515da66956e4d8f12ad85c25756c9e9a11d179a65033f7a5df2a31334dd303a665c74ad3a8a82025c6071a4dd334db64dc21be53fd768f8d149a4208fc24de6d3f09b313a64cd3342a2a6da4a8b451461a2fde5fb0f4e0b123a569f8c59b06440c20688d4ab12e4df7cad1669a2606c6857bb8ac34cd0a0f385c7d2097b1f9e9cccfc3d8391447e8d0b5c4dd9816c24cd3fcd8151567596d6941d3c0e8172a6da4a4801cc103b8efba97cbbd1957659ae6c74b4cd3a8a8a4f0707929e3c74b1b4d13e32f5fa480ccd1812387f2a0000774b8b0ace868d9a143870b0b18688565c76d60031a002303606000e5021bb040072a705f708002312f1ab38109e00524b0928108f0706106017c5959396f2c853dd861501eb02b6038e0c7caca051af005032cb0001e1350c08b4b8c462001ed2b4b6107106081037c8c0f0918408e1d2f3d2250800d1000c60103401797970708e00dd6656171e9400060023b342346213cf71a62468d1c29a4322f2e314b1821c451d97912ae743ffc8d95971d66a0b091428609624606f16d3797620d9d20bca95eec87b5323f7c814009d759e81242850779134600d1d6bd6a9c2bd7c81fb42d446d1f51b54b554f18f1434be71bca95b497ab9e2c8cf4c16ff149ad2e2d27d5ca87dcb4285d2265a6ff3eb207d6acd989753567ea981ef47bdd1f443efdef97699af50193876eac9e215f6ca58489f0e0fe28a1d38c58774bbfc3223a26a73cc9963adba1adea96a87887f15aa80ee9e832b6aab79dffe43974506dd3d9f52a71a65658464a4b192d0fc3323287a4e7b837aff285162b0edc1a28c702945b01182c3d78ec5871961e3e62569ac607237288031cdee08636b0610d6a48031a586ea383dff053f9c2118c9c210223664097da3163abdc8f4270288c0746cac01655f35bed8df9dfdf91815d1d6da77d42ffac5b3c468e91313467aa88dece2ffbe399951e2c2f5fc0e817293d2206ffb33c35556c29676c236170a634a13e468bd88947c080fdc91a392d4afcad235f60bf90323d3c6e879d17bac0852d68210b58b88215aa40855fbd4e9f4f2157fce4c12f5063640aba9bfa4b61ffe21d91023acc3d17f3bfb32b6f240a2ad12fdba922ea5d81c308141436fce4b3da2e6eb4324d1387b734cd0b1b2f316c344d0c0c1b79c2dea793f22c85cbace9394e38eec8d5ad940aed4a9c699a9126ecda96bb9e0b51aed39880fc4df1a1a6fe283a9951e9c12305234bb845d7a939a3c5d4ef9590ac6142aa16572ba43b9284a4101e5a0a7d992ab46e040947304211d242bd7c7525de8316cf91ce6ba3fa94a7b8168d3142844cb80d11f2a5929f9d0b4686802bdb59f7ff07d9f68159416344089b38d9130f17af7618104682909242ddf9093b7dc3dfa1a282a2d27c80506104080bcffea5c45f6cbd25148cfce051f92555ca597337d40b6e4d512b5e67195b255ea4755675e732628cfcbb504aa52ee4ad315effff585da4f448d361e76b3185f4508c35c810c945af7aa598216bb365c745fbed84ac906adbdcb7b8869c575d2ec46c9bb658297f11932ef6dc7c322b2c2cbab2c222b538aba9f6aa1daeb38ec2334468f1dc3611c3c4672de32303915960fea76f478674f981013183882c76f408438c15acf1009158a8d4982ed2759e7b4e4560b18eeabf17af1479c56f374fdcab9ead73e570335e3c0e17159421e20a5c77de9dfb77b4b9154a7d7376e9a0cbf36d3a4458f1e76f293a7dea9c7d5e85af1e64bd54ab6588ad1188a8a2d7a67594d851c563cd87482a506286d675ad7f4f6ea84065c5984eaef44bb1032982c829f6b842291bd2fcc6e9ef4cc1d27a527b56d7c2737d578ac55a9d9ee6a4943a09bd88908225d6ced77ad6f85e1446641407b9a7761a3a8d99a69359f1971e2b2e1d03115128d6f6a0a4ac215c8b3414da6a615209b31d575c5020bb2bfabff354a4ac03914f20e2456d55a293679ba6455956e0ed92c611f1445b55ac799d12cb76db89fc6faa1b7a9432229c60fbdbb2592a1f526c132b95557bc2b5be592f108868c2977222f3f4457db86140862092094e3efc93b7ead9e9cd344d1b229850c88b7d103ace8ba9334dd3f2e2632f6109b509a16abb92cffbad34442ab196673b9ecd1ce9d984c204114a1c3d766c8fbab6c9b5659a860d943652629c8d1887499149f81d477afc17b7d24e6da4e04044124d1dd7993ad51222e420884402efacb4ce9f54dd1b12a8ad6edcbdf058fdfd11cb59733dba2b1967b314114760e36988bad0d1186d1616e524d288ed5c883a573de23e63445a7e77ede938bfe25f84e7ea427450365adc2ad3342e312b2f2fbed24379882822fb1be3f9e6ecb476334db38246227e2d4aba6b71af86e72082f1c1a332f352cae3e90d9143a43f77d4186d42a97ff470616f178e91c353c4108dcf4266dc9e2962ab10770e42beca87d9af1821daadec56d7bafbd9e14160ae42ea0eb1b6e87bcf0f114120a5505935e5e94b510b44f2e7d45a1722c62ddde92102083dcd992e6fabdaf9667f58ac8fb55d74edb5fad0a081881f781bdf757a37bb5796699a177f59a3694a20d207d6ec3b2d955e93a62f3e1c3e297f71a6666b4b334dd334dce345640fddbc74e136bf84884809227ac8d56b9d3c4ad95b42c52292875bcfead2d13c5f8914f778691a151888e041f9ee52b87e6ba585f80ec975bf29e44cccffd20e8b339d96ad4b5b622b6544eab02a595b37fee4f3864d0304113a28c24de4dca79ddfaf391c8468a15cab9d76ee2e877c66ed736ce5c9548fc3a53fe930e3d5aef61c1138e8b5e5538638f51c676fd0c30e436caddeeebc6d117103faa31a97b675d834f50c1e2e2f65b0f760438545dac00eb2274328553ade27d334483330226c3845672da6924aea9750a6695c20b28675cc57b9b34bba099b1a124acdfb59ba93863fae949d548d8ef83434acb66bc86a9bef29151efc826e71365e207286d58921cdf47c2266485d07f121cbd4e66365382cdbb731a4bbb25722c31de6d53cdd7d7ad33782c818526bedf8a3d394226e8a8821d1e54a8aa92dfc76188643a7396b981a23bbb5c0e0cc549f73509e5e52fc85bcc584eac9d44ad5bc7098e54abc12abc6abbf0ba825a458f65a9bd6328b7081d99dc3cd8a574af56a0b8950223257747847ad16f6d3398d739dd5d26acd02ae6bcda8cf2b6be85b040bde58dea37532db72b599a6516923e587a78045d945054da32272854be90f2b224255c69659691a9538740d97989633d410b1829f7de6cc4c9b95731d912ae8a33b7e52657a69a9804cb1aba74e9cfa2c340574ac0f6ffafffbdf25854dbf7f5694eb9c4b225158578a0eead7c4a58950389dedb797ced39fb227e82777e469f5a14eec38619beaf5b69c317da77650a4098787593d6e63a5aab908137acf2356fee7bd94bc049125684a7afae81eb15bce4a484ebfc35e4cb5f64c3028224948af2a778faed5dc5b91a0d2db5137f6d6dafa47d8e58fd4e1e4e4e32762048648a5f7329410dfaf172982ca76ad532d3c4dd5b2c81ccdd97d25568cf718f23b1122b4a5da62297579f2947a70880ce114cf629fa85f69d32322846fe70f73d6aaaccf472408ab55b6b6f6879d12df890001a16ac4e71aafd7aadd21f283a467b7d7f7373cd9dc8bd427516752efe4c877c78b4ebbd669b58e9766b65d70cbd62ea55ded5b3775a169175723d5d83d35958b3f6a29a6d75d44ea3ad33469b4f0200417a731ef4e4cb154d76fb750edb91a9bf9d9e2db59db9c79ca3fc9ca47482d102f9d56a7ad33c2a668a1ac901969636b5bcf67a1e9cd2f29a56ca15e248bff85523b5daadd526ca9341f66a4fcf0146460d40c1433524c30061a20740889c5b9ef9f96b7f84ed2038b7cc63d4e0da5d2757cc5b5f68df5698db2d1aaa651a1411b320871c52ffc74d6d7597b52dc8a3f3cfcc896d2cb859c15dcb78ecf39c9bfba2fd3344d63829055ac543cddc8ee50974a882a6e316a86506bf64ffa3b0849c5615e8cdb5aca95cd8a8ab34eee71bb85dc95a719849c220f369e56cbcdefd2334da3d212620a5c747b8fb03144cc554829507a2ac45425c3969614abb1ffb40cb169e2ea5160f3c35e35960a15d78a02953aebd64ae9b9e1ea5d28129daeecb60e22a51a654a10020a3ed5da18cfb2ffd294691a1837505290d243d1d011f289bcc549533adf1463e93de1d834a5e74a5dc6dc5438008619219df8d44a6fe56a43b7be9cd8657f67d57e6b775237f147532d9fb38e1d6fa6093ebd586287ade54b99a6517919a36990109289fbefb32d51532d6a1a32d408c1c4526d8f623b5d2197d0d3ffacbd422cf738698f1a84588225d4e8d8fa6dc7788a83904a2c76aafd5cb67425d74cd3fc60e9d1230c319ec5d9404111a3695240be104289b68edeb0b5b57e8da549a8a6143286d4527c8c5ba6697ac8e11e0891c4b6be663762cc52a3138955c44ef5ea3bc8566a487ccb3ca825fda4d8d27923e411adf969fee8bcd2d579a6695656621c8625c411a734315a9af620d2748d5068932d94a9f86c42ca08ddeee4d6a89d9f640c8e9045383a4c17f23d46aa7015a1888e6d75333111c2957e3941094212e1e7779d5ccf10f19bbc3ea9bc3d0d611ee2177f3342c9febe216508d6cb9e51fe3167aaa2c20130c8082984de2dc4d67a17df294488eecf764ca5cbab2cd50819045bbaedd43ade99a661a307cb1a4dd3343d585e5688207aad1ec3c3668c1a6acdf84bd3a88481d2468ab3acb61187aed13471e84bd3b4c4e1f25282904024f7d3c814bde66988322e080104deea7590a36fe9d9fa1b84fce13494db56bba3506aabfde0a8a54e8f3c4fef304484903e2cfdd6c813aac5123be583da95faf4596cb15cbe42f6709aa33de95b43e68c38440fcf9dccf852fa470ab10fc9c3b9f68a90b77d2f4d84878450d2449bfb47e1f23b702b52e55d2b932db243ba9f6aeb12a3de3d5b074e4c7f0fa6d44ce94a99a6e9956d1a153352d8db458c141e217440cde96fd3e15beb285cf9b12b3f587aec882923640eec5b52e9dcaadec699324d3346881c1ef75ccfadb40c338a291733bfe40fcb4991be32bf3fa7c90f0c5be926b4c8ab1b3b4bfa8028e973db574b79f5a1a0a02037da0c257c70d4d6a675ae5653db7341c91ef49007d6ec6d65d27745ebb0192578784e679d1ae92ab9434bdcd5c5eb8fcf25b5c34af4ec39f3fc5a5c5752873cc7c5d66cb57ba6d2a1f130a5166afc55fa1d849239a4f3a996520cf979959d691a151e1e7346d3a8fcd0979730c24849e9147637585894071b4d931247891cd693a56be508f5a46e99a66177230d1b94c48131d47e6db3b61c75b62f81834a8698f3c2bb9690b237f42b26ba7cb672252648104adcb0b8b1dacc73902a67ec06256de8c7e6be5d78ce6954352861c3b7f59e7eadee76ce6a2c285943aafe9516b35b68a5b68c4b1c256a48aacd1ba662fa4c793a41491ad2424a9b7ba35ed494a0a1bdb2464bb9f9d0322c39c39d77aec68d9d6a7c78f00adc28314319c83006312c7ad5bfce3643ce2e9da0240c6cdbfe62b956b35c1798161731ca4841ca8f1230642e62e818e37362bf99a66141c917ba1ff9b3853ee542ee4cd3b88ef62ef142b77a6baabecedc5bca348dbfa188e787a700e58ce13ab4ad50d285b610ca744efae3dcecf0a0840bdaa8f1518887971d1cf816d4e3bb27a6a7edea5a255a48adb35552d73e575c2d9464e1b0959b9d5973e69a4ab0809f87921d66cfa75ea9922bb47a5f799c9559e11cdb367569655b5d384749159eb19db13ba79d756ee728a102c273e864bace10944ca199a27389c7e79e18eba0440a9e7a2d62f4ce4def9c92289c6b9dc8103ae588ed694209147091116bdcdd4b5d63254f68d7f6831022e53ce7334dd367a4c0f4a1c409b870b19d4db499eb5dd204fda40a315b8b35bec452c2044cea705b8a1c159f834dd34a96e0ba523aa98f34215507d28512256c2e42ad36f74e6adb2a9424e194b7e3df631fbce44b610912b257aab689dda5524d4828394243bcda1d324f8da1b53a8c900eb3632961734c9f52074a8a70702dd4ec8c92b7d477a3648e6ced142fd9f5393dcaf42821c2e1e174389d6543b5be849221e075aad3321d3b865413822ad414ad4aa94a82a056ade2edcd86791e69865750091056a1869ed6b7cf348d4bcccaef588981f1962ff9819fb2746921a694324799a6812901492fd852aa656b7f79905acc8b448a9830b1447ee9ec2e1cf19bd34fa6b487da24baf06d8b16792bfbf6c8324d03004390e4421de761d894226d5d045304125c24f594fe97cace5529b740728b7490d2f6eeaf0921b42b7820b1055a9b9a3a5d4f86bc9d1924b558a8921fcd3fa83a71496891b6ef9cd1f5b3868999a62199c551ec77e5b6265c4e96057bf4abada7a30d0fd358b493d859393d3f7d212c586b5e8ae1e23dcedd7c40f28ad58e5a7294da21fc3c99a6b95be7bf2071c536b4a7a7ef36d3342e4dd28a6d6b7d2567c917a54f5664ae848ba1751ad52f5fc522ee3a7b87956a4755e69b66e547cb8e98235105eaf4aa0c3595e9a24d453b97fcce7155d88c878a7f94e7bcb625d47f86069253fc49daf65737fab3704da1afced850fa51f6684bd19cf5c95effaaadf12205e24ad694ab6a84bdce281a5a7de9534ae9bcbdc19e497196d52d9088e260b6e661feeb602efa41120af6cd195bbd108162add6955abb76e9149d4ff8aa3bb8def7999517979538f46525c6759078e2a43cce8ab35552ca88a4136a553a9fd651a5edb4a2a4b87ccb19205f20e1c4795aaacfd1f2a5567a1e2e2fbfd242b28984aa558f628ed41e5f2b2c3bf457560e8926d69dd55cde7b16bd6d26de5bb359bf512ee60b13cdb5b15d5f28b5b647330d1a6e90d1023550d070830c1d905ce29e1b73bcbe6b8adb078f9532be88f1c1430361a4c4f840a3a50c98a681c99058424f7a3ee72db5442a7d25d263eaa915124a346dcb5c2532a66312bfcc143b8da8f29c4399a68961812191c469cc7385bfb89e3a12cb192ed409355476ab412221bff7a3d6a634d53f627d2b32745253d6cebb231a276a43b9f020dc648d409c67f93364db70ad6f59990109235a6aac53623e3df4a7313ac68a2a4816a1b6399ba974ed0e42b6031245a82bb65a88edabffed44f87aba62ccb4fde12622f8b0c40cfbb2a55bbd0e91ab565f234de6e3a90cc18892a24e9babf6542a44c2679eb8e1d1c4a91d1f90108257a685ec6c4fb1adb0a8c7c0e868d921039241206d48f1354ceb6c6beb0c1241b4b4ce1fbf6b7dfba7592009c4adbd5366988ccfd53a092090955aad145f31ce942720f9039fa3ab675da9f547cc0fae1a1ddbe468a5e6da315648fa800e4b3e567b7aae38754340c287a5a7a9fe7ebf5bad561248f6a0e95753994ea2c6d0fa4cd3b4384b8741a287d73bbb9f90af4c8cbf8480240faa5962db18fbfba372f1709f5853da8997a5b5d22d6a82a6f911b32306247748b91091cafd27b143f25996f210a9aee792d4815775439f9f78787dff92d00101247338ec1aa5e5bb4c75e8e041391d2f61a4008c143976bcc3a8192a08219e732f9e8151335252425a4122073ddc10d3fef52957eb38b445ffea9c867cfcd9d204091cce59d59c896df2a32bbd81fdeae69d7d1aeeb545e206c495ccbaa193ede0e238f4a5515e3cc3318a064a4a184db362089236b4a5fcda3a87ebcdd5659a1f2fdefad282163550501ac5bd0c9736c4f8c12dfef2e2e3074b8b1a3a5a76c0b400240e246ce8754993214beb87a7e006246be8549ddd0c379923f43f205183ff293e569c186e62c807491af09a17ae5d2921237f1234acb6aa5a5b1b9e74ed65909c01d3693f2873ad558fd40c9cb03f1d5e2a5329f5191e3b1486a40cbcbed8a9ff69a66948c8b0a99da37edf91a35f3e06758a927d7d4acb8d3133bc5dd2581231a06e56f9f8b79a7651a66910411286753f4a9bad4be8a4a3324df3081230a8e3d8ead6bad553a86dacaccc41f28546e9f0a7cca52bbd218917da6252cbaccea676f0647cc0ac907441a56763cf9432764e04122e3496b429578d0a59ba2d607f3becd1398fa9910f122d7c3be713aba295a98a19189064e19931647492356a790e0bfcec367dafb4e9ab6522b942fa5ec5798ebaa5cb0d0824565889d03aecf6a8b37e3cd3b283a40a2bbbff905afe8c125b2d3b5c625ace6821a1c26289a92d750d53db9499a6d116904cc1dd1d7b9b76239102622ad64ddd98ea8f166f597971690149147eb16f2833f9d56a4d574002853ee80f76f37553f749f2844e85abd77ebc19a5aa0289136294a409ec9dafd3751343ac30c304c4fa9ca3ce8d1ba5bb4cd3902c81e5d24eca19d5ba7554423b68f5f53a0c392f5f1a9224a46fda6dd379d66c73471c2e2c2c1a074cd3788cbe800409ded6ca6d0c5d6245bb7a901c21593f599e75aeb1f595691aefb1230e1a901841d931ca43bde34ecf2445c04da725e6e47eec0fcfc1e95272cd748e9f5f28a33003a3990d901061ed1dfabaf6b7a32519421ed6fe19a76fdcb4353552dc402284d46dea3811ca6d4fbc0649104e52d6837dc756ab0b0b8f0f9000a1adbaceb6120f1da927f9c162673a753f6c8a72a417a970e92953e9f26ec7ea1aadbec68e0da36976ac364d8a8e115e9c45db10ea3eaa13a9a3636417a7a55baae75163de0b659a068c115db463655f0cd519c9455b0b953af5db50bbb6b8c0940a7571737586915b3042f50da593d8d95e2dd334628cd8426522533f6fa6a7f2d4e2ff2fb583e9f720c594591f302418a1c5338694d3552aa4cdde2bdda22c1899451eba66da6a214f7467c3882c5c993db25d664cfd7d2cfe2cf5df9fa89de55db058954e4bdbad1b1dd6d22b1c31bf74f5a5c88e1a8d1157242f6ededa4ad94e36cd344d8c4a4cd3b00e465ae1f22d6788e18111562ca32eccb55adb276f3cb20acce4a430cf0fa73daaf8cdd56835eb59cfe899a661c9a4a2fd29e64b2d362ab861ab6fcdda536fb14cd3340d8c1b6ce41488a5b338b17da79fff8c1b23a6388db5b5656bcdd5ae4ba1c898a6b6a51851752245eadd33a69b67f17273c1c8287a7df7b9ccce5575248a3e988969634db5fa4799a641691a150e340d8a738b4b8b0e1415305050543800064a9fa1f2a369547efc8e1777830d345252505496429738daf03794c50428887ca4ece811c68e1e61acbcb8fc0a0b7b03201123a1509da7552296e7d9cede08285a57a3764e799aa3621f6f82a63163e4138ae549672db58925844e46c5d9689a228c7802a5c5bc53858ad8318d7462a14febceb576557cce0827f0d5b99612a543f92b9531b209c612aa6b4cfb5617baccca4b4c8f1897171cd18432fc759dfeb7ad5399b8c3daa7f2172ea6cb9868a7f9d957c68785914b20be62a36796cfd8b883114ba455a567cfe69efbc6914ae0b26799cd3ebdc78f367ec4f818a184335a8818796bcba87d12ab6c2df54448b14c4692c88390b2738d32dd7a95699a1b89c441c6544771ca5d780c0666041289cb5b3afa8961461ed147bb1dd23fe69430812861c411cf52efbc3594a8cf7ca411bbad981163fd8c68a98c6f11f3d4bba74cd3c0f1c6caabb3acb89102348c2ce2dc5d51536152a654334dc33b5a5c5a944f30a28874b6dbe25164adf7389208b4bc4921268474add65eac308208d59d30f98eebadd5478e9143ec1d9ef2634e6ccf73c4108e07f7b6552bcaa32c8c9496303b3851c5226bf8fd7ef091f137e124152df77c73256ceba47d319ca0a2e1a2733231fb1d63088d419c9ce22e5bcbc5b2e9da87e30d3b9c98e2b833e7b3685572b55b0afe64ec979cfd36b60e290e113295780f9f8c420f2e6eba1ea1b57d92281c69c3763fc8cdd7fa505caa73ab996fbdf52750209ee69767fbf2537e221f17a93c99903da16c31548e2e3fa11ecafc4927f81fade49cdfca1bcb98166575a3697a2827d89127b61c1d7ff365279be0df74f69a9671d54fc789269a427afe52a3477f5233818ef339fc79ebcf171ac10926121da4da7962ada1e22fc3c925107a45d8c75a3bfcec134bac954ae9a676d2114e2a71ab316afb83edb463498967a4ab8da9aade364a39e36412ec391d2da6efadea772209cca65a232e225284daf22b2e31233889c41f376ddeb91a12e96463cbd8a965c9569a8d34fce411b716392394eef5dbdd8923183be33c45d9521d6f23963dd1ea42e7937ac808e4d65ad9612bf514a19345acc456a6f37ab82584d68922562a709288438677a8f9caa67d62a098600e2788b85cd55d88f7ea9b961cde2d206438398422c6145b76998db4fdc410dcd4ea4ca8f50eabdf49211813c35c8b8ffa6dde3d4e08e1d8dfa81b3b1ac46aa76d4b8df9427bee99a661511f387016f58103329ae64410cc7babf5b83a9530110e27816889da42eb9797aff86062605c384f0071d442cbfff254b7c43cd3342badfed2c6c91f122de635638a7f88a194133f30e52c2d5fbe3ffaa7654c70d20746d48c55faa6ca345d124ef8a02e6d6f2a2a4fc73b277b40bb5a2dd5504b4d915d0f89b556c5bdbf677df9c7491ebef530a56d29f507ef9ce0019ba13c76699dd7c97487548d8aad740c312dec1c9cd88115b73fdf10d9a7a35507b6c727cf9d0f37db4407dd3decbde5e96e6a3487d38a8f3ce1b2e4e9e5c056b90fdb558ac9551c5abfb6f38b5da753cb2770786edfeae79b7ea1d5372c77f52cbdb73a263d71c3a626ec96cc1e0f266c03ef2744a74bb184edcf0644a9a54e47e84e63bf3c4ed6a0b821469e9213b962a76aa0b421c7891a0e35651e7d4c96d0ae15ed71928683d65d217aa45ce5e1133434c4eadb4befa0529b67705c4ddacacb89e9e48919d2b17f3e7fc7b9e5b114209c9401eff9b93f253cef689d90a111feb73a4de55d3b7432865579d232f6784ec4d0481b39e275a8d8ce85c12fd76add9a2abfcc25851330342b53c49faf0929b65c6e20069e7c01697a44deb7506bdcd69d786100275de0c693143aeafd7f1e659c5bd4b8c10917ce653ad6a71bf2e356275b68ec306a4c4b753efb75a285856aed69d97e15cbf7cc8aeb68d1171e3ccef8c4491678a56d7b8c0c115b9c4eb0d04e63cd4febb07fd67a7285f74f4e66ddaedac2630598932af061aeb7f04e6b0cf1c9344d8b8f132a3474b9ae36373d27f52753588b395bffae76966b930267f2b5df8c97937a3d89c2732f4a6c3599394a740285cc5d99d241ee870f3b794222962731ffdd39cc55609c0d67d9d1630544387142f3e649cf36b19326e86a8b1ded3794761362825ea2c4d0e1ee76079d4cd3f4587189797159814b4ccb19ef63fc8849d1932530959e87f5622b95ade7c189127eff91a9d378371537d334323849c22d775a8a0a39278c711d2748486b7fd12737448f129e1c21138f553aeb6ff3f1891198ad7ee40de536ea567b5284936b912726746bf7e4c91cfea9d7e1652ba5f07ae58408bfabb17f3c44e9b841829321306aaf7ed5ff30b1ee891098a5f36944989adaef9320a0e3cbee38cbe6e575274048e908396936f6ee7ff2838407db69c4eed5b21398f402695bcbcf33bded84ca8b94bfd011767a62abb58bdd5fbe89d790ef51e9421daf315ef78d7a1d9ae422ad649b7b9bae8dfbc461820bd7a143dbf080c92d1a4acdcb19724bc992b2c52242a8fe3067e4cf7eb0c4b0bfd42219a5bcb6ac9fadb7cd343c3e9a8687bfacc0b1a357ba69605a76c4b0ecf0b12b2f2a30a1c5366a9db7979f5625cc340d234c66719ad359c8e9e021591c84e730cfa4cbb84db998c4228f0fa3c56dd3aadf4b03c58c942698c0e28f4f5a3d8f88ed9ff38ad5b2bda7d3d488fb5366051226aee0a4d8cff6f0ca83d45b814cede163ca4ecdb9ac384d197a549912eaaa5ac5f5b6b3a3dbd82b575405662757c4adefaf566276c8e141304945c23dd4db8ed4cf673241857ef66955c88ddcd01761720a95d85a7b3655fdd1a53a5a76c0f8681a314c4cf17a6b4ffe4abe5e7563824929d4fe2975167532b4769b092994b7d6ca15ad847e211d05a62fe2f5d3e7d1b38ba21d579b2ca56b28164b9ef68f3aaa25cb64028a83167ada839ffe8b3ed3348a30f9c45ac7e59e4bd32d74988927bcfda9e225a46bd1652750226bf67397da767302f93abd75d0ff23dc8603934db05e957aadf623c5524d34e19a97891da2fcbdb554ce4059c32413aef813dbc66bba184b3298606259b6b5dcb6b585f21c934b58c2939f6c0aa5a6f858e24a3062bede8f1d33428985250e134a283a2af5eef6ef7bb532984ce2195b99e750e1d1752ad3342b4da332031349e8e1d69c7ada228530736012095ee55dc5ba294ee72bd334263081845aeb6c6f53d6d63ef111fe6b3519626368556b1347f0c147a989ba58db3669c433a4fe33ede362c4a707268cc05d7e46548a2953958b0f934530d26d8c7bf65ca68a91e38c3374bc381a6b982802efff381fc55cf1fd314984fba64546747c781ecd304184775a8f48ddbabef79bc1e4108c5625a51a8f0c134334b67755499d7673740aa1e999bef4d15f53744c08d11023fb6b88a819a1930e1c268340fa69519e9354cf9f1204a6f5c83653eb44ef95161793403064b7fa646abf58d701d1f428ce5c69e5ad15e33ae030f98342b7ac12936a79d039d3342d04267ee8031ff6a0873ce0e10e68397b56c9aa7413d9c40e75a0c31c14fbe25cc82c1762dc672207a5cf4ae9a36e0a3146267168bdf3892b513bfa892d267040a87c95b51f44beb6659aa6595cdee40d2b3b7a84e102352a60e2060598b4019df3722d2f5a4a399bb0213574cc0e1e1eb4ab0de303a6c57bfc074cd6a0ebe0294b2adb4a465c82891ab857d1d31f77d2445e064a0b50ce48e9a168c4284b194dd3e23131caf22f266970ecfed4ccd0f9cd6499a6c1011968f0f3b9f298dd9fe1da5a954e6a8414793b66e8d4d5d6bfc7f3247c1d2665f03f4a771b226d78ec92604206749598b1bd66678981c91818e97dfbabd66caad8440c0e300943abb5e819431fb3435fda603101433ae354799acd8ffb987ca15735a66d9df3a6da68e2856fab19e6f9478725762f3a944917b8b0052d64010b5748a769526835965ae541132b9c2a50610aa97d1f86ca704da41085fc841a6ba6924294494da0f00427ecd24b567d87d1eb3967d2043f491fb5945455a9533c306102bf7a6265c7ce6409dfd8bbe661a97d33d5324db303c64409cacdfd1be6618fdfec4fc4609284f64755a5d25c9e94e1134c907084333142034c8a8049131ffdfb5c7416cb788cc6b0010493397e339d75fdd53c79da8408a7e9789a16d3835eb747d3f0787129c364082b39a7c4d8561e3cd9264238a4b8735bf6b92f955230090263f998ee1711639b9a5151c1174dd305132024c592a9e485dce40788e84da565f654afaca4176a21c4abdcff207a752b94f0027bff5777ab3b56a75e6260524ec92e74910b5cdcc216b5a0c52c64118b9529cfe9e253edcc7560811aff628ddb7c0edf8d50f28af4458ba95a2db2dba0c415c8763166edfe9256e0f163ded4dba7949e659ae60525ac68f9fcecd559b5bead8c9255a822150b792f27d45aa6bff3292edfa28312546c6aea38626aec9127674ec1ae758fef9e35fcb64c715a9d4cc48de1e9391403b3430525a5409ace8d1a256b49a1ba1252602ba2fec64759e2a32b19c5693f77a38596a5b6dd4189280edb32b69aa267af8fa130400928bce55147278f5269ed1f22947c029dfc6b7778d4a13a2cd334302a2a67a4d1342a2a294d5386fa1822739478a22d458a3333b5e34da14e1cec436d1137a96dac259c40dada6642b48777ba7a9451b2896e7d9898e95c716394699a1e4da3c23bda5f56006285124db43f8831dac49b09754ef6592c3bdd426c332a303d5c5ec648e9518289b6ea502daea6fbaa1b0b2597489bafbbf4a0cbe59c2596382821736aeb3bd3343628a9047223769223fda5d679f0d8f112039352428976d756f3758b2f97374a144a26b17b47ad33ec6ecd5e12bbaf9fed704b474dac24128df911a7b4bc25a42d9540221d5589343565c40e57a68961a3e41147a1672c257eb569b5e588a3ee2e7da9c3587662992d6984b7b6a7b62f3d4b499111d7ee5aafc54cb5b427b9b4942c62dbf5a6f6ae9c35c52863821245302f57b7101962dcfc4cd3a8d04006312849c4ba3e8c123b21c67e742588408b6897c2c552ae4f7808fdd6d4f54ce5e96e2ad334293c4a0ca12cd12f5aa8beade32cd3343c4a0ac1fa53f3765e21dce4744409211e31bab3a57952e9b3924120b62e7d4a6cad8c8c05a17857e26dab6562ab550f4a02f1edf0342fb530d3881240b462bb69058f91a8045285f248200c04c26040080030986e6c0743110840482c100906a4a2f99cbaea001480024842326a4e3a2e28228a87e29030180c884401411844410c034114c4801806d23cc618062c8c7e08c479ff896a096e1a2eb156a9920709b259155d907277385345c0e3da1657793395f86a0463248a7fc3eb01bfe19eebed39a6c72a6f6b898f0a1fc824b4bd5a817fc07f15e7740e0477c4fb8e0dca0a31f2a202540561d48a48bfb84b6dec0bafdc94891f72e6e56bb1a7b373fc69245c7a130daff7ef214d949ffe6015dba53e29a2b4485a7e91a1d950086f0d4720e7b6112995f677a018f7b6a0d31476df489c6c268097ea11fd6f90b7189a9529375c029f2cc003da2ab48b5c73dfea08d3afe684152c43b5a0d9c6ce21e9145093343f3e19766254a0ed8080c2b9cf10f55bd38d859772e789cff137e0bd5d3184322d562572a58b3aa57c430afa87651a9a92f471c41dff097f1c7aa3927c69c991dcbf31fc7c65b083ef992bef5b9c70538149576447daa7c4c334e16a34d8777d0aeb0157472a65cbfcb811ccc4d0272ecf5d9d46e7070d53362b8ac2bd6d4b57a2e232278624c44ef998c7421d2c2b312436597f38453c37ec62533e1661178afa9ae879d0933413f68aa78a943099f908c1ef3582b8d37512604226c47664b141218e8a4073255d1d4123f0c327b7446a27074805d49e35eb438ef5a109882f78239f05b917803dc8486ebe28a2e146ab89c6d8af2cab8b745a46bfdb397169b0f391a8adc80b6c0920390b0ef171a6816e6a373e67712ecc3030c5343dd8458a656a4f31e7f7ac472b13e20b6778cafc1104de087f5fbc31cef88b0c2cdb5f28791bac7c9a7e1b51d0668ba8ed8488fc5cb578bc2acd0934bd4c0e2183e33e251dddf2c2299ada00f2e4bf68f4394b5bc88ebd9c1750bb1db5b81ddb5c2d24a253102c336b4d53b3b1b4514df8f16e1fb20c6e9f2dca51dbb8708819c6aac902310099da05f1b2d2e72c9f29abb8d9d046a8ae31cd62de13e72222f1abd2fff20f545c643391bc97645ae3c69cc70ef832bf705dba32362a3fa235c06f17f66063669d35c090ca140cd46089fc41f3fd56ba036311cd2bc723f76b92ce38d8784a214b9da2dcbbb4e14c290990177ed5f644a945b1065fb02bc634305f08bc2476c2bd132ec8d2f7618902c63379ca90edd08455a58680798882cecb05a68e323f1eacbb0b672bd3b02296c09b5cf284dd1d67b5590bfbb7c94f4ce9a4f9375a97de5e4889f75bb14fe77b92c60a9e5c4626fd9822fdb1e8aa788e558f111da134505a6faeb733af649679c53900df28ebd0cf86be9a9720a0809361173d69a57f44f38887859e5c1e1046a325e73290d29b562b1fa225ec3a28b5bd280610607d508d09ac5bcdb7962e2e046df6cc7d2d5b5b2ed7792b41e0f960061a5a1fd443f442f1a6728c554bd63e098ea35e1198f28ca86e022454e3f7bc465b8268a1259a5122e2b25f4a0d7cf1350730450c47a0c8de30446f38b282effd3d5d4bd73049510d21278c4e9bbbe8d6bfdef70e1beb55ab24321d1b16d59bd199b4f29822a2a89ae7bac93e1a88f9d145455e3c878a515371692cb089f8290d39f58fe92129fe2ac5f6a851bc3a0667ef4cca94d32bef797d4e62e6ea6b126a4e39c3c4393ae8e482474aef2adfb61e1002d163cb6d73a684c71cdf881045eae98e77a67cfd97d7118eec56c167148e172b04de541237214b29b132522eb08708b875fd0b81a0d483d318de5b935a65e8e8104981b2ce830e0f5b4d1897d8d9a1a5deb8a95d5c4561b921d038b7b6511146fa6de9b4613c0de2741066e4e20dac509356722979ee913f7258c69bfe5fc8c855b182ad006c13f7a17b545e1708a862fa2b8d724e6ba5cc776db79a89a8f0fb9795d5e13ec19ad0022a1528dea117fe0f3a1d52c9c06b6eb083ccdd27606ebebe45e10eca32016e69286b69a49dffb12276e77c32493b2430ad5eabb368b28b9d57671c8834bbd4cf29afb5eb5857d69301f08270bde20b8f99720e6616de9a62f0050c19abc67c60982d7462312b92483b2a68749e0b86678d3c015a4cec5305181845c31d48d4195cec7f1b5755f9ebbbf0f2b1dd435f326b6524b08f927b9e0c3c86f4156587fd5e9e5e80aa4a392938d627398b618a623f4a615ac027aa9110c33e31c9f68ebedd2aa5df95143a01a4643d9a9343bd25174ce041e7dc47a3c0d26562730e3d4099754bf0af569fddf79d828617b367a113a1d1a8996b24311668edd02389f3bfa876d41102ae392410f2c84723951d02b6eb48a5b8e4e2cd783d5814df118cfb25d1326c8a3aef3ab9bd3e0900852d2620b85a7e82ba01e2808c6c564ceafa1e8e6af6d7ab79fad658096427851f7182bb0ec33719bed99e7abb6cee51539c980be81915f369b06e3772f55c347606ef88b4afed2b98009b58d354dde84d05901c0386447f4e265554c35d693be3294eebd58f33d94aa36c8c1a7fe75ef1cc69a716d3432d70a20109e7de554133d316a887f20647bed4070acb0df2a4a946217105040982121030f645baf0bfba6919b7d8963818bfac5d104e57861f9f2dd78068c20999ac9dc30b93de4a1c7e16b19dc65a94a99856923072c886a93176a2a02cb7f9d4158f49e81ac698d7f775a1b6a32bcc763483c9bdceae10eb599702aa09eb9064c08d2d600d6e01485bfc60657cfd9fd6ac963c222ad69ea121377fa5e80294275a8f2587540865f04d0192c321edc44908f87d4d2bf2ae32e68f1f471e0d4734f47ddc56f6b8204eb19254f1941773b0989d40df29aedbbf797274a0e83f32e167259df41e4345d02aa67fe91fdbd6798e1d63e81c250a494d387f9083502f7b18b536f4a4fd182e195e1c35d39d4ab8347ce73d9ef537c6136475c623e01314c2acce50b2d6393452a71185136e9eaf3e5a98318e58b2363b7b611ee063ec3c513eee15555d2e367ae2d90da85b0508a153b216e786cb5e780a6971207572efbe8f5783565fe0b8d15a313a43f055b694e91cbcd297dc8bb84ce728733bdba1e3aef071a6f009ef692ec5453d04caec09f45ebd03ad25fcbb809e64b5ea6b2b1a2699fef892facf9870755493d7257edf40199ae52602984a144cef8fb13474c0fe2c2620001940a8a78b44f3333628b303d181e410e2911453958340efcdfaa593ae03b84d7bddc34258784a875ec8a9b6c509b6da68ab7aac16a8450eac8b569a7fdd7c80a982c11916031eadaccab499e20680b20b75835edf688adc1e2d4d9a6273a9b6c69529386b7f3e1be4c3ccf7473e59d3870b32d89472a3edf8bc818b8c7823fef6e401ffad9d16679dc7f8d13ed25a0662f0a77e46635b2abe7391388508b51be73dabe8efd50e49cacae511e440d0b9da1e2eeac39b6926ad630ca44c0ed8bb30a879c633c761fbcd71c9a46f9e929a427007c54e24d31af1b521de3627f58da2748ffa78e79e269894ef6fd3336000b527a941a377bc9431b7e539dccf803f2399113de211f9df5188e47a66d1f00e334f63748e2e3a39f00cf228633b4769e49ae2db9aee2a93c5aa2109b1e237e28be6af3f1b0eda0d918f28d2881f8e0b9afa5024f58f618497593c78f3407114934ef807b777af702189ad7148ad70625814a8fbcd83c991f7510ae560d2a454e1ac6c07a6557c854dacf00556499e0febe865138cad5c32204b0c0a3097f72467e63aa0d0aced707ae19cf3e911857f546d30439c5e67d949564880811b68508331d9527b34a1e2ddbe8dc00d600ed66663730561e1b27b3a2ab50cf8c1300609fba8a82371bb786e4dd0dd8c7d510b596787c861ad3d03c63cd18ccef9020a9b907d54e1f664a79645f73aa5f8f59a972c9656435ff29991c508a927a542476d7ac117dd2ce78401a160a75026ca1557f444be1cffada25a4422cff15efc080c89a0abd7fc3b23efa93ba5214dc38baa8d54e881b4bf4758fb16ef4d421be27f1d909f5ea267888b3036ec76fe56eeb3a40e8f90e4118ec3c5bb76a2aedb2825346badd5a3f014fa8e62efbafda20b2dd28191a0087c96f02c30602394f1cd5468b9fd34a0d957640389a4d804aa84889098b583c7c991896afd79a5bf19bb922b6de547dd7ac1b2070b402b9f013cc4e583c5df809824c85b47f3df2e5c9c39ef76abd525b31dc99cf48d0df4b912809164403a980681b2312825b8fbd879922aa0c59b1a8a516d0c94761c4f67d523629a1635a9cfa6bf6d9da37c60fcd7eebee673604928c8c94af2fa9e5bbe832d80341bbbcdc0f219dc98b5b047a8f676fcc7ad82b59c959d406fe0d68b27159640032caed94deb380b1015d36da4085bcd366cb221fb2453380d1d67d60bab528b79dbf368b465190c937f7894850c54e0f05ba28cf452417071c4e173b25303644bd4ef0a285d32ee6df5fd413178b453fb91aba55c552ca390e83db62e87897991ea5141c171e83a822aa20d08c9956bd3fe86a00994ced07bbc76ee34232c2d00ad2849f907a759e88f99fe360c4dc177e15640f8dc37f7fc1c104cca2ef66e580b1353909d8697c4fcc3be64e4b8ed49dc6e884a6e40485d26713540c5320ec0bd0dd0a919b21383078524f0f4545452e454b97923a2a3357298b5117e7614a354210215fcb0ccd14a01e2abfece1b9c38e9558127c955df8fded6a9efc861f736addc7a94e33613c0d2f62b345a876b30d66eed319025b5020fd812cb5a235df308b4668ec042b962b0fb867ef67c91c5277985d71c55b1f528fcf2116b85081bf8d14d393464e78fadedeee3a66894fa96c40044d55080d3d5bb6831f8abaf5c412a51e55899aee23dd2ceae13477b230bac9fb467ed703a693f68b4dd3a5729b6d5626494706e8447a40c95766ddb5b9d359b4ec3276c3a5a7a45643e23767ac0040a97602b534edbf5025208716cf205346b4a3f8d4929ef1d6fdba0c978baf5aff78aaa60c968f64f7d16f3335fecce24749f2d671bc3d874989a7722de1a12e458ef89371539b4b1a85aec6ee934ceeaaca6580763c70dd87b76aa0a0af755027818764525f0c09502643b307250c3088aab508d5928e6d33c27148431a9ec6c87336d699e2acef033a784e26abb76e549eaf6fd3c7914deb7e2142e356dd32feab4eed59ccbb14fee24e5205173e9393e27e81a5a04cd8d143bdbba5eec0377d98616ea671ef4a59eab3878030e2bd039798832792dfa4f07d087c3062cf10b30586b248694e9195d3d3987118d42a4558420be409ffae0d564c6bd92084c2ad40769b6947e5be10ad2cf8064061a3cfad03c6dcbfdf203875ff580944b82c79d1fbd9c63c6bf4fefbcbd8c04bf0f0b8484b34308a15c14ca558db75fb006cd9753aede8ba58efa146bfc3eb252dead2e742a7b2c05671ac3aa9398486d5038870e1b89ffd94da391a5eedb95f3f7c45eb862c7f9c568b1359a20532760690f9bdb6f81bd267cb3ccf2e95468f2bc937333e37d4cba0d3cfc82cdc92605a623ee82baae9cebc51023fd2ee863b10675ecda81d970a8167251e0de0e9900823e517f379841d2076499f492de758001b1b16d0a0c6aeb3d0f59f2702cd62abe72120daa2ae764210c4715f631db7293258492d8001e1a21511dfc77beb713cacb94d325956ccac53cd78014b1bfc4f527d5bac1b73182c17c0ae1c6cfebd8c45705f2f9310b416ef1c3138502fd107775a316f88f84cf0cac657c6966d078172e0f8d53bccc2cd02f698e1f06696834dc0206a060eb836ccb90970e3babe212c8f0258c21d35164c0008ec01b6c00169279526258ff40015f3bed0ab949afcaf2b5f2770afdbe78491f0217fd808f14542b3e9edfb1092ac0dd4f23277a02ed5388ecb799967f0218d5f8fb8d120e5097f8ea9627cec3c64749bfb44b358e0a6e88be9a0ecdd81e87cb843a1f94460824bd10d7a04341b1dca19926c27440ec92f656d0031c3cd2340ef2942d512dbda108d890042b43a609d6f125a3e049886635245a9d16e37c2721fc5d3e2f2f39d13268024437619ccd632783310ea83961975a9fb8e7b7196af2ee3e76c129b7c513ea3a79ea910834c67f06a05a1260746791a2ab586a196ef2e104b8bf8e67fc05d8108a1f96148b714dfade7467c70f0bee27e657cd57c8a870b0017d03b378138e08f97b1db4e20dd4c1b40ebf3ae2bef347bb42b83849ab5ccd09d28552ae32f4015fe07d1facaf1daf8fded1aa49cf9d82771fcc67a64399ff163e47951af117e6689434935334c145004507f7c55e7976dc89e4710894a45d751bcc58af136f9bf8322eec7d375d75c80806f9be61c85516324f5c3aae983ef2a0ab712659a608dd6a3d89735ac372f46350aaafb5aa02c091dde292030614dee72bb5b35506c212188286f7cb89d6a21737ff311eb6fea837526d9afcd0c6d15515294e67446a86bdc163791afca23c59a691b85039898148bdabacf13986d9fe0dcf8f46bdfe91d60dbc9b438bf61edeada92712756ed9e6162380a6788233a13c7476a419a720387080134a3c650086487fed8a57ac59eeba230fe2df2fca6cd2b5a8d2b303e6d581769d17e256ed30871da078ff3ceb55104152e698e7c0277bae08d308f99ea82b1eb50e839f265e470ed83daf9ccf1f6128ff01f247230b55b56c9dbb2f92b30fdeb200d586ef87d688de252e2808a07b771c6a7aa7a88fa5c6714f57b7fb79122eab53acdebaba138612c88c16901f33b1014be6e9ef922299a723293093b2349a069d24f56325b2c68d2cd60ea8b307e804c87bad77bb7da0b658e7663774ccd917e5a8c3ac025145e6924d8292136795dcd24d9b92b778725923bca85d24877472668022e5831c3f1a065609e7bd0a2966f51262b7c869a8be881c7e546f419961ae9b48b9b5bf07aa1401b876a510d3f4b06828194a91e41b53a4bbeec5e34758c1e67b824b3ea62ce44fbd40ab882a3eddc22ccedc09bb01939aa902628213e785948163e1470ac4e8ad1915874a2bcb6fab40b932013dee4347d167e1cf7f2285117b08f8b7b8f500bac9938f5c98eaae46522e133309a0ba43966d0536de853f41d786b632315254b4e05ea83338ba5b6762c705f3d6573edaf89bb5c8a580799e914c5aa92dbc987d0d3ca168093f9bd5939effa5526a821510cc935d61cebc267c8ee5ee979546ba293f25fb74cae88048cc4e67c2e40308bd452b865c6b0a99ab07a58b121886bd23b666034720757d24b7eb206120f0f6e3ac1ed6becd8e39195799583a4c77eb3c380889ff499dfbce7a7e41bf60238eb6d0ae05b64a6a384c13856f169e3d19ff8395240388b385770b98201f74cef7e949f62d6eb26970dab77fcc405ff4a585821a8e8e5d512c1a8d7ac5dda3d64da0e2e8eb54ea85607a7645d7a92a9cab67ef89eb9551edf94f2db26f429cf38a70c2f590949cf00961fd0153cb7c2239e6c55b0aac5459bc924f15833272f33e0db7e0a37912e557844602984ba27bbd15a62d80b287d22c061232aba9c9ad8faa17f8e1f328c40c058f9ee77ead202d2450f44339e7e35e2081c3188b55a047de6182e28db8ba4b39d7a75211ef8b214eab4437722e499f1a51f059544df445bf2e93472130e14cb33d01fa17957bb96c5569b2c7ad1ad479e041f64c09128c99d2a61231f972d699ef87c929c3aef43b80606c6507879d70a2627ca69c86ebd8df78dd0c7dcd4612181de514336585278c3d8b0ec183f84b986b8fc229b57ec11f4acd5ba86dca3dcd71da8a614ffb79925fcc16babe7db5da1fc49da2d23b25162ae2d71cf560f6121f9693d2357b7c6b872f930438ee11308108f577a558be3a21170f8ea418f0adea782304fd0b34adce92312c3c01ac330d326e5e2b6a5b948b592affe379f4b0ffe4a420d8a7f2f0cecb16b5c6899dd79175a29aa5cc26384e3bc112990f76940f71baf990ac2bdd1fdb7b2386e15493f4102d745f639f226627c588bd9a2d393f1a59b4a76b4438777bcf04a98f88b074baf5965b28c3d79523c9b01846c2de8c316ca880c9667eda33966b468006c550c0a2949f609fb4f6ec0f65dc1de37c321d9734c35b96aebe345203ce5cc0702993c432d95ab9df2b9365e19660042e58ffd50e600e4f0192595f369aadc78e4768656c31af0ac795140042749845122b3b4b52b9897a485d117ad6f536e377c389bb6ba43146743f668a4eee31cbd031c55de7141c2ccba2783dd0eaca421ee6a0b144702e6febf3f390210fc1485d8d4f6b9647ae4abbdcd8cf2e7ca8aebe40ef97d4571788249397430041ef4931189192f1410de295204734df19e8247648ce16fff9df90244c279049d71c3aa723e9502659928397bfa5b63ed24da7611bbb6db85f81dcd2e6fd50bfe097223fb3bd20697126a4a2b958aa5031fdd77645d95f2f0d923764cf65caef850c4295fc4a7fcc616e87fdecb40304558e99d6ad45a604020aa66f84e5bae0ac6a9d4e25d3aa3b127266a74bcac4026e708bae8602f05f12add97f13bf024f688b7f9f0b7de25b8e1e5293b5157bf900b9ea6a1c8c49c1f14726688c50288f903387d1980849f30e263a9401e59d17637752a73f8662806c47bc7491dd7d987cc57d248d620ba8276e133661b0e485c1c097ae351c4fec24e9ca583c73319ee67a3491f2f64e435b4d16d130fae34af9ce68ad806348d75a9de0cd03b0b4966e13c13ee81166ba7f5944b02c4d21140b0905c49bb2d67a711889bd8ef8940ced0218b434852d27088b2363f26562927ce24cfb259a117cfe5ec2fc56346fe679fd2b707182c968d13c307a41404e566ef87833c2b1cbee1bf730d3c31efec8d32320c75778cc47602a16b58207b15690b8c039a855c1e2caef0e0e6f6e531478732ab91ba54882eec102608e0e07c06e74a33afa291def68bdc2aa85b046606c3d568e7bfba6fa5b7de4959aa161bdd441cd7fc0dc0f5fba91c57b7c776d1dfa0e6cbb95ecc6383b80124ae158c43f8db3a5c22eca3b38ad7fa8f41d1313b207f321b3b4a40a8c615a5a57915e0319e901fa48edb52b0f0570752850250e446748dcfda8f092aeb3e2809a2df611df964809d96d629f577f3d3376fce40c461025d59a1f14b54dbe3743b2870c50e9c18ad926a8250e746a0f8d08012b419e840d9d94c08043848c99867c0ee3f21a9540eb10f2c670d291e37b259cfe4977d9c172ad03b5b2b2af6d9516a1fa5e07a51758f9773cd12d420ff5ef3524a6f570ab6d47817e3129dc5a3dca69d12665eaccd2448989dffca6117c4e2b41a31703ec4ee2eb7d5d7ebcf071fb7675722a76a7e918ec13effca79baba7bf131df7a37a757859344467df0987ecb8416431e7e80a94f8074160007c3c57b10ebcbe43f959e3fd5548bc1a7c5dc1fdd48ebf9614e1c0467bfdede150218de7a2717f0b5bbd3caff115245ae1c6404c3c4a38fd91234c6a59487a768a507bdbf3b861b5954bcd6b3e2fad5b427fa7e5441212e79907fba38d99f7b66ec8dad6f3e3269382ccab90da01773e8e207f78e495aa4fe1cb57e71add86ae1217d4fa2924175dcb8bba153174fbdc5d8ef79af4dcc2d19368764c90b62c264e9a130a82382ea9ffc2477bbd202b961a69038d6ad97596035362ca57b9792879de0acf9b5d038ae4892a7789230b4a98a2fe9239a269cd3a080c18202969cb0e7b191a9a1a148cfd565c022a2b2537b9c16179381ea7645bd5a9db2bb824e67266d2d04abfe85190e0edabb8d911ab9f52a12f220da7c318410d74f72397da53e6dac77217777c38eb8ad7d8ffa9034f08a350fb59f9f4f67030814bb7cd84a875fb434d360efdd80182658e11e98ba4d61de9a88238bea02a8e2545261ef44bd2a7f3c4f99c9b44f32fc1016a60c464759e7a075753336e0c701bacf521d84083332f7f6430844ff008ffa2844a304314386f93103142ded7c2c082537de2aeb086f7cc0fba5ba4c888c85c558848c053ae6cbf3a980c608eec7ed5fd269ba358cfc619d8f620e226c22141603594e15a2c36d73c2eb64e99fb58af9cd498c3a4003ca732be79bd76f3fd725a6fe7249e566f682d3b4e6d5f943e3579b5488c55d701e36cd967e91aaab456da3f1cba88282690129a5cf744a22fafcd7a1d7ca36a336b0421aa13ea093a924aad1761c9154fcb8beb1e1aa3bc2b3bb405e01541d4f8d67299372534f109ff6e5424234dd06c1581d5a5adb97cc767537c6dd7c061d5c847c1fd8c40e5a7f140e09f31296e7508bfa6c8b352b325a1667675e72a6025a721f05764fdeca30f31edcfe3bb412d447b5d25a01238e4e82701bf1ea6ef3d437d3eaf1747530c8ecc098186b95426bb2d27fbe187440dc150d0cf1f3ca29fd79c3f3605f7c041e2c3e0b383316925194240a6dd9304f8b36136db7d07ea1d6a1d3b0f2142c12567ee21cfa3f04043f105023f0dcc051cf81a3d1386cc0169a8f8d334100460c08d264a03bd5c31a74bef11bd19fd9e5e0c5ef6a3546e343ded2bdc4a3247be5d6f616d13dfb4fb1d99ae1cae2b94574f807353a0fd221332948680b88a28421cfb8011bf604ee08739eecb4f6b32196b8a4a253c4e7540145f61c436713c02d00401aed94fb5304b28ea61a003b5721897396919b1252d3ef84d7e445cd68fde16fb3a2683b3f0180d855c5c0bb6b04399b98c602b2f5b23cb205ef7dd5529e2058369da20f5c542a6889f98030629f46417f86450b2bcd35e7d53cdfc46ad330adfb26571baf58158e9d88eca9f9f749c6e96e851ba0a64468dc6c8b0f76d7c8248d193b0708090a8c2b0930e53638350700ccd1e1df2d01e4ea2d1f36673a02465b7b01a03556f21f0b64a845db6c3c5104b8ca62b4635b24671ca5bf437631d736d2dd7897bbb1117b7fa5e283bec892b0aeb1d43fbc728761cbbdb591669e36a206d3e873b44e6d3ad822dbc95733bad2f91ae63d83a3af207e9317ba73c8131b4a18393d6759d441e5ab0d1a042984deaf5b0c2854a84719a961fe4f5df59007d64aa3b79b4b3c2ffc7bbab7aae9fcbd424fa8accf964b6cf62094cc744a98f4ced31a163bdb98b8d00618349910b09c2e059249fb9c24eaf3ba0082b5d48dc5716ec5d84516a7aba137da15da14f5da690fe46cad2901cd542ffe5362274f5d33a18ac002da81b7a5bdb0744c99de97fab9b63a2b52698077a3172b212d8e13e74e13761d4f17c1dcfdc7b6ebbd6eaf6a601755a26b97177e54eb2ca8dfeb099edcf28d631d1cfdc5813c126d975d759e487e179fa2c0b44454ccb5d8293b531843523ee7786850f1d90e0479a4595b9a482758d83404f7063426db9e3fbbcd5f10737b2311cdf9fcb7be4accdfac0d55cafbcf4bd13d280118097894065785354806a53cf0a15e8f534dd9237649a18274b31f98e977d07f6702c7ac12e30435827aedfa266e68258be99c4d865b6ac16262d714d12304565d96892c419c59fd1a878014407224127daf5a30cf3d1098aceba53f8bac9069ea196f11073250de7483edc221fcf5399d7c275663e5d1894e41dc0c37f81deac0aceff9111c3248920cd8eadbf0e7273cad75207d76dea2f9f9d5d98f990086bb0a22d3a6b07a3aff517c666a091ebc20f4750647d4b39b9878a7c4f976f5d1326e13e18105c55eb8df67da647818f3d355d33405180e53d40e4f106c8efd5984e07bdccfe8e04a1cb86b6758cf0fef6336f332a16f681c101318c2af8ca0227835635c1ef154ba637e021132ebcab7ad9f9722bdbb7c2f0709cc89474c6580019a48e9dff0904708e08d99c0a33615b96bf904453292875cd990cadb8e6f61299a4465f5d69f8d342cf7f195cd76262816c579728a584cc08d83d0653af1419d1a74d3bc66745ce9bc9e37ed585f7ad05fd970a9708b2ff073844cff01b33f48a8d6cba5356d68c8a60739c3400c5173a6ea6e21130745d160fd71704bdf4c6fc5dc8a56c71de11f194d0f515a0b3aef0268846418bf039b5098a091babf68a5fe4a797f7770ca0f6ac5fbce750f790ee2a13f2da386ce6d0da09003ce5d76944555ab251d6aaf1b11af4c9b4d3d95a7680881f93d20fb4ff7e6cff56af8a305c65bd6a180e412c0e65123e73e3f0b51aa705c85e1805211f0ff01cc2b61b7b8f8d9a3d486a27948b034ab1c6506d4310e4d9fcbd0e4954fb8a2d1524424bb6da0fccd87066908fa1c3a1e806444e2000926315afc72a4b4043da87db66b875227eddfae5e89dba9bd33a0e217a1aa8f77668049ae6276beee21fdd52ebd59184d86e6c35a14100689fc5e73dc6b628c0e5aee7ae8d2ee43cdae2cb300344ed3c70e0387ce24cda05b7725bd145f609c5bbabcacad3c92f1f4cc319d94e7c26cf48cb85a26a6755680d5aa49e50de40a3bd3891650bcb03124f2c6b9ceceb5abc06a77fa96f85a886ef16d5c515d3fa8a0cd84060af2e7dd59d44ff1c11ab3c89718c6a0d17ab90a2a8eba8daf88e206f12d094b2a303426933f20435c62c2726a10407ea404837665489c7b8d106ba8b04f62bdf9fbed03a2e1eb75d5f10b1a52beec22d29f913387f42b9522ca7f44569ac9cbc2eece656f64cda0f63cbd12c1b907c683efca65cba27cab6d3620c2e744158ef5d3c9b34d0bc413661f5f0f67104c0ebf1865298ae4ed1d27bb2e299ae361d99e55386e9332d4094c13f363326a1c1cbf021117aea59600e988a8518218591e22167b2e080dbc2545df1936b6a34ca890cbd123516ee55a61ea94a54653652db19c216839d5906f68e4dbab51c25593e6ee5b40feddf7d276c9dbab1d63bcf2265810028183bb51ad18fea602f9301a92db8f7b3b258714b84d496259195c4ee6681c6fed6fbacf0381ca0a83ed56d833226de1b9153d2e4f50bd62620a3de8a393c11b6b8958b6ad1ce3e9afc22ab220e8e3abac51046be1e0cb7d6bbdd79509a4cb060f1b24da3ebc5c09dbe20d6a5db6a9c055928f2816b8308eb8c6546313072c1aa351a942418f65185903bae6cf0b1c8bb024c3156445a687f937a6c8d3d710e258456b6d630fd8ce8f4f974c43078e0f71364f71784952ba87b892edc248371f1d3c9d79ef385c38dd5c6bdd48f322a6d5617cf585cd07f3fee09b0ed8183838079440bed5fd39a3bebb2a8a18baae62490fb1753ae8f70ab8681a0a32370c98e8a0402908bcbe233719e2b1625e998610048c734a62fb02ef4fa41372abc5c15c3fe415de999a19840d8e50ff347bdbd11eb2a9edbb28e670aefe7aef8e3989624ec4ac2255a2bfd3cf12312ae0f0f4ba5d3d2d2e457f8eee33a6cc0b7e2ce5a5e6a55c28d60e6b3e82b6f7da8fb5da5e79874e58524815ffd320f30f400bacaa64acd10dd5f8cf24476c6dcee6dc8e7edec15530b7d0a3d71913162ecf9caecc85eff7638c58bfac99c77d5f1e03890fe6871b4eef794e41f677ae841b71c7ab3c745bf25defa9285edd1de1beb109b3375fef55cdbafbbf7e1be1c80223d85b26a3eedff5de30a22cdac8370f80d292807023af84abf2126beed127d0d11b137ace08aabdac5110878dc5d388e1546f625304e782284c577d83d5eacae2761058bc393be21e4ce9f5f99f20a318a437074af17675901fb484bfdf945fff8151e9b3ff3228467f38dee5683642b8e46b79e4517c442c68938475d73a05abd6c0f8a77cde49e46ce63adca50fae2a95b2893f1c777c03b5ccb045d6f4640c733c407f2451e83d68213840910483efad32faa6e588442363a4da7579d44d62616217310b54727d0dff0d05e4cba4990152efa8db3e29a059406d4849512032758f7238e65200f32889ba166cf1f2f2731ae8b3610119be5f0c66132c14369b26973c1a16b45a2a24a25740b692965ad2d2cddec6010626dd3ff8e41c5d3ffe1f42d85639c201e5e45b81604bdd2cdcc5af2125d1436c1a2c3a52cdd0773b780eef05c66c5a05819e8e95d9382712ed3aaffb40b2384c2084a43db76955d394c793ed2cd2721662a770c2725c6686665f9b45c48c1a708acb05b954af28c0bbf788afda0faf64c2dda72cfc2cf38a16eb86e00e200cb24e1372f7e12df6afa4144ce52a78cc6b63184691da15bb28a87ee26b7480454fd01aebba0af996860300bc4a5b22b96f5964262f4a2b95909b2b5407db0c8a98c9015c6afd5785df87119c898414dca33486fc33dca322ca551c56fa4468e604db35f1496f39f06b587f28e5156d124a1e931d6a3b7dca52a2133ffc2906460366579388c27a0c4dcc266186abae47972800d6f02ca8d20a67acf04a6010ec0318867f12484d48ae81f840aa06855fb875bb648426944c904b74a5b55b63994d68bc8ea65b67020e6514edfa3eea8a6946adc1944f12143784f09718cdbe09320208d7f441c68372d845fe8699413b3a32ef9871f59ae095d71ee1662839fd1f73395e377b64a30a47315d12f35c053f5d4cf84847d06953a207e68512649128740321e6268fba6693c265c2d55c914c54c29dca5b60d0f71bbf68a31da7631b69df0528a77d8d2aec5dd135e6d5fbde703ea8a4d57dbec8d4558c2f918f7fc0fb60dc63e1f55343d8145e10b6fad87592945e767827e98e70df6619b30275b69e6075d82b7e786c57384e946a2893e18118ff32732d7c7472dc48b5f61228074e22d6bbd99f279a0f61e3288838c0a4dbd7bcb72e8871b6a23a8b5e15206ff4730cf7dc8b3690c60122d52b3e2396db847194dd8ca6932794d809cccbd4f707fe0a2066bbee65237100d5a8c9d7bd4693e0b07da3ac0e5c132b832dbf2884926def0e0196e6276992308534793a81feaf5d2683f6cdc110197f4870d790edaf54ba0db463b38219bebfa81fc0da65aa2a561d45de1df6d45436332da0c29cd9ba457ec685654e71faa8cdb32d22df9f78745b7b22b1963546a064206216abed26517c9a0463079114a1683ac41465dfb12992ade73043687fa4538599f9b577c5581ee2e1c13cd5b790731ccb95a8cb3c3064561a3151c48b2cce8418388d0b72043b091a49b92957fcf66d9cff83836e01e38877e323cb7f2eaba259a55a8ca2eac181f094f24acd1ade525a3cb98dfe5e42c34fbbd50d793c9e2c79fb3615e9b1a8a609a07ed8f45231453d011aa2d96068360532d9d6bd83649bc43df4054161eb69689564a01c6a5945ad22825d7bf63eac15e93e0fd815d6ba65380c4a80cd3a14054a2914423962b2d3d3824192409ece2d6c9668844032c698dc8c3b44fb760745e34757b5269747e05dcdf4befa595618153062208bfe93b43df4b06296ca1376c7275f45ac0ebf5e71b01f6b02d1e31102f19dd2c6094216174cc96a78cfc654e35e2f5cf674b680b0817b334f23ac94504e1acfe98edcb08ed7662f532c5a63c7ee6f05bccd8201bc4bf5c3d65fb623004c878c6e8ce983ad04a5432359e97f4ce20d137c547433a3d2fdadcbd41be29cfa9cd300fea58ef471f38840ea6e8c9b947104e10d942b41788cebdc7e5eb2e1e4b60c6507710376579422208b60dd79017592da2ffad274c2697b27297f6843faad259bb499827f841581a731f4fac8da00f595ae16c1fc9dd08f09e735a7a2ba09e8fad324fa50b7b0a203f6b3db444d6a264402cc4c18da13966d0e2189f86f1a5e88fd226883c454c1e4cb25649da346cc468f2d220fe00d0bfd3c18452813e7404077f7126aedc67dc1314db8df4b3260899ca83d653a3795814d02068993034c8599e19e0324ed030ecd310b545df72442597317eaa406706a3792482ddcbe76d902b1bdd049e6eb9eb0861c913bc47776ce9f45522fbaac8c966bb6742d0b83f8818a53a2af6c39748e81c0893453a50f77346cebd4f168f4b0bd91a75629a47984f598e49970975ee0d839f598c99e2199689e5e91b60c54d617052b660dc6883a694e2e253b83c2d8804a188571aa739fc8173f60e856bda592663f331772c698208f531532c48aca249bb2959e6fd95613dd5d693300439798ae3a63f269142e7200184f79e5d0d2e758861cc05b0482df06130cc6942bb5b074375508e64356638de9d4ca54ac6dc347821769058ad43ea651880e32097a37c67c01ef29c0b30affd881fc07f356cb0d9f6297121bdf31af8aa7dec09daa9ce57002f4fca4437b2d9368b142eb5333816e656d2b68c594e112a5bd122d74f63e40e84bb87df8045748eb9dd83d1c3c3236c2189200cb42cd365453f0d660860fd7dd87734db087b3ef99d93955a089eaacea1c96abbc95c47c0d70a0da98591d7829e894159d181a02125f0a417eabac97dc6931631696c90112c784010f9d895f7014382dd124979cf28ad08142e8d1a0303755e02d41b03ae5e05d70d3330eea490033cc3333cc3333cc333a6f3181d11b5d6972957247e93f06b6f4a12222b16fe00bc06a078d65a6badb52d0e026410eb0dd20d9e0d76e6d87a6209bde58888c81a6994e1680431038d2039d8507e93453d794edca76b20e326493e379fc80ce65083f7bbfa268e94b0d1e748832d6d1359b1cb81867fb2d22a8729d9da7306369c9067e988192cffadfdcb7171c25a0636a64afb169649cc1e19b04df94c6a6ba5158e8888688e316082f467a5f7af7c13060070851c62f826ed32e5099de135d250418e302c265f1a27db31c43b2222c2469017e400836e524a9373bfae091f20e4f802a65133c8a5df187392c30b9eb9e6f71eeb928f7274013349fe28b7247d7b2c0717f29baa349d5bb6dee6d8c231dc5d4395f6e7fb39b4601ad7f4a6e9a1cc3c39b26045f77c2d4f62bca9780e7260a1923a584ceb97965d3239ae90bb76969bb06d13b52ee4b0c23e9a716f92927ae9912059c85185725977aafc9dc39f9e830a7549f9e4b4f3b6759a206b2439a680e7cd9727ecc68639a480c5b8574a737115fc111191528231aa04643821471478ff60166573b67b340714ae2e314dce6c72f79d1c4f3854dae7b424d7a54c799033723861cbbdcb5a9e1b42ff2610229e655d6d9b4acab6d182357230a164a2c94992afd3ba981b39964074566a900ae550c2a2f226f9c51c8d12ef1c49b03c6875099e635e8ebd910309444754a513d2fb4d94428e23dc595df6cc325aec8b841c463055b460a2454f5152a711520c36428871ccc9b3eaa72a641879acbd4d156343b417220c834bf6492d2d1b2e2718574a1bb3af7dc62e051887799eac7f795dd621bf382e854df1daac2c2f4008f1859a42eefe4efaa4d146191808e905d91d16e6b22be424412384175830a9624ed10a19d72e90b4b066bb494e8c9f105da41be39fe87d2ffe6b482eea281aee3cc6de4c4970a180905b14b37f6965adb464f90721b6f04af0f0d9a71a2bba2584d4e29c7a4b53ea38ff1b2db62827fdee1fc6d41e1111d1905914f52c9795961c4bac1059a49b425a97109db543b1504cce1656aae2cb453482fc0981c56be1a2e6c99eb27aff8ade3354faf0a822637185394c7b6a0d9bbd325546482b9ad9ced5b827b8dd9421acb884133a37d44ad8ad21ab506334b574e9eb36dbaa385f6a576aacd43b6d2a6a0f1d6efca77b3dccc60c4250610e334bd9fc2b9e9f660839052554badc4e7db63365400608424c915ec69b2096b27c4a81e714536ed99e14c5e51c4cdca9b2bfe828e8f4ea5f5bf6ae269e20441495a5dce6d097e4d7718d1d3964ac91461bdb460b4444464242d14dc77ce9191de57608288affbc69f64b3b5cf6136472f512ae82a7787e06423cf15d6ffcefcf7761a7904e94448f7671c3f7104e982f837d6f4a35377713870bb59bceb3dd4aa30943975bbe2019bb7b66e2b2da7073260926ea2dc1e7346b6407d508b9446a31566ac8245e8a671912703338080bd8581100e0162196e0af72fe9ad190a2db481a6da03182904ae8b12c86daec65d14289e3d4329c9da77cdb4f621f31312344ebe2959270e36cfe74d2a5aed48744220b2eeef9e453f9d0422061382989e99619ae7de3904710da17e283993c267112421c516b0a37297c85f5ad1be17b77e795e790f9d3218c58d593f8f12995506ec8223093a6af36c7b9a7a608218a287fc5e45aaa5bdb6b072724114ec5fca5fe0941845ed2c5c9497abbb9420e715aa7f89eeb6ffedd418821ca08a2c60676b0c6192cd8115288ce4e4fac3a3145fc6f4608212c29dac665e389afa6c67e20641087a44da7f98bc9d31b2288446fdfb83927c9379b40601292ab5992341bde910b01c4572f97e2a49dd6298d903fe49fb133c736d46bc80f9b1c2ac89e24784adf19f9903e38be167b3c9cc54e39217ca0e63f83c63439cb46647821640f67a55a68d5b8cae0e9e12873ad3e2d7f41bf903c64e37a2299b374e3c5c3f7795be27ca89d0943ee50e70eeff38f2321c40e2669dba6044b1db068a3d272925442a784d021640ea6645c4fd2e9532c1d1111d9103998a2adc698aef2b4691c4c6964cbcbb5caa30507fe774bb69c75a4570d79c39a52c514d332629702831037149b83dac7754c481bf49b98f4e86972f60d1b8e278e6e5aea743151c81adccc9fd343d6232222690851431a1233f6724fce57933d1a0cfbe56bb13a47f7fb0c6dbc6f66c9c1c493d10c85a5ceb49f499a97a40c9df891ee6e9eb2242d840c6310c3266a2fdd6572a8cb00708590309c9bd56951db2e2e130206b3b84c566ad77020b01124e40be7b6cd8951a176e20c84102f2c669d4243458d36dc48a38c337ae06b784817325ddb14157b932a4910c285c27f4ad4afd8558c6fc137d1909a4ab57ead0d42b490b4e7d919c2629d2cd81eace16cf81a9c08c942274a270b3b31c3be178205dcbdf7ee2d77a3fd57603bd4f57892d65833ca78438d348e88c819196205537c7e4ede33a40a86b4e42679c931d9442a20a38d2066a8d1821b8450a1922e6c6557bae6780999c29f626769a9253b4b4b213947e5a7bcbb61d21812053b9c5ffb6bd7be49507040c8138ce13f2f4cf4c5f9c9181f2023c409097f5b31bbdb902654a1525aa7a626134298407a5d9ab04aaa164b429670b48aaa29f773d2ad440851429f52c3550ea697d933928391902478b3a156372de634cc420812fa58e5f92ede58e41d72843bd4de2679ba3bf31c6284a279db5465a5f32a2906a3351972b432d349290107314edae5555173a5ed368ccd2f095f522fe595e210464248f6a6f32a1898f595f47552196facd1060e60b425f9a584d9bfc02e74909c31f13a7a9c80c317c8865e93f2a55edc7d26d5c931995dfd36dce0850170ec62cf24737272c1400f8278600422226c9811a40d374480431789965ddbe5e35c987937b5a5864ab6162e8e5ed7f0144a8a8e9f5b7c95f1642b7457f3688b63d44fe7bae9c84123481170d4a24aa299cdd25755f46891eb8e858b256db43d0b538538f1ecb698d32c8ba4dba89a53ad664a6200a0041cb130f725b1b851d46d2d58349b3fbb4f8c946fcd08385e51aace31754a4becfdaef03209259846f98d7ab5623b89d8f64bcb5413072bf0118f6b593b6b9d346270ac42756da9249ac71c6ae4001670a8a2def931b59046444460802315cf46df9237624ada430567dbfad571ac2af25374d2b26397e33427d3145879896954c352e821d5e3fff4093f590850800629faddfc12212ebe99c5318ab2b39c5e6f0ae1b38da4d12ac0218a50e873b79a39ab91291aa0d852fec26cc46427b14fe0b9436cd2f08b36a1137078a2689ad5373ec5b052e944dba6e2d1528ccbfd39d1fe48c4c9ed73e3d944629d32dbe58aa9cca3893a44aee849723849983361099a3f4e4c0ebebbc104bb29e21a25d5842cb9041adb9e119a662e6e96d8a44f9d5d23feb13f0c682937c87867c11a382a617aef33e92a85d8243f222282831265b0f18697a0050bc031092493d8e131ffe64c390e496cf9369982ca274992130934e42c899e55d6320a8936b58fbcc939f3520ec7230e536285bf3939354e1c815b8f9cf0b1e4681d1b51fab839b3c5eefc17620439b251fb5b2fc6160a3816b1c916c576e59238e2c1a1885e43bf8d9b5ef2e0a571c6197e8688c8197e46c19188af235394d9f71c4b11f1f44747494b4f5d744444640769a43152869bd141b480e31077ecd47cef1a3977c16188a22c5f5e53bba7fc4644440a4721ceeeaa71a3fb2aef828310ce871293247e6b5d49d058c30d0ee01844761a7ab6b75385890441c9f1d9e1c573dceb8170ed2fdbdf62f2987c1c80402dad9767984f657fd84434ce36be82a5fc8888880759c30538fcc06a6e9524a458abc7f4415d7b8b6e8ff3d208071f90d78f9a992275cd13018e3d6c3f1767d3625276cfe2d0432956ac3357d258278f230f54c6b9e6b839a713bcc28107ab4efcf8bebd70dcc192ac73ae3cf77ce96207bde349fdba9129488ca30ebc25514bb242a7df11071dfc8b8bb9cf313d2b1ce098039be7dde573c67c4a70c86193a72dc6f7e79c7b82230ea719b3d5e8ac58f5c101873abfbb85d09eceebbee1b821dba24979bc3a05871b92d28a6f2686cf7fa70d6c58831a70ef101f39393f0738d28086524ef7f13773bacbe1888848196facd14682e30c4894b4b516b67b5dc16106a3f634895e7e9653054719cc1e6e652e2b55ce3d1a1e041c64702ec988b4588a98a6051c63704bbe73c99ebdf62e23222209ba5186b3b1861b68140e3190696ab5cca6ee558188081b6b38192dc01186f36bafe78be1111c6048b3c91647fb440938be50ad749438a3a69e3644c0e1854c9a5b2979732acfac1938ba707aa68d8e379a844dc1c185c48c0fed261beae4cf167cd3d871ac7c33ff89430b95206fd2a5d4982e7d16d0b4f9d52c4b65cc1d2c1c4c0c35972ac57185cdc3929c1cc611111115905102c461855be53274d01debb783e0a882239ed7e553ee6cb653e1b47fc9c23bc9e95473e30c1c53d83dc4c44ea1429f87c838038714b8ac312acc92b097cb24e08882ea1df64367ab10fa69838d34d4a0030e28686639764a5f7d77228e279c2f6fcc5ccf63ce1e0e27a0659a45d24a9aa0a7b0e2652d19e6191c4c40d46d6f53b67a2a05c712688fab5a8bbe3105cd8888c80fbc0c16b0018712bc0aed27abf44ed49784a38e9f98c4d57020c1aaf5a4b22599ef72388eb0e6bc89cc9370184129f993e45296499282c5406cb4735893941332c4d067f7d6be6b3e7b338c23ae7b27ed640b02108641d6a468214e82c167588512ba62dd6a6d8ca0d370c11704000c6c7e3e6d2af17db5fc82798ba92b3fe59eda6c47d8f0857f2546274ba5693efb200d33de58c37bd00b43c5afed1c7f6742c91104c00b2ebfe4b3c2bea69c230601ec42bd68729ace7633d61501e8c232716ae6e4bc9d1f26830072c16a6866ce6f926ed69021005c9cefd35678c4e5f0f12dca396b63660a6ff1f2b6587232c8456b6d973c2222c2023304500b01d0a2578f38d9d0a19ee4cc826db5cc8b728904ce8a1da5c0d446ee2b8749d9ac1da458667263c6de783969c7284a49cea13bc94968cb15afbcc08c1da2a83fb5ff590a6d1fee0805af2525594aca62ad21509c44af12f36ca32115ecf8046a92640e15dd3cf489279a9b0aba27fa4e864a083b3ab186fe4c4173def6444e64ae9b278e4c7d97b40926d3496152bc4ad25b831d9a58466ff6defc7285694726b62b49b2202f6717c444a2699e97ea6859852eb19f9c724c6a3bb2c3126855ce8aa964b0d3f8363c0473d851092c3dffa58c97d792541a3b28b1cf5e9a1d8d36b5ee988431a54759f218491ce35dc79862c68e687744425b0d77d1e41e73e87d07247a37f50b6fb55829fb884ffaf0ad90dd519b738456b92a4bf4e06339ddd18823aba44b793946742d9197735d599f9445b429d95e4ecc5dfa5e115bca5be92de7c6ee480425e5aa9da50b9336bf0311c587951c2f6ef9ebbe1d87a8c33eba4c4c6b64c7109a7427769242c7fe547d90460744447c90c61a6bec2844428c5fcacad875c24e0834d75a5c09dff3d189b06310a7a7b974d22d1aa21444e669374a752e89bd19f9c08e40b8b22d7559ec5f35ba0310dc89772e29a977ea6a3382ec61c71f0c9ad7315dcc35164d76f8610ba7e56b992615354fd8d107cb55adc414c6e4fd76b0830ffba57d77a68b4fbf2322223bf640b96c780caf9d76998c1d7a28fe7a5aeb7825c56fdff012ecc883971d27c6c9f19bd3040f7cbc0a1f3496a7d47a073bf3fb9e60b57d72b2c30e7f9a985ce9379d890f1c8d0ceca8c3d517c3c6d90ff7a7b0830e65acec6c62962869fa39f4e13fa6789fdf2107ba7285ebef4b92491687e418773a787fd04dd760071cf4cf7099af4b3049ba3710bae3ffb619d342fec00e372c1f5636c736317ddecaf01d6db0e5d6e44d52be7aea77b0c1bcc1a296772e8fe21a8ecce8b8b16e2ba5061b6dd8a18613848de51d6920c00e34706252e76d2caff6e48e33e417e64d4e4af09cebb3c30c7d6fca975fee264d704719089d2a93429bfcd9db0e32bc622a5fa7f67a9d3e63c71812a7334b38417e22643150919fbeb3e44ad80eef08c3aed1d3ac7c275bff7c9036d07033d428e3d32883cbf84190ff41909fc50e3014a563d79624125b5242b0e30be5127f4f6e93520a4fd9e18573f474e9cdeae46ccd8e2ef0fd5ab192f826e74b8d8888bcaf51c60e2eb852ba9d2cea7ff4b016766c81d78e266a4c654142f3c20e2de09f5212cfe3eea664838d34cc28c3ecc842d13b979f10e6b1a4770716f8ca5eda9f929e9cda15f0d68fcd6ea75692b9c30a6d084d528e2689e219efa8c2f59726ff94185334257750a1ba9427ba55d144d51d53b0f204d1e8299daceaee904261265e5f8249c9e5db11052e86e75869b3795d680714082ba1a3469363d4ec3f21b7babfaedc2827b8c309c632d1727b92445bdfd1045b43b65df8ed79ff33b0830987ddd930912de954e9de4009762ce1b274f1989f2d6adf3b9460c6fcddcdcd51abfd1d49e83d853a89990bead20e24f4af6bfe95d7eb4d9e083b8ed06d9414aaa144083b8cf089396bba4b315aeaa6a318099753aec34b6abb4f8cc42b79ca142f6f86b3a16318979cd762d5b7ff2c3ea243189a5db4cf5f1f0cdee4653695c030597879ba4c7d5ecf2f580db5223a1a4d56d91707fb0cbb2626e6cf6d2f5cd914b65735bc709387cce12ab30b2e8e677bd7f0cf5717c6ffc7245c6989c9047361d544fba68c15b9e322db387d7b296d0cf72d9628cf2b8dcf3c25670bda24a9ac31ff49929fd4e28f357f973ca3c553976216536b16f48a667e909ad768c9c2ab133f09ae517222c5a2aff5bed314323ebfb0a87a7a3c734477455af58ae429695553e715d0e10af5af52687dd5d894b5e2b8cf6f962bc7b4e93343072bf29282e5247bbee9df2ad2cb0b61318f9e6f3ed0a18ad7c493ef7b6a7e7283051da9b852bead8c9f2734561778a7718216e84085af174cc23e65dd88759cc2742ed9d1a7e9b97536d68c0ee8304521c39554c9ef535946434729f4f092a22fdebfbfaf831495e41bbf628646f196b099b43cc794de1705992fd3826f9a35d343c15964da9e0e7937372830cb1e0fa1d3273af13f334689d9996f1a3a3ca198be99db0999314f068336d418828e4e3425874f25a74b072790fa0b1b6d64b742d3b1092f3377e3f8ecbbc534911c242e6793e33bfd1a1111c10019474726b039132ec7b6c8fc611d9858808e4b7c9ae4649bc3246d4f5a02f7127f5305fd0463b8e07454429324cb609a66f74da684632e3f1f9617ec0427e16554c9c92249247894e4fe7762a4e620d011892c52e4436aa5a4990e4824558e72ee9d936b2c7904ffbf6e9bf1dceae388fda349d2e29d32ee1a898e46f85ee329e613c5ceb252d0c18804e858841ac56244b282c65087220ad7b4174b34a9f89d8e449ca2674dd3b4111be620e840449da11b733a4f29ef3d2222d2861b6ab0a1061b1ad0718824b1a44bca6031b7792322226aec193a0c51987dcadc79dec3c43a0a41877c5f384b7510c28d76fde195a6a4120aa2631069cad29ed615443f173b536a0a3f720662578bec3491d5d00188da84eb4f71af7df246c71faea8294dccb847d8581188e8f0439ea92449b036f3108f8e3e18ec92e7cc7413ba391d7c50d52b47cd09a2c6196ee880023af660125d3dfbdf8e9da70e3df8a3314f985fe7cf5c1ee8bb34d32729ae55d181073b4acab1be4fb1f8b919bc051d77d04f4a91b179ca3ccf3aecc0cce69a9c6c357bda74d4a134cba9cb4e54071d92dcc254446534536aa40d3482b82122723ae66065e4a5ea18ea6a2c72e85d2b9f7cf2247f3123ed6aa471d8f016bcb1860b4ca0230ecdac57cca1630cf23d1c0cddf7cb70935d628a1974bca17052aa2ff99f96cedc70eaa47725bbd7ace191325e2022d246103482a0e18688c8197e860974b4e1d81ad243ebf847fbd8d0e79a4a19b4354825d1b18644ffa4616dda25b5ab430dc99684730d8f93b32775a4810c179334ddf229a4050d659875dcda0951d7cf609e2679c6df52b23f6628e7cff1b28f5b86848c139d9fa5e4cd8f0ce4c56c9df531ac25cb184a72977495c5ef63576248fe4e62219fe25a2c33d01186d259d6ccdc65aedee9008339fda4d4368d8e2fd0e1259c9cf49e4d0aebf0027eed490cbd3d1961e9e8c2f1bf7fd7844e9de7e7429bc237ff262984bebe05564b5ebf4ef9cfcfb5c098948973d17feaed2c7cd2a2619da46b4f3958f02f53c6b6d4e331e72b2c1b2b74efde5e57d80aa7e77abf2826bde356814ccf315e992c1590eca81fd273959464a7a0754e252f3d9f848d9142d1dca42c1e4e7eb74c147e93e2dccd9946650a85c73544fb5cded26c3ea1bcbb616d34b573289d50f2d0181acc6ac25aff95e4724b1b2626d0e757d5a3d14ef069095ae77c92654c39bd334ae8666db37d3a93f069a87c13c4a3ebbe233a909085f29cfe49cc34d113818e23303619cba6a3c308a9b95a36dbff935f538c324a66934d2e88880806d658830c1ee42046213927372159b9f961901af75e2ec785619e874b3147ebd413130c638e4b1356737f4a609ca625f456a8bf686f6fc552d4bcd9447df15acf9cef8fbdd0273becc95f31f48cbcd84d96cdb77f4dc29aece28934932aa69e9c66a20b2d4d0a7f29a475de930bb5bac476f77039a7d53863cd38b850bbe4a4fa15be45629b745331d5d6d86c2c03cc08d2861b24c8618b7a3265cd4c4e614a28472d9233736a91f3ff4dbd8c3572d0a24ab61d5e993cd93d8b2d9774ca6a1d8378b88c33e490c5df714c4c9d99425e831cb138fba78cfdfb8e78b7841cb048ccabc9babeccf18ac3a59c4aad2f395c41f6b82631540a530fe768851ec4c6b4e27d558819c8c18aa4cd3d5d92e0e7580526ed9a97f15646b31caa28875749dfb86239d7a92877da4c67e97366e550c16c885f1edf4a620ce7380579398d7d6fb74c5ba6f035764a9bd572fccd5d2147294eb2b922d7b3c3e47024072912ae723fd366ecb83d8ae424c956e1b5925871400e511ce5df223bac8f5fd6f0111f94b1c6ba19270c3942e14e5c4c7959a27ae22322222bc8010a26b309f35163df67fb13fbf746fd8c6c7912f6c45797cfc4d3d409834613cb3ac570b13d07275aad6495d2e7bfa48c07393661acfc3d9b7f357ce813e4410e4df499becaf2dc872d1389a26ae2ffbe6b8e8b044830c608c610c11821180304637c600c0f8cd181313830c60622f03930414a595a7eae3c1e732ec165452fd1cb2eaba4392c41abe7e849d410790f56c22851ab6763ab75871247c5b0116f6a921055196ee49844c2858ea2164eb0ced488e7904492ecadbb1635e50912724422e9ad726fce89f5293f230724aaccb90adf9e245e93e31126c192a6097e1d1ff61111911c8ee0267b73885e89f6a9118c0183314ad00235dc68f700009e90a31158eca821cd2d492909e56004e596e15155a424cd2e820d04e450c4b6b1b39f2749ac34a14414738aa7e5d1fd8289231ec8818872bc31135ea36eac8bbae1c609d8f036dee0808808199ce31057888f8ee7212c9ac0000e390c51fa95749b26ee67bc0b41a7b039945c9b6fbc23449599e4d432aa1d5e19c4b5b95533b7d36d5582b82c3ae5e86182e79302a19f242e9bf9e4eb6a01b1a78ba9624aa3d155f3073d423695b09a49538a1fb4caf1273f3aa550521fce1a2bc71c6182b5aa39f8903cb3fd32abc91c7b78ad733adb6c9e51443de0292549adf583d97539f2b099e81d3cc7848755634ee37988f6d74644446290e30e7db2d37879b3983996c30e75bf8692a4d8aeb4c93a1825cdffce675f7f67c1182320a30d34dc1869c109420732df6d3d786e6d7473cc21a1721257ebff735fccc8210773bedbd2993c95cb11874edf92c62cb5d0399c030ec932276dccddc9f1867dac83b9658b41afed400e3724a7be9f2c26a6aa1c6dc373a6141f631e371f6a482aa7923d758e6a19b2828f3410ae275ee9a7f8400396bccf254c4a0dbe9fa18ce9173358965329cde06ef80a9fa1a44f8fca909b5b5fea4d7289274406ed2bc63c51af6327d9f031063af9c69263571f62b8f348fd4b5a464444b4941b65b471c64fc047183a4f4f9b739c9473a77d80a1bd4c5a9ff52a250fa58f2f101d4e2ed154aeb9491f5ef083795d780b953fc9f5c0471716578fe76259dd4f940bc69c4cb67edd168ab6bfb2199516924a62b9a4444fbf58160c151babf678c9c9b1506ee4aee7f05e67f92bdc417398751d29294e2ba02694dc9b4c73bdc8552055baba739a0aa567ff53484ca2c9a7d1e8e449d68714f218a239a55bcca1df281c43a7dd289b26e5fe50e0d26c4a82a7b1f7cc9fe065f524a756a227eb9c4055defad0bd7e9ec4def0d104339ba77892cde594ec8309b89c74a2e9e1de363806a5600c42c118748231c804110000157c2ce1ab16fd4f6f7337263e9440fde5745d69b6c4d99290fcb6415e4d3d2721f6818464452bf6a7bc6899f938029a335ed85fca1725c787114e733e61429f94ad69314a0f6298240935494bf42dfb86e1d5e5f2ec941d116b0f615477f284dd578abf56304c2315b3c6b00146a5a396c2b3c6f0fb7e41c806fd5b4beed3bf2fcc124d2ef1aca46ca53163db5810f4e80551dd3986d564c9bc410f5e1c3cfdc47a9191fc998c0df4d8c59ea762cb8cc5eacff7d0c5266756d9e0293f2a492e7c11cb4e63b35b33e2c22072f762c2458f0cddc20a9a0413b324c565698b528de56cfb5a8bfcac72b9db78eb843d68d1631605e8218be27f0975d28f3d62415968a5da975072d99dc60978d00316ca9e24a476f05072865f61b6aed9ca25a3569f2baa954a13d73851f9d38ac3874b9542ce2322223d587130c962534c969c7467a0c72a126ed3578599fe6caa2a8e0a5196442a9be8572a16ff2c3bb15a538e122acec8703eb9f95314e3a1f7f2f6c44e334519ee3d6cdeb06c6b2945f93525e7e98b14eb6692fb93bde3c83e8a2da6641d5bd5d573290ad3ce2a94d0a21a5349284061cc97a374de98463dc9881e9f3078de246b495217eae1894e706213e6ba0cad11bf64a6d1c459c1c4b1d64c97b51da247263071b4cf59688ecdef5f42933fc7befb74d9d158c269dd1a9f3d933bd723222218283058418f4a1c2e8c94053369f6674ab826f4ce55f9fc5935094cd4e47ba11bc53def400f49986b272509db29be5822715d09fe39c682c7cd3d20719418c2a28367bac48fb8742a7d3eb6e247e308a39ba76669d908665baa4dca4d9d2ec80873ef4bb08fdf22ca26650c3ab5bbf12945ecb1eff71f3393505622ce1ede62861941768008b37f55d89bb7c721d60f26de4dfeea77aa8721b67852f77b576ad37021cc5d65af95d21e843856b57f5fdb6310948699b8da05d1c7cde931581b8852e854aecd3180a0724fcc99e3e69e2aff4047a509bd954b4396f4f043329637a39e749ee98f64a0471f9c2db70d0fa37d523d222222821e7c403a76a789d97366f2f6706d7efdd7c5ae586f851e7ad044f3245fc9fb4962e501cdb07fef9e1afda4f4c003bf775d627a96e2ae77d0830593622bb3c971f5b0439d315da8efdc94521d1111f907f4a883f93a2eadc5cf0f7ad0e1cca9e25dc552bd60bdb16a6ca0c71cd4943f25d1a33b7f8c072ad1430eefacfc6e4f6c957d3de2608a255f997357af581868420f385c72be9b1ca6925775cec68ea8807bbcc174d351eccd34a5b5ad871bb29bfbe8570b9e35fda0471b4ea65163ecc98ff1730f36289fbeaf335f9b181e10f8a0c71abcce922773c7fb4a7d073dd4605b6aeaf7134f9756f748c349d6f5b86c42870f93337aa0e190e15626d74a9224c1911e6728c4ec5e0ed3d224d83dcc90a41e16772e2f43925bcad8fdef799691b347a407197a3b11c978e275e6ec184abfd9236e63124ccb1e62404c7fbf3b88a79ca5117a8441afdd18bb529fd8e5e90186b2a412626d5d2b62edf1856394d889b9d40b5ef2b3d598d2f9aa76e1d8b1727e36d9d622175e539b0bd113f364d6630bafefb749e22f841e5ad84e0ab69b24d3230b7d74350b9e43af53050b2651a3e2ba52b5a6922bb01a442d7876fda06f0f2bdc69be52d628f6a8429e9975cb92bdfb54bd3eb265a491833284d0830a7c09dbd527478fd7c58d3ea3c7144a49dceacb23ba32690f29b0955f743dde886ed7230ae6a01d4ef44c7e1a66196facd106107a40c1ba2eebf3d397c8b4c713ca38400f279cadc6b35bb03cc9d326b8c192987312d34d33078d327a3021395bbb2429afc712ccfe5a82ffa7a67d4ac85ca64a123d5fb7c21e49f0ceac9294e5b3637c48b8d6f3d695f7851e47a0656b534dadf785bb87111097fe6057ed1bbf3392461b680491048f6224655bf117b1fe9ef120861726a5706230ff8d128f6194b2e8555a963cc04318673f213a6510c9a93c18bcc6aad21c3d7868090cf3e68f7ccecc1be75fec5eedeec1b3c97d415f78e61f355d93dcd5460c7ac159ba08178b179cacc9a2549a8f95c65d6cb79f57547b36865f17989a94c5cfc2afc97b2e9e125aa7ba7c3326415c78614ffea4b37265f22da8cf59af64362b588a872d763d2bf9f2f464b9243c6a71b976769e9bb4384774cfd5cf848ffb2cfa924264d093dea6455924aff58694f0e011171eb1b8d39cad6f4e0fddb90ef0800515f9d539eda532c17f85d11ee434bc825e685d81b84e7986c5fa1c53ade04fce8f55ef0e69969135bc0d349c072b2c296dc69c83bb695c662c8f55b0febf2544c5174d31aa289bd025bdaf990aca35434a49925e75051559775ec6a9954fb9aac0e314a9af553ac1d4dd244123f030c541dbfe252335e4aaa570355535fce6dcc9d3a4e06ce2b504d3df1cd928cc552945531c3f133aa2f8c493a428e92e589e331497fd754cb265fbb4fa1a69b4c106f20085a19f62e63e49944b1a65381082b0e16b88f0f8c425fbc97a9fa51e2ced060f4f98931cf2b1d6e6664244e0d18962beaa558eb3de8a8a886ca0d10802020054810727d8f58c71357a097e9931c878038f4d1052bd395ef774353c349198afba9298a385f3ba0a3c3261f6ffd4515d9fee1626f0302229999f530a273c2e517989eaa13b66892de5e5d3e8f50fe18f4106187854e2f1caf9fea7a2c496bff44bfa794c828adef618a3ce2a6e49d44922474aa34c458547242c513a5a2849359ab4e101892ebb4a9413cfa675f2884d36a9533ae6db528f23f8542946e7b4f626a423222219e0d10836d3899ea22d9686ce83117dea14ee4d2a29b7cf22b2a89c994e0a2d769e229c5b17d134211e89e032c4a9a6850d2d1d1e88480cd156a932e9e4a8c1c0e3105d25ddace97f1ae201400c3c0c718ef5da973db9f4bd04c0083c0a515e5a942b8b7372c510e21ce5fea4ae51f32896c163104668cac137af75e365073c04d14963a7f63525660a037158374978bf7c41aec30310a5d9924cff26d78ffa872e66dcc9bc7e82c5cd0fa55cd4d83c1e22e2ebc326976872ce247e311f3246c0830f8ffae6649535cde5c60369e0b1077e6308b764aa1e8a3ef31bfa7cc724290f9d54f1f3e52e0f3c382ad9efb539fcc99a3bb0227fc1faa32336e06187e4d4681e333cea704eebdf36f384c0830e768aa51a4ec8103f393ce6a05ec8e84ef2a620a13d81871c2ad5570f2597f0884351c2c6cfbf2b7e178a020f382cbe299e7a2568f8bd041e6f38d447398d69fea57b37385f92af5bff1655332222623cda70cc8c256f568b1178b0a1135df22ce9a69857f1584371236de7c1623d6d20f050c3a3be6216742fe30d3cd260ca595cc7e74603715257361f0b789cc1187c2ead88ba65d66ac0c30ca68ff78c21c537f796031e657857a3758e3da90c160f32dcc9f25c96d8d89ca8193cc660fe92739fe959d69cf310c3256696e7a0fee5d1ee008f3034db79fe64b1f58c1118f4eecdabd964292dcae30b941cbf2feeac6a8eb9367878e1b99a72ad0edae944797481135436c959642eac21747fbecb3df52d943755af72b5264da1162cc9d34cf276ff8e972c1ce2a64eeed324c1cb37d60c35d808f2011e5848f0dca7af129f4b3e1e57684abc3cf249573acac30ae514e5ed3bb23fae1a011b3b40c38d910ebcc1061b699840bf8d17e88047156e4f9d848b9ab5c1830a667797944e66522a3ca690c9f65fdc7ca5509e7fc931b65d9a8b46c112e9a0b9597a313f1e50683e342c4def5c7eef0947899662c7abaa010f27ac49a88f92a735784624e0d1847285baeb5cb7e88a7830e19f93d3a5a7759ddd3f30860b74c06309ca49660b9a2b4757564252b6d378d1ee93b486471274ff0da2d943f5ba13010f2424b7496edb4e5279998d33781ce1d1ce932c7bc552cc110c889c600c17bc808711be1457fb23ba8438071ad8510c3b072fc17e327552430c244f8aae5a0bf6f70fe3609d53f2889d124b17869a353c434477ce970e0696ca844b97138f9381919b9f26e13da2aee45f349bc14c3e635fd87e913366a2f465b617e790c14c12b9dad20c2fcc6a2e5fdd5e49a3ba8bc5a455f3a9f4348b2eaac9e8f019e3a42cb9f8ab47ff37b3dd53898bb5926d89b6152ea5bcc5f7192ce4866c1275b4c5d27a29d3ac571413ac45a27cfd95a78e169894c4cdf9ea7332c96416ad89395a534b6461a97b5bdfc91b3925b1d82d47ec4763981c25b02864589a581dbaf6b557a81d3f5ea42e9e44e58adc326f838b4a79de0a4e4d4a625bcd0a2c77a614affa336956814eacd89ab65b8e2ad21c73cd5b2a155c748e794bbeed28a1c2646143a6c635c9cc1f111129c48e531843ccf899887efbc7035ed8618a52458df46fb092c7930006d48d088c212232d246417280861b8f461a686401c82bcaa69afe76c9e4498d2bf0aff468e2153afc7b0520ad587d3a6d37fb4ae764c5fbe1a99398ee7cfa559cebc48f655205cf419a02105514f7a4cf4ffa121ffb54bce9a14be88a0141051783a6f9a448676e07bb0320a7c0dd3609eeada19ff22a0031c59a9a824cef6ddad66f002905e25f296bc750138090e2fb18576269d82ca6011945827fe8d75b4f62e92c8a73f8306da2c6f0e894240009c591c93a6d7cc67b1a145a4cdabd17272c8516c8270e1d9dabf36652125e209e50ff67e35e5bde5ade896b34ebf66c76e7ec9cb85dbbeefd5fdbc4a80e806cc2caabf7665f622849209a385bc3257f3f4b97a4806482acbfcd19d7830943c6ecf10a13209728e5638a0e93934ee496d0db5e63e2db3c785b094ae89b795137758a8e4e184026714a5aaebe8a29d623500388244a936346cde8692cca482cdac9a23585c99c3b907053ca9a6f5e62fa643f2231e5aa4df1701546e388b4c4902fb6666aa96a849f3cbea5ec56625b6e040d46182e8eed4b6c5b05530a4016b1645bb83c9524005184223192d9c462eeb424823f496c64bac70439a90110449825b6537a534cb5ee181cf040fb59355af086978005400ee1c91bad39f2836a12f700c410f65a4af94d642de758084accf81da121f6624c07400891d425bf4e7af6461b008002904150fad7799139e54a86461a418a004410c76efadbeaf433d33a904010b52fb7f2f1fa6fa2861a7b4619dd86e7400d2080f862b41c44fc2f97fcf9835ebb6fd24a667811fd70d0910d971a1b6e00e983e9494899393140f8f0c5d62cd2398989bb872e7979891d7ad1d1eaa10f129993af09903c18662bc697edc400081eb4a9d92b31e610b516903b2489c75bfc9d7495a81dfc0a76ded172d6fc71207530a5d09527fe09840e7dac18212b6239c5d50d207368001039a8512affbe5d1a01240e45c919fbbbbd644b6280c0c124a60d513352e61d7fc315a7edeb32fd25588e00c40d5607eb38132d55a6dc86e355eae5a52ef5d80061c3395ea8c665db395181ace14d2135ce84b31c2d206af8efca62660592864bf4b360699238258a86843ef3599f13fc52fe0c884a7ca651d9a87003314352944b953c55fa4c359032e4278927a9a68d163d060819984a09f9ceae942203640c6ccc2779a5cf67d9248188e1b83b7163973925bc301c2abbabf9c5beed0b103024b6a65c93ea817c61dd1255a2423f931079a1753bd9dab2cec516bb609a4999a2c992ff1e02e1821f345790a89c53d505c8164c951f4fb60febaae588889bd168ac085220023258d0660419e900194000a2852b4da554723ac143bc2e009205d3e572eb94f7c3dfbf23878c02040b654b7d39e677ca1e472057e0641393d49feed77a05620536fc8c45a38c0100a942619799f33e968cc58050c1694ba79d2f4d5fb64744ca58238d32d66023481940a690f576ca681ae6964ede0022052b091fa2974ededc7d149a3931a5292964f6bcb28146906da30840a060cb267755db2da93523409e9054e82e4f5107e284e49d97172ffd8a1203d2045c2d669898c4301502c28464f12cd735902598ad9260427fba0051c2513f8b6c469d321d8d207c461a4744a405409260d0246d9c9243aebd0408121493d5a4589ed28592077204c5fce37a0c3b9bb20bc4087f5b6571dbb871d22fc66a17c243b4afea7b62b8216be29ae6c3402bd77a98935aa76e6124899f37adc9d13aff138c67a72cfac6c0b8e4bfa9cf56d2e8c92f30bfb0147de958e9f8a2cb9cb5db3bb62dcdbd288979dd9f243de9a42c2f88b68b195dded93ddd85eab179b152abc7277541aee5ac26dbe7fc3ae6e2b0d1e56ee3dae765b8782535a624db2d92527bd3d7556c51ce163d52b39be64bbbf0a316c76fddc8a897167db0ee35c92f88bc370bdca364ae24da989db82c0c992f669694f441323f6291c885918c9752e56e582474b9ba875b4ec4461a2365ac117ebc8229f59eaeef934cced3e0872b6c99ca789929f772df8a93b666bd958b63bab3e2e9ddecc1ac527ed75761d4eccc132549e69fabe2dfed98576265d4fba4c2e80ff92567ea7b61541c2549a96292e2d3e6cd298c394f46bf0bf1178d29beefaa30c92fa5f83a99ca8b9ae5c6901474a892a276973826df286cf756f1ffa86597138557d299649a84623bd12b6c74d2aea081826a898a2db9cb59af4ff49573a89b9a3cb1e5dc8992834ce79cfbd1893576a2637426af33367e70e2e8ca1c7552e8b058ffd8c496f1dd4a8ec1a653d28427984b7df08a5a6319111139c3454006073cd0821f99a85754df5353aa9c1c1365f858314f25f971893eecc7828a67d0d22d51e5ec649247ac8431e7d666acfe3d290925a8faf2a8269f4cc2945d43c78ce12bedff908431a5962b26312133f62312e587310fa999f9b5e2e00724b2b8b14a3ac9fef108e624616e4ac8ecd1c460e18723ce298e4b46799bbde84723ee8b31eb5fa893847fd7f8c1884a3b7d784dfd22b496d6b1dfa8bb61c6c2800c35f60467fc50043fd65afde149d829f991882435315d104f92d5cf3f1051db59e8d826f39bda1f87b0d3d3f8091e9fc33af8610835099a2a3d67eee01b66e88f426052acb575a7c864340a3f08b19e14763754050087f83188d3caa5bf3adcc59836fc1084bbdb2676fa7fa4d818ea0619c1f81188dde72fe55cf796830b885c6b5b7e3446b9ad6d461a65fcf843720ea126f5bc8ea6113ffcc06a964bbff6164b923ef41eb3a7bc35b136e47cd0faa44d33e998d35cf640c5e5aa8de60f3d609df44e92535dcebdfec88357c1d532b5967afc3ff0503ee9cdbc4bf80edda570e379a1aa880806d2f861873ad0a1d13ca9e42a47a954328724cb119ac494d732f166001bcb000f9021f2430e9be87f72e5b3f812e6168c0183314a30871f71b0d3bfdab3e887f60b1cc8b0be9756612546e50d65045163032a80c00f37649f04f1fe93b4fde41f6dc853d24af99bd8605ed64cf2ba2646ebd650daaa577afcfc50437f15112756d4ed54a5214936358b7eb927737fa02149b2dedabcf6a92cae3fce50a8f30a3b4f9dcaf71f66e82d7bc7d312654aea94a153b1ab928b6166a26438657f7eae980e5992fc18c3f1b6318a7d26f94aee8718de141fc3edbf26c9c3b0ddc4c71419730d834119b124e589575be27fc19832dde5954689a7bd90e736e1e3d2d997dc85826487b68c7bbe1a2e68edb9e5397b8c12dd02a69f84cb24a91694c85c1a279459f062b0e89f2d164ee1d1362fb473a65738956554cd6d15d38656c8f6febe24642ee7aa42a9bbe2bed4dd57a6c2669fc9e4a4e3fe29fa3105a3a9aaa5182a09a6eb0f29f45226bfbff89a5a320abc09efe79bf674678482f1a4c473ea2cd74ef9f18484bccb4af73e59c31e81197e38e19855b6f3d7b8c5766002119134ccb8c48f261c3d9df815fbdaf3fb8888889f35438dffc18432adebd3459b7bcad8c11a7b861b3f96508ad1fffdf4eab3637e28c154a9ce374da6f893fc9184e388ef969e1012c893cd5a4ef69a0ff9085fe567e6e7d0f9b33f8c5055989965648d986c31c889ce2746663eb953c42864ec74594b28af8e86618ef55bb9b779b2468591e5390d51f2f9951406e36449cad696493cb13d1fc050b46d3d9e682eb5ed2f92ef68cf646b3615f5e10b5df6fbd6e4a4178baf5a12dbe446444468e08317d9e47b49bb6e9aa1c9808f5db4e5726228bb202605754145b9d4793dd59d3317867b8d92253a6daf2122e20317b7b8a4ad04b5ca49d08d10f8b0851627ff84cea1738579c4472d902fbf2c291e4d2ef7023e6871da2ff937d63ad25b1111f5318b8413e753de6989ba5816a49b87b2241f34c5c482ed78d2ddddc24235cf3eef15657b1d3266e0e315ab5cf6ace1552e54fb820f57e8d9f2c4b87cfbe5dd472bd0cefdd142fe9989292b9ed40be5e321fea3948334cc281fab48acdc163b4b74a624ab0ab7724915d44cc5d97b4c50ab0a2a7ea9f4c1bf62c63931a770f44dc62bf5610ae4a34c7d3849d45f8f8f521c26d5e476c6a027d5a4d04d6f3b6ff0ce59ed28beb0f01563b68862f5df2c933aac364643e106ff943f748c1a7c80e224c6ca12530a3f61644cdbab0f79a292dee4a84e7dc286b0137ea62e29d5c5a0fa259c38e36a7e0a5f713ff43e3651e58f9d5e35ac5c928e820f4d1061623e3bc94aee3d81828f4c9c4bccd09524f64f4af9c0049f5b3ba5d0f893365fa28dbbf1243913011f96286f944f12e9e13f968f4a1c4fe810cdd8faa04471bb4ddbdb7b3e8393503669eccfdfd330970f4950e2c9eb77b0d01dbe1a3e22b18b8d9678c1fee3f501092d6fd24c9525d67ece8cdd818f477072c564fe9c8cd6e137360669f8c005222268a861011f8e78324c69aef012acd746b827c74ca2e4b674988c2072f3a7d472fb5884f36e164cec58a3db2a822e592fbbaa4cb4f72322228f868f447059fde3c5f0f8fc243e10c1da9670c2ff887e8576e0e3107e874f6ff298a474910a3e0c71540925659c5cb2775808ed62a568525249f92a3e08b16f904ae39dbfb12af03188c3dcb5dae22f77de7c0822d17218ad3dc124f808841a5a45ca52499e7be20310be879592e3248ba96e1033cec71f6cf570193e353efce0a30f09f0c1874b2b9e90bffad8c3fdda3f7bf13d820f3de0a53bb717dd3c5831e59cd63be97d593c24f69a24dee887672cd170347cdca15053359e35136be23eeca0676ea8b4954c4e69ad839bb3692671ced5eac4071d2a8fbd9ed25f31f898c375f1d674f72e09bfcaa1948adf31c36397a7e2702639070bcffdf7c185431963d17b73492689998f373419f37a4ce9a4f268e420c8081b1b5863a40522226d046118f8704327078b3fa13c6aaf2e630d57430d375c8d375c80051f6d7073109bd54f91a9fb60c325c9b9a4d48c1baf9d8f3510678ea9a8c4f1d160201287430161280c048081ef7e025311083040300e08450362e170bc521f1400004526185a442e2a2c221420188985015138200c07c26130180c068544a140d8148b6340552e00616c4798b8f521aba9962462f61bc7d8934ae8f1be525b6b6e89b831d1520c937ecbc6bbb17c2b0851c99f4fd814e16d2bb0658187bbc88416ef70c4d6ad87e54e694924f419c87c464e36454202d9f2aed58c735f29c0ce3c471b3da507fd91bf99af3eddc1d95beb4c29687d6277954381a8300343180d27c96575550ece959b608f9d1a2ecd08e5db3a36714626031acabb450a330deadfe8376fc08cf8ad18420c027773088926094131d15d40650db0eb91986e2e5305df4fc60f8c2f2706035f9ca592f005724855388f14356312bd4b1767c26d378a6127a58f15ab176b5d0308f90c5ebd4a500b342d7b594a0e48fe0e0da5b850d021707a0445ae17a29c89c2cfcea69d9d7919b6dad4e2db57b584d4c93076b690c82f5174c6e13326e0b300fe5746dd47991aab47afc979b58260102158c09409ecf08cfe1cc6cab9287e13312bd68584144c6282973a2413516d6c1afbf024844a57867c4217ba87665946b6d4942ce1cbb01255650d56effa740d485493f8468d2bcd5931652b27bb9c3832d0dd19723116448dcab2956230490961fcf2a0cd1c9577edf9ea9643e5cd7abe52134a258f5f62730b1657a0fb6d0b14d8c41697fea8d3d1aecd55549af5c0959f70dbb23f017cc0ba32e8324e9b36c9603058f2139f282ee2d0176670148210e12360d1c845abbb2c4b48e07eeeb2c83ef07d8655461fa427ed207979fe13bbd03d140b392c023b2789bd2bce55df39608be9acbd818fdb4028bfa40a61552c9c19abdf8b69472c590ec8a9767a4c8a6c274e043a4854e6a090de3a97940d719db7f3149cfb8b33942842d8f100f2dc997c3417f085af2fe235888a94adaf8576fe78f25a88244aca24934f9cf6c46bd8977a36a406ce20645f9f3e6964214f89ea87e6b83cd82111a43164164524cd974c461774da8b41ff6e11ebe2b8c74d7426c297dca1bbcb2e2d4cc1446bc7717b7977dd160f53d3b0c58b3f13c4b4011174b16975f6d82ce24593cad73a8de559b568ca0d944ba94394f11277148cd1a17e684ae101e5e94bd7f25650d04f11f10f43520e502b003d54d570c7b863aba1fd24d0e795c0448445c344c701664c324cbf26f7443f2f1c7b7452399beb9cdf81a80656fdc7273a31c4a2a6c4b1667c6d7f807e9ff3796685b53883cd2a42a4970af9f563158725c5ab8e58053e1320b9721ecefd1109fb41cbcd361cab2fb546b85f44e9032fb1ba38a64486f67ca09c31b25cd2786e6076e66a53602bf45dae123c7948a20235d5cf5134bc3494f705cc37c0480ec25d0f87f6de07aa4b4b62a6e6e0b8bda1491342fe556f33de150e4a1c49605de4c9f0be6906205f142424871c1207aab773b82b8c3c2365812ef715ac0c4c42f033f246bd26a6906cfc9a52492b86504938193704cad0e77ecd346d02e4031137f63b2d6b281c8bf527ccdd77a95c68b71060e733c5001013ae54596263fa4bc597d8d69b8206a52ed68dbe063c75edaacb84434dd3f54d87d7d500a6706d6aa76b8a92325d58af1eccfeea4c9f06a5d03556aad1dc07d381c1c3e81a9b2c7cb6908b488694e82c8b23d0177b9c238fea2352c9700f3d0c0925b63a5973758bfc6c9ba47396b973887ca3383fa964828fb4512b4d39b45d9d22206a436ff6582393315357a0756d6f1b31cc1c30960e1b68b516f4fe5855ac8908402b903903d0cc325c4884d4e6d93b72e21e20736fee91562ca3f6b145c761b7f690d22ea811d037bcb48c2a0783e5455240a7c970846a039edcfb17eb2c812ed79c8ff69be98ffc2e525802fd50df8a0c1161ce533e7d845eedb90f44e9e35a94187c1b4cde739ea4a200e052ba7a489049f92033839d3d1f08673f3178c701fb7bb5462e486d5948bb28187440bbaddac2c070b28e880dcc76cb254da1659ca7dd20f6598c875ec7b05da3d12e70390212552fa3f24737b353ea8cbc2220158a4eac8d556fa90f1d3a9775f841fd4a128b2f8b26f9014c8a427c82eaa40b30255b294c41e8a52636ed3e49a9e4acea8c639098afcebf08c2a51e8aeb1f131252a2ae7db2ce2524c8183a4c062ff689cfa9ae1e0a9c17678591c7100e100a7ceb618790a15fd1ceb6a0032cb27ac16fe78a9cada0a2bc29e8d66e55650a8fa05e067236b66af7eb3848678f89291acc265c9178922c809413720a4c35d5090937c63871e02cd8c5618db9531ba32d9f97c3ab61da2ee4a08ebb754539d1a3d3137b8304b4ce824ecad0109966ec55596bb597844f3330462e3fc55bf4bf4001d7d5bba69d6c44f5f0377e5ae260ba6514ba4a7388840b1cc954ff6676965ca74117179d8f205ddcd6118a4c27f14fa36d80c608e13bf07086e797e38b1ef319572e5acfcf0504a21a2dbbae0f02590f513192796d05c20f8733ae20cb427d0fa4ab42e20abc52dd1a37f9403875dd5bcfac969b9adf790e871568ce1ed3688ab22cc1c02976561ff8e0578c260f9d19325c05abe94a7cfee577fa88d2ac480d787daba8c45642e8fc4215233bf6373c0938786295c4ac92788877fb178e061e88b34f06fcf0d2726e50cf501cef58eb30cfe05e1b0f94e7310d0e404a4a2254c938b0e87158f676030dc3bed563ffdaee0c7c331245892f6b38981d3d1ab6fb584f858dd605c1b6e4f3e93e5a046c8485b434bb092c9d147eb2fdb5db0b3dd74d7feb0894c4caa79f26adbf6985723e2e4bafa4b259a4ac9065a138445b32faf5982dc7bfd47862686ce1e12b52d77a2db01b19a12f3d6050138f4582a88fc1053498949ec5f0b52d1130daaf5ad53edaca21a74aeb519e519adf310c66b1c7b20404990aede5b6868f6672316587746cc83419012d779a36e94958b90acf9981ac5007acea7dadf1953bdcaa4a3642826862662f829433a37652e0da42c7cc93a3914724809705ddeb63d85234e1787f3dfd4c6650900ac5b3db6c7cb9a027ca8e9322e67155e5ca6b04f7cf7d0c834024b4dcee503e7f6295fb7c7824f185e3144dbbaf24c05316fccb5c6e735ac40cb75d6adf3dbcc69329c84af700606af1130c0080144a4f581d5c65b03d4b8fa642e1bc1eff7645d9a4e572f2887ac9d7130f347564356552722786a4f27d7546f6a56a004009fbb8c7c7e7f1b0735d1edf60f631e92a384226721c05a1ac334f0884569eb14650d5b357d74a48fe7c7cafec6430dfe79080dc16f1a984b09d90e3a65e0a35dfc178ed02a9064debeededba00b6d494a91a6ddd4f11ffef7d994d42848e5b5707e3fec15cff98cc99450be393c60a4cf4653bba49dc95ef53101581b2f15226395c9e8cb6ac0b05731557b87b84b8fcca893ef2f6138b7b5c5fc163621a628003eb7809eeab03ed111bcc1b6617b4f1b5d1269000b35de134da086449bade0afea06e714a596e1385b2c51160fb4fd74fd52d4005c6dbf947f9312abb1689973157e72491d2b1ad09c7f6c7bd00739d65173c98fda1c4121c105f4abcd489f6bedfe2cb3e86353a5c3eb56eb9809141b78d8a63d4e4f723862bc1b027cccdcc0f511ebbf9d8b654ae97e5ad401069ddfe69cae3c18133c907303510f6864ad529b777141a930bdfd624cbbbb937f41724076fc7dc9993a717794de4533e1df8aa6abd71438cda5b2e5db0461ad1960b96fd85fd4291d092b5caea307251d2e9a57393800d8d0fe80d228179dda19be42ad7eb0ba97e290751558d9427c13a18360e3979b861975bde4ac4f89f714efd57039e2a94c40a31dd09b27d76b4f7ea8dffefdac85b0a19d413a65843b22b31146fabe7a411c4a63a4aa0f2727e21a4d264dbe2dc092d153bfc0c8f9770d698974a70a04778123ead5ee25cd93c953def0574293a7102b9409a1c853b5dafb20b16e82aff7de2e38051f5ccefd81818733932105c4b4ed0d4354673378a79cb34f6dd9db98df0556dee30bf55460b0835d3ebc1967d3df089fce27211878a219416c54b90f9160693b3256da70f2a2746776ac9dc625ff367801b83f536bf243a0fb210dd0f691e4e6d6845b8708160756e5cd602de5363916cc10ddf949a9e263870cfe495f91aa17f3a236b5043d3efba2b3a2c981d4002e664ccce9005346c58b5942849e0545bc17456040c5afc70b30f5c02c037c2af6d01363bdbef882e895019367cc372211afc35c9b3f14767b8cbb9e1c2e7e99e59efccec0addd9bdb59f14b6bca337216b5a847cca1f874b83b88d8c1e3f7b421d0f2e722b24604a2d17f4b7da653812425db39bfba025f4fe59a17c8a3e583e342e5cd7b4a6aa8b464e06f23a012b8d8fc06cdf1c204fad6d957ac365a0c3404748fbdd6f50de22e3a889e9a6d51a0d58248c604d70d8301137bec4394541cfcf2cea13dc61850ef725f7138c3abfa48d6144d84d4475dab1f7b7182c3e839a0479410e323824f6190312168bcfda011effcffb247f79577b671c590670be945ae08c6aa54055414b4f747854850a044657eda03440ac8dcd151c30a2565a40f48758f509076fb4eade312efdcc393c61aa8227bb810bf1ed62d4f15c539a19fe093a8a261e969be9b751f0351f210c11b529464d5c03248215410c0b9484e47c74588e2e280bf390674bbf8947c6238af896fbcdc99b5634ed96e7937c8c136827dee1fd222c37006be285cf210fda40e0990a0aa1fee5feb75e4239a4487c3700d978c09623a5b6ae8ffb6ec1eb87f9278a8ca366b10349502ef13cd20dfd7428996c744a831a9ce39cf7365dfa388ad89733603eda30034316c79a96ab3a11d993ea89e154928350b8bd94bb72d725c9e4e1b8a899fdb6c36e55bccb7c54844effbf2445445401c71b05482794f1c16218aca446986a25037702d2e5c6c975f0cc595629ca19686518e441fbfb783c250cb1c0d877fe01a3f2f70c638b500d907fca662583336e0323f88dec78647132d2ab76e7313ee90c14c3bffd9862e0c2e5e841b36b2d1f2e0c5f26bdd647aae42f74045faa77135deb4534a387d1798d400013a8ff4f3394b025ce95cbc608f120000cf9499b9b3d7fcd4e1d46b1dba1885f47dcf6e7b4213f497f9baec18c99ad17de7888cb18ede420cd6c52426689a84bb332c6f38708f0668593d258d198568cebba59e3d5ab5e3ec9ec120d44075d51bba9c4f860ea4cfb6e7e330ad7a366646690c3f6e252785937ccf10f254112abfebf47e353b6725dd829ba5e4c7dc4d9449293c9c13414973942490aa7ec9c14c62c38016f7104d85b681dd255d708cdb89929ada15a2f2b6a38b961376bc680437418ca5291952935698d4381eee732168632de3d74ea196fad635d5f8e950c26a2b6d0a8817cc80b94ce83cef1b4107c76dee3a2571110fa05582130001c6b26a27787e9d6c55ebda5d77ac091fe38e7860d39dbe209ec4efe5240ab87e3ab396e2b28a47d5db77a72f545f265a0ed5c3268e618727ed560c3cec9f34e82a4c3487e67c71f1f150950a12761926847425cb4accba57435c953010ae5006e49456afadaf1a04bec638a6c482d34df7a096a01316b039196a671a5721def7c8628da6e088080c739dd2cd1a5713673db235b80d74d7aff6cee033e9e11d5db87542e0b12d7106f191263441c1243ccbc46390ba8adfd7d0b337dd683126c3ec8d3c47c5b9295d642e24ad5cced189eb484b9568a4ded90a7ecb319f773a4f5fc6a74d0fc3011ae39215f2a715d172900b2a2de18e88a0e35cfa99a003998eab25a26af5492ef56bfdb77e43ef167fa0aaeaa1445161c884bfa7a0f0404b1a490e771e529481d70c72d4d985330170fc85ccce9d3a85ba02d7ccb9191c7248ae21c21626ad81ec08d423cdf7a98842d9ff77162703f8e369025ce01c46adf446bed24689f2e62cc7720a57fddab656f66e75744a1be824e22e92c4d904120f4ad357d67d57f7d274a221c1a4ae886df512a6b6f84815693d0e808513b0250c77338d56d5667732fd173fdfa0011ca6ead04f99310db6a91fb37f4b200b910a48ec74bf2cb65320afa927290fb10de1c7f4da7933b57ba47c9300b16161ac21c0338340a5951c8c4b71d80a9c395063053f3de52a2847f270f37a34c98c43f1abda05b9b18553edce7b0cb3916fb42422bb130f0b2e2b02e747e997b4c4119e64777c617399a18776959a12b16b3b8d9a28dc4be1ee4746be38cede1e5131b550302910200a489ea46274c1d407140e5a00df15509043eee8db3c1b332979a96aa60bce76eb3d8b068b97866ea6604b4ee5a8c17c97471814babb1c1d7f52d50a31776a11bcacab33ab023345aa49b7d301c46e861d8996afaf5ba5b9aee142483000e2803318cb39d63ad9caf65c1167f1a2400a3853145eb41f240ddf0ebb3579b6c5a245542a5ee99ed8f5b91f2e1c1a2d0dd0f8802a7cef0a2d47fb054d1cbce2dab3a5558f03001c48383439fa54aca1fa7b1697d78dfe44d5531320a753ae61c042f060a4cbe05339d23d60df7c14d456a9a261e9808beaf07b546be7bc9e7fea55e7f8c5d0f867569ae74369fc11c84e58f851f830166f1507117d981840ec90111e75bfe91d0adc9be03c24c0d819075de70aec6747851e653458c5d504c5728d6ab64f8cd51f651330da6ceb12f0540293cc98508db37a3b551be80789fbe94c8fb45094079e153331e4d8982a71b684322d023061ddb085d163a4f429d075fcd2fd9da607a3e0dc26a18825b0ac499ca9040d0270a1d84b98feb3ff0cc90a113288fcb6f30381359f0a602c93a54a94679090d2e31d11d7571ec4ec6a72586c35b8c41a34a63a11fd8c4d025a21c6a78599e92d980966044fc627186f02552037d02619811cba16010cb879da013d2c43557b3e2418838938ec49ad5833cab9dd8887154981ee0041f11effeccab93d0637ebba09c228b3bb059e1f2ef350f81d4866bdb8d99cf6af6fa8b7beb92207c71bd9559508606541c182573597406b55a1fb9d2146b6507c00e2c26137dc5c2e6f7087876d4e00fba8921bf289baeb723c190db26bb351bf4e1956205f439112fc35a15c86c0217b0983120c048885bd72461a8e59986281f187af076c5b64671a4522bbc0131789169c3b4290db78e02b9fe44c70924cdf7dfc1a3dff69872b6656883ff8176886265a5bc618acd742f4fd283eca05b2b988827619cacff89773d025e6aa68f77a707a26fb2ccc64887fde7805cc2414eb2ae9628428ca59ac58797203f450d680832bfe68a457fddd450d7713c12b80546cd71aa708930dd582281ae7a1181caa181fc7d6d68361ab15dfc9aacea1e33ad77f3b15e710f8c015a6f1cabe7d136bd6859ba3500a387aec726be9dab9ad87f210e62114de2880f0769ed99d517b957ad133cdb94a2f4726198371c0065055942d9bf5ae83b656eda7668fee88bd16b24153cabeb8e7fdddcfb8b46b1b6c65254f7d2c8103b2895a40e456fd7402d014272f3bbaa68a67c6d0cba0440b0a8c66ed28ce424d680b1a605e09c35d25e29717ac0aef4634cbdbe854031572fbebd15bd9f0c888bea2d160474f8e750b090ae95e18470f86ab7316d6a3944b4b5f0647c9a42a50b378e3dab00850f2b79400e166863e4f877a6e5f7e5d6004e8801a2fa4d194e3788174a67b3a9a3e78eb5c2584415c4a9f7295aa96ea74eef25320d710c0b25ea2564bf5568aff8619aa705935ad7b248b2ceb1ee4bc5bf1eacf8eb66991895bf4170fe486101f8d65f696d8b6b6ed7d251df594b3550a21212854b1183bf634f24a4714220a23dcb6336a883ab644346b8dfb1b2ff9c7f18c28e44a594bf947580acccc2f33942e6f16643cfae1018cd56573b875629149d3b021ac46f775101c20bf01801b0994d01a72aca2cc218e154ecbb9d848c7bcc881e45e8758bc28e6b83de60665156ac7675b6246a795518e2858164de9fa775f46089037dbe90a8131e721933216806a039dde5a19363631c0786d09e2b91a68628a0e2a6b107b5021650a3120b64385d3885dbab2168bb80a541b2791c210214641bf287160ca0246980b144824469d942e26461e5eb9f05217da4cef077f3e18a47054db8625b4b1ea8e89293d17322a4447b04354917d88d067d04079b072f78137f3e46d63366dcf48e52e3073cf1bd313f0e9d9c18824711df22a45956afb36c57e844cb80051c41be5b023a84960bc37715ba43f7064686a75f331a2b8d02ac61b4a0c2a29e34fc08b1f32f8a26d7d7a3cae8c1edc5215bc67a99d54eed57a4cd83e909425958c7e696879cf4d2befc9fceb9e9b250643f7f4331e707881d1c656e806618e2b17ed6df06936102b1166b2a224cbfb3423cea98f7308ba57b3e5993752216e2c145ca223431fb0df5ef165347cd1f1d2905a41995470f0fb040be848a7f0a40adaa71ae39d030ed150f58d98b5ab2dfc46c2faabcdbaa2a9ec433cfa6b0a36db974b51880ffc2d9effb688cac9b778a85213e27daec2e6c46a0d6a049b1ac3c3b9f86ed50021b50c7726e8658b1ff1f4671c16fe50b025ba589d10c6a6c655defa441da19f93ac258d331db039acf90e6169dbdc69006de6dbfe695c4f08b269129ab03c0cfec161e74d538311712aa4e5f173b9990f0ccfba109c1b20675baf43728d05b86242961eb81fe3d03f2262e5acc8c2eb472ab27eeaf4fd8072981170f38f1ced24aa24f8932befc38c1d15461dee0e2a224d21fd911e1b5147170d048bb0f10238e90d3df15f7544fc1b5bc0e82259caddeceff9962e773fa4f1bae63f2f7c9bddea8fef8aad64cc3264f418ecf5a369c9f8c3d15d68762ff78af05242feb6e009b44251669711255e232b6349b2c199350b844f39e334c72920ecaefedd6b9d1fb558dfe9fa0b2b5754d0b22f14242f3730690ae6a71549e04a0f333f43081caed4d845c24e362149c18f5d7d64fe3e43d2c21936204e3f1846cd972aa242f5ae7fb87125b6fbe59bd60b8a82342a63761d4ca166761669de531299f6d3091ac60ad50981dbd296a02ae0c6ecf689f6a4889174aa9d26cd9c35186aa923cdeda4be845bf5986d9a5b843b1c2e4c30d2c12582b77dcab191881d8dc3b70dc6052897837ceb3c6de8c756105435843af9ee43117fcb14c13b591703c91be02c62fe0ef4bea48358de8c5f1462139b681e9486b377983ee22b836000baba073ba2b516b1ace60fbc4497e65c571c5c590069eb9b8189d46b01e716a84f066a65205210555f7d9efc0a4ba9fe1c9597db6acb7c2217f2c87956be822542194d7d08f2e6684cdf0eb3f17f7d3f2f75e50579fae666d359ca537e4b785d531ce3f67aa69e85f0bf1db74b99f74854a5c742758abfbfc87b2ffbc274b1af017f9383834ff28ed264bbb0891e776e18b4d632e399b8028014a01d5eb2f53c0c8296db6cd67a1f2a6dec3b185888265f26e7cffdf1679c2375a0a4c897433f8f2b5a1c1dd3dcab5273fa291e880929b435743c48fe64184337fe348893903f13ef223b05c7868a5d291319f5af4c6ec6eca0daf826f86006e895d33b41eedb9763ea7173dac63cd4ca49b7f4da9fb472ae613fbac0372da55abe4dd6627560a59e4c02c5f41323c24a8fefd7a92ffcf489cfa482e41e0cdaf47732deec9582d08877edd3a448443c43ebfb4be7028a2aef33085ef9568a37909387e74447649b41309666e481ab774c828bf4868afb76601c9e23f28327da94314d641128d2ee0fa684c99d4a6bf560e1b780ee55b6522a63b01fb2bf29caef027a1ad4a59f0cb36833118b962414b888b93beafd590e42b6c23f79d0dae14433a05241d7569e91881f09fa1367403c3cd666b15daed222283c8ddd3c2adebe6d1b92b382c42e66755e1914c819b4cfc6f7e77026594b3ed3121589ed1480a6e20d43be0aa6030f67a05d5460a5e59af77b1ce9c6fbbc0b55e98685be157c78c9704a1dff3ac5cd6cc11eb0fa9952635df183fed6e8bf2e472b07d2d2a8b8bf93592e404f0cc94f1e37360fcb6433afb5c7c3ed93d28db3b6a1762fa06fd11fa4978151bdd4109acff32ffb434e3c75233b0888dcbf9145193181698a43d6d49a2963f6594f8ada2b81f7483495369743da2add7bd6d15fe2a21fe3849203edda4df4bd4f00d2b17bac7258119a47222a53a0389cf040f9521fef9531a605d3f1c27a6df33ee3e5b434bade8bd75ee4bed0cf8c5bd6d81b2db4171a8f70218f35a82813b0f46447f56b2d752e1831054b4b431ff592a0781e6d3d219e343ed178c579b17e9bff8ef6c1fb5aec1c3ced11ac21060faed731ef136f2cafe05f5ef8bdaea4cd19c0709518b3f67609e70a952f15b0fcb95958212311fe301a4cea313b001a938fedf75a1c4bea6b389d39d3ef5a96284e7c6c39a59f0e31637298e1382566743990d9f1938874d173897bb06275a7b9c0702ff413d16c0079b1a8b3c16b739d79adf99d9b1faba6c56574bc2a95ee606db980458354a686793272d30593dd04b205076986be717a3f587cdc527bfa48bbf8ed22e16a30307683c490a0d2545e46b433fc0902fb76beb02b5f853d2c41ed40add21093e21f494c8ed6eda22a065f6b3874e6f104a670cdef349a9f3d03a9ef5c3cde82bfb148db23b16902f777a54619ca6add9a1e5c914d2ffccef5ad3c40e16ae14b795600990852504ea0a23c59ec89c54c781c699d4a6d04724b389ba25f7288828e44940daba3f41b62653a28f9a820d708797cf61a8e9bb42aba071f5eccab1388fb87223fe4a149acecc6d47d44f44a529ca8d435aefb98f15f3bb5412b4b36071c6da0ac49ee692c80f74f122b676f0cc67de10dfbd1978dd4dc4fe36220e9ffd17b7a64d9a4e80edf21fb6dde2bd7c3c58fb15d55115235513cf3e4c0813e2a16e193200eecd4c1e8c59cc09801a37f6a001fc9924ba7553ef9cfcbefc8bfc2b6770a2b3b4a796f2dff4701b68cf00d29cb7e01ed23adeb9647c481b16219c05ceb216c5f10557d25d3352a60350c121f023f0d0fac524407e08a63f1c75fdcaed4a66b9ee3fe8a1c92bf822e54b6cd539ad0f36f7085045a618935246291d69a664a857086fc7063715441342309149184c9dfe23fdd36b20ee428618e03732d1518ba95cc8aadcca636cf2a306e663c251041f0d2c5596f0852e312971c6db525d95643d5b4205c6a884012a9381892d53c562fab36d6d486f20366ba689a654e3503b954e013f1ff4c48ad876b36441ed3a9d49108918fd17cf14a71189430bd056fe4f3df3b82e7b6101370edc33eaee3f244cddb58e390b36d9926a514577806c268be4574013b1a30dec591655de4d9082ae6094916ffa0139fe0a71f4059b0f3a4c58452be16438fbd66455aa92cdbd04e8f93e52cf626586868693253e727e81f0c5ac05d0170d5f2d0a07f823c6dbb4ef56f10b89ce9d7ea6f8a417691fb56f524cb4a192c25f3ec7ca6c723d0d2c66ae90b449000649e730779a7a33c5bbb5b8a7e233da95b44f3200aad880fddf8c790a6ce0b871ef8c702c81a243993ad2b11cb96d0de1c2322681a313b9f546b44eac2fac9ef8e7a47cc2624057c0b84a45b33f695ca30d1364fa34f838f3d24186859afefcc9cb4a853204c46bdb23d78923f615f53904d6693e67b1930bb5dee54c1bedf95a39362ab626bbe68d02266ab6ef3ce4ac8b4c2ad7ffad6604c567a25c08b8b8e854378f088816b1f5ce60a3a1b77f044658be12346f758e37af26776452f536cb55645504e7060b644f52fff5b458c8a2209a9927612ae4aa166e2c1b7c3bfe6ca929460fc326397ac02805c1b09ea75d56a1612fad226671a4f51554f4d4ba03b5141f92fe0546f2513666acd8b61b53b51ae3d91b3e63a891bfe2c5e689208f81e4aa90a802457ccc8dbacaca427a924a34289de2d82cbfbf8e810b88f08c522d58526763a9127489d77f03ecda6602a1a41ed174e03fac72ee5c0f77348ef7d92e93050da5fb707c97d2d3299473cfea53ab019e5a829f69a3a8a30ee9d8c577aae6f65da590721223e98bd5c6e797fb049dfe13aeef850d162404d5951905a86a5da60888ec04854841d5c128e274e2f410db1fe0df39268f795737b8eee7baaa6a25a2deee8901232b27ecbd8417d68bd7e6e08241aa560f5269353704e88a68fe8d082339829e0a2cfb968deea9eafc45950377693a3f16e00cd4ec7e5b0cd3d96f60a67003baf8e1cf3c62df3604b2c0db4bc6ef2316cd756a05c12171a2beec3b4ec3244d85710ee1fb89a59360cae50dc8083a6d6aa1a1fcccc6c0b276b99b0ab87bb84ccc683a514132580a6ed747a205f46386fc34ba4e25c2b4507a1237c1e3cc19bf57618b835ea5b698e8230165feb5bc97d5f5ab72eb3eaa91e294f9b1fa80e51e8dba0a460d19c83412d81d707dbed60d2b58d1b173e40d3a9ddec7cf16e340e3b505ea0018cd750500114857fcfcfb55cc526988bd9006f7e92f5dd94478a78b18b0e34d8a277e71c1bcae2c0268755a0eba8093d7fa13671d2a8a4e7c4cfc2fe22f7748e0718fc1d9fbb37329395c97ee887ce759c70825586deba826144752abbce94afa7b748aebb3e30f8f15102103f8185d77a59be95103aa13562f2b2277917227613ca7c53916e2ae5c76b9f4234125f2a20c9c6da58de46fc0033f51e723e7bee663a13473b395be2d26ed20f2599dda2a67a982f70e9fdaaf4b2be7265c473382218110c35a5482e8103237ee3950af171414cdafa2c9c0258fcb8f7147b868e8045c9b6e948fa03cfcc23730d3b560dc41440d93daaa6cc8cc443d6039527fa8eb2c59b0c0a06be65ddf511ce37df08176159341f00c566bee6d1ade36d85bf604bcc2ed3287bc5ac013b48b11d5b92bb733cc9813893f9df45455c816c080c212159e40abcb78dd21c63dc15a784bb178a37f619cf85a6a8105ed35bec5ed3e08406ba59529b485767bb21b7f992b7cf51075a40227377116d2f2af781647f9d785888b683d259c05bfbbeba7b7526a9332b46ee5541b09939d29805911a8de45bf5e05e51167b4f12c34bd04adac595460a597ffb51fb6fdd747afb7d9dc7d646f322833836e9ad784fdfba620477c5257cba0086d138eef26ca4e9d47abb9e1a043bd5ba344e0d56ea076c1ee0d4343b5072273d2fc27facd21f2cf4a625332bc2701fdc6983acce26660c5b339112b4c1bf52564d3802b7a247988b1d685b55487979fb1528ae4f18a07e4f4e808524ab658a091fdc4901a0830a6dc55f1f8a674ff0cf0688b24b727d121d13bda5c39eca4fed8ea04053288d109264604ff59e22905b6e2a0a9032a30fbe5684a8cf139d36a4c0f20f23de793df0ef22ec47332470be284180e28096f3f38d37c4e24cecbcbcca7e28ae9dc59d69cb7efc0254a3bfc786e182e33a22dbfa4441146e6eb98114b21b58f7f1e86ece1202e0535f7c06b2fb99fb3072a4a4914bbef1f186e287be7dfcf0cb496357cda0d6beb0710013f9c0177b296a038167f13bf7456836356d70cd6e961139f284871290d596b7f5e4bb39af4f12a93d8d605c8b4d24dc90d52450d64ebfa6c76b4ce5a2660b7f14ab27b7b1620d76ea084b7477b0910d47b0cbdf1435a442e5272869cecf364cbba56ebd6873cbb01efece87b122e7962d9dcab08c75cdb15d0379d2427c4d92e562cc583b0c27408223e8c662ace6095e9efcd08968a54d87f944c2b9165e2c9acc154b92088d7ac2efff2f47b187d8279c5b40e3333e145b1eb3af415e61525433a636f8d4aea5a149052b0e3498cd878b9bae0374cfa2e1c0e9b0587a703db650908295ffa6792fc8eea8bd0eccb24ab79c08df10085a60bef8d85fd24ee4e3b1821e4ea7a720ebf009bd97f188a45ae773061790a9ef5db43b898650c39439534ac33db874519411e61d6ca3783efb6b35d83d472b40e90e666780d59a4d112edc55f34d61e7e3a3f1301285990ccf6d5e34cd8f8de4ea7169e7fd7337ac2de6575ddd159b843fba71a916da75c1e73a5ca2fb745b55f7c9b82e7e3f5704e53db255e09711b34e7cc2787182c10abb3df353167debbe9dc148ffe477eb7910dce65ac33c82470e5acd524c2c3a07920794403a90a12decf02160e084d17e6c6457c5e59024006a7bdcd950339d87002f1eba866e7467f5e2721a4cf826b26291f0252c1f87f90219541528054748d0b18cbc5d8b89d36c3526c984d6c686e630c4dec0f486335eab43d81bb400fd762a7fd4041f46cd4577e4fc04d096ef8a48e998112090036fe6edbe09a8e7f5d3c5899a3514bba018d7f780aca8a10d9dd2a0fa7425532584a4474553681de9928dbacc603757093b023cc497943dd38053384d8880fb37c78d1a31cdc65780ad4870314a3085e58c2cb011408f583856675111a5583b456a1d448174ec75e76fb71f7bf1f080c8342af1731fe69a939edadd859f973e94a1856fea44f034488ec4aa0ab3f35d79a82a4c26c7048edc25abe79629a6f4d6c419fdec624a4cc05d6c02aaff75c8e45ae9e04a0cafeabc32cb8ef216f0130aa4ac2993c25c5a9e514d949f5d7904686e45ef52c7feb0d08a00d3040fd0a91290da1ff88869e7483cce6a0dc3289bfbddbb0fb65ee66e21a99ce2b737d0864bb4fa0333c17a1caa16eb1d451ab450e9c05e65499a625a8de9471edb6409a8422fa08f029a10c07d9abd27fa5dcbf34b19b8661794cc8e97543469a71c983af309a6299cf12b512de346c49f15580a1699f69ad04923119c164012227684cad10319bd4ee42c1028300b2e8fedbb44e1cca20f4f03a8a54053421a47e2cff9950dc31ec7363894fe803f6524d19191f5dbe37ae438c0aa38d9cfc5a02e5ca379cfb69a0e6e49c47a2e662bdbb566f55f6f8b34a8ea105f2669f415fd02250897396f88af882bed71d4a06066e600ac4fb55f33043e1d0c186a25325b1e6d7866307cb615c5bab5e985c4a313ea8e7f896a14b4bb242e4ccb8103d84fb1aca4f232a12bfc74ca30422c3186f2658dd1a27d71d3959e3d6aa1eca77d98d7de7ff35c4dd906d2418ab00954f52e5ca5b0d6175380f1c0e4435420c14d16bb86fe7a82be08b23ab1c96236089a2fb46eb1b35bf9e65810bd35f87b4c7c52e6b65e168f5caa455e9bb0e2621678a0542dc4bb47e285faf5e1a6d532301f43cd326850589f36043752e9fcb0c131a0d0c049eb7487167551da12e4922ffe5d6ef45f4d17053a8205d20af684c51527f43324991e5d1a828dc2dfa55b53f4bcfa2cb60453cd442534b07e3b77b1ef6d4141111d334f45a6c869fc62ad62e866137051bf141e2c328f0524899b84ec69423b9e795d7ef09e38f4c21e02e5ed2e689e2ab6505ecd875de0918aca1216916985352fdc37525d7c6272f459f5930cf7d846e4a52ab11af48f0b27be5c6ecf6c241442ee7d44a390a7bbab38f3c1a94a45a39556ecf8af587a88a72f3d906ddcf7dbf729972688cb223898a3e2fd0783951b557ce03000cf2a21b258ce03878d83b095512404ff227bf546b39652ff6d5c9c22105c5d129ac60f4f1a9b449098cd6690fe28593fa29d307ab93b1d9cf8b0fa088470d6b87874768b90555dbb97ea12954020e811038d9898b28522a1321b88d154090d9c9090146615252f1b33e315e9f98baa954d2bea9ba6eb654a084b92281b8f01c8db41dc7fb3f062cb2a544a99edc4c9a24b4c18358e6e31daaedddf415af5a9dd5932ab99c094c89fd90a5bfa6d3d881a3694aed9980918de453f34b528879f90f7741762a2cb85a66f119b7d92fc1da81dbfe974998ee9877a18b5e5312983e95898a6a1ac762e9196e5fd6e280b2708acad580f4347876241a10b10c71c820fc00855f0f1c70c8dbcf759c37660038cf6029e9fc52e0e3340b0a490033c0c3c0c3c0c3c0c3c8cfeffd9ff0decb75f2924193bbd466c4949997619e149f10f6b5b6bb6dc7e877d0720e102490e860e2c0e26612774111122e020c4b7f7ff759ad35428191111118105d87810a8c0710c22ebf82769c53804c1001c8118000e401cdfaf92f4f1de34ce67660e38fef0c6248a65cdf73f7bfaa1e43aae9d72e6f6d70170f4a1fd7c4ba225cc8783c5bff0ed0a8e3d78216f3437c514c4e27ab8fc2adcb749313bc9e6a1f7cb33a1d9d253d87848babd8d90aee0b803271be7c1610793fcf69f9e337b22222b20a38dfe0e88e0a8435553f923c462f2504f80830ef578fa46dec56a13c4318724e13d2dbd6cdc80430e69caea79329a6dfd098e38a81734a8b6e518ab2c62c001876c6d7fbe5dd642f410e07883e99e2f5c894d696cf8c0036bb0e3700361a126b69e498c8d0901471b9630374f633d27159782830d49f7166bf3c939c56334c0b186727aa78ad8249ed9a806dcbd6228c9d88888c89b51c6480f76acf183cfc10e34d8d881230d0995d3a4ce3e68b0aa3e4ebad89c212f4f31a776972c7fe130035e9d4de77265342c831567562daf9539da23222247863b65089538df3db131a8e9c474ba7f5ee1ce1111112386e2530a6bdf6913d14744444a18e80bb21d36a52c5b60b0352b7ae5693a792f09e0f8021a5392ca24d70b49c5ecbcee6725291b1111d12e244dbe45bfe58e737b444424b990874b753231e77fdc022352ee6659e2c54e0be7b73bd1b24f96d0df888888652133296eacb8603169b0608e3957bfc5f73ce50a6f2513ef8345cbbbda888848a5d186e3b04272c4cd46cf5261d44a630838aa6046ed0fee31e87fdaa8d0a52bdb3c7aa7979338a6b07592378d1636279f5e80430a7bb4a6640ccdadd7e9004714947a13eb2cf9f9e46a060e28185bbb6346f988d78907703ca1fc0a563975ba9cb1d1008713da2487ebcd20830c34d8c0d184744dbcd8eccad130c10f7030a10ac92495fc25ccdb886309867aaf3c15330e2514fc5ecbbb34c79d7f871a68ec50e3d938a30c0ee048c2d93b27bcc52e7e0641800309871332455bbf98ab0dc71112dcbe762fc74c93af08388c50fc747209a25e5e49d0a31894ffab4b678d1cdb3d88e1318cb3bf95a78ea1d2a43c8461faa82b1a63ceb7f1d7f00806ede39b362b4ee8ee7800c35cf29724d8b8b4654b1ae70c8f5fa8a37672d686d4d4db060e22e0e18be63f89b596b433e91af0e8857f52a8758bd835317b76e42029e38cf4e04512aa9e73c9e1eaf21d1ebbb8a2af26f3788249b1c04317d9a5ae6ba87c821e78e402fd0f0b4fbdd6f71b1678e022613f45d3749a2431adb7b0051b6b9461c60d8f5ab4ee26999763500f71103c68b17cbefbd6a4af97b2353c66415bb833533fd5987e0f599c537d12d3cf583bd06063c78fc0231699bcfa35be31d3b5f68045414c5ad78f0e8f155f414bc931f44bb6e4ebaed1461a3b4ae0e18a64134c4e395c7e7a6794316201f71d78b4822ea1bc64ca3e5ce85961d2f371932c865a6b7ef039d89146191eab48f83629652f974a25e69cc60ee75743c44315a8bd9a7c5c93c23ec6231558b6d6beb96ec68ca2c236b7e94a72ce9231748ac284facad296697353f030051935250d91777894c27892c7159fca5cc927c527dfebe3259c60f2e9310a663d49a2f4c6dcfe7b8942d5df494d1b3e866dc8056cb481c60fb80444f0084572eeb0155d73678983c23639efb99ca576c53d3e9185dd78e6b857394a2322221e9e60a4fe62e6784744443c3a51f4dd770fa3f972d53ee0844912ecc3654e5e9f420c018f4da022fd61da9247454f103c34c16488bfd6f0dbd87026cc9ac1c43fd9cf84a930416a55673a0f5e26469730dbddd63e9e8dbf6f89a4c992843a39afc439fca8e4587aeb5c52e2ef6892a09d4dece03189dd3e660e1b6db2894ba2fd12fa436927124535f9b2d23ebb5bec0189e5925fb6aa3597da3c1e616ecf62f2265689bf96e1e188524bfa75aa3e92028f4618229d33c2371e8c3825af34e3d17d49f82c2269bec4f1cdd9113c14b1a38c3434c001f248046fd25765bc644a537a20625789af247892cffc5c63061e8738baacc714a5727d4d68e06188644b5bb7653933b5152229dddda58cda5779f320046dff27d3e1ce356cd448230dfe80c720bede5e53edec6f39f210842567af2831693029651e81b8c4b8255fc921f2251e80504cc37a982e530bfb1fae24bb7b25f93cfcc0a67875efe85cf9ab3e24649e33c992c54dd878f0c1e0397418f97c729aedb187c3274d1d913db9dad20329a3f7ba512d3fdd103cf25094b01aa72a57aae91e78a82af5b85b8cc71dda8f1737bae6610733a3c482494b6d9c74a0061a07034fc619ac82c35f02323cea9009aad26ab66e921b1dcae5f9a4d43095b91707b82002246800008ee03187542453ea54b27228dc86cd96c7b763ea71e877e724d9d18e1fc3a1182c4a4c258d9931fc866f3f4495e453b391ba615193d4f4ed6ac31dcee41c4bee29b46cd824cd25ff091a9d4a58e0b18693c99b45ca4f125d0f359cf3d509d655073cd270da16db6d4d8d661d34a0a1fda72e66ef7c89c7192a35912f8f4d051e66c03ced477f1d097315151e65702f9e564ed9f63d3dc86092c5a6c4aabd64e2dc020ba0c7184c8f65625055fb9c5a0cace8755ae7444e9e84c1c98b576baa3abe261e60c836de85858af359e12f186ab1aaabb3fa87d0c30b5fc9a964a59c2c67f2e842e7f3fbf1a452e7f1b970872ac1a4134fb6d057d4983a255e11b216ca9dacc4644bd75aa25938349c9862ca9cd67958309cdcdd15b87472fc95377973daace086927ef3c49f13f22a70596652d45092209fa1821b275a4fbaec4f29650a66a4f57975f25c9e92c236d6fb9d3d1485f56d55ca2ce60105738d8da69363096f7a3ca10f699a9e9abb52f86ef07082f973accbf93a8967e4d18463340f5ad24968c5b80713b8eca26936c78c782c41d3ce35a539ac044b968c894a55d5968f814712fe2813d99faaa2fc4442269c303d5b25afc4eb7184631c39c974b92c63e86104f2a3057b5d2fb54e520cf34b892e351b31b4f8a42eb1b177f6338c3aabe446a37c4ac22f8c33dd83e5646d211a0f4663e9245993aa266b0b30b6cbadb27796eac4e0066efcc24ea9fcf2d2653ab37ca1649c524d53339a1711dce845e25a7eaec9e04163c78bc7b39454b77ea97bda05939a49d00d75bad3ea42ff14f2a753c60e36d668438d1d6b94a13772415fc91aa72bcd694a19111121e38c3276b8e0062ed8edd05bd5de2ddeb7df2c5a392a83e5862d8e259f4755e9cf4a626ed42279c384befa2939588e0d343870851bb4a0ee37c9af19638cd9e0c62c1299ca49df53e757db504344e4013764519813af143ffc748c62e127318589568185f63b16f386ff13e6e38108b00004375ea18efb9a6bd6865bf2862bf093327fa7aa6fb462f53ad12e935efb65c5063758b196fdcc6728393ec83756a1d5684cb127c7d6e4a802d93e21bf634e2a4c292c4ad884985a0e2a9e4d97d66489cf78f2a7389a1c16f5b69be2fbcbd5931a375bbd14c5dfb43d5a297a96135218337b9c5429b679a747f17c8aeda731c6b8f28a42d50de597848a256f86821b9344734ea737f10345c16b639bbc25e973f7895b37fab496247a2ecd13a60c59a2a68f49d92c9d486b4cb2673ac6f31427ea9ced15c43bd8c6b5096523356b8e89073734919a6cb4589f9389cdfd2ec5974b48fe9830b749612e5dc943fa4b64ffdeda1ff6396bb74427daa1396e7ee6f54ab819defcb2e794d0b54b36f113937c914fe29c9328651b1757d3441287b9fe712fe9af539248b49e62981cf242e2ac9c43ae895395da3ea23631f343661d916ccae79f526f1a691bd1c696660ab3903061c49b8267ba9b5829a71771c5d793a7236cd7544550f627263993586e9a2682bdf2c8e0b73e15534494afa38fa61462e2cb4328951d32b67b3ebfd210658f7a8e2f96b5642c4472f94b2c5946423899de162ddbb37a0651a7cef827fa6dccab20d408c9a84e5e20d0b68cc9e37280404fdee05ed63a7edd1f50abf774728c316b89f9c1bc7592ec17cc35c3d687de62a698a267f880868c299e7879835ccc1e8cb12ec13e45cc52460fa5cafc6133a5d9514b1ef4ad8e52d9bf3e3e8507acace6e4249498efd61d0e5b1ed7e3a76dd2941d9a12fb42f7344c4955074ddc4a39951c3a1467a6f7fe3ac9ffcfc1fe3ec9d2b5f9bc2d877fdc5276cc491293701c88d1a8b06e121c8cfe24e798b36546a23710e0861bf69ce56d42756eb4c1a8b61f5f35656637186eb0813c4d37b9e209067270630dc50af151c622d45334821b6ac82fdacd458d2a414e6ea4a19c127da93e6ac70dde404363a7693d263c4fc76e9c01dfc9bef3f9cc79be11dc30c3d9b2ef6db9eeefbb5106a58491b794151aef57c10d3278297fa455afdc9d74630c37c4c0869f98ab392515ae30607b3157bdfd244c1c0cdf76de46cb125592f9421b2af709f6e15d49f886178c3f9ba359ee4c4adf85935cab919ab265ebe6c29751da7cab526eb78572f419cbea280f926a614dd1bc5cdbcc429129c4b649192c503532d55231a7da941b5768acbe444baf8e888880e08615348f279b9394a4981b5530ba4c6b8ea97d3dfe1b54503f896629ede25eaea7704c177d7be71b5220534aa5f2ffe7dfca8d28d8abde397e32aeeddcc60d28dc3963ac3c4b4910bb6f3ce1754fba29cbb55c36b9c10d27b8df416dd32d379a70a645748c7982e9f72f5801066e30c17c558f216328dd32f9c28d25b461634c49f88a12aed849f536534c2b4912f2a45d995aa652531809cbc7c7357713b4ac72e308efac479f184f2f56bc0c378c606a6c19dbb708508cd6fa6cea2c338e49420cc74cc3fbbc7fbc2919065e1efbffea95176b616876d92a3cc6b839b9c148d61c7fcc3ee6382e02c37a9323f38fccec057fd1c6f57cb8daefed8c2feee8d0d984bf17e5b8aea60e6772de8b176b25d110ddfcb79f76717ebcf59f50526cb8e882b613a9330b19ade75c305a627c0bbaddd9655c1cea694289d67d8c8900b7a8ae43548e6b1a6b4e6cd1948999dedfe774be165a49e266938249005a5475b9bf21769da4d82c2ec1c53a6b4c7e11f11c08200bb7358666fe87cc529e8100b1b863e3ba6e3c9690f11808008b73b5ada6cc2f6ec9849a50f5088684e10b19d92609196f62d404216048ceec16a9739d4b2c77847cc1ee33d13c96c7b5ac1ce285fb6c4c83c4a86e6642bad09c9c5a4fb470c18c4ae27fea7ff0e96c21f94f63679550cd5f6ba1bfccf0593b75dde808196dece03be081902c604113454c3e985cc815ac50c769fcf4bc27965c125205f7cec44ee2a4a54b970742196b8820840a47c87df6db14b5c4c741c814f0b0bbbd3d59d3440baf88a08d1029182be7db9bd88444e158513184fce7fcc9a1a0c961a3d2f7214fd8c36f5a784a9b6cc310270c20a40959b68f5478cd94770d6142493ae1cad72d4bc02ab59925b93d23095182b59726837e92b22e0949429257bc09a525d36e32831024f879ca5f93c925074b10428e90b5078fafbe8718a132b92aa4da9ba8615103a418c9addf79f3728afd1431b2abd04d3d5f52640f328cd293f54bbc5a87fc2b0011c6fda7c1ae328f571e83715932ed31b9038c2cf766c6f1f3f3131e1111f901c82f3aeda4f9e4a87d2f19105f105242ac6428a15f2b905e64c2846e5d8a01e1c53e27bd86b3ac4944db0526e565dc76af8b4bc6cc45d62e5b84b92035688c4e79729860164070f1c78e557ecd232266741b28d891461a1c01119132d2d000abd186062001728be40c344c6000105b34372b32b6266d0a662d0ef2a14c4df6a05615082dba9c42584589677146ef4c620893548f9185719e7e39e6c4e6ccef60e3c9008905aa9d7be7972611170b80c0c2c8cc1e742d905728b62785922e6f5a515d6187fd5b8c9283b462cbbb7f9743664521e6721b2d055945191e65fab275b4554054b107894c5717f7d1c44644440cdbd891860eca1011d1411b67500024159ae8657b4c1f546816fa346d4a7387ed14cdae858494589f61620a4c4a63625a496292d094e24df26a0e25c925babf48002185004046e1032f634701404441aa778ed1ee5bf4240109857edf75a2a529041050181fc3f35c09974d6e904f18f38e87fd8f716b4c3cc1c7cb27879b58329604e9c41adb26787c740d104e901fa3e4f8f1ad9360d9c4a6af319514fe3544d2c472172bbd844fed69cd84b5e13beb09db1937c384ed5b72958f5fcaa5402e919c72904ed9e1cd24714b24afa6d5ab091e48254c1f2bf4c7145b9e251650010825d038679491009049e09fd2dba17dcce30744124f479538bedff136fc37008944279bc9edf91d08243ea9ddd00b329e49540b208f383687dd18ecdf52521df1896a9db98413a4116749193fad3379fa140823749fd1fbe82f621f0d13de5df443c528e260e59b5157d372bc89e04c4a3be79704118eed25f1e69314973787302e7aea6472a570526f08333655c6e0ebe11f811462f14c4d166276ba349202214419a3bea40e99b3c62cc820b8d0a871c30c228836f57bed4b1e8863673231ea070471b25ec6649fdcadfbc35aa5e93d778eb9a40bc40f6f5592fea44a5b267a1f56cd1cd7b1242fc406840f864fae5fcc6727cebf07e6fcf2e8091b7355ac06207a305a73b35366c9bd81e4a15cadeee061ac3585c900c183394c3c95bd8d76a5de21db8a6113de2325556800628763bdc73c79a6f199b301a40e6551133ddb024207af4d4e1ba1b9dc52e50b20733086ef2826195f737e7240ae3a57ded90713b30c80c441bb1c8b8e7d2add1d081cd8aa8cd249cabee1579037acfd7ab2d5c765b28e1040dc00d206bf52e4dff6c6e756206cf8cf62b64a6ef96ed7a07fd272cb96f1d24d0051c3258eb7ce599ba564e100240db7a6cb55e237d76682a0a17831219269346f25390375797b83097bfb11115963052066e0f3e8668ed0ab4bfb8294a113f3d64ad8e9f26e41c8b0849f8bdbbe9d76f0bc0a40c67056584e594becb1bbbb8d1e808881f74ce3e9f335c886d838e379f0360009c39ff34d8b69d895ad17040c94aac7d430f1241fe40b7ee57e7669e505d38078a10d26beddc75bfb1c1d1111111149638d358074a1928f6e1b3487b6d8e1825bd1e9c4e2bc856392caa5175937116b2131e78d6daed7add9cd4262ae5d0a2e2a164ed2f855c8e8f9621eaf4044658ce9068f97522056205e6d3a061fa40ae8a76eb8ee9c7d420642854bb32541da24c9352d9029609d82cc99308248c1b0c13ec4ac6cd6561f240a798ecdda96d9be2050f00437f97813b38a3b0e204f384e63984c8b93f5318813ae8fa9ad494d1c8034c14dde11a625a55f0ea301c284ff53a9efaa27491c6f0975f48bead11c7583054409c9f177b164bba8b1461210adaef49596d94f1209c7da18bde7842e39ef62ce0039021983654cd5ad0e53820310232076e28c7a5ec8ace9ec58e3079cc60e34467a202282010ce420e110e8e1a318253944b8a5855aefce083e88e18ee670eb9dee6ede61b0275f4749e231ce5cc258763d677e12274a960b1fc1288bc5ca59155f4fcc0106da957952d692242c22ac10fce2cc1683a6e8a6a59c848c0f5fec556f12d729b5ce9d848f5edcbee697de75d5957ec2072fbecb98d3628a5bed9510a4f1b18bcd227e533a39a46d585c70810f5d98664fcedc51061fb9384e566338215dc30c1fb8e0327a3bc6b43aaffcc2c72dd6c0f1618b5a3c1fcdb64cb72aca490bdcfaf435437c0abbcca2d2ac560fe7cb221674464713ae3cb9d508830f58102d361ea769e3f97e85a6367663b2777758c8f870452bf2bc8da9a1210b2ce03fb20687200d1fac30755f353b74142b29aba84cec2d29c5db8668c3f0a18a54a0420f5fd9bd3a3909f1b5e005af061a69a4c16af44044a48c34d802ff710af792a04143ad7db21c8d7386089232ce601424659cc16988885840051fa63042dc456ff3769fa514547c93c4564b153de30f5224a36d427affc4ee3f8a24495536cff325ed551474fe5c962dcba3e74d28f4248592639cf2ceb9fa00459ecf3b2ce4bbfe1f9f38e99555f8b8cc18db911758a0021f9e48f20f2fb71efee884e97b4f0aebffe0d9163c1b8c840f4e787696d7f7998287ca8888c8193e36f1a109908f4cf81da69ee4baacce972d7c60a2d66acfe0b94edfa45ce29c662b2fafcec92a7d58828d1cf99cfb732ad160e1a31246cf29ece5c6af587ee48312854e77b94ddcf3e8b1491c7c5f93984e497011e9999dc18f4874d166bbe4932ca46d20f1f656477d5c13bac33b767c3c62df590d25bda4e7dc7e38e2dff72ccfe48f7020022cb0c01a7e461b686c20081f8d20638c1a56975cc207232e3fcb9a29dd0af241c1c7223649fcedf90ab1a1c6f34011bcece7cc1ea33af84844d28da65cb24d239e06ab41868808083e10911467c63f5346a2d643983cac34e8fc96753e0c619dc7f5d0763f0aa1aae7932f68b25b1f8ff04108dc3f5998b6eff8bdf918c487200c9ef226fcfe0844d5ee17671a752331208c212b2d85a5fd5079fef883265e12b3fa3d9b66c9871f2af9e327938387dfbe3ffa50caadbf7211fae14d1f7cf0a1f8569ab2a5d2bee0d90335194e8a9517eec4920f3dd4c1a492c4f46bd6a37de421ddddf8396dcda574f040f55a6df6d03299e43b6052d811bbf994935e123eecc0062fe0a30e66d7e8b7deff830ec674abb8e1e239f09d972943a4c6871cd46cd933ca471c1caf133e54b424bf561f70a8472d87565523222234f87843417394bccc58131f6e502f6c55dc0da31ba63624dc49c1bd4a7cf03bc868a3df777c1a9cacc12322226af048f2c1863358cef573938f35149945eefa24ddcaa681861a4e830f357ca4c110d7c9e2a2495a954fce68430d36caf840833e276793e4f129cdb98f33786921ecce4a4e631a092210020b18e1c30ce588bbe690b84b4df251862b98ebbbfaa47446c9608971634f89a95263ec630cecfbdae58da5b8f2c5d0fdc77193aa2e45f461b8726813e5524e4b5102862f736a4bd5f617160f5db1f42dfb82ec057c32b3252fdb852ee6cd56ba51b56e2ed4c96a4cca5b1567d52d389d7b3dbf761f5a58353c3b62f3f676f491852e8f5ad9c7ce56221612cc3fe42429a4895ee12ef9331bcf96df4e464444cc0a49e26f4ab7267b96a9021fade3f5a9faa082ad1a355ab5475b073fa6f0f5a6147bd584ef241f527083d669acccbc6ca3d0c5f78a1add34b950d004abb0f517f2a418332222924f283f5a367786c457ecc3096e65d037a1b624bff3a309ae86ba575f9c281f13fe92329ee096d69baf111111b3842a4dc7fb72f72427cd3d58e34309af993c26892173c7f48e8888541adc83353e92e069f6addb5c9d28d9345af08104a235547785ad4f19fa38c2d926d7a40923ada37f18c1dbacae51a72946f619c5c7ef2be55d701003013886f18143189f14ce627810f7e8e7c1118c4f5a55c35d7ba5792322221810010e601832976855ee6e412cbf48924e88cf29e155c31c111129e30b35fba493644e889d4c2f5ecf6d62e59e123d674644449617a5349332fcb28939dc45279d244fdbfb469dba3055984d52d11d37bf232222980b2b27cb766527a476ce8888c8e1a2fdafdcfece2d8ecc61f115365735b630c69ca2a996520be7c43873b94c34a1a2451a7b2ec9392ab340c467535cd61cd1caa2ecc964afbc37dee11a1111d158501a2d4f758eea4bc2e2346126cab5c9879233222282afb8041b51f55ce155afb68d9a7c616b45a9f3d9aa685f648615afde49739bb673b41a111129ab38d6c4ef0e972ad460d2a9e598562caa09e0484525a5befcc69d9cbb45c5f67da9639ab4b37a8adff4f3723b3c56ca8d8888a4294ab269f64d5a25aaff88880896e2554bd27e45a4941c29a8b3f6da13ba2dc746614a5eef33274614a4ec579bc6c578094559a284e7ac46d668230d502499c7b10b6ad1c1b321821d383e41f67ec8991f0048c0e18936fe5bacbd85578f910147279a5719f7d87aef5e7170224928c93726eff0695733706c824da992fff9c3a1892435cbe143f74c9cbaa54ed7764cb0d1333749318bbab797a8e4ab3039e57fba8e259ade9cbf7d53c557b312788a266f1933417c438963f034319df29509e124ce24c7f8959f95c421a641376cdfb95b7044e27939cd51ca2434de3820718e4a27bd9f7975ea8f48e8fc93afe13a428d73425d8c398db0b566ad2c669821021c8ce08412436859a8041c8be0c492ac9394e453298f43118f5a8e5126cf5e08712482bc585fe2bc8f8f8703115a5949d9c4cdc17188a2e5f68e1e6a1e72e5010e43d41f93d646647a4d265d08f3a29fd814ac86fac959a79b30708dc8dbb38e0c8d0523d9d8231fc4c3e535c03867ab925390932cad7fe12579bac7bfcd3ee90ba427467c7743bb5a7a61903ef165eac28b64cba8769373317bb30bab4bec3bed147f4b5c177daf9c45da25175fcab9ade2e94957175c30d19d2d6d52abb5b9050e1db6c8f35c324fe5bd9b72c40355d0510b3546c498e64d8bd652b63c299d856fea9bf4950526dec152ce5225cf74c4a26ce7266559f7f154a20316bd8576124fa2a521d2f10ae6cec4906fb2ae28759e9c7e325bee1f5be15477dd9f14d49334b2627773fb9dcf2fdd9b559c7dec72ac8bbe66a50a7fd5448d5fae6ec12415a79236ab496a57f81515e63c319e289e3c0519e7f94355a4945431c56bbe49f012af5294772adf653e8d71bb111da46053e3a44e276c947e1489b231aff173d4c6d2218ace42c4662e8bbb4aa1b04257aad14fb17a671da0d0a37979c64d62c13f9ff053edb658da0e62bf274ad1f56251369ee7ef44319af1c79234272ab1b4a2df784a553661ec9fcb730f5667a92692c493c2478725fd98c9041faadd667a352f5e3a30414931e6897a720aae5e42978b27cc9da4c31205d051095a8325b3aed5e01ae7400d1da840db18820e4a5cda3a917597499449acb8e9fb7c1d92b004bb30cb9ad6c00409a8000b66f00356430dd61109542de7e470f14f6fe9808415b4d535e588c9e8d578e71f311d8ff862f55f46caa2c91e1d8e503ac5646f8ea9d18c8e46301a32a9c999e9600401742c4219efd7e92c393da965d0a10893dce973a2fa68690a0d3a12a1a47892c4c998c34dc60e3a10b14ed6e8955ad07857c72134b3144526e34a49294324fa7ba874b12b441bd2f36c9938219a5bdf13eb73f54b3d88474af2fc7b21e6b342c38ce7c1191f011d82f0a494640df7e7d13311604047206ead5bed2bd58fbd01c4c92493cdebb7996ed7f187ab6225d1d2973b9e0765aca1461b1860810e3f9cde7397a66f7aabdd873bfbfe4dda5c0d35f181578d702d93936c8f3af6c08cea7eba274bfb371274e8a114219f1923a4635a79c00331a1fa69d265669e8c8888dc81d18d9df5fc296c30f0061d76e8afb36fcd3b2597b40ea6789b19fd0413df92d0e1de308b49cc534954cb1c4cf9a3b4cabb84155d871ca824570a9ec4cff43eeb88432679cacb14664f3746071c3851c2e54fd00fd15bc71bf0fdb0982ed1955376c31a3ada40c79882b87492d80dea60c3f36936b11bdaa4b074ac2131bae51353861acbb10e351cbfa369b87016538cd350568999ca0e75a0c1d48fcb9ff933f3ee8888c80a2c6006abe18121e83803af51b7e67e628677eca5524d7e13eb2d0393394feef092bacfd34186c43496a552e4ca4ed33106eadee379885e0c554ae66f97d32922a2230c27316d8effd9ed1fea00831de5df3cd8c6fc11e9f8c2ba135376b935d6cc5eb05d224eda2c15d346038aa0a30ba7f9c6caf3f216dec3800e2ea4494c728d47cbb8941aac861a3bce40630b5ac80216ae60053bd579ed7f3e6b93a3a30a54684e5c3fb355c714a41085276a4db3abb6eec4d5018527f01b4c74c9542dd963a0c309b6a6ebf90bd7d59bb30213a87102337434a1e493fd31ce857f5347dad0c1046c553e6adc72264dd1b184b3c7ca6a2959de2b71251c672a6dd6bb2b39cd49b836453fa7b8dc299d3a90b049626789aea7396ca3e308a4c929ad84cb9984ede830825697be9226abdc7ac548d276cba59529556e88d1bcb769cefd94495edb884000969063187aa8a70ef6d93196b83072cd31972b84de967c3094cab6aa526e172d4606398091f4a15ddec3fc5d98fcc26dfbb0de3a662d5e0872f822794fe8923d31397a5177b070d9a3ec9fd8ff7fe00c34ca58a30d33923344908317d95c7fee10628e5de897e49ed5b93c268bbab8a3f4ed83c9315af873e4c29c3241a32da58beae0c26449b2f8586e7f9ebd05fd956386ce680b25252ced3aac89161c1111c9518b4b7a34ca8fc618f235e4a005dbbb95c4bc2658c91600a89063169eaede7ec54b95189545a2bfa694989543a3cd118b92d896a3b6497320072cb4b17c7fb65de35ef28a3205b74dd1d638315d519c67c6cea4f1ea5b2b8c293334e68b992ae41cac388ee598ab2966157466cbea492ec9694b0e5514f54a7cbd734b4f5266b00bee902315947412b7ecc3c89c0715dc66e5f6b1fe14a5fbace2295c884e41531ce36b89c9c162871ca5f8cc4a4e1dd50a0f730e521cf54af37c6ac5d42523cc811ca3784d2ba6e5793ebb5d147f2ef9376517adf89250f8313d49d84981e29c5bbdd97b34b4e64fd031da6ca63ceb15b327ceb0599318b7f634dc4ef85a1b1f4ff2f9fb9413df78e73ca549a36eb989e4b1fa2cada91a176a62d9b1ae0d6ee329496502b38f30394c6ad34898286f4abc89f7916df14b5051612d7bf06c9d424bb03b6d13d57926548a07392aa105aff421eee94ecca1041fa119ad2de48b9842c831096dae6d74b3a5a58ae690049379bbf4e286e82ce788c42eff79bcdad304fb7240c271cd647655e3b697479c535ebc73fc4e36258723b02446c6f07f25497e596006391a714a7db8f45e1bee3e2322226ce46084478e45d8179a194ecc3f77628ae8aae7c5ef62eb9c142147227cdb14ed3f756d9b282230f9d3f24cb66e90e310ff7950d58a7572ed3f02821c8640f56392cdd37a85932e44258dbf26d1366ed49810fac5b0fa9c2d43c831886a4dce2fdc2fbba21111911f94218720923d31cac4367204e29c4ecefc4d19799de70004e1eb12ad3983418e3fe4264969dfb7498894d7c8e187ef365d1c3df9d24022471f92528cb93e85b113fd4d72f0e1b0af295b92d7a7a7dd432589b16d6e837a584c0e77eb715f9da61c79a8caaa2cbf9ea7701f3c249e7bdbbf75c7bfce1d4ecb316ecc293bda6a07a6f2d4b2bfafc399498cd34199d2ef4b93e4f44be690a568b973243449ae1c8ad7e3514d2e8b5fe93894bf2ce7d370e9e2c57038e49aec1a336dc27d8317d9f3dbe7baa1d80b93d1cd6d037795f3b265ddd78eb221598376ec78d1bd97ae81b99c3a49520eaa31a46a38abea56953ca60193db365d672dcf35a2e188d9943356102bf9ce6087c8d2ebcecca04d7c7dd452bde94c194a57ff1e19ef521263c8b0d4c57c5362ca18529bcd413bb865b21431182b23d3c39244fa15863ae72ba694be42e402c369a2169ee7e4f413fa821dfe4ced8289663179a1c8b41823472a87a7474444727421bbdd0f96a4380717bc94125a9be1ff2b25c7164e2587b4ff6bb7962e8716ccaab188d494d653ac0839b2c0ec6b48d5080bb91f2c1451f549988d972976aed08ac55fc4491a712756d0fb538c9b5857c1c8af4f7dade4222f153a51636ba8ac6fe3ed14ce984f71a79a31fe2a054decac4bf28451f0d3a7ccdbd699ca43a1cb9ac52ca497667c4fe875e274cfc3cdd3738225e69327a13521296c982d297d92c26698e0569eb14a31e5a48f722c41d74ed942a55492a8520e25184c525bebe8732421d94ddad25eeca65c7220218deb125fec24f12fe31c117ce0033b7a90e308fceede9a98d39fbdd3851c46787b6a33e4c9314a9321c5d06a3d59da86b0bc8c18b4bec9775277feb4326418095d276d38296c73748561870d57256930122fc67a8fd7d1b442218400a3946249256f5946427e81e69b49bed96fb6e78bf4c267f090b81745f50a4bf9357a1295174b7975e84bede2fd5ce92fefa48bd73ee7d039e6315c4e940b3daa7f09e7a9cae32704176ffc0df2fa7dd2297b8b93f725f17a3223222209196aa07144446210628bbf35df5fc58c888898d12208a98573129fe1b29b9c644f082df6f41ab25d1d9d429fc51d5fe4e438ee9e3fc9a2f825ba7cf61a8bff66663c524376efb0287f73be5bb3ca42fb8a52b9099bb111beef714552654a127ebb9d92dc8af2484e5cb61dc28a9090551c4efc14fd361fe3cf2322226484a8029718f9fbf5ffff68482a8e63fd1543485d5a17820a346e4a164ceabb28d329ce1adda5af529c08330421a6a832858d9a9e7a5f72082c000027849482f4d48d993edeb7ab1052dc9d6c5e832639adbc281011196183d31011f9011b25641467ae6f76cc5ff0af4344d1dff466b46e424261e59cbd62bb956c7902059983ba9ec925da57ce27c8cea5b769fc538cbc04219ee8848a9e2aa16765d611111135d408e9c4131abb1a7396b46e4238915e26edbcee0ffef6261eb9f29c79279e23a30923eb7553923659ae5426503979f673fbb71582892fe464cf11cdbb49ccca055008b984aa1a1e7faf27d34b2c51d98e7fb6d68b565125de2a499a4d331ad23f9448b0545db7b1fc32e527e1947dae8df89bceb824caa8dacb7d278b781a89a773c85899d6a43121a17cdc244952ea1185f974526eb4b1d2c811bf06b700421a71569c9754e2ecc7d02b2084119de5f1923fbd49414c42164199e4b93629e527253123441159b218a39360a2077f43127167aed88bb1498e9783883bced4df7fc76fea1c829262bc9a998a21fc307b39e50fcdfe7e210ecd6fa77dbb26464e8854677d6e42535e8607f15fd776286d05e15bbc0d1b371b08f7529edd27498cd12401718979d9a46dcff93e7f684d3d27295f7e0bb61fb8dc7fbfdf246789611fccb96749f8bc9da27cc852cc3699b73989e11e680dd7b8389b1edcb3fb922dc9c39e23f284b82f150fe72f3173fc42c58e953b983596f276cf24f184ecb0a514af67b11ecec375582c4ff61e53df45443040c61965fca003011844081d5e37934a4ea95e4da5365c103287b2e5aee2a2999c496ea48d1d1608914395ea297ae373cab9e5c1ab40448407afc6098903b5fda66b19919784f61002073bd8f96a6ed67b963421e40d76fe386b9ad62764e8066b3d7dfcc9e14ecd0f69039d3e965e3b33664e6c30c965795b9590355c9b3b3a3a4f6c4fb4216af03ba6d0b983bfe94909490391b1635f764d9bcc0942d090d0414f535c99f879c819cc72fe39eb988498814bd1d69032a46382c44c78143bf1032164d84c88d6f8edbe9dc22322223e601dc021640ca90969f951cae25b9210315ca7277fd203ba30a695feb02f1745df987029494437b868c524d1824eb7c54ddfa29cb7f99da44c4c316d8b525930c1444bd7428b66ae16f42b274bd3e212a3cd475fee289d5928b557825d9ef9fa655157dcbd0e3f16a534296f7176173a2cdcfa0f9dacd3fa98bc8278a9e8597b2d5de28a63aaa9ebfa94aee656ac99dd329879544cb28212dac45af3d0d90457f159afa72032b9f95345620c166acd55f7bd543cb529e46539b9b01815cf66dcba605f53293e8597bb6a7752ec7a884d716ad7bd1425cbda63f3bf253f29cac9939873124f48d347c1b88688a447693d1105fbc9335f4e128a04cdcb64213c5f6d5060721e2d8598ac667f62af2bbb68b627fed496e29e67b8b89d382f593659faa73fca093489b1ca84f3df586ea23ca94d0c0f7fbf5213b8bc899aa492096eefa2585cb57b3041bc8dde6e6ec7fa12fdb9c7fc4eb2c698b3c45d257a164d41ed3495c0bede63dfb594a82ddbcdc99e496079d174d29238d291c4e19af792f021c2f391d0d7ff24f91e12790c19ac72ccf2e81fe17e5a16dfa8f93bee083646e6e954d9b7f246b8f25dd9b2b2ad5c4690f321dec4d430b32ec233f1a0171bad6453c45f9b544eb6c43a9308738979adb43ae5642182efdce96425ccd3a487b0939bac6b0e6d35a9210cb1f51dee5388f26f2c49cea5299a84f8a42aec489e0618c4d6d924bb08e960256900417c2b255e89e94098cf5a538931205893dffc24a1f5c4fdc3bf395314d113c3a97ee8bb7b25d34927af7dc83e9a50c1574e5e930f87b8144fae29cf5eee2161aab753beca6e627a7867b5a3792af350969cde83e724bd52e281bd3529fb48798746332f976dfae8df0e9d14bf61bf52d4a4d761cf2676f74b87c2796afaac4c7993cce11453f6dc5a6d4928910357592b663d31234ae2c07ce68c26b59b65140edfbeafdf497e72926fe8e4dae452976f6ee3064eccbcf92c836d20ff5e2f93a09af2423694fee4cd3c95248609d78077d8988ebe1a28ed6c5196bf4ad6d37089be3d912bde92a321d122c2043bafcbf80c25d94f6bada49faf194adab1c46fc9ed709681ce4a67e741329c49fcbcdb41cfc33606aa2af59de8c13d5b4e0cb6cb69eee85d1b2b178632c5183eab3a30a4f3b657b1377d92ee0bda87cb317c469ae778a1147349def95e79fc2e98776f2e6059279ead9646f35b286ad4345cea9ede5af84fb44dd3beb25d67a1d413dd161e1698cbaec1530e59427a05f5827fbedebc65d30acffb6e0a932a189b32d6a7d318f151a11c43b9c8a6741ebb29e81b3d4e87500a565d941493576abb44414bf5a5df9541a1d41d3559ee09470fdd1193dc553a4e2849b1af4cf012fd34e1d6f5db0b77da96670222df7a267a3eb95f829d41e433a56f8f2921c1b6524aac73a87812389bb28cf64a532648d04e53bd6a4fc5341f4197993e0b0badf41ac008885fccda5d8ba16c6aaf5871f2ce498c662ac927e53836730e8369f55c2bf9c1d21406a6fe7fe339e7df6430300bcda5257f7e0881b156d224bc7cfad1ef175e1c5d3139867bf77c618e491256beeb05119da3494a31899ae3c51d5a52992097a263cc2e10f3dcd8597205d9185d9c3a694c2e12f91c2c4b2caf340617ae9bac9d7268f4d0985b703dfda1d3dd992d630b26bbd43256ace3646ad15d6f57cfa9e6ccd3825593f2c449a1edf159f451bbfa2597c539de77e82f93f3492c763169ed9c5173332c343d69c324b652b7afe8e40ba9f5d69232ea8a3cae737c63a3b5add8c248e7deaf8c0c2b489d30492fb98ac43de6b095a28a92285a2f1abaf5622ade5cd5d1350515e79a78c9c5a45996720a3fe7da8af1df3a95620a7d4ca8ecb95e7a53a514799ffdccb94f0a4d25daed3dcee5338a62eeec69953b674e228a2f9624d809953b26492852eff829658957caa0c83f7fba72fb893b866e4cf14daab827ca1feb45f36cc95176a2a426c9effe5d99e744f675fee7fa3157dc441f992c56adc3eea789e4e8a553c1cbb5c432d126d1aea8b35e2b26f2d60fe9396d96147309ef4e3e0bbf942592ffbb7f534a255acd962f2d959c452a4abc5dd2a7b6ef6dc99944714a46f37a4998a9ad6ad32412b8975c9959828d9940e22ef1f08bbded2b7904dea2267fb81d91a54ebddc4937a46d84c93bdd64dbafeaca88673a981c3dcf932c2ec2b674d1e05d1d345484e627972477b4d0d212615dc97262f5ac750c228c3f63369a3b84d1adffd2262973b81822297b6d6ee726295885e8f47395a58908e1bf65cbeef9c3a24483a0ec43694eb1ec24b11d431075541053cb1c7d2b678c40581a2d75730e10f97cbca7e8720dd3f9c3b9eb623c7183ea891f6e0d2ed7a9d7a1b2ef831e16ca3b8cc949cbe643e7396bd258b287322faab4cad58359bbcc6312da3c2c255690aceddafee0c1686285ebcd8d9b52bd839f49fafb68d9f33e76a8c784bed869a2cfa40e85bc9cb343c454b8920ec558d9cd3ef59af8b1397451fde4b8907e9d8c1cc8f22c1f7e6355eee3e0aaec2531d787680b074a92b97ecf5933cf37e8267b5f1525f19ae2865267c653fa0e1dac6b439ff1eec62e36061bdabd528f9da9c2186ba0c4b0396cecc4deaa4744447e60c68e318ca186cc7d2d4346a64f6bd2d07c143b61bea2e254c64003d97e72983e718c33fce3e1258756ee709631cc60f4cfb253a25af0245506e325d43c4d99ff456390c1bdb2f524658b965f1b8331a67d4e215db3e51703931d73080f5a7dff1861b84b2c8fb7ef31091f1e11113143640c3060616a5254d7e41c3e37e3cbf88088c81a648cf185e4ff4b8df16327c9ce91178ce1053e8559f2cf69e2231ba30b4bd88c26d1b5af93241e18830bc979faee62dcc62cc9358cb105d4a43aaf5099b225470ba692829428d6c90259f7a639c779b8ff5828ae55b975786ae5ff0aa5e0bab19248fee46e852e44bb5b9abc5fe9a40a6a4965df396e9d27132a90f16bb3d7a5ad642553a04f709b2b33d94e76a560e524bacb98a58ed146816cb37d3f497edb8f42e1dd36198b397a8eb73e41df8bd3ec1327a896257fd962cb6dc29356b25fba31592713bc5023d1f92e85f697603669cfb169d25e8c12bcb5787b1e4b4cac3009c7530f133ee53ed13524fc1ecf4a3aed08c8b7d64f586318a128bbd1449d4c31ce97c3c55ad38e3313836a7797cbba569b2cc3b0bcbb3bad4a8f658a304a62ae944f28b5f34a09866282c9c4d79777a680518a8e25a5e9247454f48b2d95fc393f7f7ce1f8d775ca19d5e4762fd2d89d8893d35e478d177659498e88b40bae76d3497139ba485c6b910d5382a5ef7351fedd9f30257696d471717e4f3965e60b6157dfe2b674922529536c4bcd1625397579ce12d58228499284da0b2f49ca0b408b2e76638856cf497e16b86be75813f64f9665a17bd6f4adf519fd8b451f73b2a85b0e2caafcd129dbfd57b03bdd1f42d6c4ffde155bb824aec8f6e514f3add83276fd73f4d029c759b14b5a9f96f82a3c2978c8960c37794f548186dbbd24cfc5374da7824b8b4db16c5494443fd9a46abfcdf22992173539d466d7724d71d02ae92d2c54c6caa530b47bb8e0bd27bac8a4b0f672a8e92c5596f128bc4a9fd23dabff8b45a167719b4a96d24c2714e948cf4fe718da3a28acd192848b396bc8934f78e9d49324879e6c514ff8e9359c94a29da05bac7392e27d2c494e9c3d5f5c5c695a8ed9847a2125fa9c5c9c4513be7bea6b32d1e726d1b2c5c79b1426f816b7ca0eed254a3957bfe45882afb7cf6166a5bb538932e3ae25e92c2731a1849d376ca2e3645778129d2639e65cf238e1938461ccf3c253d20e1a8d84be215e934525fd0f24ba925ec26a63b2e43fc258ab9b3adb7a34d91146db144a282f1ba17c92638c386ad690e3193a35be88b482694e92a0224c49ca9fb6e1c4ec2e26e2b28e1ff3f78592544444e251526b14f110c62465bd9c6dc3660e0df17fb00befa9ee3e8385e82a86ada66cbebc1f21ecb47a8b6b6f6de2370843bf76b8cdaf5fb113c43144de4fbe73467381b0e764273ac939730f086ff7f266d8541a47fbc3514eba8d0a6a4137f383329e59a25e763db33e2468585f289769c98c0fb76da550d333955eb387a4124dd4eb0ed37c317a78ea350925c5e4e1d2fc0b9afdadee163c68a13dad763a69cdb983e1dc727df2637cd90ec7b86d1ae6ad4315d292e57d5eea940e576c856f57987c720ec9b95b3aa4baed04e5e06612aa3a4554c758713846271bf91651b7141c4e53e93ecdf58664f344f1ddb852a172039926894676fc8fd9868287646f89396a3936ac1fd3d6e588d6d0a744c686bd4cc2a61ca1006a30aeaffafec7d25047978bd92ca50068f8b534fdaf4633f9f90c86ab3fedd113d3f9cdb07c84bb89e665b8b7dee4cf4efecd2564e8f653124d32ed19e2189e94ccd8292f5fe74d0c5910b70cfa9630b431bf39a30060686fdb24d1f65a4e3f5fe83a7b4c0bdf7a21d3b0257fccb92fffeac21ab19b714246ab0b71c1f8d6555288b4852dc49b8ffb6b810d14400bf7e5b4ce32490a90854a8ccef1ef3c093e251e0a8085e5a2a4df49e685025cc19bba510d1292e19305b0022567074b99aa638e9b02542159ceccc42ff963f05061b12b51aafb330593c9d9de53088ba31e29247f1222633ec1282cd3ba1ba1494ebe8382a9b582c4868de6193de19fd0c888099bb5c809d8574a4d482fd4c2b2ebf5c9251312e3853f796ceed3db4b504f6ca3f33aef34a6845d737f3e49acb693cc061a67680192406f66f78d73d1336f054082eb37a563314b37eb0538c2da295ad2ae4bb63a2980113af1c2e364127fdde46214773e4df60b137c5f62b4f1da96afe1c420ef30d67c8cf8a824eee2c1a1a158281409848130001cbef80933130800502814088442e1a05434cd7b1480014a26163c3a28242216101816140c0e0a8643a17030200c80810050380c0805ace4808812df396bbf5551a35ec8d01943d6adc12c91e88d4b53de5dc5ad34c9f692fbe7e33809b7dd4cd1d85eb45ed840e4284c9320d87676f3185ba05dd2b0b29aef25b37a0c9e0e2967dd88f75f62b871fbe7a83141006c7ddeb1f88465b9140b924b23853a260c24f72797cd34392ebb7143ac1be706fb95b99bebc67da6cf01e9fa3bfc245672268c6c20c75ccdb42441ecc48e97d52f61afa4dfd3bbd65f055992be98c42e21479038363361ca09fc4f185b3242c25af77aec3bb5867155331ebee6fa154aaab42b357484f5af8982ee4222dd5db8626be268a48561f209eb5d130c73984db7773bf2bb24c63e8c511af5b847c746125c2a17a06b6a78f7337e1f3edebbbe3b95305847e021585b8e389744c09cc7d32c10c4ce8e17c3ba5bf739e36c2a13519c6e5104c06b1ccb01d3ebceb28d96e955dead3afb14f6f19a871e06b7b06b6622b87e835c3b20f2eb930f1d831348f759802cb0f46e7667a929d4b82652874769b937b5e7a1046ec9b3a266c734b1c1063c42188926aa0ff48c3ac0e91594f30c26b093ba4ccfa12fd6df9814e44f23eedda6e5faaaf2310b7b1b5df86b4b34f3aea6081097a4f7edc669d1d0d8c3a205d3b96df79da3901f6ea6e741e880b854d64b14306570be2cc7ab5998a7d0671ea6ed069380b6fc9ab6ad411492afefae33994acad1bc931b6de3bd12880159ef9184bf1c7c32cb85081b471402deada594088332a0472e024b0c8819b5edbf765c8b8ebc5fc70aeff66b83babb23c0ba1305c89af76f3e34e6dbf9747936adc9d3429754294a06bda6802357d32262f89c13d43ff27e5a5d6a259453e625f389264e7d45770853ddd2518628db174c54242e66e54d92341db8d5ee18cdbe98342566eb7ffc12e46cdb8726e0f418aa7b0ca6d47fc06f10b1865a06e37c5b7c4b112971221752a2ce601c36097747217ba57cf40be622ee55777756203ccd29ced964cc1274f0a46046671b749299ea3f5494dbdc6c83f7fe4aa8a1bb46e69b55bb7bd04f911555772e912f1ec34b2a87afd796177b6c4e80c3b4db473d57f3f19aa6a4c3e7b4bd7ebb24331d9d86d1a30d2f9f59d28e850c5d21fed71ca6d26919b3f8aa1b5c4a8177ac12ca2caaacc3ade024415207b7c4e80b7fdf29b2d62510164553d2bd52bf3894c8394021a88cb0704dbf1024f5721a1157bc69e37e3a022b6f7f2ea12f50690df016065c48f04adfd39b6720bd7237f6103e8411dedce27762a201a8b9f894b1dab2fbdaa45bc299978780401ca7deb9491b319bb036d953eb819bb443add796e6972085da46a05fa5bfe52092e644ec191950eb361f887fde222eceec33fd3992e419e29d9a1ab344dd0b7b773fc168861ace0e0d24cb05dbd450c690a26bbce37e0383b955a80beb564438da5a91b0abbe855953d96d55217118a273e6da6417764182af1a9498d4ee2ae764346ca0e711e45c133393ae4de5dd194dd868e64337c2a54244b39b1ba6b5c03ea8b44553929e616e76d2c1ed2f9cbfabb66443d9f80ebb99d3d376a086eacca57f706e63f060f44e4850e762ddeaa3e7241f17dc26c0f346a5ca39027a5b189f51beee9c35c90ba0085b68d2df17ebac26d1ff83c73768a7d739767b84486817a9785232fc899392cc24649693c4e3356ddb6e75d5d71364aa21fe65416c9802c52626c9ecdd15906e3193f490217adb93f95b843b7df1845cc62c40e6fd431f22d2fba1bf0d98f06401ad5ea39a2644d3aef480bcf7c2404a3be12ea66abc5ed12d2e021e5956c610c38f4752b043b9bb7de410a9b65ac72bfb228d7098cc905b2bc19ab41c1abaefa13b92f43ca9cea09f24c6c0bb783e0a6d940bff5e8035c110a9f0f94bf7835bcdd89300774c870a562926cfc5d14d0f4eefe1854265bffb851272fe621138fdfd49817e05171c7fd2b9e85f0ac93007db36d1d5e55e0bc197a49e1f4cf9716bade3d81a0ed62e1ce24b1816e8060b2c183ab6a516f845c268112cbedd7f49fbb2a242eabd33268b4a42b9595925e4366900612986e3add2acd096686f813506b12f6903546cc3476d2439fb4d9643530b1f1297c295b205596a5e6d42943efc99318a89c176b2d26a28e0a3bc91dd895b325312477f8a168eaebe8c43ea291383379678ad889566b98b995a0c27359b4e798a51c43267624b2a7d93ebbb8c88309b9082bd418cf523851fe8f2b08f525d4945e578bbd77cc88b3a576bd11788d9a5166944bc6225a92b3c65856e05eea480e84128ee50b1def2d361e0020facbc9ed3031eb515573f24734427a8153fb6a9ea47711ca8df951296976883b88ddcb50e9ca0255701264aeb80a0cc601a8fc90f9d351ad77232e67541e539b88db24ff05e9310a3a7e3b78e88da80bc0bd6925012bdfeecef9b6fbeba069d2239307d299a2f984d90749a64aca00b9f07d44d5c3a4031bd61981401e9a5dadf9aa05d98c4f25585dd1c54fcef83c77cf71f9ef13401a98014446d757d31d0c755c41dd2fb0f77ebde73deb23013ab82491bf0f032d07fef37defa6e90b41ae466fa7d20867fb08d1f6abc2a1a955651b183ec9b8f2eb9722e6c11bd096fe80b878da0aa037a0aca1a8a9a12a2bd995bcda9920649094bed5944178c709cc760bec10387565fe86697b9a008c48f68b330e2ec8f999da741c6e135cd646ac144e6eb6eb7b725f052473448c25db4eef6cd78cf7be11503c8f7ba0164eb8bde790f9d75c7128b1ba520c9a34910a686df48451fd342ff295231d46f82dc2f311492629356b824e25e6424156bce47f16bd1b87981b2960417dff0034224d96a68d394cd905629bc47bf5e699b4745a276f7dac1f94c91326ca99ff9086b11834a5be7ffd93ca5466a30162875ea7c85c5b52dfc5b0857438c5e50c8021d2b83dc401720f38e6eb23aa6662f304ea3368405864447435643e0db0534cd998d779a340d5ae00c30c134fc5d641fc895781898004c7d0e198e6ce9f70d01e0a69d60f0259bf38caf68f733925b0995bea4ecde0320a7cda8fc0464e7007911083e1eef1e39c26cb8543c3c207b408d8da42b162caa44b690a81466cf6df3c25bd44df5ea0bb7257e473992de95730f721baf5a0012b9abe3c7276549a3c7938b39a78311f414a1fea01a26c16d87536ccd45dd6d99fd65c322fcf844787bdaa3dcd65b019395feccc6597b1a39658ecf19fd81a45cfcf17044581d08d06cf48ec0d9b6ba2d13d5a864bb09dc2d3906e4106616e3907c1be4f2dd5ee2f0a2a3a908eb8bf0f99d1ce66f96eaa60620131c2781d3d12e35903542e6001f7a904a3f901b0da37257477c2b7144a2d85fc63ff2c7851a18577d6dfa93d59afade7b2098365c16fe34567c620d05d9c9ecde7f776edf6a7f13c2f64f772ea0e5f93975060bf4c2534f0b85f5d689c28292181e79fb2abb946060512c0767798cf4ae851a72d60535ccc15978174c0bba1db7986bfa2636ce5f6ef6135d0b03e3e01a75f0a2d15434f7d271d4c8c0b29a4b9ceef334d05577b6415b12402130c6b982cb1e757022ec88b68bac0e400f5a6f881f61949a3314c70df60a22212435d54ec082b7520941166c6203ee2fa0d0f48e9d1cfb6bc3cbfc1ff008ede2ecac582fbcfc0d052a48d7d4fc5f81f42a7b266f5975ad90de153a034757fc701dd8179822a107c5a48920256eeb13b5084f7c6bf680612b8067d3d2e74a760e29e1f85ce34ffd8089e6b544ec211f8d2d22ef7effeb97e5fad3d4de7be096620f268d446bbc673dcbe637e4c66ba746ee97ebb5aeb0578291162681f39ae11e84d502407da221c2157fa209a8c5ce33a9ac96f5a54cd69b44bd19172509bcfe9a6317eed9e6c59cad6b07be8194f641f68fc5ba963747d17742400c5fd5cc7beccc0cb1f27808707699ac62d84dba07a9c3d5398505419c28e2e1964ad4b23ffd20fa8794fdc8a2c16a070e082a28f2d7bcf201978156400fac42939972eb8ac19030056d26d4d638a695dd8977ca76c87dca51702c59a92f4fdd490ab73902a6172d8987d861bc83c78266bf8108876a1fb2c38570467c3ed62c1d3c9b0f5a8038be3f3066d2ef315edc3d4697d1419c081d694d3ed956829817b5407257239972a2b07f63183575ac5163cb694e022d168088e79eeef2b48446f8b3defd62bd0aa44d7bb1a658de9de39070dd4a5acfc8bc8274ffe10fa281b48d05d58a22c99eadaeb85267dd9a9fca987e7381deebecc58668987ea9e28854bc5637694ca7fa114f731a0ff74e0c73d768a9a114ad7978e801b522cc527f596994fa9e6e5cc178cba1532cf2ed7206d25340eaeb99ef2bfab3bd41ae6ffd2924f85f38f9525a4a741a6fa9320fbf739d96c27ae03c3642bd75c784705834278b98d76d01b999f77cf7f94bc963c568f7430c635565ccc8c6b5089c5ce9084af092bba7f49177da6b4baa445127089681f27d072aad29c136663bce784ba0169c0b90eef0e5fd95d24c55aa0d0c49f455087083c3db8f5e7f85ce36fe08ddbe37b1ffa572f72169544d98622e3c3f9486901da9cd4615d8aa1a93c795df53ec4cfe06dad56deede7f8e27a5b9945656c8f2b5e66bc9f6a7957da73de6b075b265e14b20c5134a85fac6e8ec46e845764e82e9298904feb7c902d8deeac8a639d28bed217d08640389242bfdbe02ca664b345b5cbf053a5b88b9c5bb5aa03b7029b45d762f51dfb2fbb2a5f6693db8670d50fd0e74227649bc7139b0f121858c2d7a4a3bc4d7ce73a1a662d0c1da9262962d0761fad9d0ba05f7b6e0b2c5f46b0bd138293c7150d3a20ca6997216ca1669b46c958b7abb181b5a70cb0b706517225730e80a986941d29d8408d5272dec1f26fa2dacde52e98016a207c5f8917f589936ae9741935db076336999252038886631184a28eed132c6e29c0b76884ede995a0ecf7d98643e3ad0bec16cf229fc142ea7099ecbbdfefc7083a6e1c998f8f5ba12d64341deac49b3b0b573098842d10f7f76c8e92c0908e35005bacda98897426167e0080997ef9d63f4f908ab3ccb8a5b740fe8ac8547795886d6e2a1bd59bb5828635380175e4f947e941ec3adadae6288b3078bc333a21ba836dc4c7e6d85d7e6f38e1d0535ee692c98045814ad4e5a79014fe2e61baf7b010b4471d92619a83d604d2b5368ed2dae919be14a7a01be33583105ef7548893158d3f67bc9fa474c6900cbc5052ef6c2b09a30e49b3d23026ffa04884555f00b61d4d966693500976e85f2be4e2dc4f7968285300f67e0f2413588b575f2121f419d36dd92cfd010ac1d480a31ed0120b709e3c1be1438419fb45805ec077c0d0ce1dfe334b68f881df74cfc334acbc24bcb21db1b9a7e279c81d400bf11f3d6d0dcb34975e9796d8b625e69ad3c443787307bd6acf8ae28e9c13accee951196e1309cadf756b5db4049b4239e065df46d494f7667fa8f8160820f5b2dbd616d72d7ecaf2b8b7809adb91d534eab69e2a6600a92892427b0fe0a8434d7c972146899a6444378a92fe12f1c411e5234ea4082a81ebf299d64da1b588c07dda04ea2ce9768016cc2dcb7e9ce5d8d445d5ea7cc0619db5d58f8c0fa28c37f5bc94327ea7f2aaf23a9b2b076b9cf8a2caafebe4a1963d126800351e6c7fc7dc5ff5fbe20bda5ab1e3c7180b413bc378639f5fc1000d0caedbe636345445b6b2e5534701ab03af3b1de3231d392654120f63ba3788556d74c8066e94297a0082daaf4604b1e55ddcb76ab75ec7897b743c2932c5559365cb1de1f65db74c0a55d7311015eb628ed2902fb9f0f622a4ce26d258448ad0dfb53b419dad22e8cda746476bb244ada0b3a73c4a2dfc91b9608844226222a9b47885abfa77c63ab82a31fb23f45bd5dcf626bf5eed8a86c4e96898e82423ba960ead5371a379abb04a428ab34f094f56a9abecd1f64895220497701cdd7660b07299655f87d541f9182413c1fba35c21e3e64101f14e2d21a1d27162447f36d95d991b8817b65c89bee7b1ad6c0f3726ebf0902027e777ffa3187e8bd3b11d580f992ad4dd817c045347b46a6f5aafc2b1d1ed842d00e3065292d82fe06704dd3975412a3b2bccb263b5120582bb3ca8ef40b3d1b83d600742d553e97037b32c6a7b4583d4d286e0ef5029a5ae2eff5e19e278fa752b41d40c8098f3427e7e2f37841e7184f97c885906554d9527ab8d136702c23d28f66c16fb383893603702c13282aca5b43fcf104134e8b4e1e5672f57481c2f51e621c54c95d7e0f30c0715e6a505299acd2f8039c8df40c0a5707c770d03b44b675482f586270297b93e49b6ae43f7b1eae645ea975b90c06d58e62318e92483bfd8cc375a817b04a6ba43d7ffd8e67ec275f14e74268e3586fe2b98d12ba153ed24060cd265c64ad126787b2ade0601f91960ebfbeb06d622584d1425f5d2acfd443fc90025bb2318b8ee000a0f3c9c4064c267a3599cbb0dcd3f716e5f2476949c892453df6aab381fa73c24d0895c7919fb8950c6b4a84c16d964922fa2868fd9f3c16f9b12009f0fa8484dd791a351635d8f7c81f3dfcab840219054a42a3b0409e7a0da86273711b70a236a10f9cc9b3a336eccbc3760c64b29015a32e5056fcc3b056bf0e78d968e367f5d070f9b1dcd25bf2370895111678deb8b7a01bd07cfc33357dc800926764538503448227b818f9a04e11fb25808dac243a4d9b1cca4bc7daaac387043ef8d21884c20ac9405df66e6f4715ba0f1f02000b651bbf581e09412cef4574b9c9d640c27b9dcab0dfbc00d39db835a46e1226c9ad09a0e0f00b3dfbe429495bc932a339c70f4f1e3c6e69033ea33e1b37271d1d147e0f5332562a761d27a9aa214efa53d7c590815065335fef94bafe53d2d27923f50972c96a32419ab42d7beb69fe1a7f9e6e2134b739e8b588a0a416d281f488a03db50ae88d1f046b149c77545e8f00dc9efae829c527598de1dd89e64db5d8c46d695fba5295b14cf38599cc9dde7d68c0d492e05fb8f828eff456f03543e9a340cff8a026004eaca780f47e5345f46ebf5a7f47747f7da9387918d4fa437348ed9dfa89227716c3d72d2f885a9609291177adffc1007a27b185f69cc7a3bb98001310a29a22902f2ea8f4558b34a163fd7ec0b699354f06190950ca066a47f6ed513f96725a1f573699207e73849194865787893a873578e78d606df4d593421c80e871ea54598b0cbf68c20ede78d3781cdc5ba41e0484196d59ba1f43a715ad77cb925fc1a326a52f51fbb71bb436b193f0f6ef8835a731c5a0ffb3e112563338b3fe495551851f9139f9976ca9c9c00f3f2c0eaac0c1353e9d39a185f99780b4e989ad159aeb61b10b0906380677be8c05cd0742b8a631ddb06527fe09e07d858d6ac3717795117b76235558593293891afc0a3bf5d488ffb4171978a888f8762d372cb4de549b6e02cea53ad1419a404a5704b7ef1134f0876d6ca78124e68cb58f40de1ed983903563b1d348040bbfc281acf7154564ef5cba17b32c05c3cc19c2b70ad40c2022797f37b187b51fa2864b7615f6085469d4cc602b024826e9b72ad8d2984426f36ea8123955e5486adbcdf03accd8913876460e9350a8f7d012793ecd34f4503ecb24c1b9ed3290fa629c007386d498570eb989e65997950e0f9fe203d45a427120af33226102f67bdaae686b1b91f8e234045bddce9eafc1745604f2c8d45801a24ac8046aa1eb109ca38821871ab5a30ba47949eefebca7f8f707c6e053612944a2110563e538fa35733847b2677049404700d20492d2643d9c9a57096ea83395361b097e2179a8bd113c282d558e1f70968560a529514a9f459b3d2ab7354297e21ef1ad13764ab0cea955bfe7fd02c214b9df73643ddd79cd5cedae15863be15969bd6d31df16bf0d4a4dab87a6ed4c88854003c0eb15569cb98f91dd9a3d2c052a3e51ee26f2a3aa78d0d14cd40540edeff4e8d6b199648e0c28e8614ccb51dee30aa2b77886cee9a17820eb079ce1e324801391ba00373c676a098eaaa23c5298fb5b4d8e981d252ef8da69bae4d0be034a9d7e4568a632c3b25ebbf2833267d41fda181d18f5e4930b5d9a78ae7223d8d78f00c26915fc72071c9f4a5d0e87e076a2bcbd0c048f1bcf1aa01d6707d91f1e5b3f199429c4226bb7a15acb880be9a6f4819603ff960a6e6e0360c53a3fa8734f2bf54eff6dcbc4b07b64d8d92184779c0dd4a61bbba96873f253a883a71f653f49a42f69ac42a38a26cf19698ebcf8cafc9d032f0a9153b86d4fa2f0113a5c86f0f4218a2ac7d99f237e3c3d4d0f295e4e328e44a4347e256f9bc4844806a34f5342c1aa83c12025b2d9015965d2ae0cb7d8422f15056949814f36a76f6788fe218d8c9c7a80434389d07d102012dfdbcff198d4c13f60d6246fe9fb4772cb4a6f43af830089d6db624b9f26c0b0afae0ee933baf65150b44cbce64cee1579316f3953fafc6a1df44ec87b84085d06b9f34bb967dccecefafd15d1d7d114a94261c6e5e2371cc5ca9c713815d87a33556f800ca28bcce2bb81d5ff100b9ebec00210a46f043d3e662726b0f678a846c978e027180b3b35f1ba1fec5eb3ed05353e215fe153fae3f13c86218bc6a328bc1f33cfa7d1ef2763e70e8c35b001b8045c90ae149380b3f6acd4686d5aeff525fdef0d24333118247a62f661341fc359cc109b936eaaa37daae4f0b8ff68eb39b132eebf59c79b1133f2ba40af77aa13223b665c5576254a8d17da94b178b66b013f6b9b9f3b6b3bdc1eb5ae382e89509c8b1e0786bfd2d42e6274331d24c70543524185d1440bceb8a6d3a5b1f6e54a509a1db4bf141ba328d7987d6246a8187346f81a721e8cfb32455203ef42a977242e0051b7386c8149f80dc20489783e2cf1c61592f02ad182fac0346341062bd21dc7a4329ec269a17804a51d610307a6b7f6e4564f267f35ca9d827ff9530e2a5daa7aee2b6a8330014a185adb326230f3129b9dffa1600adce64bb3cd1c75606c784a28dfd84f03cbb6fa7d776a810001ea081b92a19f84054a712d3f977f938cd836201df4276f805fa17fcddb336fb2ef0f849a3888e41dd3bfe7b0fe855905e8b5692028ef003233261ed98d499eee6d6e201af5eb19faa98935a15d05f9c02636c85732e180af2816762da0ae11f7a5ae8968e431e19768d71fe3260e4b392c7e8819dc5a1fdda31edf54786dd2dfb351b77bc92ae62cef04d75f5a6b017a7caa3d082ca398093615fb8b7e8f29a7fe9c5de094b9749949656b0a6f458b294da95e64a5133bf6032d822f122e33953e2cbf3e3735b44be347674c1cebb4a79668d10c7119248f1a904d52dd189d58f6521f73f75c7597ffc034970e4059b6d35c8c3087ed6502b82696af39469cdf89522bf20540fa83538de508cc3bcebc2d55e074d153113c77ed7449734cf9e954e73ae00691001d8cdfbb89da20a2c09a6bafdd886b67ad36c770395aa3ed5238fa309673651bb1040255fd694ac5908765c9f0da4ad6180cfda8d9d13fa311e112c667770c80613960ff2495484a2a3829d0b17e046d3be5d528ccc2874df5044e65c9b2af7e53f56d4d656554f2b5ea92b4060294cc37b4754328d9e5f29a0c5f2da1a73998e1810fdd9d112d80e532ea185a64b3843c8b6b99534896279f3ab9e4e4e8f717d2d86686e298e73f41000505b6dd8220b45594e9fd13ad6aa70ee287d75e5afe45b8ab0be71da79e1713934f56e8159c41a6ecf2fe31e73a67c8594caec2ca19be4876837844ab764b1e6325d3f52f0c1982e895fb175e1605bae7e595302a2c0d21720487b438351520fa46e7866cbbec6b2935c3268286277be7c07e4df28f5a33a1e63489331364db65321eaf9f9a6d976779a0b665bc77b39f02eee82e107336954d42fdeab18ecb773bdaaee928474440f87007e39a8dbad9be99258bde6c21d9862b84cba3bf71ad77ca6111baf62ad91682fbe35efb8306ec50097199322b1a9b6b0c2c78b83d94e751ce2edf62e0f0d6a684dcd8fb6ea5fff6fe1301faa9bccc479b842bb63b7239636874b69ad7b642306b91e39b1c1233d5961d8d921bf8114fca863a8fa90a5f72230e1cc4d33f051997c3d8372aac07c8b22428480277a49b07f332dcb6167d4c23feb14480175565d42fa0ad52ff6fe51f374ee971054c3d3741b91e7c160d485539e8536394fc071bba9ad29cfa683c2f1e71b03748404aaeefa49dfbf0beccf71e6e79ad02f5ca0f7358ebd916403aadfe8c30e62898cdeaee33d2c0281389e78aaf793dfbcc8bb3d8b9c26a321a1817b23e1632ca6954cb9d7c87b95d2c68a9dfb87bbefafc1508d87c5e1fcdd39e9048506ffff71af7b9afa33b2a56b283571d0c37853e38c06a9a9ae92dd35edf330c930cfa5bd2d09980cc93ebc873100dc600067740bdbb23b396e033fd2f90410051a4aed73904bb493927d85159be4d9e937df333dde11f2b918293cfa81cddaa5930fd5bc41509805b8bd799fb0123f04662cf87d11f7908109ccb6face66a73532b40c7e348752856f10cff99f5550a0929e1e4bac6529ee8107b9f8a7a85e44ff3f54d450aff7e38a1b7f491b0a0765a405cfb8255c0250107c3accef7fc30501a4de23da95adc7d05c6fe6c78deea6de185ba6e3961d622b0ab6acdb7d9dd4d9efd1f25fa3717fde25ed3fbe5887ada5167a9c10ad5065e7175f9629bb047c53bf2a41f9ba33dbd5143507db2cab78dec74c0e3a6579a2053d62a75e8a59833ee5f92971016059dea7687a1b8e74b6b77c67338a50b20f4169bc1a9c95d325c5b643139d14df755795c022318ec9f922283acde50d6701cbf9e46052af7452098c7dcd02fcbf019e568ddc52d89f21932c65b35e4fc78388ea4fda93048b237cac2a09fa8fa299cb953e151aff3606872f62f56fbce33e3e268dea46ab8f88198c4d12d707aeb268eebd5609bc5e5a202ba5bb9d25cc02c6e6f20b73fdacd6194d8f79e8c9930817069093566ae724b13688b7175ffc6e759dfb8e53db03a9072c349d5a5f1a4fa746c49f89611e8ef4ccf8f2ee1a1c551edfd0d9c1a830876698d3a62224e670be44f64da9331cb9898130e002e9f86de0dab4d61bd590d6433b353cde0c794a950540263be256c6eb306038002ff450afd14198fac315790cbc22b4fa1e1b8fe2af1c19e920eac93e8f51693e84699d02683041efd6fcdd2ae11963d4be2936b1738ab89e700309a12131e3810a8d881018ef613123a481308d03095c99e54c2c58c860f4e6f426c54a7fd12dab41c6def6f3ca943b0857d02827ec475ebd78ba6c60511bc060f25ee4a3fba06dcf15f8670d4a0b5859f19d0e4078973b0eba53ff90416ac2e89d5eb56758befbb95af72e85204ac5ed3918704a05b6771e20f499464233a6df1eeb6eb90f2fed9123cdff0ce14b465f85d70bc597b157f0d56f50cf17220261b3013a214202660d26b4f0ac45a1dfd0667593050cff574f1a826cf8cd9bfcaafc50e17b01900ebf61d0df835e5e2b33c0eb0bcaa9b9c2d5fbe2f3eb68684e383098de69d0a4d73bcb24b934a1e040520479e2bc8ccaf857894491dc9432242c0fdda85cceeaf111316e481e93098e6937e1d2b1f223cfd280cd18878018321d339f0f44fedc819e34dbb41dbce66e5e29b98b72dc44c4469946f62d0aac2680ade452948fd56983ed0a57956fbe329f0904fa256bdd2d2d6139cbae729490fb568b4eaca3f3723b12be13ce0dd14dc605724c00af1ea288b7f11afd0f91b54f887a83883150ef324546ea87c121b0c1b29b1a6cec9815c3f58de25129bd7d1c38d1d28c4b0468486c271125b18dc730d3e7a01f247447690203ca95bebf3032396beb498882a342bc6c0c4435ae70f452f0a47962f549713ae38e119d13e4bb484ad4fc72017f68fe94ace18416203c1b490161fbd88b8fee2928483a5ada5a6d5da6821d448ad4f33f7d8b1fcbedf3096f5f0009f423a0c6e6b4a46a94d9e5fc5e3cdf32c25631093ca9ad5dbfde9cc38914759c7e353a4f54d7da635bb2e87a8ed4c09df5191a1a4d6e1d9e36423e414bb58bfb57e4810ee38b47cd8ed238d313894a1abb8a4ade5479dd2ffea46094bdc92933653eca9525bbfde5710ad8aca2b70c655dc66119be452bc2a4315735014cd8bca2ac8b4a296b222a4b4f5448e04284272ce87181a13f2dc05cdbb15cbe0aaad50873cf5b45ae378335cec05bcf62dc62ebe1cc6c461fef6a3232ae4a1ad436ca884132e9897d73a6915c0e13bb5595abf1f3fae7352614e12a2fa9e63d7e4a9839af574e5c451e2a889e90ae055ea380a2ec41704af0c882fe5e27c1830323c85159b881d6513b783bd469f5bb723a585926b4a237c2a6453fdb4dfc6afacf5b75909e2fb05e2a988f109a67d5842114e6d564615ee1dfa81122d2724a0944dd504951a5d698aba5c44c016edc70fd04304eac4be2416325e6e648aa8c192562c48e4e8142b07312b27d770fb3da7204a2f92c76eec80b3b0b7c6a0414dc1a70e28d13a594ed4206102f283d7f9bcfc55cc8496f20562fb457b230d4c5ab01f74da5e4a682d42fed758b9777e0d85852b220afa49d2e58d5b2cb6a68fb3b230fb85a7a2003ec246df763eb6d5abdb59a14f72dcf541d6227ff071a83802108ebb595d1204debb576c52707024d2cd30c91cfa639c50c6c6f2e60c38d02b31c7aead6098074f3523db94c9f912101019c51a156b963641f793a196985a0680890b0cfe282a3fc8c1c01a054352e9522269cdbaafc54f0acbf639c243cc74bb5aaada8f5c4d8fb6cd840ec41ef65c798794fbb867e8b418b96a1dc1a8fb7591b8dad74d9bcada7b4817a196d6661b8736ad3f92206d55b9a3a2e7fb264e085bc3d0b906896f19c3d9c129647ac022206ad93d02492f461885a9240806c38921b6180dbe340aa5a5e68df947a94ca4cec3cbc3665b9ce4139574fa57425356a268283dc6c5e0d433d6e2af0c3718060b88b8996755c65e1241d36c11fe0333fae2392a4443751db67fc5beeb10f4d28b328439621b38af85aa789d81ca3733936491fbd87b7fd191af671057dc2e2e53b41bc178806dcbfaa33b256cf60a278f75df3e91c120ecac22300ac45f659f602d939b311192843ab9e3f8c3c1f11d8361db4c7d5b2ffc2913f7039c72306c488fc758a31fa46fb4ee96d5321759f7893f012ad55d7738bf1a36dee8d4b889c0df5922d1079c0f6a1bea6d8c98cd31259a564126e1fbe6614f7f60f39d4634918e91f62ff62309351cb85835c0a251a8a9bbabf6dd57cd447a387d20541d5e3d8dbfa92dfd80398dc63850bb053e05d7e7c2bfdf6472dd9a59d5f0345b62c29e64ed1866f1973a376df4563c0ddadc66e25afa55e920807997e0035a2e060b4197cb4bf70663038d853322f9e721559a6ad95f9bc7ba4e249367c2f08ac3034c65919534c6fcbaad2e8f343d8f3462a720cb2068740dde51d7d8287eddb12810de9cda736ae3507a6050610e671442c84f710d165f40735019bf9d455f46a79fa46a19e2257e6039cef3ce71e1280f440515695e665ce1923b1e3adcb5a2f3210ae3aa4064060c47385bc7c4a95541c5cffe7b2609733d82ac81849ec01a03bd0639d61594ff5c3027e901d4e2025e5c05a60d3750aea69003cfcff033fc0c3fc3cff033bc07be6c7c54d96645846893e8591f43b4a44c9b36a53ad9ffffddaca6000040080040da2d2808220d520dd70d979c72c6582289ab3a8365df98483495d3957686ff8e1f4814fbd335ba849b8fd12374b3f1e84fd936e7c7118f7e58133da54a14bf118579b68c966e69e266041adce72c7aeef3cb45e049b6987252c5bf2915a1a7a823f669a6931026a2785929c5d124a98808267acbeb73575cd90fd17c884a2987d3da9c3604beb71915b6a41089efb11ffbbb16d527c4c9ba64f96910c64b4b7259b8cf1c5c4154b9e639794ce2b9e6029198668e59fe00c2d0de932b2ba63bc73f38d95ae287c4314dd2bc896139a6fb609b7c1f9364b51a4f920f7ea71d3d9364ed0add1e8c9e13d679546e2ad683bd397ea563943c8bf270daffebd5e7a5e4391e6c3529deb662aa77eb0e7b12e358b4741e6ba61ddad4b438fff9e07dd5e114357c924d0ed3e1cabc315ccd33fb76e6c0b9959cc9b384c858e440964fccbe9da4259a7130ed45695e8f15d3fc70309a6acbfac5504beb1b7c8ff35092b0497ab36e703444ae33b3cab2d2064646afa2da2caea66c685bdecf6eed2d5cb686c40d55e29ee016b364d490577efa65e8be92e4a481dd703a27db87866caaa498579354aa73867ef3c7c4f0b819f67851d52767ca705dc65b97950c9e5c329a3f6663a82c5e6ed367ce515e313c1e5d4d4d7899cb721836496775da5292c49c040c9e5b88de4f335ae90dbcf8429a9e7b66b977b7792f70dbb37d9aa474a1246fce5c703c6c127333f4a42c5be0a552cdbf9c5a48fdc496cff1255a23385cc77a9185e493b9518bf465b0e379cc6045202202012fb070574e27491ad6e4ac1757e8d6d4b2939892254b8f88887861852a8613ad7227f114bf11119130c2c8e1022faad094349b63f8fc06bca0c2a25a17d71f6456c31af0620a8def7fb7ccf7df8e5e48a1eef789af308bd71b10bc88029329dd33eb05148a27c6b9e8a72ac9f81338ef94fffab24eb844998f72a1e5cdda2618af53c8c9559950bd66935676af43d325b4f3a7de11291b6da384b7420771cb9824f863ab1af2b2c28c05097c36b17e634ff8af98174768ee4c3adbb8f1c20897785ba5755921785104ee46d5d63d63d5743c8840b6680e67d2a6b8b17831843583d9edffe98510faccde3931be67cb1b84d4eb4e8eeafdea49d40b2098c3674fee39672ee9fe01e3315bc83e4b776afae0ecb3a4165e43ee745ef42039260bffaf0c9f15e3050fbe28c9d418cb2ece8eeaf8eec86f8f3f74917497634915db24b93db940b252122ff47b820f5c94ed29c985f3154d131e3bf2718be4ce34e12791999e87f1618b5c3545a713c24fdc4d053e6ac1975f9a8ebf5f2797b4e083166d124f8349eb8d8888cca2ec4177c5445116e79ee78fbd1affcce9c0472cba10f3b5d9cac13a0d8b4d4af3e473ef0efbf978857dd20613c3e9ab7de78a5398142a78749c8be9472b3c0d255a98ff031fac602a4f160b255f7cac82fea45fa73e9d52912a9ccc2709f1f1eb2126a9b0ca753c492aa362cb392d2a4b9c6cbd12f8380551b2414c3061636ef9610abee46cd9982ed3a7b314f645cf8a96fc62168e48e1831478184dc9a431feb58f71828f51b8d19bec2ec6ddc59cf2218a67cc4e47a74f8cfc3e42815eeca8a8f4109ff3010af38af8a77af8f109abbfc6dea6639a485ff8f0841de185d183031f9de8a34bd47492464444bef8e084d63ebf79bafad804e73947ebe730e77f5901182a6800063e3451ae87ec142fe3c7d811c1472692e8247a3e372135d20f4c607b7741e3491a7cd38f4b2496c58c393febff6189c6c267337d69cd5e7d542233cf4c726a8c12e6ce383da5615aa13389ddc3665ca46ddf79747c48c23c9e4666632c1f91d0ffe4d6d264e1b66ecf2146094cf00109243b564962259589efe311e6fe2026a63f5dedfac311d7dc9bef7785f5146ac4f1b27f92fde664b371444404091f8c48eeba959713b76fef8f4524e51dfdd095316eb88aa0bf92186e4227115b6559a9109fbb8c51f081886bc32d6e89ede1aec2c72112727e37aecc1f86a8c4cdf727d58589350ba19c54198364d0d8952604d69e939ad439dbf63d88b252956567f84a09056176a8facab0671ea38f40d8962fceeb8971375d1f80f8b335fe6c8a315ddd918f3f249a3cb5712585c9607ff8e1fb64f6292593b424f8e883992bd634f8e0c329b3ca6d58e4848f3d1093313a642ae5a2f7a10753a8c79393674cede4230fa605cb0ef5b1c432be438c0c7ce0e10e76a052ba18936275d8effee3327ac8382974480c89feb8fa259efbc71ce8184c6e2a6bd2a2810f392835a66af69531d61f07b6e4e3d4a7170ee889e5fd552eb932be61bd0f65fe612673c9b9c1fff9dc4e26a57b276943eb39a51cb64fd840ff7a5ab53e31335ad67038b9ce891ef3f83135fc26c63999329bf1280d343ed070867ef5a2e6ac251f662803695f1fea4c2443f16d61d53e6348d47819e44f437f4a62b8f2656f9d6cf2a7e98f3058d67f524e52502f49120c5f68b335790c17bd69a20e7c7821b1c4fd385df1f39fd305d6dbe5a2a4cc7cb940e64f928959d1e375ba05fb3a356baaf8a185a7d2a45ce9e4d5afee230babcde7866c950f6ef281853b77d8fc71e42b943a9a381e3afbb08257e2f78ec6922a3862561dd3477d5dec830a8875ccb055dd1d2b3b05dbaa56fd730aff51fa900227271335659daadefe11853fe393dc6e2777b6ce07144af729af754e6227893e9ec0af9ae6c309c67c5f39378d8888e0701d8b034718ab63c7471392e4f118b7365c3ed799506ee98aaeb47472bb4bf8a72625a43b25f8196c674b8c4d75251f49c041800f241496ee3d32ad3f27cdc711b4f22b3529dc6f927523bc16fe16232fc7dfd1131f45e82a26f7ec566bd2aa1f44f0a4f459dd52da08993e86606c36cbb8f03b497c2154ff31eee483c7c6180464fc529273552cff0508c6bcecb1e44bbf99b41f5c72ba0559cdf1c1b943b5e6550e1b63a6078c659824cf5a3ee9c30f1e94fba59eb2a65dac9a73a6f2ea5ac85517b9a7781af9e7b9e55c547b31f6f36eb6e5820bdf52688eb9367c2f7b0b6475b6a6bb925a6bb6b0362d096e9692fde4b540ec4ea445729bb2cdb9c99ed33a8ba28757b7d7c8e2507b9a3c97f027fcb148f0a8d77f3761514e728512bc5b3fac5382015ee10a6473b4e6249f70512fad6085ea1d3cdd980927e6880b065845a9426b3a4b2739d4ad8a22f7c48c9fa6a2d8cb6a133d092a128b15fd73d5a4a8c500a7e0354bf2bbf7cf213280290c9772ed2dae18304029e8d8e129f6152d5f690052183d95101a343d8a32adb6cb5a5b92a888c2ea920e8d61abe76728f020bb7ad977a67a030ac373652c5e52b5e0f9443265e287680a32137b22955ecfb0111a3fa34e1c3966ef9ae3bf6ec9097573954d84be89362bd5f762a3893e0793bd248a993045db6ca229babca660c24df16135f85568fa5ca23acf3961bbdc4c7a4ba0f67f7f265f256f2a7149e3f1df7c7cf5c429f1a707f7978dcadc77124e8807abc89274ed950417bce2d6268b44ae12f2bb61fefc4b482415366fe8991ef1cd59acb746e46e12475c7933987031de08e4f2b37f4bfc649b64c4993d2f834aa57f4eb208cec6d764ddeb54751581bf456525cd29b794446c614256cad25df33b22dc94afe4b38fce6c921c42e9f9e4593eebb96c43687ea61f36a88538470d7182659910d525b193e5d2549ad941184cb40f726d9b4b9604c1e6b414b6c21f08b753a4f29b4030002028c1c4141edd22963b06f8837ef92265573f50a2aa9ed46fa59c761ffe30dd3b7b613e18990455cdb0f317c53d94a4aa0a671a4f4a1aeaa1954dd2a7b5acb16f9307a7a273fcfa6a9b98c1c33145934f642a9b7feeb06fc55c9d397630ad24b94fa69b32af43f3ba63913fdd1ea6c3762612dece01b98c2ed31e7c6495c35697c6e1334993381d5a4d1285c31f2694fc9424f59f6f384b93ee09a31b4a72ba0e1eb7935ed786c253b8943b2a36376ca8635a933826670da5e5f819556b92b1a3063ec38688cc4e1a12de6f35e6da4a2974d0f055fecbdea768cf19b29ef1f9f6b8f79bc1d8f89d9571ba9e97c1249510b2da75c2e664486ccb9f2749ef763c863f25b9644b8227cbb018a8f0d6dbedbfb9de30683d1d3375bca4b56038069ffe1b9f92eefc82d37625994f4cb5f442f2cd65f7ec4134795d78547cffa673da2de102f5415abc46324ff65b38cb2d4ffe4ab9ac5e0b89bc77eabcdb29fc2c2475164d2fde97eb58e03b6f5ecf53a7d55768663486648977265b213b593689f12b83be5528774dac2cbf95a3a50219b9b7eb140e137ad2fcafd685524083ba87ab1705a26b340571b1ce81c2fa1babff4f9e80b76654371377c2752f9572564e9ba47813ec34fa226fae1b36674262a812f366cb97b09b8785d092e2725e0927e96396347b495a3d097aba24d5d9c99f4b47823761414ca8cb2bf6114c5f629f3c3b267b8d60b0e85495c7e7535b84328789d15625827ba153c4897599cc217c62ebb4c92974554e0889e2997edae2c72d08f65b574e728256648090dc9b2c77b2b6d43f606bce827faafc53e28384b9d4d3589b8b951e2cdb6e6b297a57456d001e6827dc663bd9d6c55d589fb249931d5d147d56e9cbcf059a4337f23bb848f250b5b1adf3c5f42d54b5790fd7dc11b12dfcde923ee42fe3dd5a1872935651d2624b5247768eb36835c931fe435970f269cc4d6c560b63b15be6ccb97c365e27127cc9c7ab0b9eb0e717fbf56f7ae302abf67e95443c64ce6fe14eb5e93ca925a6a6b590a675fd36c93da768c982f164d39b6b95985d2c9425f3d86989694bc915ee71135357b456b854f389fbd75721314e73d8f9a8e0bacd4952fa85ca3aa76006cd61ed934b577e5258dac27c8e157b7159149429b14eb2765048aaa9a8312cece4da3ca1682f5196b265d77702258548e9f034a118136ed4fc6fa6c484208409e6da18f5cac44f1ef3095942bb59716e2324efb410256ca9f6f93a4925ef3c09a7d04dbfba5ed3e90b418292ee79e3c76ad93a093982fa2ed29d2763d40681102324a3399cd8dd256d768ba0a58ea17253188b311f42844c3dfcbbff9cb665438650b6194bd967f73d3542606e3433069be939498270a70913e7630782f9ed52529e98ad3eff834cea1c357c667de09d25f3747f4fcd29a40775ae9021d34bcf371e08e1c173952d27e70cf974179cb59ae6eeeac930eb020d2e539ab5aca44f73510a7fd249229f3ce71c17b807dba41f4dce41ed5b58f2554bf8c6a0955b5b50d278651dd9fb93736ad16fbcf9da7f685144dee67cc14c336eb3f8b4e33676bd6e8a121340646157cacd4b9963d3deb1686334e524a3f135456171346124632cd183d8fd0acb7663556e13eb2ec61597b47fb2d24c82c5b6159f9c52ace99e97fd242bcc12a7c14b6cdfbeacc214932c3697345524cce47d57fc14a292a462cdff5126cd7cde98414516cea226dd68b3257d0ac2c3d3266993933f328569c38f48c6a8b46897a2d81093cdf4c3831464de0b79591d836d7614ebc7b98e494e5279da448185967d9d4f6b3a9d5074294e12ed3c5efc8fa028cbaeeb549e0d276fdf23c7c80c70f4781e209f4836e93ae59a24462617c413e59245252d8917aec43bb16e68cb289b514b23274c25975a6e644c16cb8888c8173dc6e8c0194302670c1611396378c163bd4001c826125d538ba7edbd0ed506209a203e87c98a354f6b6b26ce3495cb1cfb1111911ddb6329c04305209828bd56273734c95b1d904be8c142d3694658962d51093d4ba8bfb0fac8b7a0c75f0084125b8e49b47ef5531e019904d971d39657ba58f22c09f3e414c6e4d388353112ad7988f8cca92a794120616afe1e4dc93ccf3a3e0c9047686137a3adb9f446e988357465661f6d5d4d8f88888034c22494c48bfcf4be3c7280008411e690748ffee615331a1111e191a3980c401671e6d68990395153cc2b222989597aa359fd259344f8eadade957258ba0d11fb9ba65de7dca3ea811cc2546aa2685cf176ef0c419df06b497013a5bf042984326f6a92b4c1343e4224a1ae31dca664b128c82034f790dcd514e34b1344539ab5d26c3e5f8004a2eafcc982edc65e920544b59ed14956903f9c75e23f3d64a8bb2f070c16c7f75819e4d801031c380e00e287bd82e9a587b857a54800d207ead6b663490101081fca4bffe769426a6c3d2222f261fc0340f6603cc1dee4bb4e5fb1d5831bdd39a6f4ce25bc3cf0be96f2ef0951531f103cd0ff5972b6eacf49703d00720733d4aee5b85c7a0aed40250f221daa37a9a47548f0b7b648f99e6720c68e16e018e19143478ea300103a1c96d39fc47ff474cb8888480cbe032073d82af2dc45d32631c710d00000c402440ed6760e4f9f5245492571386e96c7eaece1bf951d80c0614f796d1573f886c7dd24d770f1111037101e242d589cd0f1641d80b4a13853cda1956324c23040d880efd76b9570e29dcf206bc8a40aee172f74271b440d8db8966ea5e800240dae4ac997c4ad7a53bf0a2068e8c5642aa694b23f6d40ce50b4773e31c9d13c6ec602206630656dcd448f929e499032f4f25ff933a23eea0a4206b389e749dc2bcb27c823206330b774e870627c27a9df1d636c1140c4d06fc9779a82478da301090323e79e42d4bccf4983a16f0fffe0e9c4dc799b01c817bc6c31e2b7ed1d205e78a66a2e59a61c4b12ef42561dcb6fa3c689633222b202102eb861b6c9a41347764b1888d1205b702d077d977a954d1e88163261d3c6c7b7b2a048c525692f58c9dd8fb8181e68000816d214ea4ca8927ccd3b2057304fb6ae0aa3493d8c205640e75635f4ee91118054c18b2226ab7dee680f53e1a9e031d21ac637e526003205463289494ed9bdcab477c182d101102930ff133d3e1bc37c340a4945798f6a88b7bf5a0081c295d7e227361e204ff02cc5cdeb072b93e30771829a75b342ef651d91409a40899ffa75a4048409e5aa2cf1b6d695f3420064096a586bfdb59470295702b7e696f3e23ac6a524dca6a12b8e86d6b70c0956e85026bdfd2047c0b53bc564cd9743461023d8d297d5eddddf6c5e014811d68a994f9f792220f6a12dc37a2043e0b39ca5d813061142597f593ac79814408260f49d9b0d1f2ba6b003a198da834e69ea5e69417eb0680a9d7398be09550c101f18fcc37392849d0d7e0204901e14d6652caca2a33ee601101e685951a3c15dde56dec56fb192184b8a1eb536ba2832a376dacf1b8f1519b9f8e352b2cde994818bbc2b7f4c56b95b6c27ffa6ce296da1c9657df768c246394744445820a3167aa556b28a132d76fdf09bd1ecd2a47116a57c59377ae618327464515e9524dd8d56a789b1204d72cfea1983452a2e964eb6dcdcf87a6c8f11c8784552ea118d1a26f454c708325cc1ad6feabdbdc86885c1e52e86c8c6c972c960859f2e9684d59691f156c169fed8e6bf51455f9ec4bff5542a3e315e925258990e8f50c19594cd7292c3bad4e714a5095792565e65eec514664b9d3526cd792e2ca53867dfaf091529b86c7e75152556a84661ccec675ee86c894814c9392606f754959f313242d1e5f09d2a23af2e93018ae255c963d3c136f426e3139e1812aa3e1793a58b275e4ff33c2bbe63b975a2ea98b818b2939cc2cb01119130322083138fcbeaa54fe98d863761e89373c6df4efe5e9a606babf275f4584b2f231386c67c0d16063230a1ebf5e6d4461149eb12e989a8c4fbe6682d8191c8b0042559fe58dfb7126889555a425caa0d3225c88892365dd8a624273226a18b76b5e7bdc890449ab7ee318625ad1e23c1eb7e8eb4687d9f446540c2244606894e1109321e719b9525b14d92e108cde7f6b2a95b4a621a51104f5329a7dc497b65846672fecb172226a6bc08ef6437cbcdcf6f22468f1aec00c3013214e1891a3484a4899b2125c2aa245d64c594e4ae1422ca797f5d3b69fcfe8e8c43f8a739621def35231a11116918c8308439785b68a9a9109d5eccfcbb999db4228310971cd232d868d233650ce234ba3217d23e95e882a855f7929c9b0e041bbcdafe2ac668d603229fdf944a4aa1ee36ff83f92c95c7f44637f1fc4075d6b0f5abe9c3653993667e8fe5baf341cfbb4ac94b760fe798a7feb82456588b1eda31517c336c79403cbda6ed6d54938407e704a9b9bc29e72dd93b1415ba432631ab6c921d8c2d215ca242452c5387a3a5d18f7663b19d42077a4b4e395937292333073da66c92355ca7775c0e864a96b8691287b62e5c53ea136b3d0d8776539b14fc3a68ecee0dbc5e8eb5cba7944c74c3498af9d4dcf615bfda50aed093264cb89c73880d9634763e9de43ee35f8331d8694c728a92ec64d5d0c96196e77282646f69f093eeac9a241a0c7da99358394d456cce80a9578a473f3968ba980129bf70697c35b99a65d83cf5698e2132bc21ece3bba37689a9317895562f79a828b17331701fd22b7cbb6120a7830a0647530a9e2acf2f7496f6b172a78d275f5e38c54a133d49962ebc27fddd45cba15312e642eaa5b3c9c5c48bf9ddc226c73179cdf3f9bf94a18502c8c8820c2c780e1c3a72ec481b40c615f85ca39633edd8778906195640a3f65ee53efcdb66905185ba5312af7d3bd6761954e0b6f4243b97cff9e7903105bf52d6f1f89876299121052e959c7b4c126235f42854a727e58ebc27594b1950603409b1d1935501111150c87882d1dfba5bdbdcc22d329ca09a70c1c2a9a5b8d54644446434a1bdcf68b973660b3298c05c5430395ce892beb304dda2931862e7aea9578229372749f090991f7b129494dfee0ab5f40c22a1d94f9ebe4af89ff88e50858fbb265dce4fef19c10fb97c1936afb96b8a8075ed58659f5f353144b8cd64932198623f4375d213329808c1aeca96c4a41ef39c2441507c93a8a940f0f35a93941f5a2dc67e80874edc6659a6982a1f6826c9276f92c67f8d64f4a0f5c8d1cf9a238307e5f6fecc8e79eeecd9c575a3f5ff1e9eba39ba28e794936e7ad4f8cce7828b52e1ad6a71ef392e36b1649d16490b9de65bfc318b59baccb6a8e2643f5bcb0ad36d2d4cd649b46cb9d7b3951674c665879db38e313a0b3af788b56d74ef7cb2d02a9e68628c9bbada8bc551425378f5061655ba38f71cfb4b12635e6118cf1e63b2892bf81cc6f3827a528b4b2bb44b51265c56b829af6e099f2d5bb28abe67ffea3dc6ea4d15259392f829e9ee9f54389bde3fa51353aaa9a0a224fdc55dd865f1bc9d2293e2e5b257265bd5144d45bf98c3a35c4ea95270f5a92ef49818328714e73c11799a1f05a3abb9f4a3f3d38644a1a9096f2812d75c264949b2a4b1030a77b3b5c4aecc1445fb042fe52787ab3c91a8a5182f6513373cde89fbacebc4f484ca1fe604fe6153b9d9da3fc536e1e7ee34c9c4bc9d35a589d6cd2d5ddfddbbff99307f3cb1c4f4307b9ec4c46da13b6fd69bc7d25c22ef1ca6938b989ce462894bb6dfa77d2daef54a94b3ff5ac8f750a2905133a54b6a8f27c9244adde36d9f24046b4357cffb0e826272dd49cede539b0442b2cd49fb7eacb50aff60d55437dbe19d93a00fd2a052ef794f9273547a60949fc9317aaac183dd2dcec8ed07799946444470f0581191334602a3b10b4cd224a8765217499ae67faaa296cdcb85c93c3be51a2f39d9b8308599d724fb673bb1728b92a5925b2d4995d309da02bddf8c26059ff1fe6ab1f4e7b64be94fcc3ea18555c9f3689c7816070f33f9becbc2cbe4ed6e9744cd9736018d586469294e58d07c82f4b048724fed9b6f259bdc345e41e4945c5288c9cec173857b97b1f5fc6f45dd164fa73327cbaad560470f1edf3a2280021aacc022ae375aad55bc2e1b93e831d96556154f0925266f4bf3f7300e06d04885297baadd0df69db24c031547dffdd3b82509a2fb8888c81f689ce2fbd2cedb1a3fb3a2618aeca7cc927d670d717bf0d0910305344ad1265b3d2966c8db3f4768902249f293ff18d994a33f22220283dd31031d632880c628d6245dfa3df14c4cf9bb010d5160fa29eee5f730e9e4f1390040041aa1f86b33768aa5e71611149f74f79996e24fecf14d10bbcd5213e309c6e44c685f4fd5d1e884ae51791d7a3f37c511a0c1893f85b890f1fa26b850d726a6b69a304262ebf4ce04e22526f4758be6a898c82c9f46c64e6126e6252cd92a3da69255345b6858a2e0c011001a95307d4574da77a93c51a2d78ce361fd4f22b1e4b6fccbb92428f93c36b491e82ec6dc64bdf55981c4f92de39d3c7de1a97c04152daf1edeb95ba743c311c6a6d30fa2c1f62e4da3119a5c6523ee39230cbb4f6bb5b07f9733011a8b48ded43c7ffe0040020d45b84193f587cef33f9a1111111a89d82dcfc99d92c6fda9464444dc06341071e6e9865e8bc62130597a3e4a8865d09986210a41884108221080f8831ffac0873fbd97e4fd3e008840630f7ac84352f6f4b1753f9810320d3cdcc10e2613e7ed5cea6277c90868d4810e7390431c3eaf303f718234e070ffee789e86657b0d8d37b8a10d98daa5b1fe0d1bba4d52e9d245630df749e164f158b10b690b68a821f36829daf4d24a8507b8d18017f4094840230d89c9c755cd462fa3070d5eae79f5ae96ffc99fe134d129ea9fdc9d24611c0800030c1a66d04c73543fa9e52edef138bea80002c03034ca50549c871a093529e7c8409b7c427cc65c98f88d01db12cb337a4e92ea460cda7b4c6f499ace49921206652ba7c4aab7cf5b83a1ac6565ab1d36a6efbe608ba7553f3b393ae9852ec7334c3bd585d7f3a2a568696b9ee7c226f84793b4b04cd2be05e7aba4543271624c392d6813957f7f6ffd3a260b79b6ac96a3d385cd142c78529958c2af74856431d9b02f2997068f15ec10ab91fabf0a76ae99a7565f99ff547045d44e0e6ec9d6f5293866a2979fb914c8f6d7983f66cd8d390a9f24d6d657f569c30b0536ad7a28cf94e2797d8226957cb143562774a3974dec9c2f884936a1743749e92413c812637b2e934caa0e97d06592b23f3dba7e92538235f1a1734a7a05d192a0f7d4650dbf2906bd6820c1686e9a722a98983bd1384225d76ebb26d33082a1493606cb3d49feb5086ff0b38dcc8e0d791281ce49db63eef1de70328482587a714b8b102821a4c4183453446541606fec04513d39b31010fa74932ad79b5889d2f80172b1a4dcfd70c2f448c307cff5ec74562df97f06c304347a705c9de39c81060ff24c195dd2497562ceeee2fdb7ca7c2b53fab919bac8052eb43ee16309a13a0f11912fc0d0710b5bd48216b328659b3b8bd6ccb93d008c61862c10d3d04c0fb2693517c38c5898c27e8e2e26bedbaa61c0e00519a8810478f058108021225203c6c183c7c200073360b194248c95dcf70a34672a7366f1a4f571452579a9753a5d36fb569cb227a5f6cb8a936dc6147f53744bee2ad0eeef8c9d545590b9534a223615fd31a928ea2cc7bde40dd117541017ece20519cdd8ec145bae936c73333f8939bef8c20f008319a6b8ceee35a66b5cd05029f44e728e2afe96fe63334851794bcfcb8019a368d39ca6d0316bca39cd10c5318592a478392735ea8c50f4962fbbf772668002934ebcf72d1a11111111111191008fbdc08c4f10b2aad23fa2272e29539696135b44f39d582f9d9cf7476673ba667022c92d7cced1da4b0dcdd8041e4a65cdbe17ccd084267d064ffabb1ec6acc08c4c60b275c5e9f8b8d63a26f62b6dcddbb94da8db03332eb145ec985c588aeadf0c4bfcdfd9aecc3dde92654444644625f4d22c619a3625252d0b3328f1859c2ae973b2e82a8e8888d460c6244e51ba393be67b53521285ecf134adf2c9824924c864131b62cd19904828178b73131d1dce476c5f926c3fcf70041d3796c5ea7285198d70a6463e9bdfed7690117cbc38d32f6f1166d4afa6edcc504469276fd2ace1b2d395083da8f5dea7d97dc98d88887c8188c41477652fd16da7cd38046e213f7dfc2cd1631430c20c431873e692b2434bcdf55f08ecbcc366d50caa591b1111794250197fcb43aeeecb3408cc437ce5cbd9e6a28230e56dc530a6a9a263204e4133c5f6ca67e25140d8f9e4b0fda12d4942c58367fc8149352b490acbd4cffae19b8e6ad14eb40f7909d5ba67e3b617c307db32577e0b933dd0aebbfa172fdb2f5f0dccd043d2df85fa38db3d9d93877365dbbdcee99171e2a1545226945c92f3a7e90e5b27d93c786434d96266d8e10d1a2bfb94863d35ebb0e5d3bf9793a4431ed4730969b2fba7710e454fe6d632cde1d7440e6ebc8bb0d4c4a1718d73355a02874bacff501fd3371c25eda54a9d61e9a31b4eaf1a9a634bcc38a90d85784b73725b2230830d79922abb866767a5624b500d574637d370e52457d6c7c93e9a2bc10c3498a37b345a566730c54efef779673e499ac198aaddb4e6d552bc2630a30c66960e2b512d977b4464207384ab695c7ffd0b0ccc188331c78b15de43cc552b86f2d7a54d5c12734f33230ce79ca4cb1c3c05094d83a10b992687fd7bf6871798f105ba526aa82467ce33e6ea98e1054a4f2ab17f93d0290ec68c2e70610b4559f1ad7492638616b2c07df0f0df49720616923c0f6fe256ee4f5f0f665c21c9ccbb9076424edd2322223bc30a06d9cd390b9662d8fc8c2a94dcf38889d1d5c916e810230c1c6288f10707036650c1926246bc6434853d3feff507abb15ac70c29146ff7e2d66a1dcc88c2b1ada2e78ecb18664001b5f678ed30f9671b2fcc78826b7e1573745dac569c60663a79b2ec3cc54417f4f6e0b180194d58d46aec2c75ba308309b7efe717abd2549ecf58429d747ff3d344095ac49ff416c3a5d9ca8c24ac5321a72766b86d06124c393dfd76eef0d091821947d0bfc535bc9e9471b346b8e34489da16ef425f4528fcd4b86a8cb59f2f31769c1ad86039b03388f0a87ca8f0d9e6d1e59f31843d244ad0caf799dc0cc10c21a095556647b3338260707f770d696254bb338050f695107331a64ffe67fc203907b9d4c184b5688b31c307553293e4d49e26466d460fbc549218627de634b7193c684c4ea28a6e928fb7eda2ea8e7f25dadb36020ff0d0a182105dd45d991a1f6dab51cf85250999fca3a45fdf8d8b54fd742263a82ff1bfc527c7e64d526b6ca19fa5eccef4d1634c22031c3dfa77ec1023a416785bf43475082d383b8b2746d84baf14328b64132dafbbb42c3e0b2fd1e898ff638ac56b2166ca4cad529a08210416c7c9e9716b4e36b1f49057349f3adc75cc5f38773f8c09f4e03106051a4082105794d2e29bf09e49d71e21ad403ccc42c92db5400c0e78c163bde0c08e6f410bc408e30321ac48b0d350fee1b30a6ed335d44faad524aa30a69c6e97986cebd25454152d9240082a92ee4f9aeff5539011ee29b2510a849842132cc6764d3aef21a5a0366d27cd699772ac8490a2389bd0af93c26e7b21a330dd67e98afb11455268bb1f1b3114c6283f69a2934b560c147df6281d7a9bf6df8403219f48a8133cf30af144721013aa566d73ec670c219d38cb8d5ffa343e0e18bc60c748094238517ac4df568cc85c5fc826483149fcceb48468a2d419436ed67048262edbf9f214534d42c38451ccd2dbcee6d9b0b9c4f1d5544ffaceacf9be08448082104bb4174e3344cc31007084904afc27c92765a57af9e983438c1e385ca023c78e111e0e08a144315dcebc51d32193287ac92946cb3213169ec1ebf81d34089144159a2c7a3a69543d8ac4394ecc99b92665f340e2fbb0755771fe64c447145f734389d133222212861862b088c80e0b7184eb3173e68b3e2222a2438c301ac7080f0b6984e12a15c682c9173ccc887567f3dd76cebb07421661fc9cc32ec6e4a4302144117cfcf8e5c1ec2471e321895037c50e8f52862082f00f53313f37377609420e61884210621067d2505e2994d0ebf61a420451ce9d37ff64fa6995a4212410fe6ab233c1240410b85e38e40fc690a5669b2443fc90f459aa9ee4bcc4f0f020a40f6d0c2993e4b5582656217cb884cf5d9742dd0397e1214accb2b86c8e84e8e1249498ddfccc3cb4dfe9715f223fbc188287b367b389922431a6fa47444442ee50f2f8781591b5fba91dde2fd1354916ab03d1d2e9f433a7ddb242e8903cadbf27847c925326640e95f6ea5ce4fe85c55a089183d22eab3195649268751c30cb969e839fd925d9103874316ed4dc493879330a798349da5c49c67aca4cc4e1ef823641881b384dffe39a644b296f3ea40d567caa0b5f9d734cb542d8d0bfdba5abcd69d6d535184eea8cadb7d131a1b99a80082a40811035687fb9bae72f74be33240d65cea973789ed829db170841c3616d93c9b95b09849ca15063f27dda5e4ee78f849881da4f3919b94721a40c9927b38ac94e4c927b2322223b42c890c931d795985549ee790cfca50fb6a5331a740c114382f646695556f2a009c3259924638a39637d070cc8a5f4ac9aa79319bf80b4968bf95bc8ecbb17e84d03c70d1e6f72ebef2b810ddcf0c4d94b88fcd5a9135e36493a0b26969c6bc3895375df57ec876e1a3771ccc9629ac987b324ac89349fb01b2db69978623291502e1f9952c2ef590d10e3e8c8400f1e628060a4470e13a0e00626f078267d55494cd9e512744f4f27db8c02372c81e5b82a9d29e7811b95e044ffceb8ed3400043728d185bf4e0daf93bf371d62e400e3c6243e0d793978b410a61b49182f558a7e87eab4f148f4fbae2926a53493d7173720917d78dd102bcfe1bb1e63740003371e71fa7a083d5f44248c30be6f388228e9e4a4c1e4dff5fbc3781e38c25819bc8e1c371ab16858190bd2663efbb9c188e269e8c81869444464114b9bd8ff9a3b2222c2811b8a28f54dd29f4bdf48442d1d3f89b964d9ff70f40d4498e4a26a8e96f73fd31111912f2470e310fbd8b9af7ae62c76df304495672a7eaaf808046e14022dd1a3779d59576e9da3c7f6b8418824cbdf8f199d2b4d3c222292e3c6203a515256c5f26288c10d486e08c2e89d4dd44fb69ddf1c1111b1c08d402479914930615a737b0071e54f66b1927b795437fe80bcfa4e05eb58d71811dcf083dd5596f54db60f74079f13dd4e39bfce87a2eb65bc8f79e6a3b3c08d3d60269ea1f28430a9ca111111c7b1e37bf0c8d182df21468f118888f008c20d3d78212586f098cf1df473230fd8464b97f2770af1d60d3cdcc10e75a043994265355ed4578a8e888854e0c61ce4100738bcc10da6c9bd2689961b6d60c396c27de8d478693a838030c2d80950e1c61a1cbb3213f7df1135d0dd5692c5cb51372c07c0176ea401ad14a33c67c9e96f738e30c2d8a323878d1b682885d7b03e1a73e30c7bd6eb86198efb9a9daf7739c59c0462ecf814e810c3033ac4d0e1811b6528e9853cb3b794b6ce8888c80d32b8ab321577dc72c93c6e8c410c6100c317bcd0052e6c410b5928d2ced32b57c10d2ce01f2c633b8c674575e30a9c506e6ea331c976f91837ac901473d48b9f34a69ae08888c88d2ad049ac6f370b61f27b6e50a198625d42bca45c257f630ae47e7f6c39d5901f8fdc9042f1e42434a5d599bedc8842571176d9ea64cf15bb01852cc87d755097c9961270e3096bd7a527d15ab6fc64444404470d7ae4e885c17672c309e76b6c305163be7cae09c9c9937016f41b4ce02439ab6812d3e7f6171cb8b104eb43b59d14445fd384039f6307181c40c10d25941c3d6490c3c7c08143003792b094a5602654c4adca23222218b8810454ba3ef7c3641f3f6f1c21d1a83deb96fc4afe54e08611de18115ff2de5476131d63dc2802e261b1bd7fa6b1db0d22bc7e7649ee4d0f2197a8104f1d3b5c8c104ad1a799a6c46069f120a0196fd28dd940482a5d7ca9cf0fd66ca24993e5f7b4611f1cf7f99bb379cc5db7076456cabe9be60d1e1c73bc939491d99ee62e9cede85e1a4d5dd0f9620ad914955297b9a0674e9892fabb4a1671e197acba09deae2183b75063ecbcf69984137a5be0212d69fab816a50a1e4424eaad545a142cb877db75b3b063ce15ef7c238b4c78db5371bfcea48985f27569da9bc1e2b0a31afb7355d62579452aa2f9dbb29e74b32b58f598dec7fd56f47fa27ae255aca06ac3e5e7c97335d52ad420f5559b24cdf64815e6f6f6769a2815bf67e838152eab828a0a2a64b4e84f778ae272a656a6ee8c97c6c08629d68bddca61e257aabf14c68fb9c2beb73f6f08860d523097c362d81c8b8d51143d7a6ac29324c08628d61331293c73856c79bc0e1ba1c03bb49a5a528d973c50d0964cf6b8f3bb49d23ee168360b67d11af144e2776ca89825bf4ed2021b9d38654af15294f72f61ffc2030dc8c127b0c18924cb4c71d3f8187919d9f13a746460878d4dbc16b24998c86d68e224c7e67cc2c44b677ac44626ea4c8274a68e8dddb30c6c60a2b8cb9b326bfc3b768407026c5cc2d4e0498aaa97caca05820d4b24bb49d8f099322cea233cc680418f313e60a312c927cc9fecbe72ff3d258a4cad125369a728d718362681cea58dbada8f257b46bec840034c6043127526b5aec968ff3b8e48dca7ef7df7016c40824fb2e79d49519a2f6de3116fbc9362f6241bcd92e4c0862392240b954723b62c9a7debf83162f023384f8187410dc0b0c1088379d0124dd06d2c02977fd3d3f4268f7a3614919467f5a1344f9e2495c346222ad712ac2a5db781085ba3962469c9a3fd99808d43945bfc927c3164c310788acc9d75c9d9c42e03360a7130499c89f34a1dbc800d42a0aef15f1f471bd818449f440b5fa1d3244d3702352450a30131a8c0076c080231a12ff5b518c6f6580b1ce046037a8431068f17010b6c04a2bdb02768ce8c0d40f461d3e3aab24b92f80fc91e25625f4cefea1cd8f08367a279fee598b347d687f2be6c464444f850a668713fa6a304ffecc1b6e06139eaa787e7fccea460e6dac803b69d3595211bc183237f52beca3df7208f7187922cef9262b276c8241332597dbe0e4975a792c42ace7ee66a0c3a902f69e51823b031877a65573a457630d9840436e49038b2a2529b72d6b277f4e061230e778d092d2655a56987839fc49c93b4d9ebcb64dfc0bd6c484ddbcb14266e28ccce796d85d3bfcc461b8e6e9166e9329614636c28a689df345b9d7bf716d85883d226be0d35b0a62973d4dc34f1111e3b92011b69c0f226498c7b911d2e36d060bcea943dd5ea33e80fb07106f524adaa8d31f9c7921111111c36cc500a9e6b936c5959bfb551862f845ede9cb71116d82043eba9cc837b95a6d94644446c8c610bcdb616b79bcaff8888880d31a891a1c4d3bcbe0fcd46184c27fc959431e42e860d307cc1e46ef31e4fce2126076c78e10c99b446733f8627e942fda13217feec13934ee7fc3d315bc0840a317662256df2b490052ca031d6a6c6135a2c27b942626c75cd6f48c54d22021191de41011b5620939c36b985eaa826d48063a30a85d98bb7e46b894536a87065e64b824951c9d6761723b131853a7e4e482dcbd99042c9d1238c111e8b0387006c44a1e4e8b163844718387008c006149e70acfbfcbd24e4a590714213fc13f3c7ad8d0e262ce1ea4bc29b564e5d525142129060d214f4a39cf4a7171af9e2d838427eb9bc358b57542cc98611dc2d39c63aa5368a404de7efd65a444816cd64f7d151ba330ab03104f68259d48ed59963560899249eb097d444a930ed5810ec7810f0a0c1768008368280de06d5b81a6d00e1189b6fdd31f78374b3ae78a50d1fb3ef03bb530eafd429655d7544c4460f0e2931a3848b6ffda10d1e541dae2b2c277993bf8ba43db14d8cbd97365774f1b74d658a4b6573552e6ad1ff39394d7051cf667bcb313a7cd45b24cff859d20d8361821ab640fc64cbf192e4afb7165912e39cfc1d2d4a729c98faac17e6dd1c61f4e891238c1ab3584d8e9769b267f6af2c8aaf9b3189a9568d586c61f3d2c5dba6ca0d2cb414feb37fedd896f88a840a4f79bf3a2a851357fc1d593bfe7a99c44b2b9a8e9b366ed008cf282bacdd50dde69b51e75cc531b8f7491d2bb6899d2ac8f425497d3aa74229914afaf341c53619b4cf2f2bf698a7407eb23fdf7d6bed698a3fab564d4a3eee2297e270b9673f879abf4d37465083144fd566c8d0781454457df4528d28ee282f9f924456b30d45516a52fff70614a6992a390dd1d84cd5f844af2bf37bb2ee89f7635efa4f9e335bdd893d47c346cdf12b891627aed07b9304b9f3d5d0268e6995aa1ad644e9b3d49aca27137ce69cd13815e74c0e26f61c727d49fa3c65399738f85bd09bfa2dc1549c58925468efdc2b616aa80937b9f79f754a1c7c2fa632a62761908b08fd30e35db5240a63e3662a3195728e8425176edcca254d6548e029e587b19a1f617cab7cbcaa5c925a4738aa213559d05426b48d3086d2918b55f973cf08cfde52fdc61465fa459061d77e6b7352092b2229a676ddc64ea95c4d84f9378dc959524418df7b7396132aab3f8495b3a9fdd286489c8e31b5ff6de86c219ea9b8f9b64b421c2becd4529383d82f644c9b49d6ef9414c4993766d267bfbeca401815f1dad3299ee30808cba2279feef00f77774d76ca734deef9e14ae9738984ef54f2fa900972928b5ac68a9de1c33bf575b26a960b9dd903267f4593e4ba11d5183d9cbd4feed70ae6a1aebadb3dbf90192578306cf46ffceb5cb92d7738c50faf6e4b259760b1c39972735712b43a1c93f05a9377bbb5293aa81ebf84e9cce14df9c27b3439dfea72b0d3c59e886d5b08e3c058f4d4fd4932951482c3b9aff472b6d6bcf4de405bd4783df9e3867a4cb7faff826c38dbd094d4ea6536a1410d36a4f2e1c662cabcfff41a88924e257792848aeaa961af18deb66ea5e11b2f299ab8bde12d750d34f4956c3d477fcb2fbb02306a9ce13463ae1dd5e29a8c748f7d018f1c2fc0a1e3c38081186d067e53a3e8685857d844a00114a851862df2dd47ae476e541e9d43c7c2e06a90c18bb5327a36056a8c21513ce37efd2df8062150430cc4ba8512ade255c68c8e0f0387046a84e1d88f0b1f9a73c4c0d123471830e011811a605033fb32fbed2f9477b677aafc4ad6cb8888c81735bc50ec2a490c91390235bae03a72cc40c7183874e468c1f3006a70c14e7726bb4952bd77e58c91608c1a5bf8aab29bd49fd342eb298551f73bf93793a3461610fb31499253748789d7c0829762dbd63ebc425163fc8f5c49b2d45ec30acaf7784acfbff7ead7a8c229c68f6bd943ab410556ebbbf6246b4cc1bffc191ba7545ad51a52f0456a2c5599c97655230ac4872e49b8cf745288476a4061ebed7097a49427f8f14ab29c3357c309491e2ea76bc9e4581a1a78064444be053a768788080f0dd46882269d1c4b6cfb464444c47881183b60606a30e1e91071196d157f82359650ce575d4c92b0a1a31aa9a1044c4a4bee3bf1b1ae9184be63876fcc4e0ddf464444be38c00e04dcf0400d24fc96c4d837e7315f4ef2821a47d02a594b74996b12df0846bcff57caae4dc25c04de3cb4aa060b962d4b0436e6f4fcafea10ae8dac8b1f4d538c3da8b4ec0342c2a1e1603010894481201888ed2a01b3120820283c1a8b4342f178483059c90f1400005d2a1c443420201c1a0e1212120c0643a1402014060542612048180e8401e1c198402addc53500874d307154e5e4dc6602269976cced6d8cca3460ccc8ad769043b8be1bb56d9c2cc1c88c7d19248d6500bbd31ccddd055f16c1737f1a26b1bbfa16096b531b5331523e3d956b7124e1d036dcbae852b0a24cf67c7110915885ca3f5601f9d94b956cb33964d2488343b76fcfac10ed39d144cd54a7acbc1a68c525f99bf67be040325556d79782a1cfcb0182e632a0adbbd92432d32959e338d8a2fe22dc55089e2c1638b29882860a7ac4d1325be6aa021dfc7532955e0d6623bf7ebfe8ce9d981142eae7731c458b43315e0877f615cc5e8f49a239e0833477233719fb85f3787f7038796509f1406689d61d6d2d18db1e4774713c9915a9600810979cdc46ff1638b4d1ac33e378a5b8e9c1995788c7fb432d02d73054de028fea689a97977d4c9d9bf9e9e04a26c2ec5b1ea8aa07e6800de7558d46612ac92660ff19a5d01112c14f4dba676eef3f33fb05993a470dfa95ece1688e9931ac15268564cc43ab882fe11d597441618a440ec6592dd36a47c70a12170ef8322bcc827636b095b31d5393f7680552d9b0b5748bf9a0c48c18db7cc975930b04935e30bd81c17a0e66573b270e90b52a0b52400cb463e01a9368633ebaf298ee974ed5654a0272018b980f3394ed2f3253d2191d36adbd8cfb397d2fe9ac5db5b7509568ebc6dce93abf05fcc4de6e5e979311a25e55f75c1ca2c20c93dc938cba8bd827b4ca800d28a255ce22e27883d53abe10472a1ed3b32cc72601c74a186ff0985f61811624bf9d17b8100fd4588a7001261e7c27c7cce222051c30313939f94aae1c5608c55595fccaff35c97034b58841c3176d39e8b05de5f212d7c4ae5d707230a1a0318d59f758bb43f9aa1cd16ca824a81d34d46bb82eff50b2c3161ea055070866e0987b4f50383e5aea8919e3284ac110500389acb1852875cd7c22ed98f88b51db7e961c712f7ba46dfd9fc7830d8fa82f24e72db46495b2b38dc99755b63b10fb15ded45d68c6d59c42ddd4c35a2388efbc1aa8d35c871e447bb38fd3e33e3d2238fab2479dedd9518f0493e58c26806cb8f86e31fff3d2b8868578b16e0e1aff55157784968c37cc2b4d87a47cdd4bd46ef4ba5f346b96a98abe3b1ab0467bbeb1a0eef8465a474c3196041f45ee58b0166f8b4a91c37d619b99d7f09aa5dd5efa1f37412635c9ac8dd67b5b8c26eb20d85b4569aa347b68b6d15ad8e4dc6a04788eed7c54aa1defd476a68eb8a65453ec155c4f79c87621adc77542b9c3c4ae7acae6594f646410e653234a3e959a430569f9145217de4190fe57ffaf1da9a33898187ddee85a9f247bb4c470835a1d27b62800864a5a09b257b812fb684c1941d474323c9f92ab4428906f834c0ca9808b60121b5d7eb4fa35404265bd68ba5f9f8a3ba0e7f9b4984e15004739dd574576dba069841a0aa397b315624b50812200061073850cef68f0800dfc2aff0ec5b91712ce5d4198051eba2cfd3b192b93b49db199e176f905b6f87811081883148cba917b016f5313354ba4ee68405584cf12df2dba62b387f4605bbe39a5721728931fc4e96e314e1362021b74c6d75959caacf6da87bd2dc386b229ca2c6efda8ac96ca5dde35268570a6ffb655d1364db9227953bb2bdaac175b69a2cb63ea3a778cc7c7f73cb1e7c7a37ddadce56b47ac904e8690424caef4e6eef976c194049256c2a88212a51a58abebe82fac051f62671921bf516747da5c899e99bbfa8b59ef0b9012f3d1d1fed840dfcdbfff0500dc415172b519da9afb74af38dec6713d9e0415610f010f016833ab3afd225d468db7c0695bb415bc2dbd27eadccce718b9d923171a295cd61e4068d1ba4a7cf17acd625ba12d954f27e85d835e2583be5c4c3ed911d5f04a2718802415094d584f2c5faf80dbf9ba6e7001712b24e51cc7e199c195c84478c72eb265d6dbea9ecbce230a99e0e95d6b4845fb37f1e2865cd95190f3274e8944f64978c4334b5c0a33c10cf10635620333a2713123c58d147ba354670e831fc08213ac35e38ca1439e6e7fa44095274f9f80b0e0ea8a3a6481670a3d3d0ee414de25b546e609d0a806f90b663f08ef951e37917611291d9c31405fae9dc644ca7d82ff47ffdce78ded68b18cd538c250249546b0a163849c6267c8290dd57e674108670e4dd299dbc6c4dd7d287de5da78195d7e5c80ab380089fc9b95dbde3682fa63d5845205a1ea54f3db0b95e15386d970761b8ec34a125c2bf98d9677463bc83f1c77f34d140243a97292c865358742f81e7329980b5a4023f92bf83e4ec0d81d9fc9902cd8914628b9e8bb6b7fe050e96792e2b104ba6caf64158cb5037314da63fca28891407a6259c80447744f5442239311abc11d32cee6d572a4336904238216fd5f304b1626c1861be1ba69ab726b80438cb8999d95c2f7eeb284198ea71e14329dcc14f31719784734b73659b4d0dc60f03901bb8ad63297fc34ae56262c7d48c040129d6560e527b28faf7699a70d0d9c1f9ecba934b5d4667b35c2ab7e54137c5d97be918438f54ab2980b5819b0bded5dda6aa9cdb237c7620161a9907d1e4b6324a917bd5377266ab5dbcb2854d4c257126dbbc3f46987c113bf0e546b6454542835b6b09045ed0c4f0e2df5c0f99ab91f8eec924c15604382225f2ff9c640f8219b4074fb5730335c00c665721de84730bac0c44a049a85b7f910b515c753b9a0ac35a5eb19c88c11d3c2978011868490a612f85cda7ae65a6cdf5c122e096f8edc557c2de1b987cefbf2dedfc9dc6819563e2c9976825c119cce2f56566bbc131a637b34178f1de2fe8b84f76365bd1ef27d81815ddaf5b51a36cdf72d639c23890718b0f45cd2df5ebe217e1a3cfba1b3110440828e0f47abf38591fe3b1ac707a8214b24dd1ed8afb504a061720d865dac87d1823a6411d0f34a5c0177ca76cf3042df41293c05b19a0b2eeaa7f9e7fe8f9f05cfb0f44268c91daca9092159ba4d45ea52cb2535963fe3102f0a0b695e369b2cce0aac942f2b968a056916fe91df68e594028a7035fd1b8dc76d95e79970f9b52512329ee73cd9638033e56e52c8eb197087ca662ba0e2994ad5c5d5120490334d773f1a44a15b1828d58bf0c5d353368f315bc6cb5fcb6b21bf9267ef101915155d6cd954dddd2706cd6d561d55959445274095390d25b8330dff17a591b4d100259f3f1ed77b08379e06ea968bac266941bc051d414909c3f0efeee020e6b5ddd35cd3e3233ecf25f2f2ebb15b409094121325988abd9adb5e3921662b665db780ec3bfca12de7cc98cd6fab6946a7be11808389410984c35131c0d6d2d0932909b4adaf311244405eb522e046d4245f98084963c08a2ecc136f7be4c72fa07ac1c2b678db3b40e8252c8033855918a44a3f9722584377b90f2e004d2fa3ffd57bdc828640052815b14153c37d0659ae528da0eb80274387b1d47c953026249ad84950e0f703189cf888b0afca8fbe471360cf7b7bf0639e8a24025023eed3214991ce24e15623c21b50d2162db0ec601030f2225ffdc196648f2ae82f8b12d9b869499e96521c351023ee52c73334b20577936bdb7ede5396bb902878538a3f08ce53d437eda749f969d5c1643cb5ed270f34c1724bfa19795ac28ea533133398a40a72bf0be989dcb9a9b98f2ea050e2d5fa8d9de3d14af75230f15ee80ad60ef5661c1c92d20419574a5f91ff0d48a994ea3d80a28d84f11b05516a3ccf4748fefbc61e5043b45af950c46a070fbbfbed92c6b7a191767b46e18fff067fac788605d0c36d054d4766d70bfed66d6c9dbc736849ec5808a33d82645a01c64de2e84232b7ead8f9d3a7d5d4201bcd6d5db74e90966beb60b75ebb0fad1b71344becf1fcf77ecc6c7f9bc649cdef47dbc2cac9f01a788e4cb89b950f4c3b21082e82c164e6140ff7f43660c57ccf25e02991f8805ae8e9551c54a148e5900890d9f41aca96fa32aeda42a9950903bfdd220d45bfca254c05665a831545fb23843f7b0c17aca4e2233f0b339ad4cbabe715a2ecb88adb977173bb71c1d6f59f9d54ac064a1a0d36006afdc1c29c8a9158928263f0f7ff9d5c409ef2749eb370f4a718c9589a49c7e91baf6bde15fcb872e4f2e6938c234c7519d181a90c927f28b8e55c780d279d6b19947fe0c5867008feb17f508b70e25882d82ffd92596b5b2b3762db9d67538aad0f97e1c7672aec783143565e7dbf3a066593ea62a7a4f920f7b3a0c9314f41a557d5726e2cd04692524ecadf92461c9ec654e3d93ce925ffeaa52fd5a3937f320287aac1b5acd9d301df18cf29833951634337d4eee167d0bf56c43b8e28bb42dbab374f08ea19ff21fa2dff9454c1f10300e734c87a072f244e410c478d94c055aaf27c18c742b3f8a219d07a86f7a97b0665443213bca9186723cd280ab01f2e94e3e7c3452922012aae9272198bbccd023117b1c954801a034f0a01b9e721fd89f9cff472a901ec622e33c74b3d3717cd98c60baef02b33922b1ae3f683be195c54dc9411c952d4c45f00eaa874fda15bd2d4c0a5b40a7a7e1232f16d2af9a50d722249f3662129651027b00c2760cf90bbf1b0689600f9076cb58133cd5d5a38f6efcfae07ea4c72b44121161d3c793be976182f37362d236df88508e9542a14770640bf0909f501ff653e5ebff5e7cfc7f9a016cbcf512edd5fee577de17e933f10f4f62ec2fd05ff9704972a6eb05db477c942bbe0adcbb963b34158bc3c5f985ce26aa967fed746da967eb3725e5593d337812f3396ea171edb88024fba2c99d8906970c7045dfdd2ff22fab40e610d86f377f9367dfa6d0e5be5baf634647d1470ee77c2ccd1447ec3af8809e1e585ec3a694be24b28486a3e45a0cb74e1ae1642299c9967dc57293db52971b0dbd9d24825fc9b34862d3f296307695ee786feccc70f3ee1d60bbda8c50e318357523226be32f8543f7710b64bfe71d60ef52e2a04ed1266a3664a3ddf69b558afaba77ec0c24f2ca48b5426741b75e1d5103776c29969689feaca262cafe652ef93a02a534b5f94652ec30df2583ebd73cc80e11e8e8dbf8d70494816a3507e5d0f6bec48202be4708dafa35b305d65283fb1d6b43d824083254dab8094f15b7ee2f5a7ab926fab91fee2f8cf4207847fca97fa85f8b5f736feb3ae34d912028de262c153a95f8d99d6bcf25ac1fec93c46fcc5fb8a0210841e4253cfcd500819ee1385c423ebe2f3e4ba75342e2e9ee40814c8d45f3143ea7deddd2fded7551931556bf9ddcf037d82fbce10af1da24c5c17209651742b93a0e04a0fb1f94d52e8bb4b402fd954a7486bc493050587f7b0701e9bb58ac7cadb6bb8b1d2c624c8b710849ebf2081847c661d8dd1b19aefc6cb326ad246140aa2d2b055bdeb10a886a1b51c697baf22a1936068768d556c890dc45b7ec6ed747442e8ec91305aa4e793aa2a50118584cf341ee7281d8b2e23a4150635825970c4e3692563d0f5ae085a71894f30cd55960b4e2e15cc635073620573daa096f65a699b4a58e66605d5f3a15ee2a0555633f41c2da49e170497d58fd0a8ae8c2fb4f032e22fd4ddd445617ff1434fcbe5cf5729cbe98862f7cf82189abee3926d2a6a3fb25bebdfd09a4103158a3db939021faa4cf6e4dd6c67137b314dafa815619d5c9d24c1de77ac10bec560a300c5b04c8dbccf766ec17df0d20c2977cafa94531f68dcba97c9b9073a33edec732a367a9a38fdb59dedb8e1548d5de338135e8150dc7efe94815125d072388d5b340299ea3832205c313042026fdba380ca3d132cd01637f995ca0fda83b5761aef4010fcf496e90be2d7c6a48968eae510c9078bca5f5a560d5a1ce6307c83f35edcdec0d873e3aa9dd5e12fce95a2c5f1010552efadcd93dad924a8e78aed04fbf1c9f3c06b8b035d433e9d4471e3eb4baba3b3f27a713db9f87198f103531a765e2aba161a49f876b8f2140db7fe211d620c946687e88caf52cdecb59d6a0a875f6d5738aec59149d9c00bcbdcadc16eb84d8f7eb1644adac9d741a7e2c6ad9fc4823c8b09b8ca90b52350d88bb8b22949b550b0c452431a0b4038ff7c00dd58f5d36cf3c0d51ee8420a5ca26eaebce67e05a85933cbcba3da847e1542c13eca0ad561af0eb644de2df9127d7b88df4d51c623e46bc2642bee5042d83f329d0ce44394a07ba29bed03712ac9958eb3b644b379fe0d2329784939b95e3cf580231475d693dd7a1f8da47e8b60cf944e53dd8198581dce69e7bf27b0e47861326234f31a5d0639e3da40407cf19afa797dc6ed2c6e62cd7972c41c09123ad19038e3cccc5498d6da176fa23b16e152be5184b374616da65641d7d4d7ebe76fc12834a14a607e6a6ac784575b5c58c83b13893f4726d6205dabbb1f46d0524204c35b3dba091dc50f85e2057830f662b6aba1451f98f6accc420dbcba90d9d5d68cbb0e8eec98189a4ddccf0ae104f51dcb02e8d2057816cde689e148af0f18aa939d5d81ad10d2f092aaaaf9865b020f4f42f173eba4cc5f7d3c2a929adaf0b107e24a86847587c7ad100d90d5f881fbec371387f30c7058896c029e4c217d42499843f468802b381a3c96ac3ba6cbf27f31a9fdb202e319c48ea424c0e9fabc9d03f310337f03f64cdb7861040e9aee2b5122ef46375d8a8661d3c0afb97591bf1161170e2b9cae3c7987282516e7c9905da6d58200083550749da418dcfad5102fcecf53bf2aa38e85f19f51f818166072f479fd41d8c2ebe1b0b196a7dddadee7298efa2102747ec7a9a5eb4e70f87d45696fb455eccfe0fec4ce3ef5b669b45c2dd1a8898d79b8cfb333c04d10804060845f658f3af4ed9b3afa0a7a899edb9b390af124a78f7db9dea72afe8f44baff3f20688d70b581280b6bf81067250a1a837037cfde993253420f3f5a013d5380dca58d4d2767901211ac967defc1bdac1a71273299183543890628d92c408bb0d03c2704a5372c58b602fe0d4bf73132c7816a0d5757b78dec4f58e6d4239b15de35d46fb7bf59a5713546d9c789fb92d2f42d623302964b480bafbadd3bf7f9f8ba58cd530fd3046183e34649b25a54b9eb41486da9a8ab0b823ea59d03a02d2435cb9c261d7cadc9b8705dd010ffce20239b7863b5a54f39ac46ed32d477f27d9df39bc0dfd4c4a095433a16ebc01a63c3f02e96c903901bb1e905e6c5b012151ddd628589dc922abbc3a05bc785fee1c1145d6cadebbfd5a6afd5ed1d1f804873c58b5b718d13425023ab858a35226b7213b5793c25a5353d7a95c7c3cd91b0d058f7ef8f74bb398d3a65cc07467f3800d420ee648c16653d1f9a3b88d425e16fdfbc2985a752553de5c1a9589fed68e94fb6a6d2becefa039dbbe65fa718b92cc4138314de74d2ba7d2a486d6dc62643b99e6ab8bcb2e1a90e212597973681df4eaad01bf5902d5198a794808e51a0d12b59bbda43aad9d6885716b666a7e24c3e116ca45265fe8dec9224cbac24b439af8ac8c0cb771dd3a4e6b06013d7ef4c3576df2767d46091ce80c57b11c2e0511504bcc18d6dc6a21c9d699f19e4df1f0b6d9080ead11857568ef96faddbff4130968bc320d5aa1d9104108a1ce0f3cc59a7d9096701dd181270f02a3b2c04f97e8f21cbaa3caab4789b54f4e9cf6cd9ac4de715f4587fbbdbbba5e72768077e096439f92d14281c36e1d0d8656112f1d5432fb70018601828b00a43a6ee1f43d8ecf100ab3881915b670fc731eed7b344ca322124cc1409d094872299bba7580aac9076a55986e96329dc5fa95b3d625e6f1bce6a8b4d09d885613f518f3ebbe72da7f45c69ef7d0eabb20167ad163abd8e325c798c92ad99caa4eb58bdab2ac4bd30acb1681ccb854267f6e487c10698b2d41fb855fa246f14c38addbe4fbde53cbc209e45349254a5e2c481694ad925f78b345463324a4a5cf8568c7a5828e748c2abcc96473867a0baaeb47c447762158eca60f64783a97dde504615079ccda949a5529258618abfe57fd66abbf07405394e9fd62ec40c1296c99750c9bda4a92650404ef3f804ddbd6519f9408bb943bc5f90d7a0b436cbc29edc6fb4bfa7c7f25e64babe616af48faa20216b7c110e42f53dfd65bc0d06465232426aae2811dd017865d8ca4d63f8021eaebaab5cc990298b1a9b1885240e14dd285c1f6de92665ff68d9a0ccfc3b152270d8730ccaa2c44ee6c3a219bce6c1701ae2ade1995aabb8790221cc2119ba8a1c7bc0462edf868c4688c853a0a3917348e2e0a225a1fea6846e966117a75cfbae383d408c5a2002f44a4608f6c510be6619c394d698688b158bd0732050fc03437304daf931b42d24e344995d248c039594ac2eb56a87f2df9b6de82e74bb1c0f7e94a20e51ffa049a08c7b79873044005e08c4d09ab8b1e224acc0a441e20c92b5e14bcc21d2c4d5ddd3bc8cc6917377858a0fb65a5b843edad2585ecb2cfd058fefbf1ab18b554143abba9975046b5d59c047eeb9aa20d21f9f4df1a7a1e487efaafc3b98090a1aa5dc6fff5174253a3e29aab73f79f659aefc770603af0a26edaaeb185061a359ef13036b4fa2d0329963ff6ef56cfcba9ddedd18baa7f4b0be4733b1d803538dc0bc88e91ff07669e08a3d2837c0446a7cdf0fc727f31c057517592982f5f769684b3fd8a22176a4483eeb777c2af1dd22648caba830015714094adca32349038ad2cb1524e80686973d860b1a7836c34260bc7450b8c19860fc9534e8a3e25a07eda60f532912d6a33483eb40c2f39b107801260eab4c27f1ee1eb5e95db36012e34f90ff30aa27dbaae02277d0418c212e89f496b441e0f1936fa635498c528e63acbe756b780aff8a295ba2b412125cb2cf70ceabadad132a10ada0c4dea8d8b105e8deb26b5bced66ea0e5736d5ef82f8bf1eda0f9c736102860174614e7b35e2bf793fdcfb6c0ead4ba0bb169d83b1dce2069477f42b355c3f0c3f4301042be3114e32201e11a770d78640e4ec0cd7e39f9a36f6b4cdffcbbe5451a8a04a347a830261d82760516494c7fe648c699cd2735a8f827ab780604f9ab2516e614c4f896e1243e4d43592eaf208011e59722e8c0f46b50cc869bc3071dcca0cc61f10b6e501f2a2fe43fa3e7532505f4d7bd408dde4516ab993b24cbe0c342c6a33c74f7a28f42812376389a3c8cb10dc9e7c64a4b277521d3602133507f712fb7e5a4a6200c198a89d6a1f35cb3f670bd14730c1fda204dd7d14380a4569ffb7087b3b53fe6d7f9dac17f2b10e600ca9d55c4e30d11196e0c3aa7c04ac7ca3fe7941c81fd482a8efb365e2ed0dfccd7cb345e2bd1e1ed5f336be541208149f20b3fdce429eb8d5e6524407f968e38d398defd511d0a156fd9ba40613338a00afd88826e90244222182f8ab9f5f4bc71b4220071671e2b9de0ed51b195da5fddf6a1d02a36c785b76ab28c847144d7577b9d14288c56b623dfbcfe1a627c39d72681e2bd99c9748f2d8cdf48c9856cff661b4d7d6a2bde8a08378fc911480fd61b22f41ed79f8808b5e958ce720899e3a4001d5eb55075c8aac6b2b037c3532506d5953ed465c155af17a5e6aab1db51f5b073f5565e830f5ebfc1787a8d00dc4eccbc144d2e3dce9f426c90b2ca8bc0ff79c588dc2ab16385519f20e7846954782b3f023ade70ae957101e3adedcadd15f4aed5a79f30e605a9c196e387cdc491f442a8f306131b90a59b0f47316da7cc5c8a7507740bcf52ebbd7dac2c2584abc3eb27ffcb8c137ff50b1d241c83c218f942307002c917b9cbf0c43808008b1bcef5c7e33361f8b964b5a97b4a2b1709290d9684ee86d69293b1435860d9cff820b997775bd734efaaa738bcfacc637da969698489017430f4787503562d8a34e4a58db095f9f1bda113d9c574e12642b07d44a9dd6f02f35750610fc37ce19b4cfd2dbab0d49804a3b49780ca20c516dca92460f988e9d1f94d948f4fe45b3bfcf53ae1c0fee28440c0361779cc77f1213b45c23d1d22fdc5fdb308ecbb2965aa30b4c731de5a80502009e2cdefb8e14dfb35a6cb95528ce48bad04fa2fd7096d3502455e9fd572d6f299ad3214be73f6c8b8a13f0a6f1cb689c549a5d8ef8118e3ed685637c292c35ce3dce0908f56c1f4fa71a911ae362b371acfd16c5a2ac5bd3cf6af6c2694cff8807aa0e9f6633adf17cbf3527f790500fcfedcf809bdb9cd2096686c2b1bf7c8b7a29fd84b9552f61abeed25956201b036642de550fa4b91a35206d7b6444b6e97c89b2255836106707854bda7401b5d3742c36543c9f8e0c74f382c4c924ff2a7d143de8c2ffe0680cd9ce13bc600030184e10763018f161c63dc8238e769935665982b607ba20334a8995c87384af7668b4d7a107052f503d52a2753f4e78a061c5526efab27ff3b8a516378190e7fdfe0a8d6d070f43534b4a2ccc826acff002519d48bc7b41317ddec4425a5deae2b9fc2a943e0cbe4dfa844fb1816d7aa89bdd9860e329cb8e6fcc395266a7022296056a37c4c00661a4a034d457318ebc204caf7e3b255b862acdf5bec62d9dc97a4517b17ceacf614b64fbd3857265d7bfdc5e3d7afb2c85d0afd3e13516a3da8b19ce15f5ee8373e6ad7954adfd710ff855ff362bedd47974fe8438394c63ff871a2de5ae246ce0f6a2f20fbbf932701130823d17b747eff5c3290ed8c130caad1b48d30441b5ea0ddd6394a159a84e188d8d8a55ad7fabb604f4cc29ddb4d4b8407becc7785d5ebe7f8786655abca194913e45a1367c9f46237dac866f610726aa932eeca503f68bbfc2caddb7d6ecc3ffa92d44bfde8e468a9569cec76fa6af9531bf9f3df56c7beb28e4b2185d576865f7bbfa4db6dba409f96978e3c2fb51c0b76d289f8c66f90fee8642fd580f781a8b9c1130da103d67383cf9b2dd5cbfffbac96eb1d87209373db8ddbf26317452bad434aa4bbc047eb57304a358a523c9f83c5f0abad3107e657ae1ba3f6f0c8ed2fd760b1487e23c636335ddd7fefd464117396e228ad91bd52b5e23056e6f2f7007d83b21f9d4d9e34ce9f94f2fbadba6ae693e422139e4083cb9ff50ad3de0172a6b923452de62c4d4e4916465ca2278ba1a2d03c7a873ccea4fd0d4061ef22eb26b6e72b1400555255cd1718cd8018dfdbf05c2c31e0205b7c3ca5e0afa86b927b1d5ad382b4eff8a076d4b10505db481e4fe2a0495d5d9d4cf6810f226b12a30826ce3e6a54e41fc2cab1b96a7e2d8e645dd8ff0e651a56e9cf41dca0c63e70838768503fed7a20398a2000bf1bf768c281810b8b8fd5117f819a263f050699d4b0894f16ed2f49444a5b4db11b8d622d78c2c1e760f4331ae4651486342bd84991baa408b1c684bbcb2ff27bdbf61c2d900ee1be42aac40d7ab07e0dfe11fdb7e55c4deb4448cf1c48d9181cc212d81d77c4da33d9acb82655157c3da4f6b6f3d9f079cdb18a91c1da7dbb4ef4a7b736d8c3ac3a6d70343aefdd056892b0fb6a3beaae773c34422012c0a835b8206f48f0efb395cdb7a0a1595e4a2688e7605116f90d47cb8f74f4e5600c157acadb087dffe360d9df6b3a8e750c3c39076fccd8b188e2d8ae894fff96c71c03c64976c467e0f39cbe46d304e2e8727f9199dc3273872e72d94f78126784616b142c470b71944f7f7b4c617681236fafe8f2c05b1afa257ba437ed1aa1528e33110bfb4585b9e0f874be52a58a09c2d50c6d6f8aebb3b427d11a864b39e075a2687540d31c7905cb49346362019d5d9595af5c6b0b84c8de5c41f009e51c1567f293dcf191082582575692e0d5c4004a929d28f9978625d3f9096801b689e3b832e6323a1cf29b8bb45dbddf7ee9dbee4a0ad54b19e8688c8b8a5064f0a8580f67d7f2d01373d94301a3964647c3ae7c02a325fe7ddb522ccdd1fb55dd5043226033e0a58e3bf2ba46eaae92e40cbf7e71a8150c26da35c977616602860e59d9f703dccb6c538483b484a7041c6f1c58da00cc3c683622ff95dbc5799b5f4aeb773d61ef5708057512014b6de235f82329bc51312be128cf9639cfc483a3abe1f069f43f475c457bc3a9651a0a00f0d69dd411ea4681c87b2548d17e9002f95b13ed39a41213da0d3a55d4c25e3b62d394997ad0c6aac2efd323bcd89c8b4c6bcc10ea8b8b5726e7c1d5333f68221c386bddd1695288203988b0ab55b1a09fcd4421602b8e4954560747963fd0f714a7fcc4f5b942b72ee2230161401c33155ce75f10a799a7cdbb597b7f7760a4c3720af9c641e1743b027e4e38f6a5d32dac307a1ef659bcf43b3f0cc54842f1b8f2573b4148d14784224bd054822abb7ef078165c618452a336a45b6d2a5f104b7609c1ff2d82be77e4d41c9e480648b09cf30c067a6cb240598c56a9c956865cedd68cbfa5ddd440ee556c2bc17575acda66d136fadac82db6cb56cffe40d956d1b75d72a54dcab4c97db7b8c9d7e68153e131e3939680bcb5ac2ae0b1f0e7e366cbdc1a4bd392b0f142b79fa6256d29a6ed8a9f26d1b5431f089eeabd6e53c9d67d7b4ae74533fd3ac652677ed718f244a6b4ab80811ed85a09cc4b93424b69b47a1e7261dc55112ff10f19f1b3cb25dec547028c3ac540d20019827091e06ab235783454e590eb79c6e075a9c5d466445570c8a907d8d385d11a447a82e6cef94de42dc99af12dbf3a74a3cdc5d2d63421b4e0a3686baad86ac318773b5db2e7824f838ab33a465e9a3e1d92a6c6f177034bc4640cdb240ecd35088617e4c7fe5be40f59a6ae31ac6ddfd65efbb4e849efd0158353389a1a98e24fb38e6e6af5bea1c352db54919d0b0aa739952d0db60e5fe5ea33ad978a4ebd263af15bca7207e2be682935a713644ea838e4a6dee7ba80068ab7995339386fc1a33244d794585523bd4c456719e37314834a7e620c2f0fb0a1a2b5d9ef019204ba8d3b36e79d349c389ad616432262d1e9000e312464b684dd36860cad3071402cdc1e5c682199293fe9ad7cdb3927256421fe4b8420f6580ee08396185797c24da5a698d300539a695d2ab7a48b66069295b87401e390302a00d321dc0a731243da2585238d4239ae01a7b253df894e7c07fc698374ead18959fb384e40dadb45875824e14693d24fa7a51ad282a6d829db3476a38b844dd9bef1a79bdd1f7ec1d3da7411a40bca06d30a2e4d17651db7413481992c81333be5b74511bbca714cb0fde9bd7ffe42bf34b140cd43969219d4d7b34f71cb697ad02ee0e8202a1acb35285bb3dedca0f49e0e4b99a932313346116fa94a3218520aa672788c05cd4d41593f8c6ebc472772cc34e33afe71bd545a50e767adee0d8491bd6499ac02d66eab11234b95f7665cb4ac9580c2d56a7260a99417bc6b741975a19c2878efca42d60f1d961f9d0f03e412f118523d20d8bdc6c2e994e9432b19f66779096e0e55a34786546cd0838b62f9898c04ab7382a6b506a376a17520250b8b9ea8b3b2e8e47e02f3b6761ad7552b19e6e840e9665ccfcea156659df97ec5991cdbb663859963fd460e3ccd28eabf02c5ad006a3755333f502e25c301cfcff033fc0c3fc3cf0cdc5a4f9c776134566b2cf886378da0945252f222b1e88345660c6522654a52a634b9bd6d8f4d97bcb1bfdd92c7f794042c0307030903be85d49d902aca635a7864738d5e924f257a16d2a059db5df36ee51b0bc7578bb2909131ec7c05efdd2a95d2a4a13eb6822593ccbc71c75412a72a204796ee2cba83f42e5141cb24e5b4c56d866aa790f65c329f7bcaa0d4480a88c9f97821d5d2d413857357befbbc8ae1d40a054e44e9b5704108d9c92798d326d54bfb3a6372c241ae839abaecca15d304bd628f0a33f958cb3001e1416b7f94cb1250a6cf92b23f91a2539480d9e9d8cf392509089952ac16e57f42589090d62876496b26a93a1ea1b8ad6b32e6d55132688474b4639015744528a65ed234bd5b71734428664f292fa660f3f3101acf5a2a148295953a5f3de9af83508bc8750d3a88cb20209c3e3ad5378459a8f6838232970be6b9b2632512121282058e97a451790cb534eaf367231234ce61d3e59379b35eaf18909c519eff564eb25d44c35e487c70cdc7703fd9d56539490f4eb9572993c910329f2690f0201b65f9f2084f4ad9bd03fe4f065beb54077af45ed3b2fec1b22d52862407e891a38266bcfebab8888d911dc9820c89199712f2dc3be9ae27130e944ff264676f60f2baccbfa633e56f919010890d968d75afe29ab1e997d4a01979fa6d1e24a1c1af7562996bd4b2fc92324c4965c820d363bc8b92196cc153cef6941795ad4406285bf320e7b3a639934848c8881738c0080991c4c08b97be36e76df6de2464243a9b0a4f7e75400283f7aed45d6edf66382563d8193c77c663919010498fc2dce6eeb1540b9053ac415abbc78ed6f8bedd14a520c52844110a9397e577389d081658a0600427b80204149ff0442738b189da368b86d033e2971a018826f8d2a9db3d597cdd688b7163470a4032817a8da373f56d398a748c8060c2b224f495a850a5691579cfe15a7807402e514e676b32a636b1538bd8b01112b2451616f8c01619e802c412e94b5379adef774e20952898ce3e1932ea23367238169c63070e11dcc0d1616c177bc50808256ee0c0610090492037c72447e94644042092b0accb631c994c6965402291fecdab71741022d485032090584664e89e8d3de20f25ef2aacd3a8f869b1058823ec97efeb0edf92391d064823ce1c3cfc453e3e8e0684117becd0b054392daff1d0f18508c822bcb002b9e7aa0cdab37a8dc8a8358c325169acb38761900c1b53ee86738c3b3c6c0a1bbff71d9cf43845c23d7b3ef456fa6d4c8130f13a0bb6950219e37ee9a4d2a4f8da2bfdc4655fab388aa38989a913633a792f8ad253884b1156229434147dda5876596dc459141465958b6147cfb867fd892c2e67318f39bd78d813557ed11dfa5d9d3dd4893c2f28a54df563a82c2736612cad2542637ddc4f69e2595336a3b29e09544aef0af9494ce4d56126666577317e094b49cd999e92596ed612e7312b55dfc9a47f58094a28f3a3f3c99ce29a6336ba904c42129fb2f410cd594924b2b4b3ee9b2fcaff06897ced2b7b8fb6b0bc1ef16d5586b3f7ebf8b123165de56bc2ab32ec92805c51924658eac14f488d6184a279dfa2f65b4452475db0d1bd224a3d3156b69e5f9e44a0bac1e33e45ad73458288b386337f31fb2c1f3bc41b96826a8ad9462fc710b855f6ce499c8ef37221ca95c7944e41566f6d0851cc1e3d74746e590f0fa2385a12843949cd675f9ac29934107ed0725145de80502bb4a4f785ce7dbee40f697d0a7dd22b47c8e807c3557ed6acf7a53301491f90df16b6bb53e81c05247cb8c48793295e36b2822221215948f6800acb62af95630cfad78323f7e37fa71caa6fe7a1cd109aabf264e3977848449a8c9a422e6bb0eff0f9d96d1272b4c31a456e1cefd0159455871b3870d8f022870d1b0690d021a9b69ab2ce7257a888a0640e48d7143cbd6bdc4c2d474888440ebb8ebda91c95b7dcc6011db4f2c9946e091c6cd8b0d100c91bd4f0cda45d9955550681c40d85df7013153e72633cc285a40dada59453a24ee7ac4e06246cd0e265f1eab290acc1b23c7fdb6924121232c2c35560a3dd0b891afad6f511efeb5bdae8f51c5f48d2a0c7603a2a6b4ca39b1234e01a3f9b9b854ca69a339446b49716b1e4d5b1c385c40c88aa2599d358b2b0555286bc3a066d0d27eefcf480840c289d748ce77125b5a45648c690d81c31d4bfe9455fdae6671c475a0748c2b088f9df99f76078f3cc9cc5e77042a75f409a5c5025ee4698f95e30a66a1017fa77c15431c8cf67c7f4990b7b96e9de6a03baa68f8e1d5ce8240f6577d315dcc29ae0c1bbd20d9327bb279f3b70bbbfa16a36cee73d8d891dfc51df2264bd9fbe6708933a94d3d6747c8e2ee24374b0820eef2eb3a736b81598ccc1f9e0bd4966bec58ce5b07cb8cdbcc62437957148d45d4f4d9dff7e98081338a417845b3cffb1159310266f70eda3d7a6a062d69f4598b861519e93b6eaa85322e7491bdc58952a4aced967088cb461b818383c70c599b081f550ea224459a8cd238c2c42427884b1365983d152cc4a4149f1acb7e08bb7a163a286b4ff2b6ae975639206f7c72a76da986a2dc7040d588a0eba36357f1aa5c9198aab49c46310132666d0d2dbd6a873357da333266530cc257d9ef793c19225fda2a7459bd7c750e60a71db188b01f990262e9e874fef8401999b3237c5130ccfa54db1cc203257bea0e9ab7cfbecb85fa917eecc29961ca5d67ccf2eb87e63d14c84eca8860b7c906541854c6bb2e11698cbd1214f8a38d14a0b66e58bfb240b59e5981935132c1c34655e53e69c726a2657488bfa0db6c1ae456e05a4cba7ccf4ecec7815b0cf41da798e163353a14db23a6cfe3f85f2b6b8f6585e91d74b41bdd937b91a47a1b3b2cb7cb3eb4198a050589bd3e35f7a02224d099b937361539c90d44e329fe71f836a9b9030695d23aa3fe631610db69d830a3b261b5a82b9947e3b15f9975d096a799c69e68a26370966be989469334feb394840750a428b4e4995aa8f70b859b37431768d258d60d0709dfd3ca577098b804a3936dcc2234295b339a86f6d087f85cfc5c56b2204b4b2e436a57cebaa4d82808c6aea2cfc271212320142b1dc4f479371f283ae47b86dbc089d1f9aa471854a597be242ef8946266814f29fa3c29ff250f2e48c2bd4464d2aa6de131fbc9d4e8c2a9de92a5b78241b931e58a363bc28ea4c7c9299f0e0cae13253d0b4a4c363b203934ab1747ef8d54973a283ecedd39cfc391d73d024078b884e4b5b9e71fd9c985180090ec4b8c137d0e12336e02106dff01b0498d4e08b29c99059f2e5e9a7c1592cfad89598ef682ae3cfe19e3cc5d6e88933b8bdd4dd7654dc9b2603b42c9e56fad978d08981091f1f1f1f1f1f1f0048000352f0f1f101800528e0a3478f1e5b18f9428c45c0478f1e6374e1a3ac406645116064470e3096050490945561aa8abbba07803c8007183a44bcf8228c2aca8a4b2b0c02ac6364478e01048047aaa21d011f3a467674210000b817bbc38b30160c0304602487f38ec691438c037cf4e8d163111f7fd2df93195f9d4c5cd40082c1535aaddc6d7e127f90061a67a45bbddc62b4bd7b17f1411af384a5ef07393aeb4126d2c7f74cfa5eb44478b0833dc59c3f0d6da264c9811a3a38dac71153abf9935c39e86d33e7d3d83f0b6fd430e3b441bb3c443727fd066ae0609fcba32e9ace2c7a066adcc0068e273735190b6fa5a7e26ad4c02af328fa5f63eafb6980784f353e4a7eefd321a851c61aca3d76fb326a8704356690a84feea92a7f2f7eba860cb2ff8acbf952a6acb7460ccef0b7225c645fa9ba6a90c1fe884bfe294feb58a0e03c400267c709a8303560f0a9dd6bcdcf5172e61a63f8999216cddc25c4e2357a60192bae4b2a36303985296719eb60d9c305cb161353d44174f8ac9c361f590526a5285fefd6961c0bc23463428a51943d757c1a9939785a73b80a72e028c144148e4c624fc5ce22119884620fadb05462633aa913507cc2135d5cbc5786454b59ea04273681f6135febb249066ba2894f46afa07e7f54fc91482690f517b9de101af5c444f6d9be293886c925aee04164ca792adda32238b184fae6e735b2416abc934aa43347b592d3f59f57114a6c49febd5efa8db101e3733209845da512e579ac3291849544b7c734b6534c0293485831e3e5a816bdf435818473d1638c951d25c349848ac9236ab7b4f6b05984f0a823d0503ea31aa746f0c9f492c67bd24189462e306144a6d679948996bab44c16f1498b1dabb0e19d2b2a9828c27a1373694977a694d76292882bb865ed60427f9f5c840a104c1071d4a4b4e5b27d5cba9343282bea6ee7b3751d577c21060ec631310496a69ffdc635efa92685c07763d0aa6271765041084fc5103277f6bfee8a603288aa2ae63a3da5a5392988dc34b5672ba549209cff91f9c3fb5cf64c00912c4bcdd97def73957f68b73f74f452c55f9f03133fdcae9becaefb4fd8058d491f385dbb99fdc7c42d1c99f0c1cfa1936b4ae29fd5ef01b1b49cb5ce39a62f78c18d2f4446ac58810b5ca081891e0a9d960d82e8a8624b8a6220630c21861042d02c49633209120403390ec34010c4492ef9124040318a043106822004421806420821c810420821c42142083146e8794f6b3808b2c57be71c549c78eecbc0bee9f01cd7df80c4b13637909d3c448e949e4db161aaee42fe308603ab5b4144477184e2707ae432cb540fae6ad8a6cd52af599d3da088c2302b1fbc48bc5af330e6a452d9ce540efe61061714d3c20ff664eb92cafadd6e8273dd4acbc193b9bb0a2191f382ca7d929ba4ca962a679aca8351cd8f831b88584b528666661b4b33247ceaebd2907ff2501549b6e9a20d5e7e26a2ad972fe1c4f5c46fa2c7b720515efa0cec0124295c081f2a37961831ccab8b31fc22bc70d590402592b49a39c169825b235cb0349a7321cd3d677367576f8076094eee0cba9af023c2832399c78051e05af3b45a047ad232662636fab8747533b58dea150610dc7076ad34e72000b22af29333ed9480a7439c0d2c6ea3dc902722c0171225123485266ab4f0046a9c1bbed06502f94c882510d96740282c3247eac69026eaa4e22c310be3932905cb564a3143a563ebf531969509994cfc449df9d84be183c30b78bcb398f36101ee1a336dc72903f460b76871b8c18f8f918bacc1ff411c4e020275914c51a06b54d2d0432db9bedb9d12fe1a89b4733a2118e1242093668228e71e150fc4b423b53adeb86c1233def091992f184548a4f3ac31d141c550240816012fadec9d9987f01cc42d9745ad1d89e77a1bd306c445e2f22449a5b5d4b8388fb044dfbb23200aea8c414db4ce2ad6df9e25c64a5131b56129ae6c96bc46ff450e2dd0eaa57b9207eff8aec7a0f2c94df78507f1b62872752602366da7206988d8b33dea565ab45a370cb5eac7dd50d8582bf09215022ef1972ce3c12a9c05bd1dedda001538e737d9b0bc7936d717e2154a139783107b5013696bcad0182226a9a14bbd08b6c7162b8d7a801b4d94c0814daaf18a3000fa4eb716b5ce264049fc7c26c9f4b9b3a34fb94e4243879a39d26cdfc353bf73c5cafcbb842bff4726a1c7f0511b19a4bd36de3926177cb10c1112d667f1dae51f08bc45467c50eac6e478714f7c0357574a34ffd9086ad65bd5f31503fd7666f43bfa34da0c1c961a9a4e8fe12f936c691fa9a525c832052d8af978258054780f95b796d2466280b97488083df98c13143a977f51234fa763d96050a4669858ac2156e2f037d93148ce5862c42f41ab0ddaa2311e7f69125ed71710d3eca5aef9a99f605a68baba910e281ebe5f17e90686b5c1e5a881a6ed4bf0e8d7ec495ab225c90f7f27894f53f6e40c451209bf49db54eae86189e82f2c092a8d4b34522dd37ad2d0639945c4da578c7d6d40c272dcf81ba9b4c5c23eb52185f8ad04419fe96fdc3c6bc84828def65ecba0d9a2d9ad46a81b52d3bf690c28923a104d6d0d3c63b8340fb4078bc640f88a6e2d8c687911477595f7a58284ad79e986d31a598b2673a0b5050496c83dd04a29f552b18d58c1da4395784facd6fd2a4c7af0808621d679f659c6f6d614b137b37e96a6ed34533ab2ddc38d52d79873fa6c373d73f564a9d2edeabca5bc7b4ee0c49fe152779410ded954a79a0e407052aab73e9ab3a59c68608c47e562509e24061b2140002d78cc4270b51ce892d7a083ae94954fcb3b34daf7eaf0559092668a3eabb63e1d591c20cbd46f5c6c086941334709cd1308b8c4360a4411fea6b815136870df46c2e61e23ec36a501287590f631fd4a1b9f1ab15f937e83e64a2b2c044ba3c0565ba4b53e9348b06846497018700b8b7998c1f6f9d798e6a9902b6551c097926e576a1bb51e767bec285df44b275ba73961cbf49b02053cdde6090744ceab550dd00fb8c5a9239bca70a4804f38d6e158c1cd5fb55465011393acc17545de05386857d4aae7e798884f7e8a52f4942af16c39ddb44342c608e752ed3dfac3288395fc9049a8f5adbaa586be8d95e070a2812308829474f5f2cc881661d3b87f79a64849a2190f9bc832da92521c7f1bd05d4985100d77f2d8e7f60e9c534147e9c3c5c1e1dcc67447d14864d6ead2ea04e5194ad440ae80233f317afe8cdfeac692cf545882f4e2f31f1b1740630f5474f6f072712cadba47f9c7080bacc298200dd3a840e3d9bd3c14a59ff319e0229d9349a9f32d3f6168b0e55337ad568cd95874433303c9dfc3298a2b3595f6304042266bfabd5b92f187e44d08f551a8923ef241d50031aa98c54c8213388fae75557cbcd95757b3b0c9c6ef1c16c529c0128f71d64d9659e2257ea9881855612bcd42853d4724f12dd2458082ed79649403b0384a7141f26ce8b490a6f3d80f240456c8a15c4eb2f9fd513369fee30dee07c64d86bb1ad44aae2c5178a6df34ccbf5038f201c4444150b78069583fa90702a1b4c50e830cf87b5f9ee30f9cf33ad44e11c7ce711d69678873e76099b544c429ce13f518f04811ceac399fd3a0ff987f269c23075d1e1c19ac823cf2e96e4c197d067a3e441bb262956dfacd51b7085c439a2105b59d5e2dc40126eec1bb3ffcd17482032b61b0334836f7d755417300caf4872b84f313a0959a345a9d9eafeed419d18b02549628594a78b704999ac88a2a25fa848dad0d8447a87b5da0d0dee75502c38fbcb340b7c88b209c02d435eff6cb1f20774c522691842ca7b63b6c8060aee4bef946cc00eb7cde4505d61ec2e94c03a06b570d911d07c453594604190de9a3a9b492902ca3f620a634ffa8c2d904d5baa32a7cc3df00f3d69b9f36aac6477bfd813b1503d0813953be43576e2f6bb17b521a5052f75b8d005d5f22284a28882de3849b996456a34e651146cf710559467f58017673440396b186afa16bba1aa36a3200ee4dbd8a8772c9660880543022325becb66a5d598453fa2b34cb686ed23ead8fe5f3f1d1f69788c59e8322b5339329b41af00f91a04b497b7198a31b868aa152564916ab515c492dede74ea0653cc4098ea394aac08fb0d087b36cd261680d2db593383a92563c5fed8c48bc3c013700dc5685a09b246f6ee5c7e4271d944eb386d7d78058108f7026496cc8b220f98e45fa5e4e06f47b030810a01e26ad97c6dc4e78b8c3baf92120d4c801744ea4cd40bb69f31b9c664dbcae3d1809e969853750a0bc07f1e19b3c7cfba56753b0a82d711cc07557883fbb27c242459a0629" }, "genesis": { "raw": { From c177614a59a6aa007b5954196e61bf56bb4ba1c3 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 24 Mar 2023 09:54:26 +0100 Subject: [PATCH 018/103] build: switch to released cumulus --- Cargo.lock | 753 +++++++++++++++++++++++------------------- Cargo.toml | 69 ++-- client/rpc/Cargo.toml | 14 +- 3 files changed, 467 insertions(+), 369 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 218dd78ef2..e54969ff09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -205,9 +205,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "app-promotion-rpc" @@ -249,9 +249,9 @@ checksum = "22f72e9d6fac4bc80778ea470b20197b88d28c292bb7d60c3fb099280003cd19" [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" @@ -305,7 +305,7 @@ checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -317,7 +317,7 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -329,7 +329,7 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -346,22 +346,22 @@ checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "async-io" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ "async-lock", "autocfg", + "cfg-if", "concurrent-queue", "futures-lite", - "libc", "log", "parking", "polling", + "rustix 0.37.3", "slab", "socket2", "waker-fn", - "windows-sys 0.42.0", ] [[package]] @@ -375,13 +375,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.8", ] [[package]] @@ -423,7 +423,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -580,7 +580,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn", + "syn 1.0.109", ] [[package]] @@ -718,7 +718,7 @@ checksum = "723da0dee1eef38edc021b0793f892bdc024500c6a5b0727a2efe16f0e0a6977" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -750,9 +750,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ "memchr", "serde", @@ -840,7 +840,7 @@ checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" dependencies = [ "camino", "cargo-platform", - "semver 1.0.16", + "semver 1.0.17", "serde", "serde_json", "thiserror", @@ -923,9 +923,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ "iana-time-zone", "js-sys", @@ -999,9 +999,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.8" +version = "4.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" +checksum = "3c911b090850d79fc64fe9ea01e28e465f65e821e08813ced95bced72f7a8a9b" dependencies = [ "bitflags", "clap_derive", @@ -1014,22 +1014,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.1.8" +version = "4.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" +checksum = "9a932373bab67b984c790ddf2c9ca295d8e3af3b7ef92de5a5bacdccdee4b09b" dependencies = [ "heck", - "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 2.0.8", ] [[package]] name = "clap_lex" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" +checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646" dependencies = [ "os_str_bytes", ] @@ -1084,9 +1083,9 @@ checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "constant_time_eq" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" +checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" [[package]] name = "convert_case" @@ -1379,7 +1378,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1403,7 +1402,7 @@ dependencies = [ [[package]] name = "cumulus-client-cli" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "clap", "parity-scale-codec", @@ -1418,7 +1417,7 @@ dependencies = [ [[package]] name = "cumulus-client-collator" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "cumulus-client-consensus-common", "cumulus-client-network", @@ -1441,7 +1440,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-aura" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "async-trait", "cumulus-client-consensus-common", @@ -1470,7 +1469,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-common" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "async-trait", "cumulus-client-pov-recovery", @@ -1494,7 +1493,7 @@ dependencies = [ [[package]] name = "cumulus-client-network" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "async-trait", "cumulus-relay-chain-interface", @@ -1517,7 +1516,7 @@ dependencies = [ [[package]] name = "cumulus-client-pov-recovery" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1541,7 +1540,7 @@ dependencies = [ [[package]] name = "cumulus-client-service" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "cumulus-client-cli", "cumulus-client-collator", @@ -1576,7 +1575,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-aura-ext" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "frame-support", "frame-system", @@ -1592,7 +1591,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-dmp-queue" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -1609,7 +1608,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "bytes", "cumulus-pallet-parachain-system-proc-macro", @@ -1638,18 +1637,18 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system-proc-macro" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "cumulus-pallet-xcm" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -1665,7 +1664,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcmp-queue" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -1685,7 +1684,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -1701,7 +1700,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1724,7 +1723,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-timestamp" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "cumulus-primitives-core", "futures", @@ -1737,7 +1736,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-utility" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -1755,7 +1754,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-inprocess-interface" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1780,7 +1779,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1800,7 +1799,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-minimal-node" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "array-bytes 6.0.0", "async-trait", @@ -1840,7 +1839,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-rpc-interface" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1869,7 +1868,7 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -1907,9 +1906,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-rc.0" +version = "4.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac" +checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16" dependencies = [ "cfg-if", "fiat-crypto", @@ -1921,9 +1920,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" dependencies = [ "cc", "cxxbridge-flags", @@ -1933,9 +1932,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" dependencies = [ "cc", "codespan-reporting", @@ -1943,24 +1942,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.8", ] [[package]] name = "cxxbridge-flags" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" +checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" [[package]] name = "cxxbridge-macro" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.8", ] [[package]] @@ -1984,7 +1983,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 1.0.109", ] [[package]] @@ -1995,7 +1994,7 @@ checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2021,7 +2020,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn", + "syn 1.0.109", ] [[package]] @@ -2071,7 +2070,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2082,7 +2081,7 @@ checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2103,7 +2102,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2113,7 +2112,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" dependencies = [ "derive_builder_core", - "syn", + "syn 1.0.109", ] [[package]] @@ -2126,7 +2125,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 1.0.109", ] [[package]] @@ -2213,7 +2212,7 @@ checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2252,7 +2251,7 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2347,7 +2346,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2367,18 +2366,18 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "enumn" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1940ea32e14d489b401074558be4567f35ca9507c4628b4b3fd6fe6eb2ca7b88" +checksum = "48016319042fb7c87b78d2993084a831793a897a5cd1a2a67cab9d1eeb4b7d76" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.8", ] [[package]] @@ -2424,6 +2423,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "errno" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.45.0", +] + [[package]] name = "errno-dragonfly" version = "0.1.2" @@ -2532,7 +2542,7 @@ dependencies = [ "proc-macro2", "quote", "sha3 0.10.6", - "syn", + "syn 1.0.109", ] [[package]] @@ -2541,7 +2551,7 @@ version = "0.1.0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2612,7 +2622,7 @@ dependencies = [ "fs-err", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2657,7 +2667,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "thiserror", ] @@ -2838,9 +2848,9 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34" +checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" dependencies = [ "either", "futures", @@ -3086,7 +3096,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3195,7 +3205,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3207,7 +3217,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3217,7 +3227,7 @@ source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#18 dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3298,9 +3308,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" +checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" dependencies = [ "futures-channel", "futures-core", @@ -3313,9 +3323,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" dependencies = [ "futures-core", "futures-sink", @@ -3323,15 +3333,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" [[package]] name = "futures-executor" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" dependencies = [ "futures-core", "futures-task", @@ -3341,9 +3351,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" [[package]] name = "futures-lite" @@ -3362,13 +3372,13 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" +checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3384,15 +3394,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" [[package]] name = "futures-task" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" [[package]] name = "futures-timer" @@ -3402,9 +3412,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" dependencies = [ "futures-channel", "futures-core", @@ -3761,9 +3771,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.24" +version = "0.14.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" dependencies = [ "bytes", "futures-channel", @@ -3800,16 +3810,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.53" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows 0.46.0", ] [[package]] @@ -3875,7 +3885,7 @@ dependencies = [ "rtnetlink", "system-configuration", "tokio", - "windows", + "windows 0.34.0", ] [[package]] @@ -3913,7 +3923,7 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3981,10 +3991,11 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" +checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" dependencies = [ + "hermit-abi 0.3.1", "libc", "windows-sys 0.45.0", ] @@ -4015,13 +4026,13 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", - "rustix", + "rustix 0.36.11", "windows-sys 0.45.0", ] @@ -4131,7 +4142,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4206,7 +4217,7 @@ dependencies = [ [[package]] name = "kusama-runtime" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bitvec", "frame-benchmarking", @@ -4304,7 +4315,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "frame-support", "polkadot-primitives", @@ -4458,36 +4469,30 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.39.0" +version = "0.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881d9a54e97d97cdaa4125d48269d97ca8c40e5fefec6b85b30440dc60cc551f" +checksum = "9b7f8b7d65c070a5a1b5f8f0510648189da08f787b8963f8e21219e0710733af" dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", "either", "fnv", "futures", "futures-timer", "instant", + "libp2p-identity", "log", - "multiaddr 0.17.0", + "multiaddr 0.17.1", "multihash 0.17.0", "multistream-select", "once_cell", "parking_lot 0.12.1", "pin-project", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", "rw-stream-sink", - "sec1", - "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", "void", - "zeroize", ] [[package]] @@ -4525,6 +4530,24 @@ dependencies = [ "void", ] +[[package]] +name = "libp2p-identity" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a8ea433ae0cea7e3315354305237b9897afe45278b2118a7a57ca744e70fd27" +dependencies = [ + "bs58", + "ed25519-dalek", + "log", + "multiaddr 0.17.1", + "multihash 0.17.0", + "prost", + "quick-protobuf", + "rand 0.8.5", + "thiserror", + "zeroize", +] + [[package]] name = "libp2p-kad" version = "0.42.1" @@ -4713,7 +4736,7 @@ checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" dependencies = [ "heck", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4734,13 +4757,14 @@ dependencies = [ [[package]] name = "libp2p-tls" -version = "0.1.0-alpha.2" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9baf6f6292149e124ee737d9a79dbee783f29473fc368c7faad9d157841078a" +checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" dependencies = [ "futures", "futures-rustls", - "libp2p-core 0.39.0", + "libp2p-core 0.39.1", + "libp2p-identity", "rcgen 0.10.0", "ring", "rustls 0.20.8", @@ -4941,6 +4965,12 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +[[package]] +name = "linux-raw-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd550e73688e6d578f0ac2119e32b797a327631a42f9433e59d02e139c8df60d" + [[package]] name = "lock_api" version = "0.4.9" @@ -5078,7 +5108,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix", + "rustix 0.36.11", ] [[package]] @@ -5242,7 +5272,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5265,13 +5295,14 @@ dependencies = [ [[package]] name = "multiaddr" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b53e0cc5907a5c216ba6584bf74be8ab47d6d6289f72793b2dddbf15dc3bf8c" +checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" dependencies = [ "arrayref", "byteorder", "data-encoding", + "log", "multibase", "multihash 0.17.0", "percent-encoding", @@ -5332,7 +5363,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -5380,7 +5411,7 @@ checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5601,7 +5632,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5797,7 +5828,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5812,7 +5843,7 @@ dependencies = [ [[package]] name = "orml-tokens" version = "0.4.1-dev" -source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v0.9.39#1548fb8f65ff4d59b5396299b4be73102803974f" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#71834773b7ce46bf705d0b9e3bfeff39288fad4c" dependencies = [ "frame-support", "frame-system", @@ -5827,7 +5858,7 @@ dependencies = [ [[package]] name = "orml-traits" version = "0.4.1-dev" -source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v0.9.39#1548fb8f65ff4d59b5396299b4be73102803974f" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#71834773b7ce46bf705d0b9e3bfeff39288fad4c" dependencies = [ "frame-support", "impl-trait-for-tuples", @@ -5846,7 +5877,7 @@ dependencies = [ [[package]] name = "orml-utilities" version = "0.4.1-dev" -source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v0.9.39#1548fb8f65ff4d59b5396299b4be73102803974f" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#71834773b7ce46bf705d0b9e3bfeff39288fad4c" dependencies = [ "frame-support", "parity-scale-codec", @@ -5860,7 +5891,7 @@ dependencies = [ [[package]] name = "orml-vesting" version = "0.4.1-dev" -source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v0.9.39#1548fb8f65ff4d59b5396299b4be73102803974f" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#71834773b7ce46bf705d0b9e3bfeff39288fad4c" dependencies = [ "frame-support", "frame-system", @@ -5875,7 +5906,7 @@ dependencies = [ [[package]] name = "orml-xcm-support" version = "0.4.1-dev" -source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v0.9.39#1548fb8f65ff4d59b5396299b4be73102803974f" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#71834773b7ce46bf705d0b9e3bfeff39288fad4c" dependencies = [ "frame-support", "orml-traits", @@ -5889,7 +5920,7 @@ dependencies = [ [[package]] name = "orml-xtokens" version = "0.4.1-dev" -source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v0.9.39#1548fb8f65ff4d59b5396299b4be73102803974f" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#71834773b7ce46bf705d0b9e3bfeff39288fad4c" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -5909,9 +5940,9 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.4.1" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" [[package]] name = "p256" @@ -7031,7 +7062,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7319,7 +7350,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bounded-collections", "frame-benchmarking", @@ -7340,7 +7371,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "frame-benchmarking", "frame-support", @@ -7359,7 +7390,7 @@ dependencies = [ [[package]] name = "parachain-info" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/cumulus?branch=polkadot-v0.9.39#7321c5ba72724711faa1c4ee4da6a81a657184cd" +source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.39#d6eef144421ef5c3f339f681484d06bb729dfa82" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -7370,9 +7401,9 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df89dd8311063c54ae4e03d9aeb597b04212a57e82c339344130a9cad9b3e2d9" +checksum = "00bfb81cf5c90a222db2fb7b3a7cbf8cc7f38dfb6647aca4d98edf8281f56ed5" dependencies = [ "blake2", "crc32fast", @@ -7412,7 +7443,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7565,7 +7596,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7606,7 +7637,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7658,7 +7689,7 @@ checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" [[package]] name = "polkadot-approval-distribution" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "futures", "polkadot-node-metrics", @@ -7673,7 +7704,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7687,7 +7718,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "derive_more", "fatality", @@ -7710,7 +7741,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "fatality", "futures", @@ -7731,7 +7762,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7759,7 +7790,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "async-trait", "frame-benchmarking", @@ -7801,7 +7832,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "always-assert", "bitvec", @@ -7823,7 +7854,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "parity-scale-codec", "scale-info", @@ -7835,7 +7866,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "derive_more", "fatality", @@ -7860,7 +7891,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7874,7 +7905,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "futures", "futures-timer", @@ -7894,7 +7925,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "always-assert", "async-trait", @@ -7918,7 +7949,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "futures", "parity-scale-codec", @@ -7936,7 +7967,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bitvec", "derive_more", @@ -7965,7 +7996,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bitvec", "futures", @@ -7986,7 +8017,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bitvec", "fatality", @@ -8005,7 +8036,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "futures", "polkadot-node-subsystem", @@ -8020,7 +8051,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "async-trait", "futures", @@ -8040,7 +8071,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "futures", "polkadot-node-metrics", @@ -8055,7 +8086,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "futures", "futures-timer", @@ -8072,7 +8103,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "fatality", "futures", @@ -8091,7 +8122,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "async-trait", "futures", @@ -8108,7 +8139,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bitvec", "fatality", @@ -8126,7 +8157,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "always-assert", "assert_matches", @@ -8162,7 +8193,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "futures", "polkadot-node-primitives", @@ -8178,7 +8209,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "futures", "lru 0.9.0", @@ -8193,7 +8224,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "lazy_static", "log", @@ -8211,7 +8242,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bs58", "futures", @@ -8230,7 +8261,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "async-trait", "derive_more", @@ -8253,7 +8284,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bounded-vec", "futures", @@ -8276,7 +8307,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -8286,7 +8317,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "async-trait", "derive_more", @@ -8309,7 +8340,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "async-trait", "derive_more", @@ -8342,7 +8373,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "async-trait", "futures", @@ -8365,7 +8396,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bounded-collections", "derive_more", @@ -8382,7 +8413,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "env_logger 0.9.3", "kusama-runtime", @@ -8398,7 +8429,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bitvec", "hex-literal", @@ -8424,7 +8455,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -8456,7 +8487,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bitvec", "frame-benchmarking", @@ -8546,7 +8577,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bitvec", "frame-benchmarking", @@ -8594,7 +8625,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "frame-support", "polkadot-primitives", @@ -8608,7 +8639,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bs58", "parity-scale-codec", @@ -8620,7 +8651,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bitflags", "bitvec", @@ -8664,7 +8695,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "async-trait", "beefy-gadget", @@ -8772,7 +8803,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8793,7 +8824,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8865,7 +8896,7 @@ dependencies = [ "proc-macro2", "quote", "sha3 0.8.2", - "syn", + "syn 1.0.109", ] [[package]] @@ -8884,15 +8915,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", "termtree", @@ -8900,12 +8931,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebcd279d20a4a0a2404a33056388e950504d891c855c7975b9a8fef75f3bf04" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", - "syn", + "syn 1.0.109", ] [[package]] @@ -8957,7 +8988,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -8980,9 +9011,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73" dependencies = [ "unicode-ident", ] @@ -9021,7 +9052,7 @@ checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9051,7 +9082,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn", + "syn 1.0.109", "tempfile", "which", ] @@ -9079,7 +9110,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9206,6 +9237,15 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + [[package]] name = "quicksink" version = "0.1.2" @@ -9237,9 +9277,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -9418,22 +9458,22 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9af2cf09ef80e610097515e80095b7f76660a92743c4185aff5406cd5ce3dd5" +checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c501201393982e275433bc55de7d6ae6f00e7699cd5572c5b57581cd69c881b" +checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.8", ] [[package]] @@ -9450,9 +9490,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "cce168fea28d3e05f158bda4576cf0c844d5045bc2cc3620fa0292ed5bb5814c" dependencies = [ "aho-corasick", "memchr", @@ -9470,9 +9510,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "region" @@ -9550,7 +9590,7 @@ checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9566,7 +9606,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "binary-merkle-tree", "frame-benchmarking", @@ -9652,7 +9692,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "frame-support", "polkadot-primitives", @@ -9726,9 +9766,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" [[package]] name = "rustc-hash" @@ -9748,7 +9788,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.16", + "semver 1.0.17", ] [[package]] @@ -9762,15 +9802,29 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.9" +version = "0.36.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" +dependencies = [ + "bitflags", + "errno 0.2.8", + "io-lifetimes", + "libc", + "linux-raw-sys 0.1.4", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustix" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +checksum = "62b24138615de35e32031d041a09032ef3487a616d901ca4db224e7d557efae2" dependencies = [ "bitflags", - "errno", + "errno 0.3.0", "io-lifetimes", "libc", - "linux-raw-sys", + "linux-raw-sys 0.3.0", "windows-sys 0.45.0", ] @@ -9961,7 +10015,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10301,7 +10355,7 @@ dependencies = [ "libc", "log", "once_cell", - "rustix", + "rustix 0.36.11", "sc-allocator", "sc-executor-common", "sp-runtime-interface", @@ -10908,7 +10962,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10968,9 +11022,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" +checksum = "61471dff9096de1d8b2319efed7162081e96793f5ebb147e50db10d50d648a4d" dependencies = [ "bitvec", "cfg-if", @@ -10982,14 +11036,14 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" +checksum = "219580e803a66b3f05761fd06f1f879a872444e49ce23f73694d26e5a954c7e6" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11149,9 +11203,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" dependencies = [ "serde", ] @@ -11164,22 +11218,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.154" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cdd151213925e7f1ab45a9bbfb129316bd00799784b174b7cc7bcd16961c49e" +checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.154" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc80d722935453bcafdc2c9a73cd6fac4dc1938f0346035d84bf99fa9e33217" +checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.8", ] [[package]] @@ -11353,7 +11407,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "enumn", "parity-scale-codec", @@ -11385,14 +11439,14 @@ checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" +checksum = "5ccba027ba85743e09d15c03296797cad56395089b832b48b5a5217880f57733" dependencies = [ "aes-gcm 0.9.4", "blake2", "chacha20poly1305", - "curve25519-dalek 4.0.0-rc.0", + "curve25519-dalek 4.0.0-rc.1", "rand_core 0.6.4", "ring", "rustc_version", @@ -11454,7 +11508,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11695,7 +11749,7 @@ dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn", + "syn 1.0.109", ] [[package]] @@ -11714,7 +11768,7 @@ source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.39#18 dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11934,7 +11988,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -12101,7 +12155,7 @@ dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -12152,7 +12206,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -12235,7 +12289,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -12248,7 +12302,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -12262,7 +12316,7 @@ name = "struct-versioning" version = "0.1.0" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -12284,7 +12338,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.109", ] [[package]] @@ -12408,7 +12462,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -12454,6 +12508,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -12462,7 +12527,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "unicode-xid", ] @@ -12508,7 +12573,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall", - "rustix", + "rustix 0.36.11", "windows-sys 0.42.0", ] @@ -12523,9 +12588,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "tests" @@ -12561,22 +12626,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.8", ] [[package]] @@ -12757,7 +12822,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -12815,9 +12880,9 @@ checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" [[package]] name = "toml_edit" -version = "0.19.4" +version = "0.19.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1eb0622d28f4b9c90adc4ea4b2b46b47663fde9ac5fafcb14a1369d5508825" +checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" dependencies = [ "indexmap", "toml_datetime", @@ -12886,7 +12951,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -12912,7 +12977,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12923,13 +12988,13 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "expander 0.0.6", "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -13205,9 +13270,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" @@ -13617,12 +13682,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -13675,7 +13739,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -13709,7 +13773,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -13878,7 +13942,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix", + "rustix 0.36.11", "serde", "sha2 0.10.6", "toml", @@ -13958,7 +14022,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix", + "rustix 0.36.11", ] [[package]] @@ -13989,7 +14053,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix", + "rustix 0.36.11", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", @@ -14262,7 +14326,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bitvec", "frame-benchmarking", @@ -14354,7 +14418,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "frame-support", "polkadot-primitives", @@ -14436,6 +14500,15 @@ dependencies = [ "windows_x86_64_msvc 0.34.0", ] +[[package]] +name = "windows" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.42.0" @@ -14443,12 +14516,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -14462,24 +14535,24 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_x86_64_msvc 0.42.2", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_msvc" @@ -14489,9 +14562,9 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_i686_gnu" @@ -14501,9 +14574,9 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_msvc" @@ -14513,9 +14586,9 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_x86_64_gnu" @@ -14525,15 +14598,15 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_msvc" @@ -14543,15 +14616,15 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "winnow" -version = "0.3.5" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee7b2c67f962bf5042bfd8b6a916178df33a26eec343ae064cb8e069f638fa6f" +checksum = "deac0939bd6e4f24ab5919fbf751c97a8cfc8543bb083a305ed5c0c10bb241d1" dependencies = [ "memchr", ] @@ -14636,7 +14709,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "bounded-collections", "derivative", @@ -14652,7 +14725,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "frame-support", "frame-system", @@ -14673,7 +14746,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "environmental", "frame-benchmarking", @@ -14693,12 +14766,12 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.39-1" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#298b4aefe1b07b864b6ef7ede041d73f6a0a7f93" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.39#c22e1c4173bf6966f5d1980f4299f7abe836f0c1" dependencies = [ "Inflector", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -14741,7 +14814,7 @@ checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] diff --git a/Cargo.toml b/Cargo.toml index 43430fbfaa..da2ff955bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -81,23 +81,23 @@ pallet-evm-precompile-simple = { default-features = false, git = "https://github # Parity codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.2.2" } -cumulus-client-cli = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-client-consensus-aura = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-client-consensus-common = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-client-network = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-client-service = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-pallet-aura-ext = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-pallet-dmp-queue = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-pallet-parachain-system = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-pallet-xcm = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-pallet-xcmp-queue = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-primitives-core = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-primitives-parachain-inherent = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-primitives-timestamp = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-primitives-utility = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-relay-chain-inprocess-interface = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-relay-chain-interface = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } -cumulus-relay-chain-minimal-node = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-cli = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-consensus-aura = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-consensus-common = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-network = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-service = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-aura-ext = { default-features = false , git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-dmp-queue = { default-features = false , git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-parachain-system = { default-features = false , git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-xcm = { default-features = false , git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-xcmp-queue = { default-features = false , git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-primitives-core = { default-features = false , git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-primitives-parachain-inherent = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-primitives-timestamp = { default-features = false , git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-primitives-utility = { default-features = false , git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-relay-chain-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } +cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } frame-executive = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } @@ -114,7 +114,7 @@ pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrat pallet-transaction-payment-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } pallet-treasury = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } pallet-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39", default-features = false } -parachain-info = { default-features = false, git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +parachain-info = { default-features = false, git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.39" } polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39" } polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39", default-features = false } polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39" } @@ -177,10 +177,10 @@ frame-try-runtime = { default-features = false, git = "https://github.com/parity try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" } # ORML -orml-tokens = { default-features = false , git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" } -orml-traits = { default-features = false , git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" } -orml-vesting = { default-features = false , git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" } -orml-xtokens = { default-features = false , git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" } +orml-tokens = { default-features = false , git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.39" } +orml-traits = { default-features = false , git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.39" } +orml-vesting = { default-features = false , git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.39" } +orml-xtokens = { default-features = false , git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.39" } # Other derivative = { version = "2.2.0", features = ["use_core"] } @@ -195,3 +195,28 @@ num_enum = { version = "0.5.3", default-features = false } primitive-types = { version = "0.12.1", default-features = false } serde = { default-features = false, features = ['derive'], version = "1.0.136" } smallvec = "1.6.1" + +[workspace.metadata.deppatcher.originals.workspace.dependencies] +orml-tokens = { git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" } +orml-traits = { git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" } +orml-vesting = { git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" } +orml-xtokens = { git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" } +cumulus-client-cli = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-consensus-aura = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-consensus-common = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-network = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-client-service = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-aura-ext = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-dmp-queue = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-parachain-system = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-xcm = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-pallet-xcmp-queue = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-primitives-core = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-primitives-parachain-inherent = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-primitives-timestamp = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-primitives-utility = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-relay-chain-inprocess-interface = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-relay-chain-interface = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +cumulus-relay-chain-minimal-node = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } +parachain-info = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" } + diff --git a/client/rpc/Cargo.toml b/client/rpc/Cargo.toml index 3d3c8b45c0..d896469810 100644 --- a/client/rpc/Cargo.toml +++ b/client/rpc/Cargo.toml @@ -21,16 +21,16 @@ up-rpc = { workspace = true } pallet-evm = { workspace = true } sc-client-api = { workspace = true } -sc-rpc-api = { default-features = false, workspace = true } +sc-rpc-api = { workspace = true } sc-service = { workspace = true } -sp-api = { default-features = false, workspace = true } -sp-blockchain = { default-features = false, workspace = true } -sp-core = { default-features = false, workspace = true } +sp-api = { workspace = true } +sp-blockchain = { workspace = true } +sp-core = { workspace = true } sp-externalities = { workspace = true } -sp-keystore = { default-features = false, workspace = true } -sp-runtime = { default-features = false, workspace = true } +sp-keystore = { workspace = true } +sp-runtime = { workspace = true } sp-state-machine = { workspace = true } -sp-trie = { default-features = false, workspace = true } +sp-trie = { workspace = true } frame-benchmarking = { workspace = true } From 583a28bcbcc8f0c25347b5e3ae2b0e2fcd4a9b36 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 24 Mar 2023 09:54:30 +0100 Subject: [PATCH 019/103] refactor(foreign-asset): remove migration --- node/cli/src/chain_spec.rs | 2 -- pallets/foreign-assets/src/lib.rs | 55 ------------------------------- 2 files changed, 57 deletions(-) diff --git a/node/cli/src/chain_spec.rs b/node/cli/src/chain_spec.rs index 1236663ccb..2fa368fa29 100644 --- a/node/cli/src/chain_spec.rs +++ b/node/cli/src/chain_spec.rs @@ -202,7 +202,6 @@ macro_rules! testnet_genesis { accounts: BTreeMap::new(), }, ethereum: EthereumConfig {}, - foreign_assets: Default::default(), polkadot_xcm: Default::default(), transaction_payment: Default::default(), } @@ -255,7 +254,6 @@ macro_rules! testnet_genesis { accounts: BTreeMap::new(), }, ethereum: EthereumConfig {}, - foreign_assets: Default::default(), polkadot_xcm: Default::default(), transaction_payment: Default::default(), } diff --git a/pallets/foreign-assets/src/lib.rs b/pallets/foreign-assets/src/lib.rs index 351b881cf6..01c929a5cb 100644 --- a/pallets/foreign-assets/src/lib.rs +++ b/pallets/foreign-assets/src/lib.rs @@ -276,63 +276,8 @@ pub mod module { StorageMap<_, Twox64Concat, ForeignAssetId, CollectionId, OptionQuery>; #[pallet::pallet] - #[pallet::without_storage_info] pub struct Pallet(_); - pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); - #[pallet::hooks] - impl Hooks> for Pallet { - fn on_runtime_upgrade() -> Weight { - let mut weight = Weight::default(); - // 0-1 -- xcmv2 => xcmv3 - if StorageVersion::get::>() <= 0 { - pub trait V0ToV1 { - type Pallet: 'static + PalletInfoAccess; - } - #[frame_support::storage_alias] - type LocationToCurrencyIds = - StorageMap, Twox64Concat, xcm::v2::MultiLocation, ForeignAssetId>; - >::translate_values::(|loc| { - weight += T::DbWeight::get().reads_writes(1, 1); - Some( - xcm::v3::MultiLocation::try_from(loc) - .expect("failed to migrate multilocation from XCMv2 to XCMv3"), - ) - }); - - let old_values: Vec<(xcm::v2::MultiLocation, _)> = - >::drain().collect(); - weight += T::DbWeight::get() - .reads_writes(old_values.len() as u64, old_values.len() as u64); - for (loc, asset_id) in old_values { - let loc = xcm::v3::MultiLocation::try_from(loc) - .expect("failed to migrate multilocation from XCMv2 to XCMv3"); - >::insert(loc, asset_id); - } - } - STORAGE_VERSION.put::>(); - weight += T::DbWeight::get().writes(1); - weight - } - } - - #[pallet::genesis_config] - pub struct GenesisConfig; - - #[cfg(feature = "std")] - impl Default for GenesisConfig { - fn default() -> Self { - Self - } - } - - #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { - fn build(&self) { - STORAGE_VERSION.put::>(); - } - } - #[pallet::call] impl Pallet { #[pallet::call_index(0)] From 59156c4c0e626f6a403b5b91f29326c04a8d0bfc Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 24 Mar 2023 09:54:34 +0100 Subject: [PATCH 020/103] feat(foreign-asset): enable PoV benchmarking --- pallets/foreign-assets/src/benchmarking.rs | 20 +++++++++++++------- pallets/foreign-assets/src/lib.rs | 9 ++++++--- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/pallets/foreign-assets/src/benchmarking.rs b/pallets/foreign-assets/src/benchmarking.rs index f22bbf1dee..9a3219d7cc 100644 --- a/pallets/foreign-assets/src/benchmarking.rs +++ b/pallets/foreign-assets/src/benchmarking.rs @@ -24,15 +24,21 @@ use xcm::opaque::latest::Junction::Parachain; use xcm::VersionedMultiLocation; use xcm::v3::Junctions::X1; use frame_support::traits::Currency; -use sp_std::boxed::Box; +use sp_std::{vec::Vec, boxed::Box}; + +fn bounded>>(slice: &[u8]) -> T { + T::try_from(slice.to_vec()) + .map_err(|_| "slice doesn't fit") + .unwrap() +} benchmarks! { register_foreign_asset { let owner: T::AccountId = account("user", 0, 1); let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(1000))); let metadata: AssetMetadata<<::Currency as Currency<::AccountId>>::Balance> = AssetMetadata{ - name: "name".into(), - symbol: "symbol".into(), + name: bounded(b"name"), + symbol: bounded(b"symbol"), decimals: 18, minimal_balance: 1u32.into() }; @@ -47,14 +53,14 @@ benchmarks! { let owner: T::AccountId = account("user", 0, 1); let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(2000))); let metadata: AssetMetadata<<::Currency as Currency<::AccountId>>::Balance> = AssetMetadata{ - name: "name".into(), - symbol: "symbol".into(), + name: bounded(b"name"), + symbol: bounded(b"symbol"), decimals: 18, minimal_balance: 1u32.into() }; let metadata2: AssetMetadata<<::Currency as Currency<::AccountId>>::Balance> = AssetMetadata{ - name: "name2".into(), - symbol: "symbol2".into(), + name: bounded(b"name2"), + symbol: bounded(b"symbol2"), decimals: 18, minimal_balance: 1u32.into() }; diff --git a/pallets/foreign-assets/src/lib.rs b/pallets/foreign-assets/src/lib.rs index 01c929a5cb..bc11f839f2 100644 --- a/pallets/foreign-assets/src/lib.rs +++ b/pallets/foreign-assets/src/lib.rs @@ -190,10 +190,13 @@ pub mod module { type WeightInfo: WeightInfo; } - #[derive(Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, TypeInfo)] + pub type AssetName = BoundedVec>; + pub type AssetSymbol = BoundedVec>; + + #[derive(Clone, Eq, PartialEq, RuntimeDebug, Encode, Decode, TypeInfo, MaxEncodedLen)] pub struct AssetMetadata { - pub name: Vec, - pub symbol: Vec, + pub name: AssetName, + pub symbol: AssetSymbol, pub decimals: u8, pub minimal_balance: Balance, } From 3c1f2feaa85defaacd54d3a993c1c376bb6e1dfe Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 24 Mar 2023 09:54:37 +0100 Subject: [PATCH 021/103] style(nonfungible): benchmarking warnings --- pallets/common/src/benchmarking.rs | 2 ++ pallets/nonfungible/src/benchmarking.rs | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pallets/common/src/benchmarking.rs b/pallets/common/src/benchmarking.rs index 598361aa48..ed053dc793 100644 --- a/pallets/common/src/benchmarking.rs +++ b/pallets/common/src/benchmarking.rs @@ -14,6 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Unique Network. If not, see . +#![allow(missing_docs)] + use sp_std::vec::Vec; use crate::{Config, CollectionHandle, Pallet}; use pallet_evm::account::CrossAccountId; diff --git a/pallets/nonfungible/src/benchmarking.rs b/pallets/nonfungible/src/benchmarking.rs index 8a43d0d12d..c96094e222 100644 --- a/pallets/nonfungible/src/benchmarking.rs +++ b/pallets/nonfungible/src/benchmarking.rs @@ -232,8 +232,7 @@ benchmarks! { owner: cross_from_sub; }; let item = create_max_item(&collection, &owner, owner.clone())?; - - }: {collection.token_owner(item)} + }: {collection.token_owner(item).unwrap()} set_allowance_for_all { bench_init!{ From cedfd3e08c96e3d59d0f1e188b31710a0d038c62 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 24 Mar 2023 09:54:40 +0100 Subject: [PATCH 022/103] fix(common): xcm config review --- runtime/common/config/xcm/mod.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/runtime/common/config/xcm/mod.rs b/runtime/common/config/xcm/mod.rs index 716a0c0cc6..cbe825b968 100644 --- a/runtime/common/config/xcm/mod.rs +++ b/runtime/common/config/xcm/mod.rs @@ -54,8 +54,7 @@ use xcm_assets::{AssetTransactors, IsReserve, Trader}; parameter_types! { pub const RelayLocation: MultiLocation = MultiLocation::parent(); pub RelayOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); - pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); - pub UniversalLocation: InteriorMultiLocation = Parachain(ParachainInfo::get().into()).into(); + pub UniversalLocation: InteriorMultiLocation = X2(GlobalConsensus(RelayNetwork::get()), Parachain(ParachainInfo::get().into())); pub SelfLocation: MultiLocation = MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into()))); // One XCM operation is 1_000_000 weight - almost certainly a conservative estimate. @@ -82,7 +81,7 @@ pub type LocalOriginToLocation = (SignedToAccountId32, + cumulus_primitives_utility::ParentAsUmp, // ..and XCMP to communicate with the sibling chains. XcmpQueue, ); @@ -225,7 +224,7 @@ where type ResponseHandler = PolkadotXcm; type SubscriptionService = PolkadotXcm; type PalletInstancesInfo = AllPalletsWithSystem; - type MaxAssetsIntoHolding = ConstU32<64>; + type MaxAssetsIntoHolding = ConstU32<8>; type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; @@ -233,7 +232,7 @@ where type AssetExchanger = (); type FeeManager = (); type MessageExporter = (); - type UniversalAliases = Nothing; // ? + type UniversalAliases = Nothing; type CallDispatcher = RuntimeCall; type SafeCallFilter = Nothing; // ? Only non-recursive calls may go here, but do we need this? } @@ -259,9 +258,9 @@ impl pallet_xcm::Config for Runtime { type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; type UniversalLocation = UniversalLocation; type Currency = Balances; - type CurrencyMatcher = (); // ? + type CurrencyMatcher = (); type TrustedLockers = (); - type SovereignAccountOf = (); + type SovereignAccountOf = LocationToAccountId; type MaxLockers = ConstU32<8>; type WeightInfo = crate::weights::xcm::SubstrateWeight; #[cfg(feature = "runtime-benchmarks")] From 87bc2c4dc1991becfa23701363c71c296ee1fd53 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 24 Mar 2023 09:54:44 +0100 Subject: [PATCH 023/103] fix(node): try-runtime build --- node/cli/src/command.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/node/cli/src/command.rs b/node/cli/src/command.rs index fa894c6442..e4b28a1bc7 100644 --- a/node/cli/src/command.rs +++ b/node/cli/src/command.rs @@ -413,6 +413,7 @@ pub fn run() -> Result<()> { Some(Subcommand::TryRuntime(cmd)) => { use std::{future::Future, pin::Pin}; use sc_executor::{sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch}; + use try_runtime_cli::block_building_info::timestamp_with_aura_info; let runner = cli.create_runner(cmd)?; @@ -425,6 +426,7 @@ pub fn run() -> Result<()> { let task_manager = sc_service::TaskManager::new(runner.config().tokio_handle.clone(), *registry) .map_err(|e| format!("Error: {:?}", e))?; + let info_provider = Some(timestamp_with_aura_info(12000)); runner.async_run(|config| -> Result<(Pin>>, _)> { Ok(( @@ -433,18 +435,18 @@ pub fn run() -> Result<()> { RuntimeId::Unique => Box::pin(cmd.run::::ExtendHostFunctions, - >>()), + >, _>(info_provider)), #[cfg(feature = "quartz-runtime")] RuntimeId::Quartz => Box::pin(cmd.run::::ExtendHostFunctions, - >>()), + >, _>(info_provider)), RuntimeId::Opal => Box::pin(cmd.run::::ExtendHostFunctions, - >>()), + >, _>(info_provider)), runtime_id => return Err(no_runtime_err!(runtime_id).into()), }, task_manager, From 5667e2a82ef1ac3fc84b2efb5c4c2a88936d68f5 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 24 Mar 2023 09:54:47 +0100 Subject: [PATCH 024/103] refactor: account for key sizes in Properties --- primitives/data-structs/src/lib.rs | 74 ++++++++++++++++++------------ 1 file changed, 45 insertions(+), 29 deletions(-) diff --git a/primitives/data-structs/src/lib.rs b/primitives/data-structs/src/lib.rs index 45d2f6fbd9..748ff6d792 100644 --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -1104,14 +1104,19 @@ pub enum PropertyScope { } impl PropertyScope { + pub fn prefix(&self) -> &'static [u8] { + match self { + Self::None => b"", + Self::Rmrk => b"rmrk:", + } + } /// Apply scope to property key. pub fn apply(self, key: PropertyKey) -> Result { - let scope_str: &[u8] = match self { - Self::None => return Ok(key), - Self::Rmrk => b"rmrk", - }; - - [scope_str, b":", key.as_slice()] + let prefix = self.prefix(); + if prefix == b"" { + return Ok(key); + } + [prefix, key.as_slice()] .concat() .try_into() .map_err(|_| PropertiesError::PropertyKeyIsTooLong) @@ -1197,12 +1202,6 @@ impl PropertiesMap { self.0.contains_key(key) } - fn metadata_encoded_len() -> usize { - // Max length of key length + max length of value length for max properties - // + max length of table size length - (4 * 4) * (MAX_PROPERTIES_PER_ITEM as usize) + 4 - } - /// Check if map contains key with key validation. fn check_property_key(key: &PropertyKey) -> Result<(), PropertiesError> { if key.is_empty() { @@ -1223,6 +1222,10 @@ impl PropertiesMap { pub fn values(&self) -> impl Iterator { self.0.values() } + + pub fn iter(&self) -> impl Iterator { + self.0.iter() + } } impl IntoIterator for PropertiesMap { @@ -1261,19 +1264,30 @@ impl TrySetProperty for PropertiesMap { /// Alias for property permissions map. pub type PropertiesPermissionMap = PropertiesMap; +fn slice_size(data: &[u8]) -> u32 { + scoped_slice_size(PropertyScope::None, data) +} +fn scoped_slice_size(scope: PropertyScope, data: &[u8]) -> u32 { + use codec::Compact; + let prefix = scope.prefix(); + >::encoded_size(&Compact(data.len() as u32 + prefix.len() as u32)) as u32 + + data.len() as u32 + + prefix.len() as u32 +} + /// Wrapper for properties map with consumed space control. #[derive(Encode, Decode, TypeInfo, Clone, PartialEq)] pub struct Properties { map: PropertiesMap, consumed_space: u32, - space_limit: u32, + // May be not zero, previously served as a current S generic + _reserved: u32, } impl MaxEncodedLen for Properties { fn max_encoded_len() -> usize { - >::metadata_encoded_len() - + (u32::max_encoded_len() * 2) - + S as usize + // len of map + len of consumed_space + len of space_limit + u32::max_encoded_len() * 3 + S as usize } } @@ -1289,7 +1303,7 @@ impl Properties { Self { map: PropertiesMap::new(), consumed_space: 0, - space_limit: u32::MAX, + _reserved: 0, } } @@ -1298,8 +1312,8 @@ impl Properties { let value = self.map.remove(key)?; if let Some(ref value) = value { - let value_len = value.len() as u32; - self.consumed_space -= value_len; + let kv_len = slice_size(key) + slice_size(value); + self.consumed_space = self.consumed_space.saturating_sub(kv_len); } Ok(value) @@ -1313,7 +1327,11 @@ impl Properties { /// Recomputes the consumed space for the current properties state. /// Needed to repair a token due to a bug fixed in the [PR #733](https://github.com/UniqueNetwork/unique-chain/pull/773). pub fn recompute_consumed_space(&mut self) { - self.consumed_space = self.map.values().map(|value| value.len() as u32).sum(); + self.consumed_space = self + .map + .iter() + .map(|(key, value)| slice_size(key) + slice_size(value)) + .sum(); } } @@ -1335,23 +1353,21 @@ impl TrySetProperty for Properties { key: PropertyKey, value: Self::Value, ) -> Result, PropertiesError> { - let value_len = value.len(); + let key_size = scoped_slice_size(scope, &key); + let value_size = slice_size(&value) as u32; - if self.consumed_space as usize + value_len > self.space_limit.min(S) as usize - && !cfg!(feature = "runtime-benchmarks") + if self.consumed_space + value_size + key_size > S && !cfg!(feature = "runtime-benchmarks") { return Err(PropertiesError::NoSpaceForProperty); } - let value_len = value_len as u32; let old_value = self.map.try_scoped_set(scope, key, value)?; - let old_value_len = old_value.as_ref().map(|v| v.len() as u32).unwrap_or(0); - - if value_len > old_value_len { - self.consumed_space += value_len - old_value_len; + if let Some(old_value) = old_value.as_ref() { + let old_value_size = slice_size(&old_value); + self.consumed_space = self.consumed_space.saturating_sub(old_value_size) + value_size; } else { - self.consumed_space -= old_value_len - value_len; + self.consumed_space += key_size + value_size; } Ok(old_value) From 1505aad9ef561ad782ac586f6acacadfead77328 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 24 Mar 2023 12:40:34 +0100 Subject: [PATCH 025/103] test: fix pallet presence --- tests/src/pallet-presence.test.ts | 5 ++--- tests/src/util/playgrounds/unique.ts | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/src/pallet-presence.test.ts b/tests/src/pallet-presence.test.ts index 286a8a2283..8d10ce978c 100644 --- a/tests/src/pallet-presence.test.ts +++ b/tests/src/pallet-presence.test.ts @@ -20,7 +20,6 @@ import {itSub, usingPlaygrounds, expect} from './util'; const requiredPallets = [ 'balances', 'common', - 'randomnesscollectiveflip', 'timestamp', 'transactionpayment', 'treasury', @@ -98,11 +97,11 @@ describe('Pallet presence', () => { }); itSub('Required pallets are present', ({helper}) => { - expect(helper.fetchAllPalletNames()).to.contain.members([...requiredPallets]); + expect(helper.fetchAllPalletNames()).to.contain.members([...requiredPallets].sort()); }); itSub('Governance and consensus pallets are present', ({helper}) => { - expect(helper.fetchAllPalletNames()).to.contain.members([...consensusPallets]); + expect(helper.fetchAllPalletNames()).to.contain.members([...consensusPallets].sort()); }); itSub('No extra pallets are included', ({helper}) => { diff --git a/tests/src/util/playgrounds/unique.ts b/tests/src/util/playgrounds/unique.ts index 5adbffcbe3..5f5d26d768 100644 --- a/tests/src/util/playgrounds/unique.ts +++ b/tests/src/util/playgrounds/unique.ts @@ -736,7 +736,7 @@ export class ChainHelperBase { fetchAllPalletNames(): string[] { if(this.api === null) throw Error('API not initialized'); - return this.api.runtimeMetadata.asLatest.pallets.map(m => m.name.toString().toLowerCase()); + return this.api.runtimeMetadata.asLatest.pallets.map(m => m.name.toString().toLowerCase()).sort(); } fetchMissingPalletNames(requiredPallets: string[]): string[] { From e5fa9afed8bd586c69d624968b17b18a44c68aa6 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 22 Mar 2023 13:16:56 +0100 Subject: [PATCH 026/103] fix: disallow xcm teleports completely --- runtime/common/config/xcm/foreignassets.rs | 69 +++++++++++++++------- runtime/common/config/xcm/mod.rs | 4 +- runtime/common/config/xcm/nativeassets.rs | 2 +- 3 files changed, 52 insertions(+), 23 deletions(-) diff --git a/runtime/common/config/xcm/foreignassets.rs b/runtime/common/config/xcm/foreignassets.rs index 98a3181d5f..fef45ebc22 100644 --- a/runtime/common/config/xcm/foreignassets.rs +++ b/runtime/common/config/xcm/foreignassets.rs @@ -15,13 +15,13 @@ // along with Unique Network. If not, see . use frame_support::{ - traits::{Contains, Get, fungibles, ContainsPair}, + traits::{Get, ContainsPair}, parameter_types, }; use sp_runtime::traits::Convert; -use xcm::latest::{MultiAsset, Junction::*, MultiLocation, Junctions::*}; -use xcm_builder::{FungiblesAdapter, NonLocalMint, ConvertedConcreteId}; -use xcm_executor::traits::{Convert as ConvertXcm, JustTry}; +use xcm::latest::{prelude::*, MultiAsset, MultiLocation}; +use xcm_builder::{FungiblesAdapter, NoChecking, ConvertedConcreteId}; +use xcm_executor::traits::{TransactAsset, Convert as ConvertXcm, JustTry}; use pallet_foreign_assets::{ AssetIds, AssetIdMapping, XcmForeignAssetIdMapping, NativeCurrency, FreeForAll, TryAsForeign, ForeignAssetId, CurrencyId, @@ -37,19 +37,6 @@ parameter_types! { pub CheckingAccount: AccountId = PolkadotXcm::check_account(); } -/// No teleports are allowed -pub struct NoTeleports(PhantomData<(AccountId, ForeignAssets)>); - -impl Contains<>::AssetId> - for NoTeleports -where - ForeignAssets: fungibles::Inspect, -{ - fn contains(_id: &>::AssetId) -> bool { - false - } -} - pub struct AsInnerId(PhantomData<(AssetId, ConvertAssetId)>); impl> ConvertXcm for AsInnerId @@ -131,14 +118,56 @@ pub type FungiblesTransactor = FungiblesAdapter< LocationToAccountId, // Our chain's account ID type (we can't get away without mentioning it explicitly): AccountId, - // No teleports are allowed - NonLocalMint>, + // No Checking for teleported assets since we disallow teleports at all. + NoChecking, // The account to use for tracking teleports. CheckingAccount, >; /// Means for transacting assets on this chain. -pub type AssetTransactors = FungiblesTransactor; +pub struct AssetTransactor; +impl TransactAsset for AssetTransactor { + fn can_check_in( + _origin: &MultiLocation, + _what: &MultiAsset, + _context: &XcmContext, + ) -> XcmResult { + Err(XcmError::Unimplemented) + } + + fn check_in(_origin: &MultiLocation, _what: &MultiAsset, _context: &XcmContext) {} + + fn can_check_out( + _dest: &MultiLocation, + _what: &MultiAsset, + _context: &XcmContext, + ) -> XcmResult { + Err(XcmError::Unimplemented) + } + + fn check_out(_dest: &MultiLocation, _what: &MultiAsset, _context: &XcmContext) {} + + fn deposit_asset(what: &MultiAsset, who: &MultiLocation, context: &XcmContext) -> XcmResult { + FungiblesTransactor::deposit_asset(what, who, context) + } + + fn withdraw_asset( + what: &MultiAsset, + who: &MultiLocation, + maybe_context: Option<&XcmContext>, + ) -> Result { + FungiblesTransactor::withdraw_asset(what, who, maybe_context) + } + + fn internal_transfer_asset( + what: &MultiAsset, + from: &MultiLocation, + to: &MultiLocation, + context: &XcmContext, + ) -> Result { + FungiblesTransactor::internal_transfer_asset(what, from, to, context) + } +} pub struct AllAsset; impl ContainsPair for AllAsset { diff --git a/runtime/common/config/xcm/mod.rs b/runtime/common/config/xcm/mod.rs index cbe825b968..347e2907c4 100644 --- a/runtime/common/config/xcm/mod.rs +++ b/runtime/common/config/xcm/mod.rs @@ -49,7 +49,7 @@ pub use foreignassets as xcm_assets; #[cfg(not(feature = "foreign-assets"))] pub use nativeassets as xcm_assets; -use xcm_assets::{AssetTransactors, IsReserve, Trader}; +use xcm_assets::{AssetTransactor, IsReserve, Trader}; parameter_types! { pub const RelayLocation: MultiLocation = MultiLocation::parent(); @@ -213,7 +213,7 @@ where type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; // How to withdraw and deposit an asset. - type AssetTransactor = AssetTransactors; + type AssetTransactor = AssetTransactor; type OriginConverter = XcmOriginToTransactDispatchOrigin; type IsReserve = IsReserve; type IsTeleporter = (); // Teleportation is disabled diff --git a/runtime/common/config/xcm/nativeassets.rs b/runtime/common/config/xcm/nativeassets.rs index 31accba348..73d70c6aac 100644 --- a/runtime/common/config/xcm/nativeassets.rs +++ b/runtime/common/config/xcm/nativeassets.rs @@ -77,7 +77,7 @@ pub type LocalAssetTransactor = CurrencyAdapter< (), >; -pub type AssetTransactors = LocalAssetTransactor; +pub type AssetTransactor = LocalAssetTransactor; pub type IsReserve = NativeAsset; From 4253705657d6df121e79660c1e6ee168447c8e46 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 22 Mar 2023 13:32:39 +0100 Subject: [PATCH 027/103] fix: only root can send XCM messages via palletXcm --- runtime/common/config/xcm/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/common/config/xcm/mod.rs b/runtime/common/config/xcm/mod.rs index 347e2907c4..4bb0e985a9 100644 --- a/runtime/common/config/xcm/mod.rs +++ b/runtime/common/config/xcm/mod.rs @@ -244,7 +244,7 @@ parameter_types! { impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type SendXcmOrigin = EnsureXcmOrigin; + type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; type ExecuteXcmOrigin = EnsureXcmOrigin; type XcmExecuteFilter = Everything; From aee14e9667716dc25b6fe166e1e5b5a2fde77738 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 22 Mar 2023 13:40:37 +0100 Subject: [PATCH 028/103] fix: remove unneeded barrier, add safecallfilter --- runtime/common/config/xcm/mod.rs | 27 +++------------------------ runtime/opal/src/xcm_barrier.rs | 15 +++++---------- runtime/quartz/src/xcm_barrier.rs | 11 ++++------- runtime/unique/src/xcm_barrier.rs | 11 ++++------- 4 files changed, 16 insertions(+), 48 deletions(-) diff --git a/runtime/common/config/xcm/mod.rs b/runtime/common/config/xcm/mod.rs index 4bb0e985a9..f8836f7b7f 100644 --- a/runtime/common/config/xcm/mod.rs +++ b/runtime/common/config/xcm/mod.rs @@ -125,29 +125,6 @@ impl TryPass for Tuple { } } -pub struct DenyTransact; -impl TryPass for DenyTransact { - fn try_pass( - _origin: &MultiLocation, - message: &mut [Instruction], - ) -> Result<(), ()> { - let transact_inst = message - .iter() - .find(|inst| matches![inst, Instruction::Transact { .. }]); - - if transact_inst.is_some() { - log::warn!( - target: "xcm::barrier", - "transact XCM rejected" - ); - - Err(()) - } else { - Ok(()) - } - } -} - /// Deny executing the XCM if it matches any of the Deny filter regardless of anything else. /// If it passes the Deny, and matches one of the Allow cases then it is let through. pub struct DenyThenTry(PhantomData, PhantomData) @@ -234,7 +211,9 @@ where type MessageExporter = (); type UniversalAliases = Nothing; type CallDispatcher = RuntimeCall; - type SafeCallFilter = Nothing; // ? Only non-recursive calls may go here, but do we need this? + + // Deny all XCM Transacts. + type SafeCallFilter = Nothing; } #[cfg(feature = "runtime-benchmarks")] diff --git a/runtime/opal/src/xcm_barrier.rs b/runtime/opal/src/xcm_barrier.rs index e39463540f..4f84ca598e 100644 --- a/runtime/opal/src/xcm_barrier.rs +++ b/runtime/opal/src/xcm_barrier.rs @@ -20,8 +20,6 @@ use xcm::v3::Instruction; use xcm_builder::{AllowTopLevelPaidExecutionFrom, TakeWeightCredit}; use xcm_executor::traits::ShouldExecute; -use crate::runtime_common::config::xcm::{DenyThenTry, DenyTransact}; - /// Execution barrier that just takes `max_weight` from `weight_credit`. /// /// Useful to allow XCM execution by local chain users via extrinsics. @@ -39,11 +37,8 @@ impl ShouldExecute for AllowAllDebug { } } -pub type Barrier = DenyThenTry< - DenyTransact, - ( - TakeWeightCredit, - AllowTopLevelPaidExecutionFrom, - AllowAllDebug, - ), ->; +pub type Barrier = ( + TakeWeightCredit, + AllowTopLevelPaidExecutionFrom, + AllowAllDebug, +); diff --git a/runtime/quartz/src/xcm_barrier.rs b/runtime/quartz/src/xcm_barrier.rs index 6eaa833cdf..be59c9e9a5 100644 --- a/runtime/quartz/src/xcm_barrier.rs +++ b/runtime/quartz/src/xcm_barrier.rs @@ -28,7 +28,7 @@ use xcm_builder::{ use crate::{ Runtime, ParachainInfo, PolkadotXcm, runtime_common::{ - config::xcm::{DenyThenTry, DenyTransact, DenyExchangeWithUnknownLocation}, + config::xcm::{DenyThenTry, DenyExchangeWithUnknownLocation}, xcm::OverridableAllowedLocations, }, }; @@ -76,12 +76,9 @@ parameter_types! { } pub type Barrier = DenyThenTry< - ( - DenyTransact, - DenyExchangeWithUnknownLocation< - OverridableAllowedLocations, - >, - ), + DenyExchangeWithUnknownLocation< + OverridableAllowedLocations, + >, ( TakeWeightCredit, AllowTopLevelPaidExecutionFrom, diff --git a/runtime/unique/src/xcm_barrier.rs b/runtime/unique/src/xcm_barrier.rs index e8876f7e0a..4548e6a5e3 100644 --- a/runtime/unique/src/xcm_barrier.rs +++ b/runtime/unique/src/xcm_barrier.rs @@ -28,7 +28,7 @@ use xcm_builder::{ use crate::{ Runtime, ParachainInfo, PolkadotXcm, runtime_common::{ - config::xcm::{DenyThenTry, DenyTransact, DenyExchangeWithUnknownLocation}, + config::xcm::{DenyThenTry, DenyExchangeWithUnknownLocation}, xcm::OverridableAllowedLocations, }, }; @@ -76,12 +76,9 @@ parameter_types! { } pub type Barrier = DenyThenTry< - ( - DenyTransact, - DenyExchangeWithUnknownLocation< - OverridableAllowedLocations, - >, - ), + DenyExchangeWithUnknownLocation< + OverridableAllowedLocations, + >, ( TakeWeightCredit, AllowTopLevelPaidExecutionFrom, From d0b6ad7ebb12f0744e05bcd04061b1a15e6bb389 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 22 Mar 2023 13:42:13 +0100 Subject: [PATCH 029/103] refactor: rename xcm executor config --- runtime/common/config/orml.rs | 4 ++-- runtime/common/config/xcm/mod.rs | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/runtime/common/config/orml.rs b/runtime/common/config/orml.rs index 41fe0ee6ba..d57b88f572 100644 --- a/runtime/common/config/orml.rs +++ b/runtime/common/config/orml.rs @@ -29,7 +29,7 @@ use crate::{ Runtime, RuntimeEvent, RelayChainBlockNumberProvider, runtime_common::config::{ xcm::{ - SelfLocation, Weigher, XcmConfig, UniversalLocation, + SelfLocation, Weigher, XcmExecutorConfig, UniversalLocation, xcm_assets::{CurrencyIdConvert}, }, pallets::TreasuryAccountId, @@ -138,7 +138,7 @@ impl orml_xtokens::Config for Runtime { type CurrencyIdConvert = CurrencyIdConvert; type AccountIdToMultiLocation = AccountIdToMultiLocation; type SelfLocation = SelfLocation; - type XcmExecutor = XcmExecutor>; + type XcmExecutor = XcmExecutor>; type Weigher = Weigher; type BaseXcmWeight = BaseXcmWeight; type MaxAssetsForTransfer = MaxAssetsForTransfer; diff --git a/runtime/common/config/xcm/mod.rs b/runtime/common/config/xcm/mod.rs index f8836f7b7f..e37bdb1cec 100644 --- a/runtime/common/config/xcm/mod.rs +++ b/runtime/common/config/xcm/mod.rs @@ -28,7 +28,7 @@ use xcm_builder::{ SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, ParentIsPreset, }; -use xcm_executor::{Config, XcmExecutor, traits::ShouldExecute}; +use xcm_executor::{XcmExecutor, traits::ShouldExecute}; use sp_std::{marker::PhantomData, vec::Vec}; use crate::{ Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, ParachainInfo, ParachainSystem, PolkadotXcm, @@ -182,8 +182,8 @@ impl>> TryPass for DenyExchangeWithUnknownLocation pub type Weigher = FixedWeightBounds; -pub struct XcmConfig(PhantomData); -impl Config for XcmConfig +pub struct XcmExecutorConfig(PhantomData); +impl xcm_executor::Config for XcmExecutorConfig where T: pallet_configuration::Config, { @@ -227,7 +227,7 @@ impl pallet_xcm::Config for Runtime { type XcmRouter = XcmRouter; type ExecuteXcmOrigin = EnsureXcmOrigin; type XcmExecuteFilter = Everything; - type XcmExecutor = XcmExecutor>; + type XcmExecutor = XcmExecutor>; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; type Weigher = FixedWeightBounds; @@ -248,13 +248,13 @@ impl pallet_xcm::Config for Runtime { impl cumulus_pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type XcmExecutor = XcmExecutor>; + type XcmExecutor = XcmExecutor>; } impl cumulus_pallet_xcmp_queue::Config for Runtime { type WeightInfo = (); type RuntimeEvent = RuntimeEvent; - type XcmExecutor = XcmExecutor>; + type XcmExecutor = XcmExecutor>; type ChannelInfo = ParachainSystem; type VersionWrapper = (); type ExecuteOverweightOrigin = frame_system::EnsureRoot; @@ -265,6 +265,6 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { impl cumulus_pallet_dmp_queue::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type XcmExecutor = XcmExecutor>; + type XcmExecutor = XcmExecutor>; type ExecuteOverweightOrigin = frame_system::EnsureRoot; } From 752d713492c38012f09d78b5527fae2d93f81526 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 22 Mar 2023 13:49:53 +0100 Subject: [PATCH 030/103] fix: remove known xcm locations -- unneeded due to limited opened hrmp channels --- pallets/configuration/src/benchmarking.rs | 11 +--- pallets/configuration/src/lib.rs | 21 +------ runtime/common/config/xcm/mod.rs | 32 ---------- runtime/quartz/src/xcm_barrier.rs | 71 ++++------------------- runtime/unique/src/xcm_barrier.rs | 71 ++++------------------- 5 files changed, 26 insertions(+), 180 deletions(-) diff --git a/pallets/configuration/src/benchmarking.rs b/pallets/configuration/src/benchmarking.rs index 20d68255a1..2c7133c922 100644 --- a/pallets/configuration/src/benchmarking.rs +++ b/pallets/configuration/src/benchmarking.rs @@ -19,8 +19,7 @@ use super::*; use frame_benchmarking::benchmarks; use frame_system::{EventRecord, RawOrigin}; -use frame_support::{assert_ok, BoundedVec, traits::Currency}; -use xcm::latest::MultiLocation; +use frame_support::{assert_ok, traits::Currency}; fn assert_last_event(generic_event: ::RuntimeEvent) { let events = frame_system::Pallet::::events(); @@ -49,14 +48,6 @@ benchmarks! { ); } - set_xcm_allowed_locations { - let locations: BoundedVec = Default::default(); - }: { - assert_ok!( - >::set_xcm_allowed_locations(RawOrigin::Root.into(), Some(locations)) - ); - } - set_app_promotion_configuration_override { let configuration: AppPromotionConfiguration = Default::default(); }: { diff --git a/pallets/configuration/src/lib.rs b/pallets/configuration/src/lib.rs index 3671ba7694..d0cd767440 100644 --- a/pallets/configuration/src/lib.rs +++ b/pallets/configuration/src/lib.rs @@ -43,11 +43,9 @@ mod pallet { use super::*; use frame_support::{ traits::{Get, ReservableCurrency, Currency}, - pallet_prelude::{StorageValue, ValueQuery, DispatchResult, IsType, OptionQuery}, - BoundedVec, log, + pallet_prelude::{StorageValue, ValueQuery, DispatchResult, IsType}, log, }; use frame_system::{pallet_prelude::OriginFor, ensure_root, Config as SystemConfig}; - use xcm::latest::MultiLocation; pub use crate::weights::WeightInfo; pub type BalanceOf = @@ -114,12 +112,6 @@ mod pallet { pub type MinGasPriceOverride = StorageValue; - #[pallet::storage] - pub type XcmAllowedLocationsOverride = StorageValue< - Value = BoundedVec, - QueryKind = OptionQuery, - >; - #[pallet::storage] pub type AppPromomotionConfigurationOverride = StorageValue, QueryKind = ValueQuery>; @@ -177,17 +169,6 @@ mod pallet { Ok(()) } - #[pallet::call_index(2)] - #[pallet::weight(T::WeightInfo::set_xcm_allowed_locations())] - pub fn set_xcm_allowed_locations( - origin: OriginFor, - locations: Option>, - ) -> DispatchResult { - ensure_root(origin)?; - >::set(locations); - Ok(()) - } - #[pallet::call_index(3)] #[pallet::weight(T::WeightInfo::set_app_promotion_configuration_override())] pub fn set_app_promotion_configuration_override( diff --git a/runtime/common/config/xcm/mod.rs b/runtime/common/config/xcm/mod.rs index e37bdb1cec..0867bf327e 100644 --- a/runtime/common/config/xcm/mod.rs +++ b/runtime/common/config/xcm/mod.rs @@ -148,38 +148,6 @@ where } } -// Allow xcm exchange only with locations in list -pub struct DenyExchangeWithUnknownLocation(PhantomData); -impl>> TryPass for DenyExchangeWithUnknownLocation { - fn try_pass(origin: &MultiLocation, message: &mut [Instruction]) -> Result<(), ()> { - let allowed_locations = T::get(); - - // Check if deposit or transfer belongs to allowed parachains - let mut allowed = allowed_locations.contains(origin); - - message.iter().for_each(|inst| match inst { - DepositReserveAsset { dest: dst, .. } - | TransferReserveAsset { dest: dst, .. } - | InitiateReserveWithdraw { reserve: dst, .. } => { - allowed |= allowed_locations.contains(&dst); - } - // ? There are more instructions worth checking - _ => {} - }); - - if allowed { - return Ok(()); - } - - log::warn!( - target: "xcm::barrier", - "Unexpected deposit or transfer location" - ); - // Deny - Err(()) - } -} - pub type Weigher = FixedWeightBounds; pub struct XcmExecutorConfig(PhantomData); diff --git a/runtime/quartz/src/xcm_barrier.rs b/runtime/quartz/src/xcm_barrier.rs index be59c9e9a5..8e1d054736 100644 --- a/runtime/quartz/src/xcm_barrier.rs +++ b/runtime/quartz/src/xcm_barrier.rs @@ -15,23 +15,16 @@ // along with Unique Network. If not, see . use frame_support::{ - match_types, parameter_types, - traits::{Get, Everything}, + match_types, + traits::Everything, }; -use sp_std::{vec, vec::Vec}; -use xcm::latest::{Junction::*, Junctions::*, MultiLocation}; +use xcm::latest::{Junctions::*, MultiLocation}; use xcm_builder::{ AllowKnownQueryResponses, AllowSubscriptionsFrom, TakeWeightCredit, AllowTopLevelPaidExecutionFrom, }; -use crate::{ - Runtime, ParachainInfo, PolkadotXcm, - runtime_common::{ - config::xcm::{DenyThenTry, DenyExchangeWithUnknownLocation}, - xcm::OverridableAllowedLocations, - }, -}; +use crate::PolkadotXcm; match_types! { pub type ParentOrSiblings: impl Contains = { @@ -40,51 +33,11 @@ match_types! { }; } -parameter_types! { - pub QuartzDefaultAllowedLocations: Vec = vec![ - // Self location - MultiLocation { - parents: 0, - interior: Here, - }, - // Parent location - MultiLocation { - parents: 1, - interior: Here, - }, - // Statemint/Statemint location - MultiLocation { - parents: 1, - interior: X1(Parachain(1000)), - }, - // Karura/Acala location - MultiLocation { - parents: 1, - interior: X1(Parachain(2000)), - }, - // Moonriver location - MultiLocation { - parents: 1, - interior: X1(Parachain(2023)), - }, - // Self parachain address - MultiLocation { - parents: 1, - interior: X1(Parachain(ParachainInfo::get().into())), - }, - ]; -} - -pub type Barrier = DenyThenTry< - DenyExchangeWithUnknownLocation< - OverridableAllowedLocations, - >, - ( - TakeWeightCredit, - AllowTopLevelPaidExecutionFrom, - // Expected responses are OK. - AllowKnownQueryResponses, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, - ), ->; +pub type Barrier = ( + TakeWeightCredit, + AllowTopLevelPaidExecutionFrom, + // Expected responses are OK. + AllowKnownQueryResponses, + // Subscriptions for version tracking are OK. + AllowSubscriptionsFrom, +); diff --git a/runtime/unique/src/xcm_barrier.rs b/runtime/unique/src/xcm_barrier.rs index 4548e6a5e3..8e1d054736 100644 --- a/runtime/unique/src/xcm_barrier.rs +++ b/runtime/unique/src/xcm_barrier.rs @@ -15,23 +15,16 @@ // along with Unique Network. If not, see . use frame_support::{ - match_types, parameter_types, - traits::{Get, Everything}, + match_types, + traits::Everything, }; -use sp_std::{vec, vec::Vec}; -use xcm::latest::{Junction::*, Junctions::*, MultiLocation}; +use xcm::latest::{Junctions::*, MultiLocation}; use xcm_builder::{ AllowKnownQueryResponses, AllowSubscriptionsFrom, TakeWeightCredit, AllowTopLevelPaidExecutionFrom, }; -use crate::{ - Runtime, ParachainInfo, PolkadotXcm, - runtime_common::{ - config::xcm::{DenyThenTry, DenyExchangeWithUnknownLocation}, - xcm::OverridableAllowedLocations, - }, -}; +use crate::PolkadotXcm; match_types! { pub type ParentOrSiblings: impl Contains = { @@ -40,51 +33,11 @@ match_types! { }; } -parameter_types! { - pub UniqueDefaultAllowedLocations: Vec = vec![ - // Self location - MultiLocation { - parents: 0, - interior: Here, - }, - // Parent location - MultiLocation { - parents: 1, - interior: Here, - }, - // Statemint/Statemint location - MultiLocation { - parents: 1, - interior: X1(Parachain(1000)), - }, - // Karura/Acala location - MultiLocation { - parents: 1, - interior: X1(Parachain(2000)), - }, - // Moonbeam location - MultiLocation { - parents: 1, - interior: X1(Parachain(2004)), - }, - // Self parachain address - MultiLocation { - parents: 1, - interior: X1(Parachain(ParachainInfo::get().into())), - }, - ]; -} - -pub type Barrier = DenyThenTry< - DenyExchangeWithUnknownLocation< - OverridableAllowedLocations, - >, - ( - TakeWeightCredit, - AllowTopLevelPaidExecutionFrom, - // Expected responses are OK. - AllowKnownQueryResponses, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, - ), ->; +pub type Barrier = ( + TakeWeightCredit, + AllowTopLevelPaidExecutionFrom, + // Expected responses are OK. + AllowKnownQueryResponses, + // Subscriptions for version tracking are OK. + AllowSubscriptionsFrom, +); From 29cb480d045a6a9667fb9b51c7325537d5843d2a Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 22 Mar 2023 13:52:07 +0100 Subject: [PATCH 031/103] fix: remove unneded opal debug barrier -- takeweightcredit is enough --- runtime/opal/src/xcm_barrier.rs | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/runtime/opal/src/xcm_barrier.rs b/runtime/opal/src/xcm_barrier.rs index 4f84ca598e..32ec324aa9 100644 --- a/runtime/opal/src/xcm_barrier.rs +++ b/runtime/opal/src/xcm_barrier.rs @@ -15,30 +15,9 @@ // along with Unique Network. If not, see . use frame_support::traits::Everything; -use xcm::latest::{Weight, MultiLocation}; -use xcm::v3::Instruction; use xcm_builder::{AllowTopLevelPaidExecutionFrom, TakeWeightCredit}; -use xcm_executor::traits::ShouldExecute; - -/// Execution barrier that just takes `max_weight` from `weight_credit`. -/// -/// Useful to allow XCM execution by local chain users via extrinsics. -/// E.g. `pallet_xcm::reserve_asset_transfer` to transfer a reserve asset -/// out of the local chain to another one. -pub struct AllowAllDebug; -impl ShouldExecute for AllowAllDebug { - fn should_execute( - _origin: &MultiLocation, - _message: &mut [Instruction], - _max_weight: Weight, - _weight_credit: &mut Weight, - ) -> Result<(), ()> { - Ok(()) - } -} pub type Barrier = ( TakeWeightCredit, AllowTopLevelPaidExecutionFrom, - AllowAllDebug, ); From e3544d2eeb78257341ca33117f070930f63d82b6 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 22 Mar 2023 14:17:53 +0100 Subject: [PATCH 032/103] fix: xcm v3 related fixes --- runtime/common/config/xcm/mod.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/runtime/common/config/xcm/mod.rs b/runtime/common/config/xcm/mod.rs index 0867bf327e..edac6b78f2 100644 --- a/runtime/common/config/xcm/mod.rs +++ b/runtime/common/config/xcm/mod.rs @@ -29,7 +29,7 @@ use xcm_builder::{ SignedToAccountId32, SovereignSignedViaLocation, ParentIsPreset, }; use xcm_executor::{XcmExecutor, traits::ShouldExecute}; -use sp_std::{marker::PhantomData, vec::Vec}; +use sp_std::marker::PhantomData; use crate::{ Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, ParachainInfo, ParachainSystem, PolkadotXcm, XcmpQueue, xcm_barrier::Barrier, RelayNetwork, AllPalletsWithSystem, Balances, @@ -54,7 +54,10 @@ use xcm_assets::{AssetTransactor, IsReserve, Trader}; parameter_types! { pub const RelayLocation: MultiLocation = MultiLocation::parent(); pub RelayOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); - pub UniversalLocation: InteriorMultiLocation = X2(GlobalConsensus(RelayNetwork::get()), Parachain(ParachainInfo::get().into())); + pub UniversalLocation: InteriorMultiLocation = ( + GlobalConsensus(crate::RelayNetwork::get()), + Parachain(ParachainInfo::get().into()), + ).into(); pub SelfLocation: MultiLocation = MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into()))); // One XCM operation is 1_000_000 weight - almost certainly a conservative estimate. @@ -224,7 +227,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor>; type ChannelInfo = ParachainSystem; - type VersionWrapper = (); + type VersionWrapper = PolkadotXcm; type ExecuteOverweightOrigin = frame_system::EnsureRoot; type ControllerOrigin = EnsureRoot; type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; From f2aedb500a3046aeccc7d971feedc07b12107607 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 22 Mar 2023 14:18:55 +0100 Subject: [PATCH 033/103] fix: remove OverridableAllowedLocations --- runtime/common/mod.rs | 1 - runtime/common/xcm.rs | 36 ------------------------------------ 2 files changed, 37 deletions(-) delete mode 100644 runtime/common/xcm.rs diff --git a/runtime/common/mod.rs b/runtime/common/mod.rs index 681eb16142..665d4834b3 100644 --- a/runtime/common/mod.rs +++ b/runtime/common/mod.rs @@ -22,7 +22,6 @@ pub mod identity; pub mod instance; pub mod maintenance; pub mod runtime_apis; -pub mod xcm; #[cfg(feature = "scheduler")] pub mod scheduler; diff --git a/runtime/common/xcm.rs b/runtime/common/xcm.rs deleted file mode 100644 index 91c5b6aae5..0000000000 --- a/runtime/common/xcm.rs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -use sp_std::{vec::Vec, marker::PhantomData}; -use xcm::latest::MultiLocation; -use frame_support::traits::Get; - -pub struct OverridableAllowedLocations(PhantomData<(T, L)>) -where - T: pallet_configuration::Config, - L: Get>; - -impl Get> for OverridableAllowedLocations -where - T: pallet_configuration::Config, - L: Get>, -{ - fn get() -> Vec { - >::get() - .map(|bounded| bounded.into_inner()) - .unwrap_or_else(|| L::get()) - } -} From 48ebb54c2948ca1d13736970667ee3ae3da7d89b Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Mon, 27 Mar 2023 13:07:36 +0200 Subject: [PATCH 034/103] fix: weights in tests --- runtime/common/{weights.rs => weights/mod.rs} | 0 runtime/tests/Cargo.toml | 1 + runtime/tests/src/lib.rs | 2 +- 3 files changed, 2 insertions(+), 1 deletion(-) rename runtime/common/{weights.rs => weights/mod.rs} (100%) diff --git a/runtime/common/weights.rs b/runtime/common/weights/mod.rs similarity index 100% rename from runtime/common/weights.rs rename to runtime/common/weights/mod.rs diff --git a/runtime/tests/Cargo.toml b/runtime/tests/Cargo.toml index 7f9d6ba82e..31bfb14e83 100644 --- a/runtime/tests/Cargo.toml +++ b/runtime/tests/Cargo.toml @@ -43,4 +43,5 @@ scale-info = "*" evm-coder = { workspace = true } up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.39" } xcm = { workspace = true } +pallet-xcm = { workspace = true } pallet-configuration = { workspace = true } diff --git a/runtime/tests/src/lib.rs b/runtime/tests/src/lib.rs index e91016a4a5..7cd1247ac7 100644 --- a/runtime/tests/src/lib.rs +++ b/runtime/tests/src/lib.rs @@ -44,7 +44,7 @@ mod dispatch; use dispatch::CollectionDispatchT; -#[path = "../../common/weights.rs"] +#[path = "../../common/weights/mod.rs"] mod weights; use weights::CommonWeights; From 4e84fdd5539f29b5d5e9c62c2a957df87038d20a Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Mon, 27 Mar 2023 13:10:34 +0200 Subject: [PATCH 035/103] refactor: xcm transact forbidden test --- runtime/common/tests/mod.rs | 39 ++++- runtime/common/tests/xcm.rs | 192 +++++++------------------ runtime/opal/Cargo.toml | 3 - runtime/opal/src/lib.rs | 3 - runtime/opal/src/tests/logcapture.rs | 25 ---- runtime/opal/src/tests/mod.rs | 18 --- runtime/opal/src/tests/xcm.rs | 27 ---- runtime/quartz/Cargo.toml | 3 - runtime/quartz/src/lib.rs | 3 - runtime/quartz/src/tests/logcapture.rs | 25 ---- runtime/quartz/src/tests/mod.rs | 18 --- runtime/quartz/src/tests/xcm.rs | 27 ---- runtime/unique/Cargo.toml | 3 - runtime/unique/src/lib.rs | 3 - runtime/unique/src/tests/logcapture.rs | 25 ---- runtime/unique/src/tests/mod.rs | 18 --- runtime/unique/src/tests/xcm.rs | 27 ---- 17 files changed, 81 insertions(+), 378 deletions(-) delete mode 100644 runtime/opal/src/tests/logcapture.rs delete mode 100644 runtime/opal/src/tests/mod.rs delete mode 100644 runtime/opal/src/tests/xcm.rs delete mode 100644 runtime/quartz/src/tests/logcapture.rs delete mode 100644 runtime/quartz/src/tests/mod.rs delete mode 100644 runtime/quartz/src/tests/xcm.rs delete mode 100644 runtime/unique/src/tests/logcapture.rs delete mode 100644 runtime/unique/src/tests/mod.rs delete mode 100644 runtime/unique/src/tests/xcm.rs diff --git a/runtime/common/tests/mod.rs b/runtime/common/tests/mod.rs index 8fb9cf18fb..4ed3256f51 100644 --- a/runtime/common/tests/mod.rs +++ b/runtime/common/tests/mod.rs @@ -14,22 +14,49 @@ // You should have received a copy of the GNU General Public License // along with Unique Network. If not, see . -use sp_runtime::BuildStorage; +use sp_runtime::{BuildStorage, Storage}; use sp_core::{Public, Pair}; use sp_std::vec; use up_common::types::AuraId; -use crate::{GenesisConfig, ParachainInfoConfig}; +use crate::{Runtime, GenesisConfig, ParachainInfoConfig, RuntimeEvent, System}; + +pub use sp_runtime::AccountId32 as AccountId; +pub type Balance = u128; pub mod xcm; +#[cfg(any(feature = "opal-runtime", feature = "quartz-runtime"))] +/// PARA_ID for Opal/Sapphire/Quartz +const PARA_ID: u32 = 2095; + +#[cfg(feature = "unique-runtime")] +/// PARA_ID for Unique +const PARA_ID: u32 = 2037; + fn get_from_seed(seed: &str) -> ::Public { TPublic::Pair::from_string(&format!("//{}", seed), None) .expect("static values are valid; qed") .public() } +fn last_events(n: usize) -> Vec { + System::events().into_iter().map(|e| e.event).rev().take(n).rev().collect() +} + +fn new_test_ext(balances: Vec<(AccountId, Balance)>) -> sp_io::TestExternalities { + let mut storage = make_basic_storage(); + + pallet_balances::GenesisConfig:: { balances } + .assimilate_storage(&mut storage) + .unwrap(); + + let mut ext = sp_io::TestExternalities::new(storage); + ext.execute_with(|| System::set_block_number(1)); + ext +} + #[cfg(feature = "collator-selection")] -fn new_test_ext(para_id: u32) -> sp_io::TestExternalities { +fn make_basic_storage() -> Storage { use sp_core::{sr25519}; use sp_runtime::traits::{IdentifyAccount, Verify}; use crate::{AccountId, Signature, SessionKeys, CollatorSelectionConfig, SessionConfig}; @@ -66,7 +93,7 @@ fn new_test_ext(para_id: u32) -> sp_io::TestExternalities { collator_selection: CollatorSelectionConfig { invulnerables }, session: SessionConfig { keys }, parachain_info: ParachainInfoConfig { - parachain_id: para_id.into(), + parachain_id: PARA_ID.into(), }, ..GenesisConfig::default() }; @@ -75,7 +102,7 @@ fn new_test_ext(para_id: u32) -> sp_io::TestExternalities { } #[cfg(not(feature = "collator-selection"))] -fn new_test_ext(para_id: u32) -> sp_io::TestExternalities { +fn make_basic_storage() -> Storage { use crate::AuraConfig; let cfg = GenesisConfig { @@ -86,7 +113,7 @@ fn new_test_ext(para_id: u32) -> sp_io::TestExternalities { ], }, parachain_info: ParachainInfoConfig { - parachain_id: para_id.into(), + parachain_id: PARA_ID.into(), }, ..GenesisConfig::default() }; diff --git a/runtime/common/tests/xcm.rs b/runtime/common/tests/xcm.rs index b3337afbba..f5b714e522 100644 --- a/runtime/common/tests/xcm.rs +++ b/runtime/common/tests/xcm.rs @@ -14,149 +14,53 @@ // You should have received a copy of the GNU General Public License // along with Unique Network. If not, see . -use xcm_executor::traits::ShouldExecute; -use xcm::latest::prelude::*; -use logtest::Logger; -use crate::RuntimeCall; -use super::new_test_ext; -use frame_support::pallet_prelude::Weight; - -fn catch_xcm_barrier_log(logger: &mut Logger, expected_msg: &str) -> Result<(), String> { - for record in logger { - if record.target() == "xcm::barrier" && record.args() == expected_msg { - return Ok(()); +use xcm::{ + VersionedXcm, + latest::{prelude::*, Error} +}; +use codec::Encode; +use crate::{Runtime, RuntimeCall, RuntimeOrigin, RuntimeEvent, PolkadotXcm}; +use super::{new_test_ext, last_events, AccountId}; +use frame_support::{ + pallet_prelude::Weight, +}; + +const ALICE: AccountId = AccountId::new([0u8; 32]); +const BOB: AccountId = AccountId::new([1u8; 32]); + +const INITIAL_BALANCE: u128 = 1000000000000000000_0000; // 1000 UNQ + +#[test] +pub fn xcm_transact_is_forbidden() { + new_test_ext(vec![(ALICE, INITIAL_BALANCE)]).execute_with(|| { + PolkadotXcm::execute( + RuntimeOrigin::signed(ALICE), + Box::new(VersionedXcm::from(Xcm(vec![ + Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(1000, 1000), + call: RuntimeCall::Balances( + pallet_balances::Call::::transfer { + dest: BOB.into(), + value: INITIAL_BALANCE / 2, + } + ).encode().into(), + } + ]))), + Weight::from_parts(1001000, 2000), + ).expect("XCM execute must succeed, the error should be in the `PolkadotXcm::Attempted` event"); + + let xcm_event = &last_events(1)[0]; + match xcm_event { + RuntimeEvent::PolkadotXcm( + pallet_xcm::Event::::Attempted( + Outcome::Incomplete(_weight, Error::NoPermission) + ) + ) => { /* Pass */ }, + _ => panic!( + "Expected PolkadotXcm.Attempted(Incomplete(_weight, NoPermission)),\ + found: {xcm_event:#?}" + ) } - } - - Err(format!( - "the expected XCM barrier log `{}` is not found", - expected_msg - )) -} - -/// WARNING: Uses log capturing -/// See https://docs.rs/logtest/latest/logtest/index.html#constraints -pub fn barrier_denies_transact(logger: &mut Logger) { - let location = MultiLocation { - parents: 0, - interior: Junctions::Here, - }; - - // We will never decode this "call", - // so it is irrelevant what we are passing to the `transact` cmd. - let fake_encoded_call = vec![0u8]; - - let transact_inst: Instruction = Transact { - origin_kind: OriginKind::Superuser, - require_weight_at_most: Weight::default(), - call: fake_encoded_call.into(), - }; - - let mut xcm_program = vec![transact_inst]; - - let max_weight = Weight::from_parts(100_000, 100_000); - let mut weight_credit = Weight::from_parts(100_000_000, 100_000_000); - - let result = B::should_execute(&location, &mut xcm_program, max_weight, &mut weight_credit); - - assert!( - result.is_err(), - "the barrier should disallow the XCM transact cmd" - ); - - catch_xcm_barrier_log(logger, "transact XCM rejected").unwrap(); -} - -fn xcm_execute( - self_para_id: u32, - location: &MultiLocation, - xcm: &mut [Instruction], -) -> Result<(), ()> { - new_test_ext(self_para_id).execute_with(|| { - let max_weight = Weight::from_parts(100_000, 100_000); - let mut weight_credit = Weight::from_parts(100_000_000, 100_000_000); - - B::should_execute(&location, xcm, max_weight, &mut weight_credit) - }) -} - -fn make_multiassets(location: &MultiLocation) -> MultiAssets { - let id = AssetId::Concrete(location.clone()); - let fun = Fungibility::Fungible(42); - let multiasset = MultiAsset { id, fun }; - - multiasset.into() -} - -fn make_transfer_reserve_asset(location: &MultiLocation) -> Xcm { - let assets = make_multiassets(location); - let inst = TransferReserveAsset { - assets, - dest: location.clone(), - xcm: Xcm(vec![]), - }; - - Xcm::(vec![inst]) -} - -fn make_deposit_reserve_asset(location: &MultiLocation) -> Xcm { - let assets = make_multiassets(location); - let inst = DepositReserveAsset { - assets: assets.into(), - dest: location.clone(), - xcm: Xcm(vec![]), - }; - - Xcm::(vec![inst]) -} - -fn expect_transfer_location_denied( - logger: &mut Logger, - self_para_id: u32, - location: &MultiLocation, - xcm: &mut [Instruction], -) -> Result<(), String> { - let result = xcm_execute::(self_para_id, location, xcm); - - if result.is_ok() { - return Err("the barrier should deny the unknown location".into()); - } - - catch_xcm_barrier_log(logger, "Unexpected deposit or transfer location") -} - -/// WARNING: Uses log capturing -/// See https://docs.rs/logtest/latest/logtest/index.html#constraints -pub fn barrier_denies_transfer_from_unknown_location( - logger: &mut Logger, - self_para_id: u32, -) -> Result<(), String> -where - B: ShouldExecute, -{ - const UNKNOWN_PARACHAIN_ID: u32 = 4057; - - let unknown_location = MultiLocation { - parents: 1, - interior: X1(Parachain(UNKNOWN_PARACHAIN_ID)), - }; - - let mut transfer_reserve_asset = make_transfer_reserve_asset(&unknown_location); - let mut deposit_reserve_asset = make_deposit_reserve_asset(&unknown_location); - - expect_transfer_location_denied::( - logger, - self_para_id, - &unknown_location, - &mut transfer_reserve_asset.0, - )?; - - expect_transfer_location_denied::( - logger, - self_para_id, - &unknown_location, - &mut deposit_reserve_asset.0, - )?; - - Ok(()) + }); } diff --git a/runtime/opal/Cargo.toml b/runtime/opal/Cargo.toml index b70d600425..aa2d47a11f 100644 --- a/runtime/opal/Cargo.toml +++ b/runtime/opal/Cargo.toml @@ -307,8 +307,5 @@ pallet-test-utils = { workspace = true } impl-trait-for-tuples = { workspace = true } -[dev-dependencies] -logtest = { workspace = true } - [build-dependencies] substrate-wasm-builder = { workspace = true } diff --git a/runtime/opal/src/lib.rs b/runtime/opal/src/lib.rs index d90bf518bd..707ea03504 100644 --- a/runtime/opal/src/lib.rs +++ b/runtime/opal/src/lib.rs @@ -41,9 +41,6 @@ mod runtime_common; pub mod xcm_barrier; -#[cfg(test)] -mod tests; - pub use runtime_common::*; pub const RUNTIME_NAME: &str = "opal"; diff --git a/runtime/opal/src/tests/logcapture.rs b/runtime/opal/src/tests/logcapture.rs deleted file mode 100644 index da0a310310..0000000000 --- a/runtime/opal/src/tests/logcapture.rs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -use logtest::Logger; -use super::xcm::opal_xcm_tests; - -#[test] -fn opal_log_capture_tests() { - let mut logger = Logger::start(); - - opal_xcm_tests(&mut logger); -} diff --git a/runtime/opal/src/tests/mod.rs b/runtime/opal/src/tests/mod.rs deleted file mode 100644 index 587524b3c9..0000000000 --- a/runtime/opal/src/tests/mod.rs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -mod logcapture; -mod xcm; diff --git a/runtime/opal/src/tests/xcm.rs b/runtime/opal/src/tests/xcm.rs deleted file mode 100644 index 39ce4e3fd3..0000000000 --- a/runtime/opal/src/tests/xcm.rs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -use logtest::Logger; -use crate::{runtime_common::tests::xcm::*, xcm_barrier::Barrier}; - -const OPAL_PARA_ID: u32 = 2095; // Same as Quartz - -pub fn opal_xcm_tests(logger: &mut Logger) { - barrier_denies_transact::(logger); - - barrier_denies_transfer_from_unknown_location::(logger, OPAL_PARA_ID) - .expect_err("opal runtime allows any location"); -} diff --git a/runtime/quartz/Cargo.toml b/runtime/quartz/Cargo.toml index dbf8324c3a..c9c8314f64 100644 --- a/runtime/quartz/Cargo.toml +++ b/runtime/quartz/Cargo.toml @@ -300,8 +300,5 @@ pallet-test-utils = { workspace = true } impl-trait-for-tuples = { workspace = true } -[dev-dependencies] -logtest = { workspace = true } - [build-dependencies] substrate-wasm-builder = { workspace = true } diff --git a/runtime/quartz/src/lib.rs b/runtime/quartz/src/lib.rs index 795714f927..8a7f3063ce 100644 --- a/runtime/quartz/src/lib.rs +++ b/runtime/quartz/src/lib.rs @@ -41,9 +41,6 @@ mod runtime_common; pub mod xcm_barrier; -#[cfg(test)] -mod tests; - pub use runtime_common::*; #[cfg(feature = "become-sapphire")] diff --git a/runtime/quartz/src/tests/logcapture.rs b/runtime/quartz/src/tests/logcapture.rs deleted file mode 100644 index 97cecd289b..0000000000 --- a/runtime/quartz/src/tests/logcapture.rs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -use logtest::Logger; -use super::xcm::quartz_xcm_tests; - -#[test] -fn quartz_log_capture_tests() { - let mut logger = Logger::start(); - - quartz_xcm_tests(&mut logger); -} diff --git a/runtime/quartz/src/tests/mod.rs b/runtime/quartz/src/tests/mod.rs deleted file mode 100644 index 587524b3c9..0000000000 --- a/runtime/quartz/src/tests/mod.rs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -mod logcapture; -mod xcm; diff --git a/runtime/quartz/src/tests/xcm.rs b/runtime/quartz/src/tests/xcm.rs deleted file mode 100644 index 1244b03796..0000000000 --- a/runtime/quartz/src/tests/xcm.rs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -use logtest::Logger; -use crate::{runtime_common::tests::xcm::*, xcm_barrier::Barrier}; - -const QUARTZ_PARA_ID: u32 = 2095; - -pub fn quartz_xcm_tests(logger: &mut Logger) { - barrier_denies_transact::(logger); - - barrier_denies_transfer_from_unknown_location::(logger, QUARTZ_PARA_ID) - .expect("quartz runtime denies an unknown location"); -} diff --git a/runtime/unique/Cargo.toml b/runtime/unique/Cargo.toml index 652465363d..ebf8cdca72 100644 --- a/runtime/unique/Cargo.toml +++ b/runtime/unique/Cargo.toml @@ -298,8 +298,5 @@ pallet-test-utils = { workspace = true } impl-trait-for-tuples = { workspace = true } -[dev-dependencies] -logtest = { workspace = true } - [build-dependencies] substrate-wasm-builder = { workspace = true } diff --git a/runtime/unique/src/lib.rs b/runtime/unique/src/lib.rs index 1bb07b22b2..8cd0129bb1 100644 --- a/runtime/unique/src/lib.rs +++ b/runtime/unique/src/lib.rs @@ -41,9 +41,6 @@ mod runtime_common; pub mod xcm_barrier; -#[cfg(test)] -mod tests; - pub use runtime_common::*; pub const RUNTIME_NAME: &str = "unique"; diff --git a/runtime/unique/src/tests/logcapture.rs b/runtime/unique/src/tests/logcapture.rs deleted file mode 100644 index ab7308513c..0000000000 --- a/runtime/unique/src/tests/logcapture.rs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -use logtest::Logger; -use super::xcm::unique_xcm_tests; - -#[test] -fn unique_log_capture_tests() { - let mut logger = Logger::start(); - - unique_xcm_tests(&mut logger); -} diff --git a/runtime/unique/src/tests/mod.rs b/runtime/unique/src/tests/mod.rs deleted file mode 100644 index 587524b3c9..0000000000 --- a/runtime/unique/src/tests/mod.rs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -mod logcapture; -mod xcm; diff --git a/runtime/unique/src/tests/xcm.rs b/runtime/unique/src/tests/xcm.rs deleted file mode 100644 index 0a6cff931e..0000000000 --- a/runtime/unique/src/tests/xcm.rs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. -// This file is part of Unique Network. - -// Unique Network is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Unique Network is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Unique Network. If not, see . - -use logtest::Logger; -use crate::{runtime_common::tests::xcm::*, xcm_barrier::Barrier}; - -const UNIQUE_PARA_ID: u32 = 2037; - -pub fn unique_xcm_tests(logger: &mut Logger) { - barrier_denies_transact::(logger); - - barrier_denies_transfer_from_unknown_location::(logger, UNIQUE_PARA_ID) - .expect("unique runtime denies an unknown location"); -} From 3ba14ab26c19505a1790993de65dfa58f7e4b5ea Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Mon, 27 Mar 2023 13:29:15 +0200 Subject: [PATCH 036/103] fix: cargo fmt --- pallets/configuration/src/lib.rs | 3 ++- runtime/common/tests/mod.rs | 14 +++++++--- runtime/common/tests/xcm.rs | 45 +++++++++++++++---------------- runtime/opal/src/xcm_barrier.rs | 5 +--- runtime/quartz/src/xcm_barrier.rs | 5 +--- runtime/unique/src/xcm_barrier.rs | 5 +--- 6 files changed, 36 insertions(+), 41 deletions(-) diff --git a/pallets/configuration/src/lib.rs b/pallets/configuration/src/lib.rs index d0cd767440..a71bf6ed2a 100644 --- a/pallets/configuration/src/lib.rs +++ b/pallets/configuration/src/lib.rs @@ -43,7 +43,8 @@ mod pallet { use super::*; use frame_support::{ traits::{Get, ReservableCurrency, Currency}, - pallet_prelude::{StorageValue, ValueQuery, DispatchResult, IsType}, log, + pallet_prelude::{StorageValue, ValueQuery, DispatchResult, IsType}, + log, }; use frame_system::{pallet_prelude::OriginFor, ensure_root, Config as SystemConfig}; diff --git a/runtime/common/tests/mod.rs b/runtime/common/tests/mod.rs index 4ed3256f51..cc92ec3c80 100644 --- a/runtime/common/tests/mod.rs +++ b/runtime/common/tests/mod.rs @@ -40,7 +40,13 @@ fn get_from_seed(seed: &str) -> ::Public } fn last_events(n: usize) -> Vec { - System::events().into_iter().map(|e| e.event).rev().take(n).rev().collect() + System::events() + .into_iter() + .map(|e| e.event) + .rev() + .take(n) + .rev() + .collect() } fn new_test_ext(balances: Vec<(AccountId, Balance)>) -> sp_io::TestExternalities { @@ -50,9 +56,9 @@ fn new_test_ext(balances: Vec<(AccountId, Balance)>) -> sp_io::TestExternalities .assimilate_storage(&mut storage) .unwrap(); - let mut ext = sp_io::TestExternalities::new(storage); - ext.execute_with(|| System::set_block_number(1)); - ext + let mut ext = sp_io::TestExternalities::new(storage); + ext.execute_with(|| System::set_block_number(1)); + ext } #[cfg(feature = "collator-selection")] diff --git a/runtime/common/tests/xcm.rs b/runtime/common/tests/xcm.rs index f5b714e522..821e2f5544 100644 --- a/runtime/common/tests/xcm.rs +++ b/runtime/common/tests/xcm.rs @@ -16,51 +16,48 @@ use xcm::{ VersionedXcm, - latest::{prelude::*, Error} + latest::{prelude::*, Error}, }; use codec::Encode; use crate::{Runtime, RuntimeCall, RuntimeOrigin, RuntimeEvent, PolkadotXcm}; use super::{new_test_ext, last_events, AccountId}; -use frame_support::{ - pallet_prelude::Weight, -}; +use frame_support::{pallet_prelude::Weight}; const ALICE: AccountId = AccountId::new([0u8; 32]); const BOB: AccountId = AccountId::new([1u8; 32]); -const INITIAL_BALANCE: u128 = 1000000000000000000_0000; // 1000 UNQ +const INITIAL_BALANCE: u128 = 1000000000000000000_0000; // 1000 UNQ #[test] pub fn xcm_transact_is_forbidden() { new_test_ext(vec![(ALICE, INITIAL_BALANCE)]).execute_with(|| { PolkadotXcm::execute( RuntimeOrigin::signed(ALICE), - Box::new(VersionedXcm::from(Xcm(vec![ - Transact { - origin_kind: OriginKind::Native, - require_weight_at_most: Weight::from_parts(1000, 1000), - call: RuntimeCall::Balances( - pallet_balances::Call::::transfer { - dest: BOB.into(), - value: INITIAL_BALANCE / 2, - } - ).encode().into(), - } - ]))), + Box::new(VersionedXcm::from(Xcm(vec![Transact { + origin_kind: OriginKind::Native, + require_weight_at_most: Weight::from_parts(1000, 1000), + call: RuntimeCall::Balances(pallet_balances::Call::::transfer { + dest: BOB.into(), + value: INITIAL_BALANCE / 2, + }) + .encode() + .into(), + }]))), Weight::from_parts(1001000, 2000), - ).expect("XCM execute must succeed, the error should be in the `PolkadotXcm::Attempted` event"); + ) + .expect( + "XCM execute must succeed, the error should be in the `PolkadotXcm::Attempted` event", + ); let xcm_event = &last_events(1)[0]; match xcm_event { - RuntimeEvent::PolkadotXcm( - pallet_xcm::Event::::Attempted( - Outcome::Incomplete(_weight, Error::NoPermission) - ) - ) => { /* Pass */ }, + RuntimeEvent::PolkadotXcm(pallet_xcm::Event::::Attempted( + Outcome::Incomplete(_weight, Error::NoPermission), + )) => { /* Pass */ } _ => panic!( "Expected PolkadotXcm.Attempted(Incomplete(_weight, NoPermission)),\ found: {xcm_event:#?}" - ) + ), } }); } diff --git a/runtime/opal/src/xcm_barrier.rs b/runtime/opal/src/xcm_barrier.rs index 32ec324aa9..a9e9a6d450 100644 --- a/runtime/opal/src/xcm_barrier.rs +++ b/runtime/opal/src/xcm_barrier.rs @@ -17,7 +17,4 @@ use frame_support::traits::Everything; use xcm_builder::{AllowTopLevelPaidExecutionFrom, TakeWeightCredit}; -pub type Barrier = ( - TakeWeightCredit, - AllowTopLevelPaidExecutionFrom, -); +pub type Barrier = (TakeWeightCredit, AllowTopLevelPaidExecutionFrom); diff --git a/runtime/quartz/src/xcm_barrier.rs b/runtime/quartz/src/xcm_barrier.rs index 8e1d054736..9aa370399b 100644 --- a/runtime/quartz/src/xcm_barrier.rs +++ b/runtime/quartz/src/xcm_barrier.rs @@ -14,10 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Unique Network. If not, see . -use frame_support::{ - match_types, - traits::Everything, -}; +use frame_support::{match_types, traits::Everything}; use xcm::latest::{Junctions::*, MultiLocation}; use xcm_builder::{ AllowKnownQueryResponses, AllowSubscriptionsFrom, TakeWeightCredit, diff --git a/runtime/unique/src/xcm_barrier.rs b/runtime/unique/src/xcm_barrier.rs index 8e1d054736..9aa370399b 100644 --- a/runtime/unique/src/xcm_barrier.rs +++ b/runtime/unique/src/xcm_barrier.rs @@ -14,10 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Unique Network. If not, see . -use frame_support::{ - match_types, - traits::Everything, -}; +use frame_support::{match_types, traits::Everything}; use xcm::latest::{Junctions::*, MultiLocation}; use xcm_builder::{ AllowKnownQueryResponses, AllowSubscriptionsFrom, TakeWeightCredit, From f0e34381fff67cc203e28edeb392835dc23d5af5 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Mon, 27 Mar 2023 13:29:39 +0200 Subject: [PATCH 037/103] fix: remove logtest --- Cargo.lock | 28 ++++------------------------ Cargo.toml | 1 - 2 files changed, 4 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e54969ff09..0f49a76937 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1372,6 +1372,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "ctor" version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1382,6 +1383,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> 3bef592b (fix: remove logtest) name = "ctr" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4988,17 +4991,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if", - "value-bag", -] - -[[package]] -name = "logtest" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3e43a8657c1d64516dcc9db8ca03826a4aceaf89d5ce1b37b59f6ff0e43026" -dependencies = [ - "lazy_static", - "log", ] [[package]] @@ -5709,7 +5701,6 @@ dependencies = [ "hex-literal", "impl-trait-for-tuples", "log", - "logtest", "num_enum", "orml-tokens", "orml-traits", @@ -9160,7 +9151,6 @@ dependencies = [ "hex-literal", "impl-trait-for-tuples", "log", - "logtest", "num_enum", "orml-tokens", "orml-traits", @@ -12613,6 +12603,7 @@ dependencies = [ "pallet-timestamp", "pallet-transaction-payment", "pallet-unique", + "pallet-xcm", "parity-scale-codec", "scale-info", "sp-core", @@ -13436,7 +13427,6 @@ dependencies = [ "hex-literal", "impl-trait-for-tuples", "log", - "logtest", "num_enum", "orml-tokens", "orml-traits", @@ -13637,16 +13627,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "value-bag" -version = "1.0.0-alpha.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" -dependencies = [ - "ctor", - "version_check", -] - [[package]] name = "vcpkg" version = "0.2.15" diff --git a/Cargo.toml b/Cargo.toml index da2ff955bb..cd0c0263bc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -190,7 +190,6 @@ hex-literal = "0.3.4" impl-trait-for-tuples = "0.2.2" jsonrpsee = { version = "0.16.2", features = ["macros", "server"] } log = { version = "0.4.16", default-features = false } -logtest = "2.0.0" num_enum = { version = "0.5.3", default-features = false } primitive-types = { version = "0.12.1", default-features = false } serde = { default-features = false, features = ['derive'], version = "1.0.136" } From 1e087f1559ec7700b0b6ee1459b347f45a02b990 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Mon, 27 Mar 2023 13:37:57 +0200 Subject: [PATCH 038/103] fix: Cargo.lock --- Cargo.lock | 92 +++++++++++++++++++++++------------------------------- 1 file changed, 39 insertions(+), 53 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0f49a76937..8581afd77f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -375,13 +375,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.67" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -1021,7 +1021,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -1139,9 +1139,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" dependencies = [ "libc", ] @@ -1372,19 +1372,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -======= ->>>>>>> 3bef592b (fix: remove logtest) name = "ctr" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1923,9 +1910,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" dependencies = [ "cc", "cxxbridge-flags", @@ -1935,9 +1922,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" dependencies = [ "cc", "codespan-reporting", @@ -1945,24 +1932,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] name = "cxxbridge-flags" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" [[package]] name = "cxxbridge-macro" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -2380,7 +2367,7 @@ checksum = "48016319042fb7c87b78d2993084a831793a897a5cd1a2a67cab9d1eeb4b7d76" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -3931,9 +3918,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", @@ -5242,9 +5229,9 @@ dependencies = [ [[package]] name = "mockall" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" +checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" dependencies = [ "cfg-if", "downcast", @@ -5257,9 +5244,9 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" +checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ "cfg-if", "proc-macro2", @@ -9002,9 +8989,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.53" +version = "1.0.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73" +checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534" dependencies = [ "unicode-ident", ] @@ -9463,7 +9450,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -9480,9 +9467,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.2" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce168fea28d3e05f158bda4576cf0c844d5045bc2cc3620fa0292ed5bb5814c" +checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" dependencies = [ "aho-corasick", "memchr", @@ -11223,7 +11210,7 @@ checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -12500,9 +12487,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9" +checksum = "5aad1363ed6d37b84299588d62d3a7d95b5a5c2d9aad5c85609fda12afaa1f40" dependencies = [ "proc-macro2", "quote", @@ -12632,7 +12619,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.10", ] [[package]] @@ -14602,9 +14589,9 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "winnow" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deac0939bd6e4f24ab5919fbf751c97a8cfc8543bb083a305ed5c0c10bb241d1" +checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" dependencies = [ "memchr", ] @@ -14779,23 +14766,22 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.3" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" +checksum = "57090580b8b26d9fd2288c4ac982b3b3c6446cd8e91112bcf672d5ddb2f17441" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "synstructure", + "syn 2.0.10", ] [[package]] From 1e19d5419078d01342c885aede7c709981fe9c35 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Mon, 27 Mar 2023 13:53:19 +0200 Subject: [PATCH 039/103] fix: bump polkadot api version --- tests/package.json | 4 +- tests/yarn.lock | 1148 ++++++++++++++------------------------------ 2 files changed, 353 insertions(+), 799 deletions(-) diff --git a/tests/package.json b/tests/package.json index 135d82f5df..d7e6c9e84a 100644 --- a/tests/package.json +++ b/tests/package.json @@ -4,7 +4,7 @@ "description": "Unique Chain Tests", "main": "", "devDependencies": { - "@polkadot/typegen": "9.10.2", + "@polkadot/typegen": "10.2.1", "@types/chai": "^4.3.3", "@types/chai-as-promised": "^7.1.5", "@types/chai-like": "^1.1.1", @@ -120,7 +120,7 @@ "license": "SEE LICENSE IN ../LICENSE", "homepage": "", "dependencies": { - "@polkadot/api": "9.10.2", + "@polkadot/api": "10.2.1", "@polkadot/util": "10.2.1", "@polkadot/util-crypto": "10.2.1", "chai-as-promised": "^7.1.1", diff --git a/tests/yarn.lock b/tests/yarn.lock index 56e454966b..e3090a9bae 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -2,212 +2,13 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.20.5": - version "7.20.14" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.14.tgz#4106fc8b755f3e3ee0a0a7c27dde5de1d2b2baf8" - integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw== - -"@babel/core@^7.20.5": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" - integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helpers" "^7.20.7" - "@babel/parser" "^7.20.7" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.12" - "@babel/types" "^7.20.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/generator@^7.20.7": - version "7.20.14" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce" - integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== - dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== - dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" - -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" - integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.10" - "@babel/types" "^7.20.7" - -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== - -"@babel/helpers@^7.20.7": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.13.tgz#e3cb731fb70dc5337134cadc24cbbad31cc87ad2" - integrity sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.13" - "@babel/types" "^7.20.7" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.20.13", "@babel/parser@^7.20.7": - version "7.20.15" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89" - integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg== - -"@babel/register@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.18.9.tgz#1888b24bc28d5cc41c412feb015e9ff6b96e439c" - integrity sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw== - dependencies: - clone-deep "^4.0.1" - find-cache-dir "^2.0.0" - make-dir "^2.1.0" - pirates "^4.0.5" - source-map-support "^0.5.16" - -"@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6": +"@babel/runtime@^7.20.6": version "7.20.13" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b" integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA== dependencies: regenerator-runtime "^0.13.11" -"@babel/template@^7.18.10", "@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.13": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" - integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.13" - "@babel/types" "^7.20.7" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" - integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -450,34 +251,12 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== @@ -490,23 +269,15 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - "@noble/hashes@1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.3.tgz#360afc77610e0a61f3417e497dcf36862e4f8111" integrity sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A== -"@noble/hashes@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" - integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== +"@noble/hashes@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.0.tgz#085fd70f6d7d9d109671090ccae1d3bec62554a1" + integrity sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg== "@noble/secp256k1@1.7.0": version "1.7.0" @@ -539,77 +310,77 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@polkadot/api-augment@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-9.10.2.tgz#9d1875bffe9d8677a4f03d53ca6df3d0d7e7f53d" - integrity sha512-B0xC7yvPAZqPZpKJzrlFSDfHBawCJISwdV4/nBSs1/AaqQIXVu2ZqPUaSdq7eisZL/EZziptK0SpCtDcb6LpAg== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/api-base" "9.10.2" - "@polkadot/rpc-augment" "9.10.2" - "@polkadot/types" "9.10.2" - "@polkadot/types-augment" "9.10.2" - "@polkadot/types-codec" "9.10.2" - "@polkadot/util" "^10.2.1" - -"@polkadot/api-base@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-9.10.2.tgz#39248e966b468ecff7c0ed00bb61dfca14ca99d4" - integrity sha512-M/Yushqk6eEAfbkF90vy3GCVg+a2uVeSXyTBKbmkjZtcE7x39GiXs7LOJuYkIim51hlwcvVSeInX8HufwnTUMw== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/rpc-core" "9.10.2" - "@polkadot/types" "9.10.2" - "@polkadot/util" "^10.2.1" - rxjs "^7.6.0" - -"@polkadot/api-derive@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-9.10.2.tgz#d6b0eb558ee057416b87a304ca2790b19afa4be6" - integrity sha512-Ut1aqbGvqAkxXq7M4HgJ7BVhUyfbQigqt5LISmnjWdGkhroBxtIJ24saOUPYNr0O/c3jocJpoWqGK2CuucL81w== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/api" "9.10.2" - "@polkadot/api-augment" "9.10.2" - "@polkadot/api-base" "9.10.2" - "@polkadot/rpc-core" "9.10.2" - "@polkadot/types" "9.10.2" - "@polkadot/types-codec" "9.10.2" - "@polkadot/util" "^10.2.1" - "@polkadot/util-crypto" "^10.2.1" - rxjs "^7.6.0" - -"@polkadot/api@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-9.10.2.tgz#9a3132f0c8a5de6c2b7d56f9d9e9c9c5ed2bc77e" - integrity sha512-5leF7rxwRkkd/g11tGPho/CcbInVX7ZiuyMsLMTwn+2PDX+Ggv/gmxUboa34eyeLp8/AMui5YbqRD4QExLTxqw== +"@polkadot/api-augment@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-10.2.1.tgz#b4f7b5febec00f025aea2a4d63c62aa0bbd812a6" + integrity sha512-fqxm+B0ASA5bdacOMk/YuVUGuRZT/B0iLOoaUSy2Z9yA4qx1mZnazwzIIkfHxTdcpEw8+prRmgv0EMXxMvmA0g== + dependencies: + "@polkadot/api-base" "10.2.1" + "@polkadot/rpc-augment" "10.2.1" + "@polkadot/types" "10.2.1" + "@polkadot/types-augment" "10.2.1" + "@polkadot/types-codec" "10.2.1" + "@polkadot/util" "^11.1.2" + tslib "^2.5.0" + +"@polkadot/api-base@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-10.2.1.tgz#e2868af7c5884b6cceb6fefd258852e71dae9516" + integrity sha512-SLWjdzAGyVINsMa8V0XPK8npnJWUObuOlRmJ6kcxcwBi4BTJJeDMIp7HsATrxwhdBWZr7uuk+bQi+7ADH8yzvA== dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/api-augment" "9.10.2" - "@polkadot/api-base" "9.10.2" - "@polkadot/api-derive" "9.10.2" - "@polkadot/keyring" "^10.2.1" - "@polkadot/rpc-augment" "9.10.2" - "@polkadot/rpc-core" "9.10.2" - "@polkadot/rpc-provider" "9.10.2" - "@polkadot/types" "9.10.2" - "@polkadot/types-augment" "9.10.2" - "@polkadot/types-codec" "9.10.2" - "@polkadot/types-create" "9.10.2" - "@polkadot/types-known" "9.10.2" - "@polkadot/util" "^10.2.1" - "@polkadot/util-crypto" "^10.2.1" - eventemitter3 "^4.0.7" - rxjs "^7.6.0" + "@polkadot/rpc-core" "10.2.1" + "@polkadot/types" "10.2.1" + "@polkadot/util" "^11.1.2" + rxjs "^7.8.0" + tslib "^2.5.0" -"@polkadot/keyring@^10.2.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-10.4.1.tgz#45f44e7fb9b33f625cea74ab5684ca8396f00d07" - integrity sha512-urTl0ReOr1A1b2kSF6QnGlVc2IcJpDnTacxwA4kIVn45p4Kysi19ek7odSdLA5yNcDZSB+/4uITZQ6meClS71Q== - dependencies: - "@babel/runtime" "^7.20.13" - "@polkadot/util" "10.4.1" - "@polkadot/util-crypto" "10.4.1" +"@polkadot/api-derive@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-10.2.1.tgz#0eb9471bc11ac61f28a7d4210f72b847132124b9" + integrity sha512-rLd4n57weI74A2hlDMoS/TmeKdzdyztWMRf4PznN6W2+31bfI9IOtmJaxUs8ZxEYO5nbHOZRzy6l4d+8HhC+5g== + dependencies: + "@polkadot/api" "10.2.1" + "@polkadot/api-augment" "10.2.1" + "@polkadot/api-base" "10.2.1" + "@polkadot/rpc-core" "10.2.1" + "@polkadot/types" "10.2.1" + "@polkadot/types-codec" "10.2.1" + "@polkadot/util" "^11.1.2" + "@polkadot/util-crypto" "^11.1.2" + rxjs "^7.8.0" + tslib "^2.5.0" + +"@polkadot/api@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-10.2.1.tgz#66ca2e5ec30b3b01de491518cda5ed4919dc6829" + integrity sha512-T8wXJQIZIM5vow1mU9JE2KN2/lFwBGK2YGnZdHRuLJY0QWn+z8FuJik9kEtgNcZ7gjPnT/rBXd71V3PxixvxcA== + dependencies: + "@polkadot/api-augment" "10.2.1" + "@polkadot/api-base" "10.2.1" + "@polkadot/api-derive" "10.2.1" + "@polkadot/keyring" "^11.1.2" + "@polkadot/rpc-augment" "10.2.1" + "@polkadot/rpc-core" "10.2.1" + "@polkadot/rpc-provider" "10.2.1" + "@polkadot/types" "10.2.1" + "@polkadot/types-augment" "10.2.1" + "@polkadot/types-codec" "10.2.1" + "@polkadot/types-create" "10.2.1" + "@polkadot/types-known" "10.2.1" + "@polkadot/util" "^11.1.2" + "@polkadot/util-crypto" "^11.1.2" + eventemitter3 "^5.0.0" + rxjs "^7.8.0" + tslib "^2.5.0" + +"@polkadot/keyring@^11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-11.1.2.tgz#5b2478308aca737b842f761435be160d924c6b00" + integrity sha512-LvyvVTvW9gZ3HyYuSfozRI9fKMJNP33LSVoABNHDY3nUPBFPTitEgMtInw6RJkTy2oWGU5C+dEFmtxjb9NvA8g== + dependencies: + "@polkadot/util" "11.1.2" + "@polkadot/util-crypto" "11.1.2" + tslib "^2.5.0" "@polkadot/networks@10.2.1": version "10.2.1" @@ -620,142 +391,140 @@ "@polkadot/util" "10.2.1" "@substrate/ss58-registry" "^1.35.0" -"@polkadot/networks@10.4.1", "@polkadot/networks@^10.2.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-10.4.1.tgz#87880a16e34c4da77db47e76d6e8a6aee23f80d5" - integrity sha512-kmSy8iAnYKNWXZBv7bTfI10cSLJzOrFFEdngzohHMjDOG5FKoaX3Pix6MUkcWc2asX0hCyACtNTlcp+MBnS9eQ== +"@polkadot/networks@11.1.2", "@polkadot/networks@^11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-11.1.2.tgz#2566bdc4503e32f34f9ceb051c9a6e159cde415a" + integrity sha512-nYWykUlIdWsFhkEy/uette0nxF1KqmcPBeMqTbvpPdQqGkfZmb6Vfpm8mVRSxPhYLu8D7El7VO+Xz/HK6JLeQQ== dependencies: - "@babel/runtime" "^7.20.13" - "@polkadot/util" "10.4.1" - "@substrate/ss58-registry" "^1.38.0" + "@polkadot/util" "11.1.2" + "@substrate/ss58-registry" "^1.39.0" + tslib "^2.5.0" -"@polkadot/rpc-augment@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-9.10.2.tgz#5650aa118d39d0c4b17425a9b327354f7bbf99e5" - integrity sha512-LrGzpSdkqXltZDwuBeBBMev68eVVN1GpgV4auEAytgDYYcjI9XDaeLZm7vUVx9aBO8OYz9hQZeHrWrab/FaKmg== +"@polkadot/rpc-augment@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-10.2.1.tgz#1c3426cd3dd607a18248432846829298de324e76" + integrity sha512-opWg0//5FsIpu3Mi7UKHGCgu6Azrrhqpwc8by4vhW73gAVuJ5kxGcfJPy4m8pBA0omChD/l33PnhRlc9LkNRYg== dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/rpc-core" "9.10.2" - "@polkadot/types" "9.10.2" - "@polkadot/types-codec" "9.10.2" - "@polkadot/util" "^10.2.1" + "@polkadot/rpc-core" "10.2.1" + "@polkadot/types" "10.2.1" + "@polkadot/types-codec" "10.2.1" + "@polkadot/util" "^11.1.2" + tslib "^2.5.0" -"@polkadot/rpc-core@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-9.10.2.tgz#72362d26012c53397c1079912d5d4aacf910a650" - integrity sha512-qr+q2R3YeRBC++bYxK292jb6t9/KXeLoRheW5z7LbYyre3J60vZPN7WxPxbwm+iCGk1VtvH80Dv1OSCoVC+7hA== +"@polkadot/rpc-core@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-10.2.1.tgz#bc57af228d4789c1a2f69fd041f6af38f6afda08" + integrity sha512-v7InyKGCxZKbsBcN4f0oIAE3f7mY+dCe6q11iCwAS8dAilXwfXDuZ1kwaSIxwZKRCMIWqwlVM8tNij48AWr04A== dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/rpc-augment" "9.10.2" - "@polkadot/rpc-provider" "9.10.2" - "@polkadot/types" "9.10.2" - "@polkadot/util" "^10.2.1" - rxjs "^7.6.0" + "@polkadot/rpc-augment" "10.2.1" + "@polkadot/rpc-provider" "10.2.1" + "@polkadot/types" "10.2.1" + "@polkadot/util" "^11.1.2" + rxjs "^7.8.0" + tslib "^2.5.0" -"@polkadot/rpc-provider@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-9.10.2.tgz#83c8e114b3aad75eedaf98a374bc77a2b8cc1dbc" - integrity sha512-mm8l1uZ7DOrsMUN+DELS8apyZVVNIy/SrqEBjHZeZ0AA9noAEbH4ubxR375lG/T32+T97mFudv1rxRnEwXqByg== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/keyring" "^10.2.1" - "@polkadot/types" "9.10.2" - "@polkadot/types-support" "9.10.2" - "@polkadot/util" "^10.2.1" - "@polkadot/util-crypto" "^10.2.1" - "@polkadot/x-fetch" "^10.2.1" - "@polkadot/x-global" "^10.2.1" - "@polkadot/x-ws" "^10.2.1" - "@substrate/connect" "0.7.17" - eventemitter3 "^4.0.7" - mock-socket "^9.1.5" - nock "^13.2.9" +"@polkadot/rpc-provider@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-10.2.1.tgz#4264ea3c49407466a201a0dd53ea7e062c3110b1" + integrity sha512-Zg+6tXwrd/oH/mGW+HoGcwmqTUfusMSugDyL8ccNd+y9iU2d0AlZMbPBvOE4zIP3C2HCM7qye8ndaXzZNezvvA== + dependencies: + "@polkadot/keyring" "^11.1.2" + "@polkadot/types" "10.2.1" + "@polkadot/types-support" "10.2.1" + "@polkadot/util" "^11.1.2" + "@polkadot/util-crypto" "^11.1.2" + "@polkadot/x-fetch" "^11.1.2" + "@polkadot/x-global" "^11.1.2" + "@polkadot/x-ws" "^11.1.2" + eventemitter3 "^5.0.0" + mock-socket "^9.2.1" + nock "^13.3.0" + tslib "^2.5.0" + optionalDependencies: + "@substrate/connect" "0.7.22" -"@polkadot/typegen@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/typegen/-/typegen-9.10.2.tgz#3a206feaa664afe2cdcc42707b4fa8fde49ce0cc" - integrity sha512-AyO1f/tx173w6pZrQINPu12sCIH9uvn+yRL2sJuCBS5+aqlnsR1JscBk6HIlR6t6Jctx1QCsHycfvSvin3IVoA== - dependencies: - "@babel/core" "^7.20.5" - "@babel/register" "^7.18.9" - "@babel/runtime" "^7.20.6" - "@polkadot/api" "9.10.2" - "@polkadot/api-augment" "9.10.2" - "@polkadot/rpc-augment" "9.10.2" - "@polkadot/rpc-provider" "9.10.2" - "@polkadot/types" "9.10.2" - "@polkadot/types-augment" "9.10.2" - "@polkadot/types-codec" "9.10.2" - "@polkadot/types-create" "9.10.2" - "@polkadot/types-support" "9.10.2" - "@polkadot/util" "^10.2.1" - "@polkadot/util-crypto" "^10.2.1" - "@polkadot/x-ws" "^10.2.1" +"@polkadot/typegen@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/typegen/-/typegen-10.2.1.tgz#db2366afaee5f8c03ca1042a842b719f269a6c27" + integrity sha512-cIvABftJYPfkNoOr+mST7MQ9crEnTXbbRcdTorxG6dmdXX3JhvfO63DjSjzmhaMN6Txm8Bi3PlW80T0mNM4UCQ== + dependencies: + "@polkadot/api" "10.2.1" + "@polkadot/api-augment" "10.2.1" + "@polkadot/rpc-augment" "10.2.1" + "@polkadot/rpc-provider" "10.2.1" + "@polkadot/types" "10.2.1" + "@polkadot/types-augment" "10.2.1" + "@polkadot/types-codec" "10.2.1" + "@polkadot/types-create" "10.2.1" + "@polkadot/types-support" "10.2.1" + "@polkadot/util" "^11.1.2" + "@polkadot/util-crypto" "^11.1.2" + "@polkadot/x-ws" "^11.1.2" handlebars "^4.7.7" - websocket "^1.0.34" - yargs "^17.6.2" + tslib "^2.5.0" + yargs "^17.7.1" -"@polkadot/types-augment@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-9.10.2.tgz#2dce4ea8a2879d248339ad377ff5479fae884cd5" - integrity sha512-z0M3bAwGi0pGS3ieXyiJZLzDEc5yBvlqaZvaAbf2r+vto83SylhbjjG1wX8ARI5hqptBUWqS9BssUFH0q6l4sg== +"@polkadot/types-augment@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-10.2.1.tgz#c011edfab39428eabc614345d07be47c2aa01d38" + integrity sha512-WCnL8a2vT/GSrVnWty1pHZhXK2rkYMCon/Ml7kJL+Xk72EPua1lLwUCAC2ct9uyFuqamjIuyWGo0dz34CvrYZw== dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/types" "9.10.2" - "@polkadot/types-codec" "9.10.2" - "@polkadot/util" "^10.2.1" + "@polkadot/types" "10.2.1" + "@polkadot/types-codec" "10.2.1" + "@polkadot/util" "^11.1.2" + tslib "^2.5.0" -"@polkadot/types-codec@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-9.10.2.tgz#7f0e33c33292bdfcd959945b2427742b941df712" - integrity sha512-zQOPzxq2N6PUP6Gkxc3OVT7Ub8AD3qC0PBeCnc/fhKjgX3CoKQK4TC6tDL8pEaaIVFh4LOHlHvhWJhqaUNe95A== +"@polkadot/types-codec@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-10.2.1.tgz#83424223e6679a91fa0c5c58ed4991a1ee9f5cef" + integrity sha512-0H88kead5dLwST2JHGZw91Mq0iifdeXCCCCxTYaGL78naEdEEAUDb6emkr+wzhshoUT4/6iG6a56Idt/Sl+nSQ== dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/util" "^10.2.1" - "@polkadot/x-bigint" "^10.2.1" + "@polkadot/util" "^11.1.2" + "@polkadot/x-bigint" "^11.1.2" + tslib "^2.5.0" -"@polkadot/types-create@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-9.10.2.tgz#eb7dbf5f50eb4d01a965347d324de26a679a25e3" - integrity sha512-U6wDaJe8tZmt0WibxWeDFYVKfvOYa2su8xOwg8HTRraijF6k0/OMugb15bpjEkG6RZ1qg1L7oKrKghugVbRDGQ== +"@polkadot/types-create@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-10.2.1.tgz#5ab8ea89595f45f05c414efd2d658b9b6ae41085" + integrity sha512-OWRmsBsy4ee+KyGwO5iySdqCgObaDcyVU+IxzjagrU+HadioDdqI8m+Ptjy2DG/wbjd+NCCplyJ80TM++1+SDA== dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/types-codec" "9.10.2" - "@polkadot/util" "^10.2.1" + "@polkadot/types-codec" "10.2.1" + "@polkadot/util" "^11.1.2" + tslib "^2.5.0" -"@polkadot/types-known@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-9.10.2.tgz#d37d984eed6aa17b33603aca9f9d006d6eb468cb" - integrity sha512-Kwxoo+xvAAE1w0jZdGqmNoEJHdfJzncO1xrBJ7WjeCuEFoDsWmjP63u/o8VaC1ZNnfrhjRK0vyvquslJ6NQOUA== +"@polkadot/types-known@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-10.2.1.tgz#67f7a13e80e0e10c257cb3d01dd4ab9a498b0b05" + integrity sha512-DJEfhCBmqRjiL0VF6pqGExczqtOI/o4tg9UI2OUGHPGIKixyHAIiBd1wS+tKWC3toibzI3QVCIDCAPhkuLJJBw== dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/networks" "^10.2.1" - "@polkadot/types" "9.10.2" - "@polkadot/types-codec" "9.10.2" - "@polkadot/types-create" "9.10.2" - "@polkadot/util" "^10.2.1" + "@polkadot/networks" "^11.1.2" + "@polkadot/types" "10.2.1" + "@polkadot/types-codec" "10.2.1" + "@polkadot/types-create" "10.2.1" + "@polkadot/util" "^11.1.2" + tslib "^2.5.0" -"@polkadot/types-support@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-9.10.2.tgz#eff0ef399a3373421a543059f62ca96b85645f0b" - integrity sha512-RQSCNNBH8+mzXbErB/LUDU9oMQScv0GZ4UmM2MPDPKBcqXNCdJ4dK+ajNfVbgGTUucYUEebpp2m5Az1usjE4Ew== +"@polkadot/types-support@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-10.2.1.tgz#620048828a7fa1351f60831bbca6cc4a32b1ec53" + integrity sha512-e7CUGtdYazYmoGUGNp1ZDl7Jo++j9d/U64/aZg1pULvi69sBmKQAtdHzJtxMUgZk+f9VDmcA07n1bvfXZUltew== dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/util" "^10.2.1" + "@polkadot/util" "^11.1.2" + tslib "^2.5.0" -"@polkadot/types@9.10.2": - version "9.10.2" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-9.10.2.tgz#1f6647445b055856bdbd949106f698c89a125386" - integrity sha512-B5Bg/IaAMJEwdWzGp3pil5WBukr5fm9x9NFIMuoCS9TyIqpm9rSHrz2n/408R3B4rwqqtx8RQAxiIETFI+m6Rw== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/keyring" "^10.2.1" - "@polkadot/types-augment" "9.10.2" - "@polkadot/types-codec" "9.10.2" - "@polkadot/types-create" "9.10.2" - "@polkadot/util" "^10.2.1" - "@polkadot/util-crypto" "^10.2.1" - rxjs "^7.6.0" +"@polkadot/types@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-10.2.1.tgz#f60b59ce6fd2f0dd22b778b09660ef6776971677" + integrity sha512-P1v+R+ejvJP7ar1oTXxFUEYSQf/94PtwJaZj7K5AW5mUOfrnU2FLWv8c/W5voJNT0bMXcPAfnhF6X7ufUuf0Bg== + dependencies: + "@polkadot/keyring" "^11.1.2" + "@polkadot/types-augment" "10.2.1" + "@polkadot/types-codec" "10.2.1" + "@polkadot/types-create" "10.2.1" + "@polkadot/util" "^11.1.2" + "@polkadot/util-crypto" "^11.1.2" + rxjs "^7.8.0" + tslib "^2.5.0" "@polkadot/util-crypto@10.2.1": version "10.2.1" @@ -774,21 +543,20 @@ ed2curve "^0.3.0" tweetnacl "^1.0.3" -"@polkadot/util-crypto@10.4.1", "@polkadot/util-crypto@^10.2.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-10.4.1.tgz#64109883a889c3a948f5dec1b934d55fa8f8c115" - integrity sha512-29vOZLZJl5mNb8lHd2NwP51O7kEV1QOitBX7UsBw66nJOPZQ0imPFPJFGuI6ySPUuck1Lu4vBTC76nE5xpzjAQ== +"@polkadot/util-crypto@11.1.2", "@polkadot/util-crypto@^11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-11.1.2.tgz#216d33e8f09426c3f9bb55f33ae280f620b17bb8" + integrity sha512-9+M4mqhmvtZ0eNfHjy+TuelXG8e2+vZAXLkPrzx0jPMnzhc7mqwBeIMgkV96kMVFPawLNscQGTSZ/ofkU8KYAw== dependencies: - "@babel/runtime" "^7.20.13" - "@noble/hashes" "1.2.0" + "@noble/hashes" "1.3.0" "@noble/secp256k1" "1.7.1" - "@polkadot/networks" "10.4.1" - "@polkadot/util" "10.4.1" - "@polkadot/wasm-crypto" "^6.4.1" - "@polkadot/x-bigint" "10.4.1" - "@polkadot/x-randomvalues" "10.4.1" + "@polkadot/networks" "11.1.2" + "@polkadot/util" "11.1.2" + "@polkadot/wasm-crypto" "^7.0.3" + "@polkadot/x-bigint" "11.1.2" + "@polkadot/x-randomvalues" "11.1.2" "@scure/base" "1.1.1" - ed2curve "^0.3.0" + tslib "^2.5.0" tweetnacl "^1.0.3" "@polkadot/util@10.2.1": @@ -804,18 +572,18 @@ "@types/bn.js" "^5.1.1" bn.js "^5.2.1" -"@polkadot/util@10.4.1", "@polkadot/util@^10.2.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-10.4.1.tgz#da011b59ac716744c88fd0cf85e54ba87e5a9482" - integrity sha512-dOlmue4nhbk8msbs/YgoBqVtUzDx5iqhiDnC62GWC8b+JmIlIM4Ddgg1rhBf1KJ6TfEQrzQA0FwLaqCCH5vYmA== +"@polkadot/util@11.1.2", "@polkadot/util@^11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-11.1.2.tgz#35859afb4cbbb5e12221258b1361f6da23cee89e" + integrity sha512-DtVjZgiCEJfrnX/I8gWxG/11ObQeWG2aA0HA+8ek2j//Q2W1Jfq7xvQPupmvrlQaBlHZnkqolgIUXy6UdM98mg== dependencies: - "@babel/runtime" "^7.20.13" - "@polkadot/x-bigint" "10.4.1" - "@polkadot/x-global" "10.4.1" - "@polkadot/x-textdecoder" "10.4.1" - "@polkadot/x-textencoder" "10.4.1" + "@polkadot/x-bigint" "11.1.2" + "@polkadot/x-global" "11.1.2" + "@polkadot/x-textdecoder" "11.1.2" + "@polkadot/x-textencoder" "11.1.2" "@types/bn.js" "^5.1.1" bn.js "^5.2.1" + tslib "^2.5.0" "@polkadot/wasm-bridge@6.4.1": version "6.4.1" @@ -824,6 +592,13 @@ dependencies: "@babel/runtime" "^7.20.6" +"@polkadot/wasm-bridge@7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-7.0.3.tgz#9691450830604dc4a361692a8a2a3df22fa53e96" + integrity sha512-q5qyhkGE9lHQmThNg6G5zCM4gYip2KtmR+De/URX7yWAO6snsinFqt066RFVuHvX1hZijrYSe/BGQABAUtH4pw== + dependencies: + tslib "^2.5.0" + "@polkadot/wasm-crypto-asmjs@6.4.1": version "6.4.1" resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz#3cc76bbda5ea4a7a860982c64f9565907b312253" @@ -831,6 +606,13 @@ dependencies: "@babel/runtime" "^7.20.6" +"@polkadot/wasm-crypto-asmjs@7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.0.3.tgz#a1bc942029979b2696a1062066d774e99a5a6b4c" + integrity sha512-ldMZjowYywn0Uj7jSr8a21rrlFFq/jWhCXVl21/KDcYGdFEfIajqbcrO5cHoT6w95sQgAwMWJwwDClXOaBjc/Q== + dependencies: + tslib "^2.5.0" + "@polkadot/wasm-crypto-init@6.4.1": version "6.4.1" resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.4.1.tgz#4d9ab0030db52cf177bf707ef8e77aa4ca721668" @@ -841,6 +623,16 @@ "@polkadot/wasm-crypto-asmjs" "6.4.1" "@polkadot/wasm-crypto-wasm" "6.4.1" +"@polkadot/wasm-crypto-init@7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.0.3.tgz#336af713edfcd6fdd0194fee2919781893fba577" + integrity sha512-W4ClfPrzOTqiX0x4h6rXjCt8UsVsbg3zU7LJFFjeLgrguPoKTLGw4h5O1rR2H7EuMFbuqdztzJn3qTjBcR03Cg== + dependencies: + "@polkadot/wasm-bridge" "7.0.3" + "@polkadot/wasm-crypto-asmjs" "7.0.3" + "@polkadot/wasm-crypto-wasm" "7.0.3" + tslib "^2.5.0" + "@polkadot/wasm-crypto-wasm@6.4.1": version "6.4.1" resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz#97180f80583b18f6a13c1054fa5f7e8da40b1028" @@ -849,6 +641,14 @@ "@babel/runtime" "^7.20.6" "@polkadot/wasm-util" "6.4.1" +"@polkadot/wasm-crypto-wasm@7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.0.3.tgz#016834b1eb2564d8a13b133ee77a4612ad873d41" + integrity sha512-FRjUADiA3wMkjJqQLgB0v9rbSADcb2PY/6dJi06iza9m41HebTN3x7f5D3gWTCfgJjzWLAPchY2Hwsa0WpTQkw== + dependencies: + "@polkadot/wasm-util" "7.0.3" + tslib "^2.5.0" + "@polkadot/wasm-crypto@^6.4.1": version "6.4.1" resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz#79310e23ad1ca62362ba893db6a8567154c2536a" @@ -861,6 +661,18 @@ "@polkadot/wasm-crypto-wasm" "6.4.1" "@polkadot/wasm-util" "6.4.1" +"@polkadot/wasm-crypto@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-7.0.3.tgz#e07ddbeea0b45149d8e58be292ad423d646f1cb1" + integrity sha512-mOCLCaL9cyrU72PCc9nMNAj3zdvOzau5mOGJjLahIz+mqlHAoAmEXCAJvJ2qCo7OFl8QiDToAEGhdDWQfiHUyg== + dependencies: + "@polkadot/wasm-bridge" "7.0.3" + "@polkadot/wasm-crypto-asmjs" "7.0.3" + "@polkadot/wasm-crypto-init" "7.0.3" + "@polkadot/wasm-crypto-wasm" "7.0.3" + "@polkadot/wasm-util" "7.0.3" + tslib "^2.5.0" + "@polkadot/wasm-util@6.4.1": version "6.4.1" resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-6.4.1.tgz#74aecc85bec427a9225d9874685944ea3dc3ab76" @@ -868,6 +680,13 @@ dependencies: "@babel/runtime" "^7.20.6" +"@polkadot/wasm-util@7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-7.0.3.tgz#eab59f9dac0f00ca736aff8b24925108b7b2f860" + integrity sha512-L9U5nSbzr5xa2YSpveP/zZxhOB6i8ibssK+ihuG+7SICYtTC0B9wJp/UnjP/c6bEDlMV3yWiNXJPBTJMGmkmIQ== + dependencies: + tslib "^2.5.0" + "@polkadot/x-bigint@10.2.1": version "10.2.1" resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-10.2.1.tgz#aa2d4384bb4ae6b5a3f333aa25bf6fd64d9006c5" @@ -876,23 +695,22 @@ "@babel/runtime" "^7.20.6" "@polkadot/x-global" "10.2.1" -"@polkadot/x-bigint@10.4.1", "@polkadot/x-bigint@^10.2.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-10.4.1.tgz#39907892f3bd17101baee0af5d66202845c8c860" - integrity sha512-CpTGPwNUDrJcrnfDU/94mfZ16TZoTwWAwTLH0oMUJtrM2mHo+LtWZBlCTG+thhkcGcSRy/rrpzx4ffNsj5Sy1w== +"@polkadot/x-bigint@11.1.2", "@polkadot/x-bigint@^11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-11.1.2.tgz#b430fce70b78fb687bc6335243f788a09edbf4dd" + integrity sha512-IUsYpkWmHeYyHnGLzFd129YtqZp0oRc8n0bb5+M2tHHPHbwfTBreSP6CimGfcJsmGO9KfWEkzZdvWxYcXzZX+Q== dependencies: - "@babel/runtime" "^7.20.13" - "@polkadot/x-global" "10.4.1" + "@polkadot/x-global" "11.1.2" + tslib "^2.5.0" -"@polkadot/x-fetch@^10.2.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-10.4.1.tgz#73f84a9a32f23c656f227c418563681f7cb07e28" - integrity sha512-9LDskIW74Iz5Nen6p9xhVw1D6Z3r/K5buchZW2DERKCA3gZ98wUkTnpHDcwEyLGw0Lvq+1Trvm/txaEMWjUT6w== +"@polkadot/x-fetch@^11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-11.1.2.tgz#96d41fbe68bef698765c2f9a2362a6ffa1b92da2" + integrity sha512-c7KF6Zbu2grfgLXrQAhTfW712ZYCJSMDIhxqNVDjBJlWEw1lyOvss79/LpKJGxEAvNIFVaUerxUyl7Rymkm0ug== dependencies: - "@babel/runtime" "^7.20.13" - "@polkadot/x-global" "10.4.1" - "@types/node-fetch" "^2.6.2" - node-fetch "^3.3.0" + "@polkadot/x-global" "11.1.2" + node-fetch "^3.3.1" + tslib "^2.5.0" "@polkadot/x-global@10.2.1": version "10.2.1" @@ -901,12 +719,12 @@ dependencies: "@babel/runtime" "^7.20.6" -"@polkadot/x-global@10.4.1", "@polkadot/x-global@^10.2.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-10.4.1.tgz#77a6a1252a0ab8b3f7b77a846cee7f7ffb2aaa34" - integrity sha512-Kdh2Fzl1fpEwU6vL1HMaXJy+fadX79eSy4VAnIx/uyCF3H5Z4WaxzoiNVmHdDZSVaamqtbuKepi1nkE3q1nvlA== +"@polkadot/x-global@11.1.2", "@polkadot/x-global@^11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-11.1.2.tgz#cbb21fe96e0d85925a23f552c4280b63ac8b5312" + integrity sha512-o/MV4ta7+teq8qOSXpaV7Dtk+9NltuRzsXEHiaqnLwaIXEQ2H7GJ+f/K7c+jQApEkdLp+iCt0D/lLjkW17vc2A== dependencies: - "@babel/runtime" "^7.20.13" + tslib "^2.5.0" "@polkadot/x-randomvalues@10.2.1": version "10.2.1" @@ -916,13 +734,13 @@ "@babel/runtime" "^7.20.6" "@polkadot/x-global" "10.2.1" -"@polkadot/x-randomvalues@10.4.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-10.4.1.tgz#ae6e7cf17aa2f88592e7aaef9211ccd40fcccd0a" - integrity sha512-dB4OGOiBbJbNQV040Ggh2CujSXtVe9bxXn1g5LuJEw1iioeraoduJ6yEYmh0olfaQjCUXnyWLr8uCPtPpfJ9uQ== +"@polkadot/x-randomvalues@11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-11.1.2.tgz#db9b85a728a6270927c07e35bdd90082c182f0c7" + integrity sha512-hiAF1MfHVVkmFALikYMOi81Nh13gvg9E5yiW27jS33fyOR8d2mXt17QQzmfPCD3rkXwKZ8FI29sSTUXki1LL3Q== dependencies: - "@babel/runtime" "^7.20.13" - "@polkadot/x-global" "10.4.1" + "@polkadot/x-global" "11.1.2" + tslib "^2.5.0" "@polkadot/x-textdecoder@10.2.1": version "10.2.1" @@ -932,13 +750,13 @@ "@babel/runtime" "^7.20.6" "@polkadot/x-global" "10.2.1" -"@polkadot/x-textdecoder@10.4.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-10.4.1.tgz#7bf1740400c10f0482fa6af28ab681cd06cbff16" - integrity sha512-OcAL0napRM4hukgvH6kYGdiczqvbkFYoLBgQFalZChktjL1tDNiF6tzzt4Nn8WQXYYFlfyxp5LoZRtNrcFJq4w== +"@polkadot/x-textdecoder@11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-11.1.2.tgz#47866922af0262478aafce30ba27aeed77223706" + integrity sha512-CoRd680J6YtW1L5+XhsY8jCT3+esj82AttraiuB0DZ85t/IOT/8hji/MJJAXn6a+cgJqVNgHzrnpiCFYfsMKtA== dependencies: - "@babel/runtime" "^7.20.13" - "@polkadot/x-global" "10.4.1" + "@polkadot/x-global" "11.1.2" + tslib "^2.5.0" "@polkadot/x-textencoder@10.2.1": version "10.2.1" @@ -948,23 +766,22 @@ "@babel/runtime" "^7.20.6" "@polkadot/x-global" "10.2.1" -"@polkadot/x-textencoder@10.4.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-10.4.1.tgz#232d3b084e90bea2fffb6bd8777e79b9f82c7f1c" - integrity sha512-YBS04HV/QgRppt0XC5n48c89ueH3ErivrcmqFTlkKMcXNzvtpMCTZGCTzG5vU8ozP0tl/4Is5N8agmYHLMu1Cg== +"@polkadot/x-textencoder@11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-11.1.2.tgz#2967c06843ffd8299627da997d7e6b892d1e9c13" + integrity sha512-faZB0DRMJm54nrf8pTnE3ecHfZWi9cyQSx1ocqzjL/+J627alMvfPM7NBXU+HlmtENEbmRSgt6m9rIJKOL2LZw== dependencies: - "@babel/runtime" "^7.20.13" - "@polkadot/x-global" "10.4.1" + "@polkadot/x-global" "11.1.2" + tslib "^2.5.0" -"@polkadot/x-ws@^10.2.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-10.4.1.tgz#14e156c85aac8306acce7428f764d8eecbf1d7ae" - integrity sha512-acS2kAAvFOrGo5gVLuOY4DKRschGafvruh491O7jE5r7QbZUNG1Q948g6TA/67I4g8N0k096DYFryID4OK9Ufg== +"@polkadot/x-ws@^11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-11.1.2.tgz#1becc584928057e6cfebc851a97e1bf82ec54b4b" + integrity sha512-Sp7BnGT8LKXDsGV5j8IzRtChuM39QiMPm6VL4mdDqhVyuqSSAtnLG3ZCuwE0EuREkduZxu1NaIToDeMeeXqxyg== dependencies: - "@babel/runtime" "^7.20.13" - "@polkadot/x-global" "10.4.1" - "@types/websocket" "^1.0.5" - websocket "^1.0.34" + "@polkadot/x-global" "11.1.2" + tslib "^2.5.0" + ws "^8.13.0" "@scure/base@1.1.1": version "1.1.1" @@ -981,28 +798,25 @@ resolved "https://registry.yarnpkg.com/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.1.tgz#fa5738039586c648013caa6a0c95c43265dbe77d" integrity sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg== -"@substrate/connect@0.7.17": - version "0.7.17" - resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.7.17.tgz#b76ce23d24255e89028db81b3cb280c7f86db72e" - integrity sha512-s0XBmGpUCFWZFa+TS0TEvOKtWjJP2uT4xKmvzApH8INB5xbz79wqWFX6WWh3AlK/X1P0Smt+RVEH7HQiLJAYAw== +"@substrate/connect@0.7.22": + version "0.7.22" + resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.7.22.tgz#15a20d734bab082c87f2aaaf75ce012c83881ef7" + integrity sha512-g12IYiepPu0OFWcm87ugDbfPr5a9TCGd4HJv1zXB2TRP/ZvYtHCE9+ftA5IvJbJPw6CI6/0XmUbP7Nz19HT/aw== dependencies: "@substrate/connect-extension-protocol" "^1.0.1" - "@substrate/smoldot-light" "0.7.7" eventemitter3 "^4.0.7" + smoldot "1.0.0" -"@substrate/smoldot-light@0.7.7": - version "0.7.7" - resolved "https://registry.yarnpkg.com/@substrate/smoldot-light/-/smoldot-light-0.7.7.tgz#ee5f89bb25af64d2014d97548b959b7da4c67f08" - integrity sha512-ksxeAed6dIUtYSl0f8ehgWQjwXnpDGTIJt+WVRIGt3OObZkA96ZdBWx0xP7GrXZtj37u4n/Y1z7TyTm4bwQvrw== - dependencies: - pako "^2.0.4" - ws "^8.8.1" - -"@substrate/ss58-registry@^1.35.0", "@substrate/ss58-registry@^1.38.0": +"@substrate/ss58-registry@^1.35.0": version "1.38.0" resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.38.0.tgz#b50cb28c77a0375fbf33dd29b7b28ee32871af9f" integrity sha512-sHiVRWekGMRZAjPukN9/W166NM6D5wtHcK6RVyLy66kg3CHNZ1BXfpXcjOiXSwhbd7guQFDEwnOVaDrbk1XL1g== +"@substrate/ss58-registry@^1.39.0": + version "1.39.0" + resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.39.0.tgz#eb916ff5fea7fa02e77745823fde21af979273d2" + integrity sha512-qZYpuE6n+mwew+X71dOur/CbMXj6rNW27o63JeJwdQH/GvcSKm3JLNhd+bGzwUKg0D/zD30Qc6p4JykArzM+tA== + "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" @@ -1102,14 +916,6 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== -"@types/node-fetch@^2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" - integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== - dependencies: - "@types/node" "*" - form-data "^3.0.0" - "@types/node@*", "@types/node@^18.11.2": version "18.13.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.13.0.tgz#0400d1e6ce87e9d3032c19eb6c58205b0d3f7850" @@ -1146,13 +952,6 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== -"@types/websocket@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.5.tgz#3fb80ed8e07f88e51961211cd3682a3a4a81569c" - integrity sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ== - dependencies: - "@types/node" "*" - "@typescript-eslint/eslint-plugin@^5.47.0": version "5.52.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz#5fb0d43574c2411f16ea80f5fc335b8eaa7b28a8" @@ -1285,13 +1084,6 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -1490,16 +1282,6 @@ browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" -browserslist@^4.21.3: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -1516,11 +1298,6 @@ bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - buffer-to-arraybuffer@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" @@ -1592,11 +1369,6 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001449: - version "1.0.30001452" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001452.tgz#dff7b8bb834b3a91808f0a9ff0453abb1fbba02a" - integrity sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w== - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1632,15 +1404,6 @@ chai@^4.3.6: pathval "^1.1.1" type-detect "^4.0.5" -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -1716,15 +1479,6 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - clone-response@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" @@ -1732,13 +1486,6 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -1746,17 +1493,12 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -1778,11 +1520,6 @@ commander@^8.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1809,11 +1546,6 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -2030,11 +1762,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.284: - version "1.4.298" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.298.tgz#d6f91a170c67e5e9d55d526e74c1649f388c9125" - integrity sha512-dJZurgxDeaqn90VmS23Xz+QPQQl84BxnlAfwCDFNjfEhqO2yLMDkeaDoJ1yPXAbmiqTi+hd5TpB5zi1N4hwBuQ== - elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -2111,11 +1838,6 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - eslint-plugin-mocha@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-10.1.0.tgz#69325414f875be87fb2cb00b2ef33168d4eb7c8d" @@ -2331,6 +2053,11 @@ eventemitter3@^4.0.7: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.0.tgz#084eb7f5b5388df1451e63f4c2aafd71b217ccb3" + integrity sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg== + evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -2466,15 +2193,6 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -find-cache-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - find-process@^1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/find-process/-/find-process-1.4.7.tgz#8c76962259216c381ef1099371465b5b439ea121" @@ -2492,13 +2210,6 @@ find-up@5.0.0, find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -2539,15 +2250,6 @@ form-data-encoder@1.7.1: resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -2605,11 +2307,6 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -2694,11 +2391,6 @@ global@~4.4.0: min-document "^2.19.0" process "^0.11.10" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.19.0: version "13.20.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" @@ -2796,11 +2488,6 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" @@ -3026,13 +2713,6 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - is-typed-array@^1.1.10, is-typed-array@^1.1.3: version "1.1.10" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" @@ -3059,11 +2739,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -3084,11 +2759,6 @@ js-sha3@^0.5.7: resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -3101,11 +2771,6 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -3131,11 +2796,6 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -3169,11 +2829,6 @@ keyv@^4.0.0: dependencies: json-buffer "3.0.1" -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -3182,14 +2837,6 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -3232,13 +2879,6 @@ lowercase-keys@^3.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -3246,14 +2886,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -3430,7 +3062,7 @@ mock-fs@^4.1.0: resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== -mock-socket@^9.1.5: +mock-socket@^9.2.1: version "9.2.1" resolved "https://registry.yarnpkg.com/mock-socket/-/mock-socket-9.2.1.tgz#cc9c0810aa4d0afe02d721dcb2b7e657c00e2282" integrity sha512-aw9F9T9G2zpGipLLhSNh6ZpgUyUl4frcVmRN08uE1NWPWg43Wx6+sGPDbQ7E5iFZZDJW5b5bypMeAEHqTbIFag== @@ -3525,7 +3157,7 @@ next-tick@^1.1.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== -nock@^13.2.9: +nock@^13.3.0: version "13.3.0" resolved "https://registry.yarnpkg.com/nock/-/nock-13.3.0.tgz#b13069c1a03f1ad63120f994b04bfd2556925768" integrity sha512-HHqYQ6mBeiMc+N038w8LkMpDCRquCHWeNmN3v6645P3NhN2+qXOBqvPqo7Rt1VyCMzKhJ733wZqw5B7cQVFNPg== @@ -3552,10 +3184,10 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" -node-fetch@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.0.tgz#37e71db4ecc257057af828d523a7243d651d91e4" - integrity sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA== +node-fetch@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.1.tgz#b3eea7b54b3a48020e46f4f88b9c5a7430d20b2e" + integrity sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow== dependencies: data-uri-to-buffer "^4.0.0" fetch-blob "^3.1.4" @@ -3566,11 +3198,6 @@ node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -3652,13 +3279,6 @@ p-cancelable@^3.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -3666,13 +3286,6 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -3680,11 +3293,6 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - pako@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" @@ -3707,11 +3315,6 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -3758,33 +3361,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pirates@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -3997,7 +3578,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.6.0: +rxjs@^7.8.0: version "7.8.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== @@ -4033,16 +3614,11 @@ secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -semver@^5.5.0, semver@^5.6.0: +semver@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - semver@^7.3.7: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" @@ -4115,13 +3691,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -4162,6 +3731,14 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +smoldot@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-1.0.0.tgz#438ddb9903fed28f24e52c4c0fb56f0b479209d7" + integrity sha512-3/y/poD7j42NL6Z/Gp4OLm1qx8svyy255XQ5xRkjv9+O50RT0SeEmnBZmEbVmi1w6WmamPjt8URdzfN7xxgK9Q== + dependencies: + pako "^2.0.4" + ws "^8.8.1" + solc@0.8.17: version "0.8.17" resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.17.tgz#c748fec6a64bf029ec406aa9b37e75938d1115ae" @@ -4175,15 +3752,7 @@ solc@0.8.17: semver "^5.5.0" tmp "0.0.33" -source-map-support@^0.5.16: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: +source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -4255,13 +3824,6 @@ supports-color@8.1.1: dependencies: has-flag "^4.0.0" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -4316,11 +3878,6 @@ tmp@0.0.33: dependencies: os-tmpdir "~1.0.2" -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -4370,7 +3927,7 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0: +tslib@^2.1.0, tslib@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== @@ -4466,14 +4023,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -4792,7 +4341,7 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -websocket@^1.0.32, websocket@^1.0.34: +websocket@^1.0.32: version "1.0.34" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== @@ -4869,6 +4418,11 @@ ws@^3.0.0: safe-buffer "~5.1.0" ultron "~1.1.0" +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + ws@^8.8.1: version "8.12.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" @@ -4919,7 +4473,7 @@ yaeti@^0.0.6: resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: +yallist@^3.0.0, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -4967,10 +4521,10 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.6.2: - version "17.6.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" - integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== +yargs@^17.7.1: + version "17.7.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" + integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== dependencies: cliui "^8.0.1" escalade "^3.1.1" From 5db935735ab97f49dd440f60ed36e1eb1cbebdb8 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Mon, 27 Mar 2023 15:50:22 +0200 Subject: [PATCH 040/103] fix: IsReserve --- Cargo.lock | 3 +++ Cargo.toml | 1 + runtime/common/config/xcm/foreignassets.rs | 18 ++++-------------- runtime/opal/Cargo.toml | 2 ++ runtime/quartz/Cargo.toml | 2 ++ runtime/unique/Cargo.toml | 2 ++ 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8581afd77f..95ec0c2de4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5692,6 +5692,7 @@ dependencies = [ "orml-tokens", "orml-traits", "orml-vesting", + "orml-xcm-support", "orml-xtokens", "pallet-app-promotion", "pallet-aura", @@ -9142,6 +9143,7 @@ dependencies = [ "orml-tokens", "orml-traits", "orml-vesting", + "orml-xcm-support", "orml-xtokens", "pallet-app-promotion", "pallet-aura", @@ -13418,6 +13420,7 @@ dependencies = [ "orml-tokens", "orml-traits", "orml-vesting", + "orml-xcm-support", "orml-xtokens", "pallet-app-promotion", "pallet-aura", diff --git a/Cargo.toml b/Cargo.toml index cd0c0263bc..b510014f68 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -181,6 +181,7 @@ orml-tokens = { default-features = false , git = "https://github.com/open-web3-s orml-traits = { default-features = false , git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.39" } orml-vesting = { default-features = false , git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.39" } orml-xtokens = { default-features = false , git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.39" } +orml-xcm-support = { default-features = false , git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.39" } # Other derivative = { version = "2.2.0", features = ["use_core"] } diff --git a/runtime/common/config/xcm/foreignassets.rs b/runtime/common/config/xcm/foreignassets.rs index fef45ebc22..955ee9501a 100644 --- a/runtime/common/config/xcm/foreignassets.rs +++ b/runtime/common/config/xcm/foreignassets.rs @@ -14,10 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Unique Network. If not, see . -use frame_support::{ - traits::{Get, ContainsPair}, - parameter_types, -}; +use frame_support::{traits::Get, parameter_types}; use sp_runtime::traits::Convert; use xcm::latest::{prelude::*, MultiAsset, MultiLocation}; use xcm_builder::{FungiblesAdapter, NoChecking, ConvertedConcreteId}; @@ -27,6 +24,8 @@ use pallet_foreign_assets::{ ForeignAssetId, CurrencyId, }; use sp_std::{borrow::Borrow, marker::PhantomData}; +use orml_traits::location::AbsoluteReserveProvider; +use orml_xcm_support::MultiNativeAsset; use crate::{Runtime, Balances, ParachainInfo, PolkadotXcm, ForeignAssets}; use super::{LocationToAccountId, RelayLocation}; @@ -169,16 +168,7 @@ impl TransactAsset for AssetTransactor { } } -pub struct AllAsset; -impl ContainsPair for AllAsset { - fn contains(_asset: &MultiAsset, _origin: &MultiLocation) -> bool { - // ? Shouldn't we query foreign-asset pallet here, because of the new non-local mint - // location logic? - true - } -} - -pub type IsReserve = AllAsset; +pub type IsReserve = MultiNativeAsset; pub type Trader = FreeForAll< pallet_configuration::WeightToFee, diff --git a/runtime/opal/Cargo.toml b/runtime/opal/Cargo.toml index aa2d47a11f..d1f1abf3fd 100644 --- a/runtime/opal/Cargo.toml +++ b/runtime/opal/Cargo.toml @@ -130,6 +130,7 @@ std = [ "orml-traits/std", "orml-vesting/std", "orml-xtokens/std", + "orml-xcm-support/std", "pallet-foreign-assets/std", 'pallet-maintenance/std', @@ -217,6 +218,7 @@ orml-tokens = { workspace = true } orml-traits = { workspace = true } orml-vesting = { workspace = true } orml-xtokens = { workspace = true } +orml-xcm-support = { workspace = true } pallet-aura = { workspace = true } pallet-authorship = { workspace = true } pallet-balances = { workspace = true } diff --git a/runtime/quartz/Cargo.toml b/runtime/quartz/Cargo.toml index c9c8314f64..e3a3b3c051 100644 --- a/runtime/quartz/Cargo.toml +++ b/runtime/quartz/Cargo.toml @@ -129,6 +129,7 @@ std = [ "orml-traits/std", "orml-vesting/std", "orml-xtokens/std", + "orml-xcm-support/std", "pallet-foreign-assets/std", "pallet-maintenance/std", ] @@ -209,6 +210,7 @@ orml-tokens = { workspace = true } orml-traits = { workspace = true } orml-vesting = { workspace = true } orml-xtokens = { workspace = true } +orml-xcm-support = { workspace = true } pallet-aura = { workspace = true } pallet-authorship = { workspace = true } pallet-balances = { workspace = true } diff --git a/runtime/unique/Cargo.toml b/runtime/unique/Cargo.toml index ebf8cdca72..1e285089ee 100644 --- a/runtime/unique/Cargo.toml +++ b/runtime/unique/Cargo.toml @@ -126,6 +126,7 @@ std = [ "orml-traits/std", "orml-vesting/std", "orml-xtokens/std", + "orml-xcm-support/std", "pallet-foreign-assets/std", "pallet-maintenance/std", ] @@ -208,6 +209,7 @@ orml-tokens = { workspace = true } orml-traits = { workspace = true } orml-vesting = { workspace = true } orml-xtokens = { workspace = true } +orml-xcm-support = { workspace = true } pallet-aura = { workspace = true } pallet-authorship = { workspace = true } pallet-balances = { workspace = true } From 17d1cd40a383bf37e0fa0e05988824e9d820451d Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Tue, 28 Mar 2023 13:17:39 +0200 Subject: [PATCH 041/103] fix(tests): use V2 in XCM structs --- tests/src/xcm/xcmOpal.test.ts | 24 +++++++++---------- tests/src/xcm/xcmQuartz.test.ts | 42 ++++++++++++++++----------------- tests/src/xcm/xcmUnique.test.ts | 42 ++++++++++++++++----------------- 3 files changed, 54 insertions(+), 54 deletions(-) diff --git a/tests/src/xcm/xcmOpal.test.ts b/tests/src/xcm/xcmOpal.test.ts index 17871f023b..90b2e3fd36 100644 --- a/tests/src/xcm/xcmOpal.test.ts +++ b/tests/src/xcm/xcmOpal.test.ts @@ -80,7 +80,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Westmint', () => { await usingPlaygrounds(async (helper) => { const location = { - V1: { + V2: { parents: 1, interior: {X3: [ { @@ -111,7 +111,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Westmint', () => { // Providing the relay currency to the unique sender account await usingRelayPlaygrounds(relayUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 0, interior: {X1: { Parachain: UNIQUE_CHAIN, @@ -120,7 +120,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Westmint', () => { }}; const beneficiary = { - V1: { + V2: { parents: 0, interior: {X1: { AccountId32: { @@ -132,7 +132,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Westmint', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -157,7 +157,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Westmint', () => { itSub('Should connect and send USDT from Westmint to Opal', async ({helper}) => { await usingWestmintPlaygrounds(westmintUrl, async (helper) => { const dest = { - V1: { + V2: { parents: 1, interior: {X1: { Parachain: UNIQUE_CHAIN, @@ -166,7 +166,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Westmint', () => { }}; const beneficiary = { - V1: { + V2: { parents: 0, interior: {X1: { AccountId32: { @@ -178,7 +178,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Westmint', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -243,7 +243,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Westmint', () => { itSub('Should connect and send USDT from Unique to Statemine back', async ({helper}) => { const destination = { - V1: { + V2: { parents: 1, interior: {X2: [ { @@ -301,7 +301,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Westmint', () => { // Providing the relay currency to the unique sender account await usingRelayPlaygrounds(relayUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 0, interior: {X1: { Parachain: UNIQUE_CHAIN, @@ -310,7 +310,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Westmint', () => { }}; const beneficiary = { - V1: { + V2: { parents: 0, interior: {X1: { AccountId32: { @@ -322,7 +322,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Westmint', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -368,7 +368,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Westmint', () => { }); const destination = { - V1: { + V2: { parents: 1, interior: { X1:{ diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index 91c109c719..08eea87b42 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -113,7 +113,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { await usingPlaygrounds(async (helper) => { const location = { - V1: { + V2: { parents: 1, interior: {X3: [ { @@ -145,7 +145,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { // (fee for USDT XCM are paid in relay tokens) await usingRelayPlaygrounds(relayUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 0, interior: {X1: { Parachain: QUARTZ_CHAIN, @@ -154,7 +154,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }}; const beneficiary = { - V1: { + V2: { parents: 0, interior: {X1: { AccountId32: { @@ -166,7 +166,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -191,7 +191,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { itSub('Should connect and send USDT from Statemine to Quartz', async ({helper}) => { await usingStateminePlaygrounds(statemineUrl, async (helper) => { const dest = { - V1: { + V2: { parents: 1, interior: {X1: { Parachain: QUARTZ_CHAIN, @@ -200,7 +200,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }}; const beneficiary = { - V1: { + V2: { parents: 0, interior: {X1: { AccountId32: { @@ -212,7 +212,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -276,7 +276,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { itSub('Should connect and send USDT from Quartz to Statemine back', async ({helper}) => { const destination = { - V1: { + V2: { parents: 1, interior: {X2: [ { @@ -332,7 +332,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { await usingRelayPlaygrounds(relayUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 0, interior: {X1: { Parachain: QUARTZ_CHAIN, @@ -341,7 +341,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }}; const beneficiary = { - V1: { + V2: { parents: 0, interior: {X1: { AccountId32: { @@ -353,7 +353,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -401,7 +401,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }); const destination = { - V1: { + V2: { parents: 1, interior: { X1:{ @@ -470,7 +470,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { await usingKaruraPlaygrounds(karuraUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 1, interior: { X1: { @@ -501,7 +501,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { itSub('Should connect and send QTZ to Karura', async ({helper}) => { const destination = { - V1: { + V2: { parents: 1, interior: { X1: { @@ -512,7 +512,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { }; const beneficiary = { - V1: { + V2: { parents: 0, interior: { X1: { @@ -526,7 +526,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -580,7 +580,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { itSub('Should connect to Karura and send QTZ back', async ({helper}) => { await usingKaruraPlaygrounds(karuraUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 1, interior: { X2: [ @@ -644,7 +644,7 @@ describeXCM('[XCM] Integration test: Quartz rejects non-native tokens', () => { itSub('Quartz rejects KAR tokens from Karura', async ({helper}) => { await usingKaruraPlaygrounds(karuraUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 1, interior: { X2: [ @@ -865,7 +865,7 @@ describeXCM('[XCM] Integration test: Exchanging QTZ with Moonriver', () => { NativeAssetId: 'Here', }; const dest = { - V1: { + V2: { parents: 1, interior: { X2: [ @@ -905,7 +905,7 @@ describeXCM('[XCM] Integration test: Exchanging QTZ with Moonriver', () => { itSub('Should connect to Moonriver and send QTZ back', async ({helper}) => { await usingMoonriverPlaygrounds(moonriverUrl, async (helper) => { const asset = { - V1: { + V2: { id: { Concrete: { parents: 1, @@ -920,7 +920,7 @@ describeXCM('[XCM] Integration test: Exchanging QTZ with Moonriver', () => { }, }; const destination = { - V1: { + V2: { parents: 1, interior: { X2: [ diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index f18939f2e6..b203728986 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -113,7 +113,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { await usingPlaygrounds(async (helper) => { const location = { - V1: { + V2: { parents: 1, interior: {X3: [ { @@ -145,7 +145,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { // (fee for USDT XCM are paid in relay tokens) await usingRelayPlaygrounds(relayUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 0, interior: {X1: { Parachain: UNIQUE_CHAIN, @@ -154,7 +154,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }}; const beneficiary = { - V1: { + V2: { parents: 0, interior: {X1: { AccountId32: { @@ -166,7 +166,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -191,7 +191,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { itSub('Should connect and send USDT from Statemint to Unique', async ({helper}) => { await usingStatemintPlaygrounds(statemintUrl, async (helper) => { const dest = { - V1: { + V2: { parents: 1, interior: {X1: { Parachain: UNIQUE_CHAIN, @@ -200,7 +200,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }}; const beneficiary = { - V1: { + V2: { parents: 0, interior: {X1: { AccountId32: { @@ -212,7 +212,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -276,7 +276,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { itSub('Should connect and send USDT from Unique to Statemint back', async ({helper}) => { const destination = { - V1: { + V2: { parents: 1, interior: {X2: [ { @@ -332,7 +332,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { await usingRelayPlaygrounds(relayUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 0, interior: {X1: { Parachain: UNIQUE_CHAIN, @@ -341,7 +341,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }}; const beneficiary = { - V1: { + V2: { parents: 0, interior: {X1: { AccountId32: { @@ -353,7 +353,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -401,7 +401,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }); const destination = { - V1: { + V2: { parents: 1, interior: { X1:{ @@ -470,7 +470,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { await usingAcalaPlaygrounds(acalaUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 1, interior: { X1: { @@ -502,7 +502,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { itSub('Should connect and send UNQ to Acala', async ({helper}) => { const destination = { - V1: { + V2: { parents: 1, interior: { X1: { @@ -513,7 +513,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { }; const beneficiary = { - V1: { + V2: { parents: 0, interior: { X1: { @@ -527,7 +527,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -581,7 +581,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { itSub('Should connect to Acala and send UNQ back', async ({helper}) => { await usingAcalaPlaygrounds(acalaUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 1, interior: { X2: [ @@ -645,7 +645,7 @@ describeXCM('[XCM] Integration test: Unique rejects non-native tokens', () => { itSub('Unique rejects ACA tokens from Acala', async ({helper}) => { await usingAcalaPlaygrounds(acalaUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 1, interior: { X2: [ @@ -866,7 +866,7 @@ describeXCM('[XCM] Integration test: Exchanging UNQ with Moonbeam', () => { NativeAssetId: 'Here', }; const dest = { - V1: { + V2: { parents: 1, interior: { X2: [ @@ -907,7 +907,7 @@ describeXCM('[XCM] Integration test: Exchanging UNQ with Moonbeam', () => { itSub('Should connect to Moonbeam and send UNQ back', async ({helper}) => { await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => { const asset = { - V1: { + V2: { id: { Concrete: { parents: 1, @@ -922,7 +922,7 @@ describeXCM('[XCM] Integration test: Exchanging UNQ with Moonbeam', () => { }, }; const destination = { - V1: { + V2: { parents: 1, interior: { X2: [ From c3e8cb0cd2b211f05f02c772fb22af64936b42c6 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 29 Mar 2023 09:52:58 +0200 Subject: [PATCH 042/103] test: deduplicate polkadot.js versions --- tests/package.json | 4 +- tests/yarn.lock | 425 ++++++++++++++++----------------------------- 2 files changed, 151 insertions(+), 278 deletions(-) diff --git a/tests/package.json b/tests/package.json index d7e6c9e84a..99aec12aac 100644 --- a/tests/package.json +++ b/tests/package.json @@ -121,8 +121,8 @@ "homepage": "", "dependencies": { "@polkadot/api": "10.2.1", - "@polkadot/util": "10.2.1", - "@polkadot/util-crypto": "10.2.1", + "@polkadot/util": "11.1.2", + "@polkadot/util-crypto": "11.1.2", "chai-as-promised": "^7.1.1", "chai-like": "^1.1.1", "csv-writer": "^1.6.0", diff --git a/tests/yarn.lock b/tests/yarn.lock index e3090a9bae..24f4071c81 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -"@babel/runtime@^7.20.6": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b" - integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA== - dependencies: - regenerator-runtime "^0.13.11" - "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -16,14 +9,26 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724" + integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ== + +"@eslint/eslintrc@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" + integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" + espree "^9.5.1" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -31,6 +36,11 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.37.0": + version "8.37.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.37.0.tgz#cf1b5fa24217fe007f6487a26d765274925efa7d" + integrity sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A== + "@ethereumjs/common@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" @@ -269,21 +279,11 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@noble/hashes@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.3.tgz#360afc77610e0a61f3417e497dcf36862e4f8111" - integrity sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A== - "@noble/hashes@1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.0.tgz#085fd70f6d7d9d109671090ccae1d3bec62554a1" integrity sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg== -"@noble/secp256k1@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.0.tgz#d15357f7c227e751d90aa06b05a0e5cf993ba8c1" - integrity sha512-kbacwGSsH/CTout0ZnZWxnW1B+jH/7r/WAAKLBtrRJ/+CUH7lgmQzl3GTrQua3SGKWNSDsS6lmjnDpIJ5Dxyaw== - "@noble/secp256k1@1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" @@ -382,15 +382,6 @@ "@polkadot/util-crypto" "11.1.2" tslib "^2.5.0" -"@polkadot/networks@10.2.1": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-10.2.1.tgz#5095011795afa20291ef3e34a2ad38ed2c63fe09" - integrity sha512-cDZIY4jBo2tlDdSXNbECpuWer0NWlPcJNhHHveTiu2idje2QyIBNxBlAPViNGpz+ScAR0EknEzmQKuHOcSKxzg== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/util" "10.2.1" - "@substrate/ss58-registry" "^1.35.0" - "@polkadot/networks@11.1.2", "@polkadot/networks@^11.1.2": version "11.1.2" resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-11.1.2.tgz#2566bdc4503e32f34f9ceb051c9a6e159cde415a" @@ -526,23 +517,6 @@ rxjs "^7.8.0" tslib "^2.5.0" -"@polkadot/util-crypto@10.2.1": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-10.2.1.tgz#f6ce1c81496336ca50c2ca84975bcde79aa16634" - integrity sha512-UH1J4oD92gkLXMfVTLee3Y2vYadNyp1lmS4P2nZwQ0SOzGZ4rN7khD2CrB1cXS9WPq196Zb5oZdGLnPYnXHtjw== - dependencies: - "@babel/runtime" "^7.20.6" - "@noble/hashes" "1.1.3" - "@noble/secp256k1" "1.7.0" - "@polkadot/networks" "10.2.1" - "@polkadot/util" "10.2.1" - "@polkadot/wasm-crypto" "^6.4.1" - "@polkadot/x-bigint" "10.2.1" - "@polkadot/x-randomvalues" "10.2.1" - "@scure/base" "1.1.1" - ed2curve "^0.3.0" - tweetnacl "^1.0.3" - "@polkadot/util-crypto@11.1.2", "@polkadot/util-crypto@^11.1.2": version "11.1.2" resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-11.1.2.tgz#216d33e8f09426c3f9bb55f33ae280f620b17bb8" @@ -559,19 +533,6 @@ tslib "^2.5.0" tweetnacl "^1.0.3" -"@polkadot/util@10.2.1": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-10.2.1.tgz#a8c3a4fe87091197448bec70f7ea079b60d5abf6" - integrity sha512-ewGKSOp+VXKEeCvpCCP2Qqi/FVkewBF9vb/N8pRwuNQ2XE9k1lnsOZZeQemVBDhKsZz+h3IeNcWejaF6K3vYHQ== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/x-bigint" "10.2.1" - "@polkadot/x-global" "10.2.1" - "@polkadot/x-textdecoder" "10.2.1" - "@polkadot/x-textencoder" "10.2.1" - "@types/bn.js" "^5.1.1" - bn.js "^5.2.1" - "@polkadot/util@11.1.2", "@polkadot/util@^11.1.2": version "11.1.2" resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-11.1.2.tgz#35859afb4cbbb5e12221258b1361f6da23cee89e" @@ -585,13 +546,6 @@ bn.js "^5.2.1" tslib "^2.5.0" -"@polkadot/wasm-bridge@6.4.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-6.4.1.tgz#e97915dd67ba543ec3381299c2a5b9330686e27e" - integrity sha512-QZDvz6dsUlbYsaMV5biZgZWkYH9BC5AfhT0f0/knv8+LrbAoQdP3Asbvddw8vyU9sbpuCHXrd4bDLBwUCRfrBQ== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/wasm-bridge@7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-7.0.3.tgz#9691450830604dc4a361692a8a2a3df22fa53e96" @@ -599,13 +553,6 @@ dependencies: tslib "^2.5.0" -"@polkadot/wasm-crypto-asmjs@6.4.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz#3cc76bbda5ea4a7a860982c64f9565907b312253" - integrity sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/wasm-crypto-asmjs@7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.0.3.tgz#a1bc942029979b2696a1062066d774e99a5a6b4c" @@ -613,16 +560,6 @@ dependencies: tslib "^2.5.0" -"@polkadot/wasm-crypto-init@6.4.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.4.1.tgz#4d9ab0030db52cf177bf707ef8e77aa4ca721668" - integrity sha512-1ALagSi/nfkyFaH6JDYfy/QbicVbSn99K8PV9rctDUfxc7P06R7CoqbjGQ4OMPX6w1WYVPU7B4jPHGLYBlVuMw== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/wasm-bridge" "6.4.1" - "@polkadot/wasm-crypto-asmjs" "6.4.1" - "@polkadot/wasm-crypto-wasm" "6.4.1" - "@polkadot/wasm-crypto-init@7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.0.3.tgz#336af713edfcd6fdd0194fee2919781893fba577" @@ -633,14 +570,6 @@ "@polkadot/wasm-crypto-wasm" "7.0.3" tslib "^2.5.0" -"@polkadot/wasm-crypto-wasm@6.4.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz#97180f80583b18f6a13c1054fa5f7e8da40b1028" - integrity sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/wasm-util" "6.4.1" - "@polkadot/wasm-crypto-wasm@7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.0.3.tgz#016834b1eb2564d8a13b133ee77a4612ad873d41" @@ -649,18 +578,6 @@ "@polkadot/wasm-util" "7.0.3" tslib "^2.5.0" -"@polkadot/wasm-crypto@^6.4.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz#79310e23ad1ca62362ba893db6a8567154c2536a" - integrity sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/wasm-bridge" "6.4.1" - "@polkadot/wasm-crypto-asmjs" "6.4.1" - "@polkadot/wasm-crypto-init" "6.4.1" - "@polkadot/wasm-crypto-wasm" "6.4.1" - "@polkadot/wasm-util" "6.4.1" - "@polkadot/wasm-crypto@^7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-7.0.3.tgz#e07ddbeea0b45149d8e58be292ad423d646f1cb1" @@ -673,13 +590,6 @@ "@polkadot/wasm-util" "7.0.3" tslib "^2.5.0" -"@polkadot/wasm-util@6.4.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-6.4.1.tgz#74aecc85bec427a9225d9874685944ea3dc3ab76" - integrity sha512-Uwo+WpEsDmFExWC5kTNvsVhvqXMZEKf4gUHXFn4c6Xz4lmieRT5g+1bO1KJ21pl4msuIgdV3Bksfs/oiqMFqlw== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/wasm-util@7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-7.0.3.tgz#eab59f9dac0f00ca736aff8b24925108b7b2f860" @@ -687,14 +597,6 @@ dependencies: tslib "^2.5.0" -"@polkadot/x-bigint@10.2.1": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-10.2.1.tgz#aa2d4384bb4ae6b5a3f333aa25bf6fd64d9006c5" - integrity sha512-asFroI2skC4gYv0oIqqb84DqCCxhNUTSCKobEg57WdXoT4TKrN9Uetg2AMSIHRiX/9lP3EPMhUjM1VVGobTQRQ== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/x-global" "10.2.1" - "@polkadot/x-bigint@11.1.2", "@polkadot/x-bigint@^11.1.2": version "11.1.2" resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-11.1.2.tgz#b430fce70b78fb687bc6335243f788a09edbf4dd" @@ -712,13 +614,6 @@ node-fetch "^3.3.1" tslib "^2.5.0" -"@polkadot/x-global@10.2.1": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-10.2.1.tgz#6fbaab05653e680adc8c69c07947eee49afc1238" - integrity sha512-kWmPku2lCcoYKU16+lWGOb95+6Lu9zo1trvzTWmAt7z0DXw2GlD9+qmDTt5iYGtguJsGXoRZDGilDTo3MeFrkA== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/x-global@11.1.2", "@polkadot/x-global@^11.1.2": version "11.1.2" resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-11.1.2.tgz#cbb21fe96e0d85925a23f552c4280b63ac8b5312" @@ -726,14 +621,6 @@ dependencies: tslib "^2.5.0" -"@polkadot/x-randomvalues@10.2.1": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-10.2.1.tgz#1c463625c0b7cf775e94594f522eb21a5229b42e" - integrity sha512-bEwG6j/+HMZ5LIkyzRbTB0N1Wz2lHyxP25pPFgHFqGqon/KZoRN5kxOwEJ1DpPJIv+9PVn5tt7bc4R3qsaZ93g== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/x-global" "10.2.1" - "@polkadot/x-randomvalues@11.1.2": version "11.1.2" resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-11.1.2.tgz#db9b85a728a6270927c07e35bdd90082c182f0c7" @@ -742,14 +629,6 @@ "@polkadot/x-global" "11.1.2" tslib "^2.5.0" -"@polkadot/x-textdecoder@10.2.1": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-10.2.1.tgz#c1778ef35e2aa8db8f11bbe31a5bbf5e46017d7d" - integrity sha512-hpFmrdv/rrSM4UNaV8TJBgMtwXsYlNgBTSUmnKWwJIN3PhOUeYxl1qIbPchxGbJBc35WviJCZe7rlLja9JvFcw== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/x-global" "10.2.1" - "@polkadot/x-textdecoder@11.1.2": version "11.1.2" resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-11.1.2.tgz#47866922af0262478aafce30ba27aeed77223706" @@ -758,14 +637,6 @@ "@polkadot/x-global" "11.1.2" tslib "^2.5.0" -"@polkadot/x-textencoder@10.2.1": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-10.2.1.tgz#c09562c73a44659243075d43b007b5c1b39c57a8" - integrity sha512-4gMyY6DCH34KA++bawu/zlUJ0/8+aZJsurwjRBbkdfOS2uLo0K+vJ5GBevAhl0VSznM36ptfh/MpkIBKK/6R0g== - dependencies: - "@babel/runtime" "^7.20.6" - "@polkadot/x-global" "10.2.1" - "@polkadot/x-textencoder@11.1.2": version "11.1.2" resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-11.1.2.tgz#2967c06843ffd8299627da997d7e6b892d1e9c13" @@ -807,11 +678,6 @@ eventemitter3 "^4.0.7" smoldot "1.0.0" -"@substrate/ss58-registry@^1.35.0": - version "1.38.0" - resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.38.0.tgz#b50cb28c77a0375fbf33dd29b7b28ee32871af9f" - integrity sha512-sHiVRWekGMRZAjPukN9/W166NM6D5wtHcK6RVyLy66kg3CHNZ1BXfpXcjOiXSwhbd7guQFDEwnOVaDrbk1XL1g== - "@substrate/ss58-registry@^1.39.0": version "1.39.0" resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.39.0.tgz#eb916ff5fea7fa02e77745823fde21af979273d2" @@ -917,9 +783,9 @@ integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== "@types/node@*", "@types/node@^18.11.2": - version "18.13.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.13.0.tgz#0400d1e6ce87e9d3032c19eb6c58205b0d3f7850" - integrity sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg== + version "18.15.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" + integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== "@types/node@^12.12.6": version "12.20.55" @@ -953,87 +819,87 @@ integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== "@typescript-eslint/eslint-plugin@^5.47.0": - version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz#5fb0d43574c2411f16ea80f5fc335b8eaa7b28a8" - integrity sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg== - dependencies: - "@typescript-eslint/scope-manager" "5.52.0" - "@typescript-eslint/type-utils" "5.52.0" - "@typescript-eslint/utils" "5.52.0" + version "5.57.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.0.tgz#52c8a7a4512f10e7249ca1e2e61f81c62c34365c" + integrity sha512-itag0qpN6q2UMM6Xgk6xoHa0D0/P+M17THnr4SVgqn9Rgam5k/He33MA7/D7QoJcdMxHFyX7U9imaBonAX/6qA== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.57.0" + "@typescript-eslint/type-utils" "5.57.0" + "@typescript-eslint/utils" "5.57.0" debug "^4.3.4" grapheme-splitter "^1.0.4" ignore "^5.2.0" natural-compare-lite "^1.4.0" - regexpp "^3.2.0" semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/parser@^5.47.0": - version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.52.0.tgz#73c136df6c0133f1d7870de7131ccf356f5be5a4" - integrity sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA== + version "5.57.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.57.0.tgz#f675bf2cd1a838949fd0de5683834417b757e4fa" + integrity sha512-orrduvpWYkgLCyAdNtR1QIWovcNZlEm6yL8nwH/eTxWLd8gsP+25pdLHYzL2QdkqrieaDwLpytHqycncv0woUQ== dependencies: - "@typescript-eslint/scope-manager" "5.52.0" - "@typescript-eslint/types" "5.52.0" - "@typescript-eslint/typescript-estree" "5.52.0" + "@typescript-eslint/scope-manager" "5.57.0" + "@typescript-eslint/types" "5.57.0" + "@typescript-eslint/typescript-estree" "5.57.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.52.0": - version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz#a993d89a0556ea16811db48eabd7c5b72dcb83d1" - integrity sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw== +"@typescript-eslint/scope-manager@5.57.0": + version "5.57.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.57.0.tgz#79ccd3fa7bde0758059172d44239e871e087ea36" + integrity sha512-NANBNOQvllPlizl9LatX8+MHi7bx7WGIWYjPHDmQe5Si/0YEYfxSljJpoTyTWFTgRy3X8gLYSE4xQ2U+aCozSw== dependencies: - "@typescript-eslint/types" "5.52.0" - "@typescript-eslint/visitor-keys" "5.52.0" + "@typescript-eslint/types" "5.57.0" + "@typescript-eslint/visitor-keys" "5.57.0" -"@typescript-eslint/type-utils@5.52.0": - version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz#9fd28cd02e6f21f5109e35496df41893f33167aa" - integrity sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw== +"@typescript-eslint/type-utils@5.57.0": + version "5.57.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.57.0.tgz#98e7531c4e927855d45bd362de922a619b4319f2" + integrity sha512-kxXoq9zOTbvqzLbdNKy1yFrxLC6GDJFE2Yuo3KqSwTmDOFjUGeWSakgoXT864WcK5/NAJkkONCiKb1ddsqhLXQ== dependencies: - "@typescript-eslint/typescript-estree" "5.52.0" - "@typescript-eslint/utils" "5.52.0" + "@typescript-eslint/typescript-estree" "5.57.0" + "@typescript-eslint/utils" "5.57.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.52.0": - version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.52.0.tgz#19e9abc6afb5bd37a1a9bea877a1a836c0b3241b" - integrity sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ== +"@typescript-eslint/types@5.57.0": + version "5.57.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.57.0.tgz#727bfa2b64c73a4376264379cf1f447998eaa132" + integrity sha512-mxsod+aZRSyLT+jiqHw1KK6xrANm19/+VFALVFP5qa/aiJnlP38qpyaTd0fEKhWvQk6YeNZ5LGwI1pDpBRBhtQ== -"@typescript-eslint/typescript-estree@5.52.0": - version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz#6408cb3c2ccc01c03c278cb201cf07e73347dfca" - integrity sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ== +"@typescript-eslint/typescript-estree@5.57.0": + version "5.57.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.0.tgz#ebcd0ee3e1d6230e888d88cddf654252d41e2e40" + integrity sha512-LTzQ23TV82KpO8HPnWuxM2V7ieXW8O142I7hQTxWIHDcCEIjtkat6H96PFkYBQqGFLW/G/eVVOB9Z8rcvdY/Vw== dependencies: - "@typescript-eslint/types" "5.52.0" - "@typescript-eslint/visitor-keys" "5.52.0" + "@typescript-eslint/types" "5.57.0" + "@typescript-eslint/visitor-keys" "5.57.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.52.0": - version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.52.0.tgz#b260bb5a8f6b00a0ed51db66bdba4ed5e4845a72" - integrity sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA== +"@typescript-eslint/utils@5.57.0": + version "5.57.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.57.0.tgz#eab8f6563a2ac31f60f3e7024b91bf75f43ecef6" + integrity sha512-ps/4WohXV7C+LTSgAL5CApxvxbMkl9B9AUZRtnEFonpIxZDIT7wC1xfvuJONMidrkB9scs4zhtRyIwHh4+18kw== dependencies: + "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.52.0" - "@typescript-eslint/types" "5.52.0" - "@typescript-eslint/typescript-estree" "5.52.0" + "@typescript-eslint/scope-manager" "5.57.0" + "@typescript-eslint/types" "5.57.0" + "@typescript-eslint/typescript-estree" "5.57.0" eslint-scope "^5.1.1" - eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.52.0": - version "5.52.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz#e38c971259f44f80cfe49d97dbffa38e3e75030f" - integrity sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA== +"@typescript-eslint/visitor-keys@5.57.0": + version "5.57.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.0.tgz#e2b2f4174aff1d15eef887ce3d019ecc2d7a8ac1" + integrity sha512-ery2g3k0hv5BLiKpPuwYt9KBkAp2ugT6VvyShXdLOkax895EC55sP0Tx5L0fZaQueiK3fBLvHVvEl3jFS5ia+g== dependencies: - "@typescript-eslint/types" "5.52.0" + "@typescript-eslint/types" "5.57.0" eslint-visitor-keys "^3.3.0" abortcontroller-polyfill@^1.7.3: @@ -1220,7 +1086,7 @@ bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.20.1, body-parser@^1.16.0: +body-parser@1.20.1: version "1.20.1" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== @@ -1238,6 +1104,24 @@ body-parser@1.20.1, body-parser@^1.16.0: type-is "~1.6.18" unpipe "1.0.0" +body-parser@^1.16.0: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1541,7 +1425,7 @@ content-hash@^2.5.2: multicodec "^0.5.5" multihashes "^0.4.15" -content-type@~1.0.4: +content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -1750,13 +1634,6 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -ed2curve@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/ed2curve/-/ed2curve-0.3.0.tgz#322b575152a45305429d546b071823a93129a05d" - integrity sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ== - dependencies: - tweetnacl "1.x.x" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -1874,17 +1751,20 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== eslint@^8.25.0: - version "8.34.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" - integrity sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg== - dependencies: - "@eslint/eslintrc" "^1.4.1" + version "8.37.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.37.0.tgz#1f660ef2ce49a0bfdec0b0d698e0b8b627287412" + integrity sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.2" + "@eslint/js" "8.37.0" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -1895,10 +1775,9 @@ eslint@^8.25.0: doctrine "^3.0.0" escape-string-regexp "^4.0.0" eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-visitor-keys "^3.4.0" + espree "^9.5.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" @@ -1919,24 +1798,23 @@ eslint@^8.25.0: minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - regexpp "^3.2.0" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== +espree@^9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" + integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== dependencies: acorn "^8.8.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.0" -esquery@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.1.tgz#ddb8e1e2666750113b78c15f59e977564f52b116" - integrity sha512-3ZggxvMv5EEY1ssUVyHSVt0oPreyBfbUi1XikJVfjFiBeBDLdrb0IWoDiEwqT/2sUQi0TGaWtFhOGDD8RTpXgQ== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -2454,9 +2332,9 @@ got@^11.8.5: responselike "^2.0.0" graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== grapheme-splitter@^1.0.4: version "1.0.4" @@ -2745,9 +2623,9 @@ isstream@~0.1.2: integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== js-sdsl@^4.1.4: - version "4.3.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" - integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" + integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" @@ -3019,9 +2897,9 @@ mkdirp-promise@^5.0.1: mkdirp "*" mkdirp@*: - version "2.1.3" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.3.tgz#b083ff37be046fd3d6552468c1f0ff44c1545d1f" - integrity sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw== + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== mkdirp@^0.5.5: version "0.5.6" @@ -3444,9 +3322,9 @@ quick-lru@^5.1.1: integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== rambda@^7.1.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/rambda/-/rambda-7.4.0.tgz#61ec9de31d3dd6affe804de3bae04a5b818781e5" - integrity sha512-A9hihu7dUTLOUCM+I8E61V4kRXnN4DwYeK0DwCBydC1MqNI1PidyAtbtpsJlBBzK4icSctEcCQ1bGcLpBuETUQ== + version "7.5.0" + resolved "https://registry.yarnpkg.com/rambda/-/rambda-7.5.0.tgz#1865044c59bc0b16f63026c6e5a97e4b1bbe98fe" + integrity sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA== randombytes@^2.1.0: version "2.1.0" @@ -3470,10 +3348,20 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -3486,16 +3374,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -regenerator-runtime@^0.13.11: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - request@^2.79.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -3946,16 +3824,16 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tweetnacl@1.x.x, tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -4418,16 +4296,11 @@ ws@^3.0.0: safe-buffer "~5.1.0" ultron "~1.1.0" -ws@^8.13.0: +ws@^8.13.0, ws@^8.8.1: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== -ws@^8.8.1: - version "8.12.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" - integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== - xhr-request-promise@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" From 93c5da388d2d0dc6b47fda2a9f70240a179f98c1 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 29 Mar 2023 09:53:31 +0200 Subject: [PATCH 043/103] test: update property size calculation --- .../nesting/collectionProperties.seqtest.ts | 10 ++--- .../src/nesting/collectionProperties.test.ts | 40 +++++++++---------- tests/src/nesting/tokenProperties.seqtest.ts | 11 +++-- tests/src/nesting/tokenProperties.test.ts | 38 +++++++++--------- tests/src/util/index.ts | 23 +++++++++++ 5 files changed, 70 insertions(+), 52 deletions(-) diff --git a/tests/src/nesting/collectionProperties.seqtest.ts b/tests/src/nesting/collectionProperties.seqtest.ts index a36944adbd..1f42113c41 100644 --- a/tests/src/nesting/collectionProperties.seqtest.ts +++ b/tests/src/nesting/collectionProperties.seqtest.ts @@ -15,7 +15,7 @@ // along with Unique Network. If not, see . import {IKeyringPair} from '@polkadot/types/types'; -import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip} from '../util'; +import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util'; describe('Integration Test: Collection Properties with sudo', () => { let superuser: IKeyringPair; @@ -48,14 +48,14 @@ describe('Integration Test: Collection Properties with sudo', () => { ]; const collection = await helper[testSuite.mode].mintCollection(alice, {properties}); - const newProperty = ' '.repeat(4096); - await collection.setProperties(alice, [{key: 'space', value: newProperty}]); + const newProperty = {key: 'space', value: ' '.repeat(4096)}; + await collection.setProperties(alice, [newProperty]); const originalSpace = await collection.getPropertiesConsumedSpace(); - expect(originalSpace).to.be.equal(properties[0].value.length + properties[1].value.length + newProperty.length); + expect(originalSpace).to.be.equal(sizeOfProperty(properties[0]) + sizeOfProperty(properties[1]) + sizeOfProperty(newProperty)); await helper.getSudo().executeExtrinsic(superuser, 'api.tx.unique.forceRepairCollection', [collection.collectionId], true); const recomputedSpace = await collection.getPropertiesConsumedSpace(); expect(recomputedSpace).to.be.equal(originalSpace); }); })); -}); \ No newline at end of file +}); diff --git a/tests/src/nesting/collectionProperties.test.ts b/tests/src/nesting/collectionProperties.test.ts index 2a072cce66..924375808f 100644 --- a/tests/src/nesting/collectionProperties.test.ts +++ b/tests/src/nesting/collectionProperties.test.ts @@ -15,7 +15,7 @@ // along with Unique Network. If not, see . import {IKeyringPair} from '@polkadot/types/types'; -import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip} from '../util'; +import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util'; describe('Integration Test: Collection Properties', () => { let alice: IKeyringPair; @@ -134,9 +134,10 @@ describe('Integration Test: Collection Properties', () => { return `${propDataChar}`.repeat(propDataSize); }; - await collection.setProperties(alice, [{key: propKey, value: makeNewPropData()}]); + const property = {key: propKey, value: makeNewPropData()}; + await collection.setProperties(alice, [property]); const originalSpace = await collection.getPropertiesConsumedSpace(); - expect(originalSpace).to.be.equal(propDataSize); + expect(originalSpace).to.be.equal(sizeOfProperty(property)); const sameSizePropertiesPossibleNum = maxCollectionPropertiesSize / propDataSize; @@ -158,9 +159,10 @@ describe('Integration Test: Collection Properties', () => { const propDataSize = 4096; const propData = 'a'.repeat(propDataSize); - await collection.setProperties(alice, [{key: propKey, value: propData}]); + const property = {key: propKey, value: propData}; + await collection.setProperties(alice, [property]); let consumedSpace = await collection.getPropertiesConsumedSpace(); - expect(consumedSpace).to.be.equal(propDataSize); + expect(consumedSpace).to.be.equal(sizeOfProperty(property)); await collection.deleteProperties(alice, [propKey]); consumedSpace = await collection.getPropertiesConsumedSpace(); @@ -173,31 +175,27 @@ describe('Integration Test: Collection Properties', () => { const collection = await helper[testSuite.mode].mintCollection(alice); const originalSpace = await collection.getPropertiesConsumedSpace(); - const initPropDataSize = 4096; - const biggerPropDataSize = 5000; - const smallerPropDataSize = 4000; - - const initPropData = 'a'.repeat(initPropDataSize); - const biggerPropData = 'b'.repeat(biggerPropDataSize); - const smallerPropData = 'c'.repeat(smallerPropDataSize); + const initProp = {key: propKey, value: 'a'.repeat(4096)}; + const biggerProp = {key: propKey, value: 'b'.repeat(5000)}; + const smallerProp = {key: propKey, value: 'c'.repeat(4000)}; let consumedSpace; let expectedConsumedSpaceDiff; - await collection.setProperties(alice, [{key: propKey, value: initPropData}]); + await collection.setProperties(alice, [initProp]); consumedSpace = await collection.getPropertiesConsumedSpace(); - expectedConsumedSpaceDiff = initPropDataSize - originalSpace; + expectedConsumedSpaceDiff = sizeOfProperty(initProp) - originalSpace; expect(consumedSpace).to.be.equal(originalSpace + expectedConsumedSpaceDiff); - await collection.setProperties(alice, [{key: propKey, value: biggerPropData}]); + await collection.setProperties(alice, [biggerProp]); consumedSpace = await collection.getPropertiesConsumedSpace(); - expectedConsumedSpaceDiff = biggerPropDataSize - initPropDataSize; - expect(consumedSpace).to.be.equal(initPropDataSize + expectedConsumedSpaceDiff); + expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(initProp); + expect(consumedSpace).to.be.equal(sizeOfProperty(initProp) + expectedConsumedSpaceDiff); - await collection.setProperties(alice, [{key: propKey, value: smallerPropData}]); + await collection.setProperties(alice, [smallerProp]); consumedSpace = await collection.getPropertiesConsumedSpace(); - expectedConsumedSpaceDiff = biggerPropDataSize - smallerPropDataSize; - expect(consumedSpace).to.be.equal(biggerPropDataSize - expectedConsumedSpaceDiff); + expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(smallerProp); + expect(consumedSpace).to.be.equal(sizeOfProperty(biggerProp) - expectedConsumedSpaceDiff); }); })); }); @@ -237,7 +235,7 @@ describe('Negative Integration Test: Collection Properties', () => { itSub('Fails to set properties that exceed the limits', async ({helper}) => { const collection = await helper[testSuite.mode].mintCollection(alice); - const spaceLimit = (await (collection.helper!.api! as any).query.common.collectionProperties(collection.collectionId)).spaceLimit.toNumber(); + const spaceLimit = helper.getApi().consts.unique.maxCollectionPropertiesSize.toNumber(); // Mute the general tx parsing error, too many bytes to process { diff --git a/tests/src/nesting/tokenProperties.seqtest.ts b/tests/src/nesting/tokenProperties.seqtest.ts index df23e9b9f5..5590683d7e 100644 --- a/tests/src/nesting/tokenProperties.seqtest.ts +++ b/tests/src/nesting/tokenProperties.seqtest.ts @@ -15,7 +15,7 @@ // along with Unique Network. If not, see . import {IKeyringPair} from '@polkadot/types/types'; -import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip} from '../util'; +import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util'; describe('Integration Test: Token Properties with sudo', () => { let superuser: IKeyringPair; @@ -57,16 +57,15 @@ describe('Integration Test: Token Properties with sudo', () => { : collection.mintToken(alice) ); - const propDataSize = 4096; - const propData = 'a'.repeat(propDataSize); + const prop = {key: propKey, value: 'a'.repeat(4096)}; - await token.setProperties(alice, [{key: propKey, value: propData}]); + await token.setProperties(alice, [prop]); const originalSpace = await token.getTokenPropertiesConsumedSpace(); - expect(originalSpace).to.be.equal(propDataSize); + expect(originalSpace).to.be.equal(sizeOfProperty(prop)); await helper.getSudo().executeExtrinsic(superuser, 'api.tx.unique.forceRepairItem', [token.collectionId, token.tokenId], true); const recomputedSpace = await token.getTokenPropertiesConsumedSpace(); expect(recomputedSpace).to.be.equal(originalSpace); }); })); -}); \ No newline at end of file +}); diff --git a/tests/src/nesting/tokenProperties.test.ts b/tests/src/nesting/tokenProperties.test.ts index f2f021c569..19a489caff 100644 --- a/tests/src/nesting/tokenProperties.test.ts +++ b/tests/src/nesting/tokenProperties.test.ts @@ -15,7 +15,7 @@ // along with Unique Network. If not, see . import {IKeyringPair} from '@polkadot/types/types'; -import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect} from '../util'; +import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect, sizeOfProperty} from '../util'; import {UniqueHelper, UniqueNFToken, UniqueRFToken} from '../util/playgrounds/unique'; describe('Integration Test: Token Properties', () => { @@ -353,9 +353,10 @@ describe('Integration Test: Token Properties', () => { : collection.mintToken(alice) ); - await token.setProperties(alice, [{key: propKey, value: makeNewPropData()}]); + const property = {key: propKey, value: makeNewPropData()}; + await token.setProperties(alice, [property]); const originalSpace = await token.getTokenPropertiesConsumedSpace(); - expect(originalSpace).to.be.equal(propDataSize); + expect(originalSpace).to.be.equal(sizeOfProperty(property)); const sameSizePropertiesPossibleNum = maxTokenPropertiesSize / propDataSize; @@ -393,9 +394,10 @@ describe('Integration Test: Token Properties', () => { const propDataSize = 4096; const propData = 'a'.repeat(propDataSize); - await token.setProperties(alice, [{key: propKey, value: propData}]); + const property = {key: propKey, value: propData}; + await token.setProperties(alice, [property]); let consumedSpace = await token.getTokenPropertiesConsumedSpace(); - expect(consumedSpace).to.be.equal(propDataSize); + expect(consumedSpace).to.be.equal(sizeOfProperty(property)); await token.deleteProperties(alice, [propKey]); consumedSpace = await token.getTokenPropertiesConsumedSpace(); @@ -424,31 +426,27 @@ describe('Integration Test: Token Properties', () => { ); const originalSpace = await token.getTokenPropertiesConsumedSpace(); - const initPropDataSize = 4096; - const biggerPropDataSize = 5000; - const smallerPropDataSize = 4000; - - const initPropData = 'a'.repeat(initPropDataSize); - const biggerPropData = 'b'.repeat(biggerPropDataSize); - const smallerPropData = 'c'.repeat(smallerPropDataSize); + const initProp = {key: propKey, value: 'a'.repeat(4096)}; + const biggerProp = {key: propKey, value: 'b'.repeat(5000)}; + const smallerProp = {key: propKey, value: 'c'.repeat(4000)}; let consumedSpace; let expectedConsumedSpaceDiff; - await token.setProperties(alice, [{key: propKey, value: initPropData}]); + await token.setProperties(alice, [initProp]); consumedSpace = await token.getTokenPropertiesConsumedSpace(); - expectedConsumedSpaceDiff = initPropDataSize - originalSpace; + expectedConsumedSpaceDiff = sizeOfProperty(initProp) - originalSpace; expect(consumedSpace).to.be.equal(originalSpace + expectedConsumedSpaceDiff); - await token.setProperties(alice, [{key: propKey, value: biggerPropData}]); + await token.setProperties(alice, [biggerProp]); consumedSpace = await token.getTokenPropertiesConsumedSpace(); - expectedConsumedSpaceDiff = biggerPropDataSize - initPropDataSize; - expect(consumedSpace).to.be.equal(initPropDataSize + expectedConsumedSpaceDiff); + expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(initProp); + expect(consumedSpace).to.be.equal(sizeOfProperty(initProp) + expectedConsumedSpaceDiff); - await token.setProperties(alice, [{key: propKey, value: smallerPropData}]); + await token.setProperties(alice, [smallerProp]); consumedSpace = await token.getTokenPropertiesConsumedSpace(); - expectedConsumedSpaceDiff = biggerPropDataSize - smallerPropDataSize; - expect(consumedSpace).to.be.equal(biggerPropDataSize - expectedConsumedSpaceDiff); + expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(smallerProp); + expect(consumedSpace).to.be.equal(sizeOfProperty(biggerProp) - expectedConsumedSpaceDiff); })); }); diff --git a/tests/src/util/index.ts b/tests/src/util/index.ts index d86402dd93..bc7eb33585 100644 --- a/tests/src/util/index.ts +++ b/tests/src/util/index.ts @@ -176,3 +176,26 @@ export function describeXCM(title: string, fn: (this: Mocha.Suite) => void, opts } describeXCM.skip = (name: string, fn: (this: Mocha.Suite) => void) => describeXCM(name, fn, {skip: true}); + +export function sizeOfInt(i: number) { + if (i < 0 || i > 0xffffffff) throw new Error('out of range'); + if(i < 0b11_1111) { + return 1; + } else if (i < 0b11_1111_1111_1111) { + return 2; + } else if (i < 0b11_1111_1111_1111_1111_1111_1111_1111) { + return 4; + } else { + return 5; + } +} + +const UTF8_ENCODER = new TextEncoder(); +export function sizeOfEncodedStr(v: string) { + const encoded = UTF8_ENCODER.encode(v); + return sizeOfInt(encoded.length) + encoded.length; +} + +export function sizeOfProperty(prop: {key: string, value: string}) { + return sizeOfEncodedStr(prop.key) + sizeOfEncodedStr(prop.value); +} From ae379cd8ab7c88861cbb2ebee361397845a14dd8 Mon Sep 17 00:00:00 2001 From: Konstantin Astakhov Date: Wed, 29 Mar 2023 15:34:07 +0700 Subject: [PATCH 044/103] migrate to ubuntu:22.04 --- .docker/Dockerfile-acala.j2 | 4 ++-- .docker/Dockerfile-collators | 2 +- .docker/Dockerfile-cumulus.j2 | 4 ++-- .docker/Dockerfile-moonbeam.j2 | 4 ++-- .docker/Dockerfile-parachain | 2 +- .docker/Dockerfile-parachain-node-only | 2 +- .docker/Dockerfile-parachain-upgrade | 2 +- .docker/Dockerfile-parachain-upgrade-data | 2 +- .docker/Dockerfile-polkadot.j2 | 4 ++-- .docker/Dockerfile-testnet.j2 | 2 +- .docker/Dockerfile-xcm.j2 | 2 +- .docker/additional/Dockerfile-polkadot | 4 ++-- .docker/additional/xcm-rococo/Dockerfile-xcm-opal-rococo.temp | 4 ++-- .../additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp | 4 ++-- .../additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp | 4 ++-- tests/Dockerfile-tests | 2 +- 16 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.docker/Dockerfile-acala.j2 b/.docker/Dockerfile-acala.j2 index dd980e8f2a..35db97247c 100644 --- a/.docker/Dockerfile-acala.j2 +++ b/.docker/Dockerfile-acala.j2 @@ -1,5 +1,5 @@ # ===== Rust builder ===== -FROM ubuntu:20.04 as rust-builder +FROM ubuntu:22.04 as rust-builder LABEL maintainer="Unique.Network" ENV CARGO_HOME="/cargo-home" @@ -36,6 +36,6 @@ RUN git clone -b {{ ACALA_BUILD_BRANCH }} --depth 1 https://github.com/AcalaNetw # ===== BIN ====== -FROM ubuntu:20.04 as builder-acala +FROM ubuntu:22.04 as builder-acala COPY --from=builder-acala-bin /unique_parachain/Acala/target/production/acala /unique_parachain/Acala/target/production/acala diff --git a/.docker/Dockerfile-collators b/.docker/Dockerfile-collators index 0cfc81852b..1227e2dfe6 100644 --- a/.docker/Dockerfile-collators +++ b/.docker/Dockerfile-collators @@ -38,7 +38,7 @@ RUN git clone -b $BRANCH https://github.com/UniqueNetwork/unique-chain.git && \ # ===== RUN ====== -FROM ubuntu:20.04 +FROM ubuntu:22.04 RUN apt-get -y update && \ apt-get -y install curl git && \ diff --git a/.docker/Dockerfile-cumulus.j2 b/.docker/Dockerfile-cumulus.j2 index 8caa44d0bf..82afea4316 100644 --- a/.docker/Dockerfile-cumulus.j2 +++ b/.docker/Dockerfile-cumulus.j2 @@ -1,5 +1,5 @@ # ===== Rust builder ===== -FROM ubuntu:20.04 as rust-builder +FROM ubuntu:22.04 as rust-builder LABEL maintainer="Unique.Network" ENV CARGO_HOME="/cargo-home" @@ -35,6 +35,6 @@ RUN git clone -b {{ CUMULUS_BUILD_BRANCH }} --depth 1 https://github.com/parityt # ===== BIN ====== -FROM ubuntu:20.04 as builder-cumulus +FROM ubuntu:22.04 as builder-cumulus COPY --from=builder-cumulus-bin /unique_parachain/cumulus/target/release/polkadot-parachain /unique_parachain/cumulus/target/release/polkadot-parachain diff --git a/.docker/Dockerfile-moonbeam.j2 b/.docker/Dockerfile-moonbeam.j2 index ee422d1ab7..2336219399 100644 --- a/.docker/Dockerfile-moonbeam.j2 +++ b/.docker/Dockerfile-moonbeam.j2 @@ -1,5 +1,5 @@ # ===== Rust builder ===== -FROM ubuntu:20.04 as rust-builder +FROM ubuntu:22.04 as rust-builder LABEL maintainer="Unique.Network" ENV CARGO_HOME="/cargo-home" @@ -36,6 +36,6 @@ RUN git clone -b {{ MOONBEAM_BUILD_BRANCH }} --depth 1 https://github.com/PureSt # ===== BIN ====== -FROM ubuntu:20.04 as builder-moonbeam +FROM ubuntu:22.04 as builder-moonbeam COPY --from=builder-moonbeam-bin /unique_parachain/moonbeam/target/release/moonbeam /unique_parachain/moonbeam/target/release/moonbeam diff --git a/.docker/Dockerfile-parachain b/.docker/Dockerfile-parachain index 52a6100ef6..fe96fe2d36 100644 --- a/.docker/Dockerfile-parachain +++ b/.docker/Dockerfile-parachain @@ -37,7 +37,7 @@ RUN git clone https://github.com/UniqueNetwork/unique-chain.git -b $BRANCH . && # ===== RUN ====== -FROM ubuntu:20.04 +FROM ubuntu:22.04 ARG POLKADOT_LAUNCH_BRANCH= diff --git a/.docker/Dockerfile-parachain-node-only b/.docker/Dockerfile-parachain-node-only index 25c384d54d..d8cc4b6f14 100644 --- a/.docker/Dockerfile-parachain-node-only +++ b/.docker/Dockerfile-parachain-node-only @@ -46,7 +46,7 @@ RUN cargo build --features=${NETWORK}-runtime --$PROFILE # ===== RUN ====== -FROM ubuntu:20.04 +FROM ubuntu:22.04 ARG NETWORK ARG POLKADOT_LAUNCH_BRANCH diff --git a/.docker/Dockerfile-parachain-upgrade b/.docker/Dockerfile-parachain-upgrade index 4334d8466b..77895a4606 100644 --- a/.docker/Dockerfile-parachain-upgrade +++ b/.docker/Dockerfile-parachain-upgrade @@ -45,7 +45,7 @@ WORKDIR /unique_parachain RUN cargo build --features=${NETWORK}-runtime --$PROFILE # ===== RUN ====== -FROM ubuntu:20.04 +FROM ubuntu:22.04 ARG NETWORK ARG POLKADOT_LAUNCH_BRANCH diff --git a/.docker/Dockerfile-parachain-upgrade-data b/.docker/Dockerfile-parachain-upgrade-data index 9a4e18e8bb..4718f11d43 100644 --- a/.docker/Dockerfile-parachain-upgrade-data +++ b/.docker/Dockerfile-parachain-upgrade-data @@ -47,7 +47,7 @@ WORKDIR /unique_parachain RUN cargo build --features=${NETWORK}-runtime --$PROFILE # ===== RUN ====== -FROM ubuntu:20.04 +FROM ubuntu:22.04 ARG NETWORK ARG REPLICA_FROM diff --git a/.docker/Dockerfile-polkadot.j2 b/.docker/Dockerfile-polkadot.j2 index 93306dd4d3..6b62c36b1a 100644 --- a/.docker/Dockerfile-polkadot.j2 +++ b/.docker/Dockerfile-polkadot.j2 @@ -1,5 +1,5 @@ # ===== Rust builder ===== -FROM ubuntu:20.04 as rust-builder +FROM ubuntu:22.04 as rust-builder LABEL maintainer="Unique.Network" ENV CARGO_HOME="/cargo-home" @@ -35,6 +35,6 @@ RUN git clone -b {{ POLKADOT_BUILD_BRANCH }} --depth 1 https://github.com/parity # ===== BIN ====== -FROM ubuntu:20.04 as builder-polkadot +FROM ubuntu:22.04 as builder-polkadot COPY --from=builder-polkadot-bin /unique_parachain/polkadot/target/release/polkadot /unique_parachain/polkadot/target/release/polkadot diff --git a/.docker/Dockerfile-testnet.j2 b/.docker/Dockerfile-testnet.j2 index f709630904..f5ec1ad738 100644 --- a/.docker/Dockerfile-testnet.j2 +++ b/.docker/Dockerfile-testnet.j2 @@ -30,7 +30,7 @@ RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git # ===== RUN ====== -FROM ubuntu:20.04 +FROM ubuntu:22.04 RUN apt-get -y update && \ apt-get -y install curl git && \ diff --git a/.docker/Dockerfile-xcm.j2 b/.docker/Dockerfile-xcm.j2 index eb95b4109e..cc0194a04e 100644 --- a/.docker/Dockerfile-xcm.j2 +++ b/.docker/Dockerfile-xcm.j2 @@ -30,7 +30,7 @@ RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git # ===== RUN ====== -FROM ubuntu:20.04 +FROM ubuntu:22.04 RUN apt-get -y update && \ apt-get -y install curl git && \ diff --git a/.docker/additional/Dockerfile-polkadot b/.docker/additional/Dockerfile-polkadot index 2fac4d6605..5ec9efb5c5 100644 --- a/.docker/additional/Dockerfile-polkadot +++ b/.docker/additional/Dockerfile-polkadot @@ -1,5 +1,5 @@ # ===== Rust builder ===== -FROM ubuntu:20.04 as rust-builder +FROM ubuntu:22.04 as rust-builder LABEL maintainer="Unique.Network" ARG RUST_TOOLCHAIN=nightly-2022-10-09 @@ -39,7 +39,7 @@ RUN git clone -b $POLKADOT_BUILD_BRANCH --depth 1 https://github.com/paritytech/ # ===== BIN ====== -FROM ubuntu:20.04 as builder-polkadot +FROM ubuntu:22.04 as builder-polkadot COPY --from=builder-polkadot-bin /unique_parachain/polkadot/target/release/polkadot /unique_parachain/polkadot/target/release/polkadot COPY --from=builder-polkadot-bin /unique_parachain/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm /unique_parachain/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm diff --git a/.docker/additional/xcm-rococo/Dockerfile-xcm-opal-rococo.temp b/.docker/additional/xcm-rococo/Dockerfile-xcm-opal-rococo.temp index fdf04b984b..e4711b0ca5 100644 --- a/.docker/additional/xcm-rococo/Dockerfile-xcm-opal-rococo.temp +++ b/.docker/additional/xcm-rococo/Dockerfile-xcm-opal-rococo.temp @@ -2,7 +2,7 @@ FROM uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} as polkadot FROM uniquenetwork/builder-cumulus:{{ STATEMINE_BUILD_BRANCH }} as cumulus # ===== Rust builder ===== -FROM ubuntu:20.04 as rust-builder +FROM ubuntu:22.04 as rust-builder LABEL maintainer="Unique.Network" ENV CARGO_HOME="/cargo-home" @@ -41,7 +41,7 @@ RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git cargo build --features=opal-runtime --$PROFILE # ===== RUN ====== -FROM ubuntu:20.04 +FROM ubuntu:22.04 RUN apt-get -y update && \ apt-get -y install curl git && \ diff --git a/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp b/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp index e8090af7a7..17bacd6771 100644 --- a/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp +++ b/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp @@ -4,7 +4,7 @@ FROM uniquenetwork/builder-cumulus:{{ STATEMINE_BUILD_BRANCH }} as cumulus FROM uniquenetwork/builder-acala:{{ KARURA_BUILD_BRANCH }} as acala # ===== Rust builder ===== -FROM ubuntu:20.04 as rust-builder +FROM ubuntu:22.04 as rust-builder LABEL maintainer="Unique.Network" ENV CARGO_HOME="/cargo-home" @@ -43,7 +43,7 @@ RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git cargo build --features=quartz-runtime --$PROFILE # ===== RUN ====== -FROM ubuntu:20.04 +FROM ubuntu:22.04 RUN apt-get -y update && \ apt-get -y install curl git && \ diff --git a/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp b/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp index 50849d8acb..b5db5a5a5b 100644 --- a/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp +++ b/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp @@ -4,7 +4,7 @@ FROM uniquenetwork/builder-cumulus:{{ STATEMINT_BUILD_BRANCH }} as cumulus FROM uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} as acala # ===== Rust builder ===== -FROM ubuntu:20.04 as rust-builder +FROM ubuntu:22.04 as rust-builder LABEL maintainer="Unique.Network" ENV CARGO_HOME="/cargo-home" @@ -43,7 +43,7 @@ RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git cargo build --features=unique-runtime --$PROFILE # ===== RUN ====== -FROM ubuntu:20.04 +FROM ubuntu:22.04 RUN apt-get -y update && \ apt-get -y install curl git && \ diff --git a/tests/Dockerfile-tests b/tests/Dockerfile-tests index 1c6b009470..9d16da5766 100644 --- a/tests/Dockerfile-tests +++ b/tests/Dockerfile-tests @@ -1,7 +1,7 @@ # ===== Integration Tests ====== -FROM ubuntu:20.04 +FROM ubuntu:22.04 LABEL maintainer="UniqueNetwork.io" RUN apt -y update; apt -y upgrade; apt -y install curl From e077b0602340f5ce53bd76ff5e5f56e10192f1a8 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 29 Mar 2023 13:48:20 +0200 Subject: [PATCH 045/103] test: switch test to ES modules --- tests/.eslintrc.json | 2 +- tests/package.json | 158 ++++++++++++++++++++++--------------------- tests/tsconfig.json | 7 +- 3 files changed, 87 insertions(+), 80 deletions(-) diff --git a/tests/.eslintrc.json b/tests/.eslintrc.json index 319023d056..120381d22a 100644 --- a/tests/.eslintrc.json +++ b/tests/.eslintrc.json @@ -68,7 +68,7 @@ "@typescript-eslint/no-unused-vars": [ "warn", { - "varsIgnorePattern": "_.+", + "varsIgnorePattern": "(?:_.+|__dirname|__filename)", "argsIgnorePattern": "_.+" } ], diff --git a/tests/package.json b/tests/package.json index 99aec12aac..0c67cede23 100644 --- a/tests/package.json +++ b/tests/package.json @@ -29,91 +29,94 @@ }, "scripts": { "lint": "eslint --ext .ts,.js src/", - "fix": "eslint --ext .ts,.js src/ --fix", - "setup": "ts-node ./src/util/globalSetup.ts", + "fix": "yarn lint --fix", + "setup": "ts-node --esm ./src/util/globalSetup.ts", "setIdentities": "ts-node ./src/util/identitySetter.ts", "checkRelayIdentities": "ts-node ./src/util/relayIdentitiesChecker.ts", - "test": "yarn setup && mocha --timeout 9999999 -r ts-node/register './src/**/*.*test.ts'", + "_test": "yarn setup && mocha --timeout 9999999 --loader=ts-node/esm.mjs", + "_testParallel": "yarn setup && mocha --timeout 9999999 --parallel --loader=ts-node/esm.mjs", + "test": "yarn _test './src/**/*.*test.ts'", "testParallelFull": "yarn testParallel && yarn testSequential", - "testParallel": "yarn setup && mocha --parallel --timeout 9999999 -r ts-node/register './src/**/*.test.ts'", - "testSequential": "yarn setup && mocha --timeout 9999999 -r ts-node/register './src/**/*.seqtest.ts'", - "testStructure": "yarn setup && mocha --timeout 9999999 -r ts-node/register ./**/nesting/*.*test.ts", - "testEth": "yarn setup && mocha --timeout 9999999 -r ts-node/register './**/eth/**/*.*test.ts'", - "testEthNesting": "yarn setup && mocha --timeout 9999999 -r ts-node/register './**/eth/nesting/**/*.*test.ts'", - "testEthFractionalizer": "yarn setup && mocha --timeout 9999999 -r ts-node/register './**/eth/fractionalizer/**/*.*test.ts'", - "testEthMarketplace": "yarn setup && mocha --timeout 9999999 -r ts-node/register './**/eth/marketplace/**/*.*test.ts'", - "testEvent": "yarn setup && mocha --timeout 9999999 -r ts-node/register ./src/check-event/*.*test.ts", - "testEthPayable": "mocha --timeout 9999999 -r ts-node/register './**/eth/payable.test.ts'", - "testEvmCoder": "mocha --timeout 9999999 -r ts-node/register './**/eth/evmCoder.test.ts'", - "testNesting": "mocha --timeout 9999999 -r ts-node/register ./**/nest.test.ts", - "testUnnesting": "mocha --timeout 9999999 -r ts-node/register ./**/unnest.test.ts", - "testProperties": "mocha --timeout 9999999 -r ts-node/register ./**/collectionProperties.*test.ts ./**/tokenProperties.*test.ts ./**/getPropertiesRpc.test.ts", - "testCollectionProperties": "mocha --timeout 9999999 -r ts-node/register ./**/collectionProperties.*test.ts", - "testTokenProperties": "mocha --timeout 9999999 -r ts-node/register ./**/tokenProperties.*test.ts", - "testMigration": "mocha --timeout 9999999 -r ts-node/register ./**/nesting/migration-check.test.ts", - "testAddCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/addCollectionAdmin.test.ts", - "testSetCollectionLimits": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionLimits.test.ts", - "testChangeCollectionOwner": "mocha --timeout 9999999 -r ts-node/register ./**/change-collection-owner.test.ts", - "testSetCollectionSponsor": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionSponsor.test.ts", - "testConfirmSponsorship": "mocha --timeout 9999999 --parallel -r ts-node/register ./**/confirmSponsorship.test.ts", - "testRemoveCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/removeCollectionAdmin.test.ts", - "testRemoveCollectionSponsor": "mocha --timeout 9999999 -r ts-node/register ./**/removeCollectionSponsor.test.ts", - "testAllowLists": "mocha --timeout 9999999 -r ts-node/register ./**/allowLists.test.ts", - "testConnection": "mocha --timeout 9999999 -r ts-node/register ./**/connection.test.ts", - "testContracts": "mocha --timeout 9999999 -r ts-node/register ./**/contracts.test.ts", - "testCreateItem": "mocha --timeout 9999999 -r ts-node/register ./**/createItem.test.ts", - "testCreateMultipleItems": "mocha --timeout 9999999 -r ts-node/register ./**/createMultipleItems.test.ts", - "testCreateMultipleItemsEx": "mocha --timeout 9999999 -r ts-node/register ./**/createMultipleItemsEx.test.ts", - "testApprove": "mocha --timeout 9999999 -r ts-node/register ./**/approve.test.ts", - "testTransferFrom": "mocha --timeout 9999999 -r ts-node/register ./**/transferFrom.test.ts", - "testCreateCollection": "mocha --timeout 9999999 -r ts-node/register ./**/createCollection.test.ts", - "testDestroyCollection": "mocha --timeout 9999999 -r ts-node/register ./**/destroyCollection.test.ts", - "testToggleContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/toggleContractAllowList.test.ts", - "testAddToContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/addToContractAllowList.test.ts", - "testTransfer": "mocha --timeout 9999999 -r ts-node/register ./**/transfer.test.ts", - "testBurnItem": "mocha --timeout 9999999 -r ts-node/register ./**/burnItem.test.ts", - "testAdminTransferAndBurn": "mocha --timeout 9999999 -r ts-node/register ./**/adminTransferAndBurn.test.ts", - "testSetPermissions": "mocha --timeout 9999999 -r ts-node/register ./**/setPermissions.test.ts", - "testCreditFeesToTreasury": "mocha --timeout 9999999 -r ts-node/register ./**/creditFeesToTreasury.seqtest.ts", - "testContractSponsoring": "mocha --timeout 9999999 -r ts-node/register ./**/eth/contractSponsoring.test.ts", - "testEnableContractSponsoring": "mocha --timeout 9999999 -r ts-node/register ./**/enableContractSponsoring.test.ts", - "testRemoveFromContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/removeFromContractAllowList.test.ts", - "testSetContractSponsoringRateLimit": "mocha --timeout 9999999 -r ts-node/register ./**/setContractSponsoringRateLimit.test.ts", - "testSetOffchainSchema": "mocha --timeout 9999999 -r ts-node/register ./**/setOffchainSchema.test.ts", - "testNextSponsoring": "mocha --timeout 9999999 -r ts-node/register ./**/nextSponsoring.test.ts", - "testOverflow": "mocha --timeout 9999999 -r ts-node/register ./**/overflow.test.ts", - "testMaintenance": "mocha --timeout 9999999 -r ts-node/register ./**/maintenance.seqtest.ts", - "testInflation": "mocha --timeout 9999999 -r ts-node/register ./**/inflation.seqtest.ts", - "testScheduler": "mocha --timeout 9999999 -r ts-node/register ./**/scheduler.seqtest.ts", - "testSchedulingEVM": "mocha --timeout 9999999 -r ts-node/register ./**/eth/scheduling.test.ts", - "testPalletPresence": "mocha --timeout 9999999 -r ts-node/register ./**/pallet-presence.test.ts", + "testParallel": "yarn _testParallel './src/**/*.test.ts'", + "testSequential": "yarn _test './src/**/*.seqtest.ts'", + "testStructure": "yarn setup && yarn _test ./**/nesting/*.*test.ts", + "testEth": "yarn setup && yarn _test './**/eth/**/*.*test.ts'", + "testEthNesting": "yarn setup && yarn _test './**/eth/nesting/**/*.*test.ts'", + "testEthFractionalizer": "yarn setup && yarn _test './**/eth/fractionalizer/**/*.*test.ts'", + "testEthMarketplace": "yarn setup && yarn _test './**/eth/marketplace/**/*.*test.ts'", + "testEvent": "yarn setup && yarn _test ./src/check-event/*.*test.ts", + "testEthPayable": "yarn _test './**/eth/payable.test.ts'", + "testEvmCoder": "yarn _test './**/eth/evmCoder.test.ts'", + "testNesting": "yarn _test ./**/nest.test.ts", + "testUnnesting": "yarn _test ./**/unnest.test.ts", + "testProperties": "yarn _test ./**/collectionProperties.*test.ts ./**/tokenProperties.*test.ts ./**/getPropertiesRpc.test.ts", + "testCollectionProperties": "yarn _test ./**/collectionProperties.*test.ts", + "testTokenProperties": "yarn _test ./**/tokenProperties.*test.ts", + "testMigration": "yarn _test ./**/nesting/migration-check.test.ts", + "testAddCollectionAdmin": "yarn _test ./**/addCollectionAdmin.test.ts", + "testSetCollectionLimits": "yarn _test ./**/setCollectionLimits.test.ts", + "testChangeCollectionOwner": "yarn _test ./**/change-collection-owner.test.ts", + "testSetCollectionSponsor": "yarn _test ./**/setCollectionSponsor.test.ts", + "testConfirmSponsorship": "yarn _test ./**/confirmSponsorship.test.ts", + "testRemoveCollectionAdmin": "yarn _test ./**/removeCollectionAdmin.test.ts", + "testRemoveCollectionSponsor": "yarn _test ./**/removeCollectionSponsor.test.ts", + "testAllowLists": "yarn _test ./**/allowLists.test.ts", + "testConnection": "yarn _test ./**/connection.test.ts", + "testContracts": "yarn _test ./**/contracts.test.ts", + "testCreateItem": "yarn _test ./**/createItem.test.ts", + "testCreateMultipleItems": "yarn _test ./**/createMultipleItems.test.ts", + "testCreateMultipleItemsEx": "yarn _test ./**/createMultipleItemsEx.test.ts", + "testApprove": "yarn _test ./**/approve.test.ts", + "testTransferFrom": "yarn _test ./**/transferFrom.test.ts", + "testCreateCollection": "yarn _test ./**/createCollection.test.ts", + "testDestroyCollection": "yarn _test ./**/destroyCollection.test.ts", + "testToggleContractAllowList": "yarn _test ./**/toggleContractAllowList.test.ts", + "testAddToContractAllowList": "yarn _test ./**/addToContractAllowList.test.ts", + "testTransfer": "yarn _test ./**/transfer.test.ts", + "testBurnItem": "yarn _test ./**/burnItem.test.ts", + "testAdminTransferAndBurn": "yarn _test ./**/adminTransferAndBurn.test.ts", + "testSetPermissions": "yarn _test ./**/setPermissions.test.ts", + "testCreditFeesToTreasury": "yarn _test ./**/creditFeesToTreasury.seqtest.ts", + "testContractSponsoring": "yarn _test ./**/eth/contractSponsoring.test.ts", + "testEnableContractSponsoring": "yarn _test ./**/enableContractSponsoring.test.ts", + "testRemoveFromContractAllowList": "yarn _test ./**/removeFromContractAllowList.test.ts", + "testSetContractSponsoringRateLimit": "yarn _test ./**/setContractSponsoringRateLimit.test.ts", + "testSetOffchainSchema": "yarn _test ./**/setOffchainSchema.test.ts", + "testNextSponsoring": "yarn _test ./**/nextSponsoring.test.ts", + "testOverflow": "yarn _test ./**/overflow.test.ts", + "testMaintenance": "yarn _test ./**/maintenance.seqtest.ts", + "testInflation": "yarn _test ./**/inflation.seqtest.ts", + "testScheduler": "yarn _test ./**/scheduler.seqtest.ts", + "testSchedulingEVM": "yarn _test ./**/eth/scheduling.test.ts", + "testPalletPresence": "yarn _test ./**/pallet-presence.test.ts", + "testEnableDisableTransfers": "yarn _test ./**/enableDisableTransfer.test.ts", + "testLimits": "yarn _test ./**/limits.test.ts", + "testEthCreateNFTCollection": "yarn _test ./**/eth/createNFTCollection.test.ts", + "testEthCreateRFTCollection": "yarn _test ./**/eth/createRFTCollection.test.ts", + "testEthNFT": "yarn _test ./**/eth/nonFungible.test.ts", + "testRFT": "yarn _test ./**/refungible.test.ts", + "testEthRFT": "yarn _test ./**/eth/reFungible.test.ts ./**/eth/reFungibleToken.test.ts", + "testFT": "yarn _test ./**/fungible.test.ts", + "testEthFT": "yarn _test ./**/eth/fungible.test.ts", + "testRPC": "yarn _test ./**/rpc.test.ts", + "testPromotion": "yarn _test ./**/appPromotion/*test.ts", + "testApiConsts": "yarn _test ./**/apiConsts.test.ts", + "testCollators": "RUN_COLLATOR_TESTS=1 mocha --timeout 49999999 -r ts-node/register ./**/collator-selection/**.*test.ts", "testCollatorSelection": "RUN_COLLATOR_TESTS=1 mocha --timeout 49999999 -r ts-node/register ./**/collatorSelection.*test.ts", "testIdentity": "RUN_COLLATOR_TESTS=1 mocha --timeout 49999999 -r ts-node/register ./**/identity.*test.ts", - "testEnableDisableTransfers": "mocha --timeout 9999999 -r ts-node/register ./**/enableDisableTransfer.test.ts", - "testLimits": "mocha --timeout 9999999 -r ts-node/register ./**/limits.test.ts", - "testEthCreateNFTCollection": "mocha --timeout 9999999 -r ts-node/register ./**/eth/createNFTCollection.test.ts", - "testEthCreateRFTCollection": "mocha --timeout 9999999 -r ts-node/register ./**/eth/createRFTCollection.test.ts", - "testEthNFT": "mocha --timeout 9999999 -r ts-node/register ./**/eth/nonFungible.test.ts", - "testRFT": "mocha --timeout 9999999 -r ts-node/register ./**/refungible.test.ts", - "testEthRFT": "mocha --timeout 9999999 -r ts-node/register ./**/eth/reFungible.test.ts ./**/eth/reFungibleToken.test.ts", - "testFT": "mocha --timeout 9999999 -r ts-node/register ./**/fungible.test.ts", - "testEthFT": "mocha --timeout 9999999 -r ts-node/register ./**/eth/fungible.test.ts", - "testRPC": "mocha --timeout 9999999 -r ts-node/register ./**/rpc.test.ts", - "testPromotion": "yarn setup && mocha --timeout 9999999 -r ts-node/register ./**/appPromotion/*test.ts", - "testXcmUnique": "RUN_XCM_TESTS=1 mocha --timeout 9999999 -r ts-node/register ./**/xcm/xcmUnique.test.ts", - "testXcmQuartz": "RUN_XCM_TESTS=1 mocha --timeout 9999999 -r ts-node/register ./**/xcm/xcmQuartz.test.ts", - "testXcmOpal": "RUN_XCM_TESTS=1 mocha --timeout 9999999 -r ts-node/register ./**/xcm/xcmOpal.test.ts", - "testXcmTransferAcala": "mocha --timeout 9999999 -r ts-node/register ./**/xcm/xcmTransferAcala.test.ts acalaId=2000 uniqueId=5000", - "testXcmTransferStatemine": "mocha --timeout 9999999 -r ts-node/register ./**/xcm/xcmTransferStatemine.test.ts statemineId=1000 uniqueId=5000", - "testXcmTransferMoonbeam": "mocha --timeout 9999999 -r ts-node/register ./**/xcm/xcmTransferMoonbeam.test.ts", + "testXcmUnique": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmUnique.test.ts", + "testXcmQuartz": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmQuartz.test.ts", + "testXcmOpal": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmOpal.test.ts", + "testXcmTransferAcala": "yarn _test ./**/xcm/xcmTransferAcala.test.ts acalaId=2000 uniqueId=5000", + "testXcmTransferStatemine": "yarn _test ./**/xcm/xcmTransferStatemine.test.ts statemineId=1000 uniqueId=5000", + "testXcmTransferMoonbeam": "yarn _test ./**/xcm/xcmTransferMoonbeam.test.ts", "benchMintingFee": "ts-node src/benchmarks/mintFee/benchmark.ts", - "testApiConsts": "mocha --timeout 9999999 -r ts-node/register ./**/apiConsts.test.ts", - "load": "mocha --timeout 9999999 -r ts-node/register './**/*.load.ts'", + "load": "yarn _test './**/*.load.ts'", "loadTransfer": "ts-node src/transfer.nload.ts", "polkadot-types-fetch-metadata": "curl -H 'Content-Type: application/json' -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_getMetadata\", \"params\":[]}' http://localhost:9933 > src/interfaces/metadata.json", - "polkadot-types-from-defs": "ts-node ./node_modules/.bin/polkadot-types-from-defs --endpoint src/interfaces/metadata.json --input src/interfaces/ --package .", - "polkadot-types-from-chain": "ts-node ./node_modules/.bin/polkadot-types-from-chain --endpoint src/interfaces/metadata.json --output src/interfaces/ --package .", + "polkadot-types-from-defs": "ts-node --esm ./node_modules/.bin/polkadot-types-from-defs --endpoint src/interfaces/metadata.json --input src/interfaces/ --package .", + "polkadot-types-from-chain": "ts-node --esm ./node_modules/.bin/polkadot-types-from-chain --endpoint src/interfaces/metadata.json --output src/interfaces/ --package .", "polkadot-types": "echo \"export default {}\" > src/interfaces/lookup.ts && yarn polkadot-types-fetch-metadata && yarn polkadot-types-from-defs && yarn polkadot-types-from-defs && yarn polkadot-types-from-chain" }, "author": "", @@ -132,5 +135,6 @@ }, "resolutions": { "decode-uri-component": "^0.2.1" - } + }, + "type": "module" } diff --git a/tests/tsconfig.json b/tests/tsconfig.json index 72b7de8ca0..29c26df928 100644 --- a/tests/tsconfig.json +++ b/tests/tsconfig.json @@ -4,7 +4,7 @@ "moduleResolution": "node", "esModuleInterop": true, "resolveJsonModule": true, - "module": "commonjs", + "module": "ESNext", "sourceMap": true, "outDir": "dist", "strict": true, @@ -14,7 +14,7 @@ ], "@unique-nft/types/*": [ "./src/interfaces/*" - ], + ] } }, "include": [ @@ -27,4 +27,7 @@ "lib": [ "es2017" ], + "ts-node": { + "experimentalSpecifierResolution": "node" + } } From 0877b7a94cc4db2309ff2bba3a54c6a74b8bcbd6 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 29 Mar 2023 13:49:57 +0200 Subject: [PATCH 046/103] test: replace references to __dirname/__filename with import.meta --- tests/src/addCollectionAdmin.test.ts | 4 +- tests/src/adminTransferAndBurn.test.ts | 2 +- tests/src/allowLists.test.ts | 8 +- tests/src/approve.test.ts | 24 +- tests/src/benchmarks/mintFee/index.ts | 15 +- tests/src/benchmarks/opsFee/index.ts | 10 +- tests/src/burnItem.test.ts | 6 +- tests/src/calibrateApply.ts | 5 +- tests/src/change-collection-owner.test.ts | 6 +- tests/src/check-event/burnItemEvent.test.ts | 2 +- .../check-event/createCollectionEvent.test.ts | 2 +- tests/src/check-event/createItemEvent.test.ts | 2 +- .../createMultipleItemsEvent.test.ts | 2 +- .../destroyCollectionEvent.test.ts | 2 +- tests/src/check-event/transferEvent.test.ts | 2 +- .../src/check-event/transferFromEvent.test.ts | 2 +- tests/src/confirmSponsorship.test.ts | 4 +- tests/src/createCollection.test.ts | 4 +- tests/src/createItem.test.ts | 4 +- tests/src/createMultipleItems.test.ts | 4 +- tests/src/createMultipleItemsEx.test.ts | 4 +- tests/src/creditFeesToTreasury.seqtest.ts | 2 +- tests/src/destroyCollection.test.ts | 4 +- tests/src/enableDisableTransfer.test.ts | 4 +- tests/src/eth/allowlist.test.ts | 4 +- tests/src/eth/base.test.ts | 4 +- tests/src/eth/collectionAdmin.test.ts | 8 +- tests/src/eth/collectionHelperAddress.test.ts | 2 +- tests/src/eth/collectionLimits.test.ts | 4 +- tests/src/eth/collectionProperties.test.ts | 4 +- tests/src/eth/collectionSponsoring.test.ts | 6 +- tests/src/eth/contractSponsoring.test.ts | 4 +- tests/src/eth/createFTCollection.seqtest.ts | 2 +- tests/src/eth/createFTCollection.test.ts | 4 +- tests/src/eth/createNFTCollection.seqtest.ts | 2 +- tests/src/eth/createNFTCollection.test.ts | 4 +- tests/src/eth/createRFTCollection.test.ts | 4 +- tests/src/eth/crossTransfer.test.ts | 4 +- tests/src/eth/destroyCollection.test.ts | 2 +- tests/src/eth/ethFeesAreCorrect.test.ts | 2 +- tests/src/eth/events.test.ts | 4 +- tests/src/eth/evmCoder.test.ts | 2 +- .../eth/fractionalizer/fractionalizer.test.ts | 19 +- tests/src/eth/fungible.test.ts | 6 +- tests/src/eth/getCode.test.ts | 2 +- tests/src/eth/helpersSmoke.test.ts | 2 +- tests/src/eth/marketplace/marketplace.test.ts | 11 +- tests/src/eth/nesting/nest.test.ts | 2 +- tests/src/eth/nonFungible.test.ts | 12 +- tests/src/eth/payable.test.ts | 11 +- tests/src/eth/precompile.test.ts | 4 +- tests/src/eth/proxy/fungibleProxy.test.ts | 11 +- tests/src/eth/proxy/nonFungibleProxy.test.ts | 11 +- tests/src/eth/proxyContract.test.ts | 4 +- tests/src/eth/reFungible.test.ts | 8 +- tests/src/eth/reFungibleToken.test.ts | 10 +- tests/src/eth/scheduling.test.ts | 2 +- tests/src/eth/sponsoring.test.ts | 2 +- tests/src/eth/tokenProperties.test.ts | 4 +- tests/src/eth/tokens/callMethodsERC20.test.ts | 4 +- .../src/eth/tokens/callMethodsERC721.test.ts | 2 +- tests/src/eth/tokens/minting.test.ts | 4 +- tests/src/eth/util/index.ts | 44 +- tests/src/eth/util/playgrounds/unique.dev.ts | 22 +- tests/src/fungible.test.ts | 4 +- tests/src/generateEnv.ts | 5 +- tests/src/getPropertiesRpc.test.ts | 2 +- tests/src/interfaces/appPromotion/index.ts | 2 +- tests/src/interfaces/augment-api-consts.ts | 18 +- tests/src/interfaces/augment-api-errors.ts | 62 +- tests/src/interfaces/augment-api-events.ts | 113 +- tests/src/interfaces/augment-api-query.ts | 128 +- tests/src/interfaces/augment-api-rpc.ts | 20 +- tests/src/interfaces/augment-api-runtime.ts | 12 +- tests/src/interfaces/augment-api-tx.ts | 194 +- tests/src/interfaces/augment-api.ts | 14 +- tests/src/interfaces/augment-types.ts | 107 +- tests/src/interfaces/default/index.ts | 2 +- tests/src/interfaces/default/types.ts | 1324 +++++++------ tests/src/interfaces/index.ts | 2 +- tests/src/interfaces/lookup.ts | 1512 ++++++++------- tests/src/interfaces/povinfo/index.ts | 2 +- tests/src/interfaces/registry.ts | 78 +- tests/src/interfaces/types-lookup.ts | 1634 ++++++++++------- tests/src/interfaces/types.ts | 8 +- tests/src/interfaces/unique/index.ts | 2 +- tests/src/limits.test.ts | 12 +- tests/src/maintenance.seqtest.ts | 2 +- .../nesting/collectionProperties.seqtest.ts | 2 +- .../src/nesting/collectionProperties.test.ts | 4 +- tests/src/nesting/graphs.test.ts | 2 +- tests/src/nesting/propertyPermissions.test.ts | 6 +- tests/src/nesting/tokenProperties.seqtest.ts | 2 +- tests/src/nesting/tokenProperties.test.ts | 6 +- tests/src/nesting/unnest.test.ts | 4 +- tests/src/nextSponsoring.test.ts | 2 +- tests/src/refungible.test.ts | 2 +- tests/src/removeCollectionAdmin.test.ts | 4 +- tests/src/removeCollectionSponsor.test.ts | 4 +- tests/src/rpc.test.ts | 4 +- tests/src/scheduler.seqtest.ts | 4 +- tests/src/setCollectionLimits.test.ts | 4 +- tests/src/setCollectionSponsor.test.ts | 4 +- tests/src/setPermissions.test.ts | 6 +- .../sub/appPromotion/appPromotion.seqtest.ts | 2 +- .../src/sub/appPromotion/appPromotion.test.ts | 2 +- tests/src/sub/nesting/admin.test.ts | 2 +- tests/src/sub/nesting/common.test.ts | 2 +- tests/src/sub/nesting/e2e.test.ts | 2 +- .../src/sub/nesting/nesting.negative.test.ts | 2 +- tests/src/sub/nesting/refungible.test.ts | 4 +- .../sub/nesting/unnesting.negative.test.ts | 2 +- tests/src/sub/refungible/burn.test.ts | 4 +- tests/src/sub/refungible/nesting.test.ts | 4 +- tests/src/sub/refungible/repartition.test.ts | 2 +- tests/src/sub/refungible/transfer.test.ts | 4 +- tests/src/transfer.test.ts | 6 +- tests/src/transferFrom.test.ts | 4 +- tests/src/util/globalSetup.ts | 6 +- tests/src/util/index.ts | 40 +- tests/src/vesting.test.ts | 2 +- 121 files changed, 3287 insertions(+), 2509 deletions(-) diff --git a/tests/src/addCollectionAdmin.test.ts b/tests/src/addCollectionAdmin.test.ts index 1599c75107..94bd8af59f 100644 --- a/tests/src/addCollectionAdmin.test.ts +++ b/tests/src/addCollectionAdmin.test.ts @@ -22,7 +22,7 @@ describe('Integration Test addCollectionAdmin(collection_id, new_admin_id):', () before(async () => { await usingPlaygrounds(async (_, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -45,7 +45,7 @@ describe('Negative Integration Test addCollectionAdmin(collection_id, new_admin_ before(async () => { await usingPlaygrounds(async (_, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/adminTransferAndBurn.test.ts b/tests/src/adminTransferAndBurn.test.ts index 70c7373dff..5f966ab5be 100644 --- a/tests/src/adminTransferAndBurn.test.ts +++ b/tests/src/adminTransferAndBurn.test.ts @@ -24,7 +24,7 @@ describe('Integration Test: ownerCanTransfer allows admins to use only transferF before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); diff --git a/tests/src/allowLists.test.ts b/tests/src/allowLists.test.ts index 52a3603a6f..1c2658f121 100644 --- a/tests/src/allowLists.test.ts +++ b/tests/src/allowLists.test.ts @@ -25,7 +25,7 @@ describe('Integration Test ext. Allow list tests', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([30n, 10n, 10n], donor); }); }); @@ -87,7 +87,7 @@ describe('Integration Test ext. Remove from Allow List', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([30n, 10n, 10n], donor); }); }); @@ -163,7 +163,7 @@ describe('Integration Test ext. Transfer if included in Allow List', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([30n, 10n, 10n], donor); }); }); @@ -291,7 +291,7 @@ describe('Integration Test ext. Mint if included in Allow List', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); diff --git a/tests/src/approve.test.ts b/tests/src/approve.test.ts index f3754c511a..ce07cf6670 100644 --- a/tests/src/approve.test.ts +++ b/tests/src/approve.test.ts @@ -31,7 +31,7 @@ import {CrossAccountId} from './util/playgrounds/unique'; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -110,7 +110,7 @@ import {CrossAccountId} from './util/playgrounds/unique'; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -147,7 +147,7 @@ import {CrossAccountId} from './util/playgrounds/unique'; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -190,7 +190,7 @@ import {CrossAccountId} from './util/playgrounds/unique'; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -241,7 +241,7 @@ import {CrossAccountId} from './util/playgrounds/unique'; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor); }); }); @@ -271,7 +271,7 @@ import {CrossAccountId} from './util/playgrounds/unique'; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -326,7 +326,7 @@ import {CrossAccountId} from './util/playgrounds/unique'; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -362,7 +362,7 @@ import {CrossAccountId} from './util/playgrounds/unique'; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -383,7 +383,7 @@ import {CrossAccountId} from './util/playgrounds/unique'; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -498,7 +498,7 @@ describe('Normal user can approve other users to be wallet operator:', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); @@ -542,7 +542,7 @@ describe('Administrator and collection owner do not need approval in order to ex before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor); }); }); @@ -608,7 +608,7 @@ describe('Repeated approvals add up', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor); }); }); diff --git a/tests/src/benchmarks/mintFee/index.ts b/tests/src/benchmarks/mintFee/index.ts index 6a3cb34309..a9eddefe38 100644 --- a/tests/src/benchmarks/mintFee/index.ts +++ b/tests/src/benchmarks/mintFee/index.ts @@ -8,27 +8,30 @@ import {UniqueNFTCollection} from '../../util/playgrounds/unique'; import {Contract} from 'web3-eth-contract'; import {createObjectCsvWriter} from 'csv-writer'; import {convertToTokens, createCollectionForBenchmarks, PERMISSIONS, PROPERTIES} from '../utils/common'; +import {makeNames} from '../utils'; import {ContractImports} from '../../eth/util/playgrounds/types'; +const {dirname} = makeNames(import.meta.url); + export const CONTRACT_IMPORT: ContractImports[] = [ { - fsPath: `${__dirname}/../../eth/api/CollectionHelpers.sol`, + fsPath: `${dirname}/../../eth/api/CollectionHelpers.sol`, solPath: 'eth/api/CollectionHelpers.sol', }, { - fsPath: `${__dirname}/../../eth/api/ContractHelpers.sol`, + fsPath: `${dirname}/../../eth/api/ContractHelpers.sol`, solPath: 'eth/api/ContractHelpers.sol', }, { - fsPath: `${__dirname}/../../eth/api/UniqueRefungibleToken.sol`, + fsPath: `${dirname}/../../eth/api/UniqueRefungibleToken.sol`, solPath: 'eth/api/UniqueRefungibleToken.sol', }, { - fsPath: `${__dirname}/../../eth/api/UniqueRefungible.sol`, + fsPath: `${dirname}/../../eth/api/UniqueRefungible.sol`, solPath: 'eth/api/UniqueRefungible.sol', }, { - fsPath: `${__dirname}/../../eth/api/UniqueNFT.sol`, + fsPath: `${dirname}/../../eth/api/UniqueNFT.sol`, solPath: 'eth/api/UniqueNFT.sol', }, ]; @@ -65,7 +68,7 @@ const main = async () => { await usingEthPlaygrounds(async (helper, privateKey) => { const CONTRACT_SOURCE = ( - await readFile(`${__dirname}/proxyContract.sol`) + await readFile(`${dirname}/proxyContract.sol`) ).toString(); const donor = await privateKey('//Alice'); // Seed from account with balance on this network diff --git a/tests/src/benchmarks/opsFee/index.ts b/tests/src/benchmarks/opsFee/index.ts index a5a656969b..d6f39ef8fa 100644 --- a/tests/src/benchmarks/opsFee/index.ts +++ b/tests/src/benchmarks/opsFee/index.ts @@ -74,8 +74,8 @@ async function erc721CalculateFeeGas( const helperContract = await helper.ethNativeContract.collectionHelpers(ethSigner); let zeppelelinContract: Contract | null = null; - const ZEPPELIN_OBJECT = '0x' + (await readFile(`${__dirname}/../utils/openZeppelin/ERC721/bin/ZeppelinContract.bin`)).toString(); - const ZEPPELIN_ABI = JSON.parse((await readFile(`${__dirname}/../utils/openZeppelin/ERC721/bin/ZeppelinContract.abi`)).toString()); + const ZEPPELIN_OBJECT = '0x' + (await readFile(`${dirname}/../utils/openZeppelin/ERC721/bin/ZeppelinContract.bin`)).toString(); + const ZEPPELIN_ABI = JSON.parse((await readFile(`${dirname}/../utils/openZeppelin/ERC721/bin/ZeppelinContract.abi`)).toString()); const evmContract = await helper.ethNativeContract.collection( helper.ethAddress.fromCollectionId(collection.collectionId), @@ -534,8 +534,8 @@ async function erc20CalculateFeeGas( const helperContract = await helper.ethNativeContract.collectionHelpers(ethSigner); let zeppelelinContract: Contract | null = null; - const ZEPPELIN_OBJECT = '0x' + (await readFile(`${__dirname}/../utils/openZeppelin/ERC20/bin/ZeppelinContract.bin`)).toString(); - const ZEPPELIN_ABI = JSON.parse((await readFile(`${__dirname}/../utils/openZeppelin/ERC20/bin/ZeppelinContract.abi`)).toString()); + const ZEPPELIN_OBJECT = '0x' + (await readFile(`${dirname}/../utils/openZeppelin/ERC20/bin/ZeppelinContract.bin`)).toString(); + const ZEPPELIN_ABI = JSON.parse((await readFile(`${dirname}/../utils/openZeppelin/ERC20/bin/ZeppelinContract.abi`)).toString()); const evmContract = await helper.ethNativeContract.collection( helper.ethAddress.fromCollectionId(collection.collectionId), @@ -885,4 +885,4 @@ async function erc20CalculateFeeGas( ))); return res; -} \ No newline at end of file +} diff --git a/tests/src/burnItem.test.ts b/tests/src/burnItem.test.ts index 6618cfa299..be087a347a 100644 --- a/tests/src/burnItem.test.ts +++ b/tests/src/burnItem.test.ts @@ -24,7 +24,7 @@ describe('integration test: ext. burnItem():', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); @@ -53,7 +53,7 @@ describe('integration test: ext. burnItem() with admin permissions:', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); @@ -86,7 +86,7 @@ describe('Negative integration test: ext. burnItem():', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); diff --git a/tests/src/calibrateApply.ts b/tests/src/calibrateApply.ts index f12508ca8c..d230efced4 100644 --- a/tests/src/calibrateApply.ts +++ b/tests/src/calibrateApply.ts @@ -1,6 +1,9 @@ import {readFile, writeFile} from 'fs/promises'; import path from 'path'; import usingApi from './.outdated/substrate/substrate-api'; +import {makeNames} from './util'; + +const {dirname} = makeNames(import.meta.url); const formatNumber = (num: string): string => num.split('').reverse().join('').replace(/([0-9]{3})/g, '$1_').split('').reverse().join('').replace(/^_/, ''); @@ -11,7 +14,7 @@ const formatNumber = (num: string): string => num.split('').reverse().join('').r weightToFeeCoefficientOverride = (await api.query.configuration.weightToFeeCoefficientOverride() as any).toBigInt().toString(); minGasPriceOverride = (await api.query.configuration.minGasPriceOverride() as any).toBigInt().toString(); }); - const constantsFile = path.resolve(__dirname, '../../primitives/common/src/constants.rs'); + const constantsFile = path.resolve(dirname, '../../primitives/common/src/constants.rs'); let constants = (await readFile(constantsFile)).toString(); let weight2feeFound = false; diff --git a/tests/src/change-collection-owner.test.ts b/tests/src/change-collection-owner.test.ts index 41facf0c0b..d35168dfa9 100644 --- a/tests/src/change-collection-owner.test.ts +++ b/tests/src/change-collection-owner.test.ts @@ -23,7 +23,7 @@ describe('Integration Test changeCollectionOwner(collection_id, new_owner):', () before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); @@ -46,7 +46,7 @@ describe('Integration Test changeCollectionOwner(collection_id, new_owner) speci before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -108,7 +108,7 @@ describe('Negative Integration Test changeCollectionOwner(collection_id, new_own before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); diff --git a/tests/src/check-event/burnItemEvent.test.ts b/tests/src/check-event/burnItemEvent.test.ts index 84b5ffffdd..7da1c5978e 100644 --- a/tests/src/check-event/burnItemEvent.test.ts +++ b/tests/src/check-event/burnItemEvent.test.ts @@ -24,7 +24,7 @@ describe('Burn Item event ', () => { let alice: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); diff --git a/tests/src/check-event/createCollectionEvent.test.ts b/tests/src/check-event/createCollectionEvent.test.ts index 86bb7e8a69..7b73115a7b 100644 --- a/tests/src/check-event/createCollectionEvent.test.ts +++ b/tests/src/check-event/createCollectionEvent.test.ts @@ -23,7 +23,7 @@ describe('Create collection event ', () => { let alice: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); diff --git a/tests/src/check-event/createItemEvent.test.ts b/tests/src/check-event/createItemEvent.test.ts index e53440de10..70ebfab1a4 100644 --- a/tests/src/check-event/createItemEvent.test.ts +++ b/tests/src/check-event/createItemEvent.test.ts @@ -23,7 +23,7 @@ describe('Create Item event ', () => { let alice: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); diff --git a/tests/src/check-event/createMultipleItemsEvent.test.ts b/tests/src/check-event/createMultipleItemsEvent.test.ts index 9dfa39f716..8203bd77b0 100644 --- a/tests/src/check-event/createMultipleItemsEvent.test.ts +++ b/tests/src/check-event/createMultipleItemsEvent.test.ts @@ -23,7 +23,7 @@ describe('Create Multiple Items Event event ', () => { let alice: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); diff --git a/tests/src/check-event/destroyCollectionEvent.test.ts b/tests/src/check-event/destroyCollectionEvent.test.ts index 7b7abfc621..5cf3c198ec 100644 --- a/tests/src/check-event/destroyCollectionEvent.test.ts +++ b/tests/src/check-event/destroyCollectionEvent.test.ts @@ -23,7 +23,7 @@ describe('Destroy collection event ', () => { let alice: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); diff --git a/tests/src/check-event/transferEvent.test.ts b/tests/src/check-event/transferEvent.test.ts index 77f2c72942..59044503e1 100644 --- a/tests/src/check-event/transferEvent.test.ts +++ b/tests/src/check-event/transferEvent.test.ts @@ -25,7 +25,7 @@ describe('Transfer event ', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor); }); }); diff --git a/tests/src/check-event/transferFromEvent.test.ts b/tests/src/check-event/transferFromEvent.test.ts index 2e8c81593a..53a7eceea4 100644 --- a/tests/src/check-event/transferFromEvent.test.ts +++ b/tests/src/check-event/transferFromEvent.test.ts @@ -24,7 +24,7 @@ describe('Transfer event ', () => { let bob: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor); }); }); diff --git a/tests/src/confirmSponsorship.test.ts b/tests/src/confirmSponsorship.test.ts index 85d91c101e..2bfbff3d60 100644 --- a/tests/src/confirmSponsorship.test.ts +++ b/tests/src/confirmSponsorship.test.ts @@ -37,7 +37,7 @@ describe('integration test: ext. confirmSponsorship():', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie, zeroBalance] = await helper.arrange.createAccounts([100n, 100n, 100n, 0n], donor); }); }); @@ -192,7 +192,7 @@ describe('(!negative test!) integration test: ext. confirmSponsorship():', () => before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie, ownerZeroBalance, senderZeroBalance] = await helper.arrange.createAccounts([100n, 100n, 100n, 0n, 0n], donor); }); }); diff --git a/tests/src/createCollection.test.ts b/tests/src/createCollection.test.ts index e3ce6208fa..b3079280b2 100644 --- a/tests/src/createCollection.test.ts +++ b/tests/src/createCollection.test.ts @@ -49,7 +49,7 @@ describe('integration test: ext. createCollection():', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); @@ -110,7 +110,7 @@ describe('(!negative test!) integration test: ext. createCollection():', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); diff --git a/tests/src/createItem.test.ts b/tests/src/createItem.test.ts index 0df0acd6d2..f0660987f4 100644 --- a/tests/src/createItem.test.ts +++ b/tests/src/createItem.test.ts @@ -50,7 +50,7 @@ describe('integration test: ext. ():', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); @@ -179,7 +179,7 @@ describe('Negative integration test: ext. createItem():', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); diff --git a/tests/src/createMultipleItems.test.ts b/tests/src/createMultipleItems.test.ts index 6bbfc79ffb..93ac272a70 100644 --- a/tests/src/createMultipleItems.test.ts +++ b/tests/src/createMultipleItems.test.ts @@ -22,7 +22,7 @@ describe('Integration Test createMultipleItems(collection_id, owner, items_data) before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); @@ -168,7 +168,7 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); diff --git a/tests/src/createMultipleItemsEx.test.ts b/tests/src/createMultipleItemsEx.test.ts index 350c386ac1..34c611e29a 100644 --- a/tests/src/createMultipleItemsEx.test.ts +++ b/tests/src/createMultipleItemsEx.test.ts @@ -25,7 +25,7 @@ describe('Integration Test: createMultipleItemsEx', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -264,7 +264,7 @@ describe('Negative test: createMultipleItemsEx', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); diff --git a/tests/src/creditFeesToTreasury.seqtest.ts b/tests/src/creditFeesToTreasury.seqtest.ts index 95e120d261..5522bcf3cf 100644 --- a/tests/src/creditFeesToTreasury.seqtest.ts +++ b/tests/src/creditFeesToTreasury.seqtest.ts @@ -50,7 +50,7 @@ describe('integration test: Fees must be credited to Treasury:', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); diff --git a/tests/src/destroyCollection.test.ts b/tests/src/destroyCollection.test.ts index d51c9f142a..544761ac65 100644 --- a/tests/src/destroyCollection.test.ts +++ b/tests/src/destroyCollection.test.ts @@ -22,7 +22,7 @@ describe('integration test: ext. destroyCollection():', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); @@ -62,7 +62,7 @@ describe('(!negative test!) integration test: ext. destroyCollection():', () => before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); diff --git a/tests/src/enableDisableTransfer.test.ts b/tests/src/enableDisableTransfer.test.ts index 401c1d67d7..1868519c80 100644 --- a/tests/src/enableDisableTransfer.test.ts +++ b/tests/src/enableDisableTransfer.test.ts @@ -23,7 +23,7 @@ describe('Enable/Disable Transfers', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); @@ -62,7 +62,7 @@ describe('Negative Enable/Disable Transfers', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); diff --git a/tests/src/eth/allowlist.test.ts b/tests/src/eth/allowlist.test.ts index bff98fbdd2..ca8a5c130d 100644 --- a/tests/src/eth/allowlist.test.ts +++ b/tests/src/eth/allowlist.test.ts @@ -23,7 +23,7 @@ describe('EVM contract allowlist', () => { before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -71,7 +71,7 @@ describe('EVM collection allowlist', () => { before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/base.test.ts b/tests/src/eth/base.test.ts index 5a73550943..0a7c575f45 100644 --- a/tests/src/eth/base.test.ts +++ b/tests/src/eth/base.test.ts @@ -23,7 +23,7 @@ describe('Contract calls', () => { before(async function () { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -88,7 +88,7 @@ describe('ERC165 tests', () => { before(async () => { await usingEthPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); const [alice] = await helper.arrange.createAccounts([10n], donor); ({collectionId: simpleNftCollectionId} = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'})); minter = await helper.eth.createAccountWithBalance(donor); diff --git a/tests/src/eth/collectionAdmin.test.ts b/tests/src/eth/collectionAdmin.test.ts index 51c99db446..187d099b70 100644 --- a/tests/src/eth/collectionAdmin.test.ts +++ b/tests/src/eth/collectionAdmin.test.ts @@ -36,7 +36,7 @@ describe('Add collection admins', () => { before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -227,7 +227,7 @@ describe('Remove collection admins', () => { before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -374,7 +374,7 @@ describe('Change owner tests', () => { before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -416,7 +416,7 @@ describe('Change substrate owner tests', () => { before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/collectionHelperAddress.test.ts b/tests/src/eth/collectionHelperAddress.test.ts index d05ca2db7f..fe6ab80669 100644 --- a/tests/src/eth/collectionHelperAddress.test.ts +++ b/tests/src/eth/collectionHelperAddress.test.ts @@ -23,7 +23,7 @@ describe('[eth]CollectionHelperAddress test: ERC20/ERC721 ', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/collectionLimits.test.ts b/tests/src/eth/collectionLimits.test.ts index 9bd542c71f..d7f4c5fc2a 100644 --- a/tests/src/eth/collectionLimits.test.ts +++ b/tests/src/eth/collectionLimits.test.ts @@ -9,7 +9,7 @@ describe('Can set collection limits', () => { before(async () => { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -80,7 +80,7 @@ describe('Cannot set invalid collection limits', () => { before(async () => { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/collectionProperties.test.ts b/tests/src/eth/collectionProperties.test.ts index d9aa14470b..a158f60e47 100644 --- a/tests/src/eth/collectionProperties.test.ts +++ b/tests/src/eth/collectionProperties.test.ts @@ -25,7 +25,7 @@ describe('EVM collection properties', () => { before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await _helper.arrange.createAccounts([50n], donor); }); }); @@ -139,7 +139,7 @@ describe('Supports ERC721Metadata', () => { before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/collectionSponsoring.test.ts b/tests/src/eth/collectionSponsoring.test.ts index 80d77eb533..821d562598 100644 --- a/tests/src/eth/collectionSponsoring.test.ts +++ b/tests/src/eth/collectionSponsoring.test.ts @@ -25,7 +25,7 @@ describe('evm nft collection sponsoring', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([100n], donor); nominal = helper.balance.getOneTokenNominal(); }); @@ -327,7 +327,7 @@ describe('evm RFT collection sponsoring', () => { before(async function() { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([100n], donor); nominal = helper.balance.getOneTokenNominal(); }); @@ -739,7 +739,7 @@ describe('evm RFT token sponsoring', () => { before(async function() { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/contractSponsoring.test.ts b/tests/src/eth/contractSponsoring.test.ts index 69ac2df10c..98c2e8e215 100644 --- a/tests/src/eth/contractSponsoring.test.ts +++ b/tests/src/eth/contractSponsoring.test.ts @@ -26,7 +26,7 @@ describe('Sponsoring EVM contracts', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); nominal = helper.balance.getOneTokenNominal(); }); }); @@ -444,7 +444,7 @@ describe('Sponsoring Fee Limit', () => { before(async () => { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); diff --git a/tests/src/eth/createFTCollection.seqtest.ts b/tests/src/eth/createFTCollection.seqtest.ts index e4ba213873..14cacb7548 100644 --- a/tests/src/eth/createFTCollection.seqtest.ts +++ b/tests/src/eth/createFTCollection.seqtest.ts @@ -26,7 +26,7 @@ describe('Create FT collection from EVM', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.Fungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/createFTCollection.test.ts b/tests/src/eth/createFTCollection.test.ts index 1c2d1bc299..363d526611 100644 --- a/tests/src/eth/createFTCollection.test.ts +++ b/tests/src/eth/createFTCollection.test.ts @@ -28,7 +28,7 @@ describe('Create FT collection from EVM', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.Fungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -136,7 +136,7 @@ describe('(!negative tests!) Create FT collection from EVM', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.Fungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); nominal = helper.balance.getOneTokenNominal(); }); }); diff --git a/tests/src/eth/createNFTCollection.seqtest.ts b/tests/src/eth/createNFTCollection.seqtest.ts index 1cebe8d8ea..7919d369b6 100644 --- a/tests/src/eth/createNFTCollection.seqtest.ts +++ b/tests/src/eth/createNFTCollection.seqtest.ts @@ -23,7 +23,7 @@ describe('Create NFT collection from EVM', () => { before(async function () { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/createNFTCollection.test.ts b/tests/src/eth/createNFTCollection.test.ts index 3ca1d25603..f24bf04763 100644 --- a/tests/src/eth/createNFTCollection.test.ts +++ b/tests/src/eth/createNFTCollection.test.ts @@ -26,7 +26,7 @@ describe('Create NFT collection from EVM', () => { before(async function () { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -149,7 +149,7 @@ describe('(!negative tests!) Create NFT collection from EVM', () => { before(async function () { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); nominal = helper.balance.getOneTokenNominal(); }); }); diff --git a/tests/src/eth/createRFTCollection.test.ts b/tests/src/eth/createRFTCollection.test.ts index 81a244a07e..fcb1a931dc 100644 --- a/tests/src/eth/createRFTCollection.test.ts +++ b/tests/src/eth/createRFTCollection.test.ts @@ -27,7 +27,7 @@ describe('Create RFT collection from EVM', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -160,7 +160,7 @@ describe('(!negative tests!) Create RFT collection from EVM', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); nominal = helper.balance.getOneTokenNominal(); }); }); diff --git a/tests/src/eth/crossTransfer.test.ts b/tests/src/eth/crossTransfer.test.ts index 8486b524ba..99dace7d17 100644 --- a/tests/src/eth/crossTransfer.test.ts +++ b/tests/src/eth/crossTransfer.test.ts @@ -26,7 +26,7 @@ describe('Token transfer between substrate address and EVM address. Fungible', ( before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); @@ -69,7 +69,7 @@ describe('Token transfer between substrate address and EVM address. NFT', () => before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); diff --git a/tests/src/eth/destroyCollection.test.ts b/tests/src/eth/destroyCollection.test.ts index d762ddb3e7..86575f5ab4 100644 --- a/tests/src/eth/destroyCollection.test.ts +++ b/tests/src/eth/destroyCollection.test.ts @@ -28,7 +28,7 @@ describe('Destroy Collection from EVM', function() { before(async function() { await usingEthPlaygrounds(async (_, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/ethFeesAreCorrect.test.ts b/tests/src/eth/ethFeesAreCorrect.test.ts index 8daff36328..12497ff8ee 100644 --- a/tests/src/eth/ethFeesAreCorrect.test.ts +++ b/tests/src/eth/ethFeesAreCorrect.test.ts @@ -24,7 +24,7 @@ describe('Eth fees are correct', () => { before(async () => { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [minter, alice] = await helper.arrange.createAccounts([100n, 200n], donor); }); }); diff --git a/tests/src/eth/events.test.ts b/tests/src/eth/events.test.ts index 766d698e6f..e5d7823c06 100644 --- a/tests/src/eth/events.test.ts +++ b/tests/src/eth/events.test.ts @@ -25,7 +25,7 @@ let donor: IKeyringPair; before(async function () { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -499,7 +499,7 @@ describe('[RFT] Sync sub & eth events', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - const _donor = await privateKey({filename: __filename}); + const _donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/evmCoder.test.ts b/tests/src/eth/evmCoder.test.ts index 19ed44b80f..aa89ca900c 100644 --- a/tests/src/eth/evmCoder.test.ts +++ b/tests/src/eth/evmCoder.test.ts @@ -59,7 +59,7 @@ describe('Evm Coder tests', () => { before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/fractionalizer/fractionalizer.test.ts b/tests/src/eth/fractionalizer/fractionalizer.test.ts index a9fe5ef190..9706487489 100644 --- a/tests/src/eth/fractionalizer/fractionalizer.test.ts +++ b/tests/src/eth/fractionalizer/fractionalizer.test.ts @@ -24,19 +24,20 @@ import {Contract} from 'web3-eth-contract'; import {usingEthPlaygrounds, expect, itEth, EthUniqueHelper} from '../util'; import {CompiledContract} from '../util/playgrounds/types'; -import {requirePalletsOrSkip, Pallets} from '../../util'; +import {requirePalletsOrSkip, Pallets, makeNames} from '../../util'; +const {dirname} = makeNames(import.meta.url); let compiledFractionalizer: CompiledContract; const compileContract = async (helper: EthUniqueHelper): Promise => { if(!compiledFractionalizer) { - compiledFractionalizer = await helper.ethContract.compile('Fractionalizer', (await readFile(`${__dirname}/Fractionalizer.sol`)).toString(), [ - {solPath: 'api/CollectionHelpers.sol', fsPath: `${__dirname}/../api/CollectionHelpers.sol`}, - {solPath: 'api/ContractHelpers.sol', fsPath: `${__dirname}/../api/ContractHelpers.sol`}, - {solPath: 'api/UniqueRefungibleToken.sol', fsPath: `${__dirname}/../api/UniqueRefungibleToken.sol`}, - {solPath: 'api/UniqueRefungible.sol', fsPath: `${__dirname}/../api/UniqueRefungible.sol`}, - {solPath: 'api/UniqueNFT.sol', fsPath: `${__dirname}/../api/UniqueNFT.sol`}, + compiledFractionalizer = await helper.ethContract.compile('Fractionalizer', (await readFile(`${dirname}/Fractionalizer.sol`)).toString(), [ + {solPath: 'api/CollectionHelpers.sol', fsPath: `${dirname}/../api/CollectionHelpers.sol`}, + {solPath: 'api/ContractHelpers.sol', fsPath: `${dirname}/../api/ContractHelpers.sol`}, + {solPath: 'api/UniqueRefungibleToken.sol', fsPath: `${dirname}/../api/UniqueRefungibleToken.sol`}, + {solPath: 'api/UniqueRefungible.sol', fsPath: `${dirname}/../api/UniqueRefungible.sol`}, + {solPath: 'api/UniqueNFT.sol', fsPath: `${dirname}/../api/UniqueNFT.sol`}, ]); } return compiledFractionalizer; @@ -85,7 +86,7 @@ describe('Fractionalizer contract usage', () => { before(async function() { await usingEthPlaygrounds(async (helper: EthUniqueHelper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -226,7 +227,7 @@ describe('Negative Integration Tests for fractionalizer', () => { before(async function() { await usingEthPlaygrounds(async (helper: EthUniqueHelper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/fungible.test.ts b/tests/src/eth/fungible.test.ts index 64dc954c44..505f576dd0 100644 --- a/tests/src/eth/fungible.test.ts +++ b/tests/src/eth/fungible.test.ts @@ -24,7 +24,7 @@ describe('Fungible: Plain calls', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, owner] = await helper.arrange.createAccounts([30n, 20n], donor); }); }); @@ -435,7 +435,7 @@ describe('Fungible: Fees', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([20n], donor); }); }); @@ -489,7 +489,7 @@ describe('Fungible: Substrate calls', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, owner] = await helper.arrange.createAccounts([20n, 20n], donor); }); }); diff --git a/tests/src/eth/getCode.test.ts b/tests/src/eth/getCode.test.ts index 6aaf083542..5de91a732c 100644 --- a/tests/src/eth/getCode.test.ts +++ b/tests/src/eth/getCode.test.ts @@ -23,7 +23,7 @@ describe('RPC eth_getCode', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/helpersSmoke.test.ts b/tests/src/eth/helpersSmoke.test.ts index 2c00b13429..14992ad8d0 100644 --- a/tests/src/eth/helpersSmoke.test.ts +++ b/tests/src/eth/helpersSmoke.test.ts @@ -22,7 +22,7 @@ describe('Helpers sanity check', () => { before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/marketplace/marketplace.test.ts b/tests/src/eth/marketplace/marketplace.test.ts index c7fd30d522..f4456319d6 100644 --- a/tests/src/eth/marketplace/marketplace.test.ts +++ b/tests/src/eth/marketplace/marketplace.test.ts @@ -17,6 +17,9 @@ import {IKeyringPair} from '@polkadot/types/types'; import {readFile} from 'fs/promises'; import {itEth, usingEthPlaygrounds, expect, SponsoringMode} from '../util'; +import {makeNames} from '../../util'; + +const {dirname} = makeNames(import.meta.url); describe('Matcher contract usage', () => { const PRICE = 2000n; @@ -29,7 +32,7 @@ describe('Matcher contract usage', () => { before(async () => { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -47,7 +50,7 @@ describe('Matcher contract usage', () => { itEth('With UNQ', async ({helper}) => { const matcherOwner = await helper.eth.createAccountWithBalance(donor); - const matcher = await helper.ethContract.deployByCode(matcherOwner, 'MarketPlace', (await readFile(`${__dirname}/MarketPlace.sol`)).toString(), [{solPath: 'api/UniqueNFT.sol', fsPath: `${__dirname}/../api/UniqueNFT.sol`}], helper.eth.DEFAULT_GAS * 2); + const matcher = await helper.ethContract.deployByCode(matcherOwner, 'MarketPlace', (await readFile(`${dirname}/MarketPlace.sol`)).toString(), [{solPath: 'api/UniqueNFT.sol', fsPath: `${dirname}/../api/UniqueNFT.sol`}], helper.eth.DEFAULT_GAS * 2); const sponsor = await helper.eth.createAccountWithBalance(donor); const helpers = await helper.ethNativeContract.contractHelpers(matcherOwner); @@ -99,7 +102,7 @@ describe('Matcher contract usage', () => { itEth('With escrow', async ({helper}) => { const matcherOwner = await helper.eth.createAccountWithBalance(donor); - const matcher = await helper.ethContract.deployByCode(matcherOwner, 'MarketPlace', (await readFile(`${__dirname}/MarketPlace.sol`)).toString(), [{solPath: 'api/UniqueNFT.sol', fsPath: `${__dirname}/../api/UniqueNFT.sol`}], helper.eth.DEFAULT_GAS * 2); + const matcher = await helper.ethContract.deployByCode(matcherOwner, 'MarketPlace', (await readFile(`${dirname}/MarketPlace.sol`)).toString(), [{solPath: 'api/UniqueNFT.sol', fsPath: `${dirname}/../api/UniqueNFT.sol`}], helper.eth.DEFAULT_GAS * 2); const sponsor = await helper.eth.createAccountWithBalance(donor); const escrow = await helper.eth.createAccountWithBalance(donor); @@ -163,7 +166,7 @@ describe('Matcher contract usage', () => { itEth('Sell tokens from substrate user via EVM contract', async ({helper}) => { const matcherOwner = await helper.eth.createAccountWithBalance(donor); - const matcher = await helper.ethContract.deployByCode(matcherOwner, 'MarketPlace', (await readFile(`${__dirname}/MarketPlace.sol`)).toString(), [{solPath: 'api/UniqueNFT.sol', fsPath: `${__dirname}/../api/UniqueNFT.sol`}], helper.eth.DEFAULT_GAS * 2); + const matcher = await helper.ethContract.deployByCode(matcherOwner, 'MarketPlace', (await readFile(`${dirname}/MarketPlace.sol`)).toString(), [{solPath: 'api/UniqueNFT.sol', fsPath: `${dirname}/../api/UniqueNFT.sol`}], helper.eth.DEFAULT_GAS * 2); await helper.eth.transferBalanceFromSubstrate(donor, matcher.options.address); diff --git a/tests/src/eth/nesting/nest.test.ts b/tests/src/eth/nesting/nest.test.ts index 3daceab582..32148a727d 100644 --- a/tests/src/eth/nesting/nest.test.ts +++ b/tests/src/eth/nesting/nest.test.ts @@ -21,7 +21,7 @@ describe('EVM nesting tests group', () => { before(async function() { await usingEthPlaygrounds(async (_, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/nonFungible.test.ts b/tests/src/eth/nonFungible.test.ts index e887be0c38..df394fd43f 100644 --- a/tests/src/eth/nonFungible.test.ts +++ b/tests/src/eth/nonFungible.test.ts @@ -24,7 +24,7 @@ describe('Check ERC721 token URI for NFT', () => { before(async function() { await usingEthPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -83,7 +83,7 @@ describe('NFT: Plain calls', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [minter, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -660,7 +660,7 @@ describe('NFT: Fees', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); @@ -747,7 +747,7 @@ describe('NFT: Substrate calls', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([20n], donor); }); }); @@ -880,7 +880,7 @@ describe('Common metadata', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([20n], donor); }); }); @@ -943,7 +943,7 @@ describe('Negative tests', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [minter, alice] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); diff --git a/tests/src/eth/payable.test.ts b/tests/src/eth/payable.test.ts index 32a702d716..1eb850d70e 100644 --- a/tests/src/eth/payable.test.ts +++ b/tests/src/eth/payable.test.ts @@ -17,13 +17,16 @@ import {IKeyringPair} from '@polkadot/types/types'; import {itEth, expect, usingEthPlaygrounds, EthUniqueHelper} from './util'; +import {makeNames} from '../util'; + +const {dirname} = makeNames(import.meta.url); describe('EVM payable contracts', () => { let donor: IKeyringPair; before(async function() { await usingEthPlaygrounds(async (_, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -110,7 +113,7 @@ describe('EVM transaction fees', () => { before(async function() { await usingEthPlaygrounds(async (_, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -257,11 +260,11 @@ describe('EVM transaction fees', () => { [ { solPath: 'api/CollectionHelpers.sol', - fsPath: `${__dirname}/api/CollectionHelpers.sol`, + fsPath: `${dirname}/api/CollectionHelpers.sol`, }, { solPath: 'api/UniqueNFT.sol', - fsPath: `${__dirname}/api/UniqueNFT.sol`, + fsPath: `${dirname}/api/UniqueNFT.sol`, }, ], ); diff --git a/tests/src/eth/precompile.test.ts b/tests/src/eth/precompile.test.ts index 686a770f23..42410f4fb0 100644 --- a/tests/src/eth/precompile.test.ts +++ b/tests/src/eth/precompile.test.ts @@ -23,7 +23,7 @@ describe('Precompiles', () => { before(async function() { await usingEthPlaygrounds(async (_, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -109,4 +109,4 @@ describe('Precompiles', () => { expect(await sr25519Сontract.methods.verifyValid().call({from: owner})).to.be.true; expect(await sr25519Сontract.methods.verifyInvalid().call({from: owner})).to.be.false; }); -}); \ No newline at end of file +}); diff --git a/tests/src/eth/proxy/fungibleProxy.test.ts b/tests/src/eth/proxy/fungibleProxy.test.ts index 98f827c317..741ccfab81 100644 --- a/tests/src/eth/proxy/fungibleProxy.test.ts +++ b/tests/src/eth/proxy/fungibleProxy.test.ts @@ -18,16 +18,19 @@ import {expect} from 'chai'; import {readFile} from 'fs/promises'; import {IKeyringPair} from '@polkadot/types/types'; import {EthUniqueHelper, itEth, usingEthPlaygrounds} from '../util'; +import {makeNames} from '../../util'; + +const {dirname} = makeNames(import.meta.url); async function proxyWrap(helper: EthUniqueHelper, wrapped: any, donor: IKeyringPair) { // Proxy owner has no special privilegies, we don't need to reuse them const owner = await helper.eth.createAccountWithBalance(donor); const web3 = helper.getWeb3(); - const proxyContract = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/UniqueFungibleProxy.abi`)).toString()), undefined, { + const proxyContract = new web3.eth.Contract(JSON.parse((await readFile(`${dirname}/UniqueFungibleProxy.abi`)).toString()), undefined, { from: owner, gas: helper.eth.DEFAULT_GAS, }); - const proxy = await proxyContract.deploy({data: (await readFile(`${__dirname}/UniqueFungibleProxy.bin`)).toString(), arguments: [wrapped.options.address]}).send({from: owner}); + const proxy = await proxyContract.deploy({data: (await readFile(`${dirname}/UniqueFungibleProxy.bin`)).toString(), arguments: [wrapped.options.address]}).send({from: owner}); return proxy; } @@ -37,7 +40,7 @@ describe('Fungible (Via EVM proxy): Information getting', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); @@ -76,7 +79,7 @@ describe('Fungible (Via EVM proxy): Plain calls', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); diff --git a/tests/src/eth/proxy/nonFungibleProxy.test.ts b/tests/src/eth/proxy/nonFungibleProxy.test.ts index f1659ef113..eda6c11598 100644 --- a/tests/src/eth/proxy/nonFungibleProxy.test.ts +++ b/tests/src/eth/proxy/nonFungibleProxy.test.ts @@ -17,17 +17,20 @@ import {readFile} from 'fs/promises'; import {IKeyringPair} from '@polkadot/types/types'; import {EthUniqueHelper, itEth, usingEthPlaygrounds, expect} from '../util'; +import {makeNames} from '../../util'; + +const {dirname} = makeNames(import.meta.url); async function proxyWrap(helper: EthUniqueHelper, wrapped: any, donor: IKeyringPair) { // Proxy owner has no special privilegies, we don't need to reuse them const owner = await helper.eth.createAccountWithBalance(donor); const web3 = helper.getWeb3(); - const proxyContract = new web3.eth.Contract(JSON.parse((await readFile(`${__dirname}/UniqueNFTProxy.abi`)).toString()), undefined, { + const proxyContract = new web3.eth.Contract(JSON.parse((await readFile(`${dirname}/UniqueNFTProxy.abi`)).toString()), undefined, { from: owner, gas: helper.eth.DEFAULT_GAS, }); - const proxy = await proxyContract.deploy({data: (await readFile(`${__dirname}/UniqueNFTProxy.bin`)).toString(), arguments: [wrapped.options.address]}).send({from: owner}); + const proxy = await proxyContract.deploy({data: (await readFile(`${dirname}/UniqueNFTProxy.bin`)).toString(), arguments: [wrapped.options.address]}).send({from: owner}); return proxy; } @@ -37,7 +40,7 @@ describe('NFT (Via EVM proxy): Information getting', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); @@ -94,7 +97,7 @@ describe('NFT (Via EVM proxy): Plain calls', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); diff --git a/tests/src/eth/proxyContract.test.ts b/tests/src/eth/proxyContract.test.ts index 6d84bb29b2..034571a1e4 100644 --- a/tests/src/eth/proxyContract.test.ts +++ b/tests/src/eth/proxyContract.test.ts @@ -23,7 +23,7 @@ describe('EVM payable contracts', () => { before(async function() { await usingEthPlaygrounds(async (_, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -149,4 +149,4 @@ describe('EVM payable contracts', () => { } }`); } -}); \ No newline at end of file +}); diff --git a/tests/src/eth/reFungible.test.ts b/tests/src/eth/reFungible.test.ts index 283912ba88..47fca4af42 100644 --- a/tests/src/eth/reFungible.test.ts +++ b/tests/src/eth/reFungible.test.ts @@ -29,7 +29,7 @@ describe('Refungible: Plain calls', () => { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [minter, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -593,7 +593,7 @@ describe('RFT: Fees', () => { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -634,7 +634,7 @@ describe('Common metadata', () => { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([20n], donor); }); }); @@ -699,7 +699,7 @@ describe('Negative tests', () => { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [minter, alice] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); diff --git a/tests/src/eth/reFungibleToken.test.ts b/tests/src/eth/reFungibleToken.test.ts index b057879961..4d6161141e 100644 --- a/tests/src/eth/reFungibleToken.test.ts +++ b/tests/src/eth/reFungibleToken.test.ts @@ -27,7 +27,7 @@ describe('Check ERC721 token URI for ReFungible', () => { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -86,7 +86,7 @@ describe('Refungible: Plain calls', () => { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([50n], donor); }); }); @@ -476,7 +476,7 @@ describe('Refungible: Fees', () => { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([50n], donor); }); }); @@ -531,7 +531,7 @@ describe('Refungible: Substrate calls', () => { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([50n], donor); }); }); @@ -625,7 +625,7 @@ describe('ERC 1633 implementation', () => { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/scheduling.test.ts b/tests/src/eth/scheduling.test.ts index c12c4f372f..59012aa646 100644 --- a/tests/src/eth/scheduling.test.ts +++ b/tests/src/eth/scheduling.test.ts @@ -27,7 +27,7 @@ describe('Scheduing EVM smart contracts', () => { }); itSchedEth.ifWithPallets('Successfully schedules and periodically executes an EVM contract', [Pallets.Scheduler], async (scheduleKind, {helper, privateKey}) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); const [alice] = await helper.arrange.createAccounts([1000n], donor); const scheduledId = scheduleKind == 'named' ? helper.arrange.makeScheduledId() : undefined; diff --git a/tests/src/eth/sponsoring.test.ts b/tests/src/eth/sponsoring.test.ts index 5fa59092a1..267651be01 100644 --- a/tests/src/eth/sponsoring.test.ts +++ b/tests/src/eth/sponsoring.test.ts @@ -23,7 +23,7 @@ describe('EVM sponsoring', () => { before(async () => { await usingPlaygrounds(async (_helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/tokenProperties.test.ts b/tests/src/eth/tokenProperties.test.ts index ca542e5536..0d8009e15f 100644 --- a/tests/src/eth/tokenProperties.test.ts +++ b/tests/src/eth/tokenProperties.test.ts @@ -28,7 +28,7 @@ describe('EVM token properties', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); @@ -347,7 +347,7 @@ describe('EVM token properties negative', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); diff --git a/tests/src/eth/tokens/callMethodsERC20.test.ts b/tests/src/eth/tokens/callMethodsERC20.test.ts index 19f81077bb..096a3ddd7a 100644 --- a/tests/src/eth/tokens/callMethodsERC20.test.ts +++ b/tests/src/eth/tokens/callMethodsERC20.test.ts @@ -28,7 +28,7 @@ import {IKeyringPair} from '@polkadot/types/types'; before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, testCase.requiredPallets); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); @@ -88,4 +88,4 @@ import {IKeyringPair} from '@polkadot/types/types'; expect(decimals).to.equal(testCase.mode === 'rft' ? '0' : '18'); }); }); -}); \ No newline at end of file +}); diff --git a/tests/src/eth/tokens/callMethodsERC721.test.ts b/tests/src/eth/tokens/callMethodsERC721.test.ts index 00224c27c5..e9520e2e0e 100644 --- a/tests/src/eth/tokens/callMethodsERC721.test.ts +++ b/tests/src/eth/tokens/callMethodsERC721.test.ts @@ -24,7 +24,7 @@ describe('ERC-721 call methods', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/eth/tokens/minting.test.ts b/tests/src/eth/tokens/minting.test.ts index 78e189a67c..3e6759d3c5 100644 --- a/tests/src/eth/tokens/minting.test.ts +++ b/tests/src/eth/tokens/minting.test.ts @@ -25,7 +25,7 @@ describe('Minting tokens', () => { before(async function() { await usingEthPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([30n, 20n], donor); }); }); @@ -164,4 +164,4 @@ describe('Minting tokens', () => { // expect(tokenUri).to.be.equal(`https://offchain-service.local/token-info/${nextTokenId}`); }); }); -}); \ No newline at end of file +}); diff --git a/tests/src/eth/util/index.ts b/tests/src/eth/util/index.ts index 19c9186b0c..58a26ebc15 100644 --- a/tests/src/eth/util/index.ts +++ b/tests/src/eth/util/index.ts @@ -8,7 +8,7 @@ import config from '../../config'; import {EthUniqueHelper} from './playgrounds/unique.dev'; import {SilentLogger, SilentConsole} from '../../util/playgrounds/unique.dev'; -import {SchedKind} from '../../util'; +import {SchedKind, makeNames} from '../../util'; export {EthUniqueHelper} from './playgrounds/unique.dev'; @@ -27,7 +27,9 @@ export enum SponsoringMode { Generous = 2, } -export const usingEthPlaygrounds = async (code: (helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise) => Promise) => { +type PrivateKeyFn = (seed: string | {filename?: string, url?: string}) => Promise; + +export const usingEthPlaygrounds = async (code: (helper: EthUniqueHelper, privateKey: PrivateKeyFn) => Promise) => { const silentConsole = new SilentConsole(); silentConsole.enable(); @@ -37,19 +39,25 @@ export const usingEthPlaygrounds = async (code: (helper: EthUniqueHelper, privat await helper.connect(config.substrateUrl); await helper.connectWeb3(config.substrateUrl); const ss58Format = helper.chain.getChainProperties().ss58Format; - const privateKey = async (seed: string | {filename: string}) => { + const privateKey: PrivateKeyFn = async (seed) => { if (typeof seed === 'string') { return helper.util.fromSeed(seed, ss58Format); } - else { - const actualSeed = getTestSeed(seed.filename); - let account = helper.util.fromSeed(actualSeed, ss58Format); - if (await helper.balance.getSubstrate(account.address) < MINIMUM_DONOR_FUND) { - console.warn(`${path.basename(seed.filename)}: Not enough funds present on the filename account. Using the default one as the donor instead.`); - account = helper.util.fromSeed('//Alice', ss58Format); - } - return account; + if (seed.url) { + const {filename} = makeNames(seed.url); + seed.filename = filename; + } else if (seed.filename) { + // Pass + } else { + throw new Error('no url nor filename set'); + } + const actualSeed = getTestSeed(seed.filename); + let account = helper.util.fromSeed(actualSeed, ss58Format); + if (await helper.balance.getSubstrate(account.address) < MINIMUM_DONOR_FUND) { + console.warn(`${path.basename(seed.filename)}: Not enough funds present on the filename account. Using the default one as the donor instead.`); + account = helper.util.fromSeed('//Alice', ss58Format); } + return account; }; await code(helper, privateKey); } @@ -59,7 +67,7 @@ export const usingEthPlaygrounds = async (code: (helper: EthUniqueHelper, privat } }; -export function itEth(name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { +export function itEth(name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: PrivateKeyFn }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { (opts.only ? it.only : opts.skip ? it.skip : it)(name, async function() { await usingEthPlaygrounds(async (helper, privateKey) => { @@ -72,20 +80,20 @@ export function itEth(name: string, cb: (apis: { helper: EthUniqueHelper, privat }); } -export function itEthIfWithPallet(name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { +export function itEthIfWithPallet(name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: PrivateKeyFn }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { return itEth(name, cb, {requiredPallets: required, ...opts}); } -itEth.only = (name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any) => itEth(name, cb, {only: true}); +itEth.only = (name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: PrivateKeyFn }) => any) => itEth(name, cb, {only: true}); itEth.skip = (name: string, cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any) => itEth(name, cb, {skip: true}); -itEthIfWithPallet.only = (name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any) => itEthIfWithPallet(name, required, cb, {only: true}); -itEthIfWithPallet.skip = (name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any) => itEthIfWithPallet(name, required, cb, {skip: true}); +itEthIfWithPallet.only = (name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: PrivateKeyFn }) => any) => itEthIfWithPallet(name, required, cb, {only: true}); +itEthIfWithPallet.skip = (name: string, required: string[], cb: (apis: { helper: EthUniqueHelper, privateKey: PrivateKeyFn }) => any) => itEthIfWithPallet(name, required, cb, {skip: true}); itEth.ifWithPallets = itEthIfWithPallet; export function itSchedEth( name: string, - cb: (schedKind: SchedKind, apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any, + cb: (schedKind: SchedKind, apis: { helper: EthUniqueHelper, privateKey: PrivateKeyFn }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}, ) { itEth(name + ' (anonymous scheduling)', (apis) => cb('anon', apis), opts); @@ -95,6 +103,6 @@ itSchedEth.only = (name: string, cb: (schedKind: SchedKind, apis: { helper: EthU itSchedEth.skip = (name: string, cb: (schedKind: SchedKind, apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any) => itSchedEth(name, cb, {skip: true}); itSchedEth.ifWithPallets = itSchedIfWithPallets; -function itSchedIfWithPallets(name: string, required: string[], cb: (schedKind: SchedKind, apis: { helper: EthUniqueHelper, privateKey: (seed: string | {filename: string}) => Promise }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { +function itSchedIfWithPallets(name: string, required: string[], cb: (schedKind: SchedKind, apis: { helper: EthUniqueHelper, privateKey: PrivateKeyFn }) => any, opts: { only?: boolean, skip?: boolean, requiredPallets?: string[] } = {}) { return itSchedEth(name, cb, {requiredPallets: required, ...opts}); } diff --git a/tests/src/eth/util/playgrounds/unique.dev.ts b/tests/src/eth/util/playgrounds/unique.dev.ts index fa10d5a66a..da060f4714 100644 --- a/tests/src/eth/util/playgrounds/unique.dev.ts +++ b/tests/src/eth/util/playgrounds/unique.dev.ts @@ -11,7 +11,7 @@ import Web3 from 'web3'; import {WebsocketProvider} from 'web3-core'; import {Contract} from 'web3-eth-contract'; -import * as solc from 'solc'; +import solc from 'solc'; import {evmToAddress} from '@polkadot/util-crypto'; import {IKeyringPair} from '@polkadot/types/types'; @@ -21,16 +21,16 @@ import {ArrangeGroup, DevUniqueHelper} from '../../../util/playgrounds/unique.de import {ContractImports, CompiledContract, CrossAddress, NormalizedEvent, EthProperty} from './types'; // Native contracts ABI -import collectionHelpersAbi from '../../abi/collectionHelpers.json'; -import fungibleAbi from '../../abi/fungible.json'; -import fungibleDeprecatedAbi from '../../abi/fungibleDeprecated.json'; -import nonFungibleAbi from '../../abi/nonFungible.json'; -import nonFungibleDeprecatedAbi from '../../abi/nonFungibleDeprecated.json'; -import refungibleAbi from '../../abi/reFungible.json'; -import refungibleDeprecatedAbi from '../../abi/reFungibleDeprecated.json'; -import refungibleTokenAbi from '../../abi/reFungibleToken.json'; -import refungibleTokenDeprecatedAbi from '../../abi/reFungibleTokenDeprecated.json'; -import contractHelpersAbi from '../../abi/contractHelpers.json'; +import collectionHelpersAbi from '../../abi/collectionHelpers.json' assert {type: 'json'}; +import fungibleAbi from '../../abi/fungible.json' assert {type: 'json'}; +import fungibleDeprecatedAbi from '../../abi/fungibleDeprecated.json' assert {type: 'json'}; +import nonFungibleAbi from '../../abi/nonFungible.json' assert {type: 'json'}; +import nonFungibleDeprecatedAbi from '../../abi/nonFungibleDeprecated.json' assert {type: 'json'}; +import refungibleAbi from '../../abi/reFungible.json' assert {type: 'json'}; +import refungibleDeprecatedAbi from '../../abi/reFungibleDeprecated.json' assert {type: 'json'}; +import refungibleTokenAbi from '../../abi/reFungibleToken.json' assert {type: 'json'}; +import refungibleTokenDeprecatedAbi from '../../abi/reFungibleTokenDeprecated.json' assert {type: 'json'}; +import contractHelpersAbi from '../../abi/contractHelpers.json' assert {type: 'json'}; import {ICrossAccountId, TEthereumAccount} from '../../../util/playgrounds/types'; import {TCollectionMode} from '../../../util/playgrounds/types'; diff --git a/tests/src/fungible.test.ts b/tests/src/fungible.test.ts index 43317dab1b..f6ed50a0cd 100644 --- a/tests/src/fungible.test.ts +++ b/tests/src/fungible.test.ts @@ -26,7 +26,7 @@ describe('integration test: Fungible functionality:', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor); }); }); @@ -156,7 +156,7 @@ describe('Fungible negative tests', () => { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.Fungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); diff --git a/tests/src/generateEnv.ts b/tests/src/generateEnv.ts index a05b9529d2..7e50e16909 100644 --- a/tests/src/generateEnv.ts +++ b/tests/src/generateEnv.ts @@ -1,6 +1,9 @@ import {ApiPromise, WsProvider} from '@polkadot/api'; import {readFile} from 'fs/promises'; import {join} from 'path'; +import {makeNames} from './util'; + +const {dirname} = makeNames(import.meta.url); async function fetchVersion(chain: string): Promise { const api = await ApiPromise.create({provider: new WsProvider(chain)}); @@ -29,7 +32,7 @@ function fixupUnique(version: string): string { } (async () => { - let env = (await readFile(join(__dirname, '../../.env'))).toString(); + let env = (await readFile(join(dirname, '../../.env'))).toString(); await Promise.all([ ff('wss://rpc.polkadot.io/', /^(.)(..)(.)$/, 'release-v0.$1.$2').then(v => env = setVar(env, 'POLKADOT_MAINNET_BRANCH', v)), ff('wss://statemint-rpc.polkadot.io/', /^(....)$/, 'release-parachains-v$1').then(v => env = setVar(env, 'STATEMINT_BUILD_BRANCH', v)), diff --git a/tests/src/getPropertiesRpc.test.ts b/tests/src/getPropertiesRpc.test.ts index 19fd9a7a06..682416c845 100644 --- a/tests/src/getPropertiesRpc.test.ts +++ b/tests/src/getPropertiesRpc.test.ts @@ -63,7 +63,7 @@ describe('query properties RPC', () => { before(async () => { await usingPlaygrounds(async (_, privateKey) => { - alice = await privateKey({filename: __filename}); + alice = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/interfaces/appPromotion/index.ts b/tests/src/interfaces/appPromotion/index.ts index 2d307291c3..7f1de782f7 100644 --- a/tests/src/interfaces/appPromotion/index.ts +++ b/tests/src/interfaces/appPromotion/index.ts @@ -1,4 +1,4 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -export * from './types'; +export * from './types.js'; diff --git a/tests/src/interfaces/augment-api-consts.ts b/tests/src/interfaces/augment-api-consts.ts index 35d23b19e2..0221d4c24a 100644 --- a/tests/src/interfaces/augment-api-consts.ts +++ b/tests/src/interfaces/augment-api-consts.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedConst } from '@polkadot/api-base/types'; import type { Option, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { Codec } from '@polkadot/types-codec/types'; import type { H160, Perbill, Permill } from '@polkadot/types/interfaces/runtime'; -import type { FrameSupportPalletId, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, UpDataStructsCollectionLimits, XcmV1MultiLocation } from '@polkadot/types/lookup'; +import type { FrameSupportPalletId, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, UpDataStructsCollectionLimits, XcmV3MultiLocation } from '@polkadot/types/lookup'; export type __AugmentedConst = AugmentedConst; @@ -41,18 +41,6 @@ declare module '@polkadot/api-base/types/consts' { **/ [key: string]: Codec; }; - authorship: { - /** - * The number of blocks back we should accept uncles. - * This means that we will deal with uncle-parents that are - * `UncleGenerations + 1` before `now`. - **/ - uncleGenerations: u32 & AugmentedConst; - /** - * Generic const - **/ - [key: string]: Codec; - }; balances: { /** * The minimum amount required to keep an account open. @@ -358,11 +346,11 @@ declare module '@polkadot/api-base/types/consts' { * The actually weight for an XCM message is `T::BaseXcmWeight + * T::Weigher::weight(&msg)`. **/ - baseXcmWeight: u64 & AugmentedConst; + baseXcmWeight: SpWeightsWeightV2Weight & AugmentedConst; /** * Self chain location. **/ - selfLocation: XcmV1MultiLocation & AugmentedConst; + selfLocation: XcmV3MultiLocation & AugmentedConst; /** * Generic const **/ diff --git a/tests/src/interfaces/augment-api-errors.ts b/tests/src/interfaces/augment-api-errors.ts index 187e426a9a..1735e7d358 100644 --- a/tests/src/interfaces/augment-api-errors.ts +++ b/tests/src/interfaces/augment-api-errors.ts @@ -45,40 +45,6 @@ declare module '@polkadot/api-base/types/errors' { **/ [key: string]: AugmentedError; }; - authorship: { - /** - * The uncle is genesis. - **/ - GenesisUncle: AugmentedError; - /** - * The uncle parent not in the chain. - **/ - InvalidUncleParent: AugmentedError; - /** - * The uncle isn't recent enough to be included. - **/ - OldUncle: AugmentedError; - /** - * The uncle is too high in chain. - **/ - TooHighUncle: AugmentedError; - /** - * Too many uncles. - **/ - TooManyUncles: AugmentedError; - /** - * The uncle is already included. - **/ - UncleAlreadyIncluded: AugmentedError; - /** - * Uncles already set in the block. - **/ - UnclesAlreadySet: AugmentedError; - /** - * Generic error - **/ - [key: string]: AugmentedError; - }; balances: { /** * Beneficiary account must pre-exist @@ -663,6 +629,10 @@ declare module '@polkadot/api-base/types/errors' { [key: string]: AugmentedError; }; polkadotXcm: { + /** + * The given account is not an identifiable sovereign account for any location. + **/ + AccountNotSovereign: AugmentedError; /** * The location is invalid since it already has a subscription from us. **/ @@ -688,14 +658,34 @@ declare module '@polkadot/api-base/types/errors' { * The assets to be sent are empty. **/ Empty: AugmentedError; + /** + * The operation required fees to be paid which the initiator could not meet. + **/ + FeesNotMet: AugmentedError; /** * The message execution fails the filter. **/ Filtered: AugmentedError; + /** + * The unlock operation cannot succeed because there are still users of the lock. + **/ + InUse: AugmentedError; + /** + * Invalid asset for the operation. + **/ + InvalidAsset: AugmentedError; /** * Origin is invalid for sending. **/ InvalidOrigin: AugmentedError; + /** + * A remote lock with the corresponding data could not be found. + **/ + LockNotFound: AugmentedError; + /** + * The owner does not own (all) of the asset that they wish to do the operation on. + **/ + LowBalance: AugmentedError; /** * The referenced subscription could not be found. **/ @@ -709,6 +699,10 @@ declare module '@polkadot/api-base/types/errors' { * Too many assets have been attempted for transfer. **/ TooManyAssets: AugmentedError; + /** + * The asset owner has too many locks on the asset. + **/ + TooManyLocks: AugmentedError; /** * The desired destination was unreachable, generally because there is a no way of routing * to it. diff --git a/tests/src/interfaces/augment-api-events.ts b/tests/src/interfaces/augment-api-events.ts index 195d4e7ca7..9c660018e5 100644 --- a/tests/src/interfaces/augment-api-events.ts +++ b/tests/src/interfaces/augment-api-events.ts @@ -8,7 +8,7 @@ import '@polkadot/api-base/types/events'; import type { ApiTypes, AugmentedEvent } from '@polkadot/api-base/types'; import type { Bytes, Null, Option, Result, U8aFixed, bool, u128, u32, u64, u8 } from '@polkadot/types-codec'; import type { AccountId32, H160, H256 } from '@polkadot/types/interfaces/runtime'; -import type { EthereumLog, EvmCoreErrorExitReason, FrameSupportDispatchDispatchInfo, FrameSupportTokensMiscBalanceStatus, OrmlVestingVestingSchedule, PalletEvmAccountBasicCrossAccountIdRepr, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, SpRuntimeDispatchError, SpWeightsWeightV2Weight, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetMultiAssets, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; +import type { EthereumLog, EvmCoreErrorExitReason, FrameSupportDispatchDispatchInfo, FrameSupportTokensMiscBalanceStatus, OrmlVestingVestingSchedule, PalletEvmAccountBasicCrossAccountIdRepr, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, SpRuntimeDispatchError, SpWeightsWeightV2Weight, XcmV3MultiAsset, XcmV3MultiLocation, XcmV3MultiassetMultiAssets, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; export type __AugmentedEvent = AugmentedEvent; @@ -220,7 +220,7 @@ declare module '@polkadot/api-base/types/events' { * Downward message executed with the given outcome. * \[ id, outcome \] **/ - ExecutedDownward: AugmentedEvent; + ExecutedDownward: AugmentedEvent; /** * Downward message is invalid XCM. * \[ id \] @@ -240,11 +240,15 @@ declare module '@polkadot/api-base/types/events' { /** * Downward message executed with the given outcome. **/ - ExecutedDownward: AugmentedEvent; + ExecutedDownward: AugmentedEvent; /** * Downward message is invalid XCM. **/ InvalidFormat: AugmentedEvent; + /** + * The maximum number of downward messages was. + **/ + MaxMessagesExhausted: AugmentedEvent; /** * Downward message is overweight and was placed in the overweight queue. **/ @@ -342,11 +346,11 @@ declare module '@polkadot/api-base/types/events' { /** * The foreign asset registered. **/ - ForeignAssetRegistered: AugmentedEvent; + ForeignAssetRegistered: AugmentedEvent; /** * The foreign asset updated. **/ - ForeignAssetUpdated: AugmentedEvent; + ForeignAssetUpdated: AugmentedEvent; /** * Generic event **/ @@ -432,6 +436,10 @@ declare module '@polkadot/api-base/types/events' { * An upgrade has been authorized. **/ UpgradeAuthorized: AugmentedEvent; + /** + * An upward message was sent to the relay chain. + **/ + UpwardMessageSent: AugmentedEvent], { messageHash: Option }>; /** * The validation function was applied as of the contained relay chain block number. **/ @@ -455,19 +463,45 @@ declare module '@polkadot/api-base/types/events' { * * \[ hash, origin, assets \] **/ - AssetsClaimed: AugmentedEvent; + AssetsClaimed: AugmentedEvent; /** * Some assets have been placed in an asset trap. * * \[ hash, origin, assets \] **/ - AssetsTrapped: AugmentedEvent; + AssetsTrapped: AugmentedEvent; /** * Execution of an XCM message was attempted. * * \[ outcome \] **/ - Attempted: AugmentedEvent; + Attempted: AugmentedEvent; + /** + * Fees were paid from a location for an operation (often for using `SendXcm`). + * + * \[ paying location, fees \] + **/ + FeesPaid: AugmentedEvent; + /** + * Expected query response has been received but the querier location of the response does + * not match the expected. The query remains registered for a later, valid, response to + * be received and acted upon. + * + * \[ origin location, id, expected querier, maybe actual querier \] + **/ + InvalidQuerier: AugmentedEvent]>; + /** + * Expected query response has been received but the expected querier location placed in + * storage by this runtime previously cannot be decoded. The query remains registered. + * + * This is unexpected (since a location placed in storage in a previously executing + * runtime should be readable prior to query timeout) and dangerous since the possibly + * valid response will be dropped. Manual governance intervention is probably going to be + * needed. + * + * \[ origin location, id \] + **/ + InvalidQuerierVersion: AugmentedEvent; /** * Expected query response has been received but the origin location of the response does * not match that expected. The query remains registered for a later, valid, response to @@ -475,7 +509,7 @@ declare module '@polkadot/api-base/types/events' { * * \[ origin location, id, expected location \] **/ - InvalidResponder: AugmentedEvent]>; + InvalidResponder: AugmentedEvent]>; /** * Expected query response has been received but the expected origin location placed in * storage by this runtime previously cannot be decoded. The query remains registered. @@ -487,7 +521,7 @@ declare module '@polkadot/api-base/types/events' { * * \[ origin location, id \] **/ - InvalidResponderVersion: AugmentedEvent; + InvalidResponderVersion: AugmentedEvent; /** * Query response has been received and query is removed. The registered notification has * been dispatched and executed successfully. @@ -531,14 +565,14 @@ declare module '@polkadot/api-base/types/events' { * * \[ location, query ID, error \] **/ - NotifyTargetSendFail: AugmentedEvent; + NotifyTargetSendFail: AugmentedEvent; /** * Query response has been received and is ready for taking with `take_response`. There is * no registered notification call. * * \[ id, response \] **/ - ResponseReady: AugmentedEvent; + ResponseReady: AugmentedEvent; /** * Received query response has been read and removed. * @@ -550,14 +584,14 @@ declare module '@polkadot/api-base/types/events' { * * \[ origin, destination, message \] **/ - Sent: AugmentedEvent; + Sent: AugmentedEvent; /** * The supported version of a location has been changed. This might be through an * automatic notification or a manual intervention. * * \[ location, XCM version \] **/ - SupportedVersionChanged: AugmentedEvent; + SupportedVersionChanged: AugmentedEvent; /** * Query response received which does not match a registered query. This may be because a * matching query was never registered, it may be because it is a duplicate response, or @@ -565,13 +599,34 @@ declare module '@polkadot/api-base/types/events' { * * \[ origin location, id \] **/ - UnexpectedResponse: AugmentedEvent; + UnexpectedResponse: AugmentedEvent; /** * An XCM version change notification message has been attempted to be sent. * - * \[ destination, result \] + * The cost of sending it (borne by the chain) is included. + * + * \[ destination, result, cost \] + **/ + VersionChangeNotified: AugmentedEvent; + /** + * We have requested that a remote chain sends us XCM version change notifications. + * + * \[ destination location, cost \] **/ - VersionChangeNotified: AugmentedEvent; + VersionNotifyRequested: AugmentedEvent; + /** + * A remote has requested XCM version change notification from us and we have honored it. + * A version information message is sent to them and its cost is included. + * + * \[ destination location, cost \] + **/ + VersionNotifyStarted: AugmentedEvent; + /** + * We have requested that a remote chain stops sending us XCM version change notifications. + * + * \[ destination location, cost \] + **/ + VersionNotifyUnrequested: AugmentedEvent; /** * Generic event **/ @@ -691,6 +746,10 @@ declare module '@polkadot/api-base/types/events' { * An account was created with some free balance. **/ Endowed: AugmentedEvent; + /** + * Some free balance was locked. + **/ + Locked: AugmentedEvent; /** * Some locked funds were unlocked **/ @@ -720,6 +779,10 @@ declare module '@polkadot/api-base/types/events' { * Transfer succeeded. **/ Transfer: AugmentedEvent; + /** + * Some locked balance was freed. + **/ + Unlocked: AugmentedEvent; /** * Some balance was unreserved (moved from reserved to free). **/ @@ -808,15 +871,15 @@ declare module '@polkadot/api-base/types/events' { /** * Bad XCM format used. **/ - BadFormat: AugmentedEvent], { messageHash: Option }>; + BadFormat: AugmentedEvent], { messageHash: Option }>; /** * Bad XCM version used. **/ - BadVersion: AugmentedEvent], { messageHash: Option }>; + BadVersion: AugmentedEvent], { messageHash: Option }>; /** * Some XCM failed. **/ - Fail: AugmentedEvent, error: XcmV2TraitsError, weight: SpWeightsWeightV2Weight], { messageHash: Option, error: XcmV2TraitsError, weight: SpWeightsWeightV2Weight }>; + Fail: AugmentedEvent, error: XcmV3TraitsError, weight: SpWeightsWeightV2Weight], { messageHash: Option, error: XcmV3TraitsError, weight: SpWeightsWeightV2Weight }>; /** * An XCM exceeded the individual message weight budget. **/ @@ -828,15 +891,11 @@ declare module '@polkadot/api-base/types/events' { /** * Some XCM was executed ok. **/ - Success: AugmentedEvent, weight: SpWeightsWeightV2Weight], { messageHash: Option, weight: SpWeightsWeightV2Weight }>; - /** - * An upward message was sent to the relay chain. - **/ - UpwardMessageSent: AugmentedEvent], { messageHash: Option }>; + Success: AugmentedEvent, weight: SpWeightsWeightV2Weight], { messageHash: Option, weight: SpWeightsWeightV2Weight }>; /** * An HRMP message was sent to a sibling parachain. **/ - XcmpMessageSent: AugmentedEvent], { messageHash: Option }>; + XcmpMessageSent: AugmentedEvent], { messageHash: Option }>; /** * Generic event **/ @@ -846,7 +905,7 @@ declare module '@polkadot/api-base/types/events' { /** * Transferred `MultiAsset` with fee. **/ - TransferredMultiAssets: AugmentedEvent; + TransferredMultiAssets: AugmentedEvent; /** * Generic event **/ diff --git a/tests/src/interfaces/augment-api-query.ts b/tests/src/interfaces/augment-api-query.ts index 3f9506ccdc..962665de56 100644 --- a/tests/src/interfaces/augment-api-query.ts +++ b/tests/src/interfaces/augment-api-query.ts @@ -10,7 +10,7 @@ import type { Data } from '@polkadot/types'; import type { BTreeMap, Bytes, Option, U256, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, H160, H256 } from '@polkadot/types/interfaces/runtime'; -import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, EthereumBlock, EthereumLog, EthereumReceiptReceiptV3, EthereumTransactionTransactionV2, FpRpcTransactionStatus, FrameSupportDispatchPerDispatchClassWeight, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, OpalRuntimeRuntimeCommonSessionKeys, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensReserveData, OrmlVestingVestingSchedule, PalletAuthorshipUncleEntryItem, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReserveData, PalletConfigurationAppPromotionConfiguration, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmContractHelpersSponsoringModeT, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletNonfungibleItemData, PalletPreimageRequestStatus, PalletTransactionPaymentReleases, PalletTreasuryProposal, PhantomTypeUpDataStructs, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, UpDataStructsCollection, UpDataStructsCollectionStats, UpDataStructsProperties, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, XcmV1MultiLocation } from '@polkadot/types/lookup'; +import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, EthereumBlock, EthereumLog, EthereumReceiptReceiptV3, EthereumTransactionTransactionV2, FpRpcTransactionStatus, FrameSupportDispatchPerDispatchClassWeight, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, OpalRuntimeRuntimeCommonSessionKeys, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensReserveData, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReserveData, PalletConfigurationAppPromotionConfiguration, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmContractHelpersSponsoringModeT, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletNonfungibleItemData, PalletPreimageRequestStatus, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletXcmQueryStatus, PalletXcmRemoteLockedFungibleRecord, PalletXcmVersionMigrationStage, PhantomTypeUpDataStructs, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, UpDataStructsCollection, UpDataStructsCollectionStats, UpDataStructsProperties, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsPropertyScope, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, XcmV3MultiLocation, XcmVersionedAssetId, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; import type { Observable } from '@polkadot/types/types'; export type __AugmentedQuery = AugmentedQuery unknown>; @@ -61,19 +61,41 @@ declare module '@polkadot/api-base/types/storage' { **/ [key: string]: QueryableStorageEntry; }; - authorship: { + aura: { /** - * Author of current block. + * The current authority set. **/ - author: AugmentedQuery Observable>, []> & QueryableStorageEntry; + authorities: AugmentedQuery Observable>, []> & QueryableStorageEntry; + /** + * The current slot of this block. + * + * This will be set in `on_initialize`. + **/ + currentSlot: AugmentedQuery Observable, []> & QueryableStorageEntry; + /** + * Generic query + **/ + [key: string]: QueryableStorageEntry; + }; + auraExt: { + /** + * Serves as cache for the authorities. + * + * The authorities in AuRa are overwritten in `on_initialize` when we switch to a new session, + * but we require the old authorities to verify the seal when validating a PoV. This will always + * be updated to the latest AuRa authorities in `on_finalize`. + **/ + authorities: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** - * Whether uncles were already set in this block. + * Generic query **/ - didSetUncles: AugmentedQuery Observable, []> & QueryableStorageEntry; + [key: string]: QueryableStorageEntry; + }; + authorship: { /** - * Uncles + * Author of current block. **/ - uncles: AugmentedQuery Observable>, []> & QueryableStorageEntry; + author: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** * Generic query **/ @@ -177,7 +199,7 @@ declare module '@polkadot/api-base/types/storage' { /** * Storage of token property permissions of a collection. **/ - collectionPropertyPermissions: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + collectionPropertyPermissions: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; /** * Storage of the count of created collections. Essentially contains the last collection ID. **/ @@ -206,7 +228,6 @@ declare module '@polkadot/api-base/types/storage' { collatorSelectionLicenseBondOverride: AugmentedQuery Observable, []> & QueryableStorageEntry; minGasPriceOverride: AugmentedQuery Observable, []> & QueryableStorageEntry; weightToFeeCoefficientOverride: AugmentedQuery Observable, []> & QueryableStorageEntry; - xcmAllowedLocationsOverride: AugmentedQuery Observable>>, []> & QueryableStorageEntry; /** * Generic query **/ @@ -217,6 +238,10 @@ declare module '@polkadot/api-base/types/storage' { * The configuration. **/ configuration: AugmentedQuery Observable, []> & QueryableStorageEntry; + /** + * Counter for the related counted storage map + **/ + counterForOverweight: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * The overweight messages. **/ @@ -274,12 +299,6 @@ declare module '@polkadot/api-base/types/storage' { **/ [key: string]: QueryableStorageEntry; }; - evmCoderSubstrate: { - /** - * Generic query - **/ - [key: string]: QueryableStorageEntry; - }; evmContractHelpers: { /** * Storage for users that allowed for sponsorship. @@ -375,13 +394,13 @@ declare module '@polkadot/api-base/types/storage' { * * ForeignAssetLocations: map ForeignAssetId => Option **/ - foreignAssetLocations: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + foreignAssetLocations: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; /** * The storages for CurrencyIds. * * LocationToCurrencyIds: map MultiLocation => Option **/ - locationToCurrencyIds: AugmentedQuery Observable>, [XcmV1MultiLocation]> & QueryableStorageEntry; + locationToCurrencyIds: AugmentedQuery Observable>, [XcmV3MultiLocation]> & QueryableStorageEntry; /** * Next available Foreign AssetId ID. * @@ -679,24 +698,69 @@ declare module '@polkadot/api-base/types/storage' { **/ [key: string]: QueryableStorageEntry; }; - preimage: { - preimageFor: AugmentedQuery | [H256 | string | Uint8Array, u32 | AnyNumber | Uint8Array]) => Observable>, [ITuple<[H256, u32]>]> & QueryableStorageEntry]>; + polkadotXcm: { /** - * The request status of a given hash. + * The existing asset traps. + * + * Key is the blake2 256 hash of (origin, versioned `MultiAssets`) pair. Value is the number of + * times this pair has been trapped (usually just 1 if it exists at all). **/ - statusFor: AugmentedQuery Observable>, [H256]> & QueryableStorageEntry; + assetTraps: AugmentedQuery Observable, [H256]> & QueryableStorageEntry; + /** + * The current migration's stage, if any. + **/ + currentMigration: AugmentedQuery Observable>, []> & QueryableStorageEntry; + /** + * Fungible assets which we know are locked on this chain. + **/ + lockedFungibles: AugmentedQuery Observable>>>, [AccountId32]> & QueryableStorageEntry; + /** + * The ongoing queries. + **/ + queries: AugmentedQuery Observable>, [u64]> & QueryableStorageEntry; + /** + * The latest available query index. + **/ + queryCounter: AugmentedQuery Observable, []> & QueryableStorageEntry; + /** + * Fungible assets which we know are locked on a remote chain. + **/ + remoteLockedFungibles: AugmentedQuery Observable>, [u32, AccountId32, XcmVersionedAssetId]> & QueryableStorageEntry; + /** + * Default version to encode XCM when latest version of destination is unknown. If `None`, + * then the destinations whose XCM version is unknown are considered unreachable. + **/ + safeXcmVersion: AugmentedQuery Observable>, []> & QueryableStorageEntry; + /** + * The Latest versions that we know various locations support. + **/ + supportedVersion: AugmentedQuery Observable>, [u32, XcmVersionedMultiLocation]> & QueryableStorageEntry; + /** + * Destinations whose latest XCM version we would like to know. Duplicates not allowed, and + * the `u32` counter is the number of times that a send to the destination has been attempted, + * which is used as a prioritization. + **/ + versionDiscoveryQueue: AugmentedQuery Observable>>, []> & QueryableStorageEntry; + /** + * All locations that we have requested version notifications from. + **/ + versionNotifiers: AugmentedQuery Observable>, [u32, XcmVersionedMultiLocation]> & QueryableStorageEntry; + /** + * The target locations that are subscribed to our version changes, as well as the most recent + * of our versions we informed them of. + **/ + versionNotifyTargets: AugmentedQuery Observable>>, [u32, XcmVersionedMultiLocation]> & QueryableStorageEntry; /** * Generic query **/ [key: string]: QueryableStorageEntry; }; - randomnessCollectiveFlip: { + preimage: { + preimageFor: AugmentedQuery | [H256 | string | Uint8Array, u32 | AnyNumber | Uint8Array]) => Observable>, [ITuple<[H256, u32]>]> & QueryableStorageEntry]>; /** - * Series of block headers from the last 81 blocks that acts as random seed material. This - * is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of - * the oldest hash. + * The request status of a given hash. **/ - randomMaterial: AugmentedQuery Observable>, []> & QueryableStorageEntry; + statusFor: AugmentedQuery Observable>, [H256]> & QueryableStorageEntry; /** * Generic query **/ @@ -784,12 +848,6 @@ declare module '@polkadot/api-base/types/storage' { **/ [key: string]: QueryableStorageEntry; }; - structure: { - /** - * Generic query - **/ - [key: string]: QueryableStorageEntry; - }; sudo: { /** * The `AccountId` of the sudo key. @@ -1027,6 +1085,10 @@ declare module '@polkadot/api-base/types/storage' { [key: string]: QueryableStorageEntry; }; xcmpQueue: { + /** + * Counter for the related counted storage map + **/ + counterForOverweight: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * Inbound aggregate XCMP messages. It can only be one per ParaId/block. **/ diff --git a/tests/src/interfaces/augment-api-rpc.ts b/tests/src/interfaces/augment-api-rpc.ts index 18232b3be7..3d9c5365a6 100644 --- a/tests/src/interfaces/augment-api-rpc.ts +++ b/tests/src/interfaces/augment-api-rpc.ts @@ -22,7 +22,7 @@ import type { CreatedBlock } from '@polkadot/types/interfaces/engine'; import type { EthAccount, EthCallRequest, EthFeeHistory, EthFilter, EthFilterChanges, EthLog, EthReceipt, EthRichBlock, EthSubKind, EthSubParams, EthSyncStatus, EthTransaction, EthTransactionRequest, EthWork } from '@polkadot/types/interfaces/eth'; import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics'; import type { EncodedFinalityProofs, JustificationNotification, ReportedRoundStates } from '@polkadot/types/interfaces/grandpa'; -import type { MmrLeafBatchProof, MmrLeafProof } from '@polkadot/types/interfaces/mmr'; +import type { MmrHash, MmrLeafBatchProof } from '@polkadot/types/interfaces/mmr'; import type { StorageKind } from '@polkadot/types/interfaces/offchain'; import type { FeeDetails, RuntimeDispatchInfoV1 } from '@polkadot/types/interfaces/payment'; import type { RpcMethods } from '@polkadot/types/interfaces/rpc'; @@ -294,7 +294,7 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { /** * Returns the number of transactions sent from given address at given time (block number). **/ - getTransactionCount: AugmentedRpc<(hash: H256 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; + getTransactionCount: AugmentedRpc<(address: H160 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; /** * Returns transaction receipt by transaction hash. **/ @@ -392,13 +392,21 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { }; mmr: { /** - * Generate MMR proof for the given leaf indices. + * Generate MMR proof for the given block numbers. **/ - generateBatchProof: AugmentedRpc<(leafIndices: Vec | (u64 | AnyNumber | Uint8Array)[], at?: BlockHash | string | Uint8Array) => Observable>; + generateProof: AugmentedRpc<(blockNumbers: Vec | (u64 | AnyNumber | Uint8Array)[], bestKnownBlockNumber?: u64 | AnyNumber | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; /** - * Generate MMR proof for given leaf index. + * Get the MMR root hash for the current best block. **/ - generateProof: AugmentedRpc<(leafIndex: u64 | AnyNumber | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; + root: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; + /** + * Verify an MMR proof + **/ + verifyProof: AugmentedRpc<(proof: MmrLeafBatchProof | { blockHash?: any; leaves?: any; proof?: any } | string | Uint8Array) => Observable>; + /** + * Verify an MMR proof statelessly given an mmr_root + **/ + verifyProofStateless: AugmentedRpc<(root: MmrHash | string | Uint8Array, proof: MmrLeafBatchProof | { blockHash?: any; leaves?: any; proof?: any } | string | Uint8Array) => Observable>; }; net: { /** diff --git a/tests/src/interfaces/augment-api-runtime.ts b/tests/src/interfaces/augment-api-runtime.ts index b98b998ea8..9a191eab88 100644 --- a/tests/src/interfaces/augment-api-runtime.ts +++ b/tests/src/interfaces/augment-api-runtime.ts @@ -17,7 +17,7 @@ import type { EvmAccount, EvmCallInfo, EvmCreateInfo } from '@polkadot/types/int import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics'; import type { OpaqueMetadata } from '@polkadot/types/interfaces/metadata'; import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment'; -import type { AccountId, Block, H160, H256, Header, Index, KeyTypeId, Permill, SlotDuration } from '@polkadot/types/interfaces/runtime'; +import type { AccountId, Balance, Block, H160, H256, Header, Index, KeyTypeId, Permill, SlotDuration, Weight } from '@polkadot/types/interfaces/runtime'; import type { RuntimeVersion } from '@polkadot/types/interfaces/state'; import type { ApplyExtrinsicResult, DispatchError } from '@polkadot/types/interfaces/system'; import type { TransactionSource, TransactionValidity } from '@polkadot/types/interfaces/txqueue'; @@ -229,7 +229,7 @@ declare module '@polkadot/api-base/types/calls' { **/ [key: string]: DecoratedCallBase; }; - /** 0x37c8bb1350a9a2a8/2 */ + /** 0x37c8bb1350a9a2a8/3 */ transactionPaymentApi: { /** * The transaction fee details @@ -239,6 +239,14 @@ declare module '@polkadot/api-base/types/calls' { * The transaction info **/ queryInfo: AugmentedCall Observable>; + /** + * Query the output of the current LengthToFee given some input + **/ + queryLengthToFee: AugmentedCall Observable>; + /** + * Query the output of the current WeightToFee given some input + **/ + queryWeightToFee: AugmentedCall Observable>; /** * Generic call **/ diff --git a/tests/src/interfaces/augment-api-tx.ts b/tests/src/interfaces/augment-api-tx.ts index 33ed79f494..2786c306b0 100644 --- a/tests/src/interfaces/augment-api-tx.ts +++ b/tests/src/interfaces/augment-api-tx.ts @@ -10,7 +10,7 @@ import type { Data } from '@polkadot/types'; import type { Bytes, Compact, Option, U256, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H160, H256, MultiAddress } from '@polkadot/types/interfaces/runtime'; -import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumLog, EthereumTransactionTransactionV2, OpalRuntimeRuntimeCommonSessionKeys, OrmlVestingVestingSchedule, PalletConfigurationAppPromotionConfiguration, PalletEvmAccountBasicCrossAccountIdRepr, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletIdentityBitFlags, PalletIdentityIdentityInfo, PalletIdentityJudgement, PalletIdentityRegistration, SpRuntimeHeader, SpWeightsWeightV2Weight, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAsset, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; +import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumLog, EthereumTransactionTransactionV2, OpalRuntimeRuntimeCommonSessionKeys, OrmlVestingVestingSchedule, PalletConfigurationAppPromotionConfiguration, PalletEvmAccountBasicCrossAccountIdRepr, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletIdentityBitFlags, PalletIdentityIdentityInfo, PalletIdentityJudgement, PalletIdentityRegistration, SpWeightsWeightV2Weight, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, XcmV3MultiLocation, XcmV3WeightLimit, XcmVersionedMultiAsset, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; export type __AugmentedSubmittable = AugmentedSubmittable<() => unknown>; export type __SubmittableExtrinsic = SubmittableExtrinsic; @@ -130,24 +130,13 @@ declare module '@polkadot/api-base/types/submittable' { **/ [key: string]: SubmittableExtrinsicFunction; }; - authorship: { - /** - * Provide a set of uncles. - **/ - setUncles: AugmentedSubmittable<(newUncles: Vec | (SpRuntimeHeader | { parentHash?: any; number?: any; stateRoot?: any; extrinsicsRoot?: any; digest?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - /** - * Generic tx - **/ - [key: string]: SubmittableExtrinsicFunction; - }; balances: { /** * Exactly as `transfer`, except the origin must be root and the source account may be * specified. - * # + * ## Complexity * - Same as transfer, but additional read and write because the source account is not * assumed to be in the overlay. - * # **/ forceTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, Compact]>; /** @@ -176,7 +165,7 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be `Signed` by the transactor. * - * # + * ## Complexity * - Dependent on arguments but not critical, given proper implementations for input config * types. See related functions below. * - It contains a limited number of reads and writes internally and no complex @@ -190,9 +179,6 @@ declare module '@polkadot/api-base/types/submittable' { * - Removing enough funds from an account will trigger `T::DustRemoval::on_unbalanced`. * - `transfer_keep_alive` works the same way as `transfer`, but has an additional check * that the transfer will not kill the origin account. - * --------------------------------- - * - Origin account is already in memory, so no DB operations for them. - * # **/ transfer: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; /** @@ -210,9 +196,8 @@ declare module '@polkadot/api-base/types/submittable' { * - `keep_alive`: A boolean to determine if the `transfer_all` operation should send all * of the funds the account has, causing the sender account to be killed (false), or * transfer everything except at least the existential deposit, which will guarantee to - * keep the sender account alive (true). # + * keep the sender account alive (true). ## Complexity * - O(1). Just like transfer, but reading the user's transferable balance first. - * # **/ transferAll: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, keepAlive: bool | boolean | Uint8Array) => SubmittableExtrinsic, [MultiAddress, bool]>; /** @@ -290,7 +275,6 @@ declare module '@polkadot/api-base/types/submittable' { setCollatorSelectionLicenseBond: AugmentedSubmittable<(amount: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [Option]>; setMinGasPriceOverride: AugmentedSubmittable<(coeff: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [Option]>; setWeightToFeeCoefficientOverride: AugmentedSubmittable<(coeff: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [Option]>; - setXcmAllowedLocations: AugmentedSubmittable<(locations: Option> | null | Uint8Array | Vec | (XcmV1MultiLocation | { parents?: any; interior?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [Option>]>; /** * Generic tx **/ @@ -305,19 +289,8 @@ declare module '@polkadot/api-base/types/submittable' { dmpQueue: { /** * Service a single overweight message. - * - * - `origin`: Must pass `ExecuteOverweightOrigin`. - * - `index`: The index of the overweight message to service. - * - `weight_limit`: The amount of weight that message execution may take. - * - * Errors: - * - `Unknown`: Message of `index` is unknown. - * - `OverLimit`: Message execution may use greater than `weight_limit`. - * - * Events: - * - `OverweightServiced`: On success. **/ - serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64, u64]>; + serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u64, SpWeightsWeightV2Weight]>; /** * Generic tx **/ @@ -356,6 +329,23 @@ declare module '@polkadot/api-base/types/submittable' { **/ [key: string]: SubmittableExtrinsicFunction; }; + evmCoderSubstrate: { + emptyCall: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + /** + * Generic tx + **/ + [key: string]: SubmittableExtrinsicFunction; + }; + evmContractHelpers: { + /** + * Migrate contract to use `SponsoringMode` storage instead of `SelfSponsoring` + **/ + migrateFromSelfSponsoring: AugmentedSubmittable<(addresses: Vec | (H160 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + /** + * Generic tx + **/ + [key: string]: SubmittableExtrinsicFunction; + }; evmMigration: { /** * Start contract migration, inserts contract stub at target address, @@ -391,8 +381,8 @@ declare module '@polkadot/api-base/types/submittable' { [key: string]: SubmittableExtrinsicFunction; }; foreignAssets: { - registerForeignAsset: AugmentedSubmittable<(owner: AccountId32 | string | Uint8Array, location: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, metadata: PalletForeignAssetsModuleAssetMetadata | { name?: any; symbol?: any; decimals?: any; minimalBalance?: any } | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, XcmVersionedMultiLocation, PalletForeignAssetsModuleAssetMetadata]>; - updateForeignAsset: AugmentedSubmittable<(foreignAssetId: u32 | AnyNumber | Uint8Array, location: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, metadata: PalletForeignAssetsModuleAssetMetadata | { name?: any; symbol?: any; decimals?: any; minimalBalance?: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, XcmVersionedMultiLocation, PalletForeignAssetsModuleAssetMetadata]>; + registerForeignAsset: AugmentedSubmittable<(owner: AccountId32 | string | Uint8Array, location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, metadata: PalletForeignAssetsModuleAssetMetadata | { name?: any; symbol?: any; decimals?: any; minimalBalance?: any } | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, XcmVersionedMultiLocation, PalletForeignAssetsModuleAssetMetadata]>; + updateForeignAsset: AugmentedSubmittable<(foreignAssetId: u32 | AnyNumber | Uint8Array, location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, metadata: PalletForeignAssetsModuleAssetMetadata | { name?: any; symbol?: any; decimals?: any; minimalBalance?: any } | string | Uint8Array) => SubmittableExtrinsic, [u32, XcmVersionedMultiLocation, PalletForeignAssetsModuleAssetMetadata]>; /** * Generic tx **/ @@ -725,6 +715,12 @@ declare module '@polkadot/api-base/types/submittable' { **/ [key: string]: SubmittableExtrinsicFunction; }; + parachainInfo: { + /** + * Generic tx + **/ + [key: string]: SubmittableExtrinsicFunction; + }; parachainSystem: { authorizeUpgrade: AugmentedSubmittable<(codeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; enactAuthorizedUpgrade: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; @@ -760,7 +756,7 @@ declare module '@polkadot/api-base/types/submittable' { * NOTE: A successful return to this does *not* imply that the `msg` was executed successfully * to completion; only that *some* of it was executed. **/ - execute: AugmentedSubmittable<(message: XcmVersionedXcm | { V0: any } | { V1: any } | { V2: any } | string | Uint8Array, maxWeight: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedXcm, u64]>; + execute: AugmentedSubmittable<(message: XcmVersionedXcm | { V2: any } | { V3: any } | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedXcm, SpWeightsWeightV2Weight]>; /** * Set a safe XCM version (the version that XCM should be encoded with if the most recent * version a destination can accept is unknown). @@ -775,7 +771,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `origin`: Must be Root. * - `location`: The location to which we should subscribe for XCM version notifications. **/ - forceSubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; + forceSubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; /** * Require that a particular destination should no longer notify us regarding any XCM * version changes. @@ -784,7 +780,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `location`: The location to which we are currently subscribed for XCM version * notifications which we no longer desire. **/ - forceUnsubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; + forceUnsubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; /** * Extoll that a particular destination can be communicated with through a particular * version of XCM. @@ -793,7 +789,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `location`: The destination that is being described. * - `xcm_version`: The latest version of XCM that `location` supports. **/ - forceXcmVersion: AugmentedSubmittable<(location: XcmV1MultiLocation | { parents?: any; interior?: any } | string | Uint8Array, xcmVersion: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmV1MultiLocation, u32]>; + forceXcmVersion: AugmentedSubmittable<(location: XcmV3MultiLocation | { parents?: any; interior?: any } | string | Uint8Array, xcmVersion: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmV3MultiLocation, u32]>; /** * Transfer some assets from the local chain to the sovereign account of a destination * chain and forward a notification XCM. @@ -814,7 +810,7 @@ declare module '@polkadot/api-base/types/submittable' { * fees. * - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. **/ - limitedReserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV2WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV2WeightLimit]>; + limitedReserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV3WeightLimit]>; /** * Teleport some assets from the local chain to some destination chain. * @@ -834,7 +830,7 @@ declare module '@polkadot/api-base/types/submittable' { * fees. * - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. **/ - limitedTeleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV2WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV2WeightLimit]>; + limitedTeleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV3WeightLimit]>; /** * Transfer some assets from the local chain to the sovereign account of a destination * chain and forward a notification XCM. @@ -853,8 +849,8 @@ declare module '@polkadot/api-base/types/submittable' { * - `fee_asset_item`: The index into `assets` of the item which should be used to pay * fees. **/ - reserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>; - send: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, message: XcmVersionedXcm | { V0: any } | { V1: any } | { V2: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedXcm]>; + reserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>; + send: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, message: XcmVersionedXcm | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedXcm]>; /** * Teleport some assets from the local chain to some destination chain. * @@ -872,7 +868,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `fee_asset_item`: The index into `assets` of the item which should be used to pay * fees. **/ - teleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>; + teleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>; /** * Generic tx **/ @@ -924,13 +920,9 @@ declare module '@polkadot/api-base/types/submittable' { * means being a controller account) or directly convertible into a validator ID (which * usually means being a stash account). * - * # - * - Complexity: `O(1)` in number of key types. Actual cost depends on the number of length - * of `T::Keys::key_ids()` which is fixed. - * - DbReads: `T::ValidatorIdOf`, `NextKeys`, `origin account` - * - DbWrites: `NextKeys`, `origin account` - * - DbWrites per key id: `KeyOwner` - * # + * ## Complexity + * - `O(1)` in number of key types. Actual cost depends on the number of length of + * `T::Keys::key_ids()` which is fixed. **/ purgeKeys: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** @@ -940,14 +932,9 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin of this function must be signed. * - * # - * - Complexity: `O(1)`. Actual cost depends on the number of length of - * `T::Keys::key_ids()` which is fixed. - * - DbReads: `origin account`, `T::ValidatorIdOf`, `NextKeys` - * - DbWrites: `origin account`, `NextKeys` - * - DbReads per key id: `KeyOwner` - * - DbWrites per key id: `KeyOwner` - * # + * ## Complexity + * - `O(1)`. Actual cost depends on the number of length of `T::Keys::key_ids()` which is + * fixed. **/ setKeys: AugmentedSubmittable<(keys: OpalRuntimeRuntimeCommonSessionKeys | { aura?: any } | string | Uint8Array, proof: Bytes | string | Uint8Array) => SubmittableExtrinsic, [OpalRuntimeRuntimeCommonSessionKeys, Bytes]>; /** @@ -968,11 +955,8 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be _Signed_. * - * # + * ## Complexity * - O(1). - * - Limited storage reads. - * - One DB change. - * # **/ setKey: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** @@ -980,12 +964,8 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be _Signed_. * - * # + * ## Complexity * - O(1). - * - Limited storage reads. - * - One DB write (event). - * - Weight of derivative `call` execution + 10,000. - * # **/ sudo: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [Call]>; /** @@ -994,12 +974,8 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be _Signed_. * - * # + * ## Complexity * - O(1). - * - Limited storage reads. - * - One DB write (event). - * - Weight of derivative `call` execution + 10,000. - * # **/ sudoAs: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Call]>; /** @@ -1009,10 +985,8 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be _Signed_. * - * # + * ## Complexity * - O(1). - * - The weight of this call is defined by the caller. - * # **/ sudoUncheckedWeight: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array, weight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [Call, SpWeightsWeightV2Weight]>; /** @@ -1035,9 +1009,8 @@ declare module '@polkadot/api-base/types/submittable' { /** * Make some on-chain remark. * - * # + * ## Complexity * - `O(1)` - * # **/ remark: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** @@ -1047,28 +1020,15 @@ declare module '@polkadot/api-base/types/submittable' { /** * Set the new runtime code. * - * # + * ## Complexity * - `O(C + S)` where `C` length of `code` and `S` complexity of `can_set_code` - * - 1 call to `can_set_code`: `O(S)` (calls `sp_io::misc::runtime_version` which is - * expensive). - * - 1 storage write (codec `O(C)`). - * - 1 digest item. - * - 1 event. - * The weight of this function is dependent on the runtime, but generally this is very - * expensive. We will treat this as a full block. - * # **/ setCode: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** * Set the new runtime code without doing any checks of the given `code`. * - * # + * ## Complexity * - `O(C)` where `C` length of `code` - * - 1 storage write (codec `O(C)`). - * - 1 digest item. - * - 1 event. - * The weight of this function is dependent on the runtime. We will treat this as a full - * block. # **/ setCodeWithoutChecks: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** @@ -1108,12 +1068,11 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be `Inherent`. * - * # + * ## Complexity * - `O(1)` (Note that implementations of `OnTimestampSet` must also be `O(1)`) * - 1 storage read and 1 storage mutation (codec `O(1)`). (because of `DidUpdate::take` in * `on_finalize`) * - 1 event handler `on_timestamp_set`. Must be `O(1)`. - * # **/ set: AugmentedSubmittable<(now: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** @@ -1209,11 +1168,8 @@ declare module '@polkadot/api-base/types/submittable' { * * May only be called from `T::ApproveOrigin`. * - * # - * - Complexity: O(1). - * - DbReads: `Proposals`, `Approvals` - * - DbWrite: `Approvals` - * # + * ## Complexity + * - O(1). **/ approveProposal: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** @@ -1221,11 +1177,8 @@ declare module '@polkadot/api-base/types/submittable' { * is reserved and slashed if the proposal is rejected. It is returned once the * proposal is awarded. * - * # - * - Complexity: O(1) - * - DbReads: `ProposalCount`, `origin account` - * - DbWrites: `ProposalCount`, `Proposals`, `origin account` - * # + * ## Complexity + * - O(1) **/ proposeSpend: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; /** @@ -1233,11 +1186,8 @@ declare module '@polkadot/api-base/types/submittable' { * * May only be called from `T::RejectOrigin`. * - * # - * - Complexity: O(1) - * - DbReads: `Proposals`, `rejected proposer account` - * - DbWrites: `Proposals`, `rejected proposer account` - * # + * ## Complexity + * - O(1) **/ rejectProposal: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** @@ -1247,10 +1197,8 @@ declare module '@polkadot/api-base/types/submittable' { * May only be called from `T::RejectOrigin`. * - `proposal_id`: The index of a proposal * - * # - * - Complexity: O(A) where `A` is the number of approvals - * - Db reads and writes: `Approvals` - * # + * ## Complexity + * - O(A) where `A` is the number of approvals * * Errors: * - `ProposalNotApproved`: The `proposal_id` supplied was not found in the approval queue, @@ -1855,7 +1803,7 @@ declare module '@polkadot/api-base/types/submittable' { * Events: * - `OverweightServiced`: On success. **/ - serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64, u64]>; + serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u64, SpWeightsWeightV2Weight]>; /** * Suspends all XCM executions for the XCMP queue, regardless of the sender's origin. * @@ -1892,7 +1840,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `origin`: Must pass `Root`. * - `new`: Desired value for `QueueConfigData.threshold_weight` **/ - updateThresholdWeight: AugmentedSubmittable<(updated: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; + updateThresholdWeight: AugmentedSubmittable<(updated: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; /** * Overwrites the speed to which the available weight approaches the maximum weight. * A lower number results in a faster progression. A value of 1 makes the entire weight available initially. @@ -1900,7 +1848,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `origin`: Must pass `Root`. * - `new`: Desired value for `QueueConfigData.weight_restrict_decay`. **/ - updateWeightRestrictDecay: AugmentedSubmittable<(updated: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; + updateWeightRestrictDecay: AugmentedSubmittable<(updated: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; /** * Overwrite the maximum amount of weight any individual message may consume. * Messages above this weight go into the overweight queue and may only be serviced explicitly. @@ -1908,7 +1856,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `origin`: Must pass `Root`. * - `new`: Desired value for `QueueConfigData.xcmp_max_individual_weight`. **/ - updateXcmpMaxIndividualWeight: AugmentedSubmittable<(updated: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; + updateXcmpMaxIndividualWeight: AugmentedSubmittable<(updated: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; /** * Generic tx **/ @@ -1929,7 +1877,7 @@ declare module '@polkadot/api-base/types/submittable' { * by the network, and if the receiving chain would handle * messages correctly. **/ - transfer: AugmentedSubmittable<(currencyId: PalletForeignAssetsAssetIds | { ForeignAssetId: any } | { NativeAssetId: any } | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, destWeightLimit: XcmV2WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletForeignAssetsAssetIds, u128, XcmVersionedMultiLocation, XcmV2WeightLimit]>; + transfer: AugmentedSubmittable<(currencyId: PalletForeignAssetsAssetIds | { ForeignAssetId: any } | { NativeAssetId: any } | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, destWeightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletForeignAssetsAssetIds, u128, XcmVersionedMultiLocation, XcmV3WeightLimit]>; /** * Transfer `MultiAsset`. * @@ -1944,7 +1892,7 @@ declare module '@polkadot/api-base/types/submittable' { * by the network, and if the receiving chain would handle * messages correctly. **/ - transferMultiasset: AugmentedSubmittable<(asset: XcmVersionedMultiAsset | { V0: any } | { V1: any } | string | Uint8Array, dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, destWeightLimit: XcmV2WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiAsset, XcmVersionedMultiLocation, XcmV2WeightLimit]>; + transferMultiasset: AugmentedSubmittable<(asset: XcmVersionedMultiAsset | { V2: any } | { V3: any } | string | Uint8Array, dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, destWeightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiAsset, XcmVersionedMultiLocation, XcmV3WeightLimit]>; /** * Transfer several `MultiAsset` specifying the item to be used as fee * @@ -1962,7 +1910,7 @@ declare module '@polkadot/api-base/types/submittable' { * by the network, and if the receiving chain would handle * messages correctly. **/ - transferMultiassets: AugmentedSubmittable<(assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeItem: u32 | AnyNumber | Uint8Array, dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, destWeightLimit: XcmV2WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiAssets, u32, XcmVersionedMultiLocation, XcmV2WeightLimit]>; + transferMultiassets: AugmentedSubmittable<(assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeItem: u32 | AnyNumber | Uint8Array, dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, destWeightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiAssets, u32, XcmVersionedMultiLocation, XcmV3WeightLimit]>; /** * Transfer `MultiAsset` specifying the fee and amount as separate. * @@ -1986,7 +1934,7 @@ declare module '@polkadot/api-base/types/submittable' { * by the network, and if the receiving chain would handle * messages correctly. **/ - transferMultiassetWithFee: AugmentedSubmittable<(asset: XcmVersionedMultiAsset | { V0: any } | { V1: any } | string | Uint8Array, fee: XcmVersionedMultiAsset | { V0: any } | { V1: any } | string | Uint8Array, dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, destWeightLimit: XcmV2WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiAsset, XcmVersionedMultiAsset, XcmVersionedMultiLocation, XcmV2WeightLimit]>; + transferMultiassetWithFee: AugmentedSubmittable<(asset: XcmVersionedMultiAsset | { V2: any } | { V3: any } | string | Uint8Array, fee: XcmVersionedMultiAsset | { V2: any } | { V3: any } | string | Uint8Array, dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, destWeightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiAsset, XcmVersionedMultiAsset, XcmVersionedMultiLocation, XcmV3WeightLimit]>; /** * Transfer several currencies specifying the item to be used as fee * @@ -2004,7 +1952,7 @@ declare module '@polkadot/api-base/types/submittable' { * by the network, and if the receiving chain would handle * messages correctly. **/ - transferMulticurrencies: AugmentedSubmittable<(currencies: Vec> | ([PalletForeignAssetsAssetIds | { ForeignAssetId: any } | { NativeAssetId: any } | string | Uint8Array, u128 | AnyNumber | Uint8Array])[], feeItem: u32 | AnyNumber | Uint8Array, dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, destWeightLimit: XcmV2WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [Vec>, u32, XcmVersionedMultiLocation, XcmV2WeightLimit]>; + transferMulticurrencies: AugmentedSubmittable<(currencies: Vec> | ([PalletForeignAssetsAssetIds | { ForeignAssetId: any } | { NativeAssetId: any } | string | Uint8Array, u128 | AnyNumber | Uint8Array])[], feeItem: u32 | AnyNumber | Uint8Array, dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, destWeightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [Vec>, u32, XcmVersionedMultiLocation, XcmV3WeightLimit]>; /** * Transfer native currencies specifying the fee and amount as * separate. @@ -2028,7 +1976,7 @@ declare module '@polkadot/api-base/types/submittable' { * by the network, and if the receiving chain would handle * messages correctly. **/ - transferWithFee: AugmentedSubmittable<(currencyId: PalletForeignAssetsAssetIds | { ForeignAssetId: any } | { NativeAssetId: any } | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, fee: u128 | AnyNumber | Uint8Array, dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, destWeightLimit: XcmV2WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletForeignAssetsAssetIds, u128, u128, XcmVersionedMultiLocation, XcmV2WeightLimit]>; + transferWithFee: AugmentedSubmittable<(currencyId: PalletForeignAssetsAssetIds | { ForeignAssetId: any } | { NativeAssetId: any } | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, fee: u128 | AnyNumber | Uint8Array, dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, destWeightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletForeignAssetsAssetIds, u128, u128, XcmVersionedMultiLocation, XcmV3WeightLimit]>; /** * Generic tx **/ diff --git a/tests/src/interfaces/augment-api.ts b/tests/src/interfaces/augment-api.ts index 7cafd228bd..53c9c77017 100644 --- a/tests/src/interfaces/augment-api.ts +++ b/tests/src/interfaces/augment-api.ts @@ -1,10 +1,10 @@ // Auto-generated via `yarn polkadot-types-from-chain`, do not edit /* eslint-disable */ -import './augment-api-consts'; -import './augment-api-errors'; -import './augment-api-events'; -import './augment-api-query'; -import './augment-api-tx'; -import './augment-api-rpc'; -import './augment-api-runtime'; +import './augment-api-consts.js'; +import './augment-api-errors.js'; +import './augment-api-events.js'; +import './augment-api-query.js'; +import './augment-api-tx.js'; +import './augment-api-rpc.js'; +import './augment-api-runtime.js'; diff --git a/tests/src/interfaces/augment-types.ts b/tests/src/interfaces/augment-types.ts index 5123df37c2..e01e61c1c9 100644 --- a/tests/src/interfaces/augment-types.ts +++ b/tests/src/interfaces/augment-types.ts @@ -5,9 +5,9 @@ // this is required to allow for ambient/previous definitions import '@polkadot/types/types/registry'; -import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportPalletId, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls, OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance, OpalRuntimeRuntimeCommonSessionKeys, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensModuleCall, OrmlTokensModuleError, OrmlTokensModuleEvent, OrmlTokensReserveData, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, OrmlXtokensModuleCall, OrmlXtokensModuleError, OrmlXtokensModuleEvent, PalletAppPromotionCall, PalletAppPromotionError, PalletAppPromotionEvent, PalletAuthorshipCall, PalletAuthorshipError, PalletAuthorshipUncleEntryItem, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReserveData, PalletCollatorSelectionCall, PalletCollatorSelectionError, PalletCollatorSelectionEvent, PalletCommonError, PalletCommonEvent, PalletConfigurationAppPromotionConfiguration, PalletConfigurationCall, PalletConfigurationError, PalletConfigurationEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersEvent, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletEvmMigrationEvent, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletForeignAssetsModuleCall, PalletForeignAssetsModuleError, PalletForeignAssetsModuleEvent, PalletForeignAssetsNativeCurrency, PalletFungibleError, PalletIdentityBitFlags, PalletIdentityCall, PalletIdentityError, PalletIdentityEvent, PalletIdentityIdentityField, PalletIdentityIdentityInfo, PalletIdentityJudgement, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletRefungibleError, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsEvent, PalletTimestampCall, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletXcmCall, PalletXcmError, PalletXcmEvent, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpRuntimeBlakeTwo256, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeHeader, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionValidityInvalidTransaction, SpRuntimeTransactionValidityTransactionValidityError, SpRuntimeTransactionValidityUnknownTransaction, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsRpcCollectionFlags, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipStateAccountId32, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, UpDataStructsTokenData, UpPovEstimateRpcPovInfo, UpPovEstimateRpcTrieKeyValue, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAsset, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from './default'; +import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportPalletId, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls, OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance, OpalRuntimeRuntimeCommonSessionKeys, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensModuleCall, OrmlTokensModuleError, OrmlTokensModuleEvent, OrmlTokensReserveData, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, OrmlXtokensModuleCall, OrmlXtokensModuleError, OrmlXtokensModuleEvent, PalletAppPromotionCall, PalletAppPromotionError, PalletAppPromotionEvent, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReserveData, PalletCollatorSelectionCall, PalletCollatorSelectionError, PalletCollatorSelectionEvent, PalletCommonError, PalletCommonEvent, PalletConfigurationAppPromotionConfiguration, PalletConfigurationCall, PalletConfigurationError, PalletConfigurationEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersCall, PalletEvmContractHelpersError, PalletEvmContractHelpersEvent, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletEvmMigrationEvent, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletForeignAssetsModuleCall, PalletForeignAssetsModuleError, PalletForeignAssetsModuleEvent, PalletForeignAssetsNativeCurrency, PalletFungibleError, PalletIdentityBitFlags, PalletIdentityCall, PalletIdentityError, PalletIdentityEvent, PalletIdentityIdentityField, PalletIdentityIdentityInfo, PalletIdentityJudgement, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletRefungibleError, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsEvent, PalletTimestampCall, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmQueryStatus, PalletXcmRemoteLockedFungibleRecord, PalletXcmVersionMigrationStage, ParachainInfoCall, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionValidityInvalidTransaction, SpRuntimeTransactionValidityTransactionValidityError, SpRuntimeTransactionValidityUnknownTransaction, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsRpcCollectionFlags, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipStateAccountId32, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, UpDataStructsTokenData, UpPovEstimateRpcPovInfo, UpPovEstimateRpcTrieKeyValue, XcmDoubleEncoded, XcmV2BodyId, XcmV2BodyPart, XcmV2Instruction, XcmV2Junction, XcmV2MultiAsset, XcmV2MultiLocation, XcmV2MultiassetAssetId, XcmV2MultiassetAssetInstance, XcmV2MultiassetFungibility, XcmV2MultiassetMultiAssetFilter, XcmV2MultiassetMultiAssets, XcmV2MultiassetWildFungibility, XcmV2MultiassetWildMultiAsset, XcmV2MultilocationJunctions, XcmV2NetworkId, XcmV2OriginKind, XcmV2Response, XcmV2TraitsError, XcmV2WeightLimit, XcmV2Xcm, XcmV3Instruction, XcmV3Junction, XcmV3JunctionBodyId, XcmV3JunctionBodyPart, XcmV3JunctionNetworkId, XcmV3Junctions, XcmV3MaybeErrorCode, XcmV3MultiAsset, XcmV3MultiLocation, XcmV3MultiassetAssetId, XcmV3MultiassetAssetInstance, XcmV3MultiassetFungibility, XcmV3MultiassetMultiAssetFilter, XcmV3MultiassetMultiAssets, XcmV3MultiassetWildFungibility, XcmV3MultiassetWildMultiAsset, XcmV3PalletInfo, XcmV3QueryResponseInfo, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3WeightLimit, XcmV3Xcm, XcmVersionedAssetId, XcmVersionedMultiAsset, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedResponse, XcmVersionedXcm } from './default'; import type { Data, StorageKey } from '@polkadot/types'; -import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; +import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, ISize, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, isize, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets'; import type { BlockAttestations, IncludedBlocks, MoreAttestations } from '@polkadot/types/interfaces/attestations'; import type { RawAuraPreDigest } from '@polkadot/types/interfaces/aura'; @@ -15,7 +15,7 @@ import type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interface import type { UncleEntryItem } from '@polkadot/types/interfaces/authorship'; import type { AllowedSlots, BabeAuthorityWeight, BabeBlockWeight, BabeEpochConfiguration, BabeEquivocationProof, BabeGenesisConfiguration, BabeGenesisConfigurationV1, BabeWeight, Epoch, EpochAuthorship, MaybeRandomness, MaybeVrf, NextConfigDescriptor, NextConfigDescriptorV1, OpaqueKeyOwnershipProof, Randomness, RawBabePreDigest, RawBabePreDigestCompat, RawBabePreDigestPrimary, RawBabePreDigestPrimaryTo159, RawBabePreDigestSecondaryPlain, RawBabePreDigestSecondaryTo159, RawBabePreDigestSecondaryVRF, RawBabePreDigestTo159, SlotNumber, VrfData, VrfOutput, VrfProof } from '@polkadot/types/interfaces/babe'; import type { AccountData, BalanceLock, BalanceLockTo212, BalanceStatus, Reasons, ReserveData, ReserveIdentifier, VestingSchedule, WithdrawReasons } from '@polkadot/types/interfaces/balances'; -import type { BeefyAuthoritySet, BeefyCommitment, BeefyId, BeefyNextAuthoritySet, BeefyPayload, BeefyPayloadId, BeefySignedCommitment, MmrRootHash, ValidatorSet, ValidatorSetId } from '@polkadot/types/interfaces/beefy'; +import type { BeefyAuthoritySet, BeefyCommitment, BeefyEquivocationProof, BeefyId, BeefyNextAuthoritySet, BeefyPayload, BeefyPayloadId, BeefySignedCommitment, BeefyVoteMessage, MmrRootHash, ValidatorSet, ValidatorSetId } from '@polkadot/types/interfaces/beefy'; import type { BenchmarkBatch, BenchmarkConfig, BenchmarkList, BenchmarkMetadata, BenchmarkParameter, BenchmarkResult } from '@polkadot/types/interfaces/benchmark'; import type { CheckInherentsResult, InherentData, InherentIdentifier } from '@polkadot/types/interfaces/blockbuilder'; import type { BridgeMessageId, BridgedBlockHash, BridgedBlockNumber, BridgedHeader, CallOrigin, ChainId, DeliveredMessages, DispatchFeePayment, InboundLaneData, InboundRelayer, InitializationData, LaneId, MessageData, MessageKey, MessageNonce, MessagesDeliveryProofOf, MessagesProofOf, OperatingMode, OutboundLaneData, OutboundMessageFee, OutboundPayload, Parameter, RelayerId, UnrewardedRelayer, UnrewardedRelayersState } from '@polkadot/types/interfaces/bridges'; @@ -42,18 +42,19 @@ import type { IdentityFields, IdentityInfo, IdentityInfoAdditional, IdentityInfo import type { AuthIndex, AuthoritySignature, Heartbeat, HeartbeatTo244, OpaqueMultiaddr, OpaqueNetworkState, OpaquePeerId } from '@polkadot/types/interfaces/imOnline'; import type { CallIndex, LotteryConfig } from '@polkadot/types/interfaces/lottery'; import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, OpaqueMetadata, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableType, PortableTypeV14, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata'; -import type { MmrBatchProof, MmrEncodableOpaqueLeaf, MmrError, MmrLeafBatchProof, MmrLeafIndex, MmrLeafProof, MmrNodeIndex, MmrProof } from '@polkadot/types/interfaces/mmr'; -import type { NpApiError } from '@polkadot/types/interfaces/nompools'; +import type { MmrBatchProof, MmrEncodableOpaqueLeaf, MmrError, MmrHash, MmrLeafBatchProof, MmrLeafIndex, MmrLeafProof, MmrNodeIndex, MmrProof } from '@polkadot/types/interfaces/mmr'; +import type { NftCollectionId, NftItemId } from '@polkadot/types/interfaces/nfts'; +import type { NpApiError, NpPoolId } from '@polkadot/types/interfaces/nompools'; import type { StorageKind } from '@polkadot/types/interfaces/offchain'; import type { DeferredOffenceOf, Kind, OffenceDetails, Offender, OpaqueTimeSlot, ReportIdOf, Reporter } from '@polkadot/types/interfaces/offences'; -import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateEvent, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, CoreState, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, GroupRotationInfo, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OccupiedCore, OccupiedCoreAssumption, OldV1SessionInfo, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, PvfCheckStatement, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, ScheduledCore, Scheduling, ScrapedOnChainVotes, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains'; +import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateEvent, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, CoreState, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExecutorParam, ExecutorParams, ExecutorParamsHash, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, GroupRotationInfo, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OccupiedCore, OccupiedCoreAssumption, OldV1SessionInfo, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, PvfCheckStatement, PvfExecTimeoutKind, PvfPrepTimeoutKind, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, ScheduledCore, Scheduling, ScrapedOnChainVotes, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains'; import type { FeeDetails, InclusionFee, RuntimeDispatchInfo, RuntimeDispatchInfoV1, RuntimeDispatchInfoV2 } from '@polkadot/types/interfaces/payment'; import type { Approvals } from '@polkadot/types/interfaces/poll'; import type { ProxyAnnouncement, ProxyDefinition, ProxyType } from '@polkadot/types/interfaces/proxy'; import type { AccountStatus, AccountValidity } from '@polkadot/types/interfaces/purchase'; import type { ActiveRecovery, RecoveryConfig } from '@polkadot/types/interfaces/recovery'; import type { RpcMethods } from '@polkadot/types/interfaces/rpc'; -import type { AccountId, AccountId20, AccountId32, AccountId33, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, BlockNumberFor, BlockNumberOf, Call, CallHash, CallHashOf, ChangesTrieConfiguration, ChangesTrieSignal, CodecHash, Consensus, ConsensusEngineId, CrateVersion, Digest, DigestItem, EncodedJustification, ExtrinsicsWeight, Fixed128, Fixed64, FixedI128, FixedI64, FixedU128, FixedU64, H1024, H128, H160, H2048, H256, H32, H512, H64, Hash, Header, HeaderPartial, I32F32, Index, IndicesLookupSource, Justification, Justifications, KeyTypeId, KeyValue, LockIdentifier, LookupSource, LookupTarget, ModuleId, Moment, MultiAddress, MultiSigner, OpaqueCall, Origin, OriginCaller, PalletId, PalletVersion, PalletsOrigin, Pays, PerU16, Perbill, Percent, Permill, Perquintill, Phantom, PhantomData, PreRuntime, Releases, RuntimeDbWeight, Seal, SealV0, SignedBlock, SignedBlockWithJustification, SignedBlockWithJustifications, Slot, SlotDuration, StorageData, StorageInfo, StorageProof, TransactionInfo, TransactionLongevity, TransactionPriority, TransactionStorageProof, TransactionTag, U32F32, ValidatorId, ValidatorIdOf, Weight, WeightMultiplier, WeightV1, WeightV2 } from '@polkadot/types/interfaces/runtime'; +import type { AccountId, AccountId20, AccountId32, AccountId33, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, BlockNumberFor, BlockNumberOf, Call, CallHash, CallHashOf, ChangesTrieConfiguration, ChangesTrieSignal, CodecHash, Consensus, ConsensusEngineId, CrateVersion, Digest, DigestItem, EncodedJustification, ExtrinsicsWeight, Fixed128, Fixed64, FixedI128, FixedI64, FixedU128, FixedU64, H1024, H128, H160, H2048, H256, H32, H512, H64, Hash, Header, HeaderPartial, I32F32, Index, IndicesLookupSource, Justification, Justifications, KeyTypeId, KeyValue, LockIdentifier, LookupSource, LookupTarget, ModuleId, Moment, MultiAddress, MultiSigner, OpaqueCall, Origin, OriginCaller, PalletId, PalletVersion, PalletsOrigin, Pays, PerU16, Perbill, Percent, Permill, Perquintill, Phantom, PhantomData, PreRuntime, Releases, RuntimeCall, RuntimeDbWeight, RuntimeEvent, Seal, SealV0, SignedBlock, SignedBlockWithJustification, SignedBlockWithJustifications, Slot, SlotDuration, StorageData, StorageInfo, StorageProof, TransactionInfo, TransactionLongevity, TransactionPriority, TransactionStorageProof, TransactionTag, U32F32, ValidatorId, ValidatorIdOf, Weight, WeightMultiplier, WeightV0, WeightV1, WeightV2 } from '@polkadot/types/interfaces/runtime'; import type { Si0Field, Si0LookupTypeId, Si0Path, Si0Type, Si0TypeDef, Si0TypeDefArray, Si0TypeDefBitSequence, Si0TypeDefCompact, Si0TypeDefComposite, Si0TypeDefPhantom, Si0TypeDefPrimitive, Si0TypeDefSequence, Si0TypeDefTuple, Si0TypeDefVariant, Si0TypeParameter, Si0Variant, Si1Field, Si1LookupTypeId, Si1Path, Si1Type, Si1TypeDef, Si1TypeDefArray, Si1TypeDefBitSequence, Si1TypeDefCompact, Si1TypeDefComposite, Si1TypeDefPrimitive, Si1TypeDefSequence, Si1TypeDefTuple, Si1TypeDefVariant, Si1TypeParameter, Si1Variant, SiField, SiLookupTypeId, SiPath, SiType, SiTypeDef, SiTypeDefArray, SiTypeDefBitSequence, SiTypeDefCompact, SiTypeDefComposite, SiTypeDefPrimitive, SiTypeDefSequence, SiTypeDefTuple, SiTypeDefVariant, SiTypeParameter, SiVariant } from '@polkadot/types/interfaces/scaleInfo'; import type { Period, Priority, SchedulePeriod, SchedulePriority, Scheduled, ScheduledTo254, TaskAddress } from '@polkadot/types/interfaces/scheduler'; import type { BeefyKey, FullIdentification, IdentificationTuple, Keys, MembershipProof, SessionIndex, SessionKeys1, SessionKeys10, SessionKeys10B, SessionKeys2, SessionKeys3, SessionKeys4, SessionKeys5, SessionKeys6, SessionKeys6B, SessionKeys7, SessionKeys7B, SessionKeys8, SessionKeys8B, SessionKeys9, SessionKeys9B, ValidatorCount } from '@polkadot/types/interfaces/session'; @@ -151,12 +152,14 @@ declare module '@polkadot/types/types/registry' { BalanceStatus: BalanceStatus; BeefyAuthoritySet: BeefyAuthoritySet; BeefyCommitment: BeefyCommitment; + BeefyEquivocationProof: BeefyEquivocationProof; BeefyId: BeefyId; BeefyKey: BeefyKey; BeefyNextAuthoritySet: BeefyNextAuthoritySet; BeefyPayload: BeefyPayload; BeefyPayloadId: BeefyPayloadId; BeefySignedCommitment: BeefySignedCommitment; + BeefyVoteMessage: BeefyVoteMessage; BenchmarkBatch: BenchmarkBatch; BenchmarkConfig: BenchmarkConfig; BenchmarkList: BenchmarkList; @@ -479,6 +482,9 @@ declare module '@polkadot/types/types/registry' { EvmLog: EvmLog; EvmVicinity: EvmVicinity; ExecReturnValue: ExecReturnValue; + ExecutorParam: ExecutorParam; + ExecutorParams: ExecutorParams; + ExecutorParamsHash: ExecutorParamsHash; ExitError: ExitError; ExitFatal: ExitFatal; ExitReason: ExitReason; @@ -650,6 +656,8 @@ declare module '@polkadot/types/types/registry' { InteriorMultiLocation: InteriorMultiLocation; InvalidDisputeStatementKind: InvalidDisputeStatementKind; InvalidTransaction: InvalidTransaction; + isize: isize; + ISize: ISize; Json: Json; Junction: Junction; Junctions: Junctions; @@ -708,6 +716,7 @@ declare module '@polkadot/types/types/registry' { MmrBatchProof: MmrBatchProof; MmrEncodableOpaqueLeaf: MmrEncodableOpaqueLeaf; MmrError: MmrError; + MmrHash: MmrHash; MmrLeafBatchProof: MmrLeafBatchProof; MmrLeafIndex: MmrLeafIndex; MmrLeafProof: MmrLeafProof; @@ -757,12 +766,15 @@ declare module '@polkadot/types/types/registry' { NextAuthority: NextAuthority; NextConfigDescriptor: NextConfigDescriptor; NextConfigDescriptorV1: NextConfigDescriptorV1; + NftCollectionId: NftCollectionId; + NftItemId: NftItemId; NodeRole: NodeRole; Nominations: Nominations; NominatorIndex: NominatorIndex; NominatorIndexCompact: NominatorIndexCompact; NotConnectedPeer: NotConnectedPeer; NpApiError: NpApiError; + NpPoolId: NpPoolId; Null: Null; OccupiedCore: OccupiedCore; OccupiedCoreAssumption: OccupiedCoreAssumption; @@ -819,9 +831,6 @@ declare module '@polkadot/types/types/registry' { PalletAppPromotionCall: PalletAppPromotionCall; PalletAppPromotionError: PalletAppPromotionError; PalletAppPromotionEvent: PalletAppPromotionEvent; - PalletAuthorshipCall: PalletAuthorshipCall; - PalletAuthorshipError: PalletAuthorshipError; - PalletAuthorshipUncleEntryItem: PalletAuthorshipUncleEntryItem; PalletBalancesAccountData: PalletBalancesAccountData; PalletBalancesBalanceLock: PalletBalancesBalanceLock; PalletBalancesCall: PalletBalancesCall; @@ -852,7 +861,9 @@ declare module '@polkadot/types/types/registry' { PalletEventMetadataV14: PalletEventMetadataV14; PalletEvmAccountBasicCrossAccountIdRepr: PalletEvmAccountBasicCrossAccountIdRepr; PalletEvmCall: PalletEvmCall; + PalletEvmCoderSubstrateCall: PalletEvmCoderSubstrateCall; PalletEvmCoderSubstrateError: PalletEvmCoderSubstrateError; + PalletEvmContractHelpersCall: PalletEvmContractHelpersCall; PalletEvmContractHelpersError: PalletEvmContractHelpersError; PalletEvmContractHelpersEvent: PalletEvmContractHelpersEvent; PalletEvmContractHelpersSponsoringModeT: PalletEvmContractHelpersSponsoringModeT; @@ -921,7 +932,11 @@ declare module '@polkadot/types/types/registry' { PalletXcmCall: PalletXcmCall; PalletXcmError: PalletXcmError; PalletXcmEvent: PalletXcmEvent; + PalletXcmQueryStatus: PalletXcmQueryStatus; + PalletXcmRemoteLockedFungibleRecord: PalletXcmRemoteLockedFungibleRecord; + PalletXcmVersionMigrationStage: PalletXcmVersionMigrationStage; ParachainDispatchOrigin: ParachainDispatchOrigin; + ParachainInfoCall: ParachainInfoCall; ParachainInherentData: ParachainInherentData; ParachainProposal: ParachainProposal; ParachainsInherentData: ParachainsInherentData; @@ -991,6 +1006,8 @@ declare module '@polkadot/types/types/registry' { ProxyState: ProxyState; ProxyType: ProxyType; PvfCheckStatement: PvfCheckStatement; + PvfExecTimeoutKind: PvfExecTimeoutKind; + PvfPrepTimeoutKind: PvfPrepTimeoutKind; QueryId: QueryId; QueryStatus: QueryStatus; QueueConfigData: QueueConfigData; @@ -1056,10 +1073,12 @@ declare module '@polkadot/types/types/registry' { RoundSnapshot: RoundSnapshot; RoundState: RoundState; RpcMethods: RpcMethods; + RuntimeCall: RuntimeCall; RuntimeDbWeight: RuntimeDbWeight; RuntimeDispatchInfo: RuntimeDispatchInfo; RuntimeDispatchInfoV1: RuntimeDispatchInfoV1; RuntimeDispatchInfoV2: RuntimeDispatchInfoV2; + RuntimeEvent: RuntimeEvent; RuntimeVersion: RuntimeVersion; RuntimeVersionApi: RuntimeVersionApi; RuntimeVersionPartial: RuntimeVersionPartial; @@ -1183,11 +1202,9 @@ declare module '@polkadot/types/types/registry' { SpCoreSr25519Public: SpCoreSr25519Public; SpCoreSr25519Signature: SpCoreSr25519Signature; SpecVersion: SpecVersion; - SpRuntimeBlakeTwo256: SpRuntimeBlakeTwo256; SpRuntimeDigest: SpRuntimeDigest; SpRuntimeDigestDigestItem: SpRuntimeDigestDigestItem; SpRuntimeDispatchError: SpRuntimeDispatchError; - SpRuntimeHeader: SpRuntimeHeader; SpRuntimeModuleError: SpRuntimeModuleError; SpRuntimeMultiSignature: SpRuntimeMultiSignature; SpRuntimeTokenError: SpRuntimeTokenError; @@ -1390,6 +1407,7 @@ declare module '@polkadot/types/types/registry' { WeightMultiplier: WeightMultiplier; WeightPerClass: WeightPerClass; WeightToFeeCoefficient: WeightToFeeCoefficient; + WeightV0: WeightV0; WeightV1: WeightV1; WeightV2: WeightV2; WildFungibility: WildFungibility; @@ -1422,42 +1440,57 @@ declare module '@polkadot/types/types/registry' { XcmOriginKind: XcmOriginKind; XcmpMessageFormat: XcmpMessageFormat; XcmV0: XcmV0; - XcmV0Junction: XcmV0Junction; - XcmV0JunctionBodyId: XcmV0JunctionBodyId; - XcmV0JunctionBodyPart: XcmV0JunctionBodyPart; - XcmV0JunctionNetworkId: XcmV0JunctionNetworkId; - XcmV0MultiAsset: XcmV0MultiAsset; - XcmV0MultiLocation: XcmV0MultiLocation; - XcmV0Order: XcmV0Order; - XcmV0OriginKind: XcmV0OriginKind; - XcmV0Response: XcmV0Response; - XcmV0Xcm: XcmV0Xcm; XcmV1: XcmV1; - XcmV1Junction: XcmV1Junction; - XcmV1MultiAsset: XcmV1MultiAsset; - XcmV1MultiassetAssetId: XcmV1MultiassetAssetId; - XcmV1MultiassetAssetInstance: XcmV1MultiassetAssetInstance; - XcmV1MultiassetFungibility: XcmV1MultiassetFungibility; - XcmV1MultiassetMultiAssetFilter: XcmV1MultiassetMultiAssetFilter; - XcmV1MultiassetMultiAssets: XcmV1MultiassetMultiAssets; - XcmV1MultiassetWildFungibility: XcmV1MultiassetWildFungibility; - XcmV1MultiassetWildMultiAsset: XcmV1MultiassetWildMultiAsset; - XcmV1MultiLocation: XcmV1MultiLocation; - XcmV1MultilocationJunctions: XcmV1MultilocationJunctions; - XcmV1Order: XcmV1Order; - XcmV1Response: XcmV1Response; - XcmV1Xcm: XcmV1Xcm; XcmV2: XcmV2; + XcmV2BodyId: XcmV2BodyId; + XcmV2BodyPart: XcmV2BodyPart; XcmV2Instruction: XcmV2Instruction; + XcmV2Junction: XcmV2Junction; + XcmV2MultiAsset: XcmV2MultiAsset; + XcmV2MultiassetAssetId: XcmV2MultiassetAssetId; + XcmV2MultiassetAssetInstance: XcmV2MultiassetAssetInstance; + XcmV2MultiassetFungibility: XcmV2MultiassetFungibility; + XcmV2MultiassetMultiAssetFilter: XcmV2MultiassetMultiAssetFilter; + XcmV2MultiassetMultiAssets: XcmV2MultiassetMultiAssets; + XcmV2MultiassetWildFungibility: XcmV2MultiassetWildFungibility; + XcmV2MultiassetWildMultiAsset: XcmV2MultiassetWildMultiAsset; + XcmV2MultiLocation: XcmV2MultiLocation; + XcmV2MultilocationJunctions: XcmV2MultilocationJunctions; + XcmV2NetworkId: XcmV2NetworkId; + XcmV2OriginKind: XcmV2OriginKind; XcmV2Response: XcmV2Response; XcmV2TraitsError: XcmV2TraitsError; - XcmV2TraitsOutcome: XcmV2TraitsOutcome; XcmV2WeightLimit: XcmV2WeightLimit; XcmV2Xcm: XcmV2Xcm; + XcmV3Instruction: XcmV3Instruction; + XcmV3Junction: XcmV3Junction; + XcmV3JunctionBodyId: XcmV3JunctionBodyId; + XcmV3JunctionBodyPart: XcmV3JunctionBodyPart; + XcmV3JunctionNetworkId: XcmV3JunctionNetworkId; + XcmV3Junctions: XcmV3Junctions; + XcmV3MaybeErrorCode: XcmV3MaybeErrorCode; + XcmV3MultiAsset: XcmV3MultiAsset; + XcmV3MultiassetAssetId: XcmV3MultiassetAssetId; + XcmV3MultiassetAssetInstance: XcmV3MultiassetAssetInstance; + XcmV3MultiassetFungibility: XcmV3MultiassetFungibility; + XcmV3MultiassetMultiAssetFilter: XcmV3MultiassetMultiAssetFilter; + XcmV3MultiassetMultiAssets: XcmV3MultiassetMultiAssets; + XcmV3MultiassetWildFungibility: XcmV3MultiassetWildFungibility; + XcmV3MultiassetWildMultiAsset: XcmV3MultiassetWildMultiAsset; + XcmV3MultiLocation: XcmV3MultiLocation; + XcmV3PalletInfo: XcmV3PalletInfo; + XcmV3QueryResponseInfo: XcmV3QueryResponseInfo; + XcmV3Response: XcmV3Response; + XcmV3TraitsError: XcmV3TraitsError; + XcmV3TraitsOutcome: XcmV3TraitsOutcome; + XcmV3WeightLimit: XcmV3WeightLimit; + XcmV3Xcm: XcmV3Xcm; XcmVersion: XcmVersion; + XcmVersionedAssetId: XcmVersionedAssetId; XcmVersionedMultiAsset: XcmVersionedMultiAsset; XcmVersionedMultiAssets: XcmVersionedMultiAssets; XcmVersionedMultiLocation: XcmVersionedMultiLocation; + XcmVersionedResponse: XcmVersionedResponse; XcmVersionedXcm: XcmVersionedXcm; } // InterfaceTypes } // declare module diff --git a/tests/src/interfaces/default/index.ts b/tests/src/interfaces/default/index.ts index 2d307291c3..7f1de782f7 100644 --- a/tests/src/interfaces/default/index.ts +++ b/tests/src/interfaces/default/index.ts @@ -1,4 +1,4 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -export * from './types'; +export * from './types.js'; diff --git a/tests/src/interfaces/default/types.ts b/tests/src/interfaces/default/types.ts index 6f4083c26b..ef4feb7a37 100644 --- a/tests/src/interfaces/default/types.ts +++ b/tests/src/interfaces/default/types.ts @@ -12,7 +12,7 @@ export interface CumulusPalletDmpQueueCall extends Enum { readonly isServiceOverweight: boolean; readonly asServiceOverweight: { readonly index: u64; - readonly weightLimit: u64; + readonly weightLimit: SpWeightsWeightV2Weight; } & Struct; readonly type: 'ServiceOverweight'; } @@ -42,7 +42,7 @@ export interface CumulusPalletDmpQueueEvent extends Enum { readonly isExecutedDownward: boolean; readonly asExecutedDownward: { readonly messageId: U8aFixed; - readonly outcome: XcmV2TraitsOutcome; + readonly outcome: XcmV3TraitsOutcome; } & Struct; readonly isWeightExhausted: boolean; readonly asWeightExhausted: { @@ -61,7 +61,11 @@ export interface CumulusPalletDmpQueueEvent extends Enum { readonly overweightIndex: u64; readonly weightUsed: SpWeightsWeightV2Weight; } & Struct; - readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced'; + readonly isMaxMessagesExhausted: boolean; + readonly asMaxMessagesExhausted: { + readonly messageId: U8aFixed; + } & Struct; + readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced' | 'MaxMessagesExhausted'; } /** @name CumulusPalletDmpQueuePageIndexData */ @@ -126,7 +130,11 @@ export interface CumulusPalletParachainSystemEvent extends Enum { readonly weightUsed: SpWeightsWeightV2Weight; readonly dmqHead: H256; } & Struct; - readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed'; + readonly isUpwardMessageSent: boolean; + readonly asUpwardMessageSent: { + readonly messageHash: Option; + } & Struct; + readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed' | 'UpwardMessageSent'; } /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot */ @@ -150,7 +158,7 @@ export interface CumulusPalletXcmEvent extends Enum { readonly isUnsupportedVersion: boolean; readonly asUnsupportedVersion: U8aFixed; readonly isExecutedDownward: boolean; - readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>; + readonly asExecutedDownward: ITuple<[U8aFixed, XcmV3TraitsOutcome]>; readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward'; } @@ -159,7 +167,7 @@ export interface CumulusPalletXcmpQueueCall extends Enum { readonly isServiceOverweight: boolean; readonly asServiceOverweight: { readonly index: u64; - readonly weightLimit: u64; + readonly weightLimit: SpWeightsWeightV2Weight; } & Struct; readonly isSuspendXcmExecution: boolean; readonly isResumeXcmExecution: boolean; @@ -177,15 +185,15 @@ export interface CumulusPalletXcmpQueueCall extends Enum { } & Struct; readonly isUpdateThresholdWeight: boolean; readonly asUpdateThresholdWeight: { - readonly new_: u64; + readonly new_: SpWeightsWeightV2Weight; } & Struct; readonly isUpdateWeightRestrictDecay: boolean; readonly asUpdateWeightRestrictDecay: { - readonly new_: u64; + readonly new_: SpWeightsWeightV2Weight; } & Struct; readonly isUpdateXcmpMaxIndividualWeight: boolean; readonly asUpdateXcmpMaxIndividualWeight: { - readonly new_: u64; + readonly new_: SpWeightsWeightV2Weight; } & Struct; readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight'; } @@ -204,30 +212,26 @@ export interface CumulusPalletXcmpQueueError extends Enum { export interface CumulusPalletXcmpQueueEvent extends Enum { readonly isSuccess: boolean; readonly asSuccess: { - readonly messageHash: Option; + readonly messageHash: Option; readonly weight: SpWeightsWeightV2Weight; } & Struct; readonly isFail: boolean; readonly asFail: { - readonly messageHash: Option; - readonly error: XcmV2TraitsError; + readonly messageHash: Option; + readonly error: XcmV3TraitsError; readonly weight: SpWeightsWeightV2Weight; } & Struct; readonly isBadVersion: boolean; readonly asBadVersion: { - readonly messageHash: Option; + readonly messageHash: Option; } & Struct; readonly isBadFormat: boolean; readonly asBadFormat: { - readonly messageHash: Option; - } & Struct; - readonly isUpwardMessageSent: boolean; - readonly asUpwardMessageSent: { - readonly messageHash: Option; + readonly messageHash: Option; } & Struct; readonly isXcmpMessageSent: boolean; readonly asXcmpMessageSent: { - readonly messageHash: Option; + readonly messageHash: Option; } & Struct; readonly isOverweightEnqueued: boolean; readonly asOverweightEnqueued: { @@ -241,7 +245,7 @@ export interface CumulusPalletXcmpQueueEvent extends Enum { readonly index: u64; readonly used: SpWeightsWeightV2Weight; } & Struct; - readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced'; + readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced'; } /** @name CumulusPalletXcmpQueueInboundChannelDetails */ @@ -853,7 +857,19 @@ export interface OrmlTokensModuleEvent extends Enum { readonly currencyId: PalletForeignAssetsAssetIds; readonly who: AccountId32; } & Struct; - readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'BalanceSet' | 'TotalIssuanceSet' | 'Withdrawn' | 'Slashed' | 'Deposited' | 'LockSet' | 'LockRemoved'; + readonly isLocked: boolean; + readonly asLocked: { + readonly currencyId: PalletForeignAssetsAssetIds; + readonly who: AccountId32; + readonly amount: u128; + } & Struct; + readonly isUnlocked: boolean; + readonly asUnlocked: { + readonly currencyId: PalletForeignAssetsAssetIds; + readonly who: AccountId32; + readonly amount: u128; + } & Struct; + readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'BalanceSet' | 'TotalIssuanceSet' | 'Withdrawn' | 'Slashed' | 'Deposited' | 'LockSet' | 'LockRemoved' | 'Locked' | 'Unlocked'; } /** @name OrmlTokensReserveData */ @@ -928,13 +944,13 @@ export interface OrmlXtokensModuleCall extends Enum { readonly currencyId: PalletForeignAssetsAssetIds; readonly amount: u128; readonly dest: XcmVersionedMultiLocation; - readonly destWeightLimit: XcmV2WeightLimit; + readonly destWeightLimit: XcmV3WeightLimit; } & Struct; readonly isTransferMultiasset: boolean; readonly asTransferMultiasset: { readonly asset: XcmVersionedMultiAsset; readonly dest: XcmVersionedMultiLocation; - readonly destWeightLimit: XcmV2WeightLimit; + readonly destWeightLimit: XcmV3WeightLimit; } & Struct; readonly isTransferWithFee: boolean; readonly asTransferWithFee: { @@ -942,28 +958,28 @@ export interface OrmlXtokensModuleCall extends Enum { readonly amount: u128; readonly fee: u128; readonly dest: XcmVersionedMultiLocation; - readonly destWeightLimit: XcmV2WeightLimit; + readonly destWeightLimit: XcmV3WeightLimit; } & Struct; readonly isTransferMultiassetWithFee: boolean; readonly asTransferMultiassetWithFee: { readonly asset: XcmVersionedMultiAsset; readonly fee: XcmVersionedMultiAsset; readonly dest: XcmVersionedMultiLocation; - readonly destWeightLimit: XcmV2WeightLimit; + readonly destWeightLimit: XcmV3WeightLimit; } & Struct; readonly isTransferMulticurrencies: boolean; readonly asTransferMulticurrencies: { readonly currencies: Vec>; readonly feeItem: u32; readonly dest: XcmVersionedMultiLocation; - readonly destWeightLimit: XcmV2WeightLimit; + readonly destWeightLimit: XcmV3WeightLimit; } & Struct; readonly isTransferMultiassets: boolean; readonly asTransferMultiassets: { readonly assets: XcmVersionedMultiAssets; readonly feeItem: u32; readonly dest: XcmVersionedMultiLocation; - readonly destWeightLimit: XcmV2WeightLimit; + readonly destWeightLimit: XcmV3WeightLimit; } & Struct; readonly type: 'Transfer' | 'TransferMultiasset' | 'TransferWithFee' | 'TransferMultiassetWithFee' | 'TransferMulticurrencies' | 'TransferMultiassets'; } @@ -997,9 +1013,9 @@ export interface OrmlXtokensModuleEvent extends Enum { readonly isTransferredMultiAssets: boolean; readonly asTransferredMultiAssets: { readonly sender: AccountId32; - readonly assets: XcmV1MultiassetMultiAssets; - readonly fee: XcmV1MultiAsset; - readonly dest: XcmV1MultiLocation; + readonly assets: XcmV3MultiassetMultiAssets; + readonly fee: XcmV3MultiAsset; + readonly dest: XcmV3MultiLocation; } & Struct; readonly type: 'TransferredMultiAssets'; } @@ -1067,36 +1083,6 @@ export interface PalletAppPromotionEvent extends Enum { readonly type: 'StakingRecalculation' | 'Stake' | 'Unstake' | 'SetAdmin'; } -/** @name PalletAuthorshipCall */ -export interface PalletAuthorshipCall extends Enum { - readonly isSetUncles: boolean; - readonly asSetUncles: { - readonly newUncles: Vec; - } & Struct; - readonly type: 'SetUncles'; -} - -/** @name PalletAuthorshipError */ -export interface PalletAuthorshipError extends Enum { - readonly isInvalidUncleParent: boolean; - readonly isUnclesAlreadySet: boolean; - readonly isTooManyUncles: boolean; - readonly isGenesisUncle: boolean; - readonly isTooHighUncle: boolean; - readonly isUncleAlreadyIncluded: boolean; - readonly isOldUncle: boolean; - readonly type: 'InvalidUncleParent' | 'UnclesAlreadySet' | 'TooManyUncles' | 'GenesisUncle' | 'TooHighUncle' | 'UncleAlreadyIncluded' | 'OldUncle'; -} - -/** @name PalletAuthorshipUncleEntryItem */ -export interface PalletAuthorshipUncleEntryItem extends Enum { - readonly isInclusionHeight: boolean; - readonly asInclusionHeight: u32; - readonly isUncle: boolean; - readonly asUncle: ITuple<[H256, Option]>; - readonly type: 'InclusionHeight' | 'Uncle'; -} - /** @name PalletBalancesAccountData */ export interface PalletBalancesAccountData extends Struct { readonly free: u128; @@ -1414,10 +1400,6 @@ export interface PalletConfigurationCall extends Enum { readonly asSetMinGasPriceOverride: { readonly coeff: Option; } & Struct; - readonly isSetXcmAllowedLocations: boolean; - readonly asSetXcmAllowedLocations: { - readonly locations: Option>; - } & Struct; readonly isSetAppPromotionConfigurationOverride: boolean; readonly asSetAppPromotionConfigurationOverride: { readonly configuration: PalletConfigurationAppPromotionConfiguration; @@ -1434,7 +1416,7 @@ export interface PalletConfigurationCall extends Enum { readonly asSetCollatorSelectionKickThreshold: { readonly threshold: Option; } & Struct; - readonly type: 'SetWeightToFeeCoefficientOverride' | 'SetMinGasPriceOverride' | 'SetXcmAllowedLocations' | 'SetAppPromotionConfigurationOverride' | 'SetCollatorSelectionDesiredCollators' | 'SetCollatorSelectionLicenseBond' | 'SetCollatorSelectionKickThreshold'; + readonly type: 'SetWeightToFeeCoefficientOverride' | 'SetMinGasPriceOverride' | 'SetAppPromotionConfigurationOverride' | 'SetCollatorSelectionDesiredCollators' | 'SetCollatorSelectionLicenseBond' | 'SetCollatorSelectionKickThreshold'; } /** @name PalletConfigurationError */ @@ -1545,6 +1527,12 @@ export interface PalletEvmCall extends Enum { readonly type: 'Withdraw' | 'Call' | 'Create' | 'Create2'; } +/** @name PalletEvmCoderSubstrateCall */ +export interface PalletEvmCoderSubstrateCall extends Enum { + readonly isEmptyCall: boolean; + readonly type: 'EmptyCall'; +} + /** @name PalletEvmCoderSubstrateError */ export interface PalletEvmCoderSubstrateError extends Enum { readonly isOutOfGas: boolean; @@ -1552,6 +1540,15 @@ export interface PalletEvmCoderSubstrateError extends Enum { readonly type: 'OutOfGas' | 'OutOfFund'; } +/** @name PalletEvmContractHelpersCall */ +export interface PalletEvmContractHelpersCall extends Enum { + readonly isMigrateFromSelfSponsoring: boolean; + readonly asMigrateFromSelfSponsoring: { + readonly addresses: Vec; + } & Struct; + readonly type: 'MigrateFromSelfSponsoring'; +} + /** @name PalletEvmContractHelpersError */ export interface PalletEvmContractHelpersError extends Enum { readonly isNoPermission: boolean; @@ -1710,13 +1707,13 @@ export interface PalletForeignAssetsModuleEvent extends Enum { readonly isForeignAssetRegistered: boolean; readonly asForeignAssetRegistered: { readonly assetId: u32; - readonly assetAddress: XcmV1MultiLocation; + readonly assetAddress: XcmV3MultiLocation; readonly metadata: PalletForeignAssetsModuleAssetMetadata; } & Struct; readonly isForeignAssetUpdated: boolean; readonly asForeignAssetUpdated: { readonly assetId: u32; - readonly assetAddress: XcmV1MultiLocation; + readonly assetAddress: XcmV3MultiLocation; readonly metadata: PalletForeignAssetsModuleAssetMetadata; } & Struct; readonly isAssetRegistered: boolean; @@ -2576,11 +2573,11 @@ export interface PalletXcmCall extends Enum { readonly isExecute: boolean; readonly asExecute: { readonly message: XcmVersionedXcm; - readonly maxWeight: u64; + readonly maxWeight: SpWeightsWeightV2Weight; } & Struct; readonly isForceXcmVersion: boolean; readonly asForceXcmVersion: { - readonly location: XcmV1MultiLocation; + readonly location: XcmV3MultiLocation; readonly xcmVersion: u32; } & Struct; readonly isForceDefaultXcmVersion: boolean; @@ -2601,7 +2598,7 @@ export interface PalletXcmCall extends Enum { readonly beneficiary: XcmVersionedMultiLocation; readonly assets: XcmVersionedMultiAssets; readonly feeAssetItem: u32; - readonly weightLimit: XcmV2WeightLimit; + readonly weightLimit: XcmV3WeightLimit; } & Struct; readonly isLimitedTeleportAssets: boolean; readonly asLimitedTeleportAssets: { @@ -2609,7 +2606,7 @@ export interface PalletXcmCall extends Enum { readonly beneficiary: XcmVersionedMultiLocation; readonly assets: XcmVersionedMultiAssets; readonly feeAssetItem: u32; - readonly weightLimit: XcmV2WeightLimit; + readonly weightLimit: XcmV3WeightLimit; } & Struct; readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets'; } @@ -2629,19 +2626,26 @@ export interface PalletXcmError extends Enum { readonly isBadLocation: boolean; readonly isNoSubscription: boolean; readonly isAlreadySubscribed: boolean; - readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed'; + readonly isInvalidAsset: boolean; + readonly isLowBalance: boolean; + readonly isTooManyLocks: boolean; + readonly isAccountNotSovereign: boolean; + readonly isFeesNotMet: boolean; + readonly isLockNotFound: boolean; + readonly isInUse: boolean; + readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed' | 'InvalidAsset' | 'LowBalance' | 'TooManyLocks' | 'AccountNotSovereign' | 'FeesNotMet' | 'LockNotFound' | 'InUse'; } /** @name PalletXcmEvent */ export interface PalletXcmEvent extends Enum { readonly isAttempted: boolean; - readonly asAttempted: XcmV2TraitsOutcome; + readonly asAttempted: XcmV3TraitsOutcome; readonly isSent: boolean; - readonly asSent: ITuple<[XcmV1MultiLocation, XcmV1MultiLocation, XcmV2Xcm]>; + readonly asSent: ITuple<[XcmV3MultiLocation, XcmV3MultiLocation, XcmV3Xcm]>; readonly isUnexpectedResponse: boolean; - readonly asUnexpectedResponse: ITuple<[XcmV1MultiLocation, u64]>; + readonly asUnexpectedResponse: ITuple<[XcmV3MultiLocation, u64]>; readonly isResponseReady: boolean; - readonly asResponseReady: ITuple<[u64, XcmV2Response]>; + readonly asResponseReady: ITuple<[u64, XcmV3Response]>; readonly isNotified: boolean; readonly asNotified: ITuple<[u64, u8, u8]>; readonly isNotifyOverweight: boolean; @@ -2651,26 +2655,81 @@ export interface PalletXcmEvent extends Enum { readonly isNotifyDecodeFailed: boolean; readonly asNotifyDecodeFailed: ITuple<[u64, u8, u8]>; readonly isInvalidResponder: boolean; - readonly asInvalidResponder: ITuple<[XcmV1MultiLocation, u64, Option]>; + readonly asInvalidResponder: ITuple<[XcmV3MultiLocation, u64, Option]>; readonly isInvalidResponderVersion: boolean; - readonly asInvalidResponderVersion: ITuple<[XcmV1MultiLocation, u64]>; + readonly asInvalidResponderVersion: ITuple<[XcmV3MultiLocation, u64]>; readonly isResponseTaken: boolean; readonly asResponseTaken: u64; readonly isAssetsTrapped: boolean; - readonly asAssetsTrapped: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>; + readonly asAssetsTrapped: ITuple<[H256, XcmV3MultiLocation, XcmVersionedMultiAssets]>; readonly isVersionChangeNotified: boolean; - readonly asVersionChangeNotified: ITuple<[XcmV1MultiLocation, u32]>; + readonly asVersionChangeNotified: ITuple<[XcmV3MultiLocation, u32, XcmV3MultiassetMultiAssets]>; readonly isSupportedVersionChanged: boolean; - readonly asSupportedVersionChanged: ITuple<[XcmV1MultiLocation, u32]>; + readonly asSupportedVersionChanged: ITuple<[XcmV3MultiLocation, u32]>; readonly isNotifyTargetSendFail: boolean; - readonly asNotifyTargetSendFail: ITuple<[XcmV1MultiLocation, u64, XcmV2TraitsError]>; + readonly asNotifyTargetSendFail: ITuple<[XcmV3MultiLocation, u64, XcmV3TraitsError]>; readonly isNotifyTargetMigrationFail: boolean; readonly asNotifyTargetMigrationFail: ITuple<[XcmVersionedMultiLocation, u64]>; + readonly isInvalidQuerierVersion: boolean; + readonly asInvalidQuerierVersion: ITuple<[XcmV3MultiLocation, u64]>; + readonly isInvalidQuerier: boolean; + readonly asInvalidQuerier: ITuple<[XcmV3MultiLocation, u64, XcmV3MultiLocation, Option]>; + readonly isVersionNotifyStarted: boolean; + readonly asVersionNotifyStarted: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly isVersionNotifyRequested: boolean; + readonly asVersionNotifyRequested: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly isVersionNotifyUnrequested: boolean; + readonly asVersionNotifyUnrequested: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly isFeesPaid: boolean; + readonly asFeesPaid: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; readonly isAssetsClaimed: boolean; - readonly asAssetsClaimed: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>; - readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail' | 'AssetsClaimed'; + readonly asAssetsClaimed: ITuple<[H256, XcmV3MultiLocation, XcmVersionedMultiAssets]>; + readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail' | 'InvalidQuerierVersion' | 'InvalidQuerier' | 'VersionNotifyStarted' | 'VersionNotifyRequested' | 'VersionNotifyUnrequested' | 'FeesPaid' | 'AssetsClaimed'; } +/** @name PalletXcmQueryStatus */ +export interface PalletXcmQueryStatus extends Enum { + readonly isPending: boolean; + readonly asPending: { + readonly responder: XcmVersionedMultiLocation; + readonly maybeMatchQuerier: Option; + readonly maybeNotify: Option>; + readonly timeout: u32; + } & Struct; + readonly isVersionNotifier: boolean; + readonly asVersionNotifier: { + readonly origin: XcmVersionedMultiLocation; + readonly isActive: bool; + } & Struct; + readonly isReady: boolean; + readonly asReady: { + readonly response: XcmVersionedResponse; + readonly at: u32; + } & Struct; + readonly type: 'Pending' | 'VersionNotifier' | 'Ready'; +} + +/** @name PalletXcmRemoteLockedFungibleRecord */ +export interface PalletXcmRemoteLockedFungibleRecord extends Struct { + readonly amount: u128; + readonly owner: XcmVersionedMultiLocation; + readonly locker: XcmVersionedMultiLocation; + readonly users: u32; +} + +/** @name PalletXcmVersionMigrationStage */ +export interface PalletXcmVersionMigrationStage extends Enum { + readonly isMigrateSupportedVersion: boolean; + readonly isMigrateVersionNotifiers: boolean; + readonly isNotifyCurrentTargets: boolean; + readonly asNotifyCurrentTargets: Option; + readonly isMigrateAndNotifyOldTargets: boolean; + readonly type: 'MigrateSupportedVersion' | 'MigrateVersionNotifiers' | 'NotifyCurrentTargets' | 'MigrateAndNotifyOldTargets'; +} + +/** @name ParachainInfoCall */ +export interface ParachainInfoCall extends Null {} + /** @name PhantomTypeUpDataStructs */ export interface PhantomTypeUpDataStructs extends Vec> {} @@ -2763,9 +2822,6 @@ export interface SpCoreSr25519Public extends U8aFixed {} /** @name SpCoreSr25519Signature */ export interface SpCoreSr25519Signature extends U8aFixed {} -/** @name SpRuntimeBlakeTwo256 */ -export interface SpRuntimeBlakeTwo256 extends Null {} - /** @name SpRuntimeDigest */ export interface SpRuntimeDigest extends Struct { readonly logs: Vec; @@ -2807,15 +2863,6 @@ export interface SpRuntimeDispatchError extends Enum { readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional' | 'Exhausted' | 'Corruption' | 'Unavailable'; } -/** @name SpRuntimeHeader */ -export interface SpRuntimeHeader extends Struct { - readonly parentHash: H256; - readonly number: Compact; - readonly stateRoot: H256; - readonly extrinsicsRoot: H256; - readonly digest: SpRuntimeDigest; -} - /** @name SpRuntimeModuleError */ export interface SpRuntimeModuleError extends Struct { readonly index: u8; @@ -3059,7 +3106,7 @@ export interface UpDataStructsOwnerRestrictedSet extends BTreeSet {} export interface UpDataStructsProperties extends Struct { readonly map: UpDataStructsPropertiesMapBoundedVec; readonly consumedSpace: u32; - readonly spaceLimit: u32; + readonly reserved: u32; } /** @name UpDataStructsPropertiesMapBoundedVec */ @@ -3177,43 +3224,8 @@ export interface XcmDoubleEncoded extends Struct { readonly encoded: Bytes; } -/** @name XcmV0Junction */ -export interface XcmV0Junction extends Enum { - readonly isParent: boolean; - readonly isParachain: boolean; - readonly asParachain: Compact; - readonly isAccountId32: boolean; - readonly asAccountId32: { - readonly network: XcmV0JunctionNetworkId; - readonly id: U8aFixed; - } & Struct; - readonly isAccountIndex64: boolean; - readonly asAccountIndex64: { - readonly network: XcmV0JunctionNetworkId; - readonly index: Compact; - } & Struct; - readonly isAccountKey20: boolean; - readonly asAccountKey20: { - readonly network: XcmV0JunctionNetworkId; - readonly key: U8aFixed; - } & Struct; - readonly isPalletInstance: boolean; - readonly asPalletInstance: u8; - readonly isGeneralIndex: boolean; - readonly asGeneralIndex: Compact; - readonly isGeneralKey: boolean; - readonly asGeneralKey: Bytes; - readonly isOnlyChild: boolean; - readonly isPlurality: boolean; - readonly asPlurality: { - readonly id: XcmV0JunctionBodyId; - readonly part: XcmV0JunctionBodyPart; - } & Struct; - readonly type: 'Parent' | 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality'; -} - -/** @name XcmV0JunctionBodyId */ -export interface XcmV0JunctionBodyId extends Enum { +/** @name XcmV2BodyId */ +export interface XcmV2BodyId extends Enum { readonly isUnit: boolean; readonly isNamed: boolean; readonly asNamed: Bytes; @@ -3229,8 +3241,8 @@ export interface XcmV0JunctionBodyId extends Enum { readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; } -/** @name XcmV0JunctionBodyPart */ -export interface XcmV0JunctionBodyPart extends Enum { +/** @name XcmV2BodyPart */ +export interface XcmV2BodyPart extends Enum { readonly isVoice: boolean; readonly isMembers: boolean; readonly asMembers: { @@ -3254,184 +3266,35 @@ export interface XcmV0JunctionBodyPart extends Enum { readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; } -/** @name XcmV0JunctionNetworkId */ -export interface XcmV0JunctionNetworkId extends Enum { - readonly isAny: boolean; - readonly isNamed: boolean; - readonly asNamed: Bytes; - readonly isPolkadot: boolean; - readonly isKusama: boolean; - readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama'; -} - -/** @name XcmV0MultiAsset */ -export interface XcmV0MultiAsset extends Enum { - readonly isNone: boolean; - readonly isAll: boolean; - readonly isAllFungible: boolean; - readonly isAllNonFungible: boolean; - readonly isAllAbstractFungible: boolean; - readonly asAllAbstractFungible: { - readonly id: Bytes; - } & Struct; - readonly isAllAbstractNonFungible: boolean; - readonly asAllAbstractNonFungible: { - readonly class: Bytes; - } & Struct; - readonly isAllConcreteFungible: boolean; - readonly asAllConcreteFungible: { - readonly id: XcmV0MultiLocation; - } & Struct; - readonly isAllConcreteNonFungible: boolean; - readonly asAllConcreteNonFungible: { - readonly class: XcmV0MultiLocation; - } & Struct; - readonly isAbstractFungible: boolean; - readonly asAbstractFungible: { - readonly id: Bytes; - readonly amount: Compact; - } & Struct; - readonly isAbstractNonFungible: boolean; - readonly asAbstractNonFungible: { - readonly class: Bytes; - readonly instance: XcmV1MultiassetAssetInstance; - } & Struct; - readonly isConcreteFungible: boolean; - readonly asConcreteFungible: { - readonly id: XcmV0MultiLocation; - readonly amount: Compact; - } & Struct; - readonly isConcreteNonFungible: boolean; - readonly asConcreteNonFungible: { - readonly class: XcmV0MultiLocation; - readonly instance: XcmV1MultiassetAssetInstance; - } & Struct; - readonly type: 'None' | 'All' | 'AllFungible' | 'AllNonFungible' | 'AllAbstractFungible' | 'AllAbstractNonFungible' | 'AllConcreteFungible' | 'AllConcreteNonFungible' | 'AbstractFungible' | 'AbstractNonFungible' | 'ConcreteFungible' | 'ConcreteNonFungible'; -} - -/** @name XcmV0MultiLocation */ -export interface XcmV0MultiLocation extends Enum { - readonly isNull: boolean; - readonly isX1: boolean; - readonly asX1: XcmV0Junction; - readonly isX2: boolean; - readonly asX2: ITuple<[XcmV0Junction, XcmV0Junction]>; - readonly isX3: boolean; - readonly asX3: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction]>; - readonly isX4: boolean; - readonly asX4: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; - readonly isX5: boolean; - readonly asX5: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; - readonly isX6: boolean; - readonly asX6: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; - readonly isX7: boolean; - readonly asX7: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; - readonly isX8: boolean; - readonly asX8: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; - readonly type: 'Null' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; -} - -/** @name XcmV0Order */ -export interface XcmV0Order extends Enum { - readonly isNull: boolean; - readonly isDepositAsset: boolean; - readonly asDepositAsset: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; - } & Struct; - readonly isDepositReserveAsset: boolean; - readonly asDepositReserveAsset: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isExchangeAsset: boolean; - readonly asExchangeAsset: { - readonly give: Vec; - readonly receive: Vec; - } & Struct; - readonly isInitiateReserveWithdraw: boolean; - readonly asInitiateReserveWithdraw: { - readonly assets: Vec; - readonly reserve: XcmV0MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isInitiateTeleport: boolean; - readonly asInitiateTeleport: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isQueryHolding: boolean; - readonly asQueryHolding: { - readonly queryId: Compact; - readonly dest: XcmV0MultiLocation; - readonly assets: Vec; - } & Struct; - readonly isBuyExecution: boolean; - readonly asBuyExecution: { - readonly fees: XcmV0MultiAsset; - readonly weight: u64; - readonly debt: u64; - readonly haltOnError: bool; - readonly xcm: Vec; - } & Struct; - readonly type: 'Null' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution'; -} - -/** @name XcmV0OriginKind */ -export interface XcmV0OriginKind extends Enum { - readonly isNative: boolean; - readonly isSovereignAccount: boolean; - readonly isSuperuser: boolean; - readonly isXcm: boolean; - readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm'; -} - -/** @name XcmV0Response */ -export interface XcmV0Response extends Enum { - readonly isAssets: boolean; - readonly asAssets: Vec; - readonly type: 'Assets'; -} - -/** @name XcmV0Xcm */ -export interface XcmV0Xcm extends Enum { +/** @name XcmV2Instruction */ +export interface XcmV2Instruction extends Enum { readonly isWithdrawAsset: boolean; - readonly asWithdrawAsset: { - readonly assets: Vec; - readonly effects: Vec; - } & Struct; - readonly isReserveAssetDeposit: boolean; - readonly asReserveAssetDeposit: { - readonly assets: Vec; - readonly effects: Vec; - } & Struct; - readonly isTeleportAsset: boolean; - readonly asTeleportAsset: { - readonly assets: Vec; - readonly effects: Vec; - } & Struct; + readonly asWithdrawAsset: XcmV2MultiassetMultiAssets; + readonly isReserveAssetDeposited: boolean; + readonly asReserveAssetDeposited: XcmV2MultiassetMultiAssets; + readonly isReceiveTeleportedAsset: boolean; + readonly asReceiveTeleportedAsset: XcmV2MultiassetMultiAssets; readonly isQueryResponse: boolean; readonly asQueryResponse: { readonly queryId: Compact; - readonly response: XcmV0Response; + readonly response: XcmV2Response; + readonly maxWeight: Compact; } & Struct; readonly isTransferAsset: boolean; readonly asTransferAsset: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; + readonly assets: XcmV2MultiassetMultiAssets; + readonly beneficiary: XcmV2MultiLocation; } & Struct; readonly isTransferReserveAsset: boolean; readonly asTransferReserveAsset: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; - readonly effects: Vec; + readonly assets: XcmV2MultiassetMultiAssets; + readonly dest: XcmV2MultiLocation; + readonly xcm: XcmV2Xcm; } & Struct; readonly isTransact: boolean; readonly asTransact: { - readonly originType: XcmV0OriginKind; - readonly requireWeightAtMost: u64; + readonly originType: XcmV2OriginKind; + readonly requireWeightAtMost: Compact; readonly call: XcmDoubleEncoded; } & Struct; readonly isHrmpNewChannelOpenRequest: boolean; @@ -3450,31 +3313,96 @@ export interface XcmV0Xcm extends Enum { readonly sender: Compact; readonly recipient: Compact; } & Struct; - readonly isRelayedFrom: boolean; - readonly asRelayedFrom: { - readonly who: XcmV0MultiLocation; - readonly message: XcmV0Xcm; + readonly isClearOrigin: boolean; + readonly isDescendOrigin: boolean; + readonly asDescendOrigin: XcmV2MultilocationJunctions; + readonly isReportError: boolean; + readonly asReportError: { + readonly queryId: Compact; + readonly dest: XcmV2MultiLocation; + readonly maxResponseWeight: Compact; + } & Struct; + readonly isDepositAsset: boolean; + readonly asDepositAsset: { + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly maxAssets: Compact; + readonly beneficiary: XcmV2MultiLocation; + } & Struct; + readonly isDepositReserveAsset: boolean; + readonly asDepositReserveAsset: { + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly maxAssets: Compact; + readonly dest: XcmV2MultiLocation; + readonly xcm: XcmV2Xcm; + } & Struct; + readonly isExchangeAsset: boolean; + readonly asExchangeAsset: { + readonly give: XcmV2MultiassetMultiAssetFilter; + readonly receive: XcmV2MultiassetMultiAssets; + } & Struct; + readonly isInitiateReserveWithdraw: boolean; + readonly asInitiateReserveWithdraw: { + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly reserve: XcmV2MultiLocation; + readonly xcm: XcmV2Xcm; + } & Struct; + readonly isInitiateTeleport: boolean; + readonly asInitiateTeleport: { + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly dest: XcmV2MultiLocation; + readonly xcm: XcmV2Xcm; + } & Struct; + readonly isQueryHolding: boolean; + readonly asQueryHolding: { + readonly queryId: Compact; + readonly dest: XcmV2MultiLocation; + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly maxResponseWeight: Compact; + } & Struct; + readonly isBuyExecution: boolean; + readonly asBuyExecution: { + readonly fees: XcmV2MultiAsset; + readonly weightLimit: XcmV2WeightLimit; + } & Struct; + readonly isRefundSurplus: boolean; + readonly isSetErrorHandler: boolean; + readonly asSetErrorHandler: XcmV2Xcm; + readonly isSetAppendix: boolean; + readonly asSetAppendix: XcmV2Xcm; + readonly isClearError: boolean; + readonly isClaimAsset: boolean; + readonly asClaimAsset: { + readonly assets: XcmV2MultiassetMultiAssets; + readonly ticket: XcmV2MultiLocation; + } & Struct; + readonly isTrap: boolean; + readonly asTrap: Compact; + readonly isSubscribeVersion: boolean; + readonly asSubscribeVersion: { + readonly queryId: Compact; + readonly maxResponseWeight: Compact; } & Struct; - readonly type: 'WithdrawAsset' | 'ReserveAssetDeposit' | 'TeleportAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom'; + readonly isUnsubscribeVersion: boolean; + readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion'; } -/** @name XcmV1Junction */ -export interface XcmV1Junction extends Enum { +/** @name XcmV2Junction */ +export interface XcmV2Junction extends Enum { readonly isParachain: boolean; readonly asParachain: Compact; readonly isAccountId32: boolean; readonly asAccountId32: { - readonly network: XcmV0JunctionNetworkId; + readonly network: XcmV2NetworkId; readonly id: U8aFixed; } & Struct; readonly isAccountIndex64: boolean; readonly asAccountIndex64: { - readonly network: XcmV0JunctionNetworkId; + readonly network: XcmV2NetworkId; readonly index: Compact; } & Struct; readonly isAccountKey20: boolean; readonly asAccountKey20: { - readonly network: XcmV0JunctionNetworkId; + readonly network: XcmV2NetworkId; readonly key: U8aFixed; } & Struct; readonly isPalletInstance: boolean; @@ -3486,29 +3414,29 @@ export interface XcmV1Junction extends Enum { readonly isOnlyChild: boolean; readonly isPlurality: boolean; readonly asPlurality: { - readonly id: XcmV0JunctionBodyId; - readonly part: XcmV0JunctionBodyPart; + readonly id: XcmV2BodyId; + readonly part: XcmV2BodyPart; } & Struct; readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality'; } -/** @name XcmV1MultiAsset */ -export interface XcmV1MultiAsset extends Struct { - readonly id: XcmV1MultiassetAssetId; - readonly fun: XcmV1MultiassetFungibility; +/** @name XcmV2MultiAsset */ +export interface XcmV2MultiAsset extends Struct { + readonly id: XcmV2MultiassetAssetId; + readonly fun: XcmV2MultiassetFungibility; } -/** @name XcmV1MultiassetAssetId */ -export interface XcmV1MultiassetAssetId extends Enum { +/** @name XcmV2MultiassetAssetId */ +export interface XcmV2MultiassetAssetId extends Enum { readonly isConcrete: boolean; - readonly asConcrete: XcmV1MultiLocation; + readonly asConcrete: XcmV2MultiLocation; readonly isAbstract: boolean; readonly asAbstract: Bytes; readonly type: 'Concrete' | 'Abstract'; } -/** @name XcmV1MultiassetAssetInstance */ -export interface XcmV1MultiassetAssetInstance extends Enum { +/** @name XcmV2MultiassetAssetInstance */ +export interface XcmV2MultiassetAssetInstance extends Enum { readonly isUndefined: boolean; readonly isIndex: boolean; readonly asIndex: Compact; @@ -3525,230 +3453,178 @@ export interface XcmV1MultiassetAssetInstance extends Enum { readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob'; } -/** @name XcmV1MultiassetFungibility */ -export interface XcmV1MultiassetFungibility extends Enum { +/** @name XcmV2MultiassetFungibility */ +export interface XcmV2MultiassetFungibility extends Enum { readonly isFungible: boolean; readonly asFungible: Compact; readonly isNonFungible: boolean; - readonly asNonFungible: XcmV1MultiassetAssetInstance; + readonly asNonFungible: XcmV2MultiassetAssetInstance; readonly type: 'Fungible' | 'NonFungible'; } -/** @name XcmV1MultiassetMultiAssetFilter */ -export interface XcmV1MultiassetMultiAssetFilter extends Enum { +/** @name XcmV2MultiassetMultiAssetFilter */ +export interface XcmV2MultiassetMultiAssetFilter extends Enum { readonly isDefinite: boolean; - readonly asDefinite: XcmV1MultiassetMultiAssets; + readonly asDefinite: XcmV2MultiassetMultiAssets; readonly isWild: boolean; - readonly asWild: XcmV1MultiassetWildMultiAsset; + readonly asWild: XcmV2MultiassetWildMultiAsset; readonly type: 'Definite' | 'Wild'; } -/** @name XcmV1MultiassetMultiAssets */ -export interface XcmV1MultiassetMultiAssets extends Vec {} +/** @name XcmV2MultiassetMultiAssets */ +export interface XcmV2MultiassetMultiAssets extends Vec {} -/** @name XcmV1MultiassetWildFungibility */ -export interface XcmV1MultiassetWildFungibility extends Enum { +/** @name XcmV2MultiassetWildFungibility */ +export interface XcmV2MultiassetWildFungibility extends Enum { readonly isFungible: boolean; readonly isNonFungible: boolean; readonly type: 'Fungible' | 'NonFungible'; } -/** @name XcmV1MultiassetWildMultiAsset */ -export interface XcmV1MultiassetWildMultiAsset extends Enum { +/** @name XcmV2MultiassetWildMultiAsset */ +export interface XcmV2MultiassetWildMultiAsset extends Enum { readonly isAll: boolean; readonly isAllOf: boolean; readonly asAllOf: { - readonly id: XcmV1MultiassetAssetId; - readonly fun: XcmV1MultiassetWildFungibility; + readonly id: XcmV2MultiassetAssetId; + readonly fun: XcmV2MultiassetWildFungibility; } & Struct; readonly type: 'All' | 'AllOf'; } -/** @name XcmV1MultiLocation */ -export interface XcmV1MultiLocation extends Struct { +/** @name XcmV2MultiLocation */ +export interface XcmV2MultiLocation extends Struct { readonly parents: u8; - readonly interior: XcmV1MultilocationJunctions; + readonly interior: XcmV2MultilocationJunctions; } -/** @name XcmV1MultilocationJunctions */ -export interface XcmV1MultilocationJunctions extends Enum { +/** @name XcmV2MultilocationJunctions */ +export interface XcmV2MultilocationJunctions extends Enum { readonly isHere: boolean; readonly isX1: boolean; - readonly asX1: XcmV1Junction; + readonly asX1: XcmV2Junction; readonly isX2: boolean; - readonly asX2: ITuple<[XcmV1Junction, XcmV1Junction]>; + readonly asX2: ITuple<[XcmV2Junction, XcmV2Junction]>; readonly isX3: boolean; - readonly asX3: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX3: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX4: boolean; - readonly asX4: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX4: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX5: boolean; - readonly asX5: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX5: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX6: boolean; - readonly asX6: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX6: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX7: boolean; - readonly asX7: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX7: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX8: boolean; - readonly asX8: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX8: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; } -/** @name XcmV1Order */ -export interface XcmV1Order extends Enum { - readonly isNoop: boolean; - readonly isDepositAsset: boolean; - readonly asDepositAsset: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxAssets: u32; - readonly beneficiary: XcmV1MultiLocation; - } & Struct; - readonly isDepositReserveAsset: boolean; - readonly asDepositReserveAsset: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxAssets: u32; - readonly dest: XcmV1MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isExchangeAsset: boolean; - readonly asExchangeAsset: { - readonly give: XcmV1MultiassetMultiAssetFilter; - readonly receive: XcmV1MultiassetMultiAssets; - } & Struct; - readonly isInitiateReserveWithdraw: boolean; - readonly asInitiateReserveWithdraw: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly reserve: XcmV1MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isInitiateTeleport: boolean; - readonly asInitiateTeleport: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly dest: XcmV1MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isQueryHolding: boolean; - readonly asQueryHolding: { - readonly queryId: Compact; - readonly dest: XcmV1MultiLocation; - readonly assets: XcmV1MultiassetMultiAssetFilter; - } & Struct; - readonly isBuyExecution: boolean; - readonly asBuyExecution: { - readonly fees: XcmV1MultiAsset; - readonly weight: u64; - readonly debt: u64; - readonly haltOnError: bool; - readonly instructions: Vec; - } & Struct; - readonly type: 'Noop' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution'; +/** @name XcmV2NetworkId */ +export interface XcmV2NetworkId extends Enum { + readonly isAny: boolean; + readonly isNamed: boolean; + readonly asNamed: Bytes; + readonly isPolkadot: boolean; + readonly isKusama: boolean; + readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama'; +} + +/** @name XcmV2OriginKind */ +export interface XcmV2OriginKind extends Enum { + readonly isNative: boolean; + readonly isSovereignAccount: boolean; + readonly isSuperuser: boolean; + readonly isXcm: boolean; + readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm'; } -/** @name XcmV1Response */ -export interface XcmV1Response extends Enum { +/** @name XcmV2Response */ +export interface XcmV2Response extends Enum { + readonly isNull: boolean; readonly isAssets: boolean; - readonly asAssets: XcmV1MultiassetMultiAssets; + readonly asAssets: XcmV2MultiassetMultiAssets; + readonly isExecutionResult: boolean; + readonly asExecutionResult: Option>; readonly isVersion: boolean; readonly asVersion: u32; - readonly type: 'Assets' | 'Version'; + readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version'; } -/** @name XcmV1Xcm */ -export interface XcmV1Xcm extends Enum { - readonly isWithdrawAsset: boolean; - readonly asWithdrawAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly effects: Vec; - } & Struct; - readonly isReserveAssetDeposited: boolean; - readonly asReserveAssetDeposited: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly effects: Vec; - } & Struct; - readonly isReceiveTeleportedAsset: boolean; - readonly asReceiveTeleportedAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly effects: Vec; - } & Struct; - readonly isQueryResponse: boolean; - readonly asQueryResponse: { - readonly queryId: Compact; - readonly response: XcmV1Response; - } & Struct; - readonly isTransferAsset: boolean; - readonly asTransferAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly beneficiary: XcmV1MultiLocation; - } & Struct; - readonly isTransferReserveAsset: boolean; - readonly asTransferReserveAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly dest: XcmV1MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isTransact: boolean; - readonly asTransact: { - readonly originType: XcmV0OriginKind; - readonly requireWeightAtMost: u64; - readonly call: XcmDoubleEncoded; - } & Struct; - readonly isHrmpNewChannelOpenRequest: boolean; - readonly asHrmpNewChannelOpenRequest: { - readonly sender: Compact; - readonly maxMessageSize: Compact; - readonly maxCapacity: Compact; - } & Struct; - readonly isHrmpChannelAccepted: boolean; - readonly asHrmpChannelAccepted: { - readonly recipient: Compact; - } & Struct; - readonly isHrmpChannelClosing: boolean; - readonly asHrmpChannelClosing: { - readonly initiator: Compact; - readonly sender: Compact; - readonly recipient: Compact; - } & Struct; - readonly isRelayedFrom: boolean; - readonly asRelayedFrom: { - readonly who: XcmV1MultilocationJunctions; - readonly message: XcmV1Xcm; - } & Struct; - readonly isSubscribeVersion: boolean; - readonly asSubscribeVersion: { - readonly queryId: Compact; - readonly maxResponseWeight: Compact; - } & Struct; - readonly isUnsubscribeVersion: boolean; - readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom' | 'SubscribeVersion' | 'UnsubscribeVersion'; +/** @name XcmV2TraitsError */ +export interface XcmV2TraitsError extends Enum { + readonly isOverflow: boolean; + readonly isUnimplemented: boolean; + readonly isUntrustedReserveLocation: boolean; + readonly isUntrustedTeleportLocation: boolean; + readonly isMultiLocationFull: boolean; + readonly isMultiLocationNotInvertible: boolean; + readonly isBadOrigin: boolean; + readonly isInvalidLocation: boolean; + readonly isAssetNotFound: boolean; + readonly isFailedToTransactAsset: boolean; + readonly isNotWithdrawable: boolean; + readonly isLocationCannotHold: boolean; + readonly isExceedsMaxMessageSize: boolean; + readonly isDestinationUnsupported: boolean; + readonly isTransport: boolean; + readonly isUnroutable: boolean; + readonly isUnknownClaim: boolean; + readonly isFailedToDecode: boolean; + readonly isMaxWeightInvalid: boolean; + readonly isNotHoldingFees: boolean; + readonly isTooExpensive: boolean; + readonly isTrap: boolean; + readonly asTrap: u64; + readonly isUnhandledXcmVersion: boolean; + readonly isWeightLimitReached: boolean; + readonly asWeightLimitReached: u64; + readonly isBarrier: boolean; + readonly isWeightNotComputable: boolean; + readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable'; } -/** @name XcmV2Instruction */ -export interface XcmV2Instruction extends Enum { +/** @name XcmV2WeightLimit */ +export interface XcmV2WeightLimit extends Enum { + readonly isUnlimited: boolean; + readonly isLimited: boolean; + readonly asLimited: Compact; + readonly type: 'Unlimited' | 'Limited'; +} + +/** @name XcmV2Xcm */ +export interface XcmV2Xcm extends Vec {} + +/** @name XcmV3Instruction */ +export interface XcmV3Instruction extends Enum { readonly isWithdrawAsset: boolean; - readonly asWithdrawAsset: XcmV1MultiassetMultiAssets; + readonly asWithdrawAsset: XcmV3MultiassetMultiAssets; readonly isReserveAssetDeposited: boolean; - readonly asReserveAssetDeposited: XcmV1MultiassetMultiAssets; + readonly asReserveAssetDeposited: XcmV3MultiassetMultiAssets; readonly isReceiveTeleportedAsset: boolean; - readonly asReceiveTeleportedAsset: XcmV1MultiassetMultiAssets; + readonly asReceiveTeleportedAsset: XcmV3MultiassetMultiAssets; readonly isQueryResponse: boolean; readonly asQueryResponse: { readonly queryId: Compact; - readonly response: XcmV2Response; - readonly maxWeight: Compact; + readonly response: XcmV3Response; + readonly maxWeight: SpWeightsWeightV2Weight; + readonly querier: Option; } & Struct; readonly isTransferAsset: boolean; readonly asTransferAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly beneficiary: XcmV1MultiLocation; + readonly assets: XcmV3MultiassetMultiAssets; + readonly beneficiary: XcmV3MultiLocation; } & Struct; readonly isTransferReserveAsset: boolean; readonly asTransferReserveAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly dest: XcmV1MultiLocation; - readonly xcm: XcmV2Xcm; + readonly assets: XcmV3MultiassetMultiAssets; + readonly dest: XcmV3MultiLocation; + readonly xcm: XcmV3Xcm; } & Struct; readonly isTransact: boolean; readonly asTransact: { - readonly originType: XcmV0OriginKind; - readonly requireWeightAtMost: Compact; + readonly originKind: XcmV2OriginKind; + readonly requireWeightAtMost: SpWeightsWeightV2Weight; readonly call: XcmDoubleEncoded; } & Struct; readonly isHrmpNewChannelOpenRequest: boolean; @@ -3769,97 +3645,399 @@ export interface XcmV2Instruction extends Enum { } & Struct; readonly isClearOrigin: boolean; readonly isDescendOrigin: boolean; - readonly asDescendOrigin: XcmV1MultilocationJunctions; + readonly asDescendOrigin: XcmV3Junctions; readonly isReportError: boolean; - readonly asReportError: { - readonly queryId: Compact; - readonly dest: XcmV1MultiLocation; - readonly maxResponseWeight: Compact; - } & Struct; + readonly asReportError: XcmV3QueryResponseInfo; readonly isDepositAsset: boolean; readonly asDepositAsset: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxAssets: Compact; - readonly beneficiary: XcmV1MultiLocation; + readonly assets: XcmV3MultiassetMultiAssetFilter; + readonly beneficiary: XcmV3MultiLocation; } & Struct; readonly isDepositReserveAsset: boolean; readonly asDepositReserveAsset: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxAssets: Compact; - readonly dest: XcmV1MultiLocation; - readonly xcm: XcmV2Xcm; + readonly assets: XcmV3MultiassetMultiAssetFilter; + readonly dest: XcmV3MultiLocation; + readonly xcm: XcmV3Xcm; } & Struct; readonly isExchangeAsset: boolean; readonly asExchangeAsset: { - readonly give: XcmV1MultiassetMultiAssetFilter; - readonly receive: XcmV1MultiassetMultiAssets; + readonly give: XcmV3MultiassetMultiAssetFilter; + readonly want: XcmV3MultiassetMultiAssets; + readonly maximal: bool; } & Struct; readonly isInitiateReserveWithdraw: boolean; readonly asInitiateReserveWithdraw: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly reserve: XcmV1MultiLocation; - readonly xcm: XcmV2Xcm; + readonly assets: XcmV3MultiassetMultiAssetFilter; + readonly reserve: XcmV3MultiLocation; + readonly xcm: XcmV3Xcm; } & Struct; readonly isInitiateTeleport: boolean; readonly asInitiateTeleport: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly dest: XcmV1MultiLocation; - readonly xcm: XcmV2Xcm; + readonly assets: XcmV3MultiassetMultiAssetFilter; + readonly dest: XcmV3MultiLocation; + readonly xcm: XcmV3Xcm; } & Struct; - readonly isQueryHolding: boolean; - readonly asQueryHolding: { - readonly queryId: Compact; - readonly dest: XcmV1MultiLocation; - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxResponseWeight: Compact; + readonly isReportHolding: boolean; + readonly asReportHolding: { + readonly responseInfo: XcmV3QueryResponseInfo; + readonly assets: XcmV3MultiassetMultiAssetFilter; } & Struct; readonly isBuyExecution: boolean; readonly asBuyExecution: { - readonly fees: XcmV1MultiAsset; - readonly weightLimit: XcmV2WeightLimit; + readonly fees: XcmV3MultiAsset; + readonly weightLimit: XcmV3WeightLimit; } & Struct; readonly isRefundSurplus: boolean; readonly isSetErrorHandler: boolean; - readonly asSetErrorHandler: XcmV2Xcm; + readonly asSetErrorHandler: XcmV3Xcm; readonly isSetAppendix: boolean; - readonly asSetAppendix: XcmV2Xcm; + readonly asSetAppendix: XcmV3Xcm; readonly isClearError: boolean; readonly isClaimAsset: boolean; readonly asClaimAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly ticket: XcmV1MultiLocation; + readonly assets: XcmV3MultiassetMultiAssets; + readonly ticket: XcmV3MultiLocation; } & Struct; readonly isTrap: boolean; readonly asTrap: Compact; readonly isSubscribeVersion: boolean; readonly asSubscribeVersion: { readonly queryId: Compact; - readonly maxResponseWeight: Compact; + readonly maxResponseWeight: SpWeightsWeightV2Weight; } & Struct; readonly isUnsubscribeVersion: boolean; - readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion'; + readonly isBurnAsset: boolean; + readonly asBurnAsset: XcmV3MultiassetMultiAssets; + readonly isExpectAsset: boolean; + readonly asExpectAsset: XcmV3MultiassetMultiAssets; + readonly isExpectOrigin: boolean; + readonly asExpectOrigin: Option; + readonly isExpectError: boolean; + readonly asExpectError: Option>; + readonly isExpectTransactStatus: boolean; + readonly asExpectTransactStatus: XcmV3MaybeErrorCode; + readonly isQueryPallet: boolean; + readonly asQueryPallet: { + readonly moduleName: Bytes; + readonly responseInfo: XcmV3QueryResponseInfo; + } & Struct; + readonly isExpectPallet: boolean; + readonly asExpectPallet: { + readonly index: Compact; + readonly name: Bytes; + readonly moduleName: Bytes; + readonly crateMajor: Compact; + readonly minCrateMinor: Compact; + } & Struct; + readonly isReportTransactStatus: boolean; + readonly asReportTransactStatus: XcmV3QueryResponseInfo; + readonly isClearTransactStatus: boolean; + readonly isUniversalOrigin: boolean; + readonly asUniversalOrigin: XcmV3Junction; + readonly isExportMessage: boolean; + readonly asExportMessage: { + readonly network: XcmV3JunctionNetworkId; + readonly destination: XcmV3Junctions; + readonly xcm: XcmV3Xcm; + } & Struct; + readonly isLockAsset: boolean; + readonly asLockAsset: { + readonly asset: XcmV3MultiAsset; + readonly unlocker: XcmV3MultiLocation; + } & Struct; + readonly isUnlockAsset: boolean; + readonly asUnlockAsset: { + readonly asset: XcmV3MultiAsset; + readonly target: XcmV3MultiLocation; + } & Struct; + readonly isNoteUnlockable: boolean; + readonly asNoteUnlockable: { + readonly asset: XcmV3MultiAsset; + readonly owner: XcmV3MultiLocation; + } & Struct; + readonly isRequestUnlock: boolean; + readonly asRequestUnlock: { + readonly asset: XcmV3MultiAsset; + readonly locker: XcmV3MultiLocation; + } & Struct; + readonly isSetFeesMode: boolean; + readonly asSetFeesMode: { + readonly jitWithdraw: bool; + } & Struct; + readonly isSetTopic: boolean; + readonly asSetTopic: U8aFixed; + readonly isClearTopic: boolean; + readonly isAliasOrigin: boolean; + readonly asAliasOrigin: XcmV3MultiLocation; + readonly isUnpaidExecution: boolean; + readonly asUnpaidExecution: { + readonly weightLimit: XcmV3WeightLimit; + readonly checkOrigin: Option; + } & Struct; + readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'ReportHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion' | 'BurnAsset' | 'ExpectAsset' | 'ExpectOrigin' | 'ExpectError' | 'ExpectTransactStatus' | 'QueryPallet' | 'ExpectPallet' | 'ReportTransactStatus' | 'ClearTransactStatus' | 'UniversalOrigin' | 'ExportMessage' | 'LockAsset' | 'UnlockAsset' | 'NoteUnlockable' | 'RequestUnlock' | 'SetFeesMode' | 'SetTopic' | 'ClearTopic' | 'AliasOrigin' | 'UnpaidExecution'; +} + +/** @name XcmV3Junction */ +export interface XcmV3Junction extends Enum { + readonly isParachain: boolean; + readonly asParachain: Compact; + readonly isAccountId32: boolean; + readonly asAccountId32: { + readonly network: Option; + readonly id: U8aFixed; + } & Struct; + readonly isAccountIndex64: boolean; + readonly asAccountIndex64: { + readonly network: Option; + readonly index: Compact; + } & Struct; + readonly isAccountKey20: boolean; + readonly asAccountKey20: { + readonly network: Option; + readonly key: U8aFixed; + } & Struct; + readonly isPalletInstance: boolean; + readonly asPalletInstance: u8; + readonly isGeneralIndex: boolean; + readonly asGeneralIndex: Compact; + readonly isGeneralKey: boolean; + readonly asGeneralKey: { + readonly length: u8; + readonly data: U8aFixed; + } & Struct; + readonly isOnlyChild: boolean; + readonly isPlurality: boolean; + readonly asPlurality: { + readonly id: XcmV3JunctionBodyId; + readonly part: XcmV3JunctionBodyPart; + } & Struct; + readonly isGlobalConsensus: boolean; + readonly asGlobalConsensus: XcmV3JunctionNetworkId; + readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality' | 'GlobalConsensus'; } -/** @name XcmV2Response */ -export interface XcmV2Response extends Enum { +/** @name XcmV3JunctionBodyId */ +export interface XcmV3JunctionBodyId extends Enum { + readonly isUnit: boolean; + readonly isMoniker: boolean; + readonly asMoniker: U8aFixed; + readonly isIndex: boolean; + readonly asIndex: Compact; + readonly isExecutive: boolean; + readonly isTechnical: boolean; + readonly isLegislative: boolean; + readonly isJudicial: boolean; + readonly isDefense: boolean; + readonly isAdministration: boolean; + readonly isTreasury: boolean; + readonly type: 'Unit' | 'Moniker' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; +} + +/** @name XcmV3JunctionBodyPart */ +export interface XcmV3JunctionBodyPart extends Enum { + readonly isVoice: boolean; + readonly isMembers: boolean; + readonly asMembers: { + readonly count: Compact; + } & Struct; + readonly isFraction: boolean; + readonly asFraction: { + readonly nom: Compact; + readonly denom: Compact; + } & Struct; + readonly isAtLeastProportion: boolean; + readonly asAtLeastProportion: { + readonly nom: Compact; + readonly denom: Compact; + } & Struct; + readonly isMoreThanProportion: boolean; + readonly asMoreThanProportion: { + readonly nom: Compact; + readonly denom: Compact; + } & Struct; + readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; +} + +/** @name XcmV3JunctionNetworkId */ +export interface XcmV3JunctionNetworkId extends Enum { + readonly isByGenesis: boolean; + readonly asByGenesis: U8aFixed; + readonly isByFork: boolean; + readonly asByFork: { + readonly blockNumber: u64; + readonly blockHash: U8aFixed; + } & Struct; + readonly isPolkadot: boolean; + readonly isKusama: boolean; + readonly isWestend: boolean; + readonly isRococo: boolean; + readonly isWococo: boolean; + readonly isEthereum: boolean; + readonly asEthereum: { + readonly chainId: Compact; + } & Struct; + readonly isBitcoinCore: boolean; + readonly isBitcoinCash: boolean; + readonly type: 'ByGenesis' | 'ByFork' | 'Polkadot' | 'Kusama' | 'Westend' | 'Rococo' | 'Wococo' | 'Ethereum' | 'BitcoinCore' | 'BitcoinCash'; +} + +/** @name XcmV3Junctions */ +export interface XcmV3Junctions extends Enum { + readonly isHere: boolean; + readonly isX1: boolean; + readonly asX1: XcmV3Junction; + readonly isX2: boolean; + readonly asX2: ITuple<[XcmV3Junction, XcmV3Junction]>; + readonly isX3: boolean; + readonly asX3: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction]>; + readonly isX4: boolean; + readonly asX4: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; + readonly isX5: boolean; + readonly asX5: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; + readonly isX6: boolean; + readonly asX6: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; + readonly isX7: boolean; + readonly asX7: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; + readonly isX8: boolean; + readonly asX8: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; + readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; +} + +/** @name XcmV3MaybeErrorCode */ +export interface XcmV3MaybeErrorCode extends Enum { + readonly isSuccess: boolean; + readonly isError: boolean; + readonly asError: Bytes; + readonly isTruncatedError: boolean; + readonly asTruncatedError: Bytes; + readonly type: 'Success' | 'Error' | 'TruncatedError'; +} + +/** @name XcmV3MultiAsset */ +export interface XcmV3MultiAsset extends Struct { + readonly id: XcmV3MultiassetAssetId; + readonly fun: XcmV3MultiassetFungibility; +} + +/** @name XcmV3MultiassetAssetId */ +export interface XcmV3MultiassetAssetId extends Enum { + readonly isConcrete: boolean; + readonly asConcrete: XcmV3MultiLocation; + readonly isAbstract: boolean; + readonly asAbstract: U8aFixed; + readonly type: 'Concrete' | 'Abstract'; +} + +/** @name XcmV3MultiassetAssetInstance */ +export interface XcmV3MultiassetAssetInstance extends Enum { + readonly isUndefined: boolean; + readonly isIndex: boolean; + readonly asIndex: Compact; + readonly isArray4: boolean; + readonly asArray4: U8aFixed; + readonly isArray8: boolean; + readonly asArray8: U8aFixed; + readonly isArray16: boolean; + readonly asArray16: U8aFixed; + readonly isArray32: boolean; + readonly asArray32: U8aFixed; + readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32'; +} + +/** @name XcmV3MultiassetFungibility */ +export interface XcmV3MultiassetFungibility extends Enum { + readonly isFungible: boolean; + readonly asFungible: Compact; + readonly isNonFungible: boolean; + readonly asNonFungible: XcmV3MultiassetAssetInstance; + readonly type: 'Fungible' | 'NonFungible'; +} + +/** @name XcmV3MultiassetMultiAssetFilter */ +export interface XcmV3MultiassetMultiAssetFilter extends Enum { + readonly isDefinite: boolean; + readonly asDefinite: XcmV3MultiassetMultiAssets; + readonly isWild: boolean; + readonly asWild: XcmV3MultiassetWildMultiAsset; + readonly type: 'Definite' | 'Wild'; +} + +/** @name XcmV3MultiassetMultiAssets */ +export interface XcmV3MultiassetMultiAssets extends Vec {} + +/** @name XcmV3MultiassetWildFungibility */ +export interface XcmV3MultiassetWildFungibility extends Enum { + readonly isFungible: boolean; + readonly isNonFungible: boolean; + readonly type: 'Fungible' | 'NonFungible'; +} + +/** @name XcmV3MultiassetWildMultiAsset */ +export interface XcmV3MultiassetWildMultiAsset extends Enum { + readonly isAll: boolean; + readonly isAllOf: boolean; + readonly asAllOf: { + readonly id: XcmV3MultiassetAssetId; + readonly fun: XcmV3MultiassetWildFungibility; + } & Struct; + readonly isAllCounted: boolean; + readonly asAllCounted: Compact; + readonly isAllOfCounted: boolean; + readonly asAllOfCounted: { + readonly id: XcmV3MultiassetAssetId; + readonly fun: XcmV3MultiassetWildFungibility; + readonly count: Compact; + } & Struct; + readonly type: 'All' | 'AllOf' | 'AllCounted' | 'AllOfCounted'; +} + +/** @name XcmV3MultiLocation */ +export interface XcmV3MultiLocation extends Struct { + readonly parents: u8; + readonly interior: XcmV3Junctions; +} + +/** @name XcmV3PalletInfo */ +export interface XcmV3PalletInfo extends Struct { + readonly index: Compact; + readonly name: Bytes; + readonly moduleName: Bytes; + readonly major: Compact; + readonly minor: Compact; + readonly patch: Compact; +} + +/** @name XcmV3QueryResponseInfo */ +export interface XcmV3QueryResponseInfo extends Struct { + readonly destination: XcmV3MultiLocation; + readonly queryId: Compact; + readonly maxWeight: SpWeightsWeightV2Weight; +} + +/** @name XcmV3Response */ +export interface XcmV3Response extends Enum { readonly isNull: boolean; readonly isAssets: boolean; - readonly asAssets: XcmV1MultiassetMultiAssets; + readonly asAssets: XcmV3MultiassetMultiAssets; readonly isExecutionResult: boolean; - readonly asExecutionResult: Option>; + readonly asExecutionResult: Option>; readonly isVersion: boolean; readonly asVersion: u32; - readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version'; + readonly isPalletsInfo: boolean; + readonly asPalletsInfo: Vec; + readonly isDispatchResult: boolean; + readonly asDispatchResult: XcmV3MaybeErrorCode; + readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version' | 'PalletsInfo' | 'DispatchResult'; } -/** @name XcmV2TraitsError */ -export interface XcmV2TraitsError extends Enum { +/** @name XcmV3TraitsError */ +export interface XcmV3TraitsError extends Enum { readonly isOverflow: boolean; readonly isUnimplemented: boolean; readonly isUntrustedReserveLocation: boolean; readonly isUntrustedTeleportLocation: boolean; - readonly isMultiLocationFull: boolean; - readonly isMultiLocationNotInvertible: boolean; + readonly isLocationFull: boolean; + readonly isLocationNotInvertible: boolean; readonly isBadOrigin: boolean; readonly isInvalidLocation: boolean; readonly isAssetNotFound: boolean; @@ -3877,72 +4055,100 @@ export interface XcmV2TraitsError extends Enum { readonly isTooExpensive: boolean; readonly isTrap: boolean; readonly asTrap: u64; + readonly isExpectationFalse: boolean; + readonly isPalletNotFound: boolean; + readonly isNameMismatch: boolean; + readonly isVersionIncompatible: boolean; + readonly isHoldingWouldOverflow: boolean; + readonly isExportError: boolean; + readonly isReanchorFailed: boolean; + readonly isNoDeal: boolean; + readonly isFeesNotMet: boolean; + readonly isLockError: boolean; + readonly isNoPermission: boolean; + readonly isUnanchored: boolean; + readonly isNotDepositable: boolean; readonly isUnhandledXcmVersion: boolean; readonly isWeightLimitReached: boolean; - readonly asWeightLimitReached: u64; + readonly asWeightLimitReached: SpWeightsWeightV2Weight; readonly isBarrier: boolean; readonly isWeightNotComputable: boolean; - readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable'; + readonly isExceedsStackLimit: boolean; + readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'LocationFull' | 'LocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'ExpectationFalse' | 'PalletNotFound' | 'NameMismatch' | 'VersionIncompatible' | 'HoldingWouldOverflow' | 'ExportError' | 'ReanchorFailed' | 'NoDeal' | 'FeesNotMet' | 'LockError' | 'NoPermission' | 'Unanchored' | 'NotDepositable' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable' | 'ExceedsStackLimit'; } -/** @name XcmV2TraitsOutcome */ -export interface XcmV2TraitsOutcome extends Enum { +/** @name XcmV3TraitsOutcome */ +export interface XcmV3TraitsOutcome extends Enum { readonly isComplete: boolean; - readonly asComplete: u64; + readonly asComplete: SpWeightsWeightV2Weight; readonly isIncomplete: boolean; - readonly asIncomplete: ITuple<[u64, XcmV2TraitsError]>; + readonly asIncomplete: ITuple<[SpWeightsWeightV2Weight, XcmV3TraitsError]>; readonly isError: boolean; - readonly asError: XcmV2TraitsError; + readonly asError: XcmV3TraitsError; readonly type: 'Complete' | 'Incomplete' | 'Error'; } -/** @name XcmV2WeightLimit */ -export interface XcmV2WeightLimit extends Enum { +/** @name XcmV3WeightLimit */ +export interface XcmV3WeightLimit extends Enum { readonly isUnlimited: boolean; readonly isLimited: boolean; - readonly asLimited: Compact; + readonly asLimited: SpWeightsWeightV2Weight; readonly type: 'Unlimited' | 'Limited'; } -/** @name XcmV2Xcm */ -export interface XcmV2Xcm extends Vec {} +/** @name XcmV3Xcm */ +export interface XcmV3Xcm extends Vec {} + +/** @name XcmVersionedAssetId */ +export interface XcmVersionedAssetId extends Enum { + readonly isV3: boolean; + readonly asV3: XcmV3MultiassetAssetId; + readonly type: 'V3'; +} /** @name XcmVersionedMultiAsset */ export interface XcmVersionedMultiAsset extends Enum { - readonly isV0: boolean; - readonly asV0: XcmV0MultiAsset; - readonly isV1: boolean; - readonly asV1: XcmV1MultiAsset; - readonly type: 'V0' | 'V1'; + readonly isV2: boolean; + readonly asV2: XcmV2MultiAsset; + readonly isV3: boolean; + readonly asV3: XcmV3MultiAsset; + readonly type: 'V2' | 'V3'; } /** @name XcmVersionedMultiAssets */ export interface XcmVersionedMultiAssets extends Enum { - readonly isV0: boolean; - readonly asV0: Vec; - readonly isV1: boolean; - readonly asV1: XcmV1MultiassetMultiAssets; - readonly type: 'V0' | 'V1'; + readonly isV2: boolean; + readonly asV2: XcmV2MultiassetMultiAssets; + readonly isV3: boolean; + readonly asV3: XcmV3MultiassetMultiAssets; + readonly type: 'V2' | 'V3'; } /** @name XcmVersionedMultiLocation */ export interface XcmVersionedMultiLocation extends Enum { - readonly isV0: boolean; - readonly asV0: XcmV0MultiLocation; - readonly isV1: boolean; - readonly asV1: XcmV1MultiLocation; - readonly type: 'V0' | 'V1'; + readonly isV2: boolean; + readonly asV2: XcmV2MultiLocation; + readonly isV3: boolean; + readonly asV3: XcmV3MultiLocation; + readonly type: 'V2' | 'V3'; +} + +/** @name XcmVersionedResponse */ +export interface XcmVersionedResponse extends Enum { + readonly isV2: boolean; + readonly asV2: XcmV2Response; + readonly isV3: boolean; + readonly asV3: XcmV3Response; + readonly type: 'V2' | 'V3'; } /** @name XcmVersionedXcm */ export interface XcmVersionedXcm extends Enum { - readonly isV0: boolean; - readonly asV0: XcmV0Xcm; - readonly isV1: boolean; - readonly asV1: XcmV1Xcm; readonly isV2: boolean; readonly asV2: XcmV2Xcm; - readonly type: 'V0' | 'V1' | 'V2'; + readonly isV3: boolean; + readonly asV3: XcmV3Xcm; + readonly type: 'V2' | 'V3'; } export type PHANTOM_DEFAULT = 'default'; diff --git a/tests/src/interfaces/index.ts b/tests/src/interfaces/index.ts index 2d307291c3..7f1de782f7 100644 --- a/tests/src/interfaces/index.ts +++ b/tests/src/interfaces/index.ts @@ -1,4 +1,4 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -export * from './types'; +export * from './types.js'; diff --git a/tests/src/interfaces/lookup.ts b/tests/src/interfaces/lookup.ts index e5e20d1087..c00d56c2b1 100644 --- a/tests/src/interfaces/lookup.ts +++ b/tests/src/interfaces/lookup.ts @@ -179,12 +179,15 @@ export default { }, DownwardMessagesProcessed: { weightUsed: 'SpWeightsWeightV2Weight', - dmqHead: 'H256' + dmqHead: 'H256', + }, + UpwardMessageSent: { + messageHash: 'Option<[u8;32]>' } } }, /** - * Lookup30: pallet_collator_selection::pallet::Event + * Lookup31: pallet_collator_selection::pallet::Event **/ PalletCollatorSelectionEvent: { _enum: { @@ -211,7 +214,7 @@ export default { } }, /** - * Lookup31: pallet_session::pallet::Event + * Lookup32: pallet_session::pallet::Event **/ PalletSessionEvent: { _enum: { @@ -221,7 +224,7 @@ export default { } }, /** - * Lookup32: pallet_balances::pallet::Event + * Lookup33: pallet_balances::pallet::Event **/ PalletBalancesEvent: { _enum: { @@ -272,13 +275,13 @@ export default { } }, /** - * Lookup33: frame_support::traits::tokens::misc::BalanceStatus + * Lookup34: frame_support::traits::tokens::misc::BalanceStatus **/ FrameSupportTokensMiscBalanceStatus: { _enum: ['Free', 'Reserved'] }, /** - * Lookup34: pallet_transaction_payment::pallet::Event + * Lookup35: pallet_transaction_payment::pallet::Event **/ PalletTransactionPaymentEvent: { _enum: { @@ -290,7 +293,7 @@ export default { } }, /** - * Lookup35: pallet_treasury::pallet::Event + * Lookup36: pallet_treasury::pallet::Event **/ PalletTreasuryEvent: { _enum: { @@ -330,7 +333,7 @@ export default { } }, /** - * Lookup36: pallet_sudo::pallet::Event + * Lookup37: pallet_sudo::pallet::Event **/ PalletSudoEvent: { _enum: { @@ -346,7 +349,7 @@ export default { } }, /** - * Lookup40: orml_vesting::module::Event + * Lookup41: orml_vesting::module::Event **/ OrmlVestingModuleEvent: { _enum: { @@ -365,7 +368,7 @@ export default { } }, /** - * Lookup41: orml_vesting::VestingSchedule + * Lookup42: orml_vesting::VestingSchedule **/ OrmlVestingVestingSchedule: { start: 'u32', @@ -374,107 +377,122 @@ export default { perPeriod: 'Compact' }, /** - * Lookup43: orml_xtokens::module::Event + * Lookup44: orml_xtokens::module::Event **/ OrmlXtokensModuleEvent: { _enum: { TransferredMultiAssets: { sender: 'AccountId32', - assets: 'XcmV1MultiassetMultiAssets', - fee: 'XcmV1MultiAsset', - dest: 'XcmV1MultiLocation' + assets: 'XcmV3MultiassetMultiAssets', + fee: 'XcmV3MultiAsset', + dest: 'XcmV3MultiLocation' } } }, /** - * Lookup44: xcm::v1::multiasset::MultiAssets + * Lookup45: xcm::v3::multiasset::MultiAssets **/ - XcmV1MultiassetMultiAssets: 'Vec', + XcmV3MultiassetMultiAssets: 'Vec', /** - * Lookup46: xcm::v1::multiasset::MultiAsset + * Lookup47: xcm::v3::multiasset::MultiAsset **/ - XcmV1MultiAsset: { - id: 'XcmV1MultiassetAssetId', - fun: 'XcmV1MultiassetFungibility' + XcmV3MultiAsset: { + id: 'XcmV3MultiassetAssetId', + fun: 'XcmV3MultiassetFungibility' }, /** - * Lookup47: xcm::v1::multiasset::AssetId + * Lookup48: xcm::v3::multiasset::AssetId **/ - XcmV1MultiassetAssetId: { + XcmV3MultiassetAssetId: { _enum: { - Concrete: 'XcmV1MultiLocation', - Abstract: 'Bytes' + Concrete: 'XcmV3MultiLocation', + Abstract: '[u8;32]' } }, /** - * Lookup48: xcm::v1::multilocation::MultiLocation + * Lookup49: xcm::v3::multilocation::MultiLocation **/ - XcmV1MultiLocation: { + XcmV3MultiLocation: { parents: 'u8', - interior: 'XcmV1MultilocationJunctions' + interior: 'XcmV3Junctions' }, /** - * Lookup49: xcm::v1::multilocation::Junctions + * Lookup50: xcm::v3::junctions::Junctions **/ - XcmV1MultilocationJunctions: { + XcmV3Junctions: { _enum: { Here: 'Null', - X1: 'XcmV1Junction', - X2: '(XcmV1Junction,XcmV1Junction)', - X3: '(XcmV1Junction,XcmV1Junction,XcmV1Junction)', - X4: '(XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction)', - X5: '(XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction)', - X6: '(XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction)', - X7: '(XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction)', - X8: '(XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction)' + X1: 'XcmV3Junction', + X2: '(XcmV3Junction,XcmV3Junction)', + X3: '(XcmV3Junction,XcmV3Junction,XcmV3Junction)', + X4: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)', + X5: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)', + X6: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)', + X7: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)', + X8: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)' } }, /** - * Lookup50: xcm::v1::junction::Junction + * Lookup51: xcm::v3::junction::Junction **/ - XcmV1Junction: { + XcmV3Junction: { _enum: { Parachain: 'Compact', AccountId32: { - network: 'XcmV0JunctionNetworkId', + network: 'Option', id: '[u8;32]', }, AccountIndex64: { - network: 'XcmV0JunctionNetworkId', + network: 'Option', index: 'Compact', }, AccountKey20: { - network: 'XcmV0JunctionNetworkId', + network: 'Option', key: '[u8;20]', }, PalletInstance: 'u8', GeneralIndex: 'Compact', - GeneralKey: 'Bytes', + GeneralKey: { + length: 'u8', + data: '[u8;32]', + }, OnlyChild: 'Null', Plurality: { - id: 'XcmV0JunctionBodyId', - part: 'XcmV0JunctionBodyPart' - } + id: 'XcmV3JunctionBodyId', + part: 'XcmV3JunctionBodyPart', + }, + GlobalConsensus: 'XcmV3JunctionNetworkId' } }, /** - * Lookup52: xcm::v0::junction::NetworkId + * Lookup54: xcm::v3::junction::NetworkId **/ - XcmV0JunctionNetworkId: { + XcmV3JunctionNetworkId: { _enum: { - Any: 'Null', - Named: 'Bytes', + ByGenesis: '[u8;32]', + ByFork: { + blockNumber: 'u64', + blockHash: '[u8;32]', + }, Polkadot: 'Null', - Kusama: 'Null' + Kusama: 'Null', + Westend: 'Null', + Rococo: 'Null', + Wococo: 'Null', + Ethereum: { + chainId: 'Compact', + }, + BitcoinCore: 'Null', + BitcoinCash: 'Null' } }, /** - * Lookup55: xcm::v0::junction::BodyId + * Lookup56: xcm::v3::junction::BodyId **/ - XcmV0JunctionBodyId: { + XcmV3JunctionBodyId: { _enum: { Unit: 'Null', - Named: 'Bytes', + Moniker: '[u8;4]', Index: 'Compact', Executive: 'Null', Technical: 'Null', @@ -486,9 +504,9 @@ export default { } }, /** - * Lookup56: xcm::v0::junction::BodyPart + * Lookup57: xcm::v3::junction::BodyPart **/ - XcmV0JunctionBodyPart: { + XcmV3JunctionBodyPart: { _enum: { Voice: 'Null', Members: { @@ -509,30 +527,29 @@ export default { } }, /** - * Lookup57: xcm::v1::multiasset::Fungibility + * Lookup58: xcm::v3::multiasset::Fungibility **/ - XcmV1MultiassetFungibility: { + XcmV3MultiassetFungibility: { _enum: { Fungible: 'Compact', - NonFungible: 'XcmV1MultiassetAssetInstance' + NonFungible: 'XcmV3MultiassetAssetInstance' } }, /** - * Lookup58: xcm::v1::multiasset::AssetInstance + * Lookup59: xcm::v3::multiasset::AssetInstance **/ - XcmV1MultiassetAssetInstance: { + XcmV3MultiassetAssetInstance: { _enum: { Undefined: 'Null', Index: 'Compact', Array4: '[u8;4]', Array8: '[u8;8]', Array16: '[u8;16]', - Array32: '[u8;32]', - Blob: 'Bytes' + Array32: '[u8;32]' } }, /** - * Lookup61: orml_tokens::module::Event + * Lookup62: orml_tokens::module::Event **/ OrmlTokensModuleEvent: { _enum: { @@ -604,12 +621,22 @@ export default { LockRemoved: { lockId: '[u8;8]', currencyId: 'PalletForeignAssetsAssetIds', - who: 'AccountId32' + who: 'AccountId32', + }, + Locked: { + currencyId: 'PalletForeignAssetsAssetIds', + who: 'AccountId32', + amount: 'u128', + }, + Unlocked: { + currencyId: 'PalletForeignAssetsAssetIds', + who: 'AccountId32', + amount: 'u128' } } }, /** - * Lookup62: pallet_foreign_assets::AssetIds + * Lookup63: pallet_foreign_assets::AssetIds **/ PalletForeignAssetsAssetIds: { _enum: { @@ -618,13 +645,13 @@ export default { } }, /** - * Lookup63: pallet_foreign_assets::NativeCurrency + * Lookup64: pallet_foreign_assets::NativeCurrency **/ PalletForeignAssetsNativeCurrency: { _enum: ['Here', 'Parent'] }, /** - * Lookup64: pallet_identity::pallet::Event + * Lookup65: pallet_identity::pallet::Event **/ PalletIdentityEvent: { _enum: { @@ -681,7 +708,7 @@ export default { } }, /** - * Lookup65: pallet_preimage::pallet::Event + * Lookup66: pallet_preimage::pallet::Event **/ PalletPreimageEvent: { _enum: { @@ -706,30 +733,27 @@ export default { } }, /** - * Lookup66: cumulus_pallet_xcmp_queue::pallet::Event + * Lookup67: cumulus_pallet_xcmp_queue::pallet::Event **/ CumulusPalletXcmpQueueEvent: { _enum: { Success: { - messageHash: 'Option', + messageHash: 'Option<[u8;32]>', weight: 'SpWeightsWeightV2Weight', }, Fail: { - messageHash: 'Option', - error: 'XcmV2TraitsError', + messageHash: 'Option<[u8;32]>', + error: 'XcmV3TraitsError', weight: 'SpWeightsWeightV2Weight', }, BadVersion: { - messageHash: 'Option', + messageHash: 'Option<[u8;32]>', }, BadFormat: { - messageHash: 'Option', - }, - UpwardMessageSent: { - messageHash: 'Option', + messageHash: 'Option<[u8;32]>', }, XcmpMessageSent: { - messageHash: 'Option', + messageHash: 'Option<[u8;32]>', }, OverweightEnqueued: { sender: 'u32', @@ -744,16 +768,16 @@ export default { } }, /** - * Lookup68: xcm::v2::traits::Error + * Lookup68: xcm::v3::traits::Error **/ - XcmV2TraitsError: { + XcmV3TraitsError: { _enum: { Overflow: 'Null', Unimplemented: 'Null', UntrustedReserveLocation: 'Null', UntrustedTeleportLocation: 'Null', - MultiLocationFull: 'Null', - MultiLocationNotInvertible: 'Null', + LocationFull: 'Null', + LocationNotInvertible: 'Null', BadOrigin: 'Null', InvalidLocation: 'Null', AssetNotFound: 'Null', @@ -770,10 +794,24 @@ export default { NotHoldingFees: 'Null', TooExpensive: 'Null', Trap: 'u64', + ExpectationFalse: 'Null', + PalletNotFound: 'Null', + NameMismatch: 'Null', + VersionIncompatible: 'Null', + HoldingWouldOverflow: 'Null', + ExportError: 'Null', + ReanchorFailed: 'Null', + NoDeal: 'Null', + FeesNotMet: 'Null', + LockError: 'Null', + NoPermission: 'Null', + Unanchored: 'Null', + NotDepositable: 'Null', UnhandledXcmVersion: 'Null', - WeightLimitReached: 'u64', + WeightLimitReached: 'SpWeightsWeightV2Weight', Barrier: 'Null', - WeightNotComputable: 'Null' + WeightNotComputable: 'Null', + ExceedsStackLimit: 'Null' } }, /** @@ -781,64 +819,71 @@ export default { **/ PalletXcmEvent: { _enum: { - Attempted: 'XcmV2TraitsOutcome', - Sent: '(XcmV1MultiLocation,XcmV1MultiLocation,XcmV2Xcm)', - UnexpectedResponse: '(XcmV1MultiLocation,u64)', - ResponseReady: '(u64,XcmV2Response)', + Attempted: 'XcmV3TraitsOutcome', + Sent: '(XcmV3MultiLocation,XcmV3MultiLocation,XcmV3Xcm)', + UnexpectedResponse: '(XcmV3MultiLocation,u64)', + ResponseReady: '(u64,XcmV3Response)', Notified: '(u64,u8,u8)', NotifyOverweight: '(u64,u8,u8,SpWeightsWeightV2Weight,SpWeightsWeightV2Weight)', NotifyDispatchError: '(u64,u8,u8)', NotifyDecodeFailed: '(u64,u8,u8)', - InvalidResponder: '(XcmV1MultiLocation,u64,Option)', - InvalidResponderVersion: '(XcmV1MultiLocation,u64)', + InvalidResponder: '(XcmV3MultiLocation,u64,Option)', + InvalidResponderVersion: '(XcmV3MultiLocation,u64)', ResponseTaken: 'u64', - AssetsTrapped: '(H256,XcmV1MultiLocation,XcmVersionedMultiAssets)', - VersionChangeNotified: '(XcmV1MultiLocation,u32)', - SupportedVersionChanged: '(XcmV1MultiLocation,u32)', - NotifyTargetSendFail: '(XcmV1MultiLocation,u64,XcmV2TraitsError)', + AssetsTrapped: '(H256,XcmV3MultiLocation,XcmVersionedMultiAssets)', + VersionChangeNotified: '(XcmV3MultiLocation,u32,XcmV3MultiassetMultiAssets)', + SupportedVersionChanged: '(XcmV3MultiLocation,u32)', + NotifyTargetSendFail: '(XcmV3MultiLocation,u64,XcmV3TraitsError)', NotifyTargetMigrationFail: '(XcmVersionedMultiLocation,u64)', - AssetsClaimed: '(H256,XcmV1MultiLocation,XcmVersionedMultiAssets)' + InvalidQuerierVersion: '(XcmV3MultiLocation,u64)', + InvalidQuerier: '(XcmV3MultiLocation,u64,XcmV3MultiLocation,Option)', + VersionNotifyStarted: '(XcmV3MultiLocation,XcmV3MultiassetMultiAssets)', + VersionNotifyRequested: '(XcmV3MultiLocation,XcmV3MultiassetMultiAssets)', + VersionNotifyUnrequested: '(XcmV3MultiLocation,XcmV3MultiassetMultiAssets)', + FeesPaid: '(XcmV3MultiLocation,XcmV3MultiassetMultiAssets)', + AssetsClaimed: '(H256,XcmV3MultiLocation,XcmVersionedMultiAssets)' } }, /** - * Lookup71: xcm::v2::traits::Outcome + * Lookup71: xcm::v3::traits::Outcome **/ - XcmV2TraitsOutcome: { + XcmV3TraitsOutcome: { _enum: { - Complete: 'u64', - Incomplete: '(u64,XcmV2TraitsError)', - Error: 'XcmV2TraitsError' + Complete: 'SpWeightsWeightV2Weight', + Incomplete: '(SpWeightsWeightV2Weight,XcmV3TraitsError)', + Error: 'XcmV3TraitsError' } }, /** - * Lookup72: xcm::v2::Xcm + * Lookup72: xcm::v3::Xcm **/ - XcmV2Xcm: 'Vec', + XcmV3Xcm: 'Vec', /** - * Lookup74: xcm::v2::Instruction + * Lookup74: xcm::v3::Instruction **/ - XcmV2Instruction: { + XcmV3Instruction: { _enum: { - WithdrawAsset: 'XcmV1MultiassetMultiAssets', - ReserveAssetDeposited: 'XcmV1MultiassetMultiAssets', - ReceiveTeleportedAsset: 'XcmV1MultiassetMultiAssets', + WithdrawAsset: 'XcmV3MultiassetMultiAssets', + ReserveAssetDeposited: 'XcmV3MultiassetMultiAssets', + ReceiveTeleportedAsset: 'XcmV3MultiassetMultiAssets', QueryResponse: { queryId: 'Compact', - response: 'XcmV2Response', - maxWeight: 'Compact', + response: 'XcmV3Response', + maxWeight: 'SpWeightsWeightV2Weight', + querier: 'Option', }, TransferAsset: { - assets: 'XcmV1MultiassetMultiAssets', - beneficiary: 'XcmV1MultiLocation', + assets: 'XcmV3MultiassetMultiAssets', + beneficiary: 'XcmV3MultiLocation', }, TransferReserveAsset: { - assets: 'XcmV1MultiassetMultiAssets', - dest: 'XcmV1MultiLocation', - xcm: 'XcmV2Xcm', + assets: 'XcmV3MultiassetMultiAssets', + dest: 'XcmV3MultiLocation', + xcm: 'XcmV3Xcm', }, Transact: { - originType: 'XcmV0OriginKind', - requireWeightAtMost: 'Compact', + originKind: 'XcmV2OriginKind', + requireWeightAtMost: 'SpWeightsWeightV2Weight', call: 'XcmDoubleEncoded', }, HrmpNewChannelOpenRequest: { @@ -855,203 +900,272 @@ export default { recipient: 'Compact', }, ClearOrigin: 'Null', - DescendOrigin: 'XcmV1MultilocationJunctions', - ReportError: { - queryId: 'Compact', - dest: 'XcmV1MultiLocation', - maxResponseWeight: 'Compact', - }, + DescendOrigin: 'XcmV3Junctions', + ReportError: 'XcmV3QueryResponseInfo', DepositAsset: { - assets: 'XcmV1MultiassetMultiAssetFilter', - maxAssets: 'Compact', - beneficiary: 'XcmV1MultiLocation', + assets: 'XcmV3MultiassetMultiAssetFilter', + beneficiary: 'XcmV3MultiLocation', }, DepositReserveAsset: { - assets: 'XcmV1MultiassetMultiAssetFilter', - maxAssets: 'Compact', - dest: 'XcmV1MultiLocation', - xcm: 'XcmV2Xcm', + assets: 'XcmV3MultiassetMultiAssetFilter', + dest: 'XcmV3MultiLocation', + xcm: 'XcmV3Xcm', }, ExchangeAsset: { - give: 'XcmV1MultiassetMultiAssetFilter', - receive: 'XcmV1MultiassetMultiAssets', + give: 'XcmV3MultiassetMultiAssetFilter', + want: 'XcmV3MultiassetMultiAssets', + maximal: 'bool', }, InitiateReserveWithdraw: { - assets: 'XcmV1MultiassetMultiAssetFilter', - reserve: 'XcmV1MultiLocation', - xcm: 'XcmV2Xcm', + assets: 'XcmV3MultiassetMultiAssetFilter', + reserve: 'XcmV3MultiLocation', + xcm: 'XcmV3Xcm', }, InitiateTeleport: { - assets: 'XcmV1MultiassetMultiAssetFilter', - dest: 'XcmV1MultiLocation', - xcm: 'XcmV2Xcm', + assets: 'XcmV3MultiassetMultiAssetFilter', + dest: 'XcmV3MultiLocation', + xcm: 'XcmV3Xcm', }, - QueryHolding: { - queryId: 'Compact', - dest: 'XcmV1MultiLocation', - assets: 'XcmV1MultiassetMultiAssetFilter', - maxResponseWeight: 'Compact', + ReportHolding: { + responseInfo: 'XcmV3QueryResponseInfo', + assets: 'XcmV3MultiassetMultiAssetFilter', }, BuyExecution: { - fees: 'XcmV1MultiAsset', - weightLimit: 'XcmV2WeightLimit', + fees: 'XcmV3MultiAsset', + weightLimit: 'XcmV3WeightLimit', }, RefundSurplus: 'Null', - SetErrorHandler: 'XcmV2Xcm', - SetAppendix: 'XcmV2Xcm', + SetErrorHandler: 'XcmV3Xcm', + SetAppendix: 'XcmV3Xcm', ClearError: 'Null', ClaimAsset: { - assets: 'XcmV1MultiassetMultiAssets', - ticket: 'XcmV1MultiLocation', + assets: 'XcmV3MultiassetMultiAssets', + ticket: 'XcmV3MultiLocation', }, Trap: 'Compact', SubscribeVersion: { queryId: 'Compact', - maxResponseWeight: 'Compact', - }, - UnsubscribeVersion: 'Null' + maxResponseWeight: 'SpWeightsWeightV2Weight', + }, + UnsubscribeVersion: 'Null', + BurnAsset: 'XcmV3MultiassetMultiAssets', + ExpectAsset: 'XcmV3MultiassetMultiAssets', + ExpectOrigin: 'Option', + ExpectError: 'Option<(u32,XcmV3TraitsError)>', + ExpectTransactStatus: 'XcmV3MaybeErrorCode', + QueryPallet: { + moduleName: 'Bytes', + responseInfo: 'XcmV3QueryResponseInfo', + }, + ExpectPallet: { + index: 'Compact', + name: 'Bytes', + moduleName: 'Bytes', + crateMajor: 'Compact', + minCrateMinor: 'Compact', + }, + ReportTransactStatus: 'XcmV3QueryResponseInfo', + ClearTransactStatus: 'Null', + UniversalOrigin: 'XcmV3Junction', + ExportMessage: { + network: 'XcmV3JunctionNetworkId', + destination: 'XcmV3Junctions', + xcm: 'XcmV3Xcm', + }, + LockAsset: { + asset: 'XcmV3MultiAsset', + unlocker: 'XcmV3MultiLocation', + }, + UnlockAsset: { + asset: 'XcmV3MultiAsset', + target: 'XcmV3MultiLocation', + }, + NoteUnlockable: { + asset: 'XcmV3MultiAsset', + owner: 'XcmV3MultiLocation', + }, + RequestUnlock: { + asset: 'XcmV3MultiAsset', + locker: 'XcmV3MultiLocation', + }, + SetFeesMode: { + jitWithdraw: 'bool', + }, + SetTopic: '[u8;32]', + ClearTopic: 'Null', + AliasOrigin: 'XcmV3MultiLocation', + UnpaidExecution: { + weightLimit: 'XcmV3WeightLimit', + checkOrigin: 'Option' + } } }, /** - * Lookup75: xcm::v2::Response + * Lookup75: xcm::v3::Response **/ - XcmV2Response: { + XcmV3Response: { _enum: { Null: 'Null', - Assets: 'XcmV1MultiassetMultiAssets', - ExecutionResult: 'Option<(u32,XcmV2TraitsError)>', - Version: 'u32' + Assets: 'XcmV3MultiassetMultiAssets', + ExecutionResult: 'Option<(u32,XcmV3TraitsError)>', + Version: 'u32', + PalletsInfo: 'Vec', + DispatchResult: 'XcmV3MaybeErrorCode' } }, /** - * Lookup78: xcm::v0::OriginKind + * Lookup79: xcm::v3::PalletInfo **/ - XcmV0OriginKind: { + XcmV3PalletInfo: { + index: 'Compact', + name: 'Bytes', + moduleName: 'Bytes', + major: 'Compact', + minor: 'Compact', + patch: 'Compact' + }, + /** + * Lookup82: xcm::v3::MaybeErrorCode + **/ + XcmV3MaybeErrorCode: { + _enum: { + Success: 'Null', + Error: 'Bytes', + TruncatedError: 'Bytes' + } + }, + /** + * Lookup85: xcm::v2::OriginKind + **/ + XcmV2OriginKind: { _enum: ['Native', 'SovereignAccount', 'Superuser', 'Xcm'] }, /** - * Lookup79: xcm::double_encoded::DoubleEncoded + * Lookup86: xcm::double_encoded::DoubleEncoded **/ XcmDoubleEncoded: { encoded: 'Bytes' }, /** - * Lookup80: xcm::v1::multiasset::MultiAssetFilter + * Lookup87: xcm::v3::QueryResponseInfo + **/ + XcmV3QueryResponseInfo: { + destination: 'XcmV3MultiLocation', + queryId: 'Compact', + maxWeight: 'SpWeightsWeightV2Weight' + }, + /** + * Lookup88: xcm::v3::multiasset::MultiAssetFilter **/ - XcmV1MultiassetMultiAssetFilter: { + XcmV3MultiassetMultiAssetFilter: { _enum: { - Definite: 'XcmV1MultiassetMultiAssets', - Wild: 'XcmV1MultiassetWildMultiAsset' + Definite: 'XcmV3MultiassetMultiAssets', + Wild: 'XcmV3MultiassetWildMultiAsset' } }, /** - * Lookup81: xcm::v1::multiasset::WildMultiAsset + * Lookup89: xcm::v3::multiasset::WildMultiAsset **/ - XcmV1MultiassetWildMultiAsset: { + XcmV3MultiassetWildMultiAsset: { _enum: { All: 'Null', AllOf: { - id: 'XcmV1MultiassetAssetId', - fun: 'XcmV1MultiassetWildFungibility' + id: 'XcmV3MultiassetAssetId', + fun: 'XcmV3MultiassetWildFungibility', + }, + AllCounted: 'Compact', + AllOfCounted: { + id: 'XcmV3MultiassetAssetId', + fun: 'XcmV3MultiassetWildFungibility', + count: 'Compact' } } }, /** - * Lookup82: xcm::v1::multiasset::WildFungibility + * Lookup90: xcm::v3::multiasset::WildFungibility **/ - XcmV1MultiassetWildFungibility: { + XcmV3MultiassetWildFungibility: { _enum: ['Fungible', 'NonFungible'] }, /** - * Lookup83: xcm::v2::WeightLimit + * Lookup92: xcm::v3::WeightLimit **/ - XcmV2WeightLimit: { + XcmV3WeightLimit: { _enum: { Unlimited: 'Null', - Limited: 'Compact' + Limited: 'SpWeightsWeightV2Weight' } }, /** - * Lookup85: xcm::VersionedMultiAssets + * Lookup93: xcm::VersionedMultiAssets **/ XcmVersionedMultiAssets: { _enum: { - V0: 'Vec', - V1: 'XcmV1MultiassetMultiAssets' + __Unused0: 'Null', + V2: 'XcmV2MultiassetMultiAssets', + __Unused2: 'Null', + V3: 'XcmV3MultiassetMultiAssets' } }, /** - * Lookup87: xcm::v0::multi_asset::MultiAsset + * Lookup94: xcm::v2::multiasset::MultiAssets + **/ + XcmV2MultiassetMultiAssets: 'Vec', + /** + * Lookup96: xcm::v2::multiasset::MultiAsset + **/ + XcmV2MultiAsset: { + id: 'XcmV2MultiassetAssetId', + fun: 'XcmV2MultiassetFungibility' + }, + /** + * Lookup97: xcm::v2::multiasset::AssetId **/ - XcmV0MultiAsset: { + XcmV2MultiassetAssetId: { _enum: { - None: 'Null', - All: 'Null', - AllFungible: 'Null', - AllNonFungible: 'Null', - AllAbstractFungible: { - id: 'Bytes', - }, - AllAbstractNonFungible: { - class: 'Bytes', - }, - AllConcreteFungible: { - id: 'XcmV0MultiLocation', - }, - AllConcreteNonFungible: { - class: 'XcmV0MultiLocation', - }, - AbstractFungible: { - id: 'Bytes', - amount: 'Compact', - }, - AbstractNonFungible: { - class: 'Bytes', - instance: 'XcmV1MultiassetAssetInstance', - }, - ConcreteFungible: { - id: 'XcmV0MultiLocation', - amount: 'Compact', - }, - ConcreteNonFungible: { - class: 'XcmV0MultiLocation', - instance: 'XcmV1MultiassetAssetInstance' - } + Concrete: 'XcmV2MultiLocation', + Abstract: 'Bytes' } }, /** - * Lookup88: xcm::v0::multi_location::MultiLocation + * Lookup98: xcm::v2::multilocation::MultiLocation + **/ + XcmV2MultiLocation: { + parents: 'u8', + interior: 'XcmV2MultilocationJunctions' + }, + /** + * Lookup99: xcm::v2::multilocation::Junctions **/ - XcmV0MultiLocation: { + XcmV2MultilocationJunctions: { _enum: { - Null: 'Null', - X1: 'XcmV0Junction', - X2: '(XcmV0Junction,XcmV0Junction)', - X3: '(XcmV0Junction,XcmV0Junction,XcmV0Junction)', - X4: '(XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction)', - X5: '(XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction)', - X6: '(XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction)', - X7: '(XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction)', - X8: '(XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction)' + Here: 'Null', + X1: 'XcmV2Junction', + X2: '(XcmV2Junction,XcmV2Junction)', + X3: '(XcmV2Junction,XcmV2Junction,XcmV2Junction)', + X4: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)', + X5: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)', + X6: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)', + X7: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)', + X8: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)' } }, /** - * Lookup89: xcm::v0::junction::Junction + * Lookup100: xcm::v2::junction::Junction **/ - XcmV0Junction: { + XcmV2Junction: { _enum: { - Parent: 'Null', Parachain: 'Compact', AccountId32: { - network: 'XcmV0JunctionNetworkId', + network: 'XcmV2NetworkId', id: '[u8;32]', }, AccountIndex64: { - network: 'XcmV0JunctionNetworkId', + network: 'XcmV2NetworkId', index: 'Compact', }, AccountKey20: { - network: 'XcmV0JunctionNetworkId', + network: 'XcmV2NetworkId', key: '[u8;20]', }, PalletInstance: 'u8', @@ -1059,32 +1173,108 @@ export default { GeneralKey: 'Bytes', OnlyChild: 'Null', Plurality: { - id: 'XcmV0JunctionBodyId', - part: 'XcmV0JunctionBodyPart' + id: 'XcmV2BodyId', + part: 'XcmV2BodyPart' } } }, /** - * Lookup90: xcm::VersionedMultiLocation + * Lookup101: xcm::v2::NetworkId + **/ + XcmV2NetworkId: { + _enum: { + Any: 'Null', + Named: 'Bytes', + Polkadot: 'Null', + Kusama: 'Null' + } + }, + /** + * Lookup103: xcm::v2::BodyId + **/ + XcmV2BodyId: { + _enum: { + Unit: 'Null', + Named: 'Bytes', + Index: 'Compact', + Executive: 'Null', + Technical: 'Null', + Legislative: 'Null', + Judicial: 'Null', + Defense: 'Null', + Administration: 'Null', + Treasury: 'Null' + } + }, + /** + * Lookup104: xcm::v2::BodyPart + **/ + XcmV2BodyPart: { + _enum: { + Voice: 'Null', + Members: { + count: 'Compact', + }, + Fraction: { + nom: 'Compact', + denom: 'Compact', + }, + AtLeastProportion: { + nom: 'Compact', + denom: 'Compact', + }, + MoreThanProportion: { + nom: 'Compact', + denom: 'Compact' + } + } + }, + /** + * Lookup105: xcm::v2::multiasset::Fungibility + **/ + XcmV2MultiassetFungibility: { + _enum: { + Fungible: 'Compact', + NonFungible: 'XcmV2MultiassetAssetInstance' + } + }, + /** + * Lookup106: xcm::v2::multiasset::AssetInstance + **/ + XcmV2MultiassetAssetInstance: { + _enum: { + Undefined: 'Null', + Index: 'Compact', + Array4: '[u8;4]', + Array8: '[u8;8]', + Array16: '[u8;16]', + Array32: '[u8;32]', + Blob: 'Bytes' + } + }, + /** + * Lookup107: xcm::VersionedMultiLocation **/ XcmVersionedMultiLocation: { _enum: { - V0: 'XcmV0MultiLocation', - V1: 'XcmV1MultiLocation' + __Unused0: 'Null', + V2: 'XcmV2MultiLocation', + __Unused2: 'Null', + V3: 'XcmV3MultiLocation' } }, /** - * Lookup91: cumulus_pallet_xcm::pallet::Event + * Lookup108: cumulus_pallet_xcm::pallet::Event **/ CumulusPalletXcmEvent: { _enum: { - InvalidFormat: '[u8;8]', - UnsupportedVersion: '[u8;8]', - ExecutedDownward: '([u8;8],XcmV2TraitsOutcome)' + InvalidFormat: '[u8;32]', + UnsupportedVersion: '[u8;32]', + ExecutedDownward: '([u8;32],XcmV3TraitsOutcome)' } }, /** - * Lookup92: cumulus_pallet_dmp_queue::pallet::Event + * Lookup109: cumulus_pallet_dmp_queue::pallet::Event **/ CumulusPalletDmpQueueEvent: { _enum: { @@ -1096,7 +1286,7 @@ export default { }, ExecutedDownward: { messageId: '[u8;32]', - outcome: 'XcmV2TraitsOutcome', + outcome: 'XcmV3TraitsOutcome', }, WeightExhausted: { messageId: '[u8;32]', @@ -1110,12 +1300,15 @@ export default { }, OverweightServiced: { overweightIndex: 'u64', - weightUsed: 'SpWeightsWeightV2Weight' + weightUsed: 'SpWeightsWeightV2Weight', + }, + MaxMessagesExhausted: { + messageId: '[u8;32]' } } }, /** - * Lookup93: pallet_configuration::pallet::Event + * Lookup110: pallet_configuration::pallet::Event **/ PalletConfigurationEvent: { _enum: { @@ -1131,7 +1324,7 @@ export default { } }, /** - * Lookup96: pallet_common::pallet::Event + * Lookup113: pallet_common::pallet::Event **/ PalletCommonEvent: { _enum: { @@ -1160,7 +1353,7 @@ export default { } }, /** - * Lookup99: pallet_evm::account::BasicCrossAccountIdRepr + * Lookup116: pallet_evm::account::BasicCrossAccountIdRepr **/ PalletEvmAccountBasicCrossAccountIdRepr: { _enum: { @@ -1169,7 +1362,7 @@ export default { } }, /** - * Lookup103: pallet_structure::pallet::Event + * Lookup119: pallet_structure::pallet::Event **/ PalletStructureEvent: { _enum: { @@ -1177,7 +1370,7 @@ export default { } }, /** - * Lookup104: pallet_app_promotion::pallet::Event + * Lookup120: pallet_app_promotion::pallet::Event **/ PalletAppPromotionEvent: { _enum: { @@ -1188,18 +1381,18 @@ export default { } }, /** - * Lookup105: pallet_foreign_assets::module::Event + * Lookup121: pallet_foreign_assets::module::Event **/ PalletForeignAssetsModuleEvent: { _enum: { ForeignAssetRegistered: { assetId: 'u32', - assetAddress: 'XcmV1MultiLocation', + assetAddress: 'XcmV3MultiLocation', metadata: 'PalletForeignAssetsModuleAssetMetadata', }, ForeignAssetUpdated: { assetId: 'u32', - assetAddress: 'XcmV1MultiLocation', + assetAddress: 'XcmV3MultiLocation', metadata: 'PalletForeignAssetsModuleAssetMetadata', }, AssetRegistered: { @@ -1213,7 +1406,7 @@ export default { } }, /** - * Lookup106: pallet_foreign_assets::module::AssetMetadata + * Lookup122: pallet_foreign_assets::module::AssetMetadata **/ PalletForeignAssetsModuleAssetMetadata: { name: 'Bytes', @@ -1222,7 +1415,7 @@ export default { minimalBalance: 'u128' }, /** - * Lookup107: pallet_evm::pallet::Event + * Lookup125: pallet_evm::pallet::Event **/ PalletEvmEvent: { _enum: { @@ -1244,7 +1437,7 @@ export default { } }, /** - * Lookup108: ethereum::log::Log + * Lookup126: ethereum::log::Log **/ EthereumLog: { address: 'H160', @@ -1252,7 +1445,7 @@ export default { data: 'Bytes' }, /** - * Lookup110: pallet_ethereum::pallet::Event + * Lookup128: pallet_ethereum::pallet::Event **/ PalletEthereumEvent: { _enum: { @@ -1265,7 +1458,7 @@ export default { } }, /** - * Lookup111: evm_core::error::ExitReason + * Lookup129: evm_core::error::ExitReason **/ EvmCoreErrorExitReason: { _enum: { @@ -1276,13 +1469,13 @@ export default { } }, /** - * Lookup112: evm_core::error::ExitSucceed + * Lookup130: evm_core::error::ExitSucceed **/ EvmCoreErrorExitSucceed: { _enum: ['Stopped', 'Returned', 'Suicided'] }, /** - * Lookup113: evm_core::error::ExitError + * Lookup131: evm_core::error::ExitError **/ EvmCoreErrorExitError: { _enum: { @@ -1305,13 +1498,13 @@ export default { } }, /** - * Lookup117: evm_core::error::ExitRevert + * Lookup135: evm_core::error::ExitRevert **/ EvmCoreErrorExitRevert: { _enum: ['Reverted'] }, /** - * Lookup118: evm_core::error::ExitFatal + * Lookup136: evm_core::error::ExitFatal **/ EvmCoreErrorExitFatal: { _enum: { @@ -1322,7 +1515,7 @@ export default { } }, /** - * Lookup119: pallet_evm_contract_helpers::pallet::Event + * Lookup137: pallet_evm_contract_helpers::pallet::Event **/ PalletEvmContractHelpersEvent: { _enum: { @@ -1332,25 +1525,25 @@ export default { } }, /** - * Lookup120: pallet_evm_migration::pallet::Event + * Lookup138: pallet_evm_migration::pallet::Event **/ PalletEvmMigrationEvent: { _enum: ['TestEvent'] }, /** - * Lookup121: pallet_maintenance::pallet::Event + * Lookup139: pallet_maintenance::pallet::Event **/ PalletMaintenanceEvent: { _enum: ['MaintenanceEnabled', 'MaintenanceDisabled'] }, /** - * Lookup122: pallet_test_utils::pallet::Event + * Lookup140: pallet_test_utils::pallet::Event **/ PalletTestUtilsEvent: { _enum: ['ValueIsSet', 'ShouldRollback', 'BatchCompleted'] }, /** - * Lookup123: frame_system::Phase + * Lookup141: frame_system::Phase **/ FrameSystemPhase: { _enum: { @@ -1360,14 +1553,14 @@ export default { } }, /** - * Lookup126: frame_system::LastRuntimeUpgradeInfo + * Lookup144: frame_system::LastRuntimeUpgradeInfo **/ FrameSystemLastRuntimeUpgradeInfo: { specVersion: 'Compact', specName: 'Text' }, /** - * Lookup127: frame_system::pallet::Call + * Lookup145: frame_system::pallet::Call **/ FrameSystemCall: { _enum: { @@ -1402,7 +1595,7 @@ export default { } }, /** - * Lookup131: frame_system::limits::BlockWeights + * Lookup149: frame_system::limits::BlockWeights **/ FrameSystemLimitsBlockWeights: { baseBlock: 'SpWeightsWeightV2Weight', @@ -1410,7 +1603,7 @@ export default { perClass: 'FrameSupportDispatchPerDispatchClassWeightsPerClass' }, /** - * Lookup132: frame_support::dispatch::PerDispatchClass + * Lookup150: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassWeightsPerClass: { normal: 'FrameSystemLimitsWeightsPerClass', @@ -1418,7 +1611,7 @@ export default { mandatory: 'FrameSystemLimitsWeightsPerClass' }, /** - * Lookup133: frame_system::limits::WeightsPerClass + * Lookup151: frame_system::limits::WeightsPerClass **/ FrameSystemLimitsWeightsPerClass: { baseExtrinsic: 'SpWeightsWeightV2Weight', @@ -1427,13 +1620,13 @@ export default { reserved: 'Option' }, /** - * Lookup135: frame_system::limits::BlockLength + * Lookup153: frame_system::limits::BlockLength **/ FrameSystemLimitsBlockLength: { max: 'FrameSupportDispatchPerDispatchClassU32' }, /** - * Lookup136: frame_support::dispatch::PerDispatchClass + * Lookup154: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassU32: { normal: 'u32', @@ -1441,14 +1634,14 @@ export default { mandatory: 'u32' }, /** - * Lookup137: sp_weights::RuntimeDbWeight + * Lookup155: sp_weights::RuntimeDbWeight **/ SpWeightsRuntimeDbWeight: { read: 'u64', write: 'u64' }, /** - * Lookup138: sp_version::RuntimeVersion + * Lookup156: sp_version::RuntimeVersion **/ SpVersionRuntimeVersion: { specName: 'Text', @@ -1461,13 +1654,13 @@ export default { stateVersion: 'u8' }, /** - * Lookup143: frame_system::pallet::Error + * Lookup161: frame_system::pallet::Error **/ FrameSystemError: { _enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered'] }, /** - * Lookup144: polkadot_primitives::v2::PersistedValidationData + * Lookup162: polkadot_primitives::v2::PersistedValidationData **/ PolkadotPrimitivesV2PersistedValidationData: { parentHead: 'Bytes', @@ -1476,19 +1669,19 @@ export default { maxPovSize: 'u32' }, /** - * Lookup147: polkadot_primitives::v2::UpgradeRestriction + * Lookup165: polkadot_primitives::v2::UpgradeRestriction **/ PolkadotPrimitivesV2UpgradeRestriction: { _enum: ['Present'] }, /** - * Lookup148: sp_trie::storage_proof::StorageProof + * Lookup166: sp_trie::storage_proof::StorageProof **/ SpTrieStorageProof: { trieNodes: 'BTreeSet' }, /** - * Lookup150: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot + * Lookup168: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot **/ CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: { dmqMqcHead: 'H256', @@ -1497,7 +1690,7 @@ export default { egressChannels: 'Vec<(u32,PolkadotPrimitivesV2AbridgedHrmpChannel)>' }, /** - * Lookup153: polkadot_primitives::v2::AbridgedHrmpChannel + * Lookup171: polkadot_primitives::v2::AbridgedHrmpChannel **/ PolkadotPrimitivesV2AbridgedHrmpChannel: { maxCapacity: 'u32', @@ -1508,7 +1701,7 @@ export default { mqcHead: 'Option' }, /** - * Lookup154: polkadot_primitives::v2::AbridgedHostConfiguration + * Lookup173: polkadot_primitives::v2::AbridgedHostConfiguration **/ PolkadotPrimitivesV2AbridgedHostConfiguration: { maxCodeSize: 'u32', @@ -1522,14 +1715,14 @@ export default { validationUpgradeDelay: 'u32' }, /** - * Lookup160: polkadot_core_primitives::OutboundHrmpMessage + * Lookup179: polkadot_core_primitives::OutboundHrmpMessage **/ PolkadotCorePrimitivesOutboundHrmpMessage: { recipient: 'u32', data: 'Bytes' }, /** - * Lookup161: cumulus_pallet_parachain_system::pallet::Call + * Lookup180: cumulus_pallet_parachain_system::pallet::Call **/ CumulusPalletParachainSystemCall: { _enum: { @@ -1548,7 +1741,7 @@ export default { } }, /** - * Lookup162: cumulus_primitives_parachain_inherent::ParachainInherentData + * Lookup181: cumulus_primitives_parachain_inherent::ParachainInherentData **/ CumulusPrimitivesParachainInherentParachainInherentData: { validationData: 'PolkadotPrimitivesV2PersistedValidationData', @@ -1557,66 +1750,31 @@ export default { horizontalMessages: 'BTreeMap>' }, /** - * Lookup164: polkadot_core_primitives::InboundDownwardMessage + * Lookup183: polkadot_core_primitives::InboundDownwardMessage **/ PolkadotCorePrimitivesInboundDownwardMessage: { sentAt: 'u32', msg: 'Bytes' }, /** - * Lookup167: polkadot_core_primitives::InboundHrmpMessage + * Lookup186: polkadot_core_primitives::InboundHrmpMessage **/ PolkadotCorePrimitivesInboundHrmpMessage: { sentAt: 'u32', data: 'Bytes' }, /** - * Lookup170: cumulus_pallet_parachain_system::pallet::Error + * Lookup189: cumulus_pallet_parachain_system::pallet::Error **/ CumulusPalletParachainSystemError: { _enum: ['OverlappingUpgrades', 'ProhibitedByPolkadot', 'TooBig', 'ValidationDataNotAvailable', 'HostConfigurationNotAvailable', 'NotScheduled', 'NothingAuthorized', 'Unauthorized'] }, /** - * Lookup172: pallet_authorship::UncleEntryItem - **/ - PalletAuthorshipUncleEntryItem: { - _enum: { - InclusionHeight: 'u32', - Uncle: '(H256,Option)' - } - }, - /** - * Lookup174: pallet_authorship::pallet::Call - **/ - PalletAuthorshipCall: { - _enum: { - set_uncles: { - newUncles: 'Vec' - } - } - }, - /** - * Lookup176: sp_runtime::generic::header::Header - **/ - SpRuntimeHeader: { - parentHash: 'H256', - number: 'Compact', - stateRoot: 'H256', - extrinsicsRoot: 'H256', - digest: 'SpRuntimeDigest' - }, - /** - * Lookup177: sp_runtime::traits::BlakeTwo256 - **/ - SpRuntimeBlakeTwo256: 'Null', - /** - * Lookup178: pallet_authorship::pallet::Error + * Lookup190: parachain_info::pallet::Call **/ - PalletAuthorshipError: { - _enum: ['InvalidUncleParent', 'UnclesAlreadySet', 'TooManyUncles', 'GenesisUncle', 'TooHighUncle', 'UncleAlreadyIncluded', 'OldUncle'] - }, + ParachainInfoCall: 'Null', /** - * Lookup181: pallet_collator_selection::pallet::Call + * Lookup193: pallet_collator_selection::pallet::Call **/ PalletCollatorSelectionCall: { _enum: { @@ -1639,31 +1797,31 @@ export default { } }, /** - * Lookup182: pallet_collator_selection::pallet::Error + * Lookup194: pallet_collator_selection::pallet::Error **/ PalletCollatorSelectionError: { _enum: ['TooManyCandidates', 'Unknown', 'Permission', 'AlreadyHoldingLicense', 'NoLicense', 'AlreadyCandidate', 'NotCandidate', 'TooManyInvulnerables', 'TooFewInvulnerables', 'AlreadyInvulnerable', 'NotInvulnerable', 'NoAssociatedValidatorId', 'ValidatorNotRegistered'] }, /** - * Lookup185: opal_runtime::runtime_common::SessionKeys + * Lookup197: opal_runtime::runtime_common::SessionKeys **/ OpalRuntimeRuntimeCommonSessionKeys: { aura: 'SpConsensusAuraSr25519AppSr25519Public' }, /** - * Lookup186: sp_consensus_aura::sr25519::app_sr25519::Public + * Lookup198: sp_consensus_aura::sr25519::app_sr25519::Public **/ SpConsensusAuraSr25519AppSr25519Public: 'SpCoreSr25519Public', /** - * Lookup187: sp_core::sr25519::Public + * Lookup199: sp_core::sr25519::Public **/ SpCoreSr25519Public: '[u8;32]', /** - * Lookup190: sp_core::crypto::KeyTypeId + * Lookup202: sp_core::crypto::KeyTypeId **/ SpCoreCryptoKeyTypeId: '[u8;4]', /** - * Lookup191: pallet_session::pallet::Call + * Lookup203: pallet_session::pallet::Call **/ PalletSessionCall: { _enum: { @@ -1678,13 +1836,13 @@ export default { } }, /** - * Lookup192: pallet_session::pallet::Error + * Lookup204: pallet_session::pallet::Error **/ PalletSessionError: { _enum: ['InvalidProof', 'NoAssociatedValidatorId', 'DuplicatedKey', 'NoKeys', 'NoAccount'] }, /** - * Lookup194: pallet_balances::BalanceLock + * Lookup209: pallet_balances::BalanceLock **/ PalletBalancesBalanceLock: { id: '[u8;8]', @@ -1692,20 +1850,20 @@ export default { reasons: 'PalletBalancesReasons' }, /** - * Lookup195: pallet_balances::Reasons + * Lookup210: pallet_balances::Reasons **/ PalletBalancesReasons: { _enum: ['Fee', 'Misc', 'All'] }, /** - * Lookup198: pallet_balances::ReserveData + * Lookup213: pallet_balances::ReserveData **/ PalletBalancesReserveData: { id: '[u8;16]', amount: 'u128' }, /** - * Lookup200: pallet_balances::pallet::Call + * Lookup215: pallet_balances::pallet::Call **/ PalletBalancesCall: { _enum: { @@ -1738,13 +1896,13 @@ export default { } }, /** - * Lookup203: pallet_balances::pallet::Error + * Lookup218: pallet_balances::pallet::Error **/ PalletBalancesError: { _enum: ['VestingBalance', 'LiquidityRestrictions', 'InsufficientBalance', 'ExistentialDeposit', 'KeepAlive', 'ExistingVestingSchedule', 'DeadAccount', 'TooManyReserves'] }, /** - * Lookup205: pallet_timestamp::pallet::Call + * Lookup219: pallet_timestamp::pallet::Call **/ PalletTimestampCall: { _enum: { @@ -1754,13 +1912,13 @@ export default { } }, /** - * Lookup207: pallet_transaction_payment::Releases + * Lookup221: pallet_transaction_payment::Releases **/ PalletTransactionPaymentReleases: { _enum: ['V1Ancient', 'V2'] }, /** - * Lookup208: pallet_treasury::Proposal + * Lookup222: pallet_treasury::Proposal **/ PalletTreasuryProposal: { proposer: 'AccountId32', @@ -1769,7 +1927,7 @@ export default { bond: 'u128' }, /** - * Lookup210: pallet_treasury::pallet::Call + * Lookup224: pallet_treasury::pallet::Call **/ PalletTreasuryCall: { _enum: { @@ -1793,17 +1951,17 @@ export default { } }, /** - * Lookup212: frame_support::PalletId + * Lookup226: frame_support::PalletId **/ FrameSupportPalletId: '[u8;8]', /** - * Lookup213: pallet_treasury::pallet::Error + * Lookup227: pallet_treasury::pallet::Error **/ PalletTreasuryError: { _enum: ['InsufficientProposersBalance', 'InvalidIndex', 'TooManyApprovals', 'InsufficientPermission', 'ProposalNotApproved'] }, /** - * Lookup214: pallet_sudo::pallet::Call + * Lookup228: pallet_sudo::pallet::Call **/ PalletSudoCall: { _enum: { @@ -1827,7 +1985,7 @@ export default { } }, /** - * Lookup216: orml_vesting::module::Call + * Lookup230: orml_vesting::module::Call **/ OrmlVestingModuleCall: { _enum: { @@ -1846,7 +2004,7 @@ export default { } }, /** - * Lookup218: orml_xtokens::module::Call + * Lookup232: orml_xtokens::module::Call **/ OrmlXtokensModuleCall: { _enum: { @@ -1854,51 +2012,53 @@ export default { currencyId: 'PalletForeignAssetsAssetIds', amount: 'u128', dest: 'XcmVersionedMultiLocation', - destWeightLimit: 'XcmV2WeightLimit', + destWeightLimit: 'XcmV3WeightLimit', }, transfer_multiasset: { asset: 'XcmVersionedMultiAsset', dest: 'XcmVersionedMultiLocation', - destWeightLimit: 'XcmV2WeightLimit', + destWeightLimit: 'XcmV3WeightLimit', }, transfer_with_fee: { currencyId: 'PalletForeignAssetsAssetIds', amount: 'u128', fee: 'u128', dest: 'XcmVersionedMultiLocation', - destWeightLimit: 'XcmV2WeightLimit', + destWeightLimit: 'XcmV3WeightLimit', }, transfer_multiasset_with_fee: { asset: 'XcmVersionedMultiAsset', fee: 'XcmVersionedMultiAsset', dest: 'XcmVersionedMultiLocation', - destWeightLimit: 'XcmV2WeightLimit', + destWeightLimit: 'XcmV3WeightLimit', }, transfer_multicurrencies: { currencies: 'Vec<(PalletForeignAssetsAssetIds,u128)>', feeItem: 'u32', dest: 'XcmVersionedMultiLocation', - destWeightLimit: 'XcmV2WeightLimit', + destWeightLimit: 'XcmV3WeightLimit', }, transfer_multiassets: { assets: 'XcmVersionedMultiAssets', feeItem: 'u32', dest: 'XcmVersionedMultiLocation', - destWeightLimit: 'XcmV2WeightLimit' + destWeightLimit: 'XcmV3WeightLimit' } } }, /** - * Lookup219: xcm::VersionedMultiAsset + * Lookup233: xcm::VersionedMultiAsset **/ XcmVersionedMultiAsset: { _enum: { - V0: 'XcmV0MultiAsset', - V1: 'XcmV1MultiAsset' + __Unused0: 'Null', + V2: 'XcmV2MultiAsset', + __Unused2: 'Null', + V3: 'XcmV3MultiAsset' } }, /** - * Lookup222: orml_tokens::module::Call + * Lookup236: orml_tokens::module::Call **/ OrmlTokensModuleCall: { _enum: { @@ -1932,7 +2092,7 @@ export default { } }, /** - * Lookup223: pallet_identity::pallet::Call + * Lookup237: pallet_identity::pallet::Call **/ PalletIdentityCall: { _enum: { @@ -2001,7 +2161,7 @@ export default { } }, /** - * Lookup224: pallet_identity::types::IdentityInfo + * Lookup238: pallet_identity::types::IdentityInfo **/ PalletIdentityIdentityInfo: { additional: 'Vec<(Data,Data)>', @@ -2015,7 +2175,7 @@ export default { twitter: 'Data' }, /** - * Lookup260: pallet_identity::types::BitFlags + * Lookup274: pallet_identity::types::BitFlags **/ PalletIdentityBitFlags: { _bitLength: 64, @@ -2029,13 +2189,13 @@ export default { Twitter: 128 }, /** - * Lookup261: pallet_identity::types::IdentityField + * Lookup275: pallet_identity::types::IdentityField **/ PalletIdentityIdentityField: { _enum: ['__Unused0', 'Display', 'Legal', '__Unused3', 'Web', '__Unused5', '__Unused6', '__Unused7', 'Riot', '__Unused9', '__Unused10', '__Unused11', '__Unused12', '__Unused13', '__Unused14', '__Unused15', 'Email', '__Unused17', '__Unused18', '__Unused19', '__Unused20', '__Unused21', '__Unused22', '__Unused23', '__Unused24', '__Unused25', '__Unused26', '__Unused27', '__Unused28', '__Unused29', '__Unused30', '__Unused31', 'PgpFingerprint', '__Unused33', '__Unused34', '__Unused35', '__Unused36', '__Unused37', '__Unused38', '__Unused39', '__Unused40', '__Unused41', '__Unused42', '__Unused43', '__Unused44', '__Unused45', '__Unused46', '__Unused47', '__Unused48', '__Unused49', '__Unused50', '__Unused51', '__Unused52', '__Unused53', '__Unused54', '__Unused55', '__Unused56', '__Unused57', '__Unused58', '__Unused59', '__Unused60', '__Unused61', '__Unused62', '__Unused63', 'Image', '__Unused65', '__Unused66', '__Unused67', '__Unused68', '__Unused69', '__Unused70', '__Unused71', '__Unused72', '__Unused73', '__Unused74', '__Unused75', '__Unused76', '__Unused77', '__Unused78', '__Unused79', '__Unused80', '__Unused81', '__Unused82', '__Unused83', '__Unused84', '__Unused85', '__Unused86', '__Unused87', '__Unused88', '__Unused89', '__Unused90', '__Unused91', '__Unused92', '__Unused93', '__Unused94', '__Unused95', '__Unused96', '__Unused97', '__Unused98', '__Unused99', '__Unused100', '__Unused101', '__Unused102', '__Unused103', '__Unused104', '__Unused105', '__Unused106', '__Unused107', '__Unused108', '__Unused109', '__Unused110', '__Unused111', '__Unused112', '__Unused113', '__Unused114', '__Unused115', '__Unused116', '__Unused117', '__Unused118', '__Unused119', '__Unused120', '__Unused121', '__Unused122', '__Unused123', '__Unused124', '__Unused125', '__Unused126', '__Unused127', 'Twitter'] }, /** - * Lookup262: pallet_identity::types::Judgement + * Lookup276: pallet_identity::types::Judgement **/ PalletIdentityJudgement: { _enum: { @@ -2049,7 +2209,7 @@ export default { } }, /** - * Lookup265: pallet_identity::types::Registration + * Lookup279: pallet_identity::types::Registration **/ PalletIdentityRegistration: { judgements: 'Vec<(u32,PalletIdentityJudgement)>', @@ -2057,7 +2217,7 @@ export default { info: 'PalletIdentityIdentityInfo' }, /** - * Lookup273: pallet_preimage::pallet::Call + * Lookup287: pallet_preimage::pallet::Call **/ PalletPreimageCall: { _enum: { @@ -2085,13 +2245,13 @@ export default { } }, /** - * Lookup274: cumulus_pallet_xcmp_queue::pallet::Call + * Lookup288: cumulus_pallet_xcmp_queue::pallet::Call **/ CumulusPalletXcmpQueueCall: { _enum: { service_overweight: { index: 'u64', - weightLimit: 'u64', + weightLimit: 'SpWeightsWeightV2Weight', }, suspend_xcm_execution: 'Null', resume_xcm_execution: 'Null', @@ -2117,24 +2277,24 @@ export default { _alias: { new_: 'new', }, - new_: 'u64', + new_: 'SpWeightsWeightV2Weight', }, update_weight_restrict_decay: { _alias: { new_: 'new', }, - new_: 'u64', + new_: 'SpWeightsWeightV2Weight', }, update_xcmp_max_individual_weight: { _alias: { new_: 'new', }, - new_: 'u64' + new_: 'SpWeightsWeightV2Weight' } } }, /** - * Lookup275: pallet_xcm::pallet::Call + * Lookup289: pallet_xcm::pallet::Call **/ PalletXcmCall: { _enum: { @@ -2156,10 +2316,10 @@ export default { }, execute: { message: 'XcmVersionedXcm', - maxWeight: 'u64', + maxWeight: 'SpWeightsWeightV2Weight', }, force_xcm_version: { - location: 'XcmV1MultiLocation', + location: 'XcmV3MultiLocation', xcmVersion: 'u32', }, force_default_xcm_version: { @@ -2176,60 +2336,57 @@ export default { beneficiary: 'XcmVersionedMultiLocation', assets: 'XcmVersionedMultiAssets', feeAssetItem: 'u32', - weightLimit: 'XcmV2WeightLimit', + weightLimit: 'XcmV3WeightLimit', }, limited_teleport_assets: { dest: 'XcmVersionedMultiLocation', beneficiary: 'XcmVersionedMultiLocation', assets: 'XcmVersionedMultiAssets', feeAssetItem: 'u32', - weightLimit: 'XcmV2WeightLimit' + weightLimit: 'XcmV3WeightLimit' } } }, /** - * Lookup276: xcm::VersionedXcm + * Lookup290: xcm::VersionedXcm **/ XcmVersionedXcm: { _enum: { - V0: 'XcmV0Xcm', - V1: 'XcmV1Xcm', - V2: 'XcmV2Xcm' + __Unused0: 'Null', + __Unused1: 'Null', + V2: 'XcmV2Xcm', + V3: 'XcmV3Xcm' } }, /** - * Lookup277: xcm::v0::Xcm + * Lookup291: xcm::v2::Xcm + **/ + XcmV2Xcm: 'Vec', + /** + * Lookup293: xcm::v2::Instruction **/ - XcmV0Xcm: { + XcmV2Instruction: { _enum: { - WithdrawAsset: { - assets: 'Vec', - effects: 'Vec', - }, - ReserveAssetDeposit: { - assets: 'Vec', - effects: 'Vec', - }, - TeleportAsset: { - assets: 'Vec', - effects: 'Vec', - }, + WithdrawAsset: 'XcmV2MultiassetMultiAssets', + ReserveAssetDeposited: 'XcmV2MultiassetMultiAssets', + ReceiveTeleportedAsset: 'XcmV2MultiassetMultiAssets', QueryResponse: { queryId: 'Compact', - response: 'XcmV0Response', + response: 'XcmV2Response', + maxWeight: 'Compact', }, TransferAsset: { - assets: 'Vec', - dest: 'XcmV0MultiLocation', + assets: 'XcmV2MultiassetMultiAssets', + beneficiary: 'XcmV2MultiLocation', }, TransferReserveAsset: { - assets: 'Vec', - dest: 'XcmV0MultiLocation', - effects: 'Vec', + assets: 'XcmV2MultiassetMultiAssets', + dest: 'XcmV2MultiLocation', + xcm: 'XcmV2Xcm', }, Transact: { - originType: 'XcmV0OriginKind', - requireWeightAtMost: 'u64', + originType: 'XcmV2OriginKind', + requireWeightAtMost: 'Compact', call: 'XcmDoubleEncoded', }, HrmpNewChannelOpenRequest: { @@ -2245,193 +2402,161 @@ export default { sender: 'Compact', recipient: 'Compact', }, - RelayedFrom: { - who: 'XcmV0MultiLocation', - message: 'XcmV0Xcm' - } - } - }, - /** - * Lookup279: xcm::v0::order::Order - **/ - XcmV0Order: { - _enum: { - Null: 'Null', + ClearOrigin: 'Null', + DescendOrigin: 'XcmV2MultilocationJunctions', + ReportError: { + queryId: 'Compact', + dest: 'XcmV2MultiLocation', + maxResponseWeight: 'Compact', + }, DepositAsset: { - assets: 'Vec', - dest: 'XcmV0MultiLocation', + assets: 'XcmV2MultiassetMultiAssetFilter', + maxAssets: 'Compact', + beneficiary: 'XcmV2MultiLocation', }, DepositReserveAsset: { - assets: 'Vec', - dest: 'XcmV0MultiLocation', - effects: 'Vec', + assets: 'XcmV2MultiassetMultiAssetFilter', + maxAssets: 'Compact', + dest: 'XcmV2MultiLocation', + xcm: 'XcmV2Xcm', }, ExchangeAsset: { - give: 'Vec', - receive: 'Vec', + give: 'XcmV2MultiassetMultiAssetFilter', + receive: 'XcmV2MultiassetMultiAssets', }, InitiateReserveWithdraw: { - assets: 'Vec', - reserve: 'XcmV0MultiLocation', - effects: 'Vec', + assets: 'XcmV2MultiassetMultiAssetFilter', + reserve: 'XcmV2MultiLocation', + xcm: 'XcmV2Xcm', }, InitiateTeleport: { - assets: 'Vec', - dest: 'XcmV0MultiLocation', - effects: 'Vec', + assets: 'XcmV2MultiassetMultiAssetFilter', + dest: 'XcmV2MultiLocation', + xcm: 'XcmV2Xcm', }, QueryHolding: { queryId: 'Compact', - dest: 'XcmV0MultiLocation', - assets: 'Vec', + dest: 'XcmV2MultiLocation', + assets: 'XcmV2MultiassetMultiAssetFilter', + maxResponseWeight: 'Compact', }, BuyExecution: { - fees: 'XcmV0MultiAsset', - weight: 'u64', - debt: 'u64', - haltOnError: 'bool', - xcm: 'Vec' - } + fees: 'XcmV2MultiAsset', + weightLimit: 'XcmV2WeightLimit', + }, + RefundSurplus: 'Null', + SetErrorHandler: 'XcmV2Xcm', + SetAppendix: 'XcmV2Xcm', + ClearError: 'Null', + ClaimAsset: { + assets: 'XcmV2MultiassetMultiAssets', + ticket: 'XcmV2MultiLocation', + }, + Trap: 'Compact', + SubscribeVersion: { + queryId: 'Compact', + maxResponseWeight: 'Compact', + }, + UnsubscribeVersion: 'Null' } }, /** - * Lookup281: xcm::v0::Response + * Lookup294: xcm::v2::Response **/ - XcmV0Response: { + XcmV2Response: { _enum: { - Assets: 'Vec' + Null: 'Null', + Assets: 'XcmV2MultiassetMultiAssets', + ExecutionResult: 'Option<(u32,XcmV2TraitsError)>', + Version: 'u32' } }, /** - * Lookup282: xcm::v1::Xcm + * Lookup297: xcm::v2::traits::Error **/ - XcmV1Xcm: { + XcmV2TraitsError: { _enum: { - WithdrawAsset: { - assets: 'XcmV1MultiassetMultiAssets', - effects: 'Vec', - }, - ReserveAssetDeposited: { - assets: 'XcmV1MultiassetMultiAssets', - effects: 'Vec', - }, - ReceiveTeleportedAsset: { - assets: 'XcmV1MultiassetMultiAssets', - effects: 'Vec', - }, - QueryResponse: { - queryId: 'Compact', - response: 'XcmV1Response', - }, - TransferAsset: { - assets: 'XcmV1MultiassetMultiAssets', - beneficiary: 'XcmV1MultiLocation', - }, - TransferReserveAsset: { - assets: 'XcmV1MultiassetMultiAssets', - dest: 'XcmV1MultiLocation', - effects: 'Vec', - }, - Transact: { - originType: 'XcmV0OriginKind', - requireWeightAtMost: 'u64', - call: 'XcmDoubleEncoded', - }, - HrmpNewChannelOpenRequest: { - sender: 'Compact', - maxMessageSize: 'Compact', - maxCapacity: 'Compact', - }, - HrmpChannelAccepted: { - recipient: 'Compact', - }, - HrmpChannelClosing: { - initiator: 'Compact', - sender: 'Compact', - recipient: 'Compact', - }, - RelayedFrom: { - who: 'XcmV1MultilocationJunctions', - message: 'XcmV1Xcm', - }, - SubscribeVersion: { - queryId: 'Compact', - maxResponseWeight: 'Compact', - }, - UnsubscribeVersion: 'Null' + Overflow: 'Null', + Unimplemented: 'Null', + UntrustedReserveLocation: 'Null', + UntrustedTeleportLocation: 'Null', + MultiLocationFull: 'Null', + MultiLocationNotInvertible: 'Null', + BadOrigin: 'Null', + InvalidLocation: 'Null', + AssetNotFound: 'Null', + FailedToTransactAsset: 'Null', + NotWithdrawable: 'Null', + LocationCannotHold: 'Null', + ExceedsMaxMessageSize: 'Null', + DestinationUnsupported: 'Null', + Transport: 'Null', + Unroutable: 'Null', + UnknownClaim: 'Null', + FailedToDecode: 'Null', + MaxWeightInvalid: 'Null', + NotHoldingFees: 'Null', + TooExpensive: 'Null', + Trap: 'u64', + UnhandledXcmVersion: 'Null', + WeightLimitReached: 'u64', + Barrier: 'Null', + WeightNotComputable: 'Null' } }, /** - * Lookup284: xcm::v1::order::Order + * Lookup298: xcm::v2::multiasset::MultiAssetFilter **/ - XcmV1Order: { + XcmV2MultiassetMultiAssetFilter: { _enum: { - Noop: 'Null', - DepositAsset: { - assets: 'XcmV1MultiassetMultiAssetFilter', - maxAssets: 'u32', - beneficiary: 'XcmV1MultiLocation', - }, - DepositReserveAsset: { - assets: 'XcmV1MultiassetMultiAssetFilter', - maxAssets: 'u32', - dest: 'XcmV1MultiLocation', - effects: 'Vec', - }, - ExchangeAsset: { - give: 'XcmV1MultiassetMultiAssetFilter', - receive: 'XcmV1MultiassetMultiAssets', - }, - InitiateReserveWithdraw: { - assets: 'XcmV1MultiassetMultiAssetFilter', - reserve: 'XcmV1MultiLocation', - effects: 'Vec', - }, - InitiateTeleport: { - assets: 'XcmV1MultiassetMultiAssetFilter', - dest: 'XcmV1MultiLocation', - effects: 'Vec', - }, - QueryHolding: { - queryId: 'Compact', - dest: 'XcmV1MultiLocation', - assets: 'XcmV1MultiassetMultiAssetFilter', - }, - BuyExecution: { - fees: 'XcmV1MultiAsset', - weight: 'u64', - debt: 'u64', - haltOnError: 'bool', - instructions: 'Vec' + Definite: 'XcmV2MultiassetMultiAssets', + Wild: 'XcmV2MultiassetWildMultiAsset' + } + }, + /** + * Lookup299: xcm::v2::multiasset::WildMultiAsset + **/ + XcmV2MultiassetWildMultiAsset: { + _enum: { + All: 'Null', + AllOf: { + id: 'XcmV2MultiassetAssetId', + fun: 'XcmV2MultiassetWildFungibility' } } }, /** - * Lookup286: xcm::v1::Response + * Lookup300: xcm::v2::multiasset::WildFungibility + **/ + XcmV2MultiassetWildFungibility: { + _enum: ['Fungible', 'NonFungible'] + }, + /** + * Lookup301: xcm::v2::WeightLimit **/ - XcmV1Response: { + XcmV2WeightLimit: { _enum: { - Assets: 'XcmV1MultiassetMultiAssets', - Version: 'u32' + Unlimited: 'Null', + Limited: 'Compact' } }, /** - * Lookup300: cumulus_pallet_xcm::pallet::Call + * Lookup310: cumulus_pallet_xcm::pallet::Call **/ CumulusPalletXcmCall: 'Null', /** - * Lookup301: cumulus_pallet_dmp_queue::pallet::Call + * Lookup311: cumulus_pallet_dmp_queue::pallet::Call **/ CumulusPalletDmpQueueCall: { _enum: { service_overweight: { index: 'u64', - weightLimit: 'u64' + weightLimit: 'SpWeightsWeightV2Weight' } } }, /** - * Lookup302: pallet_inflation::pallet::Call + * Lookup312: pallet_inflation::pallet::Call **/ PalletInflationCall: { _enum: { @@ -2441,7 +2566,7 @@ export default { } }, /** - * Lookup303: pallet_unique::Call + * Lookup313: pallet_unique::Call **/ PalletUniqueCall: { _enum: { @@ -2592,7 +2717,7 @@ export default { } }, /** - * Lookup308: up_data_structs::CollectionMode + * Lookup318: up_data_structs::CollectionMode **/ UpDataStructsCollectionMode: { _enum: { @@ -2602,7 +2727,7 @@ export default { } }, /** - * Lookup309: up_data_structs::CreateCollectionData + * Lookup319: up_data_structs::CreateCollectionData **/ UpDataStructsCreateCollectionData: { mode: 'UpDataStructsCollectionMode', @@ -2617,13 +2742,13 @@ export default { properties: 'Vec' }, /** - * Lookup311: up_data_structs::AccessMode + * Lookup321: up_data_structs::AccessMode **/ UpDataStructsAccessMode: { _enum: ['Normal', 'AllowList'] }, /** - * Lookup313: up_data_structs::CollectionLimits + * Lookup323: up_data_structs::CollectionLimits **/ UpDataStructsCollectionLimits: { accountTokenOwnershipLimit: 'Option', @@ -2637,7 +2762,7 @@ export default { transfersEnabled: 'Option' }, /** - * Lookup315: up_data_structs::SponsoringRateLimit + * Lookup325: up_data_structs::SponsoringRateLimit **/ UpDataStructsSponsoringRateLimit: { _enum: { @@ -2646,7 +2771,7 @@ export default { } }, /** - * Lookup318: up_data_structs::CollectionPermissions + * Lookup328: up_data_structs::CollectionPermissions **/ UpDataStructsCollectionPermissions: { access: 'Option', @@ -2654,7 +2779,7 @@ export default { nesting: 'Option' }, /** - * Lookup320: up_data_structs::NestingPermissions + * Lookup330: up_data_structs::NestingPermissions **/ UpDataStructsNestingPermissions: { tokenOwner: 'bool', @@ -2662,18 +2787,18 @@ export default { restricted: 'Option' }, /** - * Lookup322: up_data_structs::OwnerRestrictedSet + * Lookup332: up_data_structs::OwnerRestrictedSet **/ UpDataStructsOwnerRestrictedSet: 'BTreeSet', /** - * Lookup327: up_data_structs::PropertyKeyPermission + * Lookup337: up_data_structs::PropertyKeyPermission **/ UpDataStructsPropertyKeyPermission: { key: 'Bytes', permission: 'UpDataStructsPropertyPermission' }, /** - * Lookup328: up_data_structs::PropertyPermission + * Lookup338: up_data_structs::PropertyPermission **/ UpDataStructsPropertyPermission: { mutable: 'bool', @@ -2681,14 +2806,14 @@ export default { tokenOwner: 'bool' }, /** - * Lookup331: up_data_structs::Property + * Lookup341: up_data_structs::Property **/ UpDataStructsProperty: { key: 'Bytes', value: 'Bytes' }, /** - * Lookup334: up_data_structs::CreateItemData + * Lookup344: up_data_structs::CreateItemData **/ UpDataStructsCreateItemData: { _enum: { @@ -2698,26 +2823,26 @@ export default { } }, /** - * Lookup335: up_data_structs::CreateNftData + * Lookup345: up_data_structs::CreateNftData **/ UpDataStructsCreateNftData: { properties: 'Vec' }, /** - * Lookup336: up_data_structs::CreateFungibleData + * Lookup346: up_data_structs::CreateFungibleData **/ UpDataStructsCreateFungibleData: { value: 'u128' }, /** - * Lookup337: up_data_structs::CreateReFungibleData + * Lookup347: up_data_structs::CreateReFungibleData **/ UpDataStructsCreateReFungibleData: { pieces: 'u128', properties: 'Vec' }, /** - * Lookup340: up_data_structs::CreateItemExData> + * Lookup350: up_data_structs::CreateItemExData> **/ UpDataStructsCreateItemExData: { _enum: { @@ -2728,14 +2853,14 @@ export default { } }, /** - * Lookup342: up_data_structs::CreateNftExData> + * Lookup352: up_data_structs::CreateNftExData> **/ UpDataStructsCreateNftExData: { properties: 'Vec', owner: 'PalletEvmAccountBasicCrossAccountIdRepr' }, /** - * Lookup349: up_data_structs::CreateRefungibleExSingleOwner> + * Lookup359: up_data_structs::CreateRefungibleExSingleOwner> **/ UpDataStructsCreateRefungibleExSingleOwner: { user: 'PalletEvmAccountBasicCrossAccountIdRepr', @@ -2743,14 +2868,14 @@ export default { properties: 'Vec' }, /** - * Lookup351: up_data_structs::CreateRefungibleExMultipleOwners> + * Lookup361: up_data_structs::CreateRefungibleExMultipleOwners> **/ UpDataStructsCreateRefungibleExMultipleOwners: { users: 'BTreeMap', properties: 'Vec' }, /** - * Lookup352: pallet_configuration::pallet::Call + * Lookup362: pallet_configuration::pallet::Call **/ PalletConfigurationCall: { _enum: { @@ -2760,9 +2885,7 @@ export default { set_min_gas_price_override: { coeff: 'Option', }, - set_xcm_allowed_locations: { - locations: 'Option>', - }, + __Unused2: 'Null', set_app_promotion_configuration_override: { configuration: 'PalletConfigurationAppPromotionConfiguration', }, @@ -2778,7 +2901,7 @@ export default { } }, /** - * Lookup357: pallet_configuration::AppPromotionConfiguration + * Lookup364: pallet_configuration::AppPromotionConfiguration **/ PalletConfigurationAppPromotionConfiguration: { recalculationInterval: 'Option', @@ -2787,15 +2910,15 @@ export default { maxStakersPerCalculation: 'Option' }, /** - * Lookup361: pallet_template_transaction_payment::Call + * Lookup368: pallet_template_transaction_payment::Call **/ PalletTemplateTransactionPaymentCall: 'Null', /** - * Lookup362: pallet_structure::pallet::Call + * Lookup369: pallet_structure::pallet::Call **/ PalletStructureCall: 'Null', /** - * Lookup363: pallet_app_promotion::pallet::Call + * Lookup370: pallet_app_promotion::pallet::Call **/ PalletAppPromotionCall: { _enum: { @@ -2827,7 +2950,7 @@ export default { } }, /** - * Lookup364: pallet_foreign_assets::module::Call + * Lookup371: pallet_foreign_assets::module::Call **/ PalletForeignAssetsModuleCall: { _enum: { @@ -2844,7 +2967,7 @@ export default { } }, /** - * Lookup365: pallet_evm::pallet::Call + * Lookup372: pallet_evm::pallet::Call **/ PalletEvmCall: { _enum: { @@ -2887,7 +3010,7 @@ export default { } }, /** - * Lookup371: pallet_ethereum::pallet::Call + * Lookup378: pallet_ethereum::pallet::Call **/ PalletEthereumCall: { _enum: { @@ -2897,7 +3020,7 @@ export default { } }, /** - * Lookup372: ethereum::transaction::TransactionV2 + * Lookup379: ethereum::transaction::TransactionV2 **/ EthereumTransactionTransactionV2: { _enum: { @@ -2907,7 +3030,7 @@ export default { } }, /** - * Lookup373: ethereum::transaction::LegacyTransaction + * Lookup380: ethereum::transaction::LegacyTransaction **/ EthereumTransactionLegacyTransaction: { nonce: 'U256', @@ -2919,7 +3042,7 @@ export default { signature: 'EthereumTransactionTransactionSignature' }, /** - * Lookup374: ethereum::transaction::TransactionAction + * Lookup381: ethereum::transaction::TransactionAction **/ EthereumTransactionTransactionAction: { _enum: { @@ -2928,7 +3051,7 @@ export default { } }, /** - * Lookup375: ethereum::transaction::TransactionSignature + * Lookup382: ethereum::transaction::TransactionSignature **/ EthereumTransactionTransactionSignature: { v: 'u64', @@ -2936,7 +3059,7 @@ export default { s: 'H256' }, /** - * Lookup377: ethereum::transaction::EIP2930Transaction + * Lookup384: ethereum::transaction::EIP2930Transaction **/ EthereumTransactionEip2930Transaction: { chainId: 'u64', @@ -2952,14 +3075,14 @@ export default { s: 'H256' }, /** - * Lookup379: ethereum::transaction::AccessListItem + * Lookup386: ethereum::transaction::AccessListItem **/ EthereumTransactionAccessListItem: { address: 'H160', storageKeys: 'Vec' }, /** - * Lookup380: ethereum::transaction::EIP1559Transaction + * Lookup387: ethereum::transaction::EIP1559Transaction **/ EthereumTransactionEip1559Transaction: { chainId: 'u64', @@ -2976,7 +3099,23 @@ export default { s: 'H256' }, /** - * Lookup381: pallet_evm_migration::pallet::Call + * Lookup388: pallet_evm_coder_substrate::pallet::Call + **/ + PalletEvmCoderSubstrateCall: { + _enum: ['empty_call'] + }, + /** + * Lookup389: pallet_evm_contract_helpers::pallet::Call + **/ + PalletEvmContractHelpersCall: { + _enum: { + migrate_from_self_sponsoring: { + addresses: 'Vec' + } + } + }, + /** + * Lookup391: pallet_evm_migration::pallet::Call **/ PalletEvmMigrationCall: { _enum: { @@ -3001,7 +3140,7 @@ export default { } }, /** - * Lookup385: pallet_maintenance::pallet::Call + * Lookup395: pallet_maintenance::pallet::Call **/ PalletMaintenanceCall: { _enum: { @@ -3017,7 +3156,7 @@ export default { } }, /** - * Lookup386: pallet_test_utils::pallet::Call + * Lookup396: pallet_test_utils::pallet::Call **/ PalletTestUtilsCall: { _enum: { @@ -3036,32 +3175,32 @@ export default { } }, /** - * Lookup388: pallet_sudo::pallet::Error + * Lookup398: pallet_sudo::pallet::Error **/ PalletSudoError: { _enum: ['RequireSudo'] }, /** - * Lookup390: orml_vesting::module::Error + * Lookup400: orml_vesting::module::Error **/ OrmlVestingModuleError: { _enum: ['ZeroVestingPeriod', 'ZeroVestingPeriodCount', 'InsufficientBalanceToLock', 'TooManyVestingSchedules', 'AmountLow', 'MaxVestingSchedulesExceeded'] }, /** - * Lookup391: orml_xtokens::module::Error + * Lookup401: orml_xtokens::module::Error **/ OrmlXtokensModuleError: { _enum: ['AssetHasNoReserve', 'NotCrossChainTransfer', 'InvalidDest', 'NotCrossChainTransferableCurrency', 'UnweighableMessage', 'XcmExecutionFailed', 'CannotReanchor', 'InvalidAncestry', 'InvalidAsset', 'DestinationNotInvertible', 'BadVersion', 'DistinctReserveForAssetAndFee', 'ZeroFee', 'ZeroAmount', 'TooManyAssetsBeingSent', 'AssetIndexNonExistent', 'FeeNotEnough', 'NotSupportedMultiLocation', 'MinXcmFeeNotDefined'] }, /** - * Lookup394: orml_tokens::BalanceLock + * Lookup404: orml_tokens::BalanceLock **/ OrmlTokensBalanceLock: { id: '[u8;8]', amount: 'u128' }, /** - * Lookup396: orml_tokens::AccountData + * Lookup406: orml_tokens::AccountData **/ OrmlTokensAccountData: { free: 'u128', @@ -3069,20 +3208,20 @@ export default { frozen: 'u128' }, /** - * Lookup398: orml_tokens::ReserveData + * Lookup408: orml_tokens::ReserveData **/ OrmlTokensReserveData: { id: 'Null', amount: 'u128' }, /** - * Lookup400: orml_tokens::module::Error + * Lookup410: orml_tokens::module::Error **/ OrmlTokensModuleError: { _enum: ['BalanceTooLow', 'AmountIntoBalanceFailed', 'LiquidityRestrictions', 'MaxLocksExceeded', 'KeepAlive', 'ExistentialDeposit', 'DeadAccount', 'TooManyReserves'] }, /** - * Lookup405: pallet_identity::types::RegistrarInfo + * Lookup415: pallet_identity::types::RegistrarInfo **/ PalletIdentityRegistrarInfo: { account: 'AccountId32', @@ -3090,13 +3229,13 @@ export default { fields: 'PalletIdentityBitFlags' }, /** - * Lookup407: pallet_identity::pallet::Error + * Lookup417: pallet_identity::pallet::Error **/ PalletIdentityError: { _enum: ['TooManySubAccounts', 'NotFound', 'NotNamed', 'EmptyIndex', 'FeeChanged', 'NoIdentity', 'StickyJudgement', 'JudgementGiven', 'InvalidJudgement', 'InvalidIndex', 'InvalidTarget', 'TooManyFields', 'TooManyRegistrars', 'AlreadyClaimed', 'NotSub', 'NotOwned', 'JudgementForDifferentIdentity', 'JudgementPaymentFailed'] }, /** - * Lookup408: pallet_preimage::RequestStatus + * Lookup418: pallet_preimage::RequestStatus **/ PalletPreimageRequestStatus: { _enum: { @@ -3112,13 +3251,13 @@ export default { } }, /** - * Lookup413: pallet_preimage::pallet::Error + * Lookup423: pallet_preimage::pallet::Error **/ PalletPreimageError: { _enum: ['TooBig', 'AlreadyNoted', 'NotAuthorized', 'NotNoted', 'Requested', 'NotRequested'] }, /** - * Lookup415: cumulus_pallet_xcmp_queue::InboundChannelDetails + * Lookup425: cumulus_pallet_xcmp_queue::InboundChannelDetails **/ CumulusPalletXcmpQueueInboundChannelDetails: { sender: 'u32', @@ -3126,19 +3265,19 @@ export default { messageMetadata: 'Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>' }, /** - * Lookup416: cumulus_pallet_xcmp_queue::InboundState + * Lookup426: cumulus_pallet_xcmp_queue::InboundState **/ CumulusPalletXcmpQueueInboundState: { _enum: ['Ok', 'Suspended'] }, /** - * Lookup419: polkadot_parachain::primitives::XcmpMessageFormat + * Lookup429: polkadot_parachain::primitives::XcmpMessageFormat **/ PolkadotParachainPrimitivesXcmpMessageFormat: { _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals'] }, /** - * Lookup422: cumulus_pallet_xcmp_queue::OutboundChannelDetails + * Lookup432: cumulus_pallet_xcmp_queue::OutboundChannelDetails **/ CumulusPalletXcmpQueueOutboundChannelDetails: { recipient: 'u32', @@ -3148,13 +3287,13 @@ export default { lastIndex: 'u16' }, /** - * Lookup423: cumulus_pallet_xcmp_queue::OutboundState + * Lookup433: cumulus_pallet_xcmp_queue::OutboundState **/ CumulusPalletXcmpQueueOutboundState: { _enum: ['Ok', 'Suspended'] }, /** - * Lookup425: cumulus_pallet_xcmp_queue::QueueConfigData + * Lookup435: cumulus_pallet_xcmp_queue::QueueConfigData **/ CumulusPalletXcmpQueueQueueConfigData: { suspendThreshold: 'u32', @@ -3165,29 +3304,92 @@ export default { xcmpMaxIndividualWeight: 'SpWeightsWeightV2Weight' }, /** - * Lookup427: cumulus_pallet_xcmp_queue::pallet::Error + * Lookup437: cumulus_pallet_xcmp_queue::pallet::Error **/ CumulusPalletXcmpQueueError: { _enum: ['FailedToSend', 'BadXcmOrigin', 'BadXcm', 'BadOverweightIndex', 'WeightOverLimit'] }, /** - * Lookup428: pallet_xcm::pallet::Error + * Lookup438: pallet_xcm::pallet::QueryStatus + **/ + PalletXcmQueryStatus: { + _enum: { + Pending: { + responder: 'XcmVersionedMultiLocation', + maybeMatchQuerier: 'Option', + maybeNotify: 'Option<(u8,u8)>', + timeout: 'u32', + }, + VersionNotifier: { + origin: 'XcmVersionedMultiLocation', + isActive: 'bool', + }, + Ready: { + response: 'XcmVersionedResponse', + at: 'u32' + } + } + }, + /** + * Lookup442: xcm::VersionedResponse + **/ + XcmVersionedResponse: { + _enum: { + __Unused0: 'Null', + __Unused1: 'Null', + V2: 'XcmV2Response', + V3: 'XcmV3Response' + } + }, + /** + * Lookup448: pallet_xcm::pallet::VersionMigrationStage + **/ + PalletXcmVersionMigrationStage: { + _enum: { + MigrateSupportedVersion: 'Null', + MigrateVersionNotifiers: 'Null', + NotifyCurrentTargets: 'Option', + MigrateAndNotifyOldTargets: 'Null' + } + }, + /** + * Lookup451: xcm::VersionedAssetId + **/ + XcmVersionedAssetId: { + _enum: { + __Unused0: 'Null', + __Unused1: 'Null', + __Unused2: 'Null', + V3: 'XcmV3MultiassetAssetId' + } + }, + /** + * Lookup452: pallet_xcm::pallet::RemoteLockedFungibleRecord + **/ + PalletXcmRemoteLockedFungibleRecord: { + amount: 'u128', + owner: 'XcmVersionedMultiLocation', + locker: 'XcmVersionedMultiLocation', + users: 'u32' + }, + /** + * Lookup456: pallet_xcm::pallet::Error **/ PalletXcmError: { - _enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed'] + _enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed', 'InvalidAsset', 'LowBalance', 'TooManyLocks', 'AccountNotSovereign', 'FeesNotMet', 'LockNotFound', 'InUse'] }, /** - * Lookup429: cumulus_pallet_xcm::pallet::Error + * Lookup457: cumulus_pallet_xcm::pallet::Error **/ CumulusPalletXcmError: 'Null', /** - * Lookup430: cumulus_pallet_dmp_queue::ConfigData + * Lookup458: cumulus_pallet_dmp_queue::ConfigData **/ CumulusPalletDmpQueueConfigData: { maxIndividual: 'SpWeightsWeightV2Weight' }, /** - * Lookup431: cumulus_pallet_dmp_queue::PageIndexData + * Lookup459: cumulus_pallet_dmp_queue::PageIndexData **/ CumulusPalletDmpQueuePageIndexData: { beginUsed: 'u32', @@ -3195,25 +3397,25 @@ export default { overweightCount: 'u64' }, /** - * Lookup434: cumulus_pallet_dmp_queue::pallet::Error + * Lookup462: cumulus_pallet_dmp_queue::pallet::Error **/ CumulusPalletDmpQueueError: { _enum: ['Unknown', 'OverLimit'] }, /** - * Lookup438: pallet_unique::Error + * Lookup466: pallet_unique::Error **/ PalletUniqueError: { _enum: ['CollectionDecimalPointLimitExceeded', 'EmptyArgument', 'RepartitionCalledOnNonRefungibleCollection'] }, /** - * Lookup439: pallet_configuration::pallet::Error + * Lookup467: pallet_configuration::pallet::Error **/ PalletConfigurationError: { _enum: ['InconsistentConfiguration'] }, /** - * Lookup440: up_data_structs::Collection + * Lookup468: up_data_structs::Collection **/ UpDataStructsCollection: { owner: 'AccountId32', @@ -3227,7 +3429,7 @@ export default { flags: '[u8;1]' }, /** - * Lookup441: up_data_structs::SponsorshipState + * Lookup469: up_data_structs::SponsorshipState **/ UpDataStructsSponsorshipStateAccountId32: { _enum: { @@ -3237,23 +3439,23 @@ export default { } }, /** - * Lookup442: up_data_structs::Properties + * Lookup470: up_data_structs::Properties **/ UpDataStructsProperties: { map: 'UpDataStructsPropertiesMapBoundedVec', consumedSpace: 'u32', - spaceLimit: 'u32' + reserved: 'u32' }, /** - * Lookup443: up_data_structs::PropertiesMap> + * Lookup471: up_data_structs::PropertiesMap> **/ UpDataStructsPropertiesMapBoundedVec: 'BTreeMap', /** - * Lookup448: up_data_structs::PropertiesMap + * Lookup476: up_data_structs::PropertiesMap **/ UpDataStructsPropertiesMapPropertyPermission: 'BTreeMap', /** - * Lookup455: up_data_structs::CollectionStats + * Lookup483: up_data_structs::CollectionStats **/ UpDataStructsCollectionStats: { created: 'u32', @@ -3261,18 +3463,18 @@ export default { alive: 'u32' }, /** - * Lookup456: up_data_structs::TokenChild + * Lookup484: up_data_structs::TokenChild **/ UpDataStructsTokenChild: { token: 'u32', collection: 'u32' }, /** - * Lookup457: PhantomType::up_data_structs + * Lookup485: PhantomType::up_data_structs **/ PhantomTypeUpDataStructs: '[(UpDataStructsTokenData,UpDataStructsRpcCollection,UpPovEstimateRpcPovInfo);0]', /** - * Lookup459: up_data_structs::TokenData> + * Lookup487: up_data_structs::TokenData> **/ UpDataStructsTokenData: { properties: 'Vec', @@ -3280,7 +3482,7 @@ export default { pieces: 'u128' }, /** - * Lookup461: up_data_structs::RpcCollection + * Lookup489: up_data_structs::RpcCollection **/ UpDataStructsRpcCollection: { owner: 'AccountId32', @@ -3297,14 +3499,14 @@ export default { flags: 'UpDataStructsRpcCollectionFlags' }, /** - * Lookup462: up_data_structs::RpcCollectionFlags + * Lookup490: up_data_structs::RpcCollectionFlags **/ UpDataStructsRpcCollectionFlags: { foreign: 'bool', erc721metadata: 'bool' }, /** - * Lookup463: up_pov_estimate_rpc::PovInfo + * Lookup491: up_pov_estimate_rpc::PovInfo **/ UpPovEstimateRpcPovInfo: { proofSize: 'u64', @@ -3314,7 +3516,7 @@ export default { keyValues: 'Vec' }, /** - * Lookup466: sp_runtime::transaction_validity::TransactionValidityError + * Lookup494: sp_runtime::transaction_validity::TransactionValidityError **/ SpRuntimeTransactionValidityTransactionValidityError: { _enum: { @@ -3323,7 +3525,7 @@ export default { } }, /** - * Lookup467: sp_runtime::transaction_validity::InvalidTransaction + * Lookup495: sp_runtime::transaction_validity::InvalidTransaction **/ SpRuntimeTransactionValidityInvalidTransaction: { _enum: { @@ -3341,7 +3543,7 @@ export default { } }, /** - * Lookup468: sp_runtime::transaction_validity::UnknownTransaction + * Lookup496: sp_runtime::transaction_validity::UnknownTransaction **/ SpRuntimeTransactionValidityUnknownTransaction: { _enum: { @@ -3351,74 +3553,74 @@ export default { } }, /** - * Lookup470: up_pov_estimate_rpc::TrieKeyValue + * Lookup498: up_pov_estimate_rpc::TrieKeyValue **/ UpPovEstimateRpcTrieKeyValue: { key: 'Bytes', value: 'Bytes' }, /** - * Lookup472: pallet_common::pallet::Error + * Lookup500: pallet_common::pallet::Error **/ PalletCommonError: { _enum: ['CollectionNotFound', 'MustBeTokenOwner', 'NoPermission', 'CantDestroyNotEmptyCollection', 'PublicMintingNotAllowed', 'AddressNotInAllowlist', 'CollectionNameLimitExceeded', 'CollectionDescriptionLimitExceeded', 'CollectionTokenPrefixLimitExceeded', 'TotalCollectionsLimitExceeded', 'CollectionAdminCountExceeded', 'CollectionLimitBoundsExceeded', 'OwnerPermissionsCantBeReverted', 'TransferNotAllowed', 'AccountTokenLimitExceeded', 'CollectionTokenLimitExceeded', 'MetadataFlagFrozen', 'TokenNotFound', 'TokenValueTooLow', 'ApprovedValueTooLow', 'CantApproveMoreThanOwned', 'AddressIsNotEthMirror', 'AddressIsZero', 'UnsupportedOperation', 'NotSufficientFounds', 'UserIsNotAllowedToNest', 'SourceCollectionIsNotAllowedToNest', 'CollectionFieldSizeExceeded', 'NoSpaceForProperty', 'PropertyLimitReached', 'PropertyKeyIsTooLong', 'InvalidCharacterInPropertyKey', 'EmptyPropertyKey', 'CollectionIsExternal', 'CollectionIsInternal', 'ConfirmSponsorshipFail', 'UserIsNotCollectionAdmin'] }, /** - * Lookup474: pallet_fungible::pallet::Error + * Lookup502: pallet_fungible::pallet::Error **/ PalletFungibleError: { _enum: ['NotFungibleDataUsedToMintFungibleCollectionToken', 'FungibleItemsHaveNoId', 'FungibleItemsDontHaveData', 'FungibleDisallowsNesting', 'SettingPropertiesNotAllowed', 'SettingAllowanceForAllNotAllowed', 'FungibleTokensAreAlwaysValid'] }, /** - * Lookup478: pallet_refungible::pallet::Error + * Lookup507: pallet_refungible::pallet::Error **/ PalletRefungibleError: { _enum: ['NotRefungibleDataUsedToMintFungibleCollectionToken', 'WrongRefungiblePieces', 'RepartitionWhileNotOwningAllPieces', 'RefungibleDisallowsNesting', 'SettingPropertiesNotAllowed'] }, /** - * Lookup479: pallet_nonfungible::ItemData> + * Lookup508: pallet_nonfungible::ItemData> **/ PalletNonfungibleItemData: { owner: 'PalletEvmAccountBasicCrossAccountIdRepr' }, /** - * Lookup481: up_data_structs::PropertyScope + * Lookup510: up_data_structs::PropertyScope **/ UpDataStructsPropertyScope: { _enum: ['None', 'Rmrk'] }, /** - * Lookup484: pallet_nonfungible::pallet::Error + * Lookup513: pallet_nonfungible::pallet::Error **/ PalletNonfungibleError: { _enum: ['NotNonfungibleDataUsedToMintFungibleCollectionToken', 'NonfungibleItemsHaveNoAmount', 'CantBurnNftWithChildren'] }, /** - * Lookup485: pallet_structure::pallet::Error + * Lookup514: pallet_structure::pallet::Error **/ PalletStructureError: { _enum: ['OuroborosDetected', 'DepthLimit', 'BreadthLimit', 'TokenNotFound', 'CantNestTokenUnderCollection'] }, /** - * Lookup490: pallet_app_promotion::pallet::Error + * Lookup519: pallet_app_promotion::pallet::Error **/ PalletAppPromotionError: { _enum: ['AdminNotSet', 'NoPermission', 'NotSufficientFunds', 'PendingForBlockOverflow', 'SponsorNotSet', 'IncorrectLockedBalanceOperation', 'InsufficientStakedBalance'] }, /** - * Lookup491: pallet_foreign_assets::module::Error + * Lookup520: pallet_foreign_assets::module::Error **/ PalletForeignAssetsModuleError: { _enum: ['BadLocation', 'MultiLocationExisted', 'AssetIdNotExists', 'AssetIdExisted'] }, /** - * Lookup493: pallet_evm::pallet::Error + * Lookup522: pallet_evm::pallet::Error **/ PalletEvmError: { _enum: ['BalanceLow', 'FeeOverflow', 'PaymentOverflow', 'WithdrawFailed', 'GasPriceTooLow', 'InvalidNonce', 'GasLimitTooLow', 'GasLimitTooHigh', 'Undefined', 'Reentrancy', 'TransactionMustComeFromEOA'] }, /** - * Lookup496: fp_rpc::TransactionStatus + * Lookup525: fp_rpc::TransactionStatus **/ FpRpcTransactionStatus: { transactionHash: 'H256', @@ -3430,11 +3632,11 @@ export default { logsBloom: 'EthbloomBloom' }, /** - * Lookup498: ethbloom::Bloom + * Lookup527: ethbloom::Bloom **/ EthbloomBloom: '[u8;256]', /** - * Lookup500: ethereum::receipt::ReceiptV3 + * Lookup529: ethereum::receipt::ReceiptV3 **/ EthereumReceiptReceiptV3: { _enum: { @@ -3444,7 +3646,7 @@ export default { } }, /** - * Lookup501: ethereum::receipt::EIP658ReceiptData + * Lookup530: ethereum::receipt::EIP658ReceiptData **/ EthereumReceiptEip658ReceiptData: { statusCode: 'u8', @@ -3453,7 +3655,7 @@ export default { logs: 'Vec' }, /** - * Lookup502: ethereum::block::Block + * Lookup531: ethereum::block::Block **/ EthereumBlock: { header: 'EthereumHeader', @@ -3461,7 +3663,7 @@ export default { ommers: 'Vec' }, /** - * Lookup503: ethereum::header::Header + * Lookup532: ethereum::header::Header **/ EthereumHeader: { parentHash: 'H256', @@ -3481,23 +3683,23 @@ export default { nonce: 'EthereumTypesHashH64' }, /** - * Lookup504: ethereum_types::hash::H64 + * Lookup533: ethereum_types::hash::H64 **/ EthereumTypesHashH64: '[u8;8]', /** - * Lookup509: pallet_ethereum::pallet::Error + * Lookup538: pallet_ethereum::pallet::Error **/ PalletEthereumError: { _enum: ['InvalidSignature', 'PreLogExists'] }, /** - * Lookup510: pallet_evm_coder_substrate::pallet::Error + * Lookup539: pallet_evm_coder_substrate::pallet::Error **/ PalletEvmCoderSubstrateError: { _enum: ['OutOfGas', 'OutOfFund'] }, /** - * Lookup511: up_data_structs::SponsorshipState> + * Lookup540: up_data_structs::SponsorshipState> **/ UpDataStructsSponsorshipStateBasicCrossAccountIdRepr: { _enum: { @@ -3507,35 +3709,35 @@ export default { } }, /** - * Lookup512: pallet_evm_contract_helpers::SponsoringModeT + * Lookup541: pallet_evm_contract_helpers::SponsoringModeT **/ PalletEvmContractHelpersSponsoringModeT: { _enum: ['Disabled', 'Allowlisted', 'Generous'] }, /** - * Lookup518: pallet_evm_contract_helpers::pallet::Error + * Lookup547: pallet_evm_contract_helpers::pallet::Error **/ PalletEvmContractHelpersError: { _enum: ['NoPermission', 'NoPendingSponsor', 'TooManyMethodsHaveSponsoredLimit'] }, /** - * Lookup519: pallet_evm_migration::pallet::Error + * Lookup548: pallet_evm_migration::pallet::Error **/ PalletEvmMigrationError: { _enum: ['AccountNotEmpty', 'AccountIsNotMigrating', 'BadEvent'] }, /** - * Lookup520: pallet_maintenance::pallet::Error + * Lookup549: pallet_maintenance::pallet::Error **/ PalletMaintenanceError: 'Null', /** - * Lookup521: pallet_test_utils::pallet::Error + * Lookup550: pallet_test_utils::pallet::Error **/ PalletTestUtilsError: { _enum: ['TestPalletDisabled', 'TriggerRollback'] }, /** - * Lookup523: sp_runtime::MultiSignature + * Lookup552: sp_runtime::MultiSignature **/ SpRuntimeMultiSignature: { _enum: { @@ -3545,55 +3747,55 @@ export default { } }, /** - * Lookup524: sp_core::ed25519::Signature + * Lookup553: sp_core::ed25519::Signature **/ SpCoreEd25519Signature: '[u8;64]', /** - * Lookup526: sp_core::sr25519::Signature + * Lookup555: sp_core::sr25519::Signature **/ SpCoreSr25519Signature: '[u8;64]', /** - * Lookup527: sp_core::ecdsa::Signature + * Lookup556: sp_core::ecdsa::Signature **/ SpCoreEcdsaSignature: '[u8;65]', /** - * Lookup530: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup559: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: 'Null', /** - * Lookup531: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup560: frame_system::extensions::check_tx_version::CheckTxVersion **/ FrameSystemExtensionsCheckTxVersion: 'Null', /** - * Lookup532: frame_system::extensions::check_genesis::CheckGenesis + * Lookup561: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: 'Null', /** - * Lookup535: frame_system::extensions::check_nonce::CheckNonce + * Lookup564: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: 'Compact', /** - * Lookup536: frame_system::extensions::check_weight::CheckWeight + * Lookup565: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: 'Null', /** - * Lookup537: opal_runtime::runtime_common::maintenance::CheckMaintenance + * Lookup566: opal_runtime::runtime_common::maintenance::CheckMaintenance **/ OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance: 'Null', /** - * Lookup538: opal_runtime::runtime_common::identity::DisableIdentityCalls + * Lookup567: opal_runtime::runtime_common::identity::DisableIdentityCalls **/ OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls: 'Null', /** - * Lookup539: pallet_template_transaction_payment::ChargeTransactionPayment + * Lookup568: pallet_template_transaction_payment::ChargeTransactionPayment **/ PalletTemplateTransactionPaymentChargeTransactionPayment: 'Compact', /** - * Lookup540: opal_runtime::Runtime + * Lookup569: opal_runtime::Runtime **/ OpalRuntimeRuntime: 'Null', /** - * Lookup541: pallet_ethereum::FakeTransactionFinalizer + * Lookup570: pallet_ethereum::FakeTransactionFinalizer **/ PalletEthereumFakeTransactionFinalizer: 'Null' }; diff --git a/tests/src/interfaces/povinfo/index.ts b/tests/src/interfaces/povinfo/index.ts index 2d307291c3..7f1de782f7 100644 --- a/tests/src/interfaces/povinfo/index.ts +++ b/tests/src/interfaces/povinfo/index.ts @@ -1,4 +1,4 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -export * from './types'; +export * from './types.js'; diff --git a/tests/src/interfaces/registry.ts b/tests/src/interfaces/registry.ts index 78bcd501ee..2a8cef1c71 100644 --- a/tests/src/interfaces/registry.ts +++ b/tests/src/interfaces/registry.ts @@ -5,7 +5,7 @@ // this is required to allow for ambient/previous definitions import '@polkadot/types/types/registry'; -import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportPalletId, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls, OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance, OpalRuntimeRuntimeCommonSessionKeys, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensModuleCall, OrmlTokensModuleError, OrmlTokensModuleEvent, OrmlTokensReserveData, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, OrmlXtokensModuleCall, OrmlXtokensModuleError, OrmlXtokensModuleEvent, PalletAppPromotionCall, PalletAppPromotionError, PalletAppPromotionEvent, PalletAuthorshipCall, PalletAuthorshipError, PalletAuthorshipUncleEntryItem, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReserveData, PalletCollatorSelectionCall, PalletCollatorSelectionError, PalletCollatorSelectionEvent, PalletCommonError, PalletCommonEvent, PalletConfigurationAppPromotionConfiguration, PalletConfigurationCall, PalletConfigurationError, PalletConfigurationEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersEvent, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletEvmMigrationEvent, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletForeignAssetsModuleCall, PalletForeignAssetsModuleError, PalletForeignAssetsModuleEvent, PalletForeignAssetsNativeCurrency, PalletFungibleError, PalletIdentityBitFlags, PalletIdentityCall, PalletIdentityError, PalletIdentityEvent, PalletIdentityIdentityField, PalletIdentityIdentityInfo, PalletIdentityJudgement, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletRefungibleError, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsEvent, PalletTimestampCall, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletXcmCall, PalletXcmError, PalletXcmEvent, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpRuntimeBlakeTwo256, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeHeader, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionValidityInvalidTransaction, SpRuntimeTransactionValidityTransactionValidityError, SpRuntimeTransactionValidityUnknownTransaction, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsRpcCollectionFlags, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipStateAccountId32, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, UpDataStructsTokenData, UpPovEstimateRpcPovInfo, UpPovEstimateRpcTrieKeyValue, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAsset, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; +import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportPalletId, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls, OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance, OpalRuntimeRuntimeCommonSessionKeys, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensModuleCall, OrmlTokensModuleError, OrmlTokensModuleEvent, OrmlTokensReserveData, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, OrmlXtokensModuleCall, OrmlXtokensModuleError, OrmlXtokensModuleEvent, PalletAppPromotionCall, PalletAppPromotionError, PalletAppPromotionEvent, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReserveData, PalletCollatorSelectionCall, PalletCollatorSelectionError, PalletCollatorSelectionEvent, PalletCommonError, PalletCommonEvent, PalletConfigurationAppPromotionConfiguration, PalletConfigurationCall, PalletConfigurationError, PalletConfigurationEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersCall, PalletEvmContractHelpersError, PalletEvmContractHelpersEvent, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletEvmMigrationEvent, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletForeignAssetsModuleCall, PalletForeignAssetsModuleError, PalletForeignAssetsModuleEvent, PalletForeignAssetsNativeCurrency, PalletFungibleError, PalletIdentityBitFlags, PalletIdentityCall, PalletIdentityError, PalletIdentityEvent, PalletIdentityIdentityField, PalletIdentityIdentityInfo, PalletIdentityJudgement, PalletIdentityRegistrarInfo, PalletIdentityRegistration, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletRefungibleError, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsEvent, PalletTimestampCall, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmQueryStatus, PalletXcmRemoteLockedFungibleRecord, PalletXcmVersionMigrationStage, ParachainInfoCall, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionValidityInvalidTransaction, SpRuntimeTransactionValidityTransactionValidityError, SpRuntimeTransactionValidityUnknownTransaction, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsRpcCollectionFlags, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipStateAccountId32, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, UpDataStructsTokenData, UpPovEstimateRpcPovInfo, UpPovEstimateRpcTrieKeyValue, XcmDoubleEncoded, XcmV2BodyId, XcmV2BodyPart, XcmV2Instruction, XcmV2Junction, XcmV2MultiAsset, XcmV2MultiLocation, XcmV2MultiassetAssetId, XcmV2MultiassetAssetInstance, XcmV2MultiassetFungibility, XcmV2MultiassetMultiAssetFilter, XcmV2MultiassetMultiAssets, XcmV2MultiassetWildFungibility, XcmV2MultiassetWildMultiAsset, XcmV2MultilocationJunctions, XcmV2NetworkId, XcmV2OriginKind, XcmV2Response, XcmV2TraitsError, XcmV2WeightLimit, XcmV2Xcm, XcmV3Instruction, XcmV3Junction, XcmV3JunctionBodyId, XcmV3JunctionBodyPart, XcmV3JunctionNetworkId, XcmV3Junctions, XcmV3MaybeErrorCode, XcmV3MultiAsset, XcmV3MultiLocation, XcmV3MultiassetAssetId, XcmV3MultiassetAssetInstance, XcmV3MultiassetFungibility, XcmV3MultiassetMultiAssetFilter, XcmV3MultiassetMultiAssets, XcmV3MultiassetWildFungibility, XcmV3MultiassetWildMultiAsset, XcmV3PalletInfo, XcmV3QueryResponseInfo, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3WeightLimit, XcmV3Xcm, XcmVersionedAssetId, XcmVersionedMultiAsset, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedResponse, XcmVersionedXcm } from '@polkadot/types/lookup'; declare module '@polkadot/types/types/registry' { interface InterfaceTypes { @@ -93,9 +93,6 @@ declare module '@polkadot/types/types/registry' { PalletAppPromotionCall: PalletAppPromotionCall; PalletAppPromotionError: PalletAppPromotionError; PalletAppPromotionEvent: PalletAppPromotionEvent; - PalletAuthorshipCall: PalletAuthorshipCall; - PalletAuthorshipError: PalletAuthorshipError; - PalletAuthorshipUncleEntryItem: PalletAuthorshipUncleEntryItem; PalletBalancesAccountData: PalletBalancesAccountData; PalletBalancesBalanceLock: PalletBalancesBalanceLock; PalletBalancesCall: PalletBalancesCall; @@ -118,7 +115,9 @@ declare module '@polkadot/types/types/registry' { PalletEthereumFakeTransactionFinalizer: PalletEthereumFakeTransactionFinalizer; PalletEvmAccountBasicCrossAccountIdRepr: PalletEvmAccountBasicCrossAccountIdRepr; PalletEvmCall: PalletEvmCall; + PalletEvmCoderSubstrateCall: PalletEvmCoderSubstrateCall; PalletEvmCoderSubstrateError: PalletEvmCoderSubstrateError; + PalletEvmContractHelpersCall: PalletEvmContractHelpersCall; PalletEvmContractHelpersError: PalletEvmContractHelpersError; PalletEvmContractHelpersEvent: PalletEvmContractHelpersEvent; PalletEvmContractHelpersSponsoringModeT: PalletEvmContractHelpersSponsoringModeT; @@ -180,6 +179,10 @@ declare module '@polkadot/types/types/registry' { PalletXcmCall: PalletXcmCall; PalletXcmError: PalletXcmError; PalletXcmEvent: PalletXcmEvent; + PalletXcmQueryStatus: PalletXcmQueryStatus; + PalletXcmRemoteLockedFungibleRecord: PalletXcmRemoteLockedFungibleRecord; + PalletXcmVersionMigrationStage: PalletXcmVersionMigrationStage; + ParachainInfoCall: ParachainInfoCall; PhantomTypeUpDataStructs: PhantomTypeUpDataStructs; PolkadotCorePrimitivesInboundDownwardMessage: PolkadotCorePrimitivesInboundDownwardMessage; PolkadotCorePrimitivesInboundHrmpMessage: PolkadotCorePrimitivesInboundHrmpMessage; @@ -196,11 +199,9 @@ declare module '@polkadot/types/types/registry' { SpCoreEd25519Signature: SpCoreEd25519Signature; SpCoreSr25519Public: SpCoreSr25519Public; SpCoreSr25519Signature: SpCoreSr25519Signature; - SpRuntimeBlakeTwo256: SpRuntimeBlakeTwo256; SpRuntimeDigest: SpRuntimeDigest; SpRuntimeDigestDigestItem: SpRuntimeDigestDigestItem; SpRuntimeDispatchError: SpRuntimeDispatchError; - SpRuntimeHeader: SpRuntimeHeader; SpRuntimeModuleError: SpRuntimeModuleError; SpRuntimeMultiSignature: SpRuntimeMultiSignature; SpRuntimeTokenError: SpRuntimeTokenError; @@ -246,39 +247,54 @@ declare module '@polkadot/types/types/registry' { UpPovEstimateRpcPovInfo: UpPovEstimateRpcPovInfo; UpPovEstimateRpcTrieKeyValue: UpPovEstimateRpcTrieKeyValue; XcmDoubleEncoded: XcmDoubleEncoded; - XcmV0Junction: XcmV0Junction; - XcmV0JunctionBodyId: XcmV0JunctionBodyId; - XcmV0JunctionBodyPart: XcmV0JunctionBodyPart; - XcmV0JunctionNetworkId: XcmV0JunctionNetworkId; - XcmV0MultiAsset: XcmV0MultiAsset; - XcmV0MultiLocation: XcmV0MultiLocation; - XcmV0Order: XcmV0Order; - XcmV0OriginKind: XcmV0OriginKind; - XcmV0Response: XcmV0Response; - XcmV0Xcm: XcmV0Xcm; - XcmV1Junction: XcmV1Junction; - XcmV1MultiAsset: XcmV1MultiAsset; - XcmV1MultiLocation: XcmV1MultiLocation; - XcmV1MultiassetAssetId: XcmV1MultiassetAssetId; - XcmV1MultiassetAssetInstance: XcmV1MultiassetAssetInstance; - XcmV1MultiassetFungibility: XcmV1MultiassetFungibility; - XcmV1MultiassetMultiAssetFilter: XcmV1MultiassetMultiAssetFilter; - XcmV1MultiassetMultiAssets: XcmV1MultiassetMultiAssets; - XcmV1MultiassetWildFungibility: XcmV1MultiassetWildFungibility; - XcmV1MultiassetWildMultiAsset: XcmV1MultiassetWildMultiAsset; - XcmV1MultilocationJunctions: XcmV1MultilocationJunctions; - XcmV1Order: XcmV1Order; - XcmV1Response: XcmV1Response; - XcmV1Xcm: XcmV1Xcm; + XcmV2BodyId: XcmV2BodyId; + XcmV2BodyPart: XcmV2BodyPart; XcmV2Instruction: XcmV2Instruction; + XcmV2Junction: XcmV2Junction; + XcmV2MultiAsset: XcmV2MultiAsset; + XcmV2MultiLocation: XcmV2MultiLocation; + XcmV2MultiassetAssetId: XcmV2MultiassetAssetId; + XcmV2MultiassetAssetInstance: XcmV2MultiassetAssetInstance; + XcmV2MultiassetFungibility: XcmV2MultiassetFungibility; + XcmV2MultiassetMultiAssetFilter: XcmV2MultiassetMultiAssetFilter; + XcmV2MultiassetMultiAssets: XcmV2MultiassetMultiAssets; + XcmV2MultiassetWildFungibility: XcmV2MultiassetWildFungibility; + XcmV2MultiassetWildMultiAsset: XcmV2MultiassetWildMultiAsset; + XcmV2MultilocationJunctions: XcmV2MultilocationJunctions; + XcmV2NetworkId: XcmV2NetworkId; + XcmV2OriginKind: XcmV2OriginKind; XcmV2Response: XcmV2Response; XcmV2TraitsError: XcmV2TraitsError; - XcmV2TraitsOutcome: XcmV2TraitsOutcome; XcmV2WeightLimit: XcmV2WeightLimit; XcmV2Xcm: XcmV2Xcm; + XcmV3Instruction: XcmV3Instruction; + XcmV3Junction: XcmV3Junction; + XcmV3JunctionBodyId: XcmV3JunctionBodyId; + XcmV3JunctionBodyPart: XcmV3JunctionBodyPart; + XcmV3JunctionNetworkId: XcmV3JunctionNetworkId; + XcmV3Junctions: XcmV3Junctions; + XcmV3MaybeErrorCode: XcmV3MaybeErrorCode; + XcmV3MultiAsset: XcmV3MultiAsset; + XcmV3MultiLocation: XcmV3MultiLocation; + XcmV3MultiassetAssetId: XcmV3MultiassetAssetId; + XcmV3MultiassetAssetInstance: XcmV3MultiassetAssetInstance; + XcmV3MultiassetFungibility: XcmV3MultiassetFungibility; + XcmV3MultiassetMultiAssetFilter: XcmV3MultiassetMultiAssetFilter; + XcmV3MultiassetMultiAssets: XcmV3MultiassetMultiAssets; + XcmV3MultiassetWildFungibility: XcmV3MultiassetWildFungibility; + XcmV3MultiassetWildMultiAsset: XcmV3MultiassetWildMultiAsset; + XcmV3PalletInfo: XcmV3PalletInfo; + XcmV3QueryResponseInfo: XcmV3QueryResponseInfo; + XcmV3Response: XcmV3Response; + XcmV3TraitsError: XcmV3TraitsError; + XcmV3TraitsOutcome: XcmV3TraitsOutcome; + XcmV3WeightLimit: XcmV3WeightLimit; + XcmV3Xcm: XcmV3Xcm; + XcmVersionedAssetId: XcmVersionedAssetId; XcmVersionedMultiAsset: XcmVersionedMultiAsset; XcmVersionedMultiAssets: XcmVersionedMultiAssets; XcmVersionedMultiLocation: XcmVersionedMultiLocation; + XcmVersionedResponse: XcmVersionedResponse; XcmVersionedXcm: XcmVersionedXcm; } // InterfaceTypes } // declare module diff --git a/tests/src/interfaces/types-lookup.ts b/tests/src/interfaces/types-lookup.ts index 161e5a2f41..e267d5ac26 100644 --- a/tests/src/interfaces/types-lookup.ts +++ b/tests/src/interfaces/types-lookup.ts @@ -194,10 +194,14 @@ declare module '@polkadot/types/lookup' { readonly weightUsed: SpWeightsWeightV2Weight; readonly dmqHead: H256; } & Struct; - readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed'; + readonly isUpwardMessageSent: boolean; + readonly asUpwardMessageSent: { + readonly messageHash: Option; + } & Struct; + readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed' | 'UpwardMessageSent'; } - /** @name PalletCollatorSelectionEvent (30) */ + /** @name PalletCollatorSelectionEvent (31) */ interface PalletCollatorSelectionEvent extends Enum { readonly isInvulnerableAdded: boolean; readonly asInvulnerableAdded: { @@ -228,7 +232,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvulnerableAdded' | 'InvulnerableRemoved' | 'LicenseObtained' | 'LicenseReleased' | 'CandidateAdded' | 'CandidateRemoved'; } - /** @name PalletSessionEvent (31) */ + /** @name PalletSessionEvent (32) */ interface PalletSessionEvent extends Enum { readonly isNewSession: boolean; readonly asNewSession: { @@ -237,7 +241,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NewSession'; } - /** @name PalletBalancesEvent (32) */ + /** @name PalletBalancesEvent (33) */ interface PalletBalancesEvent extends Enum { readonly isEndowed: boolean; readonly asEndowed: { @@ -296,14 +300,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed'; } - /** @name FrameSupportTokensMiscBalanceStatus (33) */ + /** @name FrameSupportTokensMiscBalanceStatus (34) */ interface FrameSupportTokensMiscBalanceStatus extends Enum { readonly isFree: boolean; readonly isReserved: boolean; readonly type: 'Free' | 'Reserved'; } - /** @name PalletTransactionPaymentEvent (34) */ + /** @name PalletTransactionPaymentEvent (35) */ interface PalletTransactionPaymentEvent extends Enum { readonly isTransactionFeePaid: boolean; readonly asTransactionFeePaid: { @@ -314,7 +318,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'TransactionFeePaid'; } - /** @name PalletTreasuryEvent (35) */ + /** @name PalletTreasuryEvent (36) */ interface PalletTreasuryEvent extends Enum { readonly isProposed: boolean; readonly asProposed: { @@ -361,7 +365,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit' | 'SpendApproved' | 'UpdatedInactive'; } - /** @name PalletSudoEvent (36) */ + /** @name PalletSudoEvent (37) */ interface PalletSudoEvent extends Enum { readonly isSudid: boolean; readonly asSudid: { @@ -378,7 +382,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone'; } - /** @name OrmlVestingModuleEvent (40) */ + /** @name OrmlVestingModuleEvent (41) */ interface OrmlVestingModuleEvent extends Enum { readonly isVestingScheduleAdded: boolean; readonly asVestingScheduleAdded: { @@ -398,7 +402,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'VestingScheduleAdded' | 'Claimed' | 'VestingSchedulesUpdated'; } - /** @name OrmlVestingVestingSchedule (41) */ + /** @name OrmlVestingVestingSchedule (42) */ interface OrmlVestingVestingSchedule extends Struct { readonly start: u32; readonly period: u32; @@ -406,81 +410,81 @@ declare module '@polkadot/types/lookup' { readonly perPeriod: Compact; } - /** @name OrmlXtokensModuleEvent (43) */ + /** @name OrmlXtokensModuleEvent (44) */ interface OrmlXtokensModuleEvent extends Enum { readonly isTransferredMultiAssets: boolean; readonly asTransferredMultiAssets: { readonly sender: AccountId32; - readonly assets: XcmV1MultiassetMultiAssets; - readonly fee: XcmV1MultiAsset; - readonly dest: XcmV1MultiLocation; + readonly assets: XcmV3MultiassetMultiAssets; + readonly fee: XcmV3MultiAsset; + readonly dest: XcmV3MultiLocation; } & Struct; readonly type: 'TransferredMultiAssets'; } - /** @name XcmV1MultiassetMultiAssets (44) */ - interface XcmV1MultiassetMultiAssets extends Vec {} + /** @name XcmV3MultiassetMultiAssets (45) */ + interface XcmV3MultiassetMultiAssets extends Vec {} - /** @name XcmV1MultiAsset (46) */ - interface XcmV1MultiAsset extends Struct { - readonly id: XcmV1MultiassetAssetId; - readonly fun: XcmV1MultiassetFungibility; + /** @name XcmV3MultiAsset (47) */ + interface XcmV3MultiAsset extends Struct { + readonly id: XcmV3MultiassetAssetId; + readonly fun: XcmV3MultiassetFungibility; } - /** @name XcmV1MultiassetAssetId (47) */ - interface XcmV1MultiassetAssetId extends Enum { + /** @name XcmV3MultiassetAssetId (48) */ + interface XcmV3MultiassetAssetId extends Enum { readonly isConcrete: boolean; - readonly asConcrete: XcmV1MultiLocation; + readonly asConcrete: XcmV3MultiLocation; readonly isAbstract: boolean; - readonly asAbstract: Bytes; + readonly asAbstract: U8aFixed; readonly type: 'Concrete' | 'Abstract'; } - /** @name XcmV1MultiLocation (48) */ - interface XcmV1MultiLocation extends Struct { + /** @name XcmV3MultiLocation (49) */ + interface XcmV3MultiLocation extends Struct { readonly parents: u8; - readonly interior: XcmV1MultilocationJunctions; + readonly interior: XcmV3Junctions; } - /** @name XcmV1MultilocationJunctions (49) */ - interface XcmV1MultilocationJunctions extends Enum { + /** @name XcmV3Junctions (50) */ + interface XcmV3Junctions extends Enum { readonly isHere: boolean; readonly isX1: boolean; - readonly asX1: XcmV1Junction; + readonly asX1: XcmV3Junction; readonly isX2: boolean; - readonly asX2: ITuple<[XcmV1Junction, XcmV1Junction]>; + readonly asX2: ITuple<[XcmV3Junction, XcmV3Junction]>; readonly isX3: boolean; - readonly asX3: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX3: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction]>; readonly isX4: boolean; - readonly asX4: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX4: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; readonly isX5: boolean; - readonly asX5: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX5: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; readonly isX6: boolean; - readonly asX6: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX6: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; readonly isX7: boolean; - readonly asX7: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX7: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; readonly isX8: boolean; - readonly asX8: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX8: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; } - /** @name XcmV1Junction (50) */ - interface XcmV1Junction extends Enum { + /** @name XcmV3Junction (51) */ + interface XcmV3Junction extends Enum { readonly isParachain: boolean; readonly asParachain: Compact; readonly isAccountId32: boolean; readonly asAccountId32: { - readonly network: XcmV0JunctionNetworkId; + readonly network: Option; readonly id: U8aFixed; } & Struct; readonly isAccountIndex64: boolean; readonly asAccountIndex64: { - readonly network: XcmV0JunctionNetworkId; + readonly network: Option; readonly index: Compact; } & Struct; readonly isAccountKey20: boolean; readonly asAccountKey20: { - readonly network: XcmV0JunctionNetworkId; + readonly network: Option; readonly key: U8aFixed; } & Struct; readonly isPalletInstance: boolean; @@ -488,31 +492,49 @@ declare module '@polkadot/types/lookup' { readonly isGeneralIndex: boolean; readonly asGeneralIndex: Compact; readonly isGeneralKey: boolean; - readonly asGeneralKey: Bytes; + readonly asGeneralKey: { + readonly length: u8; + readonly data: U8aFixed; + } & Struct; readonly isOnlyChild: boolean; readonly isPlurality: boolean; readonly asPlurality: { - readonly id: XcmV0JunctionBodyId; - readonly part: XcmV0JunctionBodyPart; + readonly id: XcmV3JunctionBodyId; + readonly part: XcmV3JunctionBodyPart; } & Struct; - readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality'; + readonly isGlobalConsensus: boolean; + readonly asGlobalConsensus: XcmV3JunctionNetworkId; + readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality' | 'GlobalConsensus'; } - /** @name XcmV0JunctionNetworkId (52) */ - interface XcmV0JunctionNetworkId extends Enum { - readonly isAny: boolean; - readonly isNamed: boolean; - readonly asNamed: Bytes; + /** @name XcmV3JunctionNetworkId (54) */ + interface XcmV3JunctionNetworkId extends Enum { + readonly isByGenesis: boolean; + readonly asByGenesis: U8aFixed; + readonly isByFork: boolean; + readonly asByFork: { + readonly blockNumber: u64; + readonly blockHash: U8aFixed; + } & Struct; readonly isPolkadot: boolean; readonly isKusama: boolean; - readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama'; + readonly isWestend: boolean; + readonly isRococo: boolean; + readonly isWococo: boolean; + readonly isEthereum: boolean; + readonly asEthereum: { + readonly chainId: Compact; + } & Struct; + readonly isBitcoinCore: boolean; + readonly isBitcoinCash: boolean; + readonly type: 'ByGenesis' | 'ByFork' | 'Polkadot' | 'Kusama' | 'Westend' | 'Rococo' | 'Wococo' | 'Ethereum' | 'BitcoinCore' | 'BitcoinCash'; } - /** @name XcmV0JunctionBodyId (55) */ - interface XcmV0JunctionBodyId extends Enum { + /** @name XcmV3JunctionBodyId (56) */ + interface XcmV3JunctionBodyId extends Enum { readonly isUnit: boolean; - readonly isNamed: boolean; - readonly asNamed: Bytes; + readonly isMoniker: boolean; + readonly asMoniker: U8aFixed; readonly isIndex: boolean; readonly asIndex: Compact; readonly isExecutive: boolean; @@ -522,11 +544,11 @@ declare module '@polkadot/types/lookup' { readonly isDefense: boolean; readonly isAdministration: boolean; readonly isTreasury: boolean; - readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; + readonly type: 'Unit' | 'Moniker' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; } - /** @name XcmV0JunctionBodyPart (56) */ - interface XcmV0JunctionBodyPart extends Enum { + /** @name XcmV3JunctionBodyPart (57) */ + interface XcmV3JunctionBodyPart extends Enum { readonly isVoice: boolean; readonly isMembers: boolean; readonly asMembers: { @@ -550,17 +572,17 @@ declare module '@polkadot/types/lookup' { readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; } - /** @name XcmV1MultiassetFungibility (57) */ - interface XcmV1MultiassetFungibility extends Enum { + /** @name XcmV3MultiassetFungibility (58) */ + interface XcmV3MultiassetFungibility extends Enum { readonly isFungible: boolean; readonly asFungible: Compact; readonly isNonFungible: boolean; - readonly asNonFungible: XcmV1MultiassetAssetInstance; + readonly asNonFungible: XcmV3MultiassetAssetInstance; readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV1MultiassetAssetInstance (58) */ - interface XcmV1MultiassetAssetInstance extends Enum { + /** @name XcmV3MultiassetAssetInstance (59) */ + interface XcmV3MultiassetAssetInstance extends Enum { readonly isUndefined: boolean; readonly isIndex: boolean; readonly asIndex: Compact; @@ -572,12 +594,10 @@ declare module '@polkadot/types/lookup' { readonly asArray16: U8aFixed; readonly isArray32: boolean; readonly asArray32: U8aFixed; - readonly isBlob: boolean; - readonly asBlob: Bytes; - readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob'; + readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32'; } - /** @name OrmlTokensModuleEvent (61) */ + /** @name OrmlTokensModuleEvent (62) */ interface OrmlTokensModuleEvent extends Enum { readonly isEndowed: boolean; readonly asEndowed: { @@ -662,10 +682,22 @@ declare module '@polkadot/types/lookup' { readonly currencyId: PalletForeignAssetsAssetIds; readonly who: AccountId32; } & Struct; - readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'BalanceSet' | 'TotalIssuanceSet' | 'Withdrawn' | 'Slashed' | 'Deposited' | 'LockSet' | 'LockRemoved'; + readonly isLocked: boolean; + readonly asLocked: { + readonly currencyId: PalletForeignAssetsAssetIds; + readonly who: AccountId32; + readonly amount: u128; + } & Struct; + readonly isUnlocked: boolean; + readonly asUnlocked: { + readonly currencyId: PalletForeignAssetsAssetIds; + readonly who: AccountId32; + readonly amount: u128; + } & Struct; + readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'BalanceSet' | 'TotalIssuanceSet' | 'Withdrawn' | 'Slashed' | 'Deposited' | 'LockSet' | 'LockRemoved' | 'Locked' | 'Unlocked'; } - /** @name PalletForeignAssetsAssetIds (62) */ + /** @name PalletForeignAssetsAssetIds (63) */ interface PalletForeignAssetsAssetIds extends Enum { readonly isForeignAssetId: boolean; readonly asForeignAssetId: u32; @@ -674,14 +706,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'ForeignAssetId' | 'NativeAssetId'; } - /** @name PalletForeignAssetsNativeCurrency (63) */ + /** @name PalletForeignAssetsNativeCurrency (64) */ interface PalletForeignAssetsNativeCurrency extends Enum { readonly isHere: boolean; readonly isParent: boolean; readonly type: 'Here' | 'Parent'; } - /** @name PalletIdentityEvent (64) */ + /** @name PalletIdentityEvent (65) */ interface PalletIdentityEvent extends Enum { readonly isIdentitySet: boolean; readonly asIdentitySet: { @@ -749,7 +781,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'IdentitySet' | 'IdentityCleared' | 'IdentityKilled' | 'IdentitiesInserted' | 'IdentitiesRemoved' | 'JudgementRequested' | 'JudgementUnrequested' | 'JudgementGiven' | 'RegistrarAdded' | 'SubIdentityAdded' | 'SubIdentityRemoved' | 'SubIdentityRevoked' | 'SubIdentitiesInserted'; } - /** @name PalletPreimageEvent (65) */ + /** @name PalletPreimageEvent (66) */ interface PalletPreimageEvent extends Enum { readonly isNoted: boolean; readonly asNoted: { @@ -766,34 +798,30 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noted' | 'Requested' | 'Cleared'; } - /** @name CumulusPalletXcmpQueueEvent (66) */ + /** @name CumulusPalletXcmpQueueEvent (67) */ interface CumulusPalletXcmpQueueEvent extends Enum { readonly isSuccess: boolean; readonly asSuccess: { - readonly messageHash: Option; + readonly messageHash: Option; readonly weight: SpWeightsWeightV2Weight; } & Struct; readonly isFail: boolean; readonly asFail: { - readonly messageHash: Option; - readonly error: XcmV2TraitsError; + readonly messageHash: Option; + readonly error: XcmV3TraitsError; readonly weight: SpWeightsWeightV2Weight; } & Struct; readonly isBadVersion: boolean; readonly asBadVersion: { - readonly messageHash: Option; + readonly messageHash: Option; } & Struct; readonly isBadFormat: boolean; readonly asBadFormat: { - readonly messageHash: Option; - } & Struct; - readonly isUpwardMessageSent: boolean; - readonly asUpwardMessageSent: { - readonly messageHash: Option; + readonly messageHash: Option; } & Struct; readonly isXcmpMessageSent: boolean; readonly asXcmpMessageSent: { - readonly messageHash: Option; + readonly messageHash: Option; } & Struct; readonly isOverweightEnqueued: boolean; readonly asOverweightEnqueued: { @@ -807,17 +835,17 @@ declare module '@polkadot/types/lookup' { readonly index: u64; readonly used: SpWeightsWeightV2Weight; } & Struct; - readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced'; + readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced'; } - /** @name XcmV2TraitsError (68) */ - interface XcmV2TraitsError extends Enum { + /** @name XcmV3TraitsError (68) */ + interface XcmV3TraitsError extends Enum { readonly isOverflow: boolean; readonly isUnimplemented: boolean; readonly isUntrustedReserveLocation: boolean; readonly isUntrustedTeleportLocation: boolean; - readonly isMultiLocationFull: boolean; - readonly isMultiLocationNotInvertible: boolean; + readonly isLocationFull: boolean; + readonly isLocationNotInvertible: boolean; readonly isBadOrigin: boolean; readonly isInvalidLocation: boolean; readonly isAssetNotFound: boolean; @@ -835,24 +863,38 @@ declare module '@polkadot/types/lookup' { readonly isTooExpensive: boolean; readonly isTrap: boolean; readonly asTrap: u64; + readonly isExpectationFalse: boolean; + readonly isPalletNotFound: boolean; + readonly isNameMismatch: boolean; + readonly isVersionIncompatible: boolean; + readonly isHoldingWouldOverflow: boolean; + readonly isExportError: boolean; + readonly isReanchorFailed: boolean; + readonly isNoDeal: boolean; + readonly isFeesNotMet: boolean; + readonly isLockError: boolean; + readonly isNoPermission: boolean; + readonly isUnanchored: boolean; + readonly isNotDepositable: boolean; readonly isUnhandledXcmVersion: boolean; readonly isWeightLimitReached: boolean; - readonly asWeightLimitReached: u64; + readonly asWeightLimitReached: SpWeightsWeightV2Weight; readonly isBarrier: boolean; readonly isWeightNotComputable: boolean; - readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable'; + readonly isExceedsStackLimit: boolean; + readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'LocationFull' | 'LocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'ExpectationFalse' | 'PalletNotFound' | 'NameMismatch' | 'VersionIncompatible' | 'HoldingWouldOverflow' | 'ExportError' | 'ReanchorFailed' | 'NoDeal' | 'FeesNotMet' | 'LockError' | 'NoPermission' | 'Unanchored' | 'NotDepositable' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable' | 'ExceedsStackLimit'; } /** @name PalletXcmEvent (70) */ interface PalletXcmEvent extends Enum { readonly isAttempted: boolean; - readonly asAttempted: XcmV2TraitsOutcome; + readonly asAttempted: XcmV3TraitsOutcome; readonly isSent: boolean; - readonly asSent: ITuple<[XcmV1MultiLocation, XcmV1MultiLocation, XcmV2Xcm]>; + readonly asSent: ITuple<[XcmV3MultiLocation, XcmV3MultiLocation, XcmV3Xcm]>; readonly isUnexpectedResponse: boolean; - readonly asUnexpectedResponse: ITuple<[XcmV1MultiLocation, u64]>; + readonly asUnexpectedResponse: ITuple<[XcmV3MultiLocation, u64]>; readonly isResponseReady: boolean; - readonly asResponseReady: ITuple<[u64, XcmV2Response]>; + readonly asResponseReady: ITuple<[u64, XcmV3Response]>; readonly isNotified: boolean; readonly asNotified: ITuple<[u64, u8, u8]>; readonly isNotifyOverweight: boolean; @@ -862,69 +904,82 @@ declare module '@polkadot/types/lookup' { readonly isNotifyDecodeFailed: boolean; readonly asNotifyDecodeFailed: ITuple<[u64, u8, u8]>; readonly isInvalidResponder: boolean; - readonly asInvalidResponder: ITuple<[XcmV1MultiLocation, u64, Option]>; + readonly asInvalidResponder: ITuple<[XcmV3MultiLocation, u64, Option]>; readonly isInvalidResponderVersion: boolean; - readonly asInvalidResponderVersion: ITuple<[XcmV1MultiLocation, u64]>; + readonly asInvalidResponderVersion: ITuple<[XcmV3MultiLocation, u64]>; readonly isResponseTaken: boolean; readonly asResponseTaken: u64; readonly isAssetsTrapped: boolean; - readonly asAssetsTrapped: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>; + readonly asAssetsTrapped: ITuple<[H256, XcmV3MultiLocation, XcmVersionedMultiAssets]>; readonly isVersionChangeNotified: boolean; - readonly asVersionChangeNotified: ITuple<[XcmV1MultiLocation, u32]>; + readonly asVersionChangeNotified: ITuple<[XcmV3MultiLocation, u32, XcmV3MultiassetMultiAssets]>; readonly isSupportedVersionChanged: boolean; - readonly asSupportedVersionChanged: ITuple<[XcmV1MultiLocation, u32]>; + readonly asSupportedVersionChanged: ITuple<[XcmV3MultiLocation, u32]>; readonly isNotifyTargetSendFail: boolean; - readonly asNotifyTargetSendFail: ITuple<[XcmV1MultiLocation, u64, XcmV2TraitsError]>; + readonly asNotifyTargetSendFail: ITuple<[XcmV3MultiLocation, u64, XcmV3TraitsError]>; readonly isNotifyTargetMigrationFail: boolean; readonly asNotifyTargetMigrationFail: ITuple<[XcmVersionedMultiLocation, u64]>; + readonly isInvalidQuerierVersion: boolean; + readonly asInvalidQuerierVersion: ITuple<[XcmV3MultiLocation, u64]>; + readonly isInvalidQuerier: boolean; + readonly asInvalidQuerier: ITuple<[XcmV3MultiLocation, u64, XcmV3MultiLocation, Option]>; + readonly isVersionNotifyStarted: boolean; + readonly asVersionNotifyStarted: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly isVersionNotifyRequested: boolean; + readonly asVersionNotifyRequested: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly isVersionNotifyUnrequested: boolean; + readonly asVersionNotifyUnrequested: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly isFeesPaid: boolean; + readonly asFeesPaid: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; readonly isAssetsClaimed: boolean; - readonly asAssetsClaimed: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>; - readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail' | 'AssetsClaimed'; + readonly asAssetsClaimed: ITuple<[H256, XcmV3MultiLocation, XcmVersionedMultiAssets]>; + readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail' | 'InvalidQuerierVersion' | 'InvalidQuerier' | 'VersionNotifyStarted' | 'VersionNotifyRequested' | 'VersionNotifyUnrequested' | 'FeesPaid' | 'AssetsClaimed'; } - /** @name XcmV2TraitsOutcome (71) */ - interface XcmV2TraitsOutcome extends Enum { + /** @name XcmV3TraitsOutcome (71) */ + interface XcmV3TraitsOutcome extends Enum { readonly isComplete: boolean; - readonly asComplete: u64; + readonly asComplete: SpWeightsWeightV2Weight; readonly isIncomplete: boolean; - readonly asIncomplete: ITuple<[u64, XcmV2TraitsError]>; + readonly asIncomplete: ITuple<[SpWeightsWeightV2Weight, XcmV3TraitsError]>; readonly isError: boolean; - readonly asError: XcmV2TraitsError; + readonly asError: XcmV3TraitsError; readonly type: 'Complete' | 'Incomplete' | 'Error'; } - /** @name XcmV2Xcm (72) */ - interface XcmV2Xcm extends Vec {} + /** @name XcmV3Xcm (72) */ + interface XcmV3Xcm extends Vec {} - /** @name XcmV2Instruction (74) */ - interface XcmV2Instruction extends Enum { + /** @name XcmV3Instruction (74) */ + interface XcmV3Instruction extends Enum { readonly isWithdrawAsset: boolean; - readonly asWithdrawAsset: XcmV1MultiassetMultiAssets; + readonly asWithdrawAsset: XcmV3MultiassetMultiAssets; readonly isReserveAssetDeposited: boolean; - readonly asReserveAssetDeposited: XcmV1MultiassetMultiAssets; + readonly asReserveAssetDeposited: XcmV3MultiassetMultiAssets; readonly isReceiveTeleportedAsset: boolean; - readonly asReceiveTeleportedAsset: XcmV1MultiassetMultiAssets; + readonly asReceiveTeleportedAsset: XcmV3MultiassetMultiAssets; readonly isQueryResponse: boolean; readonly asQueryResponse: { readonly queryId: Compact; - readonly response: XcmV2Response; - readonly maxWeight: Compact; + readonly response: XcmV3Response; + readonly maxWeight: SpWeightsWeightV2Weight; + readonly querier: Option; } & Struct; readonly isTransferAsset: boolean; readonly asTransferAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly beneficiary: XcmV1MultiLocation; + readonly assets: XcmV3MultiassetMultiAssets; + readonly beneficiary: XcmV3MultiLocation; } & Struct; readonly isTransferReserveAsset: boolean; readonly asTransferReserveAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly dest: XcmV1MultiLocation; - readonly xcm: XcmV2Xcm; + readonly assets: XcmV3MultiassetMultiAssets; + readonly dest: XcmV3MultiLocation; + readonly xcm: XcmV3Xcm; } & Struct; readonly isTransact: boolean; readonly asTransact: { - readonly originType: XcmV0OriginKind; - readonly requireWeightAtMost: Compact; + readonly originKind: XcmV2OriginKind; + readonly requireWeightAtMost: SpWeightsWeightV2Weight; readonly call: XcmDoubleEncoded; } & Struct; readonly isHrmpNewChannelOpenRequest: boolean; @@ -945,91 +1000,176 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isClearOrigin: boolean; readonly isDescendOrigin: boolean; - readonly asDescendOrigin: XcmV1MultilocationJunctions; + readonly asDescendOrigin: XcmV3Junctions; readonly isReportError: boolean; - readonly asReportError: { - readonly queryId: Compact; - readonly dest: XcmV1MultiLocation; - readonly maxResponseWeight: Compact; - } & Struct; + readonly asReportError: XcmV3QueryResponseInfo; readonly isDepositAsset: boolean; readonly asDepositAsset: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxAssets: Compact; - readonly beneficiary: XcmV1MultiLocation; + readonly assets: XcmV3MultiassetMultiAssetFilter; + readonly beneficiary: XcmV3MultiLocation; } & Struct; readonly isDepositReserveAsset: boolean; readonly asDepositReserveAsset: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxAssets: Compact; - readonly dest: XcmV1MultiLocation; - readonly xcm: XcmV2Xcm; + readonly assets: XcmV3MultiassetMultiAssetFilter; + readonly dest: XcmV3MultiLocation; + readonly xcm: XcmV3Xcm; } & Struct; readonly isExchangeAsset: boolean; readonly asExchangeAsset: { - readonly give: XcmV1MultiassetMultiAssetFilter; - readonly receive: XcmV1MultiassetMultiAssets; + readonly give: XcmV3MultiassetMultiAssetFilter; + readonly want: XcmV3MultiassetMultiAssets; + readonly maximal: bool; } & Struct; readonly isInitiateReserveWithdraw: boolean; readonly asInitiateReserveWithdraw: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly reserve: XcmV1MultiLocation; - readonly xcm: XcmV2Xcm; + readonly assets: XcmV3MultiassetMultiAssetFilter; + readonly reserve: XcmV3MultiLocation; + readonly xcm: XcmV3Xcm; } & Struct; readonly isInitiateTeleport: boolean; readonly asInitiateTeleport: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly dest: XcmV1MultiLocation; - readonly xcm: XcmV2Xcm; + readonly assets: XcmV3MultiassetMultiAssetFilter; + readonly dest: XcmV3MultiLocation; + readonly xcm: XcmV3Xcm; } & Struct; - readonly isQueryHolding: boolean; - readonly asQueryHolding: { - readonly queryId: Compact; - readonly dest: XcmV1MultiLocation; - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxResponseWeight: Compact; + readonly isReportHolding: boolean; + readonly asReportHolding: { + readonly responseInfo: XcmV3QueryResponseInfo; + readonly assets: XcmV3MultiassetMultiAssetFilter; } & Struct; readonly isBuyExecution: boolean; readonly asBuyExecution: { - readonly fees: XcmV1MultiAsset; - readonly weightLimit: XcmV2WeightLimit; + readonly fees: XcmV3MultiAsset; + readonly weightLimit: XcmV3WeightLimit; } & Struct; readonly isRefundSurplus: boolean; readonly isSetErrorHandler: boolean; - readonly asSetErrorHandler: XcmV2Xcm; + readonly asSetErrorHandler: XcmV3Xcm; readonly isSetAppendix: boolean; - readonly asSetAppendix: XcmV2Xcm; + readonly asSetAppendix: XcmV3Xcm; readonly isClearError: boolean; readonly isClaimAsset: boolean; readonly asClaimAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly ticket: XcmV1MultiLocation; + readonly assets: XcmV3MultiassetMultiAssets; + readonly ticket: XcmV3MultiLocation; } & Struct; readonly isTrap: boolean; readonly asTrap: Compact; readonly isSubscribeVersion: boolean; readonly asSubscribeVersion: { readonly queryId: Compact; - readonly maxResponseWeight: Compact; + readonly maxResponseWeight: SpWeightsWeightV2Weight; } & Struct; readonly isUnsubscribeVersion: boolean; - readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion'; - } - - /** @name XcmV2Response (75) */ - interface XcmV2Response extends Enum { + readonly isBurnAsset: boolean; + readonly asBurnAsset: XcmV3MultiassetMultiAssets; + readonly isExpectAsset: boolean; + readonly asExpectAsset: XcmV3MultiassetMultiAssets; + readonly isExpectOrigin: boolean; + readonly asExpectOrigin: Option; + readonly isExpectError: boolean; + readonly asExpectError: Option>; + readonly isExpectTransactStatus: boolean; + readonly asExpectTransactStatus: XcmV3MaybeErrorCode; + readonly isQueryPallet: boolean; + readonly asQueryPallet: { + readonly moduleName: Bytes; + readonly responseInfo: XcmV3QueryResponseInfo; + } & Struct; + readonly isExpectPallet: boolean; + readonly asExpectPallet: { + readonly index: Compact; + readonly name: Bytes; + readonly moduleName: Bytes; + readonly crateMajor: Compact; + readonly minCrateMinor: Compact; + } & Struct; + readonly isReportTransactStatus: boolean; + readonly asReportTransactStatus: XcmV3QueryResponseInfo; + readonly isClearTransactStatus: boolean; + readonly isUniversalOrigin: boolean; + readonly asUniversalOrigin: XcmV3Junction; + readonly isExportMessage: boolean; + readonly asExportMessage: { + readonly network: XcmV3JunctionNetworkId; + readonly destination: XcmV3Junctions; + readonly xcm: XcmV3Xcm; + } & Struct; + readonly isLockAsset: boolean; + readonly asLockAsset: { + readonly asset: XcmV3MultiAsset; + readonly unlocker: XcmV3MultiLocation; + } & Struct; + readonly isUnlockAsset: boolean; + readonly asUnlockAsset: { + readonly asset: XcmV3MultiAsset; + readonly target: XcmV3MultiLocation; + } & Struct; + readonly isNoteUnlockable: boolean; + readonly asNoteUnlockable: { + readonly asset: XcmV3MultiAsset; + readonly owner: XcmV3MultiLocation; + } & Struct; + readonly isRequestUnlock: boolean; + readonly asRequestUnlock: { + readonly asset: XcmV3MultiAsset; + readonly locker: XcmV3MultiLocation; + } & Struct; + readonly isSetFeesMode: boolean; + readonly asSetFeesMode: { + readonly jitWithdraw: bool; + } & Struct; + readonly isSetTopic: boolean; + readonly asSetTopic: U8aFixed; + readonly isClearTopic: boolean; + readonly isAliasOrigin: boolean; + readonly asAliasOrigin: XcmV3MultiLocation; + readonly isUnpaidExecution: boolean; + readonly asUnpaidExecution: { + readonly weightLimit: XcmV3WeightLimit; + readonly checkOrigin: Option; + } & Struct; + readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'ReportHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion' | 'BurnAsset' | 'ExpectAsset' | 'ExpectOrigin' | 'ExpectError' | 'ExpectTransactStatus' | 'QueryPallet' | 'ExpectPallet' | 'ReportTransactStatus' | 'ClearTransactStatus' | 'UniversalOrigin' | 'ExportMessage' | 'LockAsset' | 'UnlockAsset' | 'NoteUnlockable' | 'RequestUnlock' | 'SetFeesMode' | 'SetTopic' | 'ClearTopic' | 'AliasOrigin' | 'UnpaidExecution'; + } + + /** @name XcmV3Response (75) */ + interface XcmV3Response extends Enum { readonly isNull: boolean; readonly isAssets: boolean; - readonly asAssets: XcmV1MultiassetMultiAssets; + readonly asAssets: XcmV3MultiassetMultiAssets; readonly isExecutionResult: boolean; - readonly asExecutionResult: Option>; + readonly asExecutionResult: Option>; readonly isVersion: boolean; readonly asVersion: u32; - readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version'; + readonly isPalletsInfo: boolean; + readonly asPalletsInfo: Vec; + readonly isDispatchResult: boolean; + readonly asDispatchResult: XcmV3MaybeErrorCode; + readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version' | 'PalletsInfo' | 'DispatchResult'; + } + + /** @name XcmV3PalletInfo (79) */ + interface XcmV3PalletInfo extends Struct { + readonly index: Compact; + readonly name: Bytes; + readonly moduleName: Bytes; + readonly major: Compact; + readonly minor: Compact; + readonly patch: Compact; } - /** @name XcmV0OriginKind (78) */ - interface XcmV0OriginKind extends Enum { + /** @name XcmV3MaybeErrorCode (82) */ + interface XcmV3MaybeErrorCode extends Enum { + readonly isSuccess: boolean; + readonly isError: boolean; + readonly asError: Bytes; + readonly isTruncatedError: boolean; + readonly asTruncatedError: Bytes; + readonly type: 'Success' | 'Error' | 'TruncatedError'; + } + + /** @name XcmV2OriginKind (85) */ + interface XcmV2OriginKind extends Enum { readonly isNative: boolean; readonly isSovereignAccount: boolean; readonly isSuperuser: boolean; @@ -1037,140 +1177,133 @@ declare module '@polkadot/types/lookup' { readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm'; } - /** @name XcmDoubleEncoded (79) */ + /** @name XcmDoubleEncoded (86) */ interface XcmDoubleEncoded extends Struct { readonly encoded: Bytes; } - /** @name XcmV1MultiassetMultiAssetFilter (80) */ - interface XcmV1MultiassetMultiAssetFilter extends Enum { + /** @name XcmV3QueryResponseInfo (87) */ + interface XcmV3QueryResponseInfo extends Struct { + readonly destination: XcmV3MultiLocation; + readonly queryId: Compact; + readonly maxWeight: SpWeightsWeightV2Weight; + } + + /** @name XcmV3MultiassetMultiAssetFilter (88) */ + interface XcmV3MultiassetMultiAssetFilter extends Enum { readonly isDefinite: boolean; - readonly asDefinite: XcmV1MultiassetMultiAssets; + readonly asDefinite: XcmV3MultiassetMultiAssets; readonly isWild: boolean; - readonly asWild: XcmV1MultiassetWildMultiAsset; + readonly asWild: XcmV3MultiassetWildMultiAsset; readonly type: 'Definite' | 'Wild'; } - /** @name XcmV1MultiassetWildMultiAsset (81) */ - interface XcmV1MultiassetWildMultiAsset extends Enum { + /** @name XcmV3MultiassetWildMultiAsset (89) */ + interface XcmV3MultiassetWildMultiAsset extends Enum { readonly isAll: boolean; readonly isAllOf: boolean; readonly asAllOf: { - readonly id: XcmV1MultiassetAssetId; - readonly fun: XcmV1MultiassetWildFungibility; + readonly id: XcmV3MultiassetAssetId; + readonly fun: XcmV3MultiassetWildFungibility; + } & Struct; + readonly isAllCounted: boolean; + readonly asAllCounted: Compact; + readonly isAllOfCounted: boolean; + readonly asAllOfCounted: { + readonly id: XcmV3MultiassetAssetId; + readonly fun: XcmV3MultiassetWildFungibility; + readonly count: Compact; } & Struct; - readonly type: 'All' | 'AllOf'; + readonly type: 'All' | 'AllOf' | 'AllCounted' | 'AllOfCounted'; } - /** @name XcmV1MultiassetWildFungibility (82) */ - interface XcmV1MultiassetWildFungibility extends Enum { + /** @name XcmV3MultiassetWildFungibility (90) */ + interface XcmV3MultiassetWildFungibility extends Enum { readonly isFungible: boolean; readonly isNonFungible: boolean; readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV2WeightLimit (83) */ - interface XcmV2WeightLimit extends Enum { + /** @name XcmV3WeightLimit (92) */ + interface XcmV3WeightLimit extends Enum { readonly isUnlimited: boolean; readonly isLimited: boolean; - readonly asLimited: Compact; + readonly asLimited: SpWeightsWeightV2Weight; readonly type: 'Unlimited' | 'Limited'; } - /** @name XcmVersionedMultiAssets (85) */ + /** @name XcmVersionedMultiAssets (93) */ interface XcmVersionedMultiAssets extends Enum { - readonly isV0: boolean; - readonly asV0: Vec; - readonly isV1: boolean; - readonly asV1: XcmV1MultiassetMultiAssets; - readonly type: 'V0' | 'V1'; + readonly isV2: boolean; + readonly asV2: XcmV2MultiassetMultiAssets; + readonly isV3: boolean; + readonly asV3: XcmV3MultiassetMultiAssets; + readonly type: 'V2' | 'V3'; } - /** @name XcmV0MultiAsset (87) */ - interface XcmV0MultiAsset extends Enum { - readonly isNone: boolean; - readonly isAll: boolean; - readonly isAllFungible: boolean; - readonly isAllNonFungible: boolean; - readonly isAllAbstractFungible: boolean; - readonly asAllAbstractFungible: { - readonly id: Bytes; - } & Struct; - readonly isAllAbstractNonFungible: boolean; - readonly asAllAbstractNonFungible: { - readonly class: Bytes; - } & Struct; - readonly isAllConcreteFungible: boolean; - readonly asAllConcreteFungible: { - readonly id: XcmV0MultiLocation; - } & Struct; - readonly isAllConcreteNonFungible: boolean; - readonly asAllConcreteNonFungible: { - readonly class: XcmV0MultiLocation; - } & Struct; - readonly isAbstractFungible: boolean; - readonly asAbstractFungible: { - readonly id: Bytes; - readonly amount: Compact; - } & Struct; - readonly isAbstractNonFungible: boolean; - readonly asAbstractNonFungible: { - readonly class: Bytes; - readonly instance: XcmV1MultiassetAssetInstance; - } & Struct; - readonly isConcreteFungible: boolean; - readonly asConcreteFungible: { - readonly id: XcmV0MultiLocation; - readonly amount: Compact; - } & Struct; - readonly isConcreteNonFungible: boolean; - readonly asConcreteNonFungible: { - readonly class: XcmV0MultiLocation; - readonly instance: XcmV1MultiassetAssetInstance; - } & Struct; - readonly type: 'None' | 'All' | 'AllFungible' | 'AllNonFungible' | 'AllAbstractFungible' | 'AllAbstractNonFungible' | 'AllConcreteFungible' | 'AllConcreteNonFungible' | 'AbstractFungible' | 'AbstractNonFungible' | 'ConcreteFungible' | 'ConcreteNonFungible'; + /** @name XcmV2MultiassetMultiAssets (94) */ + interface XcmV2MultiassetMultiAssets extends Vec {} + + /** @name XcmV2MultiAsset (96) */ + interface XcmV2MultiAsset extends Struct { + readonly id: XcmV2MultiassetAssetId; + readonly fun: XcmV2MultiassetFungibility; } - /** @name XcmV0MultiLocation (88) */ - interface XcmV0MultiLocation extends Enum { - readonly isNull: boolean; + /** @name XcmV2MultiassetAssetId (97) */ + interface XcmV2MultiassetAssetId extends Enum { + readonly isConcrete: boolean; + readonly asConcrete: XcmV2MultiLocation; + readonly isAbstract: boolean; + readonly asAbstract: Bytes; + readonly type: 'Concrete' | 'Abstract'; + } + + /** @name XcmV2MultiLocation (98) */ + interface XcmV2MultiLocation extends Struct { + readonly parents: u8; + readonly interior: XcmV2MultilocationJunctions; + } + + /** @name XcmV2MultilocationJunctions (99) */ + interface XcmV2MultilocationJunctions extends Enum { + readonly isHere: boolean; readonly isX1: boolean; - readonly asX1: XcmV0Junction; + readonly asX1: XcmV2Junction; readonly isX2: boolean; - readonly asX2: ITuple<[XcmV0Junction, XcmV0Junction]>; + readonly asX2: ITuple<[XcmV2Junction, XcmV2Junction]>; readonly isX3: boolean; - readonly asX3: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction]>; + readonly asX3: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX4: boolean; - readonly asX4: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; + readonly asX4: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX5: boolean; - readonly asX5: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; + readonly asX5: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX6: boolean; - readonly asX6: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; + readonly asX6: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX7: boolean; - readonly asX7: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; + readonly asX7: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX8: boolean; - readonly asX8: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; - readonly type: 'Null' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; + readonly asX8: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; + readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; } - /** @name XcmV0Junction (89) */ - interface XcmV0Junction extends Enum { - readonly isParent: boolean; + /** @name XcmV2Junction (100) */ + interface XcmV2Junction extends Enum { readonly isParachain: boolean; readonly asParachain: Compact; readonly isAccountId32: boolean; readonly asAccountId32: { - readonly network: XcmV0JunctionNetworkId; + readonly network: XcmV2NetworkId; readonly id: U8aFixed; } & Struct; readonly isAccountIndex64: boolean; readonly asAccountIndex64: { - readonly network: XcmV0JunctionNetworkId; + readonly network: XcmV2NetworkId; readonly index: Compact; } & Struct; readonly isAccountKey20: boolean; readonly asAccountKey20: { - readonly network: XcmV0JunctionNetworkId; + readonly network: XcmV2NetworkId; readonly key: U8aFixed; } & Struct; readonly isPalletInstance: boolean; @@ -1182,33 +1315,112 @@ declare module '@polkadot/types/lookup' { readonly isOnlyChild: boolean; readonly isPlurality: boolean; readonly asPlurality: { - readonly id: XcmV0JunctionBodyId; - readonly part: XcmV0JunctionBodyPart; + readonly id: XcmV2BodyId; + readonly part: XcmV2BodyPart; + } & Struct; + readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality'; + } + + /** @name XcmV2NetworkId (101) */ + interface XcmV2NetworkId extends Enum { + readonly isAny: boolean; + readonly isNamed: boolean; + readonly asNamed: Bytes; + readonly isPolkadot: boolean; + readonly isKusama: boolean; + readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama'; + } + + /** @name XcmV2BodyId (103) */ + interface XcmV2BodyId extends Enum { + readonly isUnit: boolean; + readonly isNamed: boolean; + readonly asNamed: Bytes; + readonly isIndex: boolean; + readonly asIndex: Compact; + readonly isExecutive: boolean; + readonly isTechnical: boolean; + readonly isLegislative: boolean; + readonly isJudicial: boolean; + readonly isDefense: boolean; + readonly isAdministration: boolean; + readonly isTreasury: boolean; + readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; + } + + /** @name XcmV2BodyPart (104) */ + interface XcmV2BodyPart extends Enum { + readonly isVoice: boolean; + readonly isMembers: boolean; + readonly asMembers: { + readonly count: Compact; + } & Struct; + readonly isFraction: boolean; + readonly asFraction: { + readonly nom: Compact; + readonly denom: Compact; + } & Struct; + readonly isAtLeastProportion: boolean; + readonly asAtLeastProportion: { + readonly nom: Compact; + readonly denom: Compact; + } & Struct; + readonly isMoreThanProportion: boolean; + readonly asMoreThanProportion: { + readonly nom: Compact; + readonly denom: Compact; } & Struct; - readonly type: 'Parent' | 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality'; + readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; + } + + /** @name XcmV2MultiassetFungibility (105) */ + interface XcmV2MultiassetFungibility extends Enum { + readonly isFungible: boolean; + readonly asFungible: Compact; + readonly isNonFungible: boolean; + readonly asNonFungible: XcmV2MultiassetAssetInstance; + readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmVersionedMultiLocation (90) */ + /** @name XcmV2MultiassetAssetInstance (106) */ + interface XcmV2MultiassetAssetInstance extends Enum { + readonly isUndefined: boolean; + readonly isIndex: boolean; + readonly asIndex: Compact; + readonly isArray4: boolean; + readonly asArray4: U8aFixed; + readonly isArray8: boolean; + readonly asArray8: U8aFixed; + readonly isArray16: boolean; + readonly asArray16: U8aFixed; + readonly isArray32: boolean; + readonly asArray32: U8aFixed; + readonly isBlob: boolean; + readonly asBlob: Bytes; + readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob'; + } + + /** @name XcmVersionedMultiLocation (107) */ interface XcmVersionedMultiLocation extends Enum { - readonly isV0: boolean; - readonly asV0: XcmV0MultiLocation; - readonly isV1: boolean; - readonly asV1: XcmV1MultiLocation; - readonly type: 'V0' | 'V1'; + readonly isV2: boolean; + readonly asV2: XcmV2MultiLocation; + readonly isV3: boolean; + readonly asV3: XcmV3MultiLocation; + readonly type: 'V2' | 'V3'; } - /** @name CumulusPalletXcmEvent (91) */ + /** @name CumulusPalletXcmEvent (108) */ interface CumulusPalletXcmEvent extends Enum { readonly isInvalidFormat: boolean; readonly asInvalidFormat: U8aFixed; readonly isUnsupportedVersion: boolean; readonly asUnsupportedVersion: U8aFixed; readonly isExecutedDownward: boolean; - readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>; + readonly asExecutedDownward: ITuple<[U8aFixed, XcmV3TraitsOutcome]>; readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward'; } - /** @name CumulusPalletDmpQueueEvent (92) */ + /** @name CumulusPalletDmpQueueEvent (109) */ interface CumulusPalletDmpQueueEvent extends Enum { readonly isInvalidFormat: boolean; readonly asInvalidFormat: { @@ -1221,7 +1433,7 @@ declare module '@polkadot/types/lookup' { readonly isExecutedDownward: boolean; readonly asExecutedDownward: { readonly messageId: U8aFixed; - readonly outcome: XcmV2TraitsOutcome; + readonly outcome: XcmV3TraitsOutcome; } & Struct; readonly isWeightExhausted: boolean; readonly asWeightExhausted: { @@ -1240,10 +1452,14 @@ declare module '@polkadot/types/lookup' { readonly overweightIndex: u64; readonly weightUsed: SpWeightsWeightV2Weight; } & Struct; - readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced'; + readonly isMaxMessagesExhausted: boolean; + readonly asMaxMessagesExhausted: { + readonly messageId: U8aFixed; + } & Struct; + readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced' | 'MaxMessagesExhausted'; } - /** @name PalletConfigurationEvent (93) */ + /** @name PalletConfigurationEvent (110) */ interface PalletConfigurationEvent extends Enum { readonly isNewDesiredCollators: boolean; readonly asNewDesiredCollators: { @@ -1260,7 +1476,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NewDesiredCollators' | 'NewCollatorLicenseBond' | 'NewCollatorKickThreshold'; } - /** @name PalletCommonEvent (96) */ + /** @name PalletCommonEvent (113) */ interface PalletCommonEvent extends Enum { readonly isCollectionCreated: boolean; readonly asCollectionCreated: ITuple<[u32, u8, AccountId32]>; @@ -1309,7 +1525,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved' | 'ApprovedForAll' | 'CollectionPropertySet' | 'CollectionPropertyDeleted' | 'TokenPropertySet' | 'TokenPropertyDeleted' | 'PropertyPermissionSet' | 'AllowListAddressAdded' | 'AllowListAddressRemoved' | 'CollectionAdminAdded' | 'CollectionAdminRemoved' | 'CollectionLimitSet' | 'CollectionOwnerChanged' | 'CollectionPermissionSet' | 'CollectionSponsorSet' | 'SponsorshipConfirmed' | 'CollectionSponsorRemoved'; } - /** @name PalletEvmAccountBasicCrossAccountIdRepr (99) */ + /** @name PalletEvmAccountBasicCrossAccountIdRepr (116) */ interface PalletEvmAccountBasicCrossAccountIdRepr extends Enum { readonly isSubstrate: boolean; readonly asSubstrate: AccountId32; @@ -1318,14 +1534,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Substrate' | 'Ethereum'; } - /** @name PalletStructureEvent (103) */ + /** @name PalletStructureEvent (119) */ interface PalletStructureEvent extends Enum { readonly isExecuted: boolean; readonly asExecuted: Result; readonly type: 'Executed'; } - /** @name PalletAppPromotionEvent (104) */ + /** @name PalletAppPromotionEvent (120) */ interface PalletAppPromotionEvent extends Enum { readonly isStakingRecalculation: boolean; readonly asStakingRecalculation: ITuple<[AccountId32, u128, u128]>; @@ -1338,18 +1554,18 @@ declare module '@polkadot/types/lookup' { readonly type: 'StakingRecalculation' | 'Stake' | 'Unstake' | 'SetAdmin'; } - /** @name PalletForeignAssetsModuleEvent (105) */ + /** @name PalletForeignAssetsModuleEvent (121) */ interface PalletForeignAssetsModuleEvent extends Enum { readonly isForeignAssetRegistered: boolean; readonly asForeignAssetRegistered: { readonly assetId: u32; - readonly assetAddress: XcmV1MultiLocation; + readonly assetAddress: XcmV3MultiLocation; readonly metadata: PalletForeignAssetsModuleAssetMetadata; } & Struct; readonly isForeignAssetUpdated: boolean; readonly asForeignAssetUpdated: { readonly assetId: u32; - readonly assetAddress: XcmV1MultiLocation; + readonly assetAddress: XcmV3MultiLocation; readonly metadata: PalletForeignAssetsModuleAssetMetadata; } & Struct; readonly isAssetRegistered: boolean; @@ -1365,7 +1581,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ForeignAssetRegistered' | 'ForeignAssetUpdated' | 'AssetRegistered' | 'AssetUpdated'; } - /** @name PalletForeignAssetsModuleAssetMetadata (106) */ + /** @name PalletForeignAssetsModuleAssetMetadata (122) */ interface PalletForeignAssetsModuleAssetMetadata extends Struct { readonly name: Bytes; readonly symbol: Bytes; @@ -1373,7 +1589,7 @@ declare module '@polkadot/types/lookup' { readonly minimalBalance: u128; } - /** @name PalletEvmEvent (107) */ + /** @name PalletEvmEvent (125) */ interface PalletEvmEvent extends Enum { readonly isLog: boolean; readonly asLog: { @@ -1398,14 +1614,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Log' | 'Created' | 'CreatedFailed' | 'Executed' | 'ExecutedFailed'; } - /** @name EthereumLog (108) */ + /** @name EthereumLog (126) */ interface EthereumLog extends Struct { readonly address: H160; readonly topics: Vec; readonly data: Bytes; } - /** @name PalletEthereumEvent (110) */ + /** @name PalletEthereumEvent (128) */ interface PalletEthereumEvent extends Enum { readonly isExecuted: boolean; readonly asExecuted: { @@ -1417,7 +1633,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Executed'; } - /** @name EvmCoreErrorExitReason (111) */ + /** @name EvmCoreErrorExitReason (129) */ interface EvmCoreErrorExitReason extends Enum { readonly isSucceed: boolean; readonly asSucceed: EvmCoreErrorExitSucceed; @@ -1430,7 +1646,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Succeed' | 'Error' | 'Revert' | 'Fatal'; } - /** @name EvmCoreErrorExitSucceed (112) */ + /** @name EvmCoreErrorExitSucceed (130) */ interface EvmCoreErrorExitSucceed extends Enum { readonly isStopped: boolean; readonly isReturned: boolean; @@ -1438,7 +1654,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Stopped' | 'Returned' | 'Suicided'; } - /** @name EvmCoreErrorExitError (113) */ + /** @name EvmCoreErrorExitError (131) */ interface EvmCoreErrorExitError extends Enum { readonly isStackUnderflow: boolean; readonly isStackOverflow: boolean; @@ -1460,13 +1676,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'StackUnderflow' | 'StackOverflow' | 'InvalidJump' | 'InvalidRange' | 'DesignatedInvalid' | 'CallTooDeep' | 'CreateCollision' | 'CreateContractLimit' | 'OutOfOffset' | 'OutOfGas' | 'OutOfFund' | 'PcUnderflow' | 'CreateEmpty' | 'Other' | 'InvalidCode'; } - /** @name EvmCoreErrorExitRevert (117) */ + /** @name EvmCoreErrorExitRevert (135) */ interface EvmCoreErrorExitRevert extends Enum { readonly isReverted: boolean; readonly type: 'Reverted'; } - /** @name EvmCoreErrorExitFatal (118) */ + /** @name EvmCoreErrorExitFatal (136) */ interface EvmCoreErrorExitFatal extends Enum { readonly isNotSupported: boolean; readonly isUnhandledInterrupt: boolean; @@ -1477,7 +1693,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotSupported' | 'UnhandledInterrupt' | 'CallErrorAsFatal' | 'Other'; } - /** @name PalletEvmContractHelpersEvent (119) */ + /** @name PalletEvmContractHelpersEvent (137) */ interface PalletEvmContractHelpersEvent extends Enum { readonly isContractSponsorSet: boolean; readonly asContractSponsorSet: ITuple<[H160, AccountId32]>; @@ -1488,20 +1704,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'ContractSponsorSet' | 'ContractSponsorshipConfirmed' | 'ContractSponsorRemoved'; } - /** @name PalletEvmMigrationEvent (120) */ + /** @name PalletEvmMigrationEvent (138) */ interface PalletEvmMigrationEvent extends Enum { readonly isTestEvent: boolean; readonly type: 'TestEvent'; } - /** @name PalletMaintenanceEvent (121) */ + /** @name PalletMaintenanceEvent (139) */ interface PalletMaintenanceEvent extends Enum { readonly isMaintenanceEnabled: boolean; readonly isMaintenanceDisabled: boolean; readonly type: 'MaintenanceEnabled' | 'MaintenanceDisabled'; } - /** @name PalletTestUtilsEvent (122) */ + /** @name PalletTestUtilsEvent (140) */ interface PalletTestUtilsEvent extends Enum { readonly isValueIsSet: boolean; readonly isShouldRollback: boolean; @@ -1509,7 +1725,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ValueIsSet' | 'ShouldRollback' | 'BatchCompleted'; } - /** @name FrameSystemPhase (123) */ + /** @name FrameSystemPhase (141) */ interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; readonly asApplyExtrinsic: u32; @@ -1518,13 +1734,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } - /** @name FrameSystemLastRuntimeUpgradeInfo (126) */ + /** @name FrameSystemLastRuntimeUpgradeInfo (144) */ interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; readonly specName: Text; } - /** @name FrameSystemCall (127) */ + /** @name FrameSystemCall (145) */ interface FrameSystemCall extends Enum { readonly isRemark: boolean; readonly asRemark: { @@ -1562,21 +1778,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent'; } - /** @name FrameSystemLimitsBlockWeights (131) */ + /** @name FrameSystemLimitsBlockWeights (149) */ interface FrameSystemLimitsBlockWeights extends Struct { readonly baseBlock: SpWeightsWeightV2Weight; readonly maxBlock: SpWeightsWeightV2Weight; readonly perClass: FrameSupportDispatchPerDispatchClassWeightsPerClass; } - /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (132) */ + /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (150) */ interface FrameSupportDispatchPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; readonly operational: FrameSystemLimitsWeightsPerClass; readonly mandatory: FrameSystemLimitsWeightsPerClass; } - /** @name FrameSystemLimitsWeightsPerClass (133) */ + /** @name FrameSystemLimitsWeightsPerClass (151) */ interface FrameSystemLimitsWeightsPerClass extends Struct { readonly baseExtrinsic: SpWeightsWeightV2Weight; readonly maxExtrinsic: Option; @@ -1584,25 +1800,25 @@ declare module '@polkadot/types/lookup' { readonly reserved: Option; } - /** @name FrameSystemLimitsBlockLength (135) */ + /** @name FrameSystemLimitsBlockLength (153) */ interface FrameSystemLimitsBlockLength extends Struct { readonly max: FrameSupportDispatchPerDispatchClassU32; } - /** @name FrameSupportDispatchPerDispatchClassU32 (136) */ + /** @name FrameSupportDispatchPerDispatchClassU32 (154) */ interface FrameSupportDispatchPerDispatchClassU32 extends Struct { readonly normal: u32; readonly operational: u32; readonly mandatory: u32; } - /** @name SpWeightsRuntimeDbWeight (137) */ + /** @name SpWeightsRuntimeDbWeight (155) */ interface SpWeightsRuntimeDbWeight extends Struct { readonly read: u64; readonly write: u64; } - /** @name SpVersionRuntimeVersion (138) */ + /** @name SpVersionRuntimeVersion (156) */ interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; readonly implName: Text; @@ -1614,7 +1830,7 @@ declare module '@polkadot/types/lookup' { readonly stateVersion: u8; } - /** @name FrameSystemError (143) */ + /** @name FrameSystemError (161) */ interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; readonly isSpecVersionNeedsToIncrease: boolean; @@ -1625,7 +1841,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered'; } - /** @name PolkadotPrimitivesV2PersistedValidationData (144) */ + /** @name PolkadotPrimitivesV2PersistedValidationData (162) */ interface PolkadotPrimitivesV2PersistedValidationData extends Struct { readonly parentHead: Bytes; readonly relayParentNumber: u32; @@ -1633,18 +1849,18 @@ declare module '@polkadot/types/lookup' { readonly maxPovSize: u32; } - /** @name PolkadotPrimitivesV2UpgradeRestriction (147) */ + /** @name PolkadotPrimitivesV2UpgradeRestriction (165) */ interface PolkadotPrimitivesV2UpgradeRestriction extends Enum { readonly isPresent: boolean; readonly type: 'Present'; } - /** @name SpTrieStorageProof (148) */ + /** @name SpTrieStorageProof (166) */ interface SpTrieStorageProof extends Struct { readonly trieNodes: BTreeSet; } - /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (150) */ + /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (168) */ interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct { readonly dmqMqcHead: H256; readonly relayDispatchQueueSize: ITuple<[u32, u32]>; @@ -1652,7 +1868,7 @@ declare module '@polkadot/types/lookup' { readonly egressChannels: Vec>; } - /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (153) */ + /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (171) */ interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct { readonly maxCapacity: u32; readonly maxTotalSize: u32; @@ -1662,7 +1878,7 @@ declare module '@polkadot/types/lookup' { readonly mqcHead: Option; } - /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (154) */ + /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (173) */ interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct { readonly maxCodeSize: u32; readonly maxHeadDataSize: u32; @@ -1675,13 +1891,13 @@ declare module '@polkadot/types/lookup' { readonly validationUpgradeDelay: u32; } - /** @name PolkadotCorePrimitivesOutboundHrmpMessage (160) */ + /** @name PolkadotCorePrimitivesOutboundHrmpMessage (179) */ interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct { readonly recipient: u32; readonly data: Bytes; } - /** @name CumulusPalletParachainSystemCall (161) */ + /** @name CumulusPalletParachainSystemCall (180) */ interface CumulusPalletParachainSystemCall extends Enum { readonly isSetValidationData: boolean; readonly asSetValidationData: { @@ -1702,7 +1918,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade'; } - /** @name CumulusPrimitivesParachainInherentParachainInherentData (162) */ + /** @name CumulusPrimitivesParachainInherentParachainInherentData (181) */ interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct { readonly validationData: PolkadotPrimitivesV2PersistedValidationData; readonly relayChainState: SpTrieStorageProof; @@ -1710,19 +1926,19 @@ declare module '@polkadot/types/lookup' { readonly horizontalMessages: BTreeMap>; } - /** @name PolkadotCorePrimitivesInboundDownwardMessage (164) */ + /** @name PolkadotCorePrimitivesInboundDownwardMessage (183) */ interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct { readonly sentAt: u32; readonly msg: Bytes; } - /** @name PolkadotCorePrimitivesInboundHrmpMessage (167) */ + /** @name PolkadotCorePrimitivesInboundHrmpMessage (186) */ interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct { readonly sentAt: u32; readonly data: Bytes; } - /** @name CumulusPalletParachainSystemError (170) */ + /** @name CumulusPalletParachainSystemError (189) */ interface CumulusPalletParachainSystemError extends Enum { readonly isOverlappingUpgrades: boolean; readonly isProhibitedByPolkadot: boolean; @@ -1735,49 +1951,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized'; } - /** @name PalletAuthorshipUncleEntryItem (172) */ - interface PalletAuthorshipUncleEntryItem extends Enum { - readonly isInclusionHeight: boolean; - readonly asInclusionHeight: u32; - readonly isUncle: boolean; - readonly asUncle: ITuple<[H256, Option]>; - readonly type: 'InclusionHeight' | 'Uncle'; - } + /** @name ParachainInfoCall (190) */ + type ParachainInfoCall = Null; - /** @name PalletAuthorshipCall (174) */ - interface PalletAuthorshipCall extends Enum { - readonly isSetUncles: boolean; - readonly asSetUncles: { - readonly newUncles: Vec; - } & Struct; - readonly type: 'SetUncles'; - } - - /** @name SpRuntimeHeader (176) */ - interface SpRuntimeHeader extends Struct { - readonly parentHash: H256; - readonly number: Compact; - readonly stateRoot: H256; - readonly extrinsicsRoot: H256; - readonly digest: SpRuntimeDigest; - } - - /** @name SpRuntimeBlakeTwo256 (177) */ - type SpRuntimeBlakeTwo256 = Null; - - /** @name PalletAuthorshipError (178) */ - interface PalletAuthorshipError extends Enum { - readonly isInvalidUncleParent: boolean; - readonly isUnclesAlreadySet: boolean; - readonly isTooManyUncles: boolean; - readonly isGenesisUncle: boolean; - readonly isTooHighUncle: boolean; - readonly isUncleAlreadyIncluded: boolean; - readonly isOldUncle: boolean; - readonly type: 'InvalidUncleParent' | 'UnclesAlreadySet' | 'TooManyUncles' | 'GenesisUncle' | 'TooHighUncle' | 'UncleAlreadyIncluded' | 'OldUncle'; - } - - /** @name PalletCollatorSelectionCall (181) */ + /** @name PalletCollatorSelectionCall (193) */ interface PalletCollatorSelectionCall extends Enum { readonly isAddInvulnerable: boolean; readonly asAddInvulnerable: { @@ -1798,7 +1975,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AddInvulnerable' | 'RemoveInvulnerable' | 'GetLicense' | 'Onboard' | 'Offboard' | 'ReleaseLicense' | 'ForceReleaseLicense'; } - /** @name PalletCollatorSelectionError (182) */ + /** @name PalletCollatorSelectionError (194) */ interface PalletCollatorSelectionError extends Enum { readonly isTooManyCandidates: boolean; readonly isUnknown: boolean; @@ -1816,21 +1993,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'TooManyCandidates' | 'Unknown' | 'Permission' | 'AlreadyHoldingLicense' | 'NoLicense' | 'AlreadyCandidate' | 'NotCandidate' | 'TooManyInvulnerables' | 'TooFewInvulnerables' | 'AlreadyInvulnerable' | 'NotInvulnerable' | 'NoAssociatedValidatorId' | 'ValidatorNotRegistered'; } - /** @name OpalRuntimeRuntimeCommonSessionKeys (185) */ + /** @name OpalRuntimeRuntimeCommonSessionKeys (197) */ interface OpalRuntimeRuntimeCommonSessionKeys extends Struct { readonly aura: SpConsensusAuraSr25519AppSr25519Public; } - /** @name SpConsensusAuraSr25519AppSr25519Public (186) */ + /** @name SpConsensusAuraSr25519AppSr25519Public (198) */ interface SpConsensusAuraSr25519AppSr25519Public extends SpCoreSr25519Public {} - /** @name SpCoreSr25519Public (187) */ + /** @name SpCoreSr25519Public (199) */ interface SpCoreSr25519Public extends U8aFixed {} - /** @name SpCoreCryptoKeyTypeId (190) */ + /** @name SpCoreCryptoKeyTypeId (202) */ interface SpCoreCryptoKeyTypeId extends U8aFixed {} - /** @name PalletSessionCall (191) */ + /** @name PalletSessionCall (203) */ interface PalletSessionCall extends Enum { readonly isSetKeys: boolean; readonly asSetKeys: { @@ -1841,7 +2018,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetKeys' | 'PurgeKeys'; } - /** @name PalletSessionError (192) */ + /** @name PalletSessionError (204) */ interface PalletSessionError extends Enum { readonly isInvalidProof: boolean; readonly isNoAssociatedValidatorId: boolean; @@ -1851,14 +2028,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidProof' | 'NoAssociatedValidatorId' | 'DuplicatedKey' | 'NoKeys' | 'NoAccount'; } - /** @name PalletBalancesBalanceLock (194) */ + /** @name PalletBalancesBalanceLock (209) */ interface PalletBalancesBalanceLock extends Struct { readonly id: U8aFixed; readonly amount: u128; readonly reasons: PalletBalancesReasons; } - /** @name PalletBalancesReasons (195) */ + /** @name PalletBalancesReasons (210) */ interface PalletBalancesReasons extends Enum { readonly isFee: boolean; readonly isMisc: boolean; @@ -1866,13 +2043,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fee' | 'Misc' | 'All'; } - /** @name PalletBalancesReserveData (198) */ + /** @name PalletBalancesReserveData (213) */ interface PalletBalancesReserveData extends Struct { readonly id: U8aFixed; readonly amount: u128; } - /** @name PalletBalancesCall (200) */ + /** @name PalletBalancesCall (215) */ interface PalletBalancesCall extends Enum { readonly isTransfer: boolean; readonly asTransfer: { @@ -1909,7 +2086,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve'; } - /** @name PalletBalancesError (203) */ + /** @name PalletBalancesError (218) */ interface PalletBalancesError extends Enum { readonly isVestingBalance: boolean; readonly isLiquidityRestrictions: boolean; @@ -1922,7 +2099,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves'; } - /** @name PalletTimestampCall (205) */ + /** @name PalletTimestampCall (219) */ interface PalletTimestampCall extends Enum { readonly isSet: boolean; readonly asSet: { @@ -1931,14 +2108,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Set'; } - /** @name PalletTransactionPaymentReleases (207) */ + /** @name PalletTransactionPaymentReleases (221) */ interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; readonly isV2: boolean; readonly type: 'V1Ancient' | 'V2'; } - /** @name PalletTreasuryProposal (208) */ + /** @name PalletTreasuryProposal (222) */ interface PalletTreasuryProposal extends Struct { readonly proposer: AccountId32; readonly value: u128; @@ -1946,7 +2123,7 @@ declare module '@polkadot/types/lookup' { readonly bond: u128; } - /** @name PalletTreasuryCall (210) */ + /** @name PalletTreasuryCall (224) */ interface PalletTreasuryCall extends Enum { readonly isProposeSpend: boolean; readonly asProposeSpend: { @@ -1973,10 +2150,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'Spend' | 'RemoveApproval'; } - /** @name FrameSupportPalletId (212) */ + /** @name FrameSupportPalletId (226) */ interface FrameSupportPalletId extends U8aFixed {} - /** @name PalletTreasuryError (213) */ + /** @name PalletTreasuryError (227) */ interface PalletTreasuryError extends Enum { readonly isInsufficientProposersBalance: boolean; readonly isInvalidIndex: boolean; @@ -1986,7 +2163,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'InsufficientPermission' | 'ProposalNotApproved'; } - /** @name PalletSudoCall (214) */ + /** @name PalletSudoCall (228) */ interface PalletSudoCall extends Enum { readonly isSudo: boolean; readonly asSudo: { @@ -2009,7 +2186,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs'; } - /** @name OrmlVestingModuleCall (216) */ + /** @name OrmlVestingModuleCall (230) */ interface OrmlVestingModuleCall extends Enum { readonly isClaim: boolean; readonly isVestedTransfer: boolean; @@ -2029,20 +2206,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'Claim' | 'VestedTransfer' | 'UpdateVestingSchedules' | 'ClaimFor'; } - /** @name OrmlXtokensModuleCall (218) */ + /** @name OrmlXtokensModuleCall (232) */ interface OrmlXtokensModuleCall extends Enum { readonly isTransfer: boolean; readonly asTransfer: { readonly currencyId: PalletForeignAssetsAssetIds; readonly amount: u128; readonly dest: XcmVersionedMultiLocation; - readonly destWeightLimit: XcmV2WeightLimit; + readonly destWeightLimit: XcmV3WeightLimit; } & Struct; readonly isTransferMultiasset: boolean; readonly asTransferMultiasset: { readonly asset: XcmVersionedMultiAsset; readonly dest: XcmVersionedMultiLocation; - readonly destWeightLimit: XcmV2WeightLimit; + readonly destWeightLimit: XcmV3WeightLimit; } & Struct; readonly isTransferWithFee: boolean; readonly asTransferWithFee: { @@ -2050,42 +2227,42 @@ declare module '@polkadot/types/lookup' { readonly amount: u128; readonly fee: u128; readonly dest: XcmVersionedMultiLocation; - readonly destWeightLimit: XcmV2WeightLimit; + readonly destWeightLimit: XcmV3WeightLimit; } & Struct; readonly isTransferMultiassetWithFee: boolean; readonly asTransferMultiassetWithFee: { readonly asset: XcmVersionedMultiAsset; readonly fee: XcmVersionedMultiAsset; readonly dest: XcmVersionedMultiLocation; - readonly destWeightLimit: XcmV2WeightLimit; + readonly destWeightLimit: XcmV3WeightLimit; } & Struct; readonly isTransferMulticurrencies: boolean; readonly asTransferMulticurrencies: { readonly currencies: Vec>; readonly feeItem: u32; readonly dest: XcmVersionedMultiLocation; - readonly destWeightLimit: XcmV2WeightLimit; + readonly destWeightLimit: XcmV3WeightLimit; } & Struct; readonly isTransferMultiassets: boolean; readonly asTransferMultiassets: { readonly assets: XcmVersionedMultiAssets; readonly feeItem: u32; readonly dest: XcmVersionedMultiLocation; - readonly destWeightLimit: XcmV2WeightLimit; + readonly destWeightLimit: XcmV3WeightLimit; } & Struct; readonly type: 'Transfer' | 'TransferMultiasset' | 'TransferWithFee' | 'TransferMultiassetWithFee' | 'TransferMulticurrencies' | 'TransferMultiassets'; } - /** @name XcmVersionedMultiAsset (219) */ + /** @name XcmVersionedMultiAsset (233) */ interface XcmVersionedMultiAsset extends Enum { - readonly isV0: boolean; - readonly asV0: XcmV0MultiAsset; - readonly isV1: boolean; - readonly asV1: XcmV1MultiAsset; - readonly type: 'V0' | 'V1'; + readonly isV2: boolean; + readonly asV2: XcmV2MultiAsset; + readonly isV3: boolean; + readonly asV3: XcmV3MultiAsset; + readonly type: 'V2' | 'V3'; } - /** @name OrmlTokensModuleCall (222) */ + /** @name OrmlTokensModuleCall (236) */ interface OrmlTokensModuleCall extends Enum { readonly isTransfer: boolean; readonly asTransfer: { @@ -2122,7 +2299,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Transfer' | 'TransferAll' | 'TransferKeepAlive' | 'ForceTransfer' | 'SetBalance'; } - /** @name PalletIdentityCall (223) */ + /** @name PalletIdentityCall (237) */ interface PalletIdentityCall extends Enum { readonly isAddRegistrar: boolean; readonly asAddRegistrar: { @@ -2202,7 +2379,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AddRegistrar' | 'SetIdentity' | 'SetSubs' | 'ClearIdentity' | 'RequestJudgement' | 'CancelRequest' | 'SetFee' | 'SetAccountId' | 'SetFields' | 'ProvideJudgement' | 'KillIdentity' | 'AddSub' | 'RenameSub' | 'RemoveSub' | 'QuitSub' | 'ForceInsertIdentities' | 'ForceRemoveIdentities' | 'ForceSetSubs'; } - /** @name PalletIdentityIdentityInfo (224) */ + /** @name PalletIdentityIdentityInfo (238) */ interface PalletIdentityIdentityInfo extends Struct { readonly additional: Vec>; readonly display: Data; @@ -2215,7 +2392,7 @@ declare module '@polkadot/types/lookup' { readonly twitter: Data; } - /** @name PalletIdentityBitFlags (260) */ + /** @name PalletIdentityBitFlags (274) */ interface PalletIdentityBitFlags extends Set { readonly isDisplay: boolean; readonly isLegal: boolean; @@ -2227,7 +2404,7 @@ declare module '@polkadot/types/lookup' { readonly isTwitter: boolean; } - /** @name PalletIdentityIdentityField (261) */ + /** @name PalletIdentityIdentityField (275) */ interface PalletIdentityIdentityField extends Enum { readonly isDisplay: boolean; readonly isLegal: boolean; @@ -2240,7 +2417,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Display' | 'Legal' | 'Web' | 'Riot' | 'Email' | 'PgpFingerprint' | 'Image' | 'Twitter'; } - /** @name PalletIdentityJudgement (262) */ + /** @name PalletIdentityJudgement (276) */ interface PalletIdentityJudgement extends Enum { readonly isUnknown: boolean; readonly isFeePaid: boolean; @@ -2253,14 +2430,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unknown' | 'FeePaid' | 'Reasonable' | 'KnownGood' | 'OutOfDate' | 'LowQuality' | 'Erroneous'; } - /** @name PalletIdentityRegistration (265) */ + /** @name PalletIdentityRegistration (279) */ interface PalletIdentityRegistration extends Struct { readonly judgements: Vec>; readonly deposit: u128; readonly info: PalletIdentityIdentityInfo; } - /** @name PalletPreimageCall (273) */ + /** @name PalletPreimageCall (287) */ interface PalletPreimageCall extends Enum { readonly isNotePreimage: boolean; readonly asNotePreimage: { @@ -2281,12 +2458,12 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotePreimage' | 'UnnotePreimage' | 'RequestPreimage' | 'UnrequestPreimage'; } - /** @name CumulusPalletXcmpQueueCall (274) */ + /** @name CumulusPalletXcmpQueueCall (288) */ interface CumulusPalletXcmpQueueCall extends Enum { readonly isServiceOverweight: boolean; readonly asServiceOverweight: { readonly index: u64; - readonly weightLimit: u64; + readonly weightLimit: SpWeightsWeightV2Weight; } & Struct; readonly isSuspendXcmExecution: boolean; readonly isResumeXcmExecution: boolean; @@ -2304,20 +2481,20 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isUpdateThresholdWeight: boolean; readonly asUpdateThresholdWeight: { - readonly new_: u64; + readonly new_: SpWeightsWeightV2Weight; } & Struct; readonly isUpdateWeightRestrictDecay: boolean; readonly asUpdateWeightRestrictDecay: { - readonly new_: u64; + readonly new_: SpWeightsWeightV2Weight; } & Struct; readonly isUpdateXcmpMaxIndividualWeight: boolean; readonly asUpdateXcmpMaxIndividualWeight: { - readonly new_: u64; + readonly new_: SpWeightsWeightV2Weight; } & Struct; readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight'; } - /** @name PalletXcmCall (275) */ + /** @name PalletXcmCall (289) */ interface PalletXcmCall extends Enum { readonly isSend: boolean; readonly asSend: { @@ -2341,11 +2518,11 @@ declare module '@polkadot/types/lookup' { readonly isExecute: boolean; readonly asExecute: { readonly message: XcmVersionedXcm; - readonly maxWeight: u64; + readonly maxWeight: SpWeightsWeightV2Weight; } & Struct; readonly isForceXcmVersion: boolean; readonly asForceXcmVersion: { - readonly location: XcmV1MultiLocation; + readonly location: XcmV3MultiLocation; readonly xcmVersion: u32; } & Struct; readonly isForceDefaultXcmVersion: boolean; @@ -2366,7 +2543,7 @@ declare module '@polkadot/types/lookup' { readonly beneficiary: XcmVersionedMultiLocation; readonly assets: XcmVersionedMultiAssets; readonly feeAssetItem: u32; - readonly weightLimit: XcmV2WeightLimit; + readonly weightLimit: XcmV3WeightLimit; } & Struct; readonly isLimitedTeleportAssets: boolean; readonly asLimitedTeleportAssets: { @@ -2374,59 +2551,52 @@ declare module '@polkadot/types/lookup' { readonly beneficiary: XcmVersionedMultiLocation; readonly assets: XcmVersionedMultiAssets; readonly feeAssetItem: u32; - readonly weightLimit: XcmV2WeightLimit; + readonly weightLimit: XcmV3WeightLimit; } & Struct; readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets'; } - /** @name XcmVersionedXcm (276) */ + /** @name XcmVersionedXcm (290) */ interface XcmVersionedXcm extends Enum { - readonly isV0: boolean; - readonly asV0: XcmV0Xcm; - readonly isV1: boolean; - readonly asV1: XcmV1Xcm; readonly isV2: boolean; readonly asV2: XcmV2Xcm; - readonly type: 'V0' | 'V1' | 'V2'; + readonly isV3: boolean; + readonly asV3: XcmV3Xcm; + readonly type: 'V2' | 'V3'; } - /** @name XcmV0Xcm (277) */ - interface XcmV0Xcm extends Enum { + /** @name XcmV2Xcm (291) */ + interface XcmV2Xcm extends Vec {} + + /** @name XcmV2Instruction (293) */ + interface XcmV2Instruction extends Enum { readonly isWithdrawAsset: boolean; - readonly asWithdrawAsset: { - readonly assets: Vec; - readonly effects: Vec; - } & Struct; - readonly isReserveAssetDeposit: boolean; - readonly asReserveAssetDeposit: { - readonly assets: Vec; - readonly effects: Vec; - } & Struct; - readonly isTeleportAsset: boolean; - readonly asTeleportAsset: { - readonly assets: Vec; - readonly effects: Vec; - } & Struct; + readonly asWithdrawAsset: XcmV2MultiassetMultiAssets; + readonly isReserveAssetDeposited: boolean; + readonly asReserveAssetDeposited: XcmV2MultiassetMultiAssets; + readonly isReceiveTeleportedAsset: boolean; + readonly asReceiveTeleportedAsset: XcmV2MultiassetMultiAssets; readonly isQueryResponse: boolean; readonly asQueryResponse: { readonly queryId: Compact; - readonly response: XcmV0Response; + readonly response: XcmV2Response; + readonly maxWeight: Compact; } & Struct; readonly isTransferAsset: boolean; readonly asTransferAsset: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; + readonly assets: XcmV2MultiassetMultiAssets; + readonly beneficiary: XcmV2MultiLocation; } & Struct; readonly isTransferReserveAsset: boolean; readonly asTransferReserveAsset: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; - readonly effects: Vec; + readonly assets: XcmV2MultiassetMultiAssets; + readonly dest: XcmV2MultiLocation; + readonly xcm: XcmV2Xcm; } & Struct; readonly isTransact: boolean; readonly asTransact: { - readonly originType: XcmV0OriginKind; - readonly requireWeightAtMost: u64; + readonly originType: XcmV2OriginKind; + readonly requireWeightAtMost: Compact; readonly call: XcmDoubleEncoded; } & Struct; readonly isHrmpNewChannelOpenRequest: boolean; @@ -2445,211 +2615,173 @@ declare module '@polkadot/types/lookup' { readonly sender: Compact; readonly recipient: Compact; } & Struct; - readonly isRelayedFrom: boolean; - readonly asRelayedFrom: { - readonly who: XcmV0MultiLocation; - readonly message: XcmV0Xcm; + readonly isClearOrigin: boolean; + readonly isDescendOrigin: boolean; + readonly asDescendOrigin: XcmV2MultilocationJunctions; + readonly isReportError: boolean; + readonly asReportError: { + readonly queryId: Compact; + readonly dest: XcmV2MultiLocation; + readonly maxResponseWeight: Compact; } & Struct; - readonly type: 'WithdrawAsset' | 'ReserveAssetDeposit' | 'TeleportAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom'; - } - - /** @name XcmV0Order (279) */ - interface XcmV0Order extends Enum { - readonly isNull: boolean; readonly isDepositAsset: boolean; readonly asDepositAsset: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly maxAssets: Compact; + readonly beneficiary: XcmV2MultiLocation; } & Struct; readonly isDepositReserveAsset: boolean; readonly asDepositReserveAsset: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; - readonly effects: Vec; + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly maxAssets: Compact; + readonly dest: XcmV2MultiLocation; + readonly xcm: XcmV2Xcm; } & Struct; readonly isExchangeAsset: boolean; readonly asExchangeAsset: { - readonly give: Vec; - readonly receive: Vec; + readonly give: XcmV2MultiassetMultiAssetFilter; + readonly receive: XcmV2MultiassetMultiAssets; } & Struct; readonly isInitiateReserveWithdraw: boolean; readonly asInitiateReserveWithdraw: { - readonly assets: Vec; - readonly reserve: XcmV0MultiLocation; - readonly effects: Vec; + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly reserve: XcmV2MultiLocation; + readonly xcm: XcmV2Xcm; } & Struct; readonly isInitiateTeleport: boolean; readonly asInitiateTeleport: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; - readonly effects: Vec; + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly dest: XcmV2MultiLocation; + readonly xcm: XcmV2Xcm; } & Struct; readonly isQueryHolding: boolean; readonly asQueryHolding: { readonly queryId: Compact; - readonly dest: XcmV0MultiLocation; - readonly assets: Vec; + readonly dest: XcmV2MultiLocation; + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly maxResponseWeight: Compact; } & Struct; readonly isBuyExecution: boolean; readonly asBuyExecution: { - readonly fees: XcmV0MultiAsset; - readonly weight: u64; - readonly debt: u64; - readonly haltOnError: bool; - readonly xcm: Vec; - } & Struct; - readonly type: 'Null' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution'; - } - - /** @name XcmV0Response (281) */ - interface XcmV0Response extends Enum { - readonly isAssets: boolean; - readonly asAssets: Vec; - readonly type: 'Assets'; - } - - /** @name XcmV1Xcm (282) */ - interface XcmV1Xcm extends Enum { - readonly isWithdrawAsset: boolean; - readonly asWithdrawAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly effects: Vec; - } & Struct; - readonly isReserveAssetDeposited: boolean; - readonly asReserveAssetDeposited: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly effects: Vec; - } & Struct; - readonly isReceiveTeleportedAsset: boolean; - readonly asReceiveTeleportedAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly effects: Vec; - } & Struct; - readonly isQueryResponse: boolean; - readonly asQueryResponse: { - readonly queryId: Compact; - readonly response: XcmV1Response; - } & Struct; - readonly isTransferAsset: boolean; - readonly asTransferAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly beneficiary: XcmV1MultiLocation; - } & Struct; - readonly isTransferReserveAsset: boolean; - readonly asTransferReserveAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly dest: XcmV1MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isTransact: boolean; - readonly asTransact: { - readonly originType: XcmV0OriginKind; - readonly requireWeightAtMost: u64; - readonly call: XcmDoubleEncoded; - } & Struct; - readonly isHrmpNewChannelOpenRequest: boolean; - readonly asHrmpNewChannelOpenRequest: { - readonly sender: Compact; - readonly maxMessageSize: Compact; - readonly maxCapacity: Compact; - } & Struct; - readonly isHrmpChannelAccepted: boolean; - readonly asHrmpChannelAccepted: { - readonly recipient: Compact; - } & Struct; - readonly isHrmpChannelClosing: boolean; - readonly asHrmpChannelClosing: { - readonly initiator: Compact; - readonly sender: Compact; - readonly recipient: Compact; + readonly fees: XcmV2MultiAsset; + readonly weightLimit: XcmV2WeightLimit; } & Struct; - readonly isRelayedFrom: boolean; - readonly asRelayedFrom: { - readonly who: XcmV1MultilocationJunctions; - readonly message: XcmV1Xcm; + readonly isRefundSurplus: boolean; + readonly isSetErrorHandler: boolean; + readonly asSetErrorHandler: XcmV2Xcm; + readonly isSetAppendix: boolean; + readonly asSetAppendix: XcmV2Xcm; + readonly isClearError: boolean; + readonly isClaimAsset: boolean; + readonly asClaimAsset: { + readonly assets: XcmV2MultiassetMultiAssets; + readonly ticket: XcmV2MultiLocation; } & Struct; + readonly isTrap: boolean; + readonly asTrap: Compact; readonly isSubscribeVersion: boolean; readonly asSubscribeVersion: { readonly queryId: Compact; readonly maxResponseWeight: Compact; } & Struct; readonly isUnsubscribeVersion: boolean; - readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom' | 'SubscribeVersion' | 'UnsubscribeVersion'; - } - - /** @name XcmV1Order (284) */ - interface XcmV1Order extends Enum { - readonly isNoop: boolean; - readonly isDepositAsset: boolean; - readonly asDepositAsset: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxAssets: u32; - readonly beneficiary: XcmV1MultiLocation; - } & Struct; - readonly isDepositReserveAsset: boolean; - readonly asDepositReserveAsset: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxAssets: u32; - readonly dest: XcmV1MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isExchangeAsset: boolean; - readonly asExchangeAsset: { - readonly give: XcmV1MultiassetMultiAssetFilter; - readonly receive: XcmV1MultiassetMultiAssets; - } & Struct; - readonly isInitiateReserveWithdraw: boolean; - readonly asInitiateReserveWithdraw: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly reserve: XcmV1MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isInitiateTeleport: boolean; - readonly asInitiateTeleport: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly dest: XcmV1MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isQueryHolding: boolean; - readonly asQueryHolding: { - readonly queryId: Compact; - readonly dest: XcmV1MultiLocation; - readonly assets: XcmV1MultiassetMultiAssetFilter; - } & Struct; - readonly isBuyExecution: boolean; - readonly asBuyExecution: { - readonly fees: XcmV1MultiAsset; - readonly weight: u64; - readonly debt: u64; - readonly haltOnError: bool; - readonly instructions: Vec; - } & Struct; - readonly type: 'Noop' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution'; + readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion'; } - /** @name XcmV1Response (286) */ - interface XcmV1Response extends Enum { + /** @name XcmV2Response (294) */ + interface XcmV2Response extends Enum { + readonly isNull: boolean; readonly isAssets: boolean; - readonly asAssets: XcmV1MultiassetMultiAssets; + readonly asAssets: XcmV2MultiassetMultiAssets; + readonly isExecutionResult: boolean; + readonly asExecutionResult: Option>; readonly isVersion: boolean; readonly asVersion: u32; - readonly type: 'Assets' | 'Version'; + readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version'; + } + + /** @name XcmV2TraitsError (297) */ + interface XcmV2TraitsError extends Enum { + readonly isOverflow: boolean; + readonly isUnimplemented: boolean; + readonly isUntrustedReserveLocation: boolean; + readonly isUntrustedTeleportLocation: boolean; + readonly isMultiLocationFull: boolean; + readonly isMultiLocationNotInvertible: boolean; + readonly isBadOrigin: boolean; + readonly isInvalidLocation: boolean; + readonly isAssetNotFound: boolean; + readonly isFailedToTransactAsset: boolean; + readonly isNotWithdrawable: boolean; + readonly isLocationCannotHold: boolean; + readonly isExceedsMaxMessageSize: boolean; + readonly isDestinationUnsupported: boolean; + readonly isTransport: boolean; + readonly isUnroutable: boolean; + readonly isUnknownClaim: boolean; + readonly isFailedToDecode: boolean; + readonly isMaxWeightInvalid: boolean; + readonly isNotHoldingFees: boolean; + readonly isTooExpensive: boolean; + readonly isTrap: boolean; + readonly asTrap: u64; + readonly isUnhandledXcmVersion: boolean; + readonly isWeightLimitReached: boolean; + readonly asWeightLimitReached: u64; + readonly isBarrier: boolean; + readonly isWeightNotComputable: boolean; + readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable'; + } + + /** @name XcmV2MultiassetMultiAssetFilter (298) */ + interface XcmV2MultiassetMultiAssetFilter extends Enum { + readonly isDefinite: boolean; + readonly asDefinite: XcmV2MultiassetMultiAssets; + readonly isWild: boolean; + readonly asWild: XcmV2MultiassetWildMultiAsset; + readonly type: 'Definite' | 'Wild'; + } + + /** @name XcmV2MultiassetWildMultiAsset (299) */ + interface XcmV2MultiassetWildMultiAsset extends Enum { + readonly isAll: boolean; + readonly isAllOf: boolean; + readonly asAllOf: { + readonly id: XcmV2MultiassetAssetId; + readonly fun: XcmV2MultiassetWildFungibility; + } & Struct; + readonly type: 'All' | 'AllOf'; + } + + /** @name XcmV2MultiassetWildFungibility (300) */ + interface XcmV2MultiassetWildFungibility extends Enum { + readonly isFungible: boolean; + readonly isNonFungible: boolean; + readonly type: 'Fungible' | 'NonFungible'; } - /** @name CumulusPalletXcmCall (300) */ + /** @name XcmV2WeightLimit (301) */ + interface XcmV2WeightLimit extends Enum { + readonly isUnlimited: boolean; + readonly isLimited: boolean; + readonly asLimited: Compact; + readonly type: 'Unlimited' | 'Limited'; + } + + /** @name CumulusPalletXcmCall (310) */ type CumulusPalletXcmCall = Null; - /** @name CumulusPalletDmpQueueCall (301) */ + /** @name CumulusPalletDmpQueueCall (311) */ interface CumulusPalletDmpQueueCall extends Enum { readonly isServiceOverweight: boolean; readonly asServiceOverweight: { readonly index: u64; - readonly weightLimit: u64; + readonly weightLimit: SpWeightsWeightV2Weight; } & Struct; readonly type: 'ServiceOverweight'; } - /** @name PalletInflationCall (302) */ + /** @name PalletInflationCall (312) */ interface PalletInflationCall extends Enum { readonly isStartInflation: boolean; readonly asStartInflation: { @@ -2658,7 +2790,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'StartInflation'; } - /** @name PalletUniqueCall (303) */ + /** @name PalletUniqueCall (313) */ interface PalletUniqueCall extends Enum { readonly isCreateCollection: boolean; readonly asCreateCollection: { @@ -2839,7 +2971,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'ApproveFrom' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions' | 'Repartition' | 'SetAllowanceForAll' | 'ForceRepairCollection' | 'ForceRepairItem'; } - /** @name UpDataStructsCollectionMode (308) */ + /** @name UpDataStructsCollectionMode (318) */ interface UpDataStructsCollectionMode extends Enum { readonly isNft: boolean; readonly isFungible: boolean; @@ -2848,7 +2980,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Nft' | 'Fungible' | 'ReFungible'; } - /** @name UpDataStructsCreateCollectionData (309) */ + /** @name UpDataStructsCreateCollectionData (319) */ interface UpDataStructsCreateCollectionData extends Struct { readonly mode: UpDataStructsCollectionMode; readonly access: Option; @@ -2862,14 +2994,14 @@ declare module '@polkadot/types/lookup' { readonly properties: Vec; } - /** @name UpDataStructsAccessMode (311) */ + /** @name UpDataStructsAccessMode (321) */ interface UpDataStructsAccessMode extends Enum { readonly isNormal: boolean; readonly isAllowList: boolean; readonly type: 'Normal' | 'AllowList'; } - /** @name UpDataStructsCollectionLimits (313) */ + /** @name UpDataStructsCollectionLimits (323) */ interface UpDataStructsCollectionLimits extends Struct { readonly accountTokenOwnershipLimit: Option; readonly sponsoredDataSize: Option; @@ -2882,7 +3014,7 @@ declare module '@polkadot/types/lookup' { readonly transfersEnabled: Option; } - /** @name UpDataStructsSponsoringRateLimit (315) */ + /** @name UpDataStructsSponsoringRateLimit (325) */ interface UpDataStructsSponsoringRateLimit extends Enum { readonly isSponsoringDisabled: boolean; readonly isBlocks: boolean; @@ -2890,43 +3022,43 @@ declare module '@polkadot/types/lookup' { readonly type: 'SponsoringDisabled' | 'Blocks'; } - /** @name UpDataStructsCollectionPermissions (318) */ + /** @name UpDataStructsCollectionPermissions (328) */ interface UpDataStructsCollectionPermissions extends Struct { readonly access: Option; readonly mintMode: Option; readonly nesting: Option; } - /** @name UpDataStructsNestingPermissions (320) */ + /** @name UpDataStructsNestingPermissions (330) */ interface UpDataStructsNestingPermissions extends Struct { readonly tokenOwner: bool; readonly collectionAdmin: bool; readonly restricted: Option; } - /** @name UpDataStructsOwnerRestrictedSet (322) */ + /** @name UpDataStructsOwnerRestrictedSet (332) */ interface UpDataStructsOwnerRestrictedSet extends BTreeSet {} - /** @name UpDataStructsPropertyKeyPermission (327) */ + /** @name UpDataStructsPropertyKeyPermission (337) */ interface UpDataStructsPropertyKeyPermission extends Struct { readonly key: Bytes; readonly permission: UpDataStructsPropertyPermission; } - /** @name UpDataStructsPropertyPermission (328) */ + /** @name UpDataStructsPropertyPermission (338) */ interface UpDataStructsPropertyPermission extends Struct { readonly mutable: bool; readonly collectionAdmin: bool; readonly tokenOwner: bool; } - /** @name UpDataStructsProperty (331) */ + /** @name UpDataStructsProperty (341) */ interface UpDataStructsProperty extends Struct { readonly key: Bytes; readonly value: Bytes; } - /** @name UpDataStructsCreateItemData (334) */ + /** @name UpDataStructsCreateItemData (344) */ interface UpDataStructsCreateItemData extends Enum { readonly isNft: boolean; readonly asNft: UpDataStructsCreateNftData; @@ -2937,23 +3069,23 @@ declare module '@polkadot/types/lookup' { readonly type: 'Nft' | 'Fungible' | 'ReFungible'; } - /** @name UpDataStructsCreateNftData (335) */ + /** @name UpDataStructsCreateNftData (345) */ interface UpDataStructsCreateNftData extends Struct { readonly properties: Vec; } - /** @name UpDataStructsCreateFungibleData (336) */ + /** @name UpDataStructsCreateFungibleData (346) */ interface UpDataStructsCreateFungibleData extends Struct { readonly value: u128; } - /** @name UpDataStructsCreateReFungibleData (337) */ + /** @name UpDataStructsCreateReFungibleData (347) */ interface UpDataStructsCreateReFungibleData extends Struct { readonly pieces: u128; readonly properties: Vec; } - /** @name UpDataStructsCreateItemExData (340) */ + /** @name UpDataStructsCreateItemExData (350) */ interface UpDataStructsCreateItemExData extends Enum { readonly isNft: boolean; readonly asNft: Vec; @@ -2966,26 +3098,26 @@ declare module '@polkadot/types/lookup' { readonly type: 'Nft' | 'Fungible' | 'RefungibleMultipleItems' | 'RefungibleMultipleOwners'; } - /** @name UpDataStructsCreateNftExData (342) */ + /** @name UpDataStructsCreateNftExData (352) */ interface UpDataStructsCreateNftExData extends Struct { readonly properties: Vec; readonly owner: PalletEvmAccountBasicCrossAccountIdRepr; } - /** @name UpDataStructsCreateRefungibleExSingleOwner (349) */ + /** @name UpDataStructsCreateRefungibleExSingleOwner (359) */ interface UpDataStructsCreateRefungibleExSingleOwner extends Struct { readonly user: PalletEvmAccountBasicCrossAccountIdRepr; readonly pieces: u128; readonly properties: Vec; } - /** @name UpDataStructsCreateRefungibleExMultipleOwners (351) */ + /** @name UpDataStructsCreateRefungibleExMultipleOwners (361) */ interface UpDataStructsCreateRefungibleExMultipleOwners extends Struct { readonly users: BTreeMap; readonly properties: Vec; } - /** @name PalletConfigurationCall (352) */ + /** @name PalletConfigurationCall (362) */ interface PalletConfigurationCall extends Enum { readonly isSetWeightToFeeCoefficientOverride: boolean; readonly asSetWeightToFeeCoefficientOverride: { @@ -2995,10 +3127,6 @@ declare module '@polkadot/types/lookup' { readonly asSetMinGasPriceOverride: { readonly coeff: Option; } & Struct; - readonly isSetXcmAllowedLocations: boolean; - readonly asSetXcmAllowedLocations: { - readonly locations: Option>; - } & Struct; readonly isSetAppPromotionConfigurationOverride: boolean; readonly asSetAppPromotionConfigurationOverride: { readonly configuration: PalletConfigurationAppPromotionConfiguration; @@ -3015,10 +3143,10 @@ declare module '@polkadot/types/lookup' { readonly asSetCollatorSelectionKickThreshold: { readonly threshold: Option; } & Struct; - readonly type: 'SetWeightToFeeCoefficientOverride' | 'SetMinGasPriceOverride' | 'SetXcmAllowedLocations' | 'SetAppPromotionConfigurationOverride' | 'SetCollatorSelectionDesiredCollators' | 'SetCollatorSelectionLicenseBond' | 'SetCollatorSelectionKickThreshold'; + readonly type: 'SetWeightToFeeCoefficientOverride' | 'SetMinGasPriceOverride' | 'SetAppPromotionConfigurationOverride' | 'SetCollatorSelectionDesiredCollators' | 'SetCollatorSelectionLicenseBond' | 'SetCollatorSelectionKickThreshold'; } - /** @name PalletConfigurationAppPromotionConfiguration (357) */ + /** @name PalletConfigurationAppPromotionConfiguration (364) */ interface PalletConfigurationAppPromotionConfiguration extends Struct { readonly recalculationInterval: Option; readonly pendingInterval: Option; @@ -3026,13 +3154,13 @@ declare module '@polkadot/types/lookup' { readonly maxStakersPerCalculation: Option; } - /** @name PalletTemplateTransactionPaymentCall (361) */ + /** @name PalletTemplateTransactionPaymentCall (368) */ type PalletTemplateTransactionPaymentCall = Null; - /** @name PalletStructureCall (362) */ + /** @name PalletStructureCall (369) */ type PalletStructureCall = Null; - /** @name PalletAppPromotionCall (363) */ + /** @name PalletAppPromotionCall (370) */ interface PalletAppPromotionCall extends Enum { readonly isSetAdminAddress: boolean; readonly asSetAdminAddress: { @@ -3070,7 +3198,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetAdminAddress' | 'Stake' | 'UnstakeAll' | 'SponsorCollection' | 'StopSponsoringCollection' | 'SponsorContract' | 'StopSponsoringContract' | 'PayoutStakers' | 'UnstakePartial'; } - /** @name PalletForeignAssetsModuleCall (364) */ + /** @name PalletForeignAssetsModuleCall (371) */ interface PalletForeignAssetsModuleCall extends Enum { readonly isRegisterForeignAsset: boolean; readonly asRegisterForeignAsset: { @@ -3087,7 +3215,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'RegisterForeignAsset' | 'UpdateForeignAsset'; } - /** @name PalletEvmCall (365) */ + /** @name PalletEvmCall (372) */ interface PalletEvmCall extends Enum { readonly isWithdraw: boolean; readonly asWithdraw: { @@ -3132,7 +3260,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Withdraw' | 'Call' | 'Create' | 'Create2'; } - /** @name PalletEthereumCall (371) */ + /** @name PalletEthereumCall (378) */ interface PalletEthereumCall extends Enum { readonly isTransact: boolean; readonly asTransact: { @@ -3141,7 +3269,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Transact'; } - /** @name EthereumTransactionTransactionV2 (372) */ + /** @name EthereumTransactionTransactionV2 (379) */ interface EthereumTransactionTransactionV2 extends Enum { readonly isLegacy: boolean; readonly asLegacy: EthereumTransactionLegacyTransaction; @@ -3152,7 +3280,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Legacy' | 'Eip2930' | 'Eip1559'; } - /** @name EthereumTransactionLegacyTransaction (373) */ + /** @name EthereumTransactionLegacyTransaction (380) */ interface EthereumTransactionLegacyTransaction extends Struct { readonly nonce: U256; readonly gasPrice: U256; @@ -3163,7 +3291,7 @@ declare module '@polkadot/types/lookup' { readonly signature: EthereumTransactionTransactionSignature; } - /** @name EthereumTransactionTransactionAction (374) */ + /** @name EthereumTransactionTransactionAction (381) */ interface EthereumTransactionTransactionAction extends Enum { readonly isCall: boolean; readonly asCall: H160; @@ -3171,14 +3299,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Call' | 'Create'; } - /** @name EthereumTransactionTransactionSignature (375) */ + /** @name EthereumTransactionTransactionSignature (382) */ interface EthereumTransactionTransactionSignature extends Struct { readonly v: u64; readonly r: H256; readonly s: H256; } - /** @name EthereumTransactionEip2930Transaction (377) */ + /** @name EthereumTransactionEip2930Transaction (384) */ interface EthereumTransactionEip2930Transaction extends Struct { readonly chainId: u64; readonly nonce: U256; @@ -3193,13 +3321,13 @@ declare module '@polkadot/types/lookup' { readonly s: H256; } - /** @name EthereumTransactionAccessListItem (379) */ + /** @name EthereumTransactionAccessListItem (386) */ interface EthereumTransactionAccessListItem extends Struct { readonly address: H160; readonly storageKeys: Vec; } - /** @name EthereumTransactionEip1559Transaction (380) */ + /** @name EthereumTransactionEip1559Transaction (387) */ interface EthereumTransactionEip1559Transaction extends Struct { readonly chainId: u64; readonly nonce: U256; @@ -3215,7 +3343,22 @@ declare module '@polkadot/types/lookup' { readonly s: H256; } - /** @name PalletEvmMigrationCall (381) */ + /** @name PalletEvmCoderSubstrateCall (388) */ + interface PalletEvmCoderSubstrateCall extends Enum { + readonly isEmptyCall: boolean; + readonly type: 'EmptyCall'; + } + + /** @name PalletEvmContractHelpersCall (389) */ + interface PalletEvmContractHelpersCall extends Enum { + readonly isMigrateFromSelfSponsoring: boolean; + readonly asMigrateFromSelfSponsoring: { + readonly addresses: Vec; + } & Struct; + readonly type: 'MigrateFromSelfSponsoring'; + } + + /** @name PalletEvmMigrationCall (391) */ interface PalletEvmMigrationCall extends Enum { readonly isBegin: boolean; readonly asBegin: { @@ -3243,7 +3386,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Begin' | 'SetData' | 'Finish' | 'InsertEthLogs' | 'InsertEvents' | 'RemoveRmrkData'; } - /** @name PalletMaintenanceCall (385) */ + /** @name PalletMaintenanceCall (395) */ interface PalletMaintenanceCall extends Enum { readonly isEnable: boolean; readonly isDisable: boolean; @@ -3255,7 +3398,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Enable' | 'Disable' | 'ExecutePreimage'; } - /** @name PalletTestUtilsCall (386) */ + /** @name PalletTestUtilsCall (396) */ interface PalletTestUtilsCall extends Enum { readonly isEnable: boolean; readonly isSetTestValue: boolean; @@ -3275,13 +3418,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Enable' | 'SetTestValue' | 'SetTestValueAndRollback' | 'IncTestValue' | 'JustTakeFee' | 'BatchAll'; } - /** @name PalletSudoError (388) */ + /** @name PalletSudoError (398) */ interface PalletSudoError extends Enum { readonly isRequireSudo: boolean; readonly type: 'RequireSudo'; } - /** @name OrmlVestingModuleError (390) */ + /** @name OrmlVestingModuleError (400) */ interface OrmlVestingModuleError extends Enum { readonly isZeroVestingPeriod: boolean; readonly isZeroVestingPeriodCount: boolean; @@ -3292,7 +3435,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ZeroVestingPeriod' | 'ZeroVestingPeriodCount' | 'InsufficientBalanceToLock' | 'TooManyVestingSchedules' | 'AmountLow' | 'MaxVestingSchedulesExceeded'; } - /** @name OrmlXtokensModuleError (391) */ + /** @name OrmlXtokensModuleError (401) */ interface OrmlXtokensModuleError extends Enum { readonly isAssetHasNoReserve: boolean; readonly isNotCrossChainTransfer: boolean; @@ -3316,26 +3459,26 @@ declare module '@polkadot/types/lookup' { readonly type: 'AssetHasNoReserve' | 'NotCrossChainTransfer' | 'InvalidDest' | 'NotCrossChainTransferableCurrency' | 'UnweighableMessage' | 'XcmExecutionFailed' | 'CannotReanchor' | 'InvalidAncestry' | 'InvalidAsset' | 'DestinationNotInvertible' | 'BadVersion' | 'DistinctReserveForAssetAndFee' | 'ZeroFee' | 'ZeroAmount' | 'TooManyAssetsBeingSent' | 'AssetIndexNonExistent' | 'FeeNotEnough' | 'NotSupportedMultiLocation' | 'MinXcmFeeNotDefined'; } - /** @name OrmlTokensBalanceLock (394) */ + /** @name OrmlTokensBalanceLock (404) */ interface OrmlTokensBalanceLock extends Struct { readonly id: U8aFixed; readonly amount: u128; } - /** @name OrmlTokensAccountData (396) */ + /** @name OrmlTokensAccountData (406) */ interface OrmlTokensAccountData extends Struct { readonly free: u128; readonly reserved: u128; readonly frozen: u128; } - /** @name OrmlTokensReserveData (398) */ + /** @name OrmlTokensReserveData (408) */ interface OrmlTokensReserveData extends Struct { readonly id: Null; readonly amount: u128; } - /** @name OrmlTokensModuleError (400) */ + /** @name OrmlTokensModuleError (410) */ interface OrmlTokensModuleError extends Enum { readonly isBalanceTooLow: boolean; readonly isAmountIntoBalanceFailed: boolean; @@ -3348,14 +3491,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'BalanceTooLow' | 'AmountIntoBalanceFailed' | 'LiquidityRestrictions' | 'MaxLocksExceeded' | 'KeepAlive' | 'ExistentialDeposit' | 'DeadAccount' | 'TooManyReserves'; } - /** @name PalletIdentityRegistrarInfo (405) */ + /** @name PalletIdentityRegistrarInfo (415) */ interface PalletIdentityRegistrarInfo extends Struct { readonly account: AccountId32; readonly fee: u128; readonly fields: PalletIdentityBitFlags; } - /** @name PalletIdentityError (407) */ + /** @name PalletIdentityError (417) */ interface PalletIdentityError extends Enum { readonly isTooManySubAccounts: boolean; readonly isNotFound: boolean; @@ -3378,7 +3521,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'TooManySubAccounts' | 'NotFound' | 'NotNamed' | 'EmptyIndex' | 'FeeChanged' | 'NoIdentity' | 'StickyJudgement' | 'JudgementGiven' | 'InvalidJudgement' | 'InvalidIndex' | 'InvalidTarget' | 'TooManyFields' | 'TooManyRegistrars' | 'AlreadyClaimed' | 'NotSub' | 'NotOwned' | 'JudgementForDifferentIdentity' | 'JudgementPaymentFailed'; } - /** @name PalletPreimageRequestStatus (408) */ + /** @name PalletPreimageRequestStatus (418) */ interface PalletPreimageRequestStatus extends Enum { readonly isUnrequested: boolean; readonly asUnrequested: { @@ -3394,7 +3537,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unrequested' | 'Requested'; } - /** @name PalletPreimageError (413) */ + /** @name PalletPreimageError (423) */ interface PalletPreimageError extends Enum { readonly isTooBig: boolean; readonly isAlreadyNoted: boolean; @@ -3405,21 +3548,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'TooBig' | 'AlreadyNoted' | 'NotAuthorized' | 'NotNoted' | 'Requested' | 'NotRequested'; } - /** @name CumulusPalletXcmpQueueInboundChannelDetails (415) */ + /** @name CumulusPalletXcmpQueueInboundChannelDetails (425) */ interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct { readonly sender: u32; readonly state: CumulusPalletXcmpQueueInboundState; readonly messageMetadata: Vec>; } - /** @name CumulusPalletXcmpQueueInboundState (416) */ + /** @name CumulusPalletXcmpQueueInboundState (426) */ interface CumulusPalletXcmpQueueInboundState extends Enum { readonly isOk: boolean; readonly isSuspended: boolean; readonly type: 'Ok' | 'Suspended'; } - /** @name PolkadotParachainPrimitivesXcmpMessageFormat (419) */ + /** @name PolkadotParachainPrimitivesXcmpMessageFormat (429) */ interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum { readonly isConcatenatedVersionedXcm: boolean; readonly isConcatenatedEncodedBlob: boolean; @@ -3427,7 +3570,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals'; } - /** @name CumulusPalletXcmpQueueOutboundChannelDetails (422) */ + /** @name CumulusPalletXcmpQueueOutboundChannelDetails (432) */ interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct { readonly recipient: u32; readonly state: CumulusPalletXcmpQueueOutboundState; @@ -3436,14 +3579,14 @@ declare module '@polkadot/types/lookup' { readonly lastIndex: u16; } - /** @name CumulusPalletXcmpQueueOutboundState (423) */ + /** @name CumulusPalletXcmpQueueOutboundState (433) */ interface CumulusPalletXcmpQueueOutboundState extends Enum { readonly isOk: boolean; readonly isSuspended: boolean; readonly type: 'Ok' | 'Suspended'; } - /** @name CumulusPalletXcmpQueueQueueConfigData (425) */ + /** @name CumulusPalletXcmpQueueQueueConfigData (435) */ interface CumulusPalletXcmpQueueQueueConfigData extends Struct { readonly suspendThreshold: u32; readonly dropThreshold: u32; @@ -3453,7 +3596,7 @@ declare module '@polkadot/types/lookup' { readonly xcmpMaxIndividualWeight: SpWeightsWeightV2Weight; } - /** @name CumulusPalletXcmpQueueError (427) */ + /** @name CumulusPalletXcmpQueueError (437) */ interface CumulusPalletXcmpQueueError extends Enum { readonly isFailedToSend: boolean; readonly isBadXcmOrigin: boolean; @@ -3463,7 +3606,63 @@ declare module '@polkadot/types/lookup' { readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit'; } - /** @name PalletXcmError (428) */ + /** @name PalletXcmQueryStatus (438) */ + interface PalletXcmQueryStatus extends Enum { + readonly isPending: boolean; + readonly asPending: { + readonly responder: XcmVersionedMultiLocation; + readonly maybeMatchQuerier: Option; + readonly maybeNotify: Option>; + readonly timeout: u32; + } & Struct; + readonly isVersionNotifier: boolean; + readonly asVersionNotifier: { + readonly origin: XcmVersionedMultiLocation; + readonly isActive: bool; + } & Struct; + readonly isReady: boolean; + readonly asReady: { + readonly response: XcmVersionedResponse; + readonly at: u32; + } & Struct; + readonly type: 'Pending' | 'VersionNotifier' | 'Ready'; + } + + /** @name XcmVersionedResponse (442) */ + interface XcmVersionedResponse extends Enum { + readonly isV2: boolean; + readonly asV2: XcmV2Response; + readonly isV3: boolean; + readonly asV3: XcmV3Response; + readonly type: 'V2' | 'V3'; + } + + /** @name PalletXcmVersionMigrationStage (448) */ + interface PalletXcmVersionMigrationStage extends Enum { + readonly isMigrateSupportedVersion: boolean; + readonly isMigrateVersionNotifiers: boolean; + readonly isNotifyCurrentTargets: boolean; + readonly asNotifyCurrentTargets: Option; + readonly isMigrateAndNotifyOldTargets: boolean; + readonly type: 'MigrateSupportedVersion' | 'MigrateVersionNotifiers' | 'NotifyCurrentTargets' | 'MigrateAndNotifyOldTargets'; + } + + /** @name XcmVersionedAssetId (451) */ + interface XcmVersionedAssetId extends Enum { + readonly isV3: boolean; + readonly asV3: XcmV3MultiassetAssetId; + readonly type: 'V3'; + } + + /** @name PalletXcmRemoteLockedFungibleRecord (452) */ + interface PalletXcmRemoteLockedFungibleRecord extends Struct { + readonly amount: u128; + readonly owner: XcmVersionedMultiLocation; + readonly locker: XcmVersionedMultiLocation; + readonly users: u32; + } + + /** @name PalletXcmError (456) */ interface PalletXcmError extends Enum { readonly isUnreachable: boolean; readonly isSendFailure: boolean; @@ -3478,32 +3677,39 @@ declare module '@polkadot/types/lookup' { readonly isBadLocation: boolean; readonly isNoSubscription: boolean; readonly isAlreadySubscribed: boolean; - readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed'; + readonly isInvalidAsset: boolean; + readonly isLowBalance: boolean; + readonly isTooManyLocks: boolean; + readonly isAccountNotSovereign: boolean; + readonly isFeesNotMet: boolean; + readonly isLockNotFound: boolean; + readonly isInUse: boolean; + readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed' | 'InvalidAsset' | 'LowBalance' | 'TooManyLocks' | 'AccountNotSovereign' | 'FeesNotMet' | 'LockNotFound' | 'InUse'; } - /** @name CumulusPalletXcmError (429) */ + /** @name CumulusPalletXcmError (457) */ type CumulusPalletXcmError = Null; - /** @name CumulusPalletDmpQueueConfigData (430) */ + /** @name CumulusPalletDmpQueueConfigData (458) */ interface CumulusPalletDmpQueueConfigData extends Struct { readonly maxIndividual: SpWeightsWeightV2Weight; } - /** @name CumulusPalletDmpQueuePageIndexData (431) */ + /** @name CumulusPalletDmpQueuePageIndexData (459) */ interface CumulusPalletDmpQueuePageIndexData extends Struct { readonly beginUsed: u32; readonly endUsed: u32; readonly overweightCount: u64; } - /** @name CumulusPalletDmpQueueError (434) */ + /** @name CumulusPalletDmpQueueError (462) */ interface CumulusPalletDmpQueueError extends Enum { readonly isUnknown: boolean; readonly isOverLimit: boolean; readonly type: 'Unknown' | 'OverLimit'; } - /** @name PalletUniqueError (438) */ + /** @name PalletUniqueError (466) */ interface PalletUniqueError extends Enum { readonly isCollectionDecimalPointLimitExceeded: boolean; readonly isEmptyArgument: boolean; @@ -3511,13 +3717,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'CollectionDecimalPointLimitExceeded' | 'EmptyArgument' | 'RepartitionCalledOnNonRefungibleCollection'; } - /** @name PalletConfigurationError (439) */ + /** @name PalletConfigurationError (467) */ interface PalletConfigurationError extends Enum { readonly isInconsistentConfiguration: boolean; readonly type: 'InconsistentConfiguration'; } - /** @name UpDataStructsCollection (440) */ + /** @name UpDataStructsCollection (468) */ interface UpDataStructsCollection extends Struct { readonly owner: AccountId32; readonly mode: UpDataStructsCollectionMode; @@ -3530,7 +3736,7 @@ declare module '@polkadot/types/lookup' { readonly flags: U8aFixed; } - /** @name UpDataStructsSponsorshipStateAccountId32 (441) */ + /** @name UpDataStructsSponsorshipStateAccountId32 (469) */ interface UpDataStructsSponsorshipStateAccountId32 extends Enum { readonly isDisabled: boolean; readonly isUnconfirmed: boolean; @@ -3540,43 +3746,43 @@ declare module '@polkadot/types/lookup' { readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed'; } - /** @name UpDataStructsProperties (442) */ + /** @name UpDataStructsProperties (470) */ interface UpDataStructsProperties extends Struct { readonly map: UpDataStructsPropertiesMapBoundedVec; readonly consumedSpace: u32; - readonly spaceLimit: u32; + readonly reserved: u32; } - /** @name UpDataStructsPropertiesMapBoundedVec (443) */ + /** @name UpDataStructsPropertiesMapBoundedVec (471) */ interface UpDataStructsPropertiesMapBoundedVec extends BTreeMap {} - /** @name UpDataStructsPropertiesMapPropertyPermission (448) */ + /** @name UpDataStructsPropertiesMapPropertyPermission (476) */ interface UpDataStructsPropertiesMapPropertyPermission extends BTreeMap {} - /** @name UpDataStructsCollectionStats (455) */ + /** @name UpDataStructsCollectionStats (483) */ interface UpDataStructsCollectionStats extends Struct { readonly created: u32; readonly destroyed: u32; readonly alive: u32; } - /** @name UpDataStructsTokenChild (456) */ + /** @name UpDataStructsTokenChild (484) */ interface UpDataStructsTokenChild extends Struct { readonly token: u32; readonly collection: u32; } - /** @name PhantomTypeUpDataStructs (457) */ + /** @name PhantomTypeUpDataStructs (485) */ interface PhantomTypeUpDataStructs extends Vec> {} - /** @name UpDataStructsTokenData (459) */ + /** @name UpDataStructsTokenData (487) */ interface UpDataStructsTokenData extends Struct { readonly properties: Vec; readonly owner: Option; readonly pieces: u128; } - /** @name UpDataStructsRpcCollection (461) */ + /** @name UpDataStructsRpcCollection (489) */ interface UpDataStructsRpcCollection extends Struct { readonly owner: AccountId32; readonly mode: UpDataStructsCollectionMode; @@ -3592,13 +3798,13 @@ declare module '@polkadot/types/lookup' { readonly flags: UpDataStructsRpcCollectionFlags; } - /** @name UpDataStructsRpcCollectionFlags (462) */ + /** @name UpDataStructsRpcCollectionFlags (490) */ interface UpDataStructsRpcCollectionFlags extends Struct { readonly foreign: bool; readonly erc721metadata: bool; } - /** @name UpPovEstimateRpcPovInfo (463) */ + /** @name UpPovEstimateRpcPovInfo (491) */ interface UpPovEstimateRpcPovInfo extends Struct { readonly proofSize: u64; readonly compactProofSize: u64; @@ -3607,7 +3813,7 @@ declare module '@polkadot/types/lookup' { readonly keyValues: Vec; } - /** @name SpRuntimeTransactionValidityTransactionValidityError (466) */ + /** @name SpRuntimeTransactionValidityTransactionValidityError (494) */ interface SpRuntimeTransactionValidityTransactionValidityError extends Enum { readonly isInvalid: boolean; readonly asInvalid: SpRuntimeTransactionValidityInvalidTransaction; @@ -3616,7 +3822,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Invalid' | 'Unknown'; } - /** @name SpRuntimeTransactionValidityInvalidTransaction (467) */ + /** @name SpRuntimeTransactionValidityInvalidTransaction (495) */ interface SpRuntimeTransactionValidityInvalidTransaction extends Enum { readonly isCall: boolean; readonly isPayment: boolean; @@ -3633,7 +3839,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Call' | 'Payment' | 'Future' | 'Stale' | 'BadProof' | 'AncientBirthBlock' | 'ExhaustsResources' | 'Custom' | 'BadMandatory' | 'MandatoryValidation' | 'BadSigner'; } - /** @name SpRuntimeTransactionValidityUnknownTransaction (468) */ + /** @name SpRuntimeTransactionValidityUnknownTransaction (496) */ interface SpRuntimeTransactionValidityUnknownTransaction extends Enum { readonly isCannotLookup: boolean; readonly isNoUnsignedValidator: boolean; @@ -3642,13 +3848,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'CannotLookup' | 'NoUnsignedValidator' | 'Custom'; } - /** @name UpPovEstimateRpcTrieKeyValue (470) */ + /** @name UpPovEstimateRpcTrieKeyValue (498) */ interface UpPovEstimateRpcTrieKeyValue extends Struct { readonly key: Bytes; readonly value: Bytes; } - /** @name PalletCommonError (472) */ + /** @name PalletCommonError (500) */ interface PalletCommonError extends Enum { readonly isCollectionNotFound: boolean; readonly isMustBeTokenOwner: boolean; @@ -3690,7 +3896,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'CantDestroyNotEmptyCollection' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsNotEthMirror' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'UserIsNotAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey' | 'CollectionIsExternal' | 'CollectionIsInternal' | 'ConfirmSponsorshipFail' | 'UserIsNotCollectionAdmin'; } - /** @name PalletFungibleError (474) */ + /** @name PalletFungibleError (502) */ interface PalletFungibleError extends Enum { readonly isNotFungibleDataUsedToMintFungibleCollectionToken: boolean; readonly isFungibleItemsHaveNoId: boolean; @@ -3702,7 +3908,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotFungibleDataUsedToMintFungibleCollectionToken' | 'FungibleItemsHaveNoId' | 'FungibleItemsDontHaveData' | 'FungibleDisallowsNesting' | 'SettingPropertiesNotAllowed' | 'SettingAllowanceForAllNotAllowed' | 'FungibleTokensAreAlwaysValid'; } - /** @name PalletRefungibleError (478) */ + /** @name PalletRefungibleError (507) */ interface PalletRefungibleError extends Enum { readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean; readonly isWrongRefungiblePieces: boolean; @@ -3712,19 +3918,19 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RepartitionWhileNotOwningAllPieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed'; } - /** @name PalletNonfungibleItemData (479) */ + /** @name PalletNonfungibleItemData (508) */ interface PalletNonfungibleItemData extends Struct { readonly owner: PalletEvmAccountBasicCrossAccountIdRepr; } - /** @name UpDataStructsPropertyScope (481) */ + /** @name UpDataStructsPropertyScope (510) */ interface UpDataStructsPropertyScope extends Enum { readonly isNone: boolean; readonly isRmrk: boolean; readonly type: 'None' | 'Rmrk'; } - /** @name PalletNonfungibleError (484) */ + /** @name PalletNonfungibleError (513) */ interface PalletNonfungibleError extends Enum { readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean; readonly isNonfungibleItemsHaveNoAmount: boolean; @@ -3732,7 +3938,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount' | 'CantBurnNftWithChildren'; } - /** @name PalletStructureError (485) */ + /** @name PalletStructureError (514) */ interface PalletStructureError extends Enum { readonly isOuroborosDetected: boolean; readonly isDepthLimit: boolean; @@ -3742,7 +3948,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'OuroborosDetected' | 'DepthLimit' | 'BreadthLimit' | 'TokenNotFound' | 'CantNestTokenUnderCollection'; } - /** @name PalletAppPromotionError (490) */ + /** @name PalletAppPromotionError (519) */ interface PalletAppPromotionError extends Enum { readonly isAdminNotSet: boolean; readonly isNoPermission: boolean; @@ -3754,7 +3960,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AdminNotSet' | 'NoPermission' | 'NotSufficientFunds' | 'PendingForBlockOverflow' | 'SponsorNotSet' | 'IncorrectLockedBalanceOperation' | 'InsufficientStakedBalance'; } - /** @name PalletForeignAssetsModuleError (491) */ + /** @name PalletForeignAssetsModuleError (520) */ interface PalletForeignAssetsModuleError extends Enum { readonly isBadLocation: boolean; readonly isMultiLocationExisted: boolean; @@ -3763,7 +3969,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'BadLocation' | 'MultiLocationExisted' | 'AssetIdNotExists' | 'AssetIdExisted'; } - /** @name PalletEvmError (493) */ + /** @name PalletEvmError (522) */ interface PalletEvmError extends Enum { readonly isBalanceLow: boolean; readonly isFeeOverflow: boolean; @@ -3779,7 +3985,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce' | 'GasLimitTooLow' | 'GasLimitTooHigh' | 'Undefined' | 'Reentrancy' | 'TransactionMustComeFromEOA'; } - /** @name FpRpcTransactionStatus (496) */ + /** @name FpRpcTransactionStatus (525) */ interface FpRpcTransactionStatus extends Struct { readonly transactionHash: H256; readonly transactionIndex: u32; @@ -3790,10 +3996,10 @@ declare module '@polkadot/types/lookup' { readonly logsBloom: EthbloomBloom; } - /** @name EthbloomBloom (498) */ + /** @name EthbloomBloom (527) */ interface EthbloomBloom extends U8aFixed {} - /** @name EthereumReceiptReceiptV3 (500) */ + /** @name EthereumReceiptReceiptV3 (529) */ interface EthereumReceiptReceiptV3 extends Enum { readonly isLegacy: boolean; readonly asLegacy: EthereumReceiptEip658ReceiptData; @@ -3804,7 +4010,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Legacy' | 'Eip2930' | 'Eip1559'; } - /** @name EthereumReceiptEip658ReceiptData (501) */ + /** @name EthereumReceiptEip658ReceiptData (530) */ interface EthereumReceiptEip658ReceiptData extends Struct { readonly statusCode: u8; readonly usedGas: U256; @@ -3812,14 +4018,14 @@ declare module '@polkadot/types/lookup' { readonly logs: Vec; } - /** @name EthereumBlock (502) */ + /** @name EthereumBlock (531) */ interface EthereumBlock extends Struct { readonly header: EthereumHeader; readonly transactions: Vec; readonly ommers: Vec; } - /** @name EthereumHeader (503) */ + /** @name EthereumHeader (532) */ interface EthereumHeader extends Struct { readonly parentHash: H256; readonly ommersHash: H256; @@ -3838,24 +4044,24 @@ declare module '@polkadot/types/lookup' { readonly nonce: EthereumTypesHashH64; } - /** @name EthereumTypesHashH64 (504) */ + /** @name EthereumTypesHashH64 (533) */ interface EthereumTypesHashH64 extends U8aFixed {} - /** @name PalletEthereumError (509) */ + /** @name PalletEthereumError (538) */ interface PalletEthereumError extends Enum { readonly isInvalidSignature: boolean; readonly isPreLogExists: boolean; readonly type: 'InvalidSignature' | 'PreLogExists'; } - /** @name PalletEvmCoderSubstrateError (510) */ + /** @name PalletEvmCoderSubstrateError (539) */ interface PalletEvmCoderSubstrateError extends Enum { readonly isOutOfGas: boolean; readonly isOutOfFund: boolean; readonly type: 'OutOfGas' | 'OutOfFund'; } - /** @name UpDataStructsSponsorshipStateBasicCrossAccountIdRepr (511) */ + /** @name UpDataStructsSponsorshipStateBasicCrossAccountIdRepr (540) */ interface UpDataStructsSponsorshipStateBasicCrossAccountIdRepr extends Enum { readonly isDisabled: boolean; readonly isUnconfirmed: boolean; @@ -3865,7 +4071,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed'; } - /** @name PalletEvmContractHelpersSponsoringModeT (512) */ + /** @name PalletEvmContractHelpersSponsoringModeT (541) */ interface PalletEvmContractHelpersSponsoringModeT extends Enum { readonly isDisabled: boolean; readonly isAllowlisted: boolean; @@ -3873,7 +4079,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Disabled' | 'Allowlisted' | 'Generous'; } - /** @name PalletEvmContractHelpersError (518) */ + /** @name PalletEvmContractHelpersError (547) */ interface PalletEvmContractHelpersError extends Enum { readonly isNoPermission: boolean; readonly isNoPendingSponsor: boolean; @@ -3881,7 +4087,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NoPermission' | 'NoPendingSponsor' | 'TooManyMethodsHaveSponsoredLimit'; } - /** @name PalletEvmMigrationError (519) */ + /** @name PalletEvmMigrationError (548) */ interface PalletEvmMigrationError extends Enum { readonly isAccountNotEmpty: boolean; readonly isAccountIsNotMigrating: boolean; @@ -3889,17 +4095,17 @@ declare module '@polkadot/types/lookup' { readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating' | 'BadEvent'; } - /** @name PalletMaintenanceError (520) */ + /** @name PalletMaintenanceError (549) */ type PalletMaintenanceError = Null; - /** @name PalletTestUtilsError (521) */ + /** @name PalletTestUtilsError (550) */ interface PalletTestUtilsError extends Enum { readonly isTestPalletDisabled: boolean; readonly isTriggerRollback: boolean; readonly type: 'TestPalletDisabled' | 'TriggerRollback'; } - /** @name SpRuntimeMultiSignature (523) */ + /** @name SpRuntimeMultiSignature (552) */ interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -3910,43 +4116,43 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpCoreEd25519Signature (524) */ + /** @name SpCoreEd25519Signature (553) */ interface SpCoreEd25519Signature extends U8aFixed {} - /** @name SpCoreSr25519Signature (526) */ + /** @name SpCoreSr25519Signature (555) */ interface SpCoreSr25519Signature extends U8aFixed {} - /** @name SpCoreEcdsaSignature (527) */ + /** @name SpCoreEcdsaSignature (556) */ interface SpCoreEcdsaSignature extends U8aFixed {} - /** @name FrameSystemExtensionsCheckSpecVersion (530) */ + /** @name FrameSystemExtensionsCheckSpecVersion (559) */ type FrameSystemExtensionsCheckSpecVersion = Null; - /** @name FrameSystemExtensionsCheckTxVersion (531) */ + /** @name FrameSystemExtensionsCheckTxVersion (560) */ type FrameSystemExtensionsCheckTxVersion = Null; - /** @name FrameSystemExtensionsCheckGenesis (532) */ + /** @name FrameSystemExtensionsCheckGenesis (561) */ type FrameSystemExtensionsCheckGenesis = Null; - /** @name FrameSystemExtensionsCheckNonce (535) */ + /** @name FrameSystemExtensionsCheckNonce (564) */ interface FrameSystemExtensionsCheckNonce extends Compact {} - /** @name FrameSystemExtensionsCheckWeight (536) */ + /** @name FrameSystemExtensionsCheckWeight (565) */ type FrameSystemExtensionsCheckWeight = Null; - /** @name OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance (537) */ + /** @name OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance (566) */ type OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance = Null; - /** @name OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls (538) */ + /** @name OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls (567) */ type OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls = Null; - /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (539) */ + /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (568) */ interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact {} - /** @name OpalRuntimeRuntime (540) */ + /** @name OpalRuntimeRuntime (569) */ type OpalRuntimeRuntime = Null; - /** @name PalletEthereumFakeTransactionFinalizer (541) */ + /** @name PalletEthereumFakeTransactionFinalizer (570) */ type PalletEthereumFakeTransactionFinalizer = Null; } // declare module diff --git a/tests/src/interfaces/types.ts b/tests/src/interfaces/types.ts index 7f7037021a..22cceb98d4 100644 --- a/tests/src/interfaces/types.ts +++ b/tests/src/interfaces/types.ts @@ -1,7 +1,7 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -export * from './unique/types'; -export * from './appPromotion/types'; -export * from './povinfo/types'; -export * from './default/types'; +export * from './appPromotion/types.js'; +export * from './default/types.js'; +export * from './povinfo/types.js'; +export * from './unique/types.js'; diff --git a/tests/src/interfaces/unique/index.ts b/tests/src/interfaces/unique/index.ts index 2d307291c3..7f1de782f7 100644 --- a/tests/src/interfaces/unique/index.ts +++ b/tests/src/interfaces/unique/index.ts @@ -1,4 +1,4 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -export * from './types'; +export * from './types.js'; diff --git a/tests/src/limits.test.ts b/tests/src/limits.test.ts index bcd5995465..5afebee872 100644 --- a/tests/src/limits.test.ts +++ b/tests/src/limits.test.ts @@ -22,7 +22,7 @@ describe('Number of tokens per address (NFT)', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); @@ -60,7 +60,7 @@ describe('Number of tokens per address (ReFungible)', () => { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); @@ -292,7 +292,7 @@ describe('Collection zero limits (NFT)', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); @@ -333,7 +333,7 @@ describe('Collection zero limits (Fungible)', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); @@ -366,7 +366,7 @@ describe('Collection zero limits (ReFungible)', () => { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([10n, 10n, 10n], donor); }); }); @@ -404,7 +404,7 @@ describe('Effective collection limits (NFT)', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); diff --git a/tests/src/maintenance.seqtest.ts b/tests/src/maintenance.seqtest.ts index 1b63ee0bb4..55c78be199 100644 --- a/tests/src/maintenance.seqtest.ts +++ b/tests/src/maintenance.seqtest.ts @@ -33,7 +33,7 @@ describe('Integration Test: Maintenance Functionality', () => { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.Maintenance]); superuser = await privateKey('//Alice'); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [bob] = await helper.arrange.createAccounts([10000n], donor); }); diff --git a/tests/src/nesting/collectionProperties.seqtest.ts b/tests/src/nesting/collectionProperties.seqtest.ts index 1f42113c41..4d673f9b24 100644 --- a/tests/src/nesting/collectionProperties.seqtest.ts +++ b/tests/src/nesting/collectionProperties.seqtest.ts @@ -24,7 +24,7 @@ describe('Integration Test: Collection Properties with sudo', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { superuser = await privateKey('//Alice'); - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); diff --git a/tests/src/nesting/collectionProperties.test.ts b/tests/src/nesting/collectionProperties.test.ts index 924375808f..1b30999af9 100644 --- a/tests/src/nesting/collectionProperties.test.ts +++ b/tests/src/nesting/collectionProperties.test.ts @@ -23,7 +23,7 @@ describe('Integration Test: Collection Properties', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([200n, 10n], donor); }); }); @@ -206,7 +206,7 @@ describe('Negative Integration Test: Collection Properties', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([1000n, 100n], donor); }); }); diff --git a/tests/src/nesting/graphs.test.ts b/tests/src/nesting/graphs.test.ts index d7c1a4010b..bbaf53818f 100644 --- a/tests/src/nesting/graphs.test.ts +++ b/tests/src/nesting/graphs.test.ts @@ -45,7 +45,7 @@ describe('Graphs', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([10n], donor); }); }); diff --git a/tests/src/nesting/propertyPermissions.test.ts b/tests/src/nesting/propertyPermissions.test.ts index 4ad305a82f..99bb2825f8 100644 --- a/tests/src/nesting/propertyPermissions.test.ts +++ b/tests/src/nesting/propertyPermissions.test.ts @@ -24,7 +24,7 @@ describe('Integration Test: Access Rights to Token Properties', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor); }); }); @@ -87,7 +87,7 @@ describe('Negative Integration Test: Access Rights to Token Properties', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor); }); }); @@ -195,4 +195,4 @@ describe('Negative Integration Test: Access Rights to Token Properties', () => { itSub.ifWithPallets('Prevents adding properties with invalid names (ReFungible)', [Pallets.ReFungible], async ({helper}) => { await testPreventsAddingPropertiesWithInvalidNames(await helper.rft.mintCollection(alice)); }); -}); \ No newline at end of file +}); diff --git a/tests/src/nesting/tokenProperties.seqtest.ts b/tests/src/nesting/tokenProperties.seqtest.ts index 5590683d7e..6b113fa4dd 100644 --- a/tests/src/nesting/tokenProperties.seqtest.ts +++ b/tests/src/nesting/tokenProperties.seqtest.ts @@ -24,7 +24,7 @@ describe('Integration Test: Token Properties with sudo', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { superuser = await privateKey('//Alice'); - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([100n], donor); }); }); diff --git a/tests/src/nesting/tokenProperties.test.ts b/tests/src/nesting/tokenProperties.test.ts index 19a489caff..a14dc21631 100644 --- a/tests/src/nesting/tokenProperties.test.ts +++ b/tests/src/nesting/tokenProperties.test.ts @@ -27,7 +27,7 @@ describe('Integration Test: Token Properties', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([200n, 100n, 100n], donor); }); @@ -459,7 +459,7 @@ describe('Negative Integration Test: Token Properties', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); let dave: IKeyringPair; [alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor); @@ -702,7 +702,7 @@ describe('ReFungible token properties permissions tests', () => { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); diff --git a/tests/src/nesting/unnest.test.ts b/tests/src/nesting/unnest.test.ts index f9310387c3..4191c36672 100644 --- a/tests/src/nesting/unnest.test.ts +++ b/tests/src/nesting/unnest.test.ts @@ -25,7 +25,7 @@ describe('Integration Test: Unnesting', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([200n, 50n, 50n], donor); }); }); @@ -276,7 +276,7 @@ describe('Negative Test: Unnesting', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor); }); }); diff --git a/tests/src/nextSponsoring.test.ts b/tests/src/nextSponsoring.test.ts index 2621c92389..7d3699953a 100644 --- a/tests/src/nextSponsoring.test.ts +++ b/tests/src/nextSponsoring.test.ts @@ -25,7 +25,7 @@ describe('Integration Test getNextSponsored(collection_id, owner, item_id):', () before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor); }); }); diff --git a/tests/src/refungible.test.ts b/tests/src/refungible.test.ts index c143b5701e..62e8fdb7d6 100644 --- a/tests/src/refungible.test.ts +++ b/tests/src/refungible.test.ts @@ -28,7 +28,7 @@ describe('integration test: Refungible functionality:', () => { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor); }); }); diff --git a/tests/src/removeCollectionAdmin.test.ts b/tests/src/removeCollectionAdmin.test.ts index 6755b71c4c..ee6394609f 100644 --- a/tests/src/removeCollectionAdmin.test.ts +++ b/tests/src/removeCollectionAdmin.test.ts @@ -23,7 +23,7 @@ describe('Integration Test removeCollectionAdmin(collection_id, account_id):', ( before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor); }); }); @@ -62,7 +62,7 @@ describe('Negative Integration Test removeCollectionAdmin(collection_id, account before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor); }); }); diff --git a/tests/src/removeCollectionSponsor.test.ts b/tests/src/removeCollectionSponsor.test.ts index 2ae8533c77..f02470e4f0 100644 --- a/tests/src/removeCollectionSponsor.test.ts +++ b/tests/src/removeCollectionSponsor.test.ts @@ -25,7 +25,7 @@ describe('integration test: ext. removeCollectionSponsor():', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor); }); }); @@ -85,7 +85,7 @@ describe('(!negative test!) integration test: ext. removeCollectionSponsor():', before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor); }); }); diff --git a/tests/src/rpc.test.ts b/tests/src/rpc.test.ts index b5e02f4d50..187eddd12a 100644 --- a/tests/src/rpc.test.ts +++ b/tests/src/rpc.test.ts @@ -25,7 +25,7 @@ describe('integration test: RPC methods', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor); }); }); @@ -65,4 +65,4 @@ describe('integration test: RPC methods', () => { expect(await collection.transfer(alice, {Substrate: eleven.address}, 10n)).to.be.true; expect((await helper.callRpc('api.rpc.unique.tokenOwners', [collection.collectionId, 0])).length).to.be.equal(10); }); -}); \ No newline at end of file +}); diff --git a/tests/src/scheduler.seqtest.ts b/tests/src/scheduler.seqtest.ts index ba25536db8..8d8c397fb1 100644 --- a/tests/src/scheduler.seqtest.ts +++ b/tests/src/scheduler.seqtest.ts @@ -29,7 +29,7 @@ describe('Scheduling token and balance transfers', () => { requirePalletsOrSkip(this, helper, [Pallets.Scheduler]); superuser = await privateKey('//Alice'); - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); await helper.testUtils.enable(); @@ -575,7 +575,7 @@ describe('Negative Test: Scheduling', () => { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.Scheduler]); - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); await helper.testUtils.enable(); diff --git a/tests/src/setCollectionLimits.test.ts b/tests/src/setCollectionLimits.test.ts index 1ea4c1e7b6..213aa58ab9 100644 --- a/tests/src/setCollectionLimits.test.ts +++ b/tests/src/setCollectionLimits.test.ts @@ -29,7 +29,7 @@ describe('setCollectionLimits positive', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor); }); }); @@ -104,7 +104,7 @@ describe('setCollectionLimits negative', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([20n, 10n], donor); }); }); diff --git a/tests/src/setCollectionSponsor.test.ts b/tests/src/setCollectionSponsor.test.ts index e8f82de4a3..1efa715736 100644 --- a/tests/src/setCollectionSponsor.test.ts +++ b/tests/src/setCollectionSponsor.test.ts @@ -24,7 +24,7 @@ describe('integration test: ext. setCollectionSponsor():', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor); }); }); @@ -93,7 +93,7 @@ describe('(!negative test!) integration test: ext. setCollectionSponsor():', () before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([10n, 5n], donor); }); }); diff --git a/tests/src/setPermissions.test.ts b/tests/src/setPermissions.test.ts index 27c34474e3..ba6eb44aa5 100644 --- a/tests/src/setPermissions.test.ts +++ b/tests/src/setPermissions.test.ts @@ -23,7 +23,7 @@ describe('Integration Test: Set Permissions', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor); }); }); @@ -79,7 +79,7 @@ describe('Negative Integration Test: Set Permissions', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor); }); }); @@ -104,4 +104,4 @@ describe('Negative Integration Test: Set Permissions', () => { await expect(collection.setPermissions(bob, {access: 'AllowList', mintMode: true})) .to.be.rejectedWith(/common\.NoPermission/); }); -}); \ No newline at end of file +}); diff --git a/tests/src/sub/appPromotion/appPromotion.seqtest.ts b/tests/src/sub/appPromotion/appPromotion.seqtest.ts index 5fb203abfe..b0d3ae2b72 100644 --- a/tests/src/sub/appPromotion/appPromotion.seqtest.ts +++ b/tests/src/sub/appPromotion/appPromotion.seqtest.ts @@ -27,7 +27,7 @@ describe('App promotion', () => { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.AppPromotion]); superuser = await privateKey('//Alice'); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); palletAdmin = await privateKey('//PromotionAdmin'); const api = helper.getApi(); await helper.signTransaction(superuser, api.tx.sudo.sudo(api.tx.appPromotion.setAdminAddress({Substrate: palletAdmin.address}))); diff --git a/tests/src/sub/appPromotion/appPromotion.test.ts b/tests/src/sub/appPromotion/appPromotion.test.ts index e6f8a87166..d1ff0ce0a6 100644 --- a/tests/src/sub/appPromotion/appPromotion.test.ts +++ b/tests/src/sub/appPromotion/appPromotion.test.ts @@ -41,7 +41,7 @@ describe('App promotion', () => { before(async function () { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.AppPromotion]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); palletAddress = helper.arrange.calculatePalletAddress('appstake'); palletAdmin = await privateKey('//PromotionAdmin'); nominal = helper.balance.getOneTokenNominal(); diff --git a/tests/src/sub/nesting/admin.test.ts b/tests/src/sub/nesting/admin.test.ts index 537ef3fe3b..b943327f9d 100644 --- a/tests/src/sub/nesting/admin.test.ts +++ b/tests/src/sub/nesting/admin.test.ts @@ -24,7 +24,7 @@ describe('Collection admin', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([200n, 10n, 10n], donor); }); }); diff --git a/tests/src/sub/nesting/common.test.ts b/tests/src/sub/nesting/common.test.ts index 05d1c9c2a0..807e877feb 100644 --- a/tests/src/sub/nesting/common.test.ts +++ b/tests/src/sub/nesting/common.test.ts @@ -23,7 +23,7 @@ let bob: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); diff --git a/tests/src/sub/nesting/e2e.test.ts b/tests/src/sub/nesting/e2e.test.ts index 77f52d7fb0..0f6fb9c596 100644 --- a/tests/src/sub/nesting/e2e.test.ts +++ b/tests/src/sub/nesting/e2e.test.ts @@ -23,7 +23,7 @@ describe('Composite nesting tests', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor); }); }); diff --git a/tests/src/sub/nesting/nesting.negative.test.ts b/tests/src/sub/nesting/nesting.negative.test.ts index 588d885af9..c53e1d02f6 100644 --- a/tests/src/sub/nesting/nesting.negative.test.ts +++ b/tests/src/sub/nesting/nesting.negative.test.ts @@ -25,7 +25,7 @@ let charlie: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); diff --git a/tests/src/sub/nesting/refungible.test.ts b/tests/src/sub/nesting/refungible.test.ts index 87e3387d35..69742d00eb 100644 --- a/tests/src/sub/nesting/refungible.test.ts +++ b/tests/src/sub/nesting/refungible.test.ts @@ -22,7 +22,7 @@ let alice: IKeyringPair; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice] = await helper.arrange.createAccounts([200n], donor); }); }); @@ -57,4 +57,4 @@ itSub.ifWithPallets('ReFungible: getTopmostOwner works correctly with Nesting', await rft.transferFrom(alice, nft.nestingAccount(), {Substrate: alice.address}, 70n); expect(await rft.getTopmostOwner()).deep.equal({Substrate: alice.address}); -}); \ No newline at end of file +}); diff --git a/tests/src/sub/nesting/unnesting.negative.test.ts b/tests/src/sub/nesting/unnesting.negative.test.ts index 482ca7333d..20d167c831 100644 --- a/tests/src/sub/nesting/unnesting.negative.test.ts +++ b/tests/src/sub/nesting/unnesting.negative.test.ts @@ -23,7 +23,7 @@ describe('Negative Test: Unnesting', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 50n], donor); }); }); diff --git a/tests/src/sub/refungible/burn.test.ts b/tests/src/sub/refungible/burn.test.ts index e8f7ec0a85..f39d9ec632 100644 --- a/tests/src/sub/refungible/burn.test.ts +++ b/tests/src/sub/refungible/burn.test.ts @@ -26,7 +26,7 @@ describe('Refungible: burn', () => { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor); }); }); @@ -95,7 +95,7 @@ describe('Refungible: burn negative tests', () => { before(async function() { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor); }); }); diff --git a/tests/src/sub/refungible/nesting.test.ts b/tests/src/sub/refungible/nesting.test.ts index 72c704cb9a..545cbed6d3 100644 --- a/tests/src/sub/refungible/nesting.test.ts +++ b/tests/src/sub/refungible/nesting.test.ts @@ -24,7 +24,7 @@ describe('Refungible nesting', () => { before(async function() { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, charlie] = await helper.arrange.createAccounts([50n, 10n], donor); }); }); @@ -111,7 +111,7 @@ describe('Refungible nesting negative tests', () => { before(async function() { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 50n], donor); }); }); diff --git a/tests/src/sub/refungible/repartition.test.ts b/tests/src/sub/refungible/repartition.test.ts index fc6a15acb3..38028ac6f4 100644 --- a/tests/src/sub/refungible/repartition.test.ts +++ b/tests/src/sub/refungible/repartition.test.ts @@ -26,7 +26,7 @@ describe('integration test: Refungible functionality:', () => { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor); }); }); diff --git a/tests/src/sub/refungible/transfer.test.ts b/tests/src/sub/refungible/transfer.test.ts index fb9f9bb209..7ae35705c9 100644 --- a/tests/src/sub/refungible/transfer.test.ts +++ b/tests/src/sub/refungible/transfer.test.ts @@ -27,7 +27,7 @@ describe('Refungible transfer tests', () => { await usingPlaygrounds(async (helper, privateKey) => { requirePalletsOrSkip(this, helper, [Pallets.ReFungible]); - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor); }); }); @@ -70,4 +70,4 @@ describe('Refungible transfer tests', () => { expect(await tokenBob.getBalance({Substrate: bob.address})).to.eq(10n); expect(await tokenBob.getBalance({Substrate: charlie.address})).to.eq(0n); }); -}); \ No newline at end of file +}); diff --git a/tests/src/transfer.test.ts b/tests/src/transfer.test.ts index a3dd459903..0f4a97ae99 100644 --- a/tests/src/transfer.test.ts +++ b/tests/src/transfer.test.ts @@ -25,7 +25,7 @@ describe('Integration Test Transfer(recipient, collection_id, item_id, value)', before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor); }); }); @@ -117,7 +117,7 @@ describe('Negative Integration Test Transfer(recipient, collection_id, item_id, before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor); }); }); @@ -276,7 +276,7 @@ describe('Transfers to self (potentially over substrate-evm boundary)', () => { before(async function() { await usingEthPlaygrounds(async (_, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); }); }); diff --git a/tests/src/transferFrom.test.ts b/tests/src/transferFrom.test.ts index dbd5faf657..8676335e1b 100644 --- a/tests/src/transferFrom.test.ts +++ b/tests/src/transferFrom.test.ts @@ -24,7 +24,7 @@ describe('Integration Test transferFrom(from, recipient, collection_id, item_id, before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([20n, 10n, 10n], donor); }); }); @@ -91,7 +91,7 @@ describe('Negative Integration Test transferFrom(from, recipient, collection_id, before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - const donor = await privateKey({filename: __filename}); + const donor = await privateKey({url: import.meta.url}); [alice, bob, charlie] = await helper.arrange.createAccounts([50n, 10n, 10n], donor); }); }); diff --git a/tests/src/util/globalSetup.ts b/tests/src/util/globalSetup.ts index 784599c77e..7a504e3396 100644 --- a/tests/src/util/globalSetup.ts +++ b/tests/src/util/globalSetup.ts @@ -2,11 +2,13 @@ // SPDX-License-Identifier: Apache-2.0 import { - usingPlaygrounds, Pallets, DONOR_FUNDING, MINIMUM_DONOR_FUND, LOCKING_PERIOD, UNLOCKING_PERIOD, + usingPlaygrounds, Pallets, DONOR_FUNDING, MINIMUM_DONOR_FUND, LOCKING_PERIOD, UNLOCKING_PERIOD, makeNames, } from './index'; import * as path from 'path'; import {promises as fs} from 'fs'; +const {dirname} = makeNames(import.meta.url); + // This function should be called before running test suites. const globalSetup = async (): Promise => { await usingPlaygrounds(async (helper, privateKey) => { @@ -62,7 +64,7 @@ const fundFilenames = async () => { const oneToken = helper.balance.getOneTokenNominal(); const alice = await privateKey('//Alice'); const nonce = await helper.chain.getNonce(alice.address); - const filenames = await getFiles(path.resolve(__dirname, '..')); + const filenames = await getFiles(path.resolve(dirname, '..')); // batching is actually undesireable, it takes away the time while all the transactions actually succeed const batchSize = 300; diff --git a/tests/src/util/index.ts b/tests/src/util/index.ts index bc7eb33585..fdc71a5f1c 100644 --- a/tests/src/util/index.ts +++ b/tests/src/util/index.ts @@ -12,6 +12,8 @@ import config from '../config'; import {ChainHelperBase} from './playgrounds/unique'; import {ILogger} from './playgrounds/types'; import {DevUniqueHelper, SilentLogger, SilentConsole, DevMoonbeamHelper, DevMoonriverHelper, DevAcalaHelper, DevKaruraHelper, DevRelayHelper, DevWestmintHelper, DevStatemineHelper, DevStatemintHelper} from './playgrounds/unique.dev'; +import {dirname} from 'path'; +import {fileURLToPath} from 'url'; chai.use(chaiAsPromised); chai.use(chaiSubset); @@ -25,7 +27,7 @@ export const getTestSeed = (filename: string) => { return `//Alice+${getTestHash(filename)}`; }; -async function usingPlaygroundsGeneral(helperType: new(logger: ILogger) => T, url: string, code: (helper: T, privateKey: (seed: string | {filename: string, ignoreFundsPresence?: boolean}) => Promise) => Promise) { +async function usingPlaygroundsGeneral(helperType: new(logger: ILogger) => T, url: string, code: (helper: T, privateKey: (seed: string | {filename?: string, url?: string, ignoreFundsPresence?: boolean}) => Promise) => Promise) { const silentConsole = new SilentConsole(); silentConsole.enable(); @@ -34,20 +36,26 @@ async function usingPlaygroundsGeneral(helperType: ne try { await helper.connect(url); const ss58Format = helper.chain.getChainProperties().ss58Format; - const privateKey = async (seed: string | {filename: string, ignoreFundsPresence?: boolean}) => { + const privateKey = async (seed: string | {filename?: string, url?: string, ignoreFundsPresence?: boolean}) => { if (typeof seed === 'string') { return helper.util.fromSeed(seed, ss58Format); } - else { - const actualSeed = getTestSeed(seed.filename); - let account = helper.util.fromSeed(actualSeed, ss58Format); - // here's to hoping that no - if (!seed.ignoreFundsPresence && ((helper as any)['balance'] == undefined || await (helper as any).balance.getSubstrate(account.address) < MINIMUM_DONOR_FUND)) { - console.warn(`${path.basename(seed.filename)}: Not enough funds present on the filename account. Using the default one as the donor instead.`); - account = helper.util.fromSeed('//Alice', ss58Format); - } - return account; + if (seed.url) { + const {filename} = makeNames(seed.url); + seed.filename = filename; + } else if (seed.filename) { + // Pass + } else { + throw new Error('no url nor filename set'); } + const actualSeed = getTestSeed(seed.filename); + let account = helper.util.fromSeed(actualSeed, ss58Format); + // here's to hoping that no + if (!seed.ignoreFundsPresence && ((helper as any)['balance'] == undefined || await (helper as any).balance.getSubstrate(account.address) < MINIMUM_DONOR_FUND)) { + console.warn(`${path.basename(seed.filename)}: Not enough funds present on the filename account. Using the default one as the donor instead.`); + account = helper.util.fromSeed('//Alice', ss58Format); + } + return account; }; await code(helper, privateKey); } @@ -57,7 +65,7 @@ async function usingPlaygroundsGeneral(helperType: ne } } -export const usingPlaygrounds = (code: (helper: DevUniqueHelper, privateKey: (seed: string | {filename: string, ignoreFundsPresence?: boolean}) => Promise) => Promise, url: string = config.substrateUrl) => { +export const usingPlaygrounds = (code: (helper: DevUniqueHelper, privateKey: (seed: string | {filename?: string, url?: string, ignoreFundsPresence?: boolean}) => Promise) => Promise, url: string = config.substrateUrl) => { return usingPlaygroundsGeneral(DevUniqueHelper, url, code); }; @@ -199,3 +207,11 @@ export function sizeOfEncodedStr(v: string) { export function sizeOfProperty(prop: {key: string, value: string}) { return sizeOfEncodedStr(prop.key) + sizeOfEncodedStr(prop.value); } + +export function makeNames(url: string) { + const filename = fileURLToPath(url); + return { + filename, + dirname: dirname(filename), + }; +} diff --git a/tests/src/vesting.test.ts b/tests/src/vesting.test.ts index 9b36f0945d..63bc90c63b 100644 --- a/tests/src/vesting.test.ts +++ b/tests/src/vesting.test.ts @@ -23,7 +23,7 @@ describe('Vesting', () => { before(async () => { await usingPlaygrounds(async (helper, privateKey) => { - donor = await privateKey({filename: __filename}); + donor = await privateKey({url: import.meta.url}); nominal = helper.balance.getOneTokenNominal(); }); }); From 6e54658cad7de1daf3b3bb5e9377bc1765f67152 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 29 Mar 2023 14:45:24 +0200 Subject: [PATCH 047/103] test: migrate readyness script to es modules --- tests/scripts/readyness.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/scripts/readyness.js b/tests/scripts/readyness.js index 3bf5b3313d..ec9213afb3 100644 --- a/tests/scripts/readyness.js +++ b/tests/scripts/readyness.js @@ -1,4 +1,4 @@ -const { ApiPromise, WsProvider } = require('@polkadot/api'); +import { ApiPromise, WsProvider } from '@polkadot/api'; const connect = async () => { const wsEndpoint = 'ws://127.0.0.1:9944'; From 67556b04a04d9344e8208925343d19ceaa669ade Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 29 Mar 2023 22:17:48 +0200 Subject: [PATCH 048/103] fix: actualize xcm .env --- .env | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.env b/.env index 31581eab23..b5984bc0d4 100644 --- a/.env +++ b/.env @@ -4,21 +4,21 @@ POLKADOT_LAUNCH_BRANCH=unique-network RELAY_CHAIN_TYPE=westend POLKADOT_MAINNET_BRANCH=release-v0.9.36 -STATEMINT_BUILD_BRANCH=release-parachains-v9360 +STATEMINT_BUILD_BRANCH=release-parachains-v9370 ACALA_BUILD_BRANCH=2.12.0 -MOONBEAM_BUILD_BRANCH=runtime-2000 +MOONBEAM_BUILD_BRANCH=runtime-2100 UNIQUE_MAINNET_BRANCH=release-v930033-fix-gas-price UNIQUE_REPLICA_FROM=wss://ws.unique.network:443 KUSAMA_MAINNET_BRANCH=release-v0.9.37 -STATEMINE_BUILD_BRANCH=release-parachains-v9360 -KARURA_BUILD_BRANCH=release-karura-2.12.0 -MOONRIVER_BUILD_BRANCH=runtime-2100 +STATEMINE_BUILD_BRANCH=release-parachains-v9370 +KARURA_BUILD_BRANCH=release-karura-2.15.0 +MOONRIVER_BUILD_BRANCH=runtime-2201 QUARTZ_MAINNET_BRANCH=release-v930034-fix-gas-price QUARTZ_REPLICA_FROM=wss://ws-quartz.unique.network:443 UNIQUEWEST_MAINNET_BRANCH=release-v0.9.36 -WESTMINT_BUILD_BRANCH=parachains-v9370 +WESTMINT_BUILD_BRANCH=release-parachains-v9382 OPAL_MAINNET_BRANCH=release-v937052 OPAL_REPLICA_FROM=wss://ws-opal.unique.network:443 From 3acaf7a50dd24010acd342b888fa1aad1c632a31 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 29 Mar 2023 22:20:54 +0200 Subject: [PATCH 049/103] fix: actualize xcm .env --- .env | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env b/.env index b5984bc0d4..c98d978d32 100644 --- a/.env +++ b/.env @@ -3,7 +3,7 @@ POLKADOT_BUILD_BRANCH=release-v0.9.37 POLKADOT_LAUNCH_BRANCH=unique-network RELAY_CHAIN_TYPE=westend -POLKADOT_MAINNET_BRANCH=release-v0.9.36 +POLKADOT_MAINNET_BRANCH=release-v0.9.37 STATEMINT_BUILD_BRANCH=release-parachains-v9370 ACALA_BUILD_BRANCH=2.12.0 MOONBEAM_BUILD_BRANCH=runtime-2100 @@ -17,7 +17,7 @@ MOONRIVER_BUILD_BRANCH=runtime-2201 QUARTZ_MAINNET_BRANCH=release-v930034-fix-gas-price QUARTZ_REPLICA_FROM=wss://ws-quartz.unique.network:443 -UNIQUEWEST_MAINNET_BRANCH=release-v0.9.36 +UNIQUEWEST_MAINNET_BRANCH=release-v0.9.40 WESTMINT_BUILD_BRANCH=release-parachains-v9382 OPAL_MAINNET_BRANCH=release-v937052 OPAL_REPLICA_FROM=wss://ws-opal.unique.network:443 From 81c388773ff52c36f50ed02e21c189626290b3ad Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 29 Mar 2023 22:31:19 +0200 Subject: [PATCH 050/103] fix: xcm v3 test (v2 locations) --- tests/src/xcm/xcmQuartz.test.ts | 28 ++++++++++++++-------------- tests/src/xcm/xcmUnique.test.ts | 28 ++++++++++++++-------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index 08eea87b42..082e5ae2d8 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -145,7 +145,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { // (fee for USDT XCM are paid in relay tokens) await usingRelayPlaygrounds(relayUrl, async (helper) => { const destination = { - V2: { + V1: { parents: 0, interior: {X1: { Parachain: QUARTZ_CHAIN, @@ -154,7 +154,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }}; const beneficiary = { - V2: { + V1: { parents: 0, interior: {X1: { AccountId32: { @@ -166,7 +166,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }; const assets = { - V2: [ + V1: [ { id: { Concrete: { @@ -191,7 +191,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { itSub('Should connect and send USDT from Statemine to Quartz', async ({helper}) => { await usingStateminePlaygrounds(statemineUrl, async (helper) => { const dest = { - V2: { + V1: { parents: 1, interior: {X1: { Parachain: QUARTZ_CHAIN, @@ -200,7 +200,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }}; const beneficiary = { - V2: { + V1: { parents: 0, interior: {X1: { AccountId32: { @@ -212,7 +212,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }; const assets = { - V2: [ + V1: [ { id: { Concrete: { @@ -332,7 +332,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { await usingRelayPlaygrounds(relayUrl, async (helper) => { const destination = { - V2: { + V1: { parents: 0, interior: {X1: { Parachain: QUARTZ_CHAIN, @@ -341,7 +341,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }}; const beneficiary = { - V2: { + V1: { parents: 0, interior: {X1: { AccountId32: { @@ -353,7 +353,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }; const assets = { - V2: [ + V1: [ { id: { Concrete: { @@ -470,7 +470,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { await usingKaruraPlaygrounds(karuraUrl, async (helper) => { const destination = { - V2: { + V1: { parents: 1, interior: { X1: { @@ -580,7 +580,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { itSub('Should connect to Karura and send QTZ back', async ({helper}) => { await usingKaruraPlaygrounds(karuraUrl, async (helper) => { const destination = { - V2: { + V1: { parents: 1, interior: { X2: [ @@ -644,7 +644,7 @@ describeXCM('[XCM] Integration test: Quartz rejects non-native tokens', () => { itSub('Quartz rejects KAR tokens from Karura', async ({helper}) => { await usingKaruraPlaygrounds(karuraUrl, async (helper) => { const destination = { - V2: { + V1: { parents: 1, interior: { X2: [ @@ -905,7 +905,7 @@ describeXCM('[XCM] Integration test: Exchanging QTZ with Moonriver', () => { itSub('Should connect to Moonriver and send QTZ back', async ({helper}) => { await usingMoonriverPlaygrounds(moonriverUrl, async (helper) => { const asset = { - V2: { + V1: { id: { Concrete: { parents: 1, @@ -920,7 +920,7 @@ describeXCM('[XCM] Integration test: Exchanging QTZ with Moonriver', () => { }, }; const destination = { - V2: { + V1: { parents: 1, interior: { X2: [ diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index b203728986..0fd73eecd6 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -145,7 +145,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { // (fee for USDT XCM are paid in relay tokens) await usingRelayPlaygrounds(relayUrl, async (helper) => { const destination = { - V2: { + V1: { parents: 0, interior: {X1: { Parachain: UNIQUE_CHAIN, @@ -154,7 +154,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }}; const beneficiary = { - V2: { + V1: { parents: 0, interior: {X1: { AccountId32: { @@ -166,7 +166,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }; const assets = { - V2: [ + V1: [ { id: { Concrete: { @@ -191,7 +191,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { itSub('Should connect and send USDT from Statemint to Unique', async ({helper}) => { await usingStatemintPlaygrounds(statemintUrl, async (helper) => { const dest = { - V2: { + V1: { parents: 1, interior: {X1: { Parachain: UNIQUE_CHAIN, @@ -200,7 +200,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }}; const beneficiary = { - V2: { + V1: { parents: 0, interior: {X1: { AccountId32: { @@ -212,7 +212,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }; const assets = { - V2: [ + V1: [ { id: { Concrete: { @@ -332,7 +332,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { await usingRelayPlaygrounds(relayUrl, async (helper) => { const destination = { - V2: { + V1: { parents: 0, interior: {X1: { Parachain: UNIQUE_CHAIN, @@ -341,7 +341,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }}; const beneficiary = { - V2: { + V1: { parents: 0, interior: {X1: { AccountId32: { @@ -353,7 +353,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { }; const assets = { - V2: [ + V1: [ { id: { Concrete: { @@ -470,7 +470,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { await usingAcalaPlaygrounds(acalaUrl, async (helper) => { const destination = { - V2: { + V1: { parents: 1, interior: { X1: { @@ -581,7 +581,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { itSub('Should connect to Acala and send UNQ back', async ({helper}) => { await usingAcalaPlaygrounds(acalaUrl, async (helper) => { const destination = { - V2: { + V1: { parents: 1, interior: { X2: [ @@ -645,7 +645,7 @@ describeXCM('[XCM] Integration test: Unique rejects non-native tokens', () => { itSub('Unique rejects ACA tokens from Acala', async ({helper}) => { await usingAcalaPlaygrounds(acalaUrl, async (helper) => { const destination = { - V2: { + V1: { parents: 1, interior: { X2: [ @@ -907,7 +907,7 @@ describeXCM('[XCM] Integration test: Exchanging UNQ with Moonbeam', () => { itSub('Should connect to Moonbeam and send UNQ back', async ({helper}) => { await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => { const asset = { - V2: { + V1: { id: { Concrete: { parents: 1, @@ -922,7 +922,7 @@ describeXCM('[XCM] Integration test: Exchanging UNQ with Moonbeam', () => { }, }; const destination = { - V2: { + V1: { parents: 1, interior: { X2: [ From 9138477b4375c1606ae0fa3d9079e7e220f6ccc7 Mon Sep 17 00:00:00 2001 From: Konstantin Astakhov Date: Thu, 30 Mar 2023 18:03:21 +0700 Subject: [PATCH 051/103] fix relay version for different parachain --- .github/workflows/xcm.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/xcm.yml b/.github/workflows/xcm.yml index 0cf304053d..675c3c3763 100644 --- a/.github/workflows/xcm.yml +++ b/.github/workflows/xcm.yml @@ -40,9 +40,9 @@ jobs: id: create_matrix with: matrix: | - network {opal}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.WESTMINT_BUILD_BRANCH }}}, runtest {testXcmOpal} - network {quartz}, acala_version {${{ env.KARURA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONRIVER_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINE_BUILD_BRANCH }}}, runtest {testXcmQuartz} - network {unique}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINT_BUILD_BRANCH }}}, runtest {testXcmUnique} + network {opal}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.WESTMINT_BUILD_BRANCH }}}, runtest {testXcmOpal} + network {quartz}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, acala_version {${{ env.KARURA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONRIVER_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINE_BUILD_BRANCH }}}, runtest {testXcmQuartz} + network {unique}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINT_BUILD_BRANCH }}}, runtest {testXcmUnique} xcm-build: @@ -90,10 +90,10 @@ jobs: uses: cuchi/jinja2-action@v1.2.0 with: template: .docker/Dockerfile-polkadot.j2 - output_file: .docker/Dockerfile-polkadot.${{ env.POLKADOT_BUILD_BRANCH }}.yml + output_file: .docker/Dockerfile-polkadot.${{ matrix.relay_branch }}.yml variables: | RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} - POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} + POLKADOT_BUILD_BRANCH=${{ matrix.relay_branch }} - name: Check if the dockerhub repository contains the needed version POLKADOT run: | @@ -107,14 +107,14 @@ jobs: echo "POLKADOT TAGS:" echo $POLKADOT_TAGS # Check correct version POLKADOT and build it if it doesn't exist in POLKADOT TAGS - if [[ ${POLKADOT_TAGS[*]} =~ (^|[[:space:]])"${{ env.POLKADOT_BUILD_BRANCH }}"($|[[:space:]]) ]]; then + if [[ ${POLKADOT_TAGS[*]} =~ (^|[[:space:]])"${{ matrix.relay_branch }}"($|[[:space:]]) ]]; then echo "Repository has needed POLKADOT version"; - docker pull uniquenetwork/builder-polkadot:${{ env.POLKADOT_BUILD_BRANCH }} + docker pull uniquenetwork/builder-polkadot:${{ matrix.relay_branch }} else echo "Repository has not needed POLKADOT version, so build it"; - cd .docker/ && docker build --no-cache --file ./Dockerfile-polkadot.${{ env.POLKADOT_BUILD_BRANCH }}.yml --tag uniquenetwork/builder-polkadot:${{ env.POLKADOT_BUILD_BRANCH }} . + cd .docker/ && docker build --no-cache --file ./Dockerfile-polkadot.${{ matrix.relay_branch }}.yml --tag uniquenetwork/builder-polkadot:${{ matrix.relay_branch }} . echo "Push needed POLKADOT version to the repository"; - docker push uniquenetwork/builder-polkadot:${{ env.POLKADOT_BUILD_BRANCH }} + docker push uniquenetwork/builder-polkadot:${{ matrix.relay_branch }} fi shell: bash @@ -238,7 +238,7 @@ jobs: variables: | RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} NETWORK=${{ matrix.network }} - POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} + POLKADOT_BUILD_BRANCH=${{ matrix.relay_branch }} POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} BRANCH=${{ github.head_ref }} ACALA_BUILD_BRANCH=${{ matrix.acala_version }} From f618782d793bb94b06f1119e24a4938a635a0979 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Thu, 30 Mar 2023 13:08:12 +0200 Subject: [PATCH 052/103] fix: opal rococo stand --- .../additional/xcm-rococo/Dockerfile-xcm-opal-rococo.temp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.docker/additional/xcm-rococo/Dockerfile-xcm-opal-rococo.temp b/.docker/additional/xcm-rococo/Dockerfile-xcm-opal-rococo.temp index e4711b0ca5..7993d714e4 100644 --- a/.docker/additional/xcm-rococo/Dockerfile-xcm-opal-rococo.temp +++ b/.docker/additional/xcm-rococo/Dockerfile-xcm-opal-rococo.temp @@ -1,5 +1,5 @@ -FROM uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} as polkadot -FROM uniquenetwork/builder-cumulus:{{ STATEMINE_BUILD_BRANCH }} as cumulus +FROM uniquenetwork/builder-polkadot:{{ UNIQUEWEST_MAINNET_BRANCH }} as polkadot +FROM uniquenetwork/builder-cumulus:{{ WESTMINT_BUILD_BRANCH }} as cumulus # ===== Rust builder ===== FROM ubuntu:22.04 as rust-builder @@ -60,6 +60,7 @@ RUN export NVM_DIR="$HOME/.nvm" && \ yarn install COPY --from=builder-unique /unique_parachain/.docker/additional/xcm-rococo/launch-config-xcm-opal-rococo.json /polkadot-launch/launch-config.json +COPY --from=builder-unique /unique_parachain/.docker/xcm-config/5validators.jsonnet /polkadot-launch/5validators.jsonnet COPY --from=builder-unique /unique_parachain/target/release/unique-collator /unique-chain/target/release/ COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ From 5547313c35711ba3b059227c404087cf1df853e5 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Thu, 30 Mar 2023 16:18:37 +0200 Subject: [PATCH 053/103] fix: quartz/unique rococo stand --- .docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp | 2 +- .docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp b/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp index 17bacd6771..d28c943da6 100644 --- a/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp +++ b/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp @@ -1,4 +1,4 @@ -FROM uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} as polkadot +FROM uniquenetwork/builder-polkadot:{{ KUSAMA_MAINNET_BRANCH }} as polkadot FROM uniquenetwork/builder-moonbeam:{{ MOONRIVER_BUILD_BRANCH }} as moonbeam FROM uniquenetwork/builder-cumulus:{{ STATEMINE_BUILD_BRANCH }} as cumulus FROM uniquenetwork/builder-acala:{{ KARURA_BUILD_BRANCH }} as acala diff --git a/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp b/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp index b5db5a5a5b..3b1b66e3f7 100644 --- a/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp +++ b/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp @@ -1,4 +1,4 @@ -FROM uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} as polkadot +FROM uniquenetwork/builder-polkadot:{{ POLKADOT_MAINNET_BRANCH }} as polkadot FROM uniquenetwork/builder-moonbeam:{{ MOONBEAM_BUILD_BRANCH }} as moonbeam FROM uniquenetwork/builder-cumulus:{{ STATEMINT_BUILD_BRANCH }} as cumulus FROM uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} as acala From a21076b4238706eb9c7b6c722485f81acb5712e8 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Thu, 30 Mar 2023 16:19:18 +0200 Subject: [PATCH 054/103] fix: set safe xcm version in tests --- tests/src/util/playgrounds/unique.ts | 4 ++++ tests/src/xcm/xcmQuartz.test.ts | 21 ++++++++++++++++++--- tests/src/xcm/xcmUnique.test.ts | 21 ++++++++++++++++++--- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/tests/src/util/playgrounds/unique.ts b/tests/src/util/playgrounds/unique.ts index 5f5d26d768..04be60fa56 100644 --- a/tests/src/util/playgrounds/unique.ts +++ b/tests/src/util/playgrounds/unique.ts @@ -2951,6 +2951,10 @@ class XcmGroup extends HelperGroup { await this.helper.executeExtrinsic(signer, `api.tx.${this.palletName}.limitedReserveTransferAssets`, [destination, beneficiary, assets, feeAssetItem, weightLimit], true); } + async setSafeXcmVersion(signer: TSigner, version: number) { + await this.helper.executeExtrinsic(signer, `api.tx.${this.palletName}.forceDefaultXcmVersion`, [version], true); + } + async teleportAssets(signer: TSigner, destination: any, beneficiary: any, assets: any, feeAssetItem: number) { await this.helper.executeExtrinsic(signer, `api.tx.${this.palletName}.teleportAssets`, [destination, beneficiary, assets, feeAssetItem], true); } diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index 082e5ae2d8..f41bc6974f 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -49,6 +49,8 @@ const USDT_ASSET_METADATA_DESCRIPTION = 'USDT'; const USDT_ASSET_METADATA_MINIMAL_BALANCE = 1n; const USDT_ASSET_AMOUNT = 10_000_000_000_000_000_000_000_000n; +const SAFE_XCM_VERSION = 2; + describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { let alice: IKeyringPair; let bob: IKeyringPair; @@ -69,9 +71,12 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { before(async () => { - await usingPlaygrounds(async (_helper, privateKey) => { + await usingPlaygrounds(async (helper, privateKey) => { alice = await privateKey('//Alice'); bob = await privateKey('//Bob'); // sovereign account on Statemine(t) funds donor + + // Set the default version to wrap the first message to other chains. + await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); }); await usingRelayPlaygrounds(relayUrl, async (helper) => { @@ -314,7 +319,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { // the commission has been paid in parachain native token balanceQuartzFinal = await helper.balance.getSubstrate(alice.address); - console.log('[Quartz -> Statemine] transaction fees on Quartz: %s QTZ', helper.util.bigIntToDecimals(balanceQuartzFinal - balanceQuartzAfter)); + console.log('[Quartz -> Statemine] transaction fees on Quartz: %s QTZ', helper.util.bigIntToDecimals(balanceQuartzAfter - balanceQuartzFinal)); expect(balanceQuartzAfter > balanceQuartzFinal).to.be.true; await usingStateminePlaygrounds(statemineUrl, async (helper) => { @@ -466,6 +471,9 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { await usingPlaygrounds(async (helper, privateKey) => { alice = await privateKey('//Alice'); [randomAccount] = await helper.arrange.createAccounts([0n], alice); + + // Set the default version to wrap the first message to other chains. + await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); }); await usingKaruraPlaygrounds(karuraUrl, async (helper) => { @@ -636,8 +644,11 @@ describeXCM('[XCM] Integration test: Quartz rejects non-native tokens', () => { let alice: IKeyringPair; before(async () => { - await usingPlaygrounds(async (_helper, privateKey) => { + await usingPlaygrounds(async (helper, privateKey) => { alice = await privateKey('//Alice'); + + // Set the default version to wrap the first message to other chains. + await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); }); }); @@ -726,6 +737,10 @@ describeXCM('[XCM] Integration test: Exchanging QTZ with Moonriver', () => { [randomAccountQuartz] = await helper.arrange.createAccounts([0n], quartzDonor); balanceForeignQtzTokenInit = 0n; + + // Set the default version to wrap the first message to other chains. + const alice = quartzDonor; + await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); }); await usingMoonriverPlaygrounds(moonriverUrl, async (helper) => { diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index 0fd73eecd6..418330c8e9 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -49,6 +49,8 @@ const USDT_ASSET_METADATA_DESCRIPTION = 'USDT'; const USDT_ASSET_METADATA_MINIMAL_BALANCE = 1n; const USDT_ASSET_AMOUNT = 10_000_000_000_000_000_000_000_000n; +const SAFE_XCM_VERSION = 2; + describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { let alice: IKeyringPair; let bob: IKeyringPair; @@ -69,9 +71,12 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { before(async () => { - await usingPlaygrounds(async (_helper, privateKey) => { + await usingPlaygrounds(async (helper, privateKey) => { alice = await privateKey('//Alice'); bob = await privateKey('//Bob'); // sovereign account on Statemint funds donor + + // Set the default version to wrap the first message to other chains. + await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); }); await usingRelayPlaygrounds(relayUrl, async (helper) => { @@ -314,7 +319,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { // the commission has been paid in parachain native token balanceUniqueFinal = await helper.balance.getSubstrate(alice.address); - console.log('[Unique -> Statemint] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(balanceUniqueFinal - balanceUniqueAfter)); + console.log('[Unique -> Statemint] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(balanceUniqueAfter - balanceUniqueFinal)); expect(balanceUniqueAfter > balanceUniqueFinal).to.be.true; await usingStatemintPlaygrounds(statemintUrl, async (helper) => { @@ -466,6 +471,9 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { await usingPlaygrounds(async (helper, privateKey) => { alice = await privateKey('//Alice'); [randomAccount] = await helper.arrange.createAccounts([0n], alice); + + // Set the default version to wrap the first message to other chains. + await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); }); await usingAcalaPlaygrounds(acalaUrl, async (helper) => { @@ -637,8 +645,11 @@ describeXCM('[XCM] Integration test: Unique rejects non-native tokens', () => { let alice: IKeyringPair; before(async () => { - await usingPlaygrounds(async (_helper, privateKey) => { + await usingPlaygrounds(async (helper, privateKey) => { alice = await privateKey('//Alice'); + + // Set the default version to wrap the first message to other chains. + await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); }); }); @@ -727,6 +738,10 @@ describeXCM('[XCM] Integration test: Exchanging UNQ with Moonbeam', () => { [randomAccountUnique] = await helper.arrange.createAccounts([0n], uniqueDonor); balanceForeignUnqTokenInit = 0n; + + // Set the default version to wrap the first message to other chains. + const alice = uniqueDonor; + await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); }); await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => { From c562488d4cff2f52f6fb7a0eff64d8a9806feee5 Mon Sep 17 00:00:00 2001 From: Konstantin Astakhov Date: Mon, 27 Mar 2023 20:37:59 +0700 Subject: [PATCH 055/103] add astar parachain for xcm --- .docker/Dockerfile-astar.j2 | 40 +++++++++++++ .docker/Dockerfile-xcm.j2 | 2 + .docker/docker-compose.tmp-xcm-tests.j2 | 2 + .docker/xcm-config/6validators.jsonnet | 56 +++++++++++++++++++ .../xcm-config/launch-config-xcm-quartz.j2 | 44 ++++++++++++++- .../xcm-config/launch-config-xcm-unique.j2 | 54 +++++++++++++++--- .github/workflows/xcm.yml | 40 ++++++++++++- 7 files changed, 226 insertions(+), 12 deletions(-) create mode 100644 .docker/Dockerfile-astar.j2 create mode 100644 .docker/xcm-config/6validators.jsonnet diff --git a/.docker/Dockerfile-astar.j2 b/.docker/Dockerfile-astar.j2 new file mode 100644 index 0000000000..7d9fcf88a9 --- /dev/null +++ b/.docker/Dockerfile-astar.j2 @@ -0,0 +1,40 @@ +# ===== Rust builder ===== +FROM ubuntu:20.04 as rust-builder +LABEL maintainer="Unique.Network" + +ENV CARGO_HOME="/cargo-home" +ENV PATH="/cargo-home/bin:$PATH" +ENV TZ=UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update && \ + apt-get install -y curl cmake pkg-config libssl-dev git clang llvm libudev-dev protobuf-compiler && \ + apt-get clean && \ + rm -r /var/lib/apt/lists/* + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none + +RUN rustup toolchain uninstall $(rustup toolchain list) && \ + rustup toolchain install {{ RUST_TOOLCHAIN }} && \ + rustup default {{ RUST_TOOLCHAIN }} && \ + rustup target list --installed && \ + rustup show +RUN rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }} + +RUN mkdir /unique_parachain +WORKDIR /unique_parachain + +# ===== BUILD ACALA ===== +FROM rust-builder as builder-astar-bin + +WORKDIR /unique_parachain + +RUN git clone --recurse-submodules -b {{ ASTAR_BUILD_BRANCH }} --depth 1 https://github.com/AstarNetwork/Astar.git && \ + cd Astar && \ + cargo build --release + +# ===== BIN ====== + +FROM ubuntu:20.04 as builder-astar + +COPY --from=builder-astar-bin /unique_parachain/Astar/target/release/astar /unique_parachain/Astar/target/release/astar diff --git a/.docker/Dockerfile-xcm.j2 b/.docker/Dockerfile-xcm.j2 index cc0194a04e..c6f9951abf 100644 --- a/.docker/Dockerfile-xcm.j2 +++ b/.docker/Dockerfile-xcm.j2 @@ -57,6 +57,7 @@ COPY --from=uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} /unique_p COPY --from=uniquenetwork/builder-moonbeam:{{ MOONBEAM_BUILD_BRANCH }} /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/ COPY --from=uniquenetwork/builder-cumulus:{{ CUMULUS_BUILD_BRANCH }} /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus COPY --from=uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} /unique_parachain/Acala/target/production/acala /acala/target/release/ +COPY --from=uniquenetwork/builder-astar:{{ ASTAR_BUILD_BRANCH }} /unique_parachain/Astar/target/release/astar /astar/target/release/ COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/ EXPOSE 9844 @@ -65,6 +66,7 @@ EXPOSE 9944 EXPOSE 9946 EXPOSE 9947 EXPOSE 9948 +EXPOSE 9949 CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ diff --git a/.docker/docker-compose.tmp-xcm-tests.j2 b/.docker/docker-compose.tmp-xcm-tests.j2 index 7458da0db7..141f5a9f91 100644 --- a/.docker/docker-compose.tmp-xcm-tests.j2 +++ b/.docker/docker-compose.tmp-xcm-tests.j2 @@ -11,6 +11,7 @@ services: - 9946 - 9947 - 9948 + - 9949 ports: - 127.0.0.1:9844:9844 - 127.0.0.1:9933:9933 @@ -18,6 +19,7 @@ services: - 127.0.0.1:9946:9946 - 127.0.0.1:9947:9947 - 127.0.0.1:9948:9948 + - 127.0.0.1:9949:9949 logging: options: max-size: "1m" diff --git a/.docker/xcm-config/6validators.jsonnet b/.docker/xcm-config/6validators.jsonnet new file mode 100644 index 0000000000..25c4e23e0b --- /dev/null +++ b/.docker/xcm-config/6validators.jsonnet @@ -0,0 +1,56 @@ +function(spec) + spec { + genesis+: { + runtime+: { + staking+: { + validatorCount: 6, + invulnerables: [ + '5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY', + '5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc', + '5Ck5SLSHYac6WFt5UZRSsdJjwmpSZq85fd5TRNAdZQVzEAPT', + '5HKPmK9GYtE1PSLsS1qiYU9xQ9Si1NcEhdeCq9sw5bqu4ns8', + '5FCfAonRZgTFrTd9HREEyeJjDpT397KMzizE6T3DvebLFE7n', + '5CRmqmsiNFExV6VbdmPJViVxrWmkaXXvBrSX8oqBT8R9vmWk', + ], + stakers: [ + [ + '5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY', + '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY', + 100000000000000, + 'Validator', + ], + [ + '5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc', + '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty', + 100000000000000, + 'Validator', + ], + [ + '5Ck5SLSHYac6WFt5UZRSsdJjwmpSZq85fd5TRNAdZQVzEAPT', + '5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y', + 100000000000000, + 'Validator', + ], + [ + '5HKPmK9GYtE1PSLsS1qiYU9xQ9Si1NcEhdeCq9sw5bqu4ns8', + '5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy', + 100000000000000, + 'Validator', + ], + [ + '5FCfAonRZgTFrTd9HREEyeJjDpT397KMzizE6T3DvebLFE7n', + '5HGjWAeFDfFCWPsjFQdVV2Msvz2XtMktvgocEZcCj68kUMaw', + 100000000000000, + 'Validator', + ], + [ + '5CRmqmsiNFExV6VbdmPJViVxrWmkaXXvBrSX8oqBT8R9vmWk', + '5CiPPseXPECbkjWCa6MnjNokrgYjMqmKndv2rSnekmSK2DjL', + 100000000000000, + 'Validator', + ], + ], + }, + }, + }, + } \ No newline at end of file diff --git a/.docker/xcm-config/launch-config-xcm-quartz.j2 b/.docker/xcm-config/launch-config-xcm-quartz.j2 index 0ed14f0a52..c308cbccec 100644 --- a/.docker/xcm-config/launch-config-xcm-quartz.j2 +++ b/.docker/xcm-config/launch-config-xcm-quartz.j2 @@ -5,7 +5,7 @@ "chainInitializer": [ "chainql", "--tla-code=spec=import '${spec}'", - "5validators.jsonnet" + "6validators.jsonnet" ], "nodes": [ { @@ -62,6 +62,17 @@ "--unsafe-ws-external", "-lparachain::candidate_validation=debug" ] + }, + { + "name": "ferdie", + "wsPort": 9899, + "rpcPort": 9898, + "port": 30999, + "flags": [ + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lparachain::candidate_validation=debug" + ] } ], @@ -156,6 +167,23 @@ } ] } + { + "bin": "/astar/target/release/astar", + "id": "2007", + "chain": "astar-dev", + "balance": "1000000000000000000000000", + "nodes": [ + { + "wsPort": 9949, + "port": 31205, + "name": "alice", + "flags": [ + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + } + ] + } ], "simpleParachains": [], "hrmpChannels": [ @@ -194,7 +222,19 @@ "recipient": 2095, "maxCapacity": 8, "maxMessageSize": 512 - } + }, + { + "sender": 2007, + "recipient": 1000, + "maxCapacity": 8, + "maxMessageSize": 512 + }, + { + "sender": 1000, + "recipient": 2007, + "maxCapacity": 8, + "maxMessageSize": 512 + } ], "finalization": false } diff --git a/.docker/xcm-config/launch-config-xcm-unique.j2 b/.docker/xcm-config/launch-config-xcm-unique.j2 index be63882565..b5af0d9648 100644 --- a/.docker/xcm-config/launch-config-xcm-unique.j2 +++ b/.docker/xcm-config/launch-config-xcm-unique.j2 @@ -5,7 +5,7 @@ "chainInitializer": [ "chainql", "--tla-code=spec=import '${spec}'", - "5validators.jsonnet" + "6validators.jsonnet" ], "nodes": [ { @@ -62,7 +62,18 @@ "--unsafe-ws-external", "-lparachain::candidate_validation=debug" ] - } + }, + { + "name": "ferdie", + "wsPort": 9899, + "rpcPort": 9898, + "port": 30999, + "flags": [ + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lparachain::candidate_validation=debug" + ] + } ], "genesis": { @@ -93,7 +104,7 @@ "-lxcm=trace,parity_ws::handler=debug,jsonrpsee_core=trace,jsonrpsee-core=trace,jsonrpsee_ws_server=debug", "--unsafe-rpc-external", "--unsafe-ws-external" - ] + ] } ] }, @@ -115,7 +126,7 @@ "flags": [ "--unsafe-rpc-external", "--unsafe-ws-external" - ] + ] } ] }, @@ -133,7 +144,7 @@ "flags": [ "--unsafe-rpc-external", "--unsafe-ws-external", - "--", + "--", "--execution=wasm" ] } @@ -152,7 +163,24 @@ "flags": [ "--unsafe-rpc-external", "--unsafe-ws-external" - ] + ] + } + ] + }, + { + "bin": "/astar/target/release/astar", + "id": "2006", + "chain": "astar-dev", + "balance": "1000000000000000000000000", + "nodes": [ + { + "wsPort": 9949, + "port": 31205, + "name": "alice", + "flags": [ + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] } ] } @@ -194,7 +222,19 @@ "recipient": 2037, "maxCapacity": 8, "maxMessageSize": 512 - } + }, + { + "sender": 2006, + "recipient": 1000, + "maxCapacity": 8, + "maxMessageSize": 512 + }, + { + "sender": 1000, + "recipient": 2006, + "maxCapacity": 8, + "maxMessageSize": 512 + } ], "finalization": false } diff --git a/.github/workflows/xcm.yml b/.github/workflows/xcm.yml index 675c3c3763..7d467f2d07 100644 --- a/.github/workflows/xcm.yml +++ b/.github/workflows/xcm.yml @@ -41,8 +41,8 @@ jobs: with: matrix: | network {opal}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.WESTMINT_BUILD_BRANCH }}}, runtest {testXcmOpal} - network {quartz}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, acala_version {${{ env.KARURA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONRIVER_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINE_BUILD_BRANCH }}}, runtest {testXcmQuartz} - network {unique}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINT_BUILD_BRANCH }}}, runtest {testXcmUnique} + network {quartz}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, acala_version {${{ env.KARURA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONRIVER_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINE_BUILD_BRANCH }}}, astar_version {${{ env.SHIDEN_BUILD_BRANCH }}}, runtest {testXcmQuartz} + network {unique}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINT_BUILD_BRANCH }}}, astar_version {${{ env.ASTAR_BUILD_BRANCH }}}, runtest {testXcmUnique} xcm-build: @@ -184,7 +184,6 @@ jobs: fi shell: bash - # Check CUMULUS version and build it if it doesn't exist in repository - name: Generate ENV related extend Dockerfile file for CUMULUS uses: cuchi/jinja2-action@v1.2.0 @@ -218,6 +217,41 @@ jobs: fi shell: bash + + # Check ASTAR version and build it if it doesn't exist in repository + - name: Generate ENV related extend Dockerfile file for ASTAR + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/Dockerfile-astar.j2 + output_file: .docker/Dockerfile-astar.${{ matrix.astar_version }}.yml + variables: | + RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} + ASTAR_BUILD_BRANCH=${{ matrix.astar_version }} + + - name: Check if the dockerhub repository contains the needed MOONBEAM version + run: | + # aquire token + TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ secrets.CORE_DOCKERHUB_USERNAME }}'", "password": "'${{ secrets.CORE_DOCKERHUB_TOKEN }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token) + export TOKEN=$TOKEN + + # Get TAGS from DOCKERHUB repository + ASTAR_TAGS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/uniquenetwork/builder-astar/tags/?page_size=100 | jq -r '."results"[]["name"]') + # Show TAGS + echo "ASTAR TAGS:" + echo $ASTAR_TAGS + # Check correct version ASTAR and build it if it doesn't exist in ASTAR TAGS + if [[ ${ASTAR_TAGS[*]} =~ (^|[[:space:]])"${{ matrix.astar_version }}"($|[[:space:]]) ]]; then + echo "Repository has needed ASTAR version"; + docker pull uniquenetwork/builder-astar:${{ matrix.astar_version }} + else + echo "Repository has not needed ASTAR version, so build it"; + cd .docker/ && docker build --no-cache --file ./Dockerfile-astar.${{ matrix.astar_version }}.yml --tag uniquenetwork/builder-astar:${{ matrix.astar_version }} . + echo "Push needed ASTAR version to the repository"; + docker push uniquenetwork/builder-astar:${{ matrix.astar_version }} + fi + shell: bash + + - name: Generate ENV related extend launch-config file uses: cuchi/jinja2-action@v1.2.0 with: From 39f27b5da304984d37ddceb1820a8a85495eb27d Mon Sep 17 00:00:00 2001 From: Konstantin Astakhov Date: Mon, 27 Mar 2023 20:44:37 +0700 Subject: [PATCH 056/103] add env params for astar --- .env | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.env b/.env index c98d978d32..d1893c148c 100644 --- a/.env +++ b/.env @@ -7,6 +7,7 @@ POLKADOT_MAINNET_BRANCH=release-v0.9.37 STATEMINT_BUILD_BRANCH=release-parachains-v9370 ACALA_BUILD_BRANCH=2.12.0 MOONBEAM_BUILD_BRANCH=runtime-2100 +ASTAR_BUILD_BRANCH=v4.49.0 UNIQUE_MAINNET_BRANCH=release-v930033-fix-gas-price UNIQUE_REPLICA_FROM=wss://ws.unique.network:443 @@ -14,6 +15,7 @@ KUSAMA_MAINNET_BRANCH=release-v0.9.37 STATEMINE_BUILD_BRANCH=release-parachains-v9370 KARURA_BUILD_BRANCH=release-karura-2.15.0 MOONRIVER_BUILD_BRANCH=runtime-2201 +SHIDEN_BUILD_BRANCH=v4.49.0 QUARTZ_MAINNET_BRANCH=release-v930034-fix-gas-price QUARTZ_REPLICA_FROM=wss://ws-quartz.unique.network:443 From 155033b72fcf45604c2f8a9d4df92fc7e89b80c0 Mon Sep 17 00:00:00 2001 From: Konstantin Astakhov Date: Mon, 27 Mar 2023 22:31:19 +0700 Subject: [PATCH 057/103] fix path for astar parachain --- .docker/Dockerfile-acala.j2 | 2 +- .docker/Dockerfile-astar.j2 | 2 +- .docker/Dockerfile-xcm.j2 | 4 ++-- .github/workflows/xcm.yml | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile-acala.j2 b/.docker/Dockerfile-acala.j2 index 35db97247c..c8142baad9 100644 --- a/.docker/Dockerfile-acala.j2 +++ b/.docker/Dockerfile-acala.j2 @@ -38,4 +38,4 @@ RUN git clone -b {{ ACALA_BUILD_BRANCH }} --depth 1 https://github.com/AcalaNetw FROM ubuntu:22.04 as builder-acala -COPY --from=builder-acala-bin /unique_parachain/Acala/target/production/acala /unique_parachain/Acala/target/production/acala +COPY --from=builder-acala-bin /unique_parachain/Acala/target/production/acala /unique_parachain/acala/target/production/acala diff --git a/.docker/Dockerfile-astar.j2 b/.docker/Dockerfile-astar.j2 index 7d9fcf88a9..736cc6aa68 100644 --- a/.docker/Dockerfile-astar.j2 +++ b/.docker/Dockerfile-astar.j2 @@ -37,4 +37,4 @@ RUN git clone --recurse-submodules -b {{ ASTAR_BUILD_BRANCH }} --depth 1 https:/ FROM ubuntu:20.04 as builder-astar -COPY --from=builder-astar-bin /unique_parachain/Astar/target/release/astar /unique_parachain/Astar/target/release/astar +COPY --from=builder-astar-bin /unique_parachain/Astar/target/release/astar-collator /unique_parachain/astar/target/release/astar diff --git a/.docker/Dockerfile-xcm.j2 b/.docker/Dockerfile-xcm.j2 index c6f9951abf..6fdbe2e125 100644 --- a/.docker/Dockerfile-xcm.j2 +++ b/.docker/Dockerfile-xcm.j2 @@ -56,8 +56,8 @@ COPY --from=builder-unique /unique_parachain/unique-chain/target/release/unique- COPY --from=uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ COPY --from=uniquenetwork/builder-moonbeam:{{ MOONBEAM_BUILD_BRANCH }} /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/ COPY --from=uniquenetwork/builder-cumulus:{{ CUMULUS_BUILD_BRANCH }} /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus -COPY --from=uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} /unique_parachain/Acala/target/production/acala /acala/target/release/ -COPY --from=uniquenetwork/builder-astar:{{ ASTAR_BUILD_BRANCH }} /unique_parachain/Astar/target/release/astar /astar/target/release/ +COPY --from=uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} /unique_parachain/acala/target/production/acala /acala/target/release/ +COPY --from=uniquenetwork/builder-astar:{{ ASTAR_BUILD_BRANCH }} /unique_parachain/astar/target/release/astar /astar/target/release/ COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/ EXPOSE 9844 diff --git a/.github/workflows/xcm.yml b/.github/workflows/xcm.yml index 7d467f2d07..22984d3d78 100644 --- a/.github/workflows/xcm.yml +++ b/.github/workflows/xcm.yml @@ -18,7 +18,7 @@ jobs: name: Prepare execution matrix - runs-on: [XL] + runs-on: [self-hosted-ci] outputs: matrix: ${{ steps.create_matrix.outputs.matrix }} @@ -228,7 +228,7 @@ jobs: RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} ASTAR_BUILD_BRANCH=${{ matrix.astar_version }} - - name: Check if the dockerhub repository contains the needed MOONBEAM version + - name: Check if the dockerhub repository contains the needed ASTAR version run: | # aquire token TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ secrets.CORE_DOCKERHUB_USERNAME }}'", "password": "'${{ secrets.CORE_DOCKERHUB_TOKEN }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token) From 6ea26abea023465277ac393cc7c5af10e4122fde Mon Sep 17 00:00:00 2001 From: Konstantin Astakhov Date: Mon, 27 Mar 2023 22:49:21 +0700 Subject: [PATCH 058/103] fix for astar parachain --- .github/workflows/xcm.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/xcm.yml b/.github/workflows/xcm.yml index 22984d3d78..45fcaa8dd6 100644 --- a/.github/workflows/xcm.yml +++ b/.github/workflows/xcm.yml @@ -276,6 +276,7 @@ jobs: POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} BRANCH=${{ github.head_ref }} ACALA_BUILD_BRANCH=${{ matrix.acala_version }} + ASTAR_BUILD_BRANCH=${{ matrix.astar_version }} MOONBEAM_BUILD_BRANCH=${{ matrix.moonbeam_version }} CUMULUS_BUILD_BRANCH=${{ matrix.cumulus_version }} From 69089a681cc67712d2cf498d65cffb21a11f02b8 Mon Sep 17 00:00:00 2001 From: Konstantin Astakhov Date: Mon, 27 Mar 2023 23:00:03 +0700 Subject: [PATCH 059/103] fix for acala parachain --- .docker/Dockerfile-xcm.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.docker/Dockerfile-xcm.j2 b/.docker/Dockerfile-xcm.j2 index 6fdbe2e125..7a51ef3d2a 100644 --- a/.docker/Dockerfile-xcm.j2 +++ b/.docker/Dockerfile-xcm.j2 @@ -56,7 +56,7 @@ COPY --from=builder-unique /unique_parachain/unique-chain/target/release/unique- COPY --from=uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ COPY --from=uniquenetwork/builder-moonbeam:{{ MOONBEAM_BUILD_BRANCH }} /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/ COPY --from=uniquenetwork/builder-cumulus:{{ CUMULUS_BUILD_BRANCH }} /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus -COPY --from=uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} /unique_parachain/acala/target/production/acala /acala/target/release/ +COPY --from=uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} /unique_parachain/Acala/target/production/acala /acala/target/release/ COPY --from=uniquenetwork/builder-astar:{{ ASTAR_BUILD_BRANCH }} /unique_parachain/astar/target/release/astar /astar/target/release/ COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/ From f258980836a812b15c43d05813642d828a440c66 Mon Sep 17 00:00:00 2001 From: Konstantin Astakhov Date: Mon, 27 Mar 2023 23:55:27 +0700 Subject: [PATCH 060/103] fix for astar parachain --- .docker/xcm-config/launch-config-xcm-quartz.j2 | 3 +-- .docker/xcm-config/launch-config-xcm-unique.j2 | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.docker/xcm-config/launch-config-xcm-quartz.j2 b/.docker/xcm-config/launch-config-xcm-quartz.j2 index c308cbccec..ff43f925fe 100644 --- a/.docker/xcm-config/launch-config-xcm-quartz.j2 +++ b/.docker/xcm-config/launch-config-xcm-quartz.j2 @@ -74,7 +74,6 @@ "-lparachain::candidate_validation=debug" ] } - ], "genesis": { "runtime": { @@ -166,7 +165,7 @@ ] } ] - } + }, { "bin": "/astar/target/release/astar", "id": "2007", diff --git a/.docker/xcm-config/launch-config-xcm-unique.j2 b/.docker/xcm-config/launch-config-xcm-unique.j2 index b5af0d9648..9e09050469 100644 --- a/.docker/xcm-config/launch-config-xcm-unique.j2 +++ b/.docker/xcm-config/launch-config-xcm-unique.j2 @@ -74,7 +74,6 @@ "-lparachain::candidate_validation=debug" ] } - ], "genesis": { "runtime": { From 85e646d1655bdcefb51800a373132a045358c977 Mon Sep 17 00:00:00 2001 From: Konstantin Astakhov Date: Tue, 28 Mar 2023 00:35:00 +0700 Subject: [PATCH 061/103] fix for astar parachain --- .docker/xcm-config/6validators.jsonnet | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.docker/xcm-config/6validators.jsonnet b/.docker/xcm-config/6validators.jsonnet index 25c4e23e0b..f9dacc1aa0 100644 --- a/.docker/xcm-config/6validators.jsonnet +++ b/.docker/xcm-config/6validators.jsonnet @@ -1,3 +1,4 @@ + function(spec) spec { genesis+: { @@ -53,4 +54,4 @@ function(spec) }, }, }, - } \ No newline at end of file + } From f628606f837111de059b08aefec2b70fd4e27db7 Mon Sep 17 00:00:00 2001 From: Konstantin Astakhov Date: Tue, 28 Mar 2023 12:57:04 +0700 Subject: [PATCH 062/103] fix for astar parachain --- .docker/Dockerfile-xcm.j2 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.docker/Dockerfile-xcm.j2 b/.docker/Dockerfile-xcm.j2 index 7a51ef3d2a..b09853946c 100644 --- a/.docker/Dockerfile-xcm.j2 +++ b/.docker/Dockerfile-xcm.j2 @@ -23,6 +23,7 @@ WORKDIR /unique_parachain COPY ./xcm-config/launch-config-xcm-{{ NETWORK }}.json ./launch-config-xcm-{{ NETWORK }}.json COPY ./xcm-config/5validators.jsonnet ./5validators.jsonnet +COPY ./xcm-config/6validators.jsonnet ./6validators.jsonnet RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git && \ cd unique-chain && \ @@ -50,6 +51,7 @@ RUN export NVM_DIR="$HOME/.nvm" && \ COPY --from=builder-unique /unique_parachain/launch-config-xcm-{{ NETWORK }}.json /polkadot-launch/ COPY --from=builder-unique /unique_parachain/5validators.jsonnet /polkadot-launch/5validators.jsonnet +COPY --from=builder-unique /unique_parachain/6validators.jsonnet /polkadot-launch/6validators.jsonnet COPY --from=builder-unique /unique_parachain/unique-chain/target/release/unique-collator /unique-chain/target/release/ From 9812643539bcbda9e839d3c9a3cafb869e4e6c6a Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Tue, 28 Mar 2023 15:38:17 +0000 Subject: [PATCH 063/103] Add Unique-Astar integration tests --- tests/src/config.ts | 2 + tests/src/util/index.ts | 7 +- tests/src/util/playgrounds/unique.dev.ts | 13 +- tests/src/util/playgrounds/unique.ts | 20 +++ tests/src/xcm/xcmUnique.test.ts | 190 ++++++++++++++++++++++- 5 files changed, 229 insertions(+), 3 deletions(-) diff --git a/tests/src/config.ts b/tests/src/config.ts index e5247cee22..a96a4027b3 100644 --- a/tests/src/config.ts +++ b/tests/src/config.ts @@ -24,6 +24,8 @@ const config = { karuraUrl: process.env.acalaUrl || 'ws://127.0.0.1:9946', moonbeamUrl: process.env.moonbeamUrl || 'ws://127.0.0.1:9947', moonriverUrl: process.env.moonbeamUrl || 'ws://127.0.0.1:9947', + astarUrl: process.env.astarUrl || 'ws://127.0.0.1:9949', + shidenUrl: process.env.shidenUrl || 'ws://127.0.0.1:9949', westmintUrl: process.env.westmintUrl || 'ws://127.0.0.1:9948', statemineUrl: process.env.statemineUrl || 'ws://127.0.0.1:9948', statemintUrl: process.env.statemintUrl || 'ws://127.0.0.1:9948', diff --git a/tests/src/util/index.ts b/tests/src/util/index.ts index fdc71a5f1c..2e947c1a6b 100644 --- a/tests/src/util/index.ts +++ b/tests/src/util/index.ts @@ -11,7 +11,7 @@ import {Context} from 'mocha'; import config from '../config'; import {ChainHelperBase} from './playgrounds/unique'; import {ILogger} from './playgrounds/types'; -import {DevUniqueHelper, SilentLogger, SilentConsole, DevMoonbeamHelper, DevMoonriverHelper, DevAcalaHelper, DevKaruraHelper, DevRelayHelper, DevWestmintHelper, DevStatemineHelper, DevStatemintHelper} from './playgrounds/unique.dev'; +import {DevUniqueHelper, SilentLogger, SilentConsole, DevMoonbeamHelper, DevMoonriverHelper, DevAcalaHelper, DevKaruraHelper, DevRelayHelper, DevWestmintHelper, DevStatemineHelper, DevStatemintHelper, DevAstarHelper} from './playgrounds/unique.dev'; import {dirname} from 'path'; import {fileURLToPath} from 'url'; @@ -101,6 +101,11 @@ export const usingMoonriverPlaygrounds = (url: string, code: (helper: DevMoonbea return usingPlaygroundsGeneral(DevMoonriverHelper, url, code); }; +export const usingAstarPlaygrounds = (url: string, code: (helper: DevAstarHelper, privateKey: (seed: string) => Promise) => Promise) => { + return usingPlaygroundsGeneral(DevAstarHelper, url, code); +}; + + export const MINIMUM_DONOR_FUND = 100_000n; export const DONOR_FUNDING = 2_000_000n; diff --git a/tests/src/util/playgrounds/unique.dev.ts b/tests/src/util/playgrounds/unique.dev.ts index 7497e97454..e275c044a9 100644 --- a/tests/src/util/playgrounds/unique.dev.ts +++ b/tests/src/util/playgrounds/unique.dev.ts @@ -3,7 +3,7 @@ import {stringToU8a} from '@polkadot/util'; import {encodeAddress, mnemonicGenerate} from '@polkadot/util-crypto'; -import {UniqueHelper, MoonbeamHelper, ChainHelperBase, AcalaHelper, RelayHelper, WestmintHelper} from './unique'; +import {UniqueHelper, MoonbeamHelper, ChainHelperBase, AcalaHelper, RelayHelper, WestmintHelper, AstarHelper} from './unique'; import {ApiPromise, Keyring, WsProvider} from '@polkadot/api'; import * as defs from '../../interfaces/definitions'; import {IKeyringPair} from '@polkadot/types/types'; @@ -173,6 +173,17 @@ export class DevMoonriverHelper extends DevMoonbeamHelper { } } +export class DevAstarHelper extends AstarHelper { + wait: WaitGroup; + + constructor(logger: { log: (msg: any, level: any) => void, level: any }, options: {[key: string]: any} = {}) { + options.helperBase = options.helperBase ?? DevAstarHelper; + + super(logger, options); + this.wait = new WaitGroup(this); + } +} + export class DevAcalaHelper extends AcalaHelper { wait: WaitGroup; diff --git a/tests/src/util/playgrounds/unique.ts b/tests/src/util/playgrounds/unique.ts index 04be60fa56..2a4cbf355e 100644 --- a/tests/src/util/playgrounds/unique.ts +++ b/tests/src/util/playgrounds/unique.ts @@ -3243,6 +3243,26 @@ export class MoonbeamHelper extends XcmChainHelper { } } +export class AstarHelper extends XcmChainHelper { + balance: SubstrateBalanceGroup; + assets: AssetsGroup; + xcm: XcmGroup; + + constructor(logger?: ILogger, options: {[key: string]: any} = {}) { + super(logger, options.helperBase ?? AstarHelper); + + this.balance = new SubstrateBalanceGroup(this); + this.assets = new AssetsGroup(this); + this.xcm = new XcmGroup(this, 'polkadotXcm'); + } + + getSudo() { + // eslint-disable-next-line @typescript-eslint/naming-convention + const SudoHelperType = SudoHelper(this.helperBase); + return this.clone(SudoHelperType) as T; + } +} + export class AcalaHelper extends XcmChainHelper { balance: SubstrateBalanceGroup; assetRegistry: AcalaAssetRegistryGroup; diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index 418330c8e9..564125d495 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -18,12 +18,13 @@ import {IKeyringPair} from '@polkadot/types/types'; import {blake2AsHex} from '@polkadot/util-crypto'; import config from '../config'; import {XcmV2TraitsError} from '../interfaces'; -import {itSub, expect, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingRelayPlaygrounds, usingMoonbeamPlaygrounds, usingStatemintPlaygrounds} from '../util'; +import {itSub, expect, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingRelayPlaygrounds, usingMoonbeamPlaygrounds, usingStatemintPlaygrounds, usingAstarPlaygrounds} from '../util'; const UNIQUE_CHAIN = 2037; const STATEMINT_CHAIN = 1000; const ACALA_CHAIN = 2000; const MOONBEAM_CHAIN = 2004; +const ASTAR_CHAIN = 2006; const STATEMINT_PALLET_INSTANCE = 50; @@ -31,6 +32,7 @@ const relayUrl = config.relayUrl; const statemintUrl = config.statemintUrl; const acalaUrl = config.acalaUrl; const moonbeamUrl = config.moonbeamUrl; +const astarUrl = config.astarUrl; const RELAY_DECIMALS = 12; const STATEMINT_DECIMALS = 12; @@ -980,3 +982,189 @@ describeXCM('[XCM] Integration test: Exchanging UNQ with Moonbeam', () => { expect(unqFees == 0n).to.be.true; }); }); + +describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { + let alice: IKeyringPair; + let randomAccount: IKeyringPair; + + const astarInitialBalance = 1n * (10n ** 18n); + const unqToAstarAmount = 10n * (10n ** 18n); + + before(async () => { + await usingPlaygrounds(async (helper, privateKey) => { + alice = await privateKey('//Alice'); + [randomAccount] = await helper.arrange.createAccounts([100n], alice); + console.log('randomAccount', randomAccount.address); + }); + + await usingAstarPlaygrounds(astarUrl, async (helper) => { + console.log('1. Create foreign asset and metadata'); + await helper.assets.create( + alice, + 1, + alice.address, + 1n, // TODO set correct minimal balance + ); + + await helper.assets.setMetadata( + alice, + 1, + 'Cross chain UNQ', + 'xcUNQ', + 18, + ); + + console.log('2. Register asset location'); + const assetLocation = { + V1: { + parents: 1, + interior: { + X1: { + Parachain: UNIQUE_CHAIN, + }, + }, + }, + }; + + await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, 1]); + + console.log('3. Set payment for computation'); + // TODO this is Phala's price, what price will be for Unique? + const unitsPerSecond = 228_000_000_000n; + await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]); + + console.log('4. Transfer 1 ASTAR for recepient'); + await helper.balance.transferToSubstrate(alice, randomAccount.address, astarInitialBalance); + }); + }); + + itSub.only('Should connect and send UNQ to Astar', async ({helper}) => { + const destination = { + V1: { + parents: 1, + interior: { + X1: { + Parachain: ASTAR_CHAIN, + }, + }, + }, + }; + + const beneficiary = { + V1: { + parents: 0, + interior: { + X1: { + AccountId32: { + network: 'Any', + id: randomAccount.addressRaw, + }, + }, + }, + }, + }; + + const assets = { + V1: [ + { + id: { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + fun: { + Fungible: unqToAstarAmount, + }, + }, + ], + }; + + // Initial balance is 100 UNQ + expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(100n * (10n ** 18n)); + + const feeAssetItem = 0; + await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited'); + + // Balance after reserve transfer is less than 90 + expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(89_941967662676666465n); + + await usingAstarPlaygrounds(astarUrl, async (helper) => { + await helper.wait.newBlocks(3); + const xcUNQbalance = await helper.assets.account(1, randomAccount.address); + const astarBalance = await helper.balance.getSubstrate(randomAccount.address); + + expect(xcUNQbalance).to.eq(9_999_999_999_088_000_000n); + // Astar balance does not changed + expect(astarBalance).to.eq(1_000_000_000_000_000_000n); + }); + }); + + itSub.only('Should connect to Astar and send UNQ back', async ({helper}) => { + await usingAstarPlaygrounds(astarUrl, async (helper) => { + const destination = { + V1: { + parents: 1, + interior: { + X1: { + Parachain: UNIQUE_CHAIN, + }, + }, + }, + }; + + const beneficiary = { + V1: { + parents: 0, + interior: { + X1: { + AccountId32: { + network: 'Any', + id: randomAccount.addressRaw, + }, + }, + }, + }, + }; + + const assets = { + V1: [ + { + id: { + Concrete: { + parents: 1, + interior: { + X1: { + Parachain: UNIQUE_CHAIN, + }, + }, + }, + }, + fun: { + Fungible: 5_000_000_000_000_000_000n, // TODO set another value + }, + }, + ], + }; + + // Initial balance is 1 ASTAR + expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(1_000_000_000_000_000_000n); + + const feeAssetItem = 0; + await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited'); + + // Balance after reserve transfer is less than 1 ASTAR + const xcUNQbalance = await helper.assets.account(1, randomAccount.address); + const balanceAstar = await helper.balance.getSubstrate(randomAccount.address); + + // xcUNQ balance decreased + expect(xcUNQbalance).to.eq(4_999_999_999_088_000_000n); + // Astar balance is 0.997... + expect(balanceAstar / (10n ** 15n)).to.eq(997n); + }); + + await helper.wait.newBlocks(3); + const balanceUNQ = await helper.balance.getSubstrate(randomAccount.address); + expect(balanceUNQ).to.eq(89_941967662676666465n + 5_000_000_000_000_000_000n); + }); +}); From 955fd2120a62fe5a8206ea74313f5375d2024dee Mon Sep 17 00:00:00 2001 From: Konstantin Astakhov Date: Wed, 29 Mar 2023 15:48:12 +0700 Subject: [PATCH 064/103] migrate to ubuntu:22.04 --- .docker/Dockerfile-astar.j2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.docker/Dockerfile-astar.j2 b/.docker/Dockerfile-astar.j2 index 736cc6aa68..3a2e39ba8f 100644 --- a/.docker/Dockerfile-astar.j2 +++ b/.docker/Dockerfile-astar.j2 @@ -1,5 +1,5 @@ # ===== Rust builder ===== -FROM ubuntu:20.04 as rust-builder +FROM ubuntu:22.04 as rust-builder LABEL maintainer="Unique.Network" ENV CARGO_HOME="/cargo-home" @@ -35,6 +35,6 @@ RUN git clone --recurse-submodules -b {{ ASTAR_BUILD_BRANCH }} --depth 1 https:/ # ===== BIN ====== -FROM ubuntu:20.04 as builder-astar +FROM ubuntu:22.04 as builder-astar COPY --from=builder-astar-bin /unique_parachain/Astar/target/release/astar-collator /unique_parachain/astar/target/release/astar From 1550f8cc5eba96da6351af4130c8adfde1b42c04 Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Wed, 29 Mar 2023 13:37:44 +0000 Subject: [PATCH 065/103] Add Quartz-Shiden tests + fix send-back test --- tests/src/xcm/xcmQuartz.test.ts | 190 +++++++++++++++++++++++++++++++- tests/src/xcm/xcmUnique.test.ts | 71 +++++++++++- 2 files changed, 258 insertions(+), 3 deletions(-) diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index f41bc6974f..a2f593f794 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -18,12 +18,13 @@ import {IKeyringPair} from '@polkadot/types/types'; import {blake2AsHex} from '@polkadot/util-crypto'; import config from '../config'; import {XcmV2TraitsError} from '../interfaces'; -import {itSub, expect, describeXCM, usingPlaygrounds, usingKaruraPlaygrounds, usingRelayPlaygrounds, usingMoonriverPlaygrounds, usingStateminePlaygrounds} from '../util'; +import {itSub, expect, describeXCM, usingPlaygrounds, usingKaruraPlaygrounds, usingRelayPlaygrounds, usingMoonriverPlaygrounds, usingStateminePlaygrounds, usingAstarPlaygrounds} from '../util'; const QUARTZ_CHAIN = 2095; const STATEMINE_CHAIN = 1000; const KARURA_CHAIN = 2000; const MOONRIVER_CHAIN = 2023; +const SHIDEN_CHAIN = 2007; const STATEMINE_PALLET_INSTANCE = 50; @@ -31,6 +32,7 @@ const relayUrl = config.relayUrl; const statemineUrl = config.statemineUrl; const karuraUrl = config.karuraUrl; const moonriverUrl = config.moonriverUrl; +const shidenUrl = config.shidenUrl; const RELAY_DECIMALS = 12; const STATEMINE_DECIMALS = 12; @@ -978,3 +980,189 @@ describeXCM('[XCM] Integration test: Exchanging QTZ with Moonriver', () => { expect(qtzFees == 0n).to.be.true; }); }); + +describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { + let alice: IKeyringPair; + let randomAccount: IKeyringPair; + + const shidenInitialBalance = 1n * (10n ** 18n); + const qtzToShidenAmount = 10n * (10n ** 18n); + + before(async () => { + await usingPlaygrounds(async (helper, privateKey) => { + alice = await privateKey('//Alice'); + [randomAccount] = await helper.arrange.createAccounts([100n], alice); + console.log('randomAccount', randomAccount.address); + }); + + await usingAstarPlaygrounds(shidenUrl, async (helper) => { + console.log('1. Create foreign asset and metadata'); + await helper.assets.create( + alice, + 1, + alice.address, + 1n, + ); + + await helper.assets.setMetadata( + alice, + 1, + 'Cross chain QTZ', + 'xcQTZ', + 18, + ); + + console.log('2. Register asset location'); + const assetLocation = { + V1: { + parents: 1, + interior: { + X1: { + Parachain: QUARTZ_CHAIN, + }, + }, + }, + }; + + await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, 1]); + + console.log('3. Set payment for computation'); + // TODO this is Phala's price, what price will be for Unique? + const unitsPerSecond = 228_000_000_000n; + await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]); + + console.log('4. Transfer 1 SDN to recepient'); + await helper.balance.transferToSubstrate(alice, randomAccount.address, shidenInitialBalance); + }); + }); + + itSub.only('Should connect and send QTZ to Shiden', async ({helper}) => { + const destination = { + V1: { + parents: 1, + interior: { + X1: { + Parachain: SHIDEN_CHAIN, + }, + }, + }, + }; + + const beneficiary = { + V1: { + parents: 0, + interior: { + X1: { + AccountId32: { + network: 'Any', + id: randomAccount.addressRaw, + }, + }, + }, + }, + }; + + const assets = { + V1: [ + { + id: { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + fun: { + Fungible: qtzToShidenAmount, + }, + }, + ], + }; + + // Initial balance is 100 UNQ + expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(100n * (10n ** 18n)); + + const feeAssetItem = 0; + await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited'); + + // Balance after reserve transfer is less than 90 + expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(89_941967662676666465n); + + await usingAstarPlaygrounds(shidenUrl, async (helper) => { + await helper.wait.newBlocks(3); + const xcUNQbalance = await helper.assets.account(1, randomAccount.address); + const astarBalance = await helper.balance.getSubstrate(randomAccount.address); + + expect(xcUNQbalance).to.eq(9_999_999_999_088_000_000n); + // Astar balance does not changed + expect(astarBalance).to.eq(1_000_000_000_000_000_000n); + }); + }); + + itSub.only('Should connect to Shiden and send QTZ back', async ({helper}) => { + await usingAstarPlaygrounds(shidenUrl, async (helper) => { + const destination = { + V1: { + parents: 1, + interior: { + X1: { + Parachain: QUARTZ_CHAIN, + }, + }, + }, + }; + + const beneficiary = { + V1: { + parents: 0, + interior: { + X1: { + AccountId32: { + network: 'Any', + id: randomAccount.addressRaw, + }, + }, + }, + }, + }; + + const assets = { + V1: [ + { + id: { + Concrete: { + parents: 1, + interior: { + X1: { + Parachain: QUARTZ_CHAIN, + }, + }, + }, + }, + fun: { + Fungible: 5_000_000_000_000_000_000n, + }, + }, + ], + }; + + // Initial balance is 1 SDN + expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(1_000_000_000_000_000_000n); + + const feeAssetItem = 0; + await helper.executeExtrinsic(randomAccount, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]); + + // Balance after reserve transfer is less than 1 SDN + const xcUNQbalance = await helper.assets.account(1, randomAccount.address); + const balanceSDN = await helper.balance.getSubstrate(randomAccount.address); + + // Assert: xcQTZ balance decreased + expect(xcUNQbalance).to.eq(4_999_999_999_088_000_000n); + // Assert: SDN balance is 0.996... + expect(balanceSDN / (10n ** 15n)).to.eq(996n); + }); + + await helper.wait.newBlocks(3); + const balanceUNQ = await helper.balance.getSubstrate(randomAccount.address); + expect(balanceUNQ).to.eq(89_941967662676666465n + 5_000_000_000_000_000_000n); + }); +}); diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index 564125d495..6bc22d8096 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -1003,7 +1003,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { alice, 1, alice.address, - 1n, // TODO set correct minimal balance + 1n, ); await helper.assets.setMetadata( @@ -1033,7 +1033,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { const unitsPerSecond = 228_000_000_000n; await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]); - console.log('4. Transfer 1 ASTAR for recepient'); + console.log('4. Transfer 1 ASTR to recepient'); await helper.balance.transferToSubstrate(alice, randomAccount.address, astarInitialBalance); }); }); @@ -1101,6 +1101,73 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { }); itSub.only('Should connect to Astar and send UNQ back', async ({helper}) => { + await usingAstarPlaygrounds(astarUrl, async (helper) => { + const destination = { + V1: { + parents: 1, + interior: { + X1: { + Parachain: UNIQUE_CHAIN, + }, + }, + }, + }; + + const beneficiary = { + V1: { + parents: 0, + interior: { + X1: { + AccountId32: { + network: 'Any', + id: randomAccount.addressRaw, + }, + }, + }, + }, + }; + + const assets = { + V1: [ + { + id: { + Concrete: { + parents: 1, + interior: { + X1: { + Parachain: UNIQUE_CHAIN, + }, + }, + }, + }, + fun: { + Fungible: 5_000_000_000_000_000_000n, + }, + }, + ], + }; + + // Initial balance is 1 ASTR + expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(1_000_000_000_000_000_000n); + + const feeAssetItem = 0; + await helper.executeExtrinsic(randomAccount, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]); + + const xcUNQbalance = await helper.assets.account(1, randomAccount.address); + const balanceAstar = await helper.balance.getSubstrate(randomAccount.address); + + // Assert: xcUNQ balance decreased + expect(xcUNQbalance).to.eq(4_999_999_999_088_000_000n); + // Assert: ASTR balance is 0.996... + expect(balanceAstar / (10n ** 15n)).to.eq(996n); + }); + + await helper.wait.newBlocks(3); + const balanceUNQ = await helper.balance.getSubstrate(randomAccount.address); + expect(balanceUNQ).to.eq(89_941967662676666465n + 5_000_000_000_000_000_000n); + }); + + itSub.skip('Should not accept limitedReserveTransfer of UNQ from ASTAR', async ({helper}) => { await usingAstarPlaygrounds(astarUrl, async (helper) => { const destination = { V1: { From d035b5d10ee1aa8e276ff890d7cd7d093bbb0a39 Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Wed, 29 Mar 2023 17:12:56 +0000 Subject: [PATCH 066/103] Fixes after review --- .../xcm-config/launch-config-xcm-quartz.j2 | 6 +- .../xcm-config/launch-config-xcm-unique.j2 | 4 +- tests/src/util/index.ts | 5 +- tests/src/util/playgrounds/unique.dev.ts | 11 +++ tests/src/xcm/xcmQuartz.test.ts | 86 ++++++++++++------- tests/src/xcm/xcmUnique.test.ts | 66 +++++++------- 6 files changed, 110 insertions(+), 68 deletions(-) diff --git a/.docker/xcm-config/launch-config-xcm-quartz.j2 b/.docker/xcm-config/launch-config-xcm-quartz.j2 index ff43f925fe..d871855452 100644 --- a/.docker/xcm-config/launch-config-xcm-quartz.j2 +++ b/.docker/xcm-config/launch-config-xcm-quartz.j2 @@ -169,7 +169,7 @@ { "bin": "/astar/target/release/astar", "id": "2007", - "chain": "astar-dev", + "chain": "shiden-dev", "balance": "1000000000000000000000000", "nodes": [ { @@ -224,12 +224,12 @@ }, { "sender": 2007, - "recipient": 1000, + "recipient": 2095, "maxCapacity": 8, "maxMessageSize": 512 }, { - "sender": 1000, + "sender": 2095, "recipient": 2007, "maxCapacity": 8, "maxMessageSize": 512 diff --git a/.docker/xcm-config/launch-config-xcm-unique.j2 b/.docker/xcm-config/launch-config-xcm-unique.j2 index 9e09050469..365a8a8b47 100644 --- a/.docker/xcm-config/launch-config-xcm-unique.j2 +++ b/.docker/xcm-config/launch-config-xcm-unique.j2 @@ -224,12 +224,12 @@ }, { "sender": 2006, - "recipient": 1000, + "recipient": 2037, "maxCapacity": 8, "maxMessageSize": 512 }, { - "sender": 1000, + "sender": 2037, "recipient": 2006, "maxCapacity": 8, "maxMessageSize": 512 diff --git a/tests/src/util/index.ts b/tests/src/util/index.ts index 2e947c1a6b..4c079f0b1e 100644 --- a/tests/src/util/index.ts +++ b/tests/src/util/index.ts @@ -11,7 +11,7 @@ import {Context} from 'mocha'; import config from '../config'; import {ChainHelperBase} from './playgrounds/unique'; import {ILogger} from './playgrounds/types'; -import {DevUniqueHelper, SilentLogger, SilentConsole, DevMoonbeamHelper, DevMoonriverHelper, DevAcalaHelper, DevKaruraHelper, DevRelayHelper, DevWestmintHelper, DevStatemineHelper, DevStatemintHelper, DevAstarHelper} from './playgrounds/unique.dev'; +import {DevUniqueHelper, SilentLogger, SilentConsole, DevMoonbeamHelper, DevMoonriverHelper, DevAcalaHelper, DevKaruraHelper, DevRelayHelper, DevWestmintHelper, DevStatemineHelper, DevStatemintHelper, DevAstarHelper, DevShidenHelper} from './playgrounds/unique.dev'; import {dirname} from 'path'; import {fileURLToPath} from 'url'; @@ -105,6 +105,9 @@ export const usingAstarPlaygrounds = (url: string, code: (helper: DevAstarHelper return usingPlaygroundsGeneral(DevAstarHelper, url, code); }; +export const usingShidenPlaygrounds = (url: string, code: (helper: DevShidenHelper, privateKey: (seed: string) => Promise) => Promise) => { + return usingPlaygroundsGeneral(DevShidenHelper, url, code); +}; export const MINIMUM_DONOR_FUND = 100_000n; export const DONOR_FUNDING = 2_000_000n; diff --git a/tests/src/util/playgrounds/unique.dev.ts b/tests/src/util/playgrounds/unique.dev.ts index e275c044a9..74335deef5 100644 --- a/tests/src/util/playgrounds/unique.dev.ts +++ b/tests/src/util/playgrounds/unique.dev.ts @@ -184,6 +184,17 @@ export class DevAstarHelper extends AstarHelper { } } +export class DevShidenHelper extends AstarHelper { + wait: WaitGroup; + + constructor(logger: { log: (msg: any, level: any) => void, level: any }, options: {[key: string]: any} = {}) { + options.helperBase = options.helperBase ?? DevShidenHelper; + + super(logger, options); + this.wait = new WaitGroup(this); + } +} + export class DevAcalaHelper extends AcalaHelper { wait: WaitGroup; diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index a2f593f794..d25d309658 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -18,7 +18,7 @@ import {IKeyringPair} from '@polkadot/types/types'; import {blake2AsHex} from '@polkadot/util-crypto'; import config from '../config'; import {XcmV2TraitsError} from '../interfaces'; -import {itSub, expect, describeXCM, usingPlaygrounds, usingKaruraPlaygrounds, usingRelayPlaygrounds, usingMoonriverPlaygrounds, usingStateminePlaygrounds, usingAstarPlaygrounds} from '../util'; +import {itSub, expect, describeXCM, usingPlaygrounds, usingKaruraPlaygrounds, usingRelayPlaygrounds, usingMoonriverPlaygrounds, usingStateminePlaygrounds, usingShidenPlaygrounds} from '../util'; const QUARTZ_CHAIN = 2095; const STATEMINE_CHAIN = 1000; @@ -983,19 +983,28 @@ describeXCM('[XCM] Integration test: Exchanging QTZ with Moonriver', () => { describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { let alice: IKeyringPair; - let randomAccount: IKeyringPair; + let sender: IKeyringPair; + + // Quartz -> Shiden + const shidenInitialBalance = 1n * (10n ** 18n); // 1 SHD, existencial deposit required in order to perform XCM call + const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours? + const qtzToShidenTransferred = 10n * (10n ** 18n); // 10 QTZ + const qtzToShidenArrived = 9_999_999_999_088_000_000n; // 9.999 ... QTZ, Shiden takes a commision in foreign tokens + const senderIinitialBalanceQTZ = 100n * (10n ** 18n); // How many QTZ sender has initially + const senderBalanceAfterXCM = 89_941967662676666465n; // 89.94... QTZ after XCM call - const shidenInitialBalance = 1n * (10n ** 18n); - const qtzToShidenAmount = 10n * (10n ** 18n); + // Shiden -> Quartz + const qtzFromShidenTransfered = 5n * (10n ** 18n); // 5 QTZ + const qtzOnShidenLeft = qtzToShidenArrived - qtzFromShidenTransfered; // 4.999_999_999_088_000_000n QTZ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { alice = await privateKey('//Alice'); - [randomAccount] = await helper.arrange.createAccounts([100n], alice); - console.log('randomAccount', randomAccount.address); + [sender] = await helper.arrange.createAccounts([100n], alice); + console.log('sender', sender.address); }); - await usingAstarPlaygrounds(shidenUrl, async (helper) => { + await usingShidenPlaygrounds(shidenUrl, async (helper) => { console.log('1. Create foreign asset and metadata'); await helper.assets.create( alice, @@ -1027,12 +1036,10 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, 1]); console.log('3. Set payment for computation'); - // TODO this is Phala's price, what price will be for Unique? - const unitsPerSecond = 228_000_000_000n; await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]); console.log('4. Transfer 1 SDN to recepient'); - await helper.balance.transferToSubstrate(alice, randomAccount.address, shidenInitialBalance); + await helper.balance.transferToSubstrate(alice, sender.address, shidenInitialBalance); }); }); @@ -1055,7 +1062,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { X1: { AccountId32: { network: 'Any', - id: randomAccount.addressRaw, + id: sender.addressRaw, }, }, }, @@ -1072,34 +1079,42 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { }, }, fun: { - Fungible: qtzToShidenAmount, + Fungible: qtzToShidenTransferred, }, }, ], }; - // Initial balance is 100 UNQ - expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(100n * (10n ** 18n)); + // Initial balance is 100 QTZ + const balanceBefore = await helper.balance.getSubstrate(sender.address); + console.log(`Initial balance is: ${balanceBefore}`); + expect(balanceBefore).to.eq(senderIinitialBalanceQTZ); const feeAssetItem = 0; - await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited'); + await helper.xcm.limitedReserveTransferAssets(sender, destination, beneficiary, assets, feeAssetItem, 'Unlimited'); // Balance after reserve transfer is less than 90 - expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(89_941967662676666465n); + const balanceAfter = await helper.balance.getSubstrate(sender.address); + console.log(`QTZ Balance on Quartz after XCM is: ${balanceAfter}`); + console.log(`Quartz's QTZ commission is: ${balanceBefore - balanceAfter}`); + expect(balanceAfter).to.eq(senderBalanceAfterXCM); - await usingAstarPlaygrounds(shidenUrl, async (helper) => { + await usingShidenPlaygrounds(shidenUrl, async (helper) => { await helper.wait.newBlocks(3); - const xcUNQbalance = await helper.assets.account(1, randomAccount.address); - const astarBalance = await helper.balance.getSubstrate(randomAccount.address); + const xcQTZbalance = await helper.assets.account(1, sender.address); + const shidenBalance = await helper.balance.getSubstrate(sender.address); + + console.log(`xcQTZ balance on Shiden after XCM is: ${xcQTZbalance}`); + console.log(`Shiden's QTZ commission is: ${qtzToShidenTransferred - xcQTZbalance!}`); - expect(xcUNQbalance).to.eq(9_999_999_999_088_000_000n); - // Astar balance does not changed - expect(astarBalance).to.eq(1_000_000_000_000_000_000n); + expect(xcQTZbalance).to.eq(qtzToShidenArrived); + // SHD balance does not changed: + expect(shidenBalance).to.eq(shidenInitialBalance); }); }); itSub.only('Should connect to Shiden and send QTZ back', async ({helper}) => { - await usingAstarPlaygrounds(shidenUrl, async (helper) => { + await usingShidenPlaygrounds(shidenUrl, async (helper) => { const destination = { V1: { parents: 1, @@ -1118,7 +1133,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { X1: { AccountId32: { network: 'Any', - id: randomAccount.addressRaw, + id: sender.addressRaw, }, }, }, @@ -1139,30 +1154,35 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { }, }, fun: { - Fungible: 5_000_000_000_000_000_000n, + Fungible: qtzFromShidenTransfered, }, }, ], }; // Initial balance is 1 SDN - expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(1_000_000_000_000_000_000n); + const balanceSDNbefore = await helper.balance.getSubstrate(sender.address); + console.log(`SDN balance is: ${balanceSDNbefore}, it does not changed`); + expect(balanceSDNbefore).to.eq(shidenInitialBalance); const feeAssetItem = 0; - await helper.executeExtrinsic(randomAccount, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]); + // this is non-standard polkadotXcm extension for Astar only. It calls InitiateReserveWithdraw + await helper.executeExtrinsic(sender, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]); // Balance after reserve transfer is less than 1 SDN - const xcUNQbalance = await helper.assets.account(1, randomAccount.address); - const balanceSDN = await helper.balance.getSubstrate(randomAccount.address); + const xcQTZbalance = await helper.assets.account(1, sender.address); + const balanceSDN = await helper.balance.getSubstrate(sender.address); + console.log(`xcQTZ balance on Shiden after XCM is: ${xcQTZbalance}`); - // Assert: xcQTZ balance decreased - expect(xcUNQbalance).to.eq(4_999_999_999_088_000_000n); + // Assert: xcQTZ balance correctly decreased + expect(xcQTZbalance).to.eq(qtzOnShidenLeft); // Assert: SDN balance is 0.996... expect(balanceSDN / (10n ** 15n)).to.eq(996n); }); await helper.wait.newBlocks(3); - const balanceUNQ = await helper.balance.getSubstrate(randomAccount.address); - expect(balanceUNQ).to.eq(89_941967662676666465n + 5_000_000_000_000_000_000n); + const balanceQTZ = await helper.balance.getSubstrate(sender.address); + console.log(`QTZ Balance on Quartz after XCM is: ${balanceQTZ}`); + expect(balanceQTZ).to.eq(senderBalanceAfterXCM + qtzFromShidenTransfered); }); }); diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index 6bc22d8096..dd624a9b31 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -987,8 +987,17 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { let alice: IKeyringPair; let randomAccount: IKeyringPair; - const astarInitialBalance = 1n * (10n ** 18n); - const unqToAstarAmount = 10n * (10n ** 18n); + // Unique -> Astar + const astarInitialBalance = 1n * (10n ** 18n); // 1 ASTR. Existencial deposit required in order to perform XCM call + const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours? + const unqToAstarTransferred = 10n * (10n ** 18n); // 10 UNQ + const unqToAstarArrived = 9_999_999_999_088_000_000n; // 9.999 ... UNQ, Shiden takes a commision in foreign tokens + const senderIinitialBalanceUNQ = 100n * (10n ** 18n); // How many UNQ sender has initially + const senderBalanceAfterXCM = 89_941967662676666465n; // 89.94... UNQ after XCM call + + // Astar -> Unique + const unqFromAstarTransfered = 5n * (10n ** 18n); // 5 UNQ + const unqOnAstarLeft = unqToAstarArrived - unqFromAstarTransfered; // 4.999_999_999_088_000_000n UNQ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { @@ -1029,8 +1038,6 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, 1]); console.log('3. Set payment for computation'); - // TODO this is Phala's price, what price will be for Unique? - const unitsPerSecond = 228_000_000_000n; await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]); console.log('4. Transfer 1 ASTR to recepient'); @@ -1074,29 +1081,37 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { }, }, fun: { - Fungible: unqToAstarAmount, + Fungible: unqToAstarTransferred, }, }, ], }; // Initial balance is 100 UNQ - expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(100n * (10n ** 18n)); + const balanceBefore = await helper.balance.getSubstrate(randomAccount.address); + console.log(`Initial balance is: ${balanceBefore}`); + expect(balanceBefore).to.eq(senderIinitialBalanceUNQ); const feeAssetItem = 0; await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited'); // Balance after reserve transfer is less than 90 - expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(89_941967662676666465n); + const balanceAfter = await helper.balance.getSubstrate(randomAccount.address); + console.log(`UNQ Balance on Unique after XCM is: ${balanceAfter}`); + console.log(`Unique's UNQ commission is: ${balanceBefore - balanceAfter}`); + expect(balanceAfter).to.eq(senderBalanceAfterXCM); await usingAstarPlaygrounds(astarUrl, async (helper) => { await helper.wait.newBlocks(3); const xcUNQbalance = await helper.assets.account(1, randomAccount.address); const astarBalance = await helper.balance.getSubstrate(randomAccount.address); - expect(xcUNQbalance).to.eq(9_999_999_999_088_000_000n); + console.log(`xcUNQ balance on Astar after XCM is: ${xcUNQbalance}`); + console.log(`Astar's UNQ commission is: ${unqToAstarTransferred - xcUNQbalance!}`); + + expect(xcUNQbalance).to.eq(unqToAstarArrived); // Astar balance does not changed - expect(astarBalance).to.eq(1_000_000_000_000_000_000n); + expect(astarBalance).to.eq(astarInitialBalance); }); }); @@ -1141,30 +1156,35 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { }, }, fun: { - Fungible: 5_000_000_000_000_000_000n, + Fungible: unqFromAstarTransfered, }, }, ], }; // Initial balance is 1 ASTR - expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(1_000_000_000_000_000_000n); + const balanceASTRbefore = await helper.balance.getSubstrate(randomAccount.address); + console.log(`ASTR balance is: ${balanceASTRbefore}, it does not changed`); + expect(balanceASTRbefore).to.eq(astarInitialBalance); const feeAssetItem = 0; + // this is non-standard polkadotXcm extension for Astar only. It calls InitiateReserveWithdraw await helper.executeExtrinsic(randomAccount, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]); const xcUNQbalance = await helper.assets.account(1, randomAccount.address); const balanceAstar = await helper.balance.getSubstrate(randomAccount.address); + console.log(`xcUNQ balance on Astar after XCM is: ${xcUNQbalance}`); - // Assert: xcUNQ balance decreased - expect(xcUNQbalance).to.eq(4_999_999_999_088_000_000n); + // Assert: xcUNQ balance correctly decreased + expect(xcUNQbalance).to.eq(unqOnAstarLeft); // Assert: ASTR balance is 0.996... expect(balanceAstar / (10n ** 15n)).to.eq(996n); }); await helper.wait.newBlocks(3); const balanceUNQ = await helper.balance.getSubstrate(randomAccount.address); - expect(balanceUNQ).to.eq(89_941967662676666465n + 5_000_000_000_000_000_000n); + console.log(`UNQ Balance on Unique after XCM is: ${balanceUNQ}`); + expect(balanceUNQ).to.eq(senderBalanceAfterXCM + unqFromAstarTransfered); }); itSub.skip('Should not accept limitedReserveTransfer of UNQ from ASTAR', async ({helper}) => { @@ -1208,30 +1228,18 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { }, }, fun: { - Fungible: 5_000_000_000_000_000_000n, // TODO set another value + Fungible: unqFromAstarTransfered, }, }, ], }; // Initial balance is 1 ASTAR - expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(1_000_000_000_000_000_000n); + expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(astarInitialBalance); const feeAssetItem = 0; + // TODO: expect rejected: await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited'); - - // Balance after reserve transfer is less than 1 ASTAR - const xcUNQbalance = await helper.assets.account(1, randomAccount.address); - const balanceAstar = await helper.balance.getSubstrate(randomAccount.address); - - // xcUNQ balance decreased - expect(xcUNQbalance).to.eq(4_999_999_999_088_000_000n); - // Astar balance is 0.997... - expect(balanceAstar / (10n ** 15n)).to.eq(997n); }); - - await helper.wait.newBlocks(3); - const balanceUNQ = await helper.balance.getSubstrate(randomAccount.address); - expect(balanceUNQ).to.eq(89_941967662676666465n + 5_000_000_000_000_000_000n); }); }); From 45e62ca5a27700bbce04e54ade0bcac0e418d3fc Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Wed, 29 Mar 2023 18:41:20 +0000 Subject: [PATCH 067/103] Remove exclusive tests --- tests/src/xcm/xcmQuartz.test.ts | 4 ++-- tests/src/xcm/xcmUnique.test.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index d25d309658..e5e7b4cda8 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -1043,7 +1043,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { }); }); - itSub.only('Should connect and send QTZ to Shiden', async ({helper}) => { + itSub('Should connect and send QTZ to Shiden', async ({helper}) => { const destination = { V1: { parents: 1, @@ -1113,7 +1113,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { }); }); - itSub.only('Should connect to Shiden and send QTZ back', async ({helper}) => { + itSub('Should connect to Shiden and send QTZ back', async ({helper}) => { await usingShidenPlaygrounds(shidenUrl, async (helper) => { const destination = { V1: { diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index dd624a9b31..3586a637bf 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -1045,7 +1045,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { }); }); - itSub.only('Should connect and send UNQ to Astar', async ({helper}) => { + itSub('Should connect and send UNQ to Astar', async ({helper}) => { const destination = { V1: { parents: 1, @@ -1115,7 +1115,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { }); }); - itSub.only('Should connect to Astar and send UNQ back', async ({helper}) => { + itSub('Should connect to Astar and send UNQ back', async ({helper}) => { await usingAstarPlaygrounds(astarUrl, async (helper) => { const destination = { V1: { From 647e949b267606f32194ce4f0b98a802c29b5974 Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Thu, 30 Mar 2023 08:54:49 +0000 Subject: [PATCH 068/103] Add decimal constants --- tests/src/xcm/xcmQuartz.test.ts | 10 ++++++---- tests/src/xcm/xcmUnique.test.ts | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index e5e7b4cda8..24579b4944 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -37,6 +37,8 @@ const shidenUrl = config.shidenUrl; const RELAY_DECIMALS = 12; const STATEMINE_DECIMALS = 12; const KARURA_DECIMALS = 12; +const SHIDEN_DECIMALS = 18n; +const QTZ_DECIMALS = 18n; const TRANSFER_AMOUNT = 2000000000000000000000000n; @@ -986,15 +988,15 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { let sender: IKeyringPair; // Quartz -> Shiden - const shidenInitialBalance = 1n * (10n ** 18n); // 1 SHD, existencial deposit required in order to perform XCM call + const shidenInitialBalance = 1n * SHIDEN_DECIMALS; // 1 SHD, existential deposit required to actually create the account on Shiden const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours? - const qtzToShidenTransferred = 10n * (10n ** 18n); // 10 QTZ + const qtzToShidenTransferred = 10n * QTZ_DECIMALS; // 10 QTZ const qtzToShidenArrived = 9_999_999_999_088_000_000n; // 9.999 ... QTZ, Shiden takes a commision in foreign tokens - const senderIinitialBalanceQTZ = 100n * (10n ** 18n); // How many QTZ sender has initially + const senderIinitialBalanceQTZ = 100n * QTZ_DECIMALS; // How many QTZ sender has initially const senderBalanceAfterXCM = 89_941967662676666465n; // 89.94... QTZ after XCM call // Shiden -> Quartz - const qtzFromShidenTransfered = 5n * (10n ** 18n); // 5 QTZ + const qtzFromShidenTransfered = 5n * QTZ_DECIMALS; // 5 QTZ const qtzOnShidenLeft = qtzToShidenArrived - qtzFromShidenTransfered; // 4.999_999_999_088_000_000n QTZ before(async () => { diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index 3586a637bf..1381440883 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -37,6 +37,8 @@ const astarUrl = config.astarUrl; const RELAY_DECIMALS = 12; const STATEMINT_DECIMALS = 12; const ACALA_DECIMALS = 12; +const ASTAR_DECIMALS = 18n; +const UNQ_DECIMALS = 18n; const TRANSFER_AMOUNT = 2000000000000000000000000n; @@ -988,15 +990,15 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { let randomAccount: IKeyringPair; // Unique -> Astar - const astarInitialBalance = 1n * (10n ** 18n); // 1 ASTR. Existencial deposit required in order to perform XCM call + const astarInitialBalance = 1n * ASTAR_DECIMALS; // 1 ASTR, existential deposit required to actually create the account on Shiden. const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours? - const unqToAstarTransferred = 10n * (10n ** 18n); // 10 UNQ + const unqToAstarTransferred = 10n * UNQ_DECIMALS; // 10 UNQ const unqToAstarArrived = 9_999_999_999_088_000_000n; // 9.999 ... UNQ, Shiden takes a commision in foreign tokens - const senderIinitialBalanceUNQ = 100n * (10n ** 18n); // How many UNQ sender has initially + const senderIinitialBalanceUNQ = 100n * UNQ_DECIMALS; // How many UNQ sender has initially const senderBalanceAfterXCM = 89_941967662676666465n; // 89.94... UNQ after XCM call // Astar -> Unique - const unqFromAstarTransfered = 5n * (10n ** 18n); // 5 UNQ + const unqFromAstarTransfered = 5n * UNQ_DECIMALS; // 5 UNQ const unqOnAstarLeft = unqToAstarArrived - unqFromAstarTransfered; // 4.999_999_999_088_000_000n UNQ before(async () => { From 671f56ab55579beec91179ab535dc99c0ef687d6 Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Thu, 30 Mar 2023 15:07:05 +0000 Subject: [PATCH 069/103] Add constants to magic numbers --- tests/src/xcm/xcmQuartz.test.ts | 26 +++++++++++++++----------- tests/src/xcm/xcmUnique.test.ts | 26 +++++++++++++++----------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index 24579b4944..b1f6b24567 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -987,6 +987,9 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { let alice: IKeyringPair; let sender: IKeyringPair; + const QTZ_ASSET_ID_ON_SHIDEN = 1; + const QTZ_MINIMAL_BALANCE_ON_SHIDEN = 1n; + // Quartz -> Shiden const shidenInitialBalance = 1n * SHIDEN_DECIMALS; // 1 SHD, existential deposit required to actually create the account on Shiden const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours? @@ -1008,22 +1011,23 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { await usingShidenPlaygrounds(shidenUrl, async (helper) => { console.log('1. Create foreign asset and metadata'); + // TODO update metadata with values from production await helper.assets.create( alice, - 1, + QTZ_ASSET_ID_ON_SHIDEN, alice.address, - 1n, + QTZ_MINIMAL_BALANCE_ON_SHIDEN, ); await helper.assets.setMetadata( alice, - 1, + QTZ_ASSET_ID_ON_SHIDEN, 'Cross chain QTZ', 'xcQTZ', - 18, + Number(QTZ_DECIMALS), ); - console.log('2. Register asset location'); + console.log('2. Register asset location on Shiden'); const assetLocation = { V1: { parents: 1, @@ -1035,12 +1039,12 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { }, }; - await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, 1]); + await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, QTZ_ASSET_ID_ON_SHIDEN]); - console.log('3. Set payment for computation'); + console.log('3. Set QTZ payment for XCM execution on Shiden'); await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]); - console.log('4. Transfer 1 SDN to recepient'); + console.log('4. Transfer 1 SDN to recipient to create the account (needed due to existential balance)'); await helper.balance.transferToSubstrate(alice, sender.address, shidenInitialBalance); }); }); @@ -1103,7 +1107,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { await usingShidenPlaygrounds(shidenUrl, async (helper) => { await helper.wait.newBlocks(3); - const xcQTZbalance = await helper.assets.account(1, sender.address); + const xcQTZbalance = await helper.assets.account(QTZ_ASSET_ID_ON_SHIDEN, sender.address); const shidenBalance = await helper.balance.getSubstrate(sender.address); console.log(`xcQTZ balance on Shiden after XCM is: ${xcQTZbalance}`); @@ -1172,14 +1176,14 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { await helper.executeExtrinsic(sender, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]); // Balance after reserve transfer is less than 1 SDN - const xcQTZbalance = await helper.assets.account(1, sender.address); + const xcQTZbalance = await helper.assets.account(QTZ_ASSET_ID_ON_SHIDEN, sender.address); const balanceSDN = await helper.balance.getSubstrate(sender.address); console.log(`xcQTZ balance on Shiden after XCM is: ${xcQTZbalance}`); // Assert: xcQTZ balance correctly decreased expect(xcQTZbalance).to.eq(qtzOnShidenLeft); // Assert: SDN balance is 0.996... - expect(balanceSDN / (10n ** 15n)).to.eq(996n); + expect(balanceSDN / (SHIDEN_DECIMALS - 3n)).to.eq(996n); }); await helper.wait.newBlocks(3); diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index 1381440883..a7c73eea67 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -989,6 +989,9 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { let alice: IKeyringPair; let randomAccount: IKeyringPair; + const UNQ_ASSET_ID_ON_SHIDEN = 1; + const UNQ_MINIMAL_BALANCE_ON_SHIDEN = 1n; + // Unique -> Astar const astarInitialBalance = 1n * ASTAR_DECIMALS; // 1 ASTR, existential deposit required to actually create the account on Shiden. const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours? @@ -1010,22 +1013,23 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { await usingAstarPlaygrounds(astarUrl, async (helper) => { console.log('1. Create foreign asset and metadata'); + // TODO update metadata with values from production await helper.assets.create( alice, - 1, + UNQ_ASSET_ID_ON_SHIDEN, alice.address, - 1n, + UNQ_MINIMAL_BALANCE_ON_SHIDEN, ); await helper.assets.setMetadata( alice, - 1, + UNQ_ASSET_ID_ON_SHIDEN, 'Cross chain UNQ', 'xcUNQ', - 18, + Number(UNQ_DECIMALS), ); - console.log('2. Register asset location'); + console.log('2. Register asset location on Astar'); const assetLocation = { V1: { parents: 1, @@ -1037,12 +1041,12 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { }, }; - await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, 1]); + await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, UNQ_ASSET_ID_ON_SHIDEN]); - console.log('3. Set payment for computation'); + console.log('3. Set UNQ payment for XCM execution on Astar'); await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]); - console.log('4. Transfer 1 ASTR to recepient'); + console.log('4. Transfer 1 ASTR to recipient to create the account (needed due to existential balance)'); await helper.balance.transferToSubstrate(alice, randomAccount.address, astarInitialBalance); }); }); @@ -1105,7 +1109,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { await usingAstarPlaygrounds(astarUrl, async (helper) => { await helper.wait.newBlocks(3); - const xcUNQbalance = await helper.assets.account(1, randomAccount.address); + const xcUNQbalance = await helper.assets.account(UNQ_ASSET_ID_ON_SHIDEN, randomAccount.address); const astarBalance = await helper.balance.getSubstrate(randomAccount.address); console.log(`xcUNQ balance on Astar after XCM is: ${xcUNQbalance}`); @@ -1173,14 +1177,14 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { // this is non-standard polkadotXcm extension for Astar only. It calls InitiateReserveWithdraw await helper.executeExtrinsic(randomAccount, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]); - const xcUNQbalance = await helper.assets.account(1, randomAccount.address); + const xcUNQbalance = await helper.assets.account(UNQ_ASSET_ID_ON_SHIDEN, randomAccount.address); const balanceAstar = await helper.balance.getSubstrate(randomAccount.address); console.log(`xcUNQ balance on Astar after XCM is: ${xcUNQbalance}`); // Assert: xcUNQ balance correctly decreased expect(xcUNQbalance).to.eq(unqOnAstarLeft); // Assert: ASTR balance is 0.996... - expect(balanceAstar / (10n ** 15n)).to.eq(996n); + expect(balanceAstar / (ASTAR_DECIMALS - 3n)).to.eq(996n); }); await helper.wait.newBlocks(3); From 951a40f3c73ab92db00f453305867b797afb5c3f Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Thu, 30 Mar 2023 15:54:41 +0000 Subject: [PATCH 070/103] Fix decimals usage --- tests/src/xcm/xcmQuartz.test.ts | 10 +++++----- tests/src/xcm/xcmUnique.test.ts | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index b1f6b24567..082caefa24 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -991,15 +991,15 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { const QTZ_MINIMAL_BALANCE_ON_SHIDEN = 1n; // Quartz -> Shiden - const shidenInitialBalance = 1n * SHIDEN_DECIMALS; // 1 SHD, existential deposit required to actually create the account on Shiden + const shidenInitialBalance = 1n * (10n ** SHIDEN_DECIMALS); // 1 SHD, existential deposit required to actually create the account on Shiden const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours? - const qtzToShidenTransferred = 10n * QTZ_DECIMALS; // 10 QTZ + const qtzToShidenTransferred = 10n * (10n ** QTZ_DECIMALS); // 10 QTZ const qtzToShidenArrived = 9_999_999_999_088_000_000n; // 9.999 ... QTZ, Shiden takes a commision in foreign tokens - const senderIinitialBalanceQTZ = 100n * QTZ_DECIMALS; // How many QTZ sender has initially + const senderIinitialBalanceQTZ = 100n * (10n ** QTZ_DECIMALS); // How many QTZ sender has initially const senderBalanceAfterXCM = 89_941967662676666465n; // 89.94... QTZ after XCM call // Shiden -> Quartz - const qtzFromShidenTransfered = 5n * QTZ_DECIMALS; // 5 QTZ + const qtzFromShidenTransfered = 5n * (10n ** QTZ_DECIMALS); // 5 QTZ const qtzOnShidenLeft = qtzToShidenArrived - qtzFromShidenTransfered; // 4.999_999_999_088_000_000n QTZ before(async () => { @@ -1183,7 +1183,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { // Assert: xcQTZ balance correctly decreased expect(xcQTZbalance).to.eq(qtzOnShidenLeft); // Assert: SDN balance is 0.996... - expect(balanceSDN / (SHIDEN_DECIMALS - 3n)).to.eq(996n); + expect(balanceSDN / (10n ** (SHIDEN_DECIMALS - 3n))).to.eq(996n); }); await helper.wait.newBlocks(3); diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index a7c73eea67..03fc3a3a9c 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -993,15 +993,15 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { const UNQ_MINIMAL_BALANCE_ON_SHIDEN = 1n; // Unique -> Astar - const astarInitialBalance = 1n * ASTAR_DECIMALS; // 1 ASTR, existential deposit required to actually create the account on Shiden. + const astarInitialBalance = 1n * (10n ** ASTAR_DECIMALS); // 1 ASTR, existential deposit required to actually create the account on Shiden. const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours? - const unqToAstarTransferred = 10n * UNQ_DECIMALS; // 10 UNQ + const unqToAstarTransferred = 10n * (10n ** UNQ_DECIMALS); // 10 UNQ const unqToAstarArrived = 9_999_999_999_088_000_000n; // 9.999 ... UNQ, Shiden takes a commision in foreign tokens - const senderIinitialBalanceUNQ = 100n * UNQ_DECIMALS; // How many UNQ sender has initially + const senderIinitialBalanceUNQ = 100n * (10n ** UNQ_DECIMALS); // How many UNQ sender has initially const senderBalanceAfterXCM = 89_941967662676666465n; // 89.94... UNQ after XCM call // Astar -> Unique - const unqFromAstarTransfered = 5n * UNQ_DECIMALS; // 5 UNQ + const unqFromAstarTransfered = 5n * (10n ** UNQ_DECIMALS); // 5 UNQ const unqOnAstarLeft = unqToAstarArrived - unqFromAstarTransfered; // 4.999_999_999_088_000_000n UNQ before(async () => { @@ -1184,7 +1184,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { // Assert: xcUNQ balance correctly decreased expect(xcUNQbalance).to.eq(unqOnAstarLeft); // Assert: ASTR balance is 0.996... - expect(balanceAstar / (ASTAR_DECIMALS - 3n)).to.eq(996n); + expect(balanceAstar / (10n ** (ASTAR_DECIMALS - 3n))).to.eq(996n); }); await helper.wait.newBlocks(3); From 53cde763820f1ae8561bc9714e54ac7bfd3c14a6 Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Thu, 30 Mar 2023 16:34:09 +0000 Subject: [PATCH 071/103] Fix XCM local config --- .../Dockerfile-xcm-quartz-rococo.temp | 5 ++- .../Dockerfile-xcm-unique-rococo.temp | 5 ++- .../docker-compose-xcm-quartz-rococo.yml | 2 + .../docker-compose-xcm-unique-rococo.yml | 2 + .../launch-config-xcm-quartz-rococo.json | 45 +++++++++++++++++-- .../launch-config-xcm-unique-rococo.json | 45 +++++++++++++++++-- 6 files changed, 96 insertions(+), 8 deletions(-) diff --git a/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp b/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp index d28c943da6..65c147a49e 100644 --- a/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp +++ b/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp @@ -2,6 +2,7 @@ FROM uniquenetwork/builder-polkadot:{{ KUSAMA_MAINNET_BRANCH }} as polkadot FROM uniquenetwork/builder-moonbeam:{{ MOONRIVER_BUILD_BRANCH }} as moonbeam FROM uniquenetwork/builder-cumulus:{{ STATEMINE_BUILD_BRANCH }} as cumulus FROM uniquenetwork/builder-acala:{{ KARURA_BUILD_BRANCH }} as acala +FROM uniquenetwork/builder-astar:{{ SHIDEN_BUILD_BRANCH }} as astar # ===== Rust builder ===== FROM ubuntu:22.04 as rust-builder @@ -62,13 +63,14 @@ RUN export NVM_DIR="$HOME/.nvm" && \ yarn install COPY --from=builder-unique /unique_parachain/.docker/additional/xcm-rococo/launch-config-xcm-quartz-rococo.json /polkadot-launch/launch-config.json -COPY --from=builder-unique /unique_parachain/.docker/xcm-config/5validators.jsonnet /polkadot-launch/5validators.jsonnet +COPY --from=builder-unique /unique_parachain/.docker/xcm-config/6validators.jsonnet /polkadot-launch/6validators.jsonnet COPY --from=builder-unique /unique_parachain/target/release/unique-collator /unique-chain/target/release/ COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ COPY --from=moonbeam /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/ COPY --from=cumulus /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus COPY --from=acala /unique_parachain/Acala/target/production/acala /acala/target/release/ +COPY --from=astar /unique_parachain/Astar/target/production/astar /astar/target/release/ COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/ EXPOSE 9844 @@ -76,6 +78,7 @@ EXPOSE 9944 EXPOSE 9946 EXPOSE 9947 EXPOSE 9948 +EXPOSE 9949 CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ diff --git a/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp b/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp index 3b1b66e3f7..a4f8d5ad58 100644 --- a/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp +++ b/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp @@ -2,6 +2,7 @@ FROM uniquenetwork/builder-polkadot:{{ POLKADOT_MAINNET_BRANCH }} as polkadot FROM uniquenetwork/builder-moonbeam:{{ MOONBEAM_BUILD_BRANCH }} as moonbeam FROM uniquenetwork/builder-cumulus:{{ STATEMINT_BUILD_BRANCH }} as cumulus FROM uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} as acala +FROM uniquenetwork/builder-astar:{{ ASTAR_BUILD_BRANCH }} as astar # ===== Rust builder ===== FROM ubuntu:22.04 as rust-builder @@ -62,13 +63,14 @@ RUN export NVM_DIR="$HOME/.nvm" && \ yarn install COPY --from=builder-unique /unique_parachain/.docker/additional/xcm-rococo/launch-config-xcm-unique-rococo.json /polkadot-launch/launch-config.json -COPY --from=builder-unique /unique_parachain/.docker/xcm-config/5validators.jsonnet /polkadot-launch/5validators.jsonnet +COPY --from=builder-unique /unique_parachain/.docker/xcm-config/6validators.jsonnet /polkadot-launch/6validators.jsonnet COPY --from=builder-unique /unique_parachain/target/release/unique-collator /unique-chain/target/release/ COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ COPY --from=moonbeam /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/ COPY --from=cumulus /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus COPY --from=acala /unique_parachain/Acala/target/production/acala /acala/target/release/ +COPY --from=astar /unique_parachain/Astar/target/production/astar /astar/target/release/ COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/ EXPOSE 9844 @@ -76,6 +78,7 @@ EXPOSE 9944 EXPOSE 9946 EXPOSE 9947 EXPOSE 9948 +EXPOSE 9949 CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ diff --git a/.docker/additional/xcm-rococo/docker-compose-xcm-quartz-rococo.yml b/.docker/additional/xcm-rococo/docker-compose-xcm-quartz-rococo.yml index 73ed0ac711..5647e7f0c9 100644 --- a/.docker/additional/xcm-rococo/docker-compose-xcm-quartz-rococo.yml +++ b/.docker/additional/xcm-rococo/docker-compose-xcm-quartz-rococo.yml @@ -13,10 +13,12 @@ services: - 9946 - 9947 - 9948 + - 9949 ports: - 127.0.0.1:9844:9844 - 127.0.0.1:9944:9944 - 127.0.0.1:9946:9946 - 127.0.0.1:9947:9947 - 127.0.0.1:9948:9948 + - 127.0.0.1:9949:9949 diff --git a/.docker/additional/xcm-rococo/docker-compose-xcm-unique-rococo.yml b/.docker/additional/xcm-rococo/docker-compose-xcm-unique-rococo.yml index b25f83548b..a5e8ade288 100644 --- a/.docker/additional/xcm-rococo/docker-compose-xcm-unique-rococo.yml +++ b/.docker/additional/xcm-rococo/docker-compose-xcm-unique-rococo.yml @@ -13,10 +13,12 @@ services: - 9946 - 9947 - 9948 + - 9949 ports: - 127.0.0.1:9844:9844 - 127.0.0.1:9944:9944 - 127.0.0.1:9946:9946 - 127.0.0.1:9947:9947 - 127.0.0.1:9948:9948 + - 127.0.0.1:9949:9949 diff --git a/.docker/additional/xcm-rococo/launch-config-xcm-quartz-rococo.json b/.docker/additional/xcm-rococo/launch-config-xcm-quartz-rococo.json index b20ed85fc5..588757f1d9 100644 --- a/.docker/additional/xcm-rococo/launch-config-xcm-quartz-rococo.json +++ b/.docker/additional/xcm-rococo/launch-config-xcm-quartz-rococo.json @@ -5,7 +5,7 @@ "chainInitializer": [ "chainql", "--tla-code=spec=import '${spec}'", - "5validators.jsonnet" + "6validators.jsonnet" ], "nodes": [ { @@ -62,8 +62,18 @@ "--unsafe-ws-external", "-lparachain::candidate_validation=debug" ] + }, + { + "name": "ferdie", + "wsPort": 9899, + "rpcPort": 9898, + "port": 30999, + "flags": [ + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lparachain::candidate_validation=debug" + ] } - ], "genesis": { "runtime": { @@ -155,6 +165,23 @@ ] } ] + }, + { + "bin": "/astar/target/release/astar", + "id": "2007", + "chain": "shiden-dev", + "balance": "1000000000000000000000000", + "nodes": [ + { + "wsPort": 9949, + "port": 31205, + "name": "alice", + "flags": [ + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + } + ] } ], "simpleParachains": [], @@ -194,7 +221,19 @@ "recipient": 2095, "maxCapacity": 8, "maxMessageSize": 512 - } + }, + { + "sender": 2007, + "recipient": 2095, + "maxCapacity": 8, + "maxMessageSize": 512 + }, + { + "sender": 2095, + "recipient": 2007, + "maxCapacity": 8, + "maxMessageSize": 512 + } ], "finalization": false } diff --git a/.docker/additional/xcm-rococo/launch-config-xcm-unique-rococo.json b/.docker/additional/xcm-rococo/launch-config-xcm-unique-rococo.json index 404df5fb94..94fafd9fb5 100644 --- a/.docker/additional/xcm-rococo/launch-config-xcm-unique-rococo.json +++ b/.docker/additional/xcm-rococo/launch-config-xcm-unique-rococo.json @@ -5,7 +5,7 @@ "chainInitializer": [ "chainql", "--tla-code=spec=import '${spec}'", - "5validators.jsonnet" + "6validators.jsonnet" ], "nodes": [ { @@ -62,8 +62,18 @@ "--unsafe-ws-external", "-lparachain::candidate_validation=debug" ] + }, + { + "name": "ferdie", + "wsPort": 9899, + "rpcPort": 9898, + "port": 30999, + "flags": [ + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lparachain::candidate_validation=debug" + ] } - ], "genesis": { "runtime": { @@ -155,6 +165,23 @@ ] } ] + }, + { + "bin": "/astar/target/release/astar", + "id": "2006", + "chain": "astar-dev", + "balance": "1000000000000000000000000", + "nodes": [ + { + "wsPort": 9949, + "port": 31205, + "name": "alice", + "flags": [ + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + } + ] } ], "simpleParachains": [], @@ -194,7 +221,19 @@ "recipient": 2037, "maxCapacity": 8, "maxMessageSize": 512 - } + }, + { + "sender": 2006, + "recipient": 2037, + "maxCapacity": 8, + "maxMessageSize": 512 + }, + { + "sender": 2037, + "recipient": 2006, + "maxCapacity": 8, + "maxMessageSize": 512 + } ], "finalization": false } From a8f5a1c123e72821ed719ba0c4c2926a4ed57616 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Thu, 30 Mar 2023 20:22:37 +0200 Subject: [PATCH 072/103] fix: rococo xcm docker template --- .docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp | 2 +- .docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp b/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp index 65c147a49e..cc94261f50 100644 --- a/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp +++ b/.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.temp @@ -70,7 +70,7 @@ COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkado COPY --from=moonbeam /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/ COPY --from=cumulus /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus COPY --from=acala /unique_parachain/Acala/target/production/acala /acala/target/release/ -COPY --from=astar /unique_parachain/Astar/target/production/astar /astar/target/release/ +COPY --from=astar /unique_parachain/astar/target/release/astar /astar/target/release/ COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/ EXPOSE 9844 diff --git a/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp b/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp index a4f8d5ad58..ceb017f6df 100644 --- a/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp +++ b/.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.temp @@ -70,7 +70,7 @@ COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkado COPY --from=moonbeam /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/ COPY --from=cumulus /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus COPY --from=acala /unique_parachain/Acala/target/production/acala /acala/target/release/ -COPY --from=astar /unique_parachain/Astar/target/production/astar /astar/target/release/ +COPY --from=astar /unique_parachain/astar/target/release/astar /astar/target/release/ COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/ EXPOSE 9844 From de884669db7ad9e21eb92ff8d8496b034dabfb07 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Thu, 30 Mar 2023 20:23:32 +0200 Subject: [PATCH 073/103] fix: astar xcm tests with xcm v3 --- tests/src/xcm/xcmQuartz.test.ts | 11 +++++++---- tests/src/xcm/xcmUnique.test.ts | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index 082caefa24..2616b32aaf 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -996,7 +996,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { const qtzToShidenTransferred = 10n * (10n ** QTZ_DECIMALS); // 10 QTZ const qtzToShidenArrived = 9_999_999_999_088_000_000n; // 9.999 ... QTZ, Shiden takes a commision in foreign tokens const senderIinitialBalanceQTZ = 100n * (10n ** QTZ_DECIMALS); // How many QTZ sender has initially - const senderBalanceAfterXCM = 89_941967662676666465n; // 89.94... QTZ after XCM call + const senderBalanceAfterXCM = 89_946678090945539197n; // 89.94... QTZ after XCM call // Shiden -> Quartz const qtzFromShidenTransfered = 5n * (10n ** QTZ_DECIMALS); // 5 QTZ @@ -1007,6 +1007,9 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { alice = await privateKey('//Alice'); [sender] = await helper.arrange.createAccounts([100n], alice); console.log('sender', sender.address); + + // Set the default version to wrap the first message to other chains. + await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); }); await usingShidenPlaygrounds(shidenUrl, async (helper) => { @@ -1051,7 +1054,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { itSub('Should connect and send QTZ to Shiden', async ({helper}) => { const destination = { - V1: { + V2: { parents: 1, interior: { X1: { @@ -1062,7 +1065,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { }; const beneficiary = { - V1: { + V2: { parents: 0, interior: { X1: { @@ -1076,7 +1079,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index 03fc3a3a9c..c78ed4fce5 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -998,7 +998,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { const unqToAstarTransferred = 10n * (10n ** UNQ_DECIMALS); // 10 UNQ const unqToAstarArrived = 9_999_999_999_088_000_000n; // 9.999 ... UNQ, Shiden takes a commision in foreign tokens const senderIinitialBalanceUNQ = 100n * (10n ** UNQ_DECIMALS); // How many UNQ sender has initially - const senderBalanceAfterXCM = 89_941967662676666465n; // 89.94... UNQ after XCM call + const senderBalanceAfterXCM = 89_946678090945539197n; // 89.94... UNQ after XCM call // Astar -> Unique const unqFromAstarTransfered = 5n * (10n ** UNQ_DECIMALS); // 5 UNQ @@ -1009,6 +1009,9 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { alice = await privateKey('//Alice'); [randomAccount] = await helper.arrange.createAccounts([100n], alice); console.log('randomAccount', randomAccount.address); + + // Set the default version to wrap the first message to other chains. + await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); }); await usingAstarPlaygrounds(astarUrl, async (helper) => { @@ -1053,7 +1056,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { itSub('Should connect and send UNQ to Astar', async ({helper}) => { const destination = { - V1: { + V2: { parents: 1, interior: { X1: { @@ -1064,7 +1067,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { }; const beneficiary = { - V1: { + V2: { parents: 0, interior: { X1: { @@ -1078,7 +1081,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { From f19958520218e5a7c7b4ba8ec13d985a2c95fefd Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 30 Mar 2023 21:47:52 +0200 Subject: [PATCH 074/103] build: run benchmarks --- pallets/common/src/weights.rs | 79 +- pallets/configuration/src/weights.rs | 150 ++- pallets/evm-migration/src/weights.rs | 173 ++-- pallets/foreign-assets/src/weights.rs | 125 ++- pallets/fungible/src/weights.rs | 287 ++++-- pallets/maintenance/src/weights.rs | 79 +- pallets/nonfungible/src/weights.rs | 921 +++++++++++------- pallets/refungible/src/weights.rs | 1233 ++++++++++++++++--------- pallets/structure/src/weights.rs | 35 +- pallets/unique/src/weights.rs | 451 ++++++--- primitives/common/src/constants.rs | 4 +- runtime/common/weights/xcm.rs | 152 +-- 12 files changed, 2457 insertions(+), 1232 deletions(-) diff --git a/pallets/common/src/weights.rs b/pallets/common/src/weights.rs index b79c93c50a..5db4e2b8e2 100644 --- a/pallets/common/src/weights.rs +++ b/pallets/common/src/weights.rs @@ -3,7 +3,8 @@ //! Autogenerated weights for pallet_common //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-02-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-03-30, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -16,8 +17,7 @@ // compiled // --extrinsic // * -// --template -// .maintain/frame-weight-template.hbs +// --template=.maintain/frame-weight-template.hbs // --steps=50 // --repeat=80 // --heap-pages=4096 @@ -41,40 +41,65 @@ pub trait WeightInfo { /// Weights for pallet_common using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - // Storage: Common CollectionProperties (r:1 w:1) + /// Storage: Common CollectionProperties (r:1 w:1) + /// Proof: Common CollectionProperties (max_values: None, max_size: Some(40992), added: 43467, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn set_collection_properties(b: u32, ) -> Weight { - Weight::from_ref_time(9_293_000 as u64) - // Standard Error: 14_275 - .saturating_add(Weight::from_ref_time(6_172_391 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `265` + // Estimated: `43467` + // Minimum execution time: 7_163_000 picoseconds. + Weight::from_parts(586_898, 43467) + // Standard Error: 23_783 + .saturating_add(Weight::from_parts(6_089_494, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Common CollectionProperties (r:1 w:1) + /// Storage: Common CollectionProperties (r:1 w:1) + /// Proof: Common CollectionProperties (max_values: None, max_size: Some(40992), added: 43467, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn delete_collection_properties(b: u32, ) -> Weight { - Weight::from_ref_time(8_945_000 as u64) - // Standard Error: 65_313 - .saturating_add(Weight::from_ref_time(21_617_763 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `302 + b * (33030 ±0)` + // Estimated: `43467` + // Minimum execution time: 6_540_000 picoseconds. + Weight::from_parts(6_684_000, 43467) + // Standard Error: 67_984 + .saturating_add(Weight::from_parts(21_502_829, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } } // For backwards compatibility and tests impl WeightInfo for () { - // Storage: Common CollectionProperties (r:1 w:1) + /// Storage: Common CollectionProperties (r:1 w:1) + /// Proof: Common CollectionProperties (max_values: None, max_size: Some(40992), added: 43467, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn set_collection_properties(b: u32, ) -> Weight { - Weight::from_ref_time(9_293_000 as u64) - // Standard Error: 14_275 - .saturating_add(Weight::from_ref_time(6_172_391 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `265` + // Estimated: `43467` + // Minimum execution time: 7_163_000 picoseconds. + Weight::from_parts(586_898, 43467) + // Standard Error: 23_783 + .saturating_add(Weight::from_parts(6_089_494, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Common CollectionProperties (r:1 w:1) + /// Storage: Common CollectionProperties (r:1 w:1) + /// Proof: Common CollectionProperties (max_values: None, max_size: Some(40992), added: 43467, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn delete_collection_properties(b: u32, ) -> Weight { - Weight::from_ref_time(8_945_000 as u64) - // Standard Error: 65_313 - .saturating_add(Weight::from_ref_time(21_617_763 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `302 + b * (33030 ±0)` + // Estimated: `43467` + // Minimum execution time: 6_540_000 picoseconds. + Weight::from_parts(6_684_000, 43467) + // Standard Error: 67_984 + .saturating_add(Weight::from_parts(21_502_829, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } } + diff --git a/pallets/configuration/src/weights.rs b/pallets/configuration/src/weights.rs index 0f62c1fd5f..8b12778430 100644 --- a/pallets/configuration/src/weights.rs +++ b/pallets/configuration/src/weights.rs @@ -3,7 +3,8 @@ //! Autogenerated weights for pallet_configuration //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-02-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-03-30, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -16,8 +17,7 @@ // compiled // --extrinsic // * -// --template -// .maintain/frame-weight-template.hbs +// --template=.maintain/frame-weight-template.hbs // --steps=50 // --repeat=80 // --heap-pages=4096 @@ -36,7 +36,6 @@ use sp_std::marker::PhantomData; pub trait WeightInfo { fn set_weight_to_fee_coefficient_override() -> Weight; fn set_min_gas_price_override() -> Weight; - fn set_xcm_allowed_locations() -> Weight; fn set_app_promotion_configuration_override() -> Weight; fn set_collator_selection_desired_collators() -> Weight; fn set_collator_selection_license_bond() -> Weight; @@ -46,78 +45,129 @@ pub trait WeightInfo { /// Weights for pallet_configuration using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - // Storage: Configuration WeightToFeeCoefficientOverride (r:0 w:1) + /// Storage: Configuration WeightToFeeCoefficientOverride (r:0 w:1) + /// Proof: Configuration WeightToFeeCoefficientOverride (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set_weight_to_fee_coefficient_override() -> Weight { - Weight::from_ref_time(3_732_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_565_000 picoseconds. + Weight::from_parts(1_636_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Configuration MinGasPriceOverride (r:0 w:1) + /// Storage: Configuration MinGasPriceOverride (r:0 w:1) + /// Proof: Configuration MinGasPriceOverride (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set_min_gas_price_override() -> Weight { - Weight::from_ref_time(3_625_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_695_000 picoseconds. + Weight::from_parts(1_798_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Configuration XcmAllowedLocationsOverride (r:0 w:1) - fn set_xcm_allowed_locations() -> Weight { - Weight::from_ref_time(3_975_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Configuration AppPromomotionConfigurationOverride (r:0 w:1) + /// Storage: Configuration AppPromomotionConfigurationOverride (r:0 w:1) + /// Proof: Configuration AppPromomotionConfigurationOverride (max_values: Some(1), max_size: Some(17), added: 512, mode: MaxEncodedLen) fn set_app_promotion_configuration_override() -> Weight { - Weight::from_ref_time(4_759_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_546_000 picoseconds. + Weight::from_parts(2_796_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Configuration CollatorSelectionDesiredCollatorsOverride (r:0 w:1) + /// Storage: Configuration CollatorSelectionDesiredCollatorsOverride (r:0 w:1) + /// Proof: Configuration CollatorSelectionDesiredCollatorsOverride (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_collator_selection_desired_collators() -> Weight { - Weight::from_ref_time(18_296_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_323_000 picoseconds. + Weight::from_parts(8_251_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Configuration CollatorSelectionLicenseBondOverride (r:0 w:1) + /// Storage: Configuration CollatorSelectionLicenseBondOverride (r:0 w:1) + /// Proof: Configuration CollatorSelectionLicenseBondOverride (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_collator_selection_license_bond() -> Weight { - Weight::from_ref_time(14_397_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_286_000 picoseconds. + Weight::from_parts(4_442_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Configuration CollatorSelectionKickThresholdOverride (r:0 w:1) + /// Storage: Configuration CollatorSelectionKickThresholdOverride (r:0 w:1) + /// Proof: Configuration CollatorSelectionKickThresholdOverride (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_collator_selection_kick_threshold() -> Weight { - Weight::from_ref_time(13_951_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_216_000 picoseconds. + Weight::from_parts(4_389_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) } } // For backwards compatibility and tests impl WeightInfo for () { - // Storage: Configuration WeightToFeeCoefficientOverride (r:0 w:1) + /// Storage: Configuration WeightToFeeCoefficientOverride (r:0 w:1) + /// Proof: Configuration WeightToFeeCoefficientOverride (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set_weight_to_fee_coefficient_override() -> Weight { - Weight::from_ref_time(3_732_000 as u64) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_565_000 picoseconds. + Weight::from_parts(1_636_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Configuration MinGasPriceOverride (r:0 w:1) + /// Storage: Configuration MinGasPriceOverride (r:0 w:1) + /// Proof: Configuration MinGasPriceOverride (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set_min_gas_price_override() -> Weight { - Weight::from_ref_time(3_625_000 as u64) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Configuration XcmAllowedLocationsOverride (r:0 w:1) - fn set_xcm_allowed_locations() -> Weight { - Weight::from_ref_time(3_975_000 as u64) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_695_000 picoseconds. + Weight::from_parts(1_798_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Configuration AppPromomotionConfigurationOverride (r:0 w:1) + /// Storage: Configuration AppPromomotionConfigurationOverride (r:0 w:1) + /// Proof: Configuration AppPromomotionConfigurationOverride (max_values: Some(1), max_size: Some(17), added: 512, mode: MaxEncodedLen) fn set_app_promotion_configuration_override() -> Weight { - Weight::from_ref_time(4_759_000 as u64) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_546_000 picoseconds. + Weight::from_parts(2_796_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Configuration CollatorSelectionDesiredCollatorsOverride (r:0 w:1) + /// Storage: Configuration CollatorSelectionDesiredCollatorsOverride (r:0 w:1) + /// Proof: Configuration CollatorSelectionDesiredCollatorsOverride (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_collator_selection_desired_collators() -> Weight { - Weight::from_ref_time(18_296_000 as u64) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_323_000 picoseconds. + Weight::from_parts(8_251_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Configuration CollatorSelectionLicenseBondOverride (r:0 w:1) + /// Storage: Configuration CollatorSelectionLicenseBondOverride (r:0 w:1) + /// Proof: Configuration CollatorSelectionLicenseBondOverride (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_collator_selection_license_bond() -> Weight { - Weight::from_ref_time(14_397_000 as u64) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_286_000 picoseconds. + Weight::from_parts(4_442_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Configuration CollatorSelectionKickThresholdOverride (r:0 w:1) + /// Storage: Configuration CollatorSelectionKickThresholdOverride (r:0 w:1) + /// Proof: Configuration CollatorSelectionKickThresholdOverride (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_collator_selection_kick_threshold() -> Weight { - Weight::from_ref_time(13_951_000 as u64) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_216_000 picoseconds. + Weight::from_parts(4_389_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } } + diff --git a/pallets/evm-migration/src/weights.rs b/pallets/evm-migration/src/weights.rs index 75dfdcf011..e92cabf32a 100644 --- a/pallets/evm-migration/src/weights.rs +++ b/pallets/evm-migration/src/weights.rs @@ -3,7 +3,8 @@ //! Autogenerated weights for pallet_evm_migration //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-02-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-03-30, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -16,8 +17,7 @@ // compiled // --extrinsic // * -// --template -// .maintain/frame-weight-template.hbs +// --template=.maintain/frame-weight-template.hbs // --steps=50 // --repeat=80 // --heap-pages=4096 @@ -44,80 +44,143 @@ pub trait WeightInfo { /// Weights for pallet_evm_migration using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - // Storage: EvmMigration MigrationPending (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: EVM AccountCodes (r:1 w:0) + /// Storage: EvmMigration MigrationPending (r:1 w:1) + /// Proof: EvmMigration MigrationPending (max_values: None, max_size: Some(29), added: 2504, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: EVM AccountCodes (r:1 w:0) + /// Proof Skipped: EVM AccountCodes (max_values: None, max_size: None, mode: Measured) fn begin() -> Weight { - Weight::from_ref_time(16_052_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `94` + // Estimated: `7676` + // Minimum execution time: 12_699_000 picoseconds. + Weight::from_parts(12_989_000, 7676) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: EvmMigration MigrationPending (r:1 w:0) - // Storage: EVM AccountStorages (r:0 w:1) + /// Storage: EvmMigration MigrationPending (r:1 w:0) + /// Proof: EvmMigration MigrationPending (max_values: None, max_size: Some(29), added: 2504, mode: MaxEncodedLen) + /// Storage: EVM AccountStorages (r:0 w:80) + /// Proof Skipped: EVM AccountStorages (max_values: None, max_size: None, mode: Measured) + /// The range of component `b` is `[0, 80]`. fn set_data(b: u32, ) -> Weight { - Weight::from_ref_time(9_257_564 as u64) - // Standard Error: 1_384 - .saturating_add(Weight::from_ref_time(939_454 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(b as u64))) + // Proof Size summary in bytes: + // Measured: `96` + // Estimated: `2600` + // Minimum execution time: 9_157_000 picoseconds. + Weight::from_parts(7_442_065, 2600) + // Standard Error: 1_138 + .saturating_add(Weight::from_parts(934_789, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) } - // Storage: EvmMigration MigrationPending (r:1 w:1) - // Storage: EVM AccountCodes (r:0 w:1) + /// Storage: EvmMigration MigrationPending (r:1 w:1) + /// Proof: EvmMigration MigrationPending (max_values: None, max_size: Some(29), added: 2504, mode: MaxEncodedLen) + /// Storage: EVM AccountCodes (r:0 w:1) + /// Proof Skipped: EVM AccountCodes (max_values: None, max_size: None, mode: Measured) + /// The range of component `b` is `[0, 80]`. fn finish(b: u32, ) -> Weight { - Weight::from_ref_time(9_832_338 as u64) - // Standard Error: 351 - .saturating_add(Weight::from_ref_time(415 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `96` + // Estimated: `2600` + // Minimum execution time: 7_719_000 picoseconds. + Weight::from_parts(8_237_929, 2600) + // Standard Error: 266 + .saturating_add(Weight::from_parts(3_473, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } + /// The range of component `b` is `[0, 200]`. fn insert_eth_logs(b: u32, ) -> Weight { - Weight::from_ref_time(7_589_210 as u64) - // Standard Error: 864 - .saturating_add(Weight::from_ref_time(688_444 as u64).saturating_mul(b as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_193_000 picoseconds. + Weight::from_parts(2_667_314, 0) + // Standard Error: 583 + .saturating_add(Weight::from_parts(690_704, 0).saturating_mul(b.into())) } + /// The range of component `b` is `[0, 200]`. fn insert_events(b: u32, ) -> Weight { - Weight::from_ref_time(11_531_726 as u64) - // Standard Error: 580 - .saturating_add(Weight::from_ref_time(1_271_608 as u64).saturating_mul(b as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_253_000 picoseconds. + Weight::from_parts(4_685_069, 0) + // Standard Error: 1_036 + .saturating_add(Weight::from_parts(1_322_329, 0).saturating_mul(b.into())) } } // For backwards compatibility and tests impl WeightInfo for () { - // Storage: EvmMigration MigrationPending (r:1 w:1) - // Storage: System Account (r:1 w:0) - // Storage: EVM AccountCodes (r:1 w:0) + /// Storage: EvmMigration MigrationPending (r:1 w:1) + /// Proof: EvmMigration MigrationPending (max_values: None, max_size: Some(29), added: 2504, mode: MaxEncodedLen) + /// Storage: System Account (r:1 w:0) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: EVM AccountCodes (r:1 w:0) + /// Proof Skipped: EVM AccountCodes (max_values: None, max_size: None, mode: Measured) fn begin() -> Weight { - Weight::from_ref_time(16_052_000 as u64) - .saturating_add(RocksDbWeight::get().reads(3 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `94` + // Estimated: `7676` + // Minimum execution time: 12_699_000 picoseconds. + Weight::from_parts(12_989_000, 7676) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: EvmMigration MigrationPending (r:1 w:0) - // Storage: EVM AccountStorages (r:0 w:1) + /// Storage: EvmMigration MigrationPending (r:1 w:0) + /// Proof: EvmMigration MigrationPending (max_values: None, max_size: Some(29), added: 2504, mode: MaxEncodedLen) + /// Storage: EVM AccountStorages (r:0 w:80) + /// Proof Skipped: EVM AccountStorages (max_values: None, max_size: None, mode: Measured) + /// The range of component `b` is `[0, 80]`. fn set_data(b: u32, ) -> Weight { - Weight::from_ref_time(9_257_564 as u64) - // Standard Error: 1_384 - .saturating_add(Weight::from_ref_time(939_454 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes((1 as u64).saturating_mul(b as u64))) + // Proof Size summary in bytes: + // Measured: `96` + // Estimated: `2600` + // Minimum execution time: 9_157_000 picoseconds. + Weight::from_parts(7_442_065, 2600) + // Standard Error: 1_138 + .saturating_add(Weight::from_parts(934_789, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(b.into()))) } - // Storage: EvmMigration MigrationPending (r:1 w:1) - // Storage: EVM AccountCodes (r:0 w:1) + /// Storage: EvmMigration MigrationPending (r:1 w:1) + /// Proof: EvmMigration MigrationPending (max_values: None, max_size: Some(29), added: 2504, mode: MaxEncodedLen) + /// Storage: EVM AccountCodes (r:0 w:1) + /// Proof Skipped: EVM AccountCodes (max_values: None, max_size: None, mode: Measured) + /// The range of component `b` is `[0, 80]`. fn finish(b: u32, ) -> Weight { - Weight::from_ref_time(9_832_338 as u64) - // Standard Error: 351 - .saturating_add(Weight::from_ref_time(415 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `96` + // Estimated: `2600` + // Minimum execution time: 7_719_000 picoseconds. + Weight::from_parts(8_237_929, 2600) + // Standard Error: 266 + .saturating_add(Weight::from_parts(3_473, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) } + /// The range of component `b` is `[0, 200]`. fn insert_eth_logs(b: u32, ) -> Weight { - Weight::from_ref_time(7_589_210 as u64) - // Standard Error: 864 - .saturating_add(Weight::from_ref_time(688_444 as u64).saturating_mul(b as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_193_000 picoseconds. + Weight::from_parts(2_667_314, 0) + // Standard Error: 583 + .saturating_add(Weight::from_parts(690_704, 0).saturating_mul(b.into())) } + /// The range of component `b` is `[0, 200]`. fn insert_events(b: u32, ) -> Weight { - Weight::from_ref_time(11_531_726 as u64) - // Standard Error: 580 - .saturating_add(Weight::from_ref_time(1_271_608 as u64).saturating_mul(b as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_253_000 picoseconds. + Weight::from_parts(4_685_069, 0) + // Standard Error: 1_036 + .saturating_add(Weight::from_parts(1_322_329, 0).saturating_mul(b.into())) } } + diff --git a/pallets/foreign-assets/src/weights.rs b/pallets/foreign-assets/src/weights.rs index 5767ab16be..64115a6575 100644 --- a/pallets/foreign-assets/src/weights.rs +++ b/pallets/foreign-assets/src/weights.rs @@ -3,7 +3,8 @@ //! Autogenerated weights for pallet_foreign_assets //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-02-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-03-30, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -16,8 +17,7 @@ // compiled // --extrinsic // * -// --template -// .maintain/frame-weight-template.hbs +// --template=.maintain/frame-weight-template.hbs // --steps=50 // --repeat=80 // --heap-pages=4096 @@ -41,54 +41,97 @@ pub trait WeightInfo { /// Weights for pallet_foreign_assets using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - // Storage: Common CreatedCollectionCount (r:1 w:1) - // Storage: Common DestroyedCollectionCount (r:1 w:0) - // Storage: System Account (r:2 w:2) - // Storage: ForeignAssets NextForeignAssetId (r:1 w:1) - // Storage: ForeignAssets LocationToCurrencyIds (r:1 w:1) - // Storage: ForeignAssets ForeignAssetLocations (r:1 w:1) - // Storage: ForeignAssets AssetMetadatas (r:1 w:1) - // Storage: ForeignAssets AssetBinding (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:0 w:1) - // Storage: Common CollectionProperties (r:0 w:1) - // Storage: Common CollectionById (r:0 w:1) + /// Storage: Common CreatedCollectionCount (r:1 w:1) + /// Proof: Common CreatedCollectionCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Common DestroyedCollectionCount (r:1 w:0) + /// Proof: Common DestroyedCollectionCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ForeignAssets NextForeignAssetId (r:1 w:1) + /// Proof: ForeignAssets NextForeignAssetId (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: ForeignAssets LocationToCurrencyIds (r:1 w:1) + /// Proof: ForeignAssets LocationToCurrencyIds (max_values: None, max_size: Some(614), added: 3089, mode: MaxEncodedLen) + /// Storage: ForeignAssets ForeignAssetLocations (r:1 w:1) + /// Proof: ForeignAssets ForeignAssetLocations (max_values: None, max_size: Some(614), added: 3089, mode: MaxEncodedLen) + /// Storage: ForeignAssets AssetMetadatas (r:1 w:1) + /// Proof: ForeignAssets AssetMetadatas (max_values: None, max_size: Some(71), added: 2546, mode: MaxEncodedLen) + /// Storage: ForeignAssets AssetBinding (r:1 w:1) + /// Proof: ForeignAssets AssetBinding (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:0 w:1) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Common CollectionProperties (r:0 w:1) + /// Proof: Common CollectionProperties (max_values: None, max_size: Some(40992), added: 43467, mode: MaxEncodedLen) + /// Storage: Common CollectionById (r:0 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn register_foreign_asset() -> Weight { - Weight::from_ref_time(49_269_000 as u64) - .saturating_add(T::DbWeight::get().reads(9 as u64)) - .saturating_add(T::DbWeight::get().writes(11 as u64)) + // Proof Size summary in bytes: + // Measured: `318` + // Estimated: `17918` + // Minimum execution time: 45_521_000 picoseconds. + Weight::from_parts(46_333_000, 17918) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().writes(11_u64)) } - // Storage: ForeignAssets ForeignAssetLocations (r:1 w:1) - // Storage: ForeignAssets AssetMetadatas (r:1 w:1) + /// Storage: ForeignAssets ForeignAssetLocations (r:1 w:1) + /// Proof: ForeignAssets ForeignAssetLocations (max_values: None, max_size: Some(614), added: 3089, mode: MaxEncodedLen) + /// Storage: ForeignAssets AssetMetadatas (r:1 w:1) + /// Proof: ForeignAssets AssetMetadatas (max_values: None, max_size: Some(71), added: 2546, mode: MaxEncodedLen) fn update_foreign_asset() -> Weight { - Weight::from_ref_time(21_973_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `197` + // Estimated: `5635` + // Minimum execution time: 13_542_000 picoseconds. + Weight::from_parts(13_913_000, 5635) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } } // For backwards compatibility and tests impl WeightInfo for () { - // Storage: Common CreatedCollectionCount (r:1 w:1) - // Storage: Common DestroyedCollectionCount (r:1 w:0) - // Storage: System Account (r:2 w:2) - // Storage: ForeignAssets NextForeignAssetId (r:1 w:1) - // Storage: ForeignAssets LocationToCurrencyIds (r:1 w:1) - // Storage: ForeignAssets ForeignAssetLocations (r:1 w:1) - // Storage: ForeignAssets AssetMetadatas (r:1 w:1) - // Storage: ForeignAssets AssetBinding (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:0 w:1) - // Storage: Common CollectionProperties (r:0 w:1) - // Storage: Common CollectionById (r:0 w:1) + /// Storage: Common CreatedCollectionCount (r:1 w:1) + /// Proof: Common CreatedCollectionCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Common DestroyedCollectionCount (r:1 w:0) + /// Proof: Common DestroyedCollectionCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: ForeignAssets NextForeignAssetId (r:1 w:1) + /// Proof: ForeignAssets NextForeignAssetId (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: ForeignAssets LocationToCurrencyIds (r:1 w:1) + /// Proof: ForeignAssets LocationToCurrencyIds (max_values: None, max_size: Some(614), added: 3089, mode: MaxEncodedLen) + /// Storage: ForeignAssets ForeignAssetLocations (r:1 w:1) + /// Proof: ForeignAssets ForeignAssetLocations (max_values: None, max_size: Some(614), added: 3089, mode: MaxEncodedLen) + /// Storage: ForeignAssets AssetMetadatas (r:1 w:1) + /// Proof: ForeignAssets AssetMetadatas (max_values: None, max_size: Some(71), added: 2546, mode: MaxEncodedLen) + /// Storage: ForeignAssets AssetBinding (r:1 w:1) + /// Proof: ForeignAssets AssetBinding (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:0 w:1) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Common CollectionProperties (r:0 w:1) + /// Proof: Common CollectionProperties (max_values: None, max_size: Some(40992), added: 43467, mode: MaxEncodedLen) + /// Storage: Common CollectionById (r:0 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn register_foreign_asset() -> Weight { - Weight::from_ref_time(49_269_000 as u64) - .saturating_add(RocksDbWeight::get().reads(9 as u64)) - .saturating_add(RocksDbWeight::get().writes(11 as u64)) + // Proof Size summary in bytes: + // Measured: `318` + // Estimated: `17918` + // Minimum execution time: 45_521_000 picoseconds. + Weight::from_parts(46_333_000, 17918) + .saturating_add(RocksDbWeight::get().reads(9_u64)) + .saturating_add(RocksDbWeight::get().writes(11_u64)) } - // Storage: ForeignAssets ForeignAssetLocations (r:1 w:1) - // Storage: ForeignAssets AssetMetadatas (r:1 w:1) + /// Storage: ForeignAssets ForeignAssetLocations (r:1 w:1) + /// Proof: ForeignAssets ForeignAssetLocations (max_values: None, max_size: Some(614), added: 3089, mode: MaxEncodedLen) + /// Storage: ForeignAssets AssetMetadatas (r:1 w:1) + /// Proof: ForeignAssets AssetMetadatas (max_values: None, max_size: Some(71), added: 2546, mode: MaxEncodedLen) fn update_foreign_asset() -> Weight { - Weight::from_ref_time(21_973_000 as u64) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `197` + // Estimated: `5635` + // Minimum execution time: 13_542_000 picoseconds. + Weight::from_parts(13_913_000, 5635) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) } } + diff --git a/pallets/fungible/src/weights.rs b/pallets/fungible/src/weights.rs index 48fe199d23..a94c79d585 100644 --- a/pallets/fungible/src/weights.rs +++ b/pallets/fungible/src/weights.rs @@ -3,7 +3,8 @@ //! Autogenerated weights for pallet_fungible //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-02-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-03-30, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -16,8 +17,7 @@ // compiled // --extrinsic // * -// --template -// .maintain/frame-weight-template.hbs +// --template=.maintain/frame-weight-template.hbs // --steps=50 // --repeat=80 // --heap-pages=4096 @@ -47,128 +47,229 @@ pub trait WeightInfo { /// Weights for pallet_fungible using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - // Storage: Fungible TotalSupply (r:1 w:1) - // Storage: Fungible Balance (r:1 w:1) + /// Storage: Fungible TotalSupply (r:1 w:1) + /// Proof: Fungible TotalSupply (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Fungible Balance (r:1 w:1) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) fn create_item() -> Weight { - Weight::from_ref_time(19_423_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `42` + // Estimated: `5055` + // Minimum execution time: 10_152_000 picoseconds. + Weight::from_parts(10_520_000, 5055) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } - // Storage: Fungible TotalSupply (r:1 w:1) - // Storage: Fungible Balance (r:4 w:4) + /// Storage: Fungible TotalSupply (r:1 w:1) + /// Proof: Fungible TotalSupply (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Fungible Balance (r:200 w:200) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn create_multiple_items_ex(b: u32, ) -> Weight { - Weight::from_ref_time(23_426_461 as u64) - // Standard Error: 1_942 - .saturating_add(Weight::from_ref_time(3_459_389 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(b as u64))) - } - // Storage: Fungible TotalSupply (r:1 w:1) - // Storage: Fungible Balance (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `42` + // Estimated: `2503 + b * (2552 ±0)` + // Minimum execution time: 3_437_000 picoseconds. + Weight::from_parts(13_322_752, 2503) + // Standard Error: 1_728 + .saturating_add(Weight::from_parts(3_605_522, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 2552).saturating_mul(b.into())) + } + /// Storage: Fungible TotalSupply (r:1 w:1) + /// Proof: Fungible TotalSupply (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Fungible Balance (r:1 w:1) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) fn burn_item() -> Weight { - Weight::from_ref_time(22_600_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `197` + // Estimated: `5055` + // Minimum execution time: 12_894_000 picoseconds. + Weight::from_parts(13_347_000, 5055) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } - // Storage: Fungible Balance (r:2 w:2) + /// Storage: Fungible Balance (r:2 w:2) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) fn transfer() -> Weight { - Weight::from_ref_time(24_015_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `182` + // Estimated: `5104` + // Minimum execution time: 13_832_000 picoseconds. + Weight::from_parts(14_064_000, 5104) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } - // Storage: Fungible Balance (r:1 w:0) - // Storage: Fungible Allowance (r:0 w:1) + /// Storage: Fungible Balance (r:1 w:0) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + /// Storage: Fungible Allowance (r:0 w:1) + /// Proof: Fungible Allowance (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) fn approve() -> Weight { - Weight::from_ref_time(22_478_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `182` + // Estimated: `2552` + // Minimum execution time: 12_417_000 picoseconds. + Weight::from_parts(12_658_000, 2552) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Fungible Balance (r:1 w:0) - // Storage: Fungible Allowance (r:0 w:1) + /// Storage: Fungible Balance (r:1 w:0) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + /// Storage: Fungible Allowance (r:0 w:1) + /// Proof: Fungible Allowance (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) fn approve_from() -> Weight { - Weight::from_ref_time(22_522_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `170` + // Estimated: `2552` + // Minimum execution time: 12_322_000 picoseconds. + Weight::from_parts(12_629_000, 2552) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Fungible Allowance (r:1 w:1) - // Storage: Fungible Balance (r:2 w:2) + /// Storage: Fungible Allowance (r:1 w:1) + /// Proof: Fungible Allowance (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) + /// Storage: Fungible Balance (r:2 w:2) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) fn transfer_from() -> Weight { - Weight::from_ref_time(32_061_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) + // Proof Size summary in bytes: + // Measured: `300` + // Estimated: `7672` + // Minimum execution time: 21_667_000 picoseconds. + Weight::from_parts(22_166_000, 7672) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } - // Storage: Fungible Allowance (r:1 w:1) - // Storage: Fungible TotalSupply (r:1 w:1) - // Storage: Fungible Balance (r:1 w:1) + /// Storage: Fungible Allowance (r:1 w:1) + /// Proof: Fungible Allowance (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) + /// Storage: Fungible TotalSupply (r:1 w:1) + /// Proof: Fungible TotalSupply (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Fungible Balance (r:1 w:1) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) fn burn_from() -> Weight { - Weight::from_ref_time(32_115_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) + // Proof Size summary in bytes: + // Measured: `315` + // Estimated: `7623` + // Minimum execution time: 21_271_000 picoseconds. + Weight::from_parts(21_709_000, 7623) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } } // For backwards compatibility and tests impl WeightInfo for () { - // Storage: Fungible TotalSupply (r:1 w:1) - // Storage: Fungible Balance (r:1 w:1) + /// Storage: Fungible TotalSupply (r:1 w:1) + /// Proof: Fungible TotalSupply (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Fungible Balance (r:1 w:1) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) fn create_item() -> Weight { - Weight::from_ref_time(19_423_000 as u64) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `42` + // Estimated: `5055` + // Minimum execution time: 10_152_000 picoseconds. + Weight::from_parts(10_520_000, 5055) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) } - // Storage: Fungible TotalSupply (r:1 w:1) - // Storage: Fungible Balance (r:4 w:4) + /// Storage: Fungible TotalSupply (r:1 w:1) + /// Proof: Fungible TotalSupply (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Fungible Balance (r:200 w:200) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn create_multiple_items_ex(b: u32, ) -> Weight { - Weight::from_ref_time(23_426_461 as u64) - // Standard Error: 1_942 - .saturating_add(Weight::from_ref_time(3_459_389 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - .saturating_add(RocksDbWeight::get().writes((1 as u64).saturating_mul(b as u64))) - } - // Storage: Fungible TotalSupply (r:1 w:1) - // Storage: Fungible Balance (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `42` + // Estimated: `2503 + b * (2552 ±0)` + // Minimum execution time: 3_437_000 picoseconds. + Weight::from_parts(13_322_752, 2503) + // Standard Error: 1_728 + .saturating_add(Weight::from_parts(3_605_522, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 2552).saturating_mul(b.into())) + } + /// Storage: Fungible TotalSupply (r:1 w:1) + /// Proof: Fungible TotalSupply (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Fungible Balance (r:1 w:1) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) fn burn_item() -> Weight { - Weight::from_ref_time(22_600_000 as u64) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `197` + // Estimated: `5055` + // Minimum execution time: 12_894_000 picoseconds. + Weight::from_parts(13_347_000, 5055) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) } - // Storage: Fungible Balance (r:2 w:2) + /// Storage: Fungible Balance (r:2 w:2) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) fn transfer() -> Weight { - Weight::from_ref_time(24_015_000 as u64) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `182` + // Estimated: `5104` + // Minimum execution time: 13_832_000 picoseconds. + Weight::from_parts(14_064_000, 5104) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) } - // Storage: Fungible Balance (r:1 w:0) - // Storage: Fungible Allowance (r:0 w:1) + /// Storage: Fungible Balance (r:1 w:0) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + /// Storage: Fungible Allowance (r:0 w:1) + /// Proof: Fungible Allowance (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) fn approve() -> Weight { - Weight::from_ref_time(22_478_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `182` + // Estimated: `2552` + // Minimum execution time: 12_417_000 picoseconds. + Weight::from_parts(12_658_000, 2552) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Fungible Balance (r:1 w:0) - // Storage: Fungible Allowance (r:0 w:1) + /// Storage: Fungible Balance (r:1 w:0) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + /// Storage: Fungible Allowance (r:0 w:1) + /// Proof: Fungible Allowance (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) fn approve_from() -> Weight { - Weight::from_ref_time(22_522_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `170` + // Estimated: `2552` + // Minimum execution time: 12_322_000 picoseconds. + Weight::from_parts(12_629_000, 2552) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Fungible Allowance (r:1 w:1) - // Storage: Fungible Balance (r:2 w:2) + /// Storage: Fungible Allowance (r:1 w:1) + /// Proof: Fungible Allowance (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) + /// Storage: Fungible Balance (r:2 w:2) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) fn transfer_from() -> Weight { - Weight::from_ref_time(32_061_000 as u64) - .saturating_add(RocksDbWeight::get().reads(3 as u64)) - .saturating_add(RocksDbWeight::get().writes(3 as u64)) + // Proof Size summary in bytes: + // Measured: `300` + // Estimated: `7672` + // Minimum execution time: 21_667_000 picoseconds. + Weight::from_parts(22_166_000, 7672) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) } - // Storage: Fungible Allowance (r:1 w:1) - // Storage: Fungible TotalSupply (r:1 w:1) - // Storage: Fungible Balance (r:1 w:1) + /// Storage: Fungible Allowance (r:1 w:1) + /// Proof: Fungible Allowance (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) + /// Storage: Fungible TotalSupply (r:1 w:1) + /// Proof: Fungible TotalSupply (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + /// Storage: Fungible Balance (r:1 w:1) + /// Proof: Fungible Balance (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) fn burn_from() -> Weight { - Weight::from_ref_time(32_115_000 as u64) - .saturating_add(RocksDbWeight::get().reads(3 as u64)) - .saturating_add(RocksDbWeight::get().writes(3 as u64)) + // Proof Size summary in bytes: + // Measured: `315` + // Estimated: `7623` + // Minimum execution time: 21_271_000 picoseconds. + Weight::from_parts(21_709_000, 7623) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) } } + diff --git a/pallets/maintenance/src/weights.rs b/pallets/maintenance/src/weights.rs index 10f2560172..de6f6df056 100644 --- a/pallets/maintenance/src/weights.rs +++ b/pallets/maintenance/src/weights.rs @@ -3,7 +3,8 @@ //! Autogenerated weights for pallet_maintenance //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-02-22, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-03-30, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -16,8 +17,7 @@ // compiled // --extrinsic // * -// --template -// .maintain/frame-weight-template.hbs +// --template=.maintain/frame-weight-template.hbs // --steps=50 // --repeat=80 // --heap-pages=4096 @@ -42,40 +42,73 @@ pub trait WeightInfo { /// Weights for pallet_maintenance using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - // Storage: Maintenance Enabled (r:0 w:1) + /// Storage: Maintenance Enabled (r:0 w:1) + /// Proof: Maintenance Enabled (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn enable() -> Weight { - Weight::from_ref_time(12_866_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_721_000 picoseconds. + Weight::from_parts(4_918_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Maintenance Enabled (r:0 w:1) + /// Storage: Maintenance Enabled (r:0 w:1) + /// Proof: Maintenance Enabled (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn disable() -> Weight { - Weight::from_ref_time(12_777_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_795_000 picoseconds. + Weight::from_parts(5_006_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Preimage StatusFor (r:1 w:0) - // Storage: Preimage PreimageFor (r:1 w:0) + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:1 w:0) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn execute_preimage() -> Weight { - Weight::from_ref_time(12_228_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) + // Proof Size summary in bytes: + // Measured: `209` + // Estimated: `4199385` + // Minimum execution time: 11_496_000 picoseconds. + Weight::from_parts(11_719_000, 4199385) + .saturating_add(T::DbWeight::get().reads(2_u64)) } } // For backwards compatibility and tests impl WeightInfo for () { - // Storage: Maintenance Enabled (r:0 w:1) + /// Storage: Maintenance Enabled (r:0 w:1) + /// Proof: Maintenance Enabled (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn enable() -> Weight { - Weight::from_ref_time(12_866_000 as u64) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_721_000 picoseconds. + Weight::from_parts(4_918_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Maintenance Enabled (r:0 w:1) + /// Storage: Maintenance Enabled (r:0 w:1) + /// Proof: Maintenance Enabled (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn disable() -> Weight { - Weight::from_ref_time(12_777_000 as u64) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_795_000 picoseconds. + Weight::from_parts(5_006_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Preimage StatusFor (r:1 w:0) - // Storage: Preimage PreimageFor (r:1 w:0) + /// Storage: Preimage StatusFor (r:1 w:0) + /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) + /// Storage: Preimage PreimageFor (r:1 w:0) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn execute_preimage() -> Weight { - Weight::from_ref_time(12_228_000 as u64) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) + // Proof Size summary in bytes: + // Measured: `209` + // Estimated: `4199385` + // Minimum execution time: 11_496_000 picoseconds. + Weight::from_parts(11_719_000, 4199385) + .saturating_add(RocksDbWeight::get().reads(2_u64)) } } + diff --git a/pallets/nonfungible/src/weights.rs b/pallets/nonfungible/src/weights.rs index b776d4e447..e2ce55dea9 100644 --- a/pallets/nonfungible/src/weights.rs +++ b/pallets/nonfungible/src/weights.rs @@ -3,7 +3,8 @@ //! Autogenerated weights for pallet_nonfungible //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-02-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-03-30, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -16,8 +17,7 @@ // compiled // --extrinsic // * -// --template -// .maintain/frame-weight-template.hbs +// --template=.maintain/frame-weight-template.hbs // --steps=50 // --repeat=80 // --heap-pages=4096 @@ -57,354 +57,653 @@ pub trait WeightInfo { /// Weights for pallet_nonfungible using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - // Storage: Nonfungible TokensMinted (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Nonfungible TokenData (r:0 w:1) - // Storage: Nonfungible Owned (r:0 w:1) + /// Storage: Nonfungible TokensMinted (r:1 w:1) + /// Proof: Nonfungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:1 w:1) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:1 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:0 w:1) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:1) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn create_item() -> Weight { - Weight::from_ref_time(35_333_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokensMinted (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible TokenProperties (r:4 w:4) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Nonfungible TokenData (r:0 w:4) - // Storage: Nonfungible Owned (r:0 w:4) + // Proof Size summary in bytes: + // Measured: `390` + // Estimated: `59511` + // Minimum execution time: 23_081_000 picoseconds. + Weight::from_parts(23_551_000, 59511) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) + } + /// Storage: Nonfungible TokensMinted (r:1 w:1) + /// Proof: Nonfungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:1 w:1) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:200 w:200) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:0 w:200) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:200) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn create_multiple_items(b: u32, ) -> Weight { - Weight::from_ref_time(19_091_371 as u64) - // Standard Error: 3_221 - .saturating_add(Weight::from_ref_time(7_304_849 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - .saturating_add(T::DbWeight::get().writes((3 as u64).saturating_mul(b as u64))) - } - // Storage: Nonfungible TokensMinted (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:4 w:4) - // Storage: Nonfungible TokenProperties (r:4 w:4) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Nonfungible TokenData (r:0 w:4) - // Storage: Nonfungible Owned (r:0 w:4) + // Proof Size summary in bytes: + // Measured: `390` + // Estimated: `24232 + b * (35279 ±0)` + // Minimum execution time: 4_557_000 picoseconds. + Weight::from_parts(5_994_058, 24232) + // Standard Error: 4_326 + .saturating_add(Weight::from_parts(7_369_489, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 35279).saturating_mul(b.into())) + } + /// Storage: Nonfungible TokensMinted (r:1 w:1) + /// Proof: Nonfungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:200 w:200) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:200 w:200) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:0 w:200) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:200) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn create_multiple_items_ex(b: u32, ) -> Weight { - Weight::from_ref_time(12_655_339 as u64) - // Standard Error: 3_655 - .saturating_add(Weight::from_ref_time(9_051_919 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - .saturating_add(T::DbWeight::get().writes((4 as u64).saturating_mul(b as u64))) - } - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `390` + // Estimated: `21692 + b * (37819 ±0)` + // Minimum execution time: 4_533_000 picoseconds. + Weight::from_parts(2_822_660, 21692) + // Standard Error: 3_650 + .saturating_add(Weight::from_parts(9_100_706, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 37819).saturating_mul(b.into())) + } + /// Storage: Nonfungible TokenData (r:1 w:1) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenChildren (r:1 w:0) + /// Proof: Nonfungible TokenChildren (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: Nonfungible TokensBurnt (r:1 w:1) + /// Proof: Nonfungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:1 w:1) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible Allowance (r:1 w:0) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:1) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:0 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn burn_item() -> Weight { - Weight::from_ref_time(34_068_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `412` + // Estimated: `12611` + // Minimum execution time: 23_528_000 picoseconds. + Weight::from_parts(24_680_000, 12611) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) + } + /// Storage: Nonfungible TokenChildren (r:1 w:0) + /// Proof: Nonfungible TokenChildren (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:1 w:1) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible TokensBurnt (r:1 w:1) + /// Proof: Nonfungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:1 w:1) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible Allowance (r:1 w:0) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:1) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:0 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn burn_recursively_self_raw() -> Weight { - Weight::from_ref_time(44_840_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) - // Storage: Common CollectionById (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `412` + // Estimated: `12611` + // Minimum execution time: 29_770_000 picoseconds. + Weight::from_parts(30_114_000, 12611) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) + } + /// Storage: Nonfungible TokenChildren (r:401 w:200) + /// Proof: Nonfungible TokenChildren (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: Common CollectionById (r:1 w:0) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:201 w:201) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible TokensBurnt (r:1 w:1) + /// Proof: Nonfungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:2 w:2) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible Allowance (r:201 w:0) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:201) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:0 w:201) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight { - Weight::from_ref_time(44_567_000 as u64) - // Standard Error: 1_014_743 - .saturating_add(Weight::from_ref_time(209_619_240 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(7 as u64)) - .saturating_add(T::DbWeight::get().reads((4 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(6 as u64)) - .saturating_add(T::DbWeight::get().writes((4 as u64).saturating_mul(b as u64))) - } - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:2 w:2) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:2) + // Proof Size summary in bytes: + // Measured: `1530 + b * (58 ±0)` + // Estimated: `18290 + b * (10097 ±0)` + // Minimum execution time: 31_413_000 picoseconds. + Weight::from_parts(31_865_000, 18290) + // Standard Error: 980_032 + .saturating_add(Weight::from_parts(205_236_443, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(6_u64)) + .saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 10097).saturating_mul(b.into())) + } + /// Storage: Nonfungible TokenData (r:1 w:1) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:2 w:2) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible Allowance (r:1 w:0) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:2) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer() -> Weight { - Weight::from_ref_time(29_508_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokenData (r:1 w:0) - // Storage: Nonfungible Allowance (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `412` + // Estimated: `10144` + // Minimum execution time: 18_629_000 picoseconds. + Weight::from_parts(18_997_000, 10144) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) + } + /// Storage: Nonfungible TokenData (r:1 w:0) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Allowance (r:1 w:1) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) fn approve() -> Weight { - Weight::from_ref_time(22_168_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenData (r:1 w:0) - // Storage: Nonfungible Allowance (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `358` + // Estimated: `5064` + // Minimum execution time: 11_507_000 picoseconds. + Weight::from_parts(11_771_000, 5064) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Nonfungible TokenData (r:1 w:0) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Allowance (r:1 w:1) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) fn approve_from() -> Weight { - Weight::from_ref_time(22_063_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible Allowance (r:1 w:1) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:2 w:2) - // Storage: Nonfungible Owned (r:0 w:2) + // Proof Size summary in bytes: + // Measured: `313` + // Estimated: `5064` + // Minimum execution time: 11_558_000 picoseconds. + Weight::from_parts(11_789_000, 5064) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Nonfungible Allowance (r:1 w:1) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:1 w:1) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:2 w:2) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:2) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_from() -> Weight { - Weight::from_ref_time(36_386_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(6 as u64)) - } - // Storage: Nonfungible Allowance (r:1 w:1) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `527` + // Estimated: `10144` + // Minimum execution time: 24_919_000 picoseconds. + Weight::from_parts(25_333_000, 10144) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) + } + /// Storage: Nonfungible Allowance (r:1 w:1) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:1 w:1) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenChildren (r:1 w:0) + /// Proof: Nonfungible TokenChildren (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: Nonfungible TokensBurnt (r:1 w:1) + /// Proof: Nonfungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:1 w:1) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:1) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:0 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn burn_from() -> Weight { - Weight::from_ref_time(42_499_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(6 as u64)) - } - // Storage: Common CollectionPropertyPermissions (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `527` + // Estimated: `12611` + // Minimum execution time: 30_713_000 picoseconds. + Weight::from_parts(31_160_000, 12611) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) + } + /// Storage: Common CollectionPropertyPermissions (r:1 w:1) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn set_token_property_permissions(b: u32, ) -> Weight { - Weight::from_ref_time(5_317_000 as u64) - // Standard Error: 42_045 - .saturating_add(Weight::from_ref_time(12_179_871 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `281` + // Estimated: `19201` + // Minimum execution time: 2_360_000 picoseconds. + Weight::from_parts(2_396_000, 19201) + // Standard Error: 43_257 + .saturating_add(Weight::from_parts(12_085_808, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Nonfungible TokenProperties (r:1 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn set_token_properties(b: u32, ) -> Weight { - Weight::from_ref_time(15_428_000 as u64) - // Standard Error: 58_002 - .saturating_add(Weight::from_ref_time(7_195_842 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `616 + b * (261 ±0)` + // Estimated: `54480` + // Minimum execution time: 12_543_000 picoseconds. + Weight::from_parts(12_686_000, 54480) + // Standard Error: 52_286 + .saturating_add(Weight::from_parts(6_894_785, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Nonfungible TokenProperties (r:1 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn delete_token_properties(b: u32, ) -> Weight { - Weight::from_ref_time(15_498_000 as u64) - // Standard Error: 68_276 - .saturating_add(Weight::from_ref_time(22_441_281 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenData (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `653 + b * (33291 ±0)` + // Estimated: `54480` + // Minimum execution time: 12_352_000 picoseconds. + Weight::from_parts(12_523_000, 54480) + // Standard Error: 70_401 + .saturating_add(Weight::from_parts(21_959_228, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Nonfungible TokenData (r:1 w:0) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) fn token_owner() -> Weight { - Weight::from_ref_time(7_006_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - } - // Storage: Nonfungible CollectionAllowance (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `358` + // Estimated: `2532` + // Minimum execution time: 4_797_000 picoseconds. + Weight::from_parts(5_499_000, 2532) + .saturating_add(T::DbWeight::get().reads(1_u64)) + } + /// Storage: Nonfungible CollectionAllowance (r:0 w:1) + /// Proof: Nonfungible CollectionAllowance (max_values: None, max_size: Some(111), added: 2586, mode: MaxEncodedLen) fn set_allowance_for_all() -> Weight { - Weight::from_ref_time(16_761_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible CollectionAllowance (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_303_000 picoseconds. + Weight::from_parts(6_712_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Nonfungible CollectionAllowance (r:1 w:0) + /// Proof: Nonfungible CollectionAllowance (max_values: None, max_size: Some(111), added: 2586, mode: MaxEncodedLen) fn allowance_for_all() -> Weight { - Weight::from_ref_time(5_577_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - } - // Storage: Nonfungible TokenProperties (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `109` + // Estimated: `2586` + // Minimum execution time: 3_798_000 picoseconds. + Weight::from_parts(4_017_000, 2586) + .saturating_add(T::DbWeight::get().reads(1_u64)) + } + /// Storage: Nonfungible TokenProperties (r:1 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn repair_item() -> Weight { - Weight::from_ref_time(7_670_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `300` + // Estimated: `35279` + // Minimum execution time: 5_531_000 picoseconds. + Weight::from_parts(5_750_000, 35279) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } } // For backwards compatibility and tests impl WeightInfo for () { - // Storage: Nonfungible TokensMinted (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Nonfungible TokenData (r:0 w:1) - // Storage: Nonfungible Owned (r:0 w:1) + /// Storage: Nonfungible TokensMinted (r:1 w:1) + /// Proof: Nonfungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:1 w:1) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:1 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:0 w:1) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:1) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn create_item() -> Weight { - Weight::from_ref_time(35_333_000 as u64) - .saturating_add(RocksDbWeight::get().reads(4 as u64)) - .saturating_add(RocksDbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokensMinted (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible TokenProperties (r:4 w:4) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Nonfungible TokenData (r:0 w:4) - // Storage: Nonfungible Owned (r:0 w:4) + // Proof Size summary in bytes: + // Measured: `390` + // Estimated: `59511` + // Minimum execution time: 23_081_000 picoseconds. + Weight::from_parts(23_551_000, 59511) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(5_u64)) + } + /// Storage: Nonfungible TokensMinted (r:1 w:1) + /// Proof: Nonfungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:1 w:1) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:200 w:200) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:0 w:200) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:200) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn create_multiple_items(b: u32, ) -> Weight { - Weight::from_ref_time(19_091_371 as u64) - // Standard Error: 3_221 - .saturating_add(Weight::from_ref_time(7_304_849 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(3 as u64)) - .saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(RocksDbWeight::get().writes(2 as u64)) - .saturating_add(RocksDbWeight::get().writes((3 as u64).saturating_mul(b as u64))) - } - // Storage: Nonfungible TokensMinted (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:4 w:4) - // Storage: Nonfungible TokenProperties (r:4 w:4) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Nonfungible TokenData (r:0 w:4) - // Storage: Nonfungible Owned (r:0 w:4) + // Proof Size summary in bytes: + // Measured: `390` + // Estimated: `24232 + b * (35279 ±0)` + // Minimum execution time: 4_557_000 picoseconds. + Weight::from_parts(5_994_058, 24232) + // Standard Error: 4_326 + .saturating_add(Weight::from_parts(7_369_489, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + .saturating_add(RocksDbWeight::get().writes((3_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 35279).saturating_mul(b.into())) + } + /// Storage: Nonfungible TokensMinted (r:1 w:1) + /// Proof: Nonfungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:200 w:200) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:200 w:200) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:0 w:200) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:200) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn create_multiple_items_ex(b: u32, ) -> Weight { - Weight::from_ref_time(12_655_339 as u64) - // Standard Error: 3_655 - .saturating_add(Weight::from_ref_time(9_051_919 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().reads((2 as u64).saturating_mul(b as u64))) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - .saturating_add(RocksDbWeight::get().writes((4 as u64).saturating_mul(b as u64))) - } - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `390` + // Estimated: `21692 + b * (37819 ±0)` + // Minimum execution time: 4_533_000 picoseconds. + Weight::from_parts(2_822_660, 21692) + // Standard Error: 3_650 + .saturating_add(Weight::from_parts(9_100_706, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().reads((2_u64).saturating_mul(b.into()))) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + .saturating_add(RocksDbWeight::get().writes((4_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 37819).saturating_mul(b.into())) + } + /// Storage: Nonfungible TokenData (r:1 w:1) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenChildren (r:1 w:0) + /// Proof: Nonfungible TokenChildren (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: Nonfungible TokensBurnt (r:1 w:1) + /// Proof: Nonfungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:1 w:1) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible Allowance (r:1 w:0) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:1) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:0 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn burn_item() -> Weight { - Weight::from_ref_time(34_068_000 as u64) - .saturating_add(RocksDbWeight::get().reads(5 as u64)) - .saturating_add(RocksDbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `412` + // Estimated: `12611` + // Minimum execution time: 23_528_000 picoseconds. + Weight::from_parts(24_680_000, 12611) + .saturating_add(RocksDbWeight::get().reads(5_u64)) + .saturating_add(RocksDbWeight::get().writes(5_u64)) + } + /// Storage: Nonfungible TokenChildren (r:1 w:0) + /// Proof: Nonfungible TokenChildren (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:1 w:1) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible TokensBurnt (r:1 w:1) + /// Proof: Nonfungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:1 w:1) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible Allowance (r:1 w:0) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:1) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:0 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn burn_recursively_self_raw() -> Weight { - Weight::from_ref_time(44_840_000 as u64) - .saturating_add(RocksDbWeight::get().reads(5 as u64)) - .saturating_add(RocksDbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) - // Storage: Common CollectionById (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `412` + // Estimated: `12611` + // Minimum execution time: 29_770_000 picoseconds. + Weight::from_parts(30_114_000, 12611) + .saturating_add(RocksDbWeight::get().reads(5_u64)) + .saturating_add(RocksDbWeight::get().writes(5_u64)) + } + /// Storage: Nonfungible TokenChildren (r:401 w:200) + /// Proof: Nonfungible TokenChildren (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: Common CollectionById (r:1 w:0) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:201 w:201) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible TokensBurnt (r:1 w:1) + /// Proof: Nonfungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:2 w:2) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible Allowance (r:201 w:0) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:201) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:0 w:201) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight { - Weight::from_ref_time(44_567_000 as u64) - // Standard Error: 1_014_743 - .saturating_add(Weight::from_ref_time(209_619_240 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(7 as u64)) - .saturating_add(RocksDbWeight::get().reads((4 as u64).saturating_mul(b as u64))) - .saturating_add(RocksDbWeight::get().writes(6 as u64)) - .saturating_add(RocksDbWeight::get().writes((4 as u64).saturating_mul(b as u64))) - } - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:2 w:2) - // Storage: Nonfungible Allowance (r:1 w:0) - // Storage: Nonfungible Owned (r:0 w:2) + // Proof Size summary in bytes: + // Measured: `1530 + b * (58 ±0)` + // Estimated: `18290 + b * (10097 ±0)` + // Minimum execution time: 31_413_000 picoseconds. + Weight::from_parts(31_865_000, 18290) + // Standard Error: 980_032 + .saturating_add(Weight::from_parts(205_236_443, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(7_u64)) + .saturating_add(RocksDbWeight::get().reads((4_u64).saturating_mul(b.into()))) + .saturating_add(RocksDbWeight::get().writes(6_u64)) + .saturating_add(RocksDbWeight::get().writes((4_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 10097).saturating_mul(b.into())) + } + /// Storage: Nonfungible TokenData (r:1 w:1) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:2 w:2) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible Allowance (r:1 w:0) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:2) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer() -> Weight { - Weight::from_ref_time(29_508_000 as u64) - .saturating_add(RocksDbWeight::get().reads(4 as u64)) - .saturating_add(RocksDbWeight::get().writes(5 as u64)) - } - // Storage: Nonfungible TokenData (r:1 w:0) - // Storage: Nonfungible Allowance (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `412` + // Estimated: `10144` + // Minimum execution time: 18_629_000 picoseconds. + Weight::from_parts(18_997_000, 10144) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(5_u64)) + } + /// Storage: Nonfungible TokenData (r:1 w:0) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Allowance (r:1 w:1) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) fn approve() -> Weight { - Weight::from_ref_time(22_168_000 as u64) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenData (r:1 w:0) - // Storage: Nonfungible Allowance (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `358` + // Estimated: `5064` + // Minimum execution time: 11_507_000 picoseconds. + Weight::from_parts(11_771_000, 5064) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: Nonfungible TokenData (r:1 w:0) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible Allowance (r:1 w:1) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) fn approve_from() -> Weight { - Weight::from_ref_time(22_063_000 as u64) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible Allowance (r:1 w:1) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:2 w:2) - // Storage: Nonfungible Owned (r:0 w:2) + // Proof Size summary in bytes: + // Measured: `313` + // Estimated: `5064` + // Minimum execution time: 11_558_000 picoseconds. + Weight::from_parts(11_789_000, 5064) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: Nonfungible Allowance (r:1 w:1) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:1 w:1) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:2 w:2) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:2) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_from() -> Weight { - Weight::from_ref_time(36_386_000 as u64) - .saturating_add(RocksDbWeight::get().reads(4 as u64)) - .saturating_add(RocksDbWeight::get().writes(6 as u64)) - } - // Storage: Nonfungible Allowance (r:1 w:1) - // Storage: Nonfungible TokenData (r:1 w:1) - // Storage: Nonfungible TokenChildren (r:1 w:0) - // Storage: Nonfungible TokensBurnt (r:1 w:1) - // Storage: Nonfungible AccountBalance (r:1 w:1) - // Storage: Nonfungible Owned (r:0 w:1) - // Storage: Nonfungible TokenProperties (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `527` + // Estimated: `10144` + // Minimum execution time: 24_919_000 picoseconds. + Weight::from_parts(25_333_000, 10144) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(6_u64)) + } + /// Storage: Nonfungible Allowance (r:1 w:1) + /// Proof: Nonfungible Allowance (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:1 w:1) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenChildren (r:1 w:0) + /// Proof: Nonfungible TokenChildren (max_values: None, max_size: Some(41), added: 2516, mode: MaxEncodedLen) + /// Storage: Nonfungible TokensBurnt (r:1 w:1) + /// Proof: Nonfungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible AccountBalance (r:1 w:1) + /// Proof: Nonfungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Nonfungible Owned (r:0 w:1) + /// Proof: Nonfungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenProperties (r:0 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn burn_from() -> Weight { - Weight::from_ref_time(42_499_000 as u64) - .saturating_add(RocksDbWeight::get().reads(5 as u64)) - .saturating_add(RocksDbWeight::get().writes(6 as u64)) - } - // Storage: Common CollectionPropertyPermissions (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `527` + // Estimated: `12611` + // Minimum execution time: 30_713_000 picoseconds. + Weight::from_parts(31_160_000, 12611) + .saturating_add(RocksDbWeight::get().reads(5_u64)) + .saturating_add(RocksDbWeight::get().writes(6_u64)) + } + /// Storage: Common CollectionPropertyPermissions (r:1 w:1) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn set_token_property_permissions(b: u32, ) -> Weight { - Weight::from_ref_time(5_317_000 as u64) - // Standard Error: 42_045 - .saturating_add(Weight::from_ref_time(12_179_871 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `281` + // Estimated: `19201` + // Minimum execution time: 2_360_000 picoseconds. + Weight::from_parts(2_396_000, 19201) + // Standard Error: 43_257 + .saturating_add(Weight::from_parts(12_085_808, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: Nonfungible TokenProperties (r:1 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn set_token_properties(b: u32, ) -> Weight { - Weight::from_ref_time(15_428_000 as u64) - // Standard Error: 58_002 - .saturating_add(Weight::from_ref_time(7_195_842 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `616 + b * (261 ±0)` + // Estimated: `54480` + // Minimum execution time: 12_543_000 picoseconds. + Weight::from_parts(12_686_000, 54480) + // Standard Error: 52_286 + .saturating_add(Weight::from_parts(6_894_785, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: Nonfungible TokenProperties (r:1 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn delete_token_properties(b: u32, ) -> Weight { - Weight::from_ref_time(15_498_000 as u64) - // Standard Error: 68_276 - .saturating_add(Weight::from_ref_time(22_441_281 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible TokenData (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `653 + b * (33291 ±0)` + // Estimated: `54480` + // Minimum execution time: 12_352_000 picoseconds. + Weight::from_parts(12_523_000, 54480) + // Standard Error: 70_401 + .saturating_add(Weight::from_parts(21_959_228, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: Nonfungible TokenData (r:1 w:0) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) fn token_owner() -> Weight { - Weight::from_ref_time(7_006_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - } - // Storage: Nonfungible CollectionAllowance (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `358` + // Estimated: `2532` + // Minimum execution time: 4_797_000 picoseconds. + Weight::from_parts(5_499_000, 2532) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + } + /// Storage: Nonfungible CollectionAllowance (r:0 w:1) + /// Proof: Nonfungible CollectionAllowance (max_values: None, max_size: Some(111), added: 2586, mode: MaxEncodedLen) fn set_allowance_for_all() -> Weight { - Weight::from_ref_time(16_761_000 as u64) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Nonfungible CollectionAllowance (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_303_000 picoseconds. + Weight::from_parts(6_712_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: Nonfungible CollectionAllowance (r:1 w:0) + /// Proof: Nonfungible CollectionAllowance (max_values: None, max_size: Some(111), added: 2586, mode: MaxEncodedLen) fn allowance_for_all() -> Weight { - Weight::from_ref_time(5_577_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - } - // Storage: Nonfungible TokenProperties (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `109` + // Estimated: `2586` + // Minimum execution time: 3_798_000 picoseconds. + Weight::from_parts(4_017_000, 2586) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + } + /// Storage: Nonfungible TokenProperties (r:1 w:1) + /// Proof: Nonfungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn repair_item() -> Weight { - Weight::from_ref_time(7_670_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `300` + // Estimated: `35279` + // Minimum execution time: 5_531_000 picoseconds. + Weight::from_parts(5_750_000, 35279) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } } + diff --git a/pallets/refungible/src/weights.rs b/pallets/refungible/src/weights.rs index b01260c244..d1e11cf10a 100644 --- a/pallets/refungible/src/weights.rs +++ b/pallets/refungible/src/weights.rs @@ -3,7 +3,8 @@ //! Autogenerated weights for pallet_refungible //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-02-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-03-30, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -16,8 +17,7 @@ // compiled // --extrinsic // * -// --template -// .maintain/frame-weight-template.hbs +// --template=.maintain/frame-weight-template.hbs // --steps=50 // --repeat=80 // --heap-pages=4096 @@ -64,472 +64,875 @@ pub trait WeightInfo { /// Weights for pallet_refungible using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - // Storage: Refungible TokensMinted (r:1 w:1) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Refungible Balance (r:0 w:1) - // Storage: Refungible TotalSupply (r:0 w:1) - // Storage: Refungible Owned (r:0 w:1) + /// Storage: Refungible TokensMinted (r:1 w:1) + /// Proof: Refungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TokenProperties (r:1 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:0 w:1) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:0 w:1) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn create_item() -> Weight { - Weight::from_ref_time(39_971_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(6 as u64)) - } - // Storage: Refungible TokensMinted (r:1 w:1) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TokenProperties (r:4 w:4) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Refungible Balance (r:0 w:4) - // Storage: Refungible TotalSupply (r:0 w:4) - // Storage: Refungible Owned (r:0 w:4) + // Proof Size summary in bytes: + // Measured: `285` + // Estimated: `59511` + // Minimum execution time: 25_287_000 picoseconds. + Weight::from_parts(25_741_000, 59511) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) + } + /// Storage: Refungible TokensMinted (r:1 w:1) + /// Proof: Refungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TokenProperties (r:200 w:200) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:0 w:200) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:0 w:200) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:200) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn create_multiple_items(b: u32, ) -> Weight { - Weight::from_ref_time(14_049_866 as u64) - // Standard Error: 4_015 - .saturating_add(Weight::from_ref_time(8_984_911 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - .saturating_add(T::DbWeight::get().writes((4 as u64).saturating_mul(b as u64))) - } - // Storage: Refungible TokensMinted (r:1 w:1) - // Storage: Refungible AccountBalance (r:4 w:4) - // Storage: Refungible TokenProperties (r:4 w:4) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Refungible Balance (r:0 w:4) - // Storage: Refungible TotalSupply (r:0 w:4) - // Storage: Refungible Owned (r:0 w:4) + // Proof Size summary in bytes: + // Measured: `285` + // Estimated: `24232 + b * (35279 ±0)` + // Minimum execution time: 4_618_000 picoseconds. + Weight::from_parts(1_425_218, 24232) + // Standard Error: 4_343 + .saturating_add(Weight::from_parts(9_154_733, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 35279).saturating_mul(b.into())) + } + /// Storage: Refungible TokensMinted (r:1 w:1) + /// Proof: Refungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:200 w:200) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TokenProperties (r:200 w:200) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:0 w:200) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:0 w:200) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:200) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn create_multiple_items_ex_multiple_items(b: u32, ) -> Weight { - Weight::from_ref_time(14_893_679 as u64) - // Standard Error: 3_571 - .saturating_add(Weight::from_ref_time(10_611_135 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - .saturating_add(T::DbWeight::get().writes((5 as u64).saturating_mul(b as u64))) - } - // Storage: Refungible TokensMinted (r:1 w:1) - // Storage: Refungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Refungible TotalSupply (r:0 w:1) - // Storage: Refungible AccountBalance (r:4 w:4) - // Storage: Refungible Balance (r:0 w:4) - // Storage: Refungible Owned (r:0 w:4) + // Proof Size summary in bytes: + // Measured: `285` + // Estimated: `21692 + b * (37819 ±0)` + // Minimum execution time: 4_063_000 picoseconds. + Weight::from_parts(4_160_000, 21692) + // Standard Error: 2_386 + .saturating_add(Weight::from_parts(10_836_802, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(T::DbWeight::get().writes((5_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 37819).saturating_mul(b.into())) + } + /// Storage: Refungible TokensMinted (r:1 w:1) + /// Proof: Refungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:200 w:200) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TokenProperties (r:1 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:0 w:200) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:0 w:1) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:200) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn create_multiple_items_ex_multiple_owners(b: u32, ) -> Weight { - Weight::from_ref_time(31_075_923 as u64) - // Standard Error: 2_118 - .saturating_add(Weight::from_ref_time(5_829_866 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(T::DbWeight::get().writes(3 as u64)) - .saturating_add(T::DbWeight::get().writes((3 as u64).saturating_mul(b as u64))) - } - // Storage: Refungible Balance (r:3 w:1) - // Storage: Refungible TotalSupply (r:1 w:1) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible Owned (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `285` + // Estimated: `56971 + b * (2540 ±0)` + // Minimum execution time: 14_637_000 picoseconds. + Weight::from_parts(19_042_423, 56971) + // Standard Error: 1_632 + .saturating_add(Weight::from_parts(5_976_694, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 2540).saturating_mul(b.into())) + } + /// Storage: Refungible Balance (r:3 w:1) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:1) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn burn_item_partial() -> Weight { - Weight::from_ref_time(47_369_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) - } - // Storage: Refungible Balance (r:1 w:1) - // Storage: Refungible TotalSupply (r:1 w:1) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TokensBurnt (r:1 w:1) - // Storage: Refungible Owned (r:0 w:1) - // Storage: Refungible TokenProperties (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `490` + // Estimated: `12747` + // Minimum execution time: 35_018_000 picoseconds. + Weight::from_parts(35_596_000, 12747) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: Refungible Balance (r:1 w:1) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:1) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TokensBurnt (r:1 w:1) + /// Proof: Refungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// Storage: Refungible TokenProperties (r:0 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn burn_item_fully() -> Weight { - Weight::from_ref_time(41_351_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(6 as u64)) - } - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible TotalSupply (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `375` + // Estimated: `10110` + // Minimum execution time: 30_441_000 picoseconds. + Weight::from_parts(31_000_000, 10110) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) + } + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) fn transfer_normal() -> Weight { - Weight::from_ref_time(31_379_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - } - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TotalSupply (r:1 w:0) - // Storage: Refungible Owned (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `398` + // Estimated: `7643` + // Minimum execution time: 20_055_000 picoseconds. + Weight::from_parts(20_533_000, 7643) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_creating() -> Weight { - Weight::from_ref_time(34_829_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) - } - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TotalSupply (r:1 w:0) - // Storage: Refungible Owned (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `375` + // Estimated: `10183` + // Minimum execution time: 23_443_000 picoseconds. + Weight::from_parts(23_791_000, 10183) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_removing() -> Weight { - Weight::from_ref_time(38_221_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(4 as u64)) - } - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible AccountBalance (r:2 w:2) - // Storage: Refungible TotalSupply (r:1 w:0) - // Storage: Refungible Owned (r:0 w:2) + // Proof Size summary in bytes: + // Measured: `490` + // Estimated: `10183` + // Minimum execution time: 26_489_000 picoseconds. + Weight::from_parts(27_103_000, 10183) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:2 w:2) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:2) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_creating_removing() -> Weight { - Weight::from_ref_time(38_102_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(6 as u64)) - } - // Storage: Refungible Balance (r:1 w:0) - // Storage: Refungible Allowance (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `375` + // Estimated: `12723` + // Minimum execution time: 26_719_000 picoseconds. + Weight::from_parts(27_038_000, 12723) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) + } + /// Storage: Refungible Balance (r:1 w:0) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible Allowance (r:0 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) fn approve() -> Weight { - Weight::from_ref_time(24_217_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Refungible Balance (r:1 w:0) - // Storage: Refungible Allowance (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `256` + // Estimated: `2564` + // Minimum execution time: 12_949_000 picoseconds. + Weight::from_parts(13_181_000, 2564) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Refungible Balance (r:1 w:0) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible Allowance (r:0 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) fn approve_from() -> Weight { - Weight::from_ref_time(24_173_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Refungible Allowance (r:1 w:1) - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible TotalSupply (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `244` + // Estimated: `2564` + // Minimum execution time: 12_942_000 picoseconds. + Weight::from_parts(13_268_000, 2564) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Refungible Allowance (r:1 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) fn transfer_from_normal() -> Weight { - Weight::from_ref_time(40_040_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) - } - // Storage: Refungible Allowance (r:1 w:1) - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TotalSupply (r:1 w:0) - // Storage: Refungible Owned (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `528` + // Estimated: `10223` + // Minimum execution time: 28_907_000 picoseconds. + Weight::from_parts(29_487_000, 10223) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: Refungible Allowance (r:1 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_from_creating() -> Weight { - Weight::from_ref_time(42_906_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) - } - // Storage: Refungible Allowance (r:1 w:1) - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TotalSupply (r:1 w:0) - // Storage: Refungible Owned (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `505` + // Estimated: `12763` + // Minimum execution time: 31_271_000 picoseconds. + Weight::from_parts(32_293_000, 12763) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) + } + /// Storage: Refungible Allowance (r:1 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_from_removing() -> Weight { - Weight::from_ref_time(46_112_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(5 as u64)) - } - // Storage: Refungible Allowance (r:1 w:1) - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible AccountBalance (r:2 w:2) - // Storage: Refungible TotalSupply (r:1 w:0) - // Storage: Refungible Owned (r:0 w:2) + // Proof Size summary in bytes: + // Measured: `620` + // Estimated: `12763` + // Minimum execution time: 34_295_000 picoseconds. + Weight::from_parts(34_924_000, 12763) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) + } + /// Storage: Refungible Allowance (r:1 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:2 w:2) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:2) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_from_creating_removing() -> Weight { - Weight::from_ref_time(45_102_000 as u64) - .saturating_add(T::DbWeight::get().reads(6 as u64)) - .saturating_add(T::DbWeight::get().writes(7 as u64)) - } - // Storage: Refungible Allowance (r:1 w:1) - // Storage: Refungible Balance (r:1 w:1) - // Storage: Refungible TotalSupply (r:1 w:1) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TokensBurnt (r:1 w:1) - // Storage: Refungible Owned (r:0 w:1) - // Storage: Refungible TokenProperties (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `505` + // Estimated: `15303` + // Minimum execution time: 35_447_000 picoseconds. + Weight::from_parts(35_896_000, 15303) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(7_u64)) + } + /// Storage: Refungible Allowance (r:1 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:1 w:1) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:1) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TokensBurnt (r:1 w:1) + /// Proof: Refungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// Storage: Refungible TokenProperties (r:0 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn burn_from() -> Weight { - Weight::from_ref_time(50_573_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) - .saturating_add(T::DbWeight::get().writes(7 as u64)) - } - // Storage: Common CollectionPropertyPermissions (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `505` + // Estimated: `12690` + // Minimum execution time: 39_395_000 picoseconds. + Weight::from_parts(40_119_000, 12690) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(7_u64)) + } + /// Storage: Common CollectionPropertyPermissions (r:1 w:1) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn set_token_property_permissions(b: u32, ) -> Weight { - Weight::from_ref_time(5_349_000 as u64) - // Standard Error: 41_409 - .saturating_add(Weight::from_ref_time(12_216_721 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Refungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `281` + // Estimated: `19201` + // Minimum execution time: 2_337_000 picoseconds. + Weight::from_parts(2_434_000, 19201) + // Standard Error: 43_425 + .saturating_add(Weight::from_parts(12_286_502, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Refungible TokenProperties (r:1 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn set_token_properties(b: u32, ) -> Weight { - Weight::from_ref_time(12_947_117 as u64) - // Standard Error: 75_487 - .saturating_add(Weight::from_ref_time(6_809_149 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Refungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `490 + b * (261 ±0)` + // Estimated: `54480` + // Minimum execution time: 11_857_000 picoseconds. + Weight::from_parts(12_007_000, 54480) + // Standard Error: 22_963 + .saturating_add(Weight::from_parts(6_609_180, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Refungible TokenProperties (r:1 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn delete_token_properties(b: u32, ) -> Weight { - Weight::from_ref_time(14_967_000 as u64) - // Standard Error: 66_400 - .saturating_add(Weight::from_ref_time(22_261_821 as u64).saturating_mul(b as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Refungible TotalSupply (r:1 w:1) - // Storage: Refungible Balance (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `527 + b * (33291 ±0)` + // Estimated: `54480` + // Minimum execution time: 12_001_000 picoseconds. + Weight::from_parts(12_197_000, 54480) + // Standard Error: 70_580 + .saturating_add(Weight::from_parts(21_847_004, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Refungible TotalSupply (r:1 w:1) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:1 w:1) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) fn repartition_item() -> Weight { - Weight::from_ref_time(25_823_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - } - // Storage: Refungible Balance (r:2 w:0) + // Proof Size summary in bytes: + // Measured: `321` + // Estimated: `5079` + // Minimum execution time: 14_497_000 picoseconds. + Weight::from_parts(14_825_000, 5079) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: Refungible Balance (r:2 w:0) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) fn token_owner() -> Weight { - Weight::from_ref_time(9_445_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - } - // Storage: Refungible CollectionAllowance (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `321` + // Estimated: `5128` + // Minimum execution time: 8_888_000 picoseconds. + Weight::from_parts(9_373_000, 5128) + .saturating_add(T::DbWeight::get().reads(2_u64)) + } + /// Storage: Refungible CollectionAllowance (r:0 w:1) + /// Proof: Refungible CollectionAllowance (max_values: None, max_size: Some(111), added: 2586, mode: MaxEncodedLen) fn set_allowance_for_all() -> Weight { - Weight::from_ref_time(17_303_000 as u64) - .saturating_add(T::DbWeight::get().writes(1 as u64)) - } - // Storage: Refungible CollectionAllowance (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_042_000 picoseconds. + Weight::from_parts(7_245_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Refungible CollectionAllowance (r:1 w:0) + /// Proof: Refungible CollectionAllowance (max_values: None, max_size: Some(111), added: 2586, mode: MaxEncodedLen) fn allowance_for_all() -> Weight { - Weight::from_ref_time(5_352_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - } - // Storage: Refungible TokenProperties (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `4` + // Estimated: `2586` + // Minimum execution time: 3_425_000 picoseconds. + Weight::from_parts(3_554_000, 2586) + .saturating_add(T::DbWeight::get().reads(1_u64)) + } + /// Storage: Refungible TokenProperties (r:1 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn repair_item() -> Weight { - Weight::from_ref_time(7_200_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `35279` + // Minimum execution time: 4_684_000 picoseconds. + Weight::from_parts(4_805_000, 35279) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } } // For backwards compatibility and tests impl WeightInfo for () { - // Storage: Refungible TokensMinted (r:1 w:1) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Refungible Balance (r:0 w:1) - // Storage: Refungible TotalSupply (r:0 w:1) - // Storage: Refungible Owned (r:0 w:1) + /// Storage: Refungible TokensMinted (r:1 w:1) + /// Proof: Refungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TokenProperties (r:1 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:0 w:1) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:0 w:1) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn create_item() -> Weight { - Weight::from_ref_time(39_971_000 as u64) - .saturating_add(RocksDbWeight::get().reads(4 as u64)) - .saturating_add(RocksDbWeight::get().writes(6 as u64)) - } - // Storage: Refungible TokensMinted (r:1 w:1) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TokenProperties (r:4 w:4) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Refungible Balance (r:0 w:4) - // Storage: Refungible TotalSupply (r:0 w:4) - // Storage: Refungible Owned (r:0 w:4) + // Proof Size summary in bytes: + // Measured: `285` + // Estimated: `59511` + // Minimum execution time: 25_287_000 picoseconds. + Weight::from_parts(25_741_000, 59511) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(6_u64)) + } + /// Storage: Refungible TokensMinted (r:1 w:1) + /// Proof: Refungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TokenProperties (r:200 w:200) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:0 w:200) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:0 w:200) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:200) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn create_multiple_items(b: u32, ) -> Weight { - Weight::from_ref_time(14_049_866 as u64) - // Standard Error: 4_015 - .saturating_add(Weight::from_ref_time(8_984_911 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(3 as u64)) - .saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(RocksDbWeight::get().writes(2 as u64)) - .saturating_add(RocksDbWeight::get().writes((4 as u64).saturating_mul(b as u64))) - } - // Storage: Refungible TokensMinted (r:1 w:1) - // Storage: Refungible AccountBalance (r:4 w:4) - // Storage: Refungible TokenProperties (r:4 w:4) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Refungible Balance (r:0 w:4) - // Storage: Refungible TotalSupply (r:0 w:4) - // Storage: Refungible Owned (r:0 w:4) + // Proof Size summary in bytes: + // Measured: `285` + // Estimated: `24232 + b * (35279 ±0)` + // Minimum execution time: 4_618_000 picoseconds. + Weight::from_parts(1_425_218, 24232) + // Standard Error: 4_343 + .saturating_add(Weight::from_parts(9_154_733, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + .saturating_add(RocksDbWeight::get().writes((4_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 35279).saturating_mul(b.into())) + } + /// Storage: Refungible TokensMinted (r:1 w:1) + /// Proof: Refungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:200 w:200) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TokenProperties (r:200 w:200) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:0 w:200) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:0 w:200) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:200) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn create_multiple_items_ex_multiple_items(b: u32, ) -> Weight { - Weight::from_ref_time(14_893_679 as u64) - // Standard Error: 3_571 - .saturating_add(Weight::from_ref_time(10_611_135 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().reads((2 as u64).saturating_mul(b as u64))) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - .saturating_add(RocksDbWeight::get().writes((5 as u64).saturating_mul(b as u64))) - } - // Storage: Refungible TokensMinted (r:1 w:1) - // Storage: Refungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) - // Storage: Refungible TotalSupply (r:0 w:1) - // Storage: Refungible AccountBalance (r:4 w:4) - // Storage: Refungible Balance (r:0 w:4) - // Storage: Refungible Owned (r:0 w:4) + // Proof Size summary in bytes: + // Measured: `285` + // Estimated: `21692 + b * (37819 ±0)` + // Minimum execution time: 4_063_000 picoseconds. + Weight::from_parts(4_160_000, 21692) + // Standard Error: 2_386 + .saturating_add(Weight::from_parts(10_836_802, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().reads((2_u64).saturating_mul(b.into()))) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + .saturating_add(RocksDbWeight::get().writes((5_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 37819).saturating_mul(b.into())) + } + /// Storage: Refungible TokensMinted (r:1 w:1) + /// Proof: Refungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:200 w:200) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TokenProperties (r:1 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:0 w:200) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:0 w:1) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:200) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 200]`. fn create_multiple_items_ex_multiple_owners(b: u32, ) -> Weight { - Weight::from_ref_time(31_075_923 as u64) - // Standard Error: 2_118 - .saturating_add(Weight::from_ref_time(5_829_866 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(3 as u64)) - .saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(b as u64))) - .saturating_add(RocksDbWeight::get().writes(3 as u64)) - .saturating_add(RocksDbWeight::get().writes((3 as u64).saturating_mul(b as u64))) - } - // Storage: Refungible Balance (r:3 w:1) - // Storage: Refungible TotalSupply (r:1 w:1) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible Owned (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `285` + // Estimated: `56971 + b * (2540 ±0)` + // Minimum execution time: 14_637_000 picoseconds. + Weight::from_parts(19_042_423, 56971) + // Standard Error: 1_632 + .saturating_add(Weight::from_parts(5_976_694, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + .saturating_add(RocksDbWeight::get().writes((3_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 2540).saturating_mul(b.into())) + } + /// Storage: Refungible Balance (r:3 w:1) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:1) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn burn_item_partial() -> Weight { - Weight::from_ref_time(47_369_000 as u64) - .saturating_add(RocksDbWeight::get().reads(5 as u64)) - .saturating_add(RocksDbWeight::get().writes(4 as u64)) - } - // Storage: Refungible Balance (r:1 w:1) - // Storage: Refungible TotalSupply (r:1 w:1) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TokensBurnt (r:1 w:1) - // Storage: Refungible Owned (r:0 w:1) - // Storage: Refungible TokenProperties (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `490` + // Estimated: `12747` + // Minimum execution time: 35_018_000 picoseconds. + Weight::from_parts(35_596_000, 12747) + .saturating_add(RocksDbWeight::get().reads(5_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: Refungible Balance (r:1 w:1) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:1) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TokensBurnt (r:1 w:1) + /// Proof: Refungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// Storage: Refungible TokenProperties (r:0 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn burn_item_fully() -> Weight { - Weight::from_ref_time(41_351_000 as u64) - .saturating_add(RocksDbWeight::get().reads(4 as u64)) - .saturating_add(RocksDbWeight::get().writes(6 as u64)) - } - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible TotalSupply (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `375` + // Estimated: `10110` + // Minimum execution time: 30_441_000 picoseconds. + Weight::from_parts(31_000_000, 10110) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(6_u64)) + } + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) fn transfer_normal() -> Weight { - Weight::from_ref_time(31_379_000 as u64) - .saturating_add(RocksDbWeight::get().reads(3 as u64)) - .saturating_add(RocksDbWeight::get().writes(2 as u64)) - } - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TotalSupply (r:1 w:0) - // Storage: Refungible Owned (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `398` + // Estimated: `7643` + // Minimum execution time: 20_055_000 picoseconds. + Weight::from_parts(20_533_000, 7643) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_creating() -> Weight { - Weight::from_ref_time(34_829_000 as u64) - .saturating_add(RocksDbWeight::get().reads(4 as u64)) - .saturating_add(RocksDbWeight::get().writes(4 as u64)) - } - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TotalSupply (r:1 w:0) - // Storage: Refungible Owned (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `375` + // Estimated: `10183` + // Minimum execution time: 23_443_000 picoseconds. + Weight::from_parts(23_791_000, 10183) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_removing() -> Weight { - Weight::from_ref_time(38_221_000 as u64) - .saturating_add(RocksDbWeight::get().reads(4 as u64)) - .saturating_add(RocksDbWeight::get().writes(4 as u64)) - } - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible AccountBalance (r:2 w:2) - // Storage: Refungible TotalSupply (r:1 w:0) - // Storage: Refungible Owned (r:0 w:2) + // Proof Size summary in bytes: + // Measured: `490` + // Estimated: `10183` + // Minimum execution time: 26_489_000 picoseconds. + Weight::from_parts(27_103_000, 10183) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:2 w:2) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:2) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_creating_removing() -> Weight { - Weight::from_ref_time(38_102_000 as u64) - .saturating_add(RocksDbWeight::get().reads(5 as u64)) - .saturating_add(RocksDbWeight::get().writes(6 as u64)) - } - // Storage: Refungible Balance (r:1 w:0) - // Storage: Refungible Allowance (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `375` + // Estimated: `12723` + // Minimum execution time: 26_719_000 picoseconds. + Weight::from_parts(27_038_000, 12723) + .saturating_add(RocksDbWeight::get().reads(5_u64)) + .saturating_add(RocksDbWeight::get().writes(6_u64)) + } + /// Storage: Refungible Balance (r:1 w:0) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible Allowance (r:0 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) fn approve() -> Weight { - Weight::from_ref_time(24_217_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Refungible Balance (r:1 w:0) - // Storage: Refungible Allowance (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `256` + // Estimated: `2564` + // Minimum execution time: 12_949_000 picoseconds. + Weight::from_parts(13_181_000, 2564) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: Refungible Balance (r:1 w:0) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible Allowance (r:0 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) fn approve_from() -> Weight { - Weight::from_ref_time(24_173_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Refungible Allowance (r:1 w:1) - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible TotalSupply (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `244` + // Estimated: `2564` + // Minimum execution time: 12_942_000 picoseconds. + Weight::from_parts(13_268_000, 2564) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: Refungible Allowance (r:1 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) fn transfer_from_normal() -> Weight { - Weight::from_ref_time(40_040_000 as u64) - .saturating_add(RocksDbWeight::get().reads(4 as u64)) - .saturating_add(RocksDbWeight::get().writes(3 as u64)) - } - // Storage: Refungible Allowance (r:1 w:1) - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TotalSupply (r:1 w:0) - // Storage: Refungible Owned (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `528` + // Estimated: `10223` + // Minimum execution time: 28_907_000 picoseconds. + Weight::from_parts(29_487_000, 10223) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: Refungible Allowance (r:1 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_from_creating() -> Weight { - Weight::from_ref_time(42_906_000 as u64) - .saturating_add(RocksDbWeight::get().reads(5 as u64)) - .saturating_add(RocksDbWeight::get().writes(5 as u64)) - } - // Storage: Refungible Allowance (r:1 w:1) - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TotalSupply (r:1 w:0) - // Storage: Refungible Owned (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `505` + // Estimated: `12763` + // Minimum execution time: 31_271_000 picoseconds. + Weight::from_parts(32_293_000, 12763) + .saturating_add(RocksDbWeight::get().reads(5_u64)) + .saturating_add(RocksDbWeight::get().writes(5_u64)) + } + /// Storage: Refungible Allowance (r:1 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_from_removing() -> Weight { - Weight::from_ref_time(46_112_000 as u64) - .saturating_add(RocksDbWeight::get().reads(5 as u64)) - .saturating_add(RocksDbWeight::get().writes(5 as u64)) - } - // Storage: Refungible Allowance (r:1 w:1) - // Storage: Refungible Balance (r:2 w:2) - // Storage: Refungible AccountBalance (r:2 w:2) - // Storage: Refungible TotalSupply (r:1 w:0) - // Storage: Refungible Owned (r:0 w:2) + // Proof Size summary in bytes: + // Measured: `620` + // Estimated: `12763` + // Minimum execution time: 34_295_000 picoseconds. + Weight::from_parts(34_924_000, 12763) + .saturating_add(RocksDbWeight::get().reads(5_u64)) + .saturating_add(RocksDbWeight::get().writes(5_u64)) + } + /// Storage: Refungible Allowance (r:1 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:2 w:2) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:2 w:2) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:0) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:2) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) fn transfer_from_creating_removing() -> Weight { - Weight::from_ref_time(45_102_000 as u64) - .saturating_add(RocksDbWeight::get().reads(6 as u64)) - .saturating_add(RocksDbWeight::get().writes(7 as u64)) - } - // Storage: Refungible Allowance (r:1 w:1) - // Storage: Refungible Balance (r:1 w:1) - // Storage: Refungible TotalSupply (r:1 w:1) - // Storage: Refungible AccountBalance (r:1 w:1) - // Storage: Refungible TokensBurnt (r:1 w:1) - // Storage: Refungible Owned (r:0 w:1) - // Storage: Refungible TokenProperties (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `505` + // Estimated: `15303` + // Minimum execution time: 35_447_000 picoseconds. + Weight::from_parts(35_896_000, 15303) + .saturating_add(RocksDbWeight::get().reads(6_u64)) + .saturating_add(RocksDbWeight::get().writes(7_u64)) + } + /// Storage: Refungible Allowance (r:1 w:1) + /// Proof: Refungible Allowance (max_values: None, max_size: Some(105), added: 2580, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:1 w:1) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) + /// Storage: Refungible TotalSupply (r:1 w:1) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible AccountBalance (r:1 w:1) + /// Proof: Refungible AccountBalance (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + /// Storage: Refungible TokensBurnt (r:1 w:1) + /// Proof: Refungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Refungible Owned (r:0 w:1) + /// Proof: Refungible Owned (max_values: None, max_size: Some(74), added: 2549, mode: MaxEncodedLen) + /// Storage: Refungible TokenProperties (r:0 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn burn_from() -> Weight { - Weight::from_ref_time(50_573_000 as u64) - .saturating_add(RocksDbWeight::get().reads(5 as u64)) - .saturating_add(RocksDbWeight::get().writes(7 as u64)) - } - // Storage: Common CollectionPropertyPermissions (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `505` + // Estimated: `12690` + // Minimum execution time: 39_395_000 picoseconds. + Weight::from_parts(40_119_000, 12690) + .saturating_add(RocksDbWeight::get().reads(5_u64)) + .saturating_add(RocksDbWeight::get().writes(7_u64)) + } + /// Storage: Common CollectionPropertyPermissions (r:1 w:1) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn set_token_property_permissions(b: u32, ) -> Weight { - Weight::from_ref_time(5_349_000 as u64) - // Standard Error: 41_409 - .saturating_add(Weight::from_ref_time(12_216_721 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Refungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `281` + // Estimated: `19201` + // Minimum execution time: 2_337_000 picoseconds. + Weight::from_parts(2_434_000, 19201) + // Standard Error: 43_425 + .saturating_add(Weight::from_parts(12_286_502, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: Refungible TokenProperties (r:1 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn set_token_properties(b: u32, ) -> Weight { - Weight::from_ref_time(12_947_117 as u64) - // Standard Error: 75_487 - .saturating_add(Weight::from_ref_time(6_809_149 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Refungible TokenProperties (r:1 w:1) - // Storage: Common CollectionPropertyPermissions (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `490 + b * (261 ±0)` + // Estimated: `54480` + // Minimum execution time: 11_857_000 picoseconds. + Weight::from_parts(12_007_000, 54480) + // Standard Error: 22_963 + .saturating_add(Weight::from_parts(6_609_180, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: Refungible TokenProperties (r:1 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:1 w:0) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// The range of component `b` is `[0, 64]`. fn delete_token_properties(b: u32, ) -> Weight { - Weight::from_ref_time(14_967_000 as u64) - // Standard Error: 66_400 - .saturating_add(Weight::from_ref_time(22_261_821 as u64).saturating_mul(b as u64)) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Refungible TotalSupply (r:1 w:1) - // Storage: Refungible Balance (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `527 + b * (33291 ±0)` + // Estimated: `54480` + // Minimum execution time: 12_001_000 picoseconds. + Weight::from_parts(12_197_000, 54480) + // Standard Error: 70_580 + .saturating_add(Weight::from_parts(21_847_004, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: Refungible TotalSupply (r:1 w:1) + /// Proof: Refungible TotalSupply (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + /// Storage: Refungible Balance (r:1 w:1) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) fn repartition_item() -> Weight { - Weight::from_ref_time(25_823_000 as u64) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - .saturating_add(RocksDbWeight::get().writes(2 as u64)) - } - // Storage: Refungible Balance (r:2 w:0) + // Proof Size summary in bytes: + // Measured: `321` + // Estimated: `5079` + // Minimum execution time: 14_497_000 picoseconds. + Weight::from_parts(14_825_000, 5079) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } + /// Storage: Refungible Balance (r:2 w:0) + /// Proof: Refungible Balance (max_values: None, max_size: Some(89), added: 2564, mode: MaxEncodedLen) fn token_owner() -> Weight { - Weight::from_ref_time(9_445_000 as u64) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) - } - // Storage: Refungible CollectionAllowance (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `321` + // Estimated: `5128` + // Minimum execution time: 8_888_000 picoseconds. + Weight::from_parts(9_373_000, 5128) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + } + /// Storage: Refungible CollectionAllowance (r:0 w:1) + /// Proof: Refungible CollectionAllowance (max_values: None, max_size: Some(111), added: 2586, mode: MaxEncodedLen) fn set_allowance_for_all() -> Weight { - Weight::from_ref_time(17_303_000 as u64) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) - } - // Storage: Refungible CollectionAllowance (r:1 w:0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_042_000 picoseconds. + Weight::from_parts(7_245_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: Refungible CollectionAllowance (r:1 w:0) + /// Proof: Refungible CollectionAllowance (max_values: None, max_size: Some(111), added: 2586, mode: MaxEncodedLen) fn allowance_for_all() -> Weight { - Weight::from_ref_time(5_352_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - } - // Storage: Refungible TokenProperties (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `4` + // Estimated: `2586` + // Minimum execution time: 3_425_000 picoseconds. + Weight::from_parts(3_554_000, 2586) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + } + /// Storage: Refungible TokenProperties (r:1 w:1) + /// Proof: Refungible TokenProperties (max_values: None, max_size: Some(32804), added: 35279, mode: MaxEncodedLen) fn repair_item() -> Weight { - Weight::from_ref_time(7_200_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `35279` + // Minimum execution time: 4_684_000 picoseconds. + Weight::from_parts(4_805_000, 35279) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } } + diff --git a/pallets/structure/src/weights.rs b/pallets/structure/src/weights.rs index 5abec283ce..d2431c913c 100644 --- a/pallets/structure/src/weights.rs +++ b/pallets/structure/src/weights.rs @@ -3,7 +3,8 @@ //! Autogenerated weights for pallet_structure //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-02-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-03-30, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -16,8 +17,7 @@ // compiled // --extrinsic // * -// --template -// .maintain/frame-weight-template.hbs +// --template=.maintain/frame-weight-template.hbs // --steps=50 // --repeat=80 // --heap-pages=4096 @@ -40,20 +40,33 @@ pub trait WeightInfo { /// Weights for pallet_structure using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - // Storage: Common CollectionById (r:1 w:0) - // Storage: Nonfungible TokenData (r:1 w:0) + /// Storage: Common CollectionById (r:1 w:0) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:1 w:0) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) fn find_parent() -> Weight { - Weight::from_ref_time(11_663_000 as u64) - .saturating_add(T::DbWeight::get().reads(2 as u64)) + // Proof Size summary in bytes: + // Measured: `698` + // Estimated: `5867` + // Minimum execution time: 9_834_000 picoseconds. + Weight::from_parts(10_073_000, 5867) + .saturating_add(T::DbWeight::get().reads(2_u64)) } } // For backwards compatibility and tests impl WeightInfo for () { - // Storage: Common CollectionById (r:1 w:0) - // Storage: Nonfungible TokenData (r:1 w:0) + /// Storage: Common CollectionById (r:1 w:0) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:1 w:0) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) fn find_parent() -> Weight { - Weight::from_ref_time(11_663_000 as u64) - .saturating_add(RocksDbWeight::get().reads(2 as u64)) + // Proof Size summary in bytes: + // Measured: `698` + // Estimated: `5867` + // Minimum execution time: 9_834_000 picoseconds. + Weight::from_parts(10_073_000, 5867) + .saturating_add(RocksDbWeight::get().reads(2_u64)) } } + diff --git a/pallets/unique/src/weights.rs b/pallets/unique/src/weights.rs index 783670d8ee..db81ed47ae 100644 --- a/pallets/unique/src/weights.rs +++ b/pallets/unique/src/weights.rs @@ -3,7 +3,8 @@ //! Autogenerated weights for pallet_unique //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-02-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-03-30, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -16,8 +17,7 @@ // compiled // --extrinsic // * -// --template -// .maintain/frame-weight-template.hbs +// --template=.maintain/frame-weight-template.hbs // --steps=50 // --repeat=80 // --heap-pages=4096 @@ -52,198 +52,363 @@ pub trait WeightInfo { /// Weights for pallet_unique using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - // Storage: Common CreatedCollectionCount (r:1 w:1) - // Storage: Common DestroyedCollectionCount (r:1 w:0) - // Storage: System Account (r:2 w:2) - // Storage: Common CollectionPropertyPermissions (r:0 w:1) - // Storage: Common CollectionProperties (r:0 w:1) - // Storage: Common CollectionById (r:0 w:1) + /// Storage: Common CreatedCollectionCount (r:1 w:1) + /// Proof: Common CreatedCollectionCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Common DestroyedCollectionCount (r:1 w:0) + /// Proof: Common DestroyedCollectionCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:0 w:1) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Common CollectionProperties (r:0 w:1) + /// Proof: Common CollectionProperties (max_values: None, max_size: Some(40992), added: 43467, mode: MaxEncodedLen) + /// Storage: Common CollectionById (r:0 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn create_collection() -> Weight { - Weight::from_ref_time(47_681_000 as u64) - .saturating_add(T::DbWeight::get().reads(4 as u64)) - .saturating_add(T::DbWeight::get().writes(6 as u64)) - } - // Storage: Common CollectionById (r:1 w:1) - // Storage: Nonfungible TokenData (r:1 w:0) - // Storage: Common DestroyedCollectionCount (r:1 w:1) - // Storage: Nonfungible TokensMinted (r:0 w:1) - // Storage: Nonfungible TokensBurnt (r:0 w:1) - // Storage: Common AdminAmount (r:0 w:1) - // Storage: Common CollectionProperties (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `277` + // Estimated: `6204` + // Minimum execution time: 37_430_000 picoseconds. + Weight::from_parts(42_154_000, 6204) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) + } + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:1 w:0) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Common DestroyedCollectionCount (r:1 w:1) + /// Proof: Common DestroyedCollectionCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Nonfungible TokensMinted (r:0 w:1) + /// Proof: Nonfungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible TokensBurnt (r:0 w:1) + /// Proof: Nonfungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Common AdminAmount (r:0 w:1) + /// Proof: Common AdminAmount (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) + /// Storage: Common CollectionProperties (r:0 w:1) + /// Proof: Common CollectionProperties (max_values: None, max_size: Some(40992), added: 43467, mode: MaxEncodedLen) fn destroy_collection() -> Weight { - Weight::from_ref_time(58_371_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(6 as u64)) + // Proof Size summary in bytes: + // Measured: `1118` + // Estimated: `6366` + // Minimum execution time: 51_399_000 picoseconds. + Weight::from_parts(52_256_000, 6366) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } - // Storage: Common CollectionById (r:1 w:0) - // Storage: Common Allowlist (r:0 w:1) + /// Storage: Common CollectionById (r:1 w:0) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Common Allowlist (r:0 w:1) + /// Proof: Common Allowlist (max_values: None, max_size: Some(70), added: 2545, mode: MaxEncodedLen) fn add_to_allow_list() -> Weight { - Weight::from_ref_time(28_197_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `3335` + // Minimum execution time: 16_355_000 picoseconds. + Weight::from_parts(16_737_000, 3335) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:0) - // Storage: Common Allowlist (r:0 w:1) + /// Storage: Common CollectionById (r:1 w:0) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Common Allowlist (r:0 w:1) + /// Proof: Common Allowlist (max_values: None, max_size: Some(70), added: 2545, mode: MaxEncodedLen) fn remove_from_allow_list() -> Weight { - Weight::from_ref_time(27_782_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `1032` + // Estimated: `3335` + // Minimum execution time: 15_812_000 picoseconds. + Weight::from_parts(16_102_000, 3335) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn change_collection_owner() -> Weight { - Weight::from_ref_time(27_100_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `3335` + // Minimum execution time: 15_072_000 picoseconds. + Weight::from_parts(15_540_000, 3335) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:0) - // Storage: Common IsAdmin (r:1 w:1) - // Storage: Common AdminAmount (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:0) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Common IsAdmin (r:1 w:1) + /// Proof: Common IsAdmin (max_values: None, max_size: Some(70), added: 2545, mode: MaxEncodedLen) + /// Storage: Common AdminAmount (r:1 w:1) + /// Proof: Common AdminAmount (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) fn add_collection_admin() -> Weight { - Weight::from_ref_time(31_037_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `8379` + // Minimum execution time: 18_268_000 picoseconds. + Weight::from_parts(18_931_000, 8379) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } - // Storage: Common CollectionById (r:1 w:0) - // Storage: Common IsAdmin (r:1 w:1) - // Storage: Common AdminAmount (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:0) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Common IsAdmin (r:1 w:1) + /// Proof: Common IsAdmin (max_values: None, max_size: Some(70), added: 2545, mode: MaxEncodedLen) + /// Storage: Common AdminAmount (r:1 w:1) + /// Proof: Common AdminAmount (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) fn remove_collection_admin() -> Weight { - Weight::from_ref_time(34_543_000 as u64) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `1139` + // Estimated: `8379` + // Minimum execution time: 21_786_000 picoseconds. + Weight::from_parts(22_088_000, 8379) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } - // Storage: Common CollectionById (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn set_collection_sponsor() -> Weight { - Weight::from_ref_time(27_109_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `3335` + // Minimum execution time: 15_245_000 picoseconds. + Weight::from_parts(15_574_000, 3335) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn confirm_sponsorship() -> Weight { - Weight::from_ref_time(26_916_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `1031` + // Estimated: `3335` + // Minimum execution time: 15_073_000 picoseconds. + Weight::from_parts(15_407_000, 3335) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn remove_collection_sponsor() -> Weight { - Weight::from_ref_time(29_279_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `1031` + // Estimated: `3335` + // Minimum execution time: 14_938_000 picoseconds. + Weight::from_parts(15_262_000, 3335) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn set_transfers_enabled_flag() -> Weight { - Weight::from_ref_time(13_064_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `3335` + // Minimum execution time: 10_318_000 picoseconds. + Weight::from_parts(10_652_000, 3335) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn set_collection_limits() -> Weight { - Weight::from_ref_time(27_442_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `3335` + // Minimum execution time: 15_535_000 picoseconds. + Weight::from_parts(15_937_000, 3335) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } - // Storage: Common CollectionProperties (r:1 w:1) + /// Storage: Common CollectionProperties (r:1 w:1) + /// Proof: Common CollectionProperties (max_values: None, max_size: Some(40992), added: 43467, mode: MaxEncodedLen) fn force_repair_collection() -> Weight { - Weight::from_ref_time(10_730_000 as u64) - .saturating_add(T::DbWeight::get().reads(1 as u64)) - .saturating_add(T::DbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `265` + // Estimated: `43467` + // Minimum execution time: 8_178_000 picoseconds. + Weight::from_parts(8_390_000, 43467) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } } // For backwards compatibility and tests impl WeightInfo for () { - // Storage: Common CreatedCollectionCount (r:1 w:1) - // Storage: Common DestroyedCollectionCount (r:1 w:0) - // Storage: System Account (r:2 w:2) - // Storage: Common CollectionPropertyPermissions (r:0 w:1) - // Storage: Common CollectionProperties (r:0 w:1) - // Storage: Common CollectionById (r:0 w:1) + /// Storage: Common CreatedCollectionCount (r:1 w:1) + /// Proof: Common CreatedCollectionCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Common DestroyedCollectionCount (r:1 w:0) + /// Proof: Common DestroyedCollectionCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: System Account (r:2 w:2) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: Common CollectionPropertyPermissions (r:0 w:1) + /// Proof: Common CollectionPropertyPermissions (max_values: None, max_size: Some(16726), added: 19201, mode: MaxEncodedLen) + /// Storage: Common CollectionProperties (r:0 w:1) + /// Proof: Common CollectionProperties (max_values: None, max_size: Some(40992), added: 43467, mode: MaxEncodedLen) + /// Storage: Common CollectionById (r:0 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn create_collection() -> Weight { - Weight::from_ref_time(47_681_000 as u64) - .saturating_add(RocksDbWeight::get().reads(4 as u64)) - .saturating_add(RocksDbWeight::get().writes(6 as u64)) - } - // Storage: Common CollectionById (r:1 w:1) - // Storage: Nonfungible TokenData (r:1 w:0) - // Storage: Common DestroyedCollectionCount (r:1 w:1) - // Storage: Nonfungible TokensMinted (r:0 w:1) - // Storage: Nonfungible TokensBurnt (r:0 w:1) - // Storage: Common AdminAmount (r:0 w:1) - // Storage: Common CollectionProperties (r:0 w:1) + // Proof Size summary in bytes: + // Measured: `277` + // Estimated: `6204` + // Minimum execution time: 37_430_000 picoseconds. + Weight::from_parts(42_154_000, 6204) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(6_u64)) + } + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Nonfungible TokenData (r:1 w:0) + /// Proof: Nonfungible TokenData (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + /// Storage: Common DestroyedCollectionCount (r:1 w:1) + /// Proof: Common DestroyedCollectionCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// Storage: Nonfungible TokensMinted (r:0 w:1) + /// Proof: Nonfungible TokensMinted (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Nonfungible TokensBurnt (r:0 w:1) + /// Proof: Nonfungible TokensBurnt (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + /// Storage: Common AdminAmount (r:0 w:1) + /// Proof: Common AdminAmount (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) + /// Storage: Common CollectionProperties (r:0 w:1) + /// Proof: Common CollectionProperties (max_values: None, max_size: Some(40992), added: 43467, mode: MaxEncodedLen) fn destroy_collection() -> Weight { - Weight::from_ref_time(58_371_000 as u64) - .saturating_add(RocksDbWeight::get().reads(3 as u64)) - .saturating_add(RocksDbWeight::get().writes(6 as u64)) + // Proof Size summary in bytes: + // Measured: `1118` + // Estimated: `6366` + // Minimum execution time: 51_399_000 picoseconds. + Weight::from_parts(52_256_000, 6366) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(6_u64)) } - // Storage: Common CollectionById (r:1 w:0) - // Storage: Common Allowlist (r:0 w:1) + /// Storage: Common CollectionById (r:1 w:0) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Common Allowlist (r:0 w:1) + /// Proof: Common Allowlist (max_values: None, max_size: Some(70), added: 2545, mode: MaxEncodedLen) fn add_to_allow_list() -> Weight { - Weight::from_ref_time(28_197_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `3335` + // Minimum execution time: 16_355_000 picoseconds. + Weight::from_parts(16_737_000, 3335) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:0) - // Storage: Common Allowlist (r:0 w:1) + /// Storage: Common CollectionById (r:1 w:0) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Common Allowlist (r:0 w:1) + /// Proof: Common Allowlist (max_values: None, max_size: Some(70), added: 2545, mode: MaxEncodedLen) fn remove_from_allow_list() -> Weight { - Weight::from_ref_time(27_782_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `1032` + // Estimated: `3335` + // Minimum execution time: 15_812_000 picoseconds. + Weight::from_parts(16_102_000, 3335) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn change_collection_owner() -> Weight { - Weight::from_ref_time(27_100_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `3335` + // Minimum execution time: 15_072_000 picoseconds. + Weight::from_parts(15_540_000, 3335) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:0) - // Storage: Common IsAdmin (r:1 w:1) - // Storage: Common AdminAmount (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:0) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Common IsAdmin (r:1 w:1) + /// Proof: Common IsAdmin (max_values: None, max_size: Some(70), added: 2545, mode: MaxEncodedLen) + /// Storage: Common AdminAmount (r:1 w:1) + /// Proof: Common AdminAmount (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) fn add_collection_admin() -> Weight { - Weight::from_ref_time(31_037_000 as u64) - .saturating_add(RocksDbWeight::get().reads(3 as u64)) - .saturating_add(RocksDbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `8379` + // Minimum execution time: 18_268_000 picoseconds. + Weight::from_parts(18_931_000, 8379) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) } - // Storage: Common CollectionById (r:1 w:0) - // Storage: Common IsAdmin (r:1 w:1) - // Storage: Common AdminAmount (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:0) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) + /// Storage: Common IsAdmin (r:1 w:1) + /// Proof: Common IsAdmin (max_values: None, max_size: Some(70), added: 2545, mode: MaxEncodedLen) + /// Storage: Common AdminAmount (r:1 w:1) + /// Proof: Common AdminAmount (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) fn remove_collection_admin() -> Weight { - Weight::from_ref_time(34_543_000 as u64) - .saturating_add(RocksDbWeight::get().reads(3 as u64)) - .saturating_add(RocksDbWeight::get().writes(2 as u64)) + // Proof Size summary in bytes: + // Measured: `1139` + // Estimated: `8379` + // Minimum execution time: 21_786_000 picoseconds. + Weight::from_parts(22_088_000, 8379) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) } - // Storage: Common CollectionById (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn set_collection_sponsor() -> Weight { - Weight::from_ref_time(27_109_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `3335` + // Minimum execution time: 15_245_000 picoseconds. + Weight::from_parts(15_574_000, 3335) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn confirm_sponsorship() -> Weight { - Weight::from_ref_time(26_916_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `1031` + // Estimated: `3335` + // Minimum execution time: 15_073_000 picoseconds. + Weight::from_parts(15_407_000, 3335) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn remove_collection_sponsor() -> Weight { - Weight::from_ref_time(29_279_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `1031` + // Estimated: `3335` + // Minimum execution time: 14_938_000 picoseconds. + Weight::from_parts(15_262_000, 3335) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn set_transfers_enabled_flag() -> Weight { - Weight::from_ref_time(13_064_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `3335` + // Minimum execution time: 10_318_000 picoseconds. + Weight::from_parts(10_652_000, 3335) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Common CollectionById (r:1 w:1) + /// Storage: Common CollectionById (r:1 w:1) + /// Proof: Common CollectionById (max_values: None, max_size: Some(860), added: 3335, mode: MaxEncodedLen) fn set_collection_limits() -> Weight { - Weight::from_ref_time(27_442_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `3335` + // Minimum execution time: 15_535_000 picoseconds. + Weight::from_parts(15_937_000, 3335) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } - // Storage: Common CollectionProperties (r:1 w:1) + /// Storage: Common CollectionProperties (r:1 w:1) + /// Proof: Common CollectionProperties (max_values: None, max_size: Some(40992), added: 43467, mode: MaxEncodedLen) fn force_repair_collection() -> Weight { - Weight::from_ref_time(10_730_000 as u64) - .saturating_add(RocksDbWeight::get().reads(1 as u64)) - .saturating_add(RocksDbWeight::get().writes(1 as u64)) + // Proof Size summary in bytes: + // Measured: `265` + // Estimated: `43467` + // Minimum execution time: 8_178_000 picoseconds. + Weight::from_parts(8_390_000, 43467) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) } } + diff --git a/primitives/common/src/constants.rs b/primitives/common/src/constants.rs index 56b000ef49..bc91c95305 100644 --- a/primitives/common/src/constants.rs +++ b/primitives/common/src/constants.rs @@ -52,10 +52,10 @@ pub const MAX_COLLATORS: u32 = 10; pub const SESSION_LENGTH: BlockNumber = HOURS; // Targeting 0.1 UNQ per transfer -pub const WEIGHT_TO_FEE_COEFF: u64 = /**/77_246_728_691_397_557/**/; +pub const WEIGHT_TO_FEE_COEFF: u64 = /**/78_240_337_566_697_829/**/; // Targeting 0.15 UNQ per transfer via ETH -pub const MIN_GAS_PRICE: u64 = /**/1_017_135_340_028/**/; +pub const MIN_GAS_PRICE: u64 = /**/1_031_842_664_630/**/; /// We assume that ~10% of the block weight is consumed by `on_initalize` handlers. /// This is used to limit the maximal weight of a single extrinsic. diff --git a/runtime/common/weights/xcm.rs b/runtime/common/weights/xcm.rs index 56cbd81b23..ed3ccafa58 100644 --- a/runtime/common/weights/xcm.rs +++ b/runtime/common/weights/xcm.rs @@ -3,7 +3,7 @@ //! Autogenerated weights for pallet_xcm //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-03-10, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-03-30, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -35,18 +35,24 @@ use sp_std::marker::PhantomData; /// Weights for pallet_xcm using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl pallet_xcm::WeightInfo for SubstrateWeight { + /// Storage: PolkadotXcm SupportedVersion (r:1 w:0) + /// Proof Skipped: PolkadotXcm SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: PolkadotXcm VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + /// Proof Skipped: PolkadotXcm SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) /// Storage: ParachainSystem HostConfiguration (r:1 w:0) /// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured) /// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) /// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured) fn send() -> Weight { // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `1274` - // Minimum execution time: 11_382_000 picoseconds. - Weight::from_parts(11_812_000, 1274) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) + // Measured: `211` + // Estimated: `5510` + // Minimum execution time: 17_608_000 picoseconds. + Weight::from_parts(18_024_000, 5510) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: ParachainInfo ParachainId (r:1 w:0) /// Proof: ParachainInfo ParachainId (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) @@ -54,8 +60,8 @@ impl pallet_xcm::WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `136` // Estimated: `499` - // Minimum execution time: 13_195_000 picoseconds. - Weight::from_parts(13_685_000, 499) + // Minimum execution time: 17_648_000 picoseconds. + Weight::from_parts(18_103_000, 499) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: ParachainInfo ParachainId (r:1 w:0) @@ -64,16 +70,16 @@ impl pallet_xcm::WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `136` // Estimated: `499` - // Minimum execution time: 12_784_000 picoseconds. - Weight::from_parts(13_155_000, 499) + // Minimum execution time: 17_529_000 picoseconds. + Weight::from_parts(18_009_000, 499) .saturating_add(T::DbWeight::get().reads(1_u64)) } fn execute() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_569_000 picoseconds. - Weight::from_parts(4_819_000, 0) + // Minimum execution time: 5_314_000 picoseconds. + Weight::from_parts(6_053_000, 0) } /// Storage: PolkadotXcm SupportedVersion (r:0 w:1) /// Proof Skipped: PolkadotXcm SupportedVersion (max_values: None, max_size: None, mode: Measured) @@ -81,8 +87,8 @@ impl pallet_xcm::WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_919_000 picoseconds. - Weight::from_parts(5_250_000, 0) + // Minimum execution time: 5_577_000 picoseconds. + Weight::from_parts(5_831_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: PolkadotXcm SafeXcmVersion (r:0 w:1) @@ -91,14 +97,20 @@ impl pallet_xcm::WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_593_000 picoseconds. - Weight::from_parts(1_723_000, 0) + // Minimum execution time: 1_902_000 picoseconds. + Weight::from_parts(2_018_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: PolkadotXcm VersionNotifiers (r:1 w:1) /// Proof Skipped: PolkadotXcm VersionNotifiers (max_values: None, max_size: None, mode: Measured) /// Storage: PolkadotXcm QueryCounter (r:1 w:1) /// Proof Skipped: PolkadotXcm QueryCounter (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PolkadotXcm SupportedVersion (r:1 w:0) + /// Proof Skipped: PolkadotXcm SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: PolkadotXcm VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + /// Proof Skipped: PolkadotXcm SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) /// Storage: ParachainSystem HostConfiguration (r:1 w:0) /// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured) /// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) @@ -107,15 +119,21 @@ impl pallet_xcm::WeightInfo for SubstrateWeight { /// Proof Skipped: PolkadotXcm Queries (max_values: None, max_size: None, mode: Measured) fn force_subscribe_version_notify() -> Weight { // Proof Size summary in bytes: - // Measured: `184` - // Estimated: `4880` - // Minimum execution time: 16_832_000 picoseconds. - Weight::from_parts(17_984_000, 4880) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) + // Measured: `211` + // Estimated: `9113` + // Minimum execution time: 21_675_000 picoseconds. + Weight::from_parts(22_161_000, 9113) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) } /// Storage: PolkadotXcm VersionNotifiers (r:1 w:1) /// Proof Skipped: PolkadotXcm VersionNotifiers (max_values: None, max_size: None, mode: Measured) + /// Storage: PolkadotXcm SupportedVersion (r:1 w:0) + /// Proof Skipped: PolkadotXcm SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: PolkadotXcm VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + /// Proof Skipped: PolkadotXcm SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) /// Storage: ParachainSystem HostConfiguration (r:1 w:0) /// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured) /// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) @@ -124,21 +142,21 @@ impl pallet_xcm::WeightInfo for SubstrateWeight { /// Proof Skipped: PolkadotXcm Queries (max_values: None, max_size: None, mode: Measured) fn force_unsubscribe_version_notify() -> Weight { // Proof Size summary in bytes: - // Measured: `341` - // Estimated: `4829` - // Minimum execution time: 19_256_000 picoseconds. - Weight::from_parts(20_228_000, 4829) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) + // Measured: `394` + // Estimated: `9688` + // Minimum execution time: 24_643_000 picoseconds. + Weight::from_parts(25_027_000, 9688) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } /// Storage: PolkadotXcm SupportedVersion (r:4 w:2) /// Proof Skipped: PolkadotXcm SupportedVersion (max_values: None, max_size: None, mode: Measured) fn migrate_supported_version() -> Weight { // Proof Size summary in bytes: - // Measured: `108` - // Estimated: `10008` - // Minimum execution time: 14_437_000 picoseconds. - Weight::from_parts(15_750_000, 10008) + // Measured: `131` + // Estimated: `10031` + // Minimum execution time: 14_077_000 picoseconds. + Weight::from_parts(14_594_000, 10031) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -146,10 +164,10 @@ impl pallet_xcm::WeightInfo for SubstrateWeight { /// Proof Skipped: PolkadotXcm VersionNotifiers (max_values: None, max_size: None, mode: Measured) fn migrate_version_notifiers() -> Weight { // Proof Size summary in bytes: - // Measured: `112` - // Estimated: `10012` - // Minimum execution time: 14_617_000 picoseconds. - Weight::from_parts(16_000_000, 10012) + // Measured: `135` + // Estimated: `10035` + // Minimum execution time: 14_117_000 picoseconds. + Weight::from_parts(14_590_000, 10035) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -157,62 +175,74 @@ impl pallet_xcm::WeightInfo for SubstrateWeight { /// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) fn already_notified_target() -> Weight { // Proof Size summary in bytes: - // Measured: `119` - // Estimated: `12494` - // Minimum execution time: 18_395_000 picoseconds. - Weight::from_parts(19_858_000, 12494) + // Measured: `142` + // Estimated: `12517` + // Minimum execution time: 16_284_000 picoseconds. + Weight::from_parts(16_817_000, 12517) .saturating_add(T::DbWeight::get().reads(5_u64)) } /// Storage: PolkadotXcm VersionNotifyTargets (r:2 w:1) /// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + /// Storage: PolkadotXcm SupportedVersion (r:1 w:0) + /// Proof Skipped: PolkadotXcm SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: PolkadotXcm VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + /// Proof Skipped: PolkadotXcm SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) /// Storage: ParachainSystem HostConfiguration (r:1 w:0) /// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured) /// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) /// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured) fn notify_current_targets() -> Weight { // Proof Size summary in bytes: - // Measured: `255` - // Estimated: `6705` - // Minimum execution time: 17_443_000 picoseconds. - Weight::from_parts(18_435_000, 6705) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) + // Measured: `278` + // Estimated: `11073` + // Minimum execution time: 21_980_000 picoseconds. + Weight::from_parts(22_452_000, 11073) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } /// Storage: PolkadotXcm VersionNotifyTargets (r:3 w:0) /// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) fn notify_target_migration_fail() -> Weight { // Proof Size summary in bytes: - // Measured: `149` - // Estimated: `7574` - // Minimum execution time: 7_714_000 picoseconds. - Weight::from_parts(8_526_000, 7574) + // Measured: `172` + // Estimated: `7597` + // Minimum execution time: 6_848_000 picoseconds. + Weight::from_parts(7_077_000, 7597) .saturating_add(T::DbWeight::get().reads(3_u64)) } /// Storage: PolkadotXcm VersionNotifyTargets (r:4 w:2) /// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) fn migrate_version_notify_targets() -> Weight { // Proof Size summary in bytes: - // Measured: `119` - // Estimated: `10019` - // Minimum execution time: 15_008_000 picoseconds. - Weight::from_parts(16_271_000, 10019) + // Measured: `142` + // Estimated: `10042` + // Minimum execution time: 14_509_000 picoseconds. + Weight::from_parts(15_012_000, 10042) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: PolkadotXcm VersionNotifyTargets (r:4 w:2) /// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured) + /// Storage: PolkadotXcm SupportedVersion (r:1 w:0) + /// Proof Skipped: PolkadotXcm SupportedVersion (max_values: None, max_size: None, mode: Measured) + /// Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + /// Proof Skipped: PolkadotXcm VersionDiscoveryQueue (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + /// Proof Skipped: PolkadotXcm SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured) /// Storage: ParachainSystem HostConfiguration (r:1 w:0) /// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured) /// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) /// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured) fn migrate_and_notify_old_targets() -> Weight { // Proof Size summary in bytes: - // Measured: `261` - // Estimated: `11673` - // Minimum execution time: 23_554_000 picoseconds. - Weight::from_parts(25_158_000, 11673) - .saturating_add(T::DbWeight::get().reads(6_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) + // Measured: `284` + // Estimated: `16059` + // Minimum execution time: 27_426_000 picoseconds. + Weight::from_parts(27_878_000, 16059) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } } From a663cc9dac43795cb78c03e9f22fda043f2cd791 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 30 Mar 2023 22:10:42 +0200 Subject: [PATCH 075/103] test: collator selection esm --- tests/package.json | 6 +++--- tests/src/xcm/xcmQuartz.test.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/package.json b/tests/package.json index 0c67cede23..84151fd84a 100644 --- a/tests/package.json +++ b/tests/package.json @@ -102,9 +102,9 @@ "testPromotion": "yarn _test ./**/appPromotion/*test.ts", "testApiConsts": "yarn _test ./**/apiConsts.test.ts", - "testCollators": "RUN_COLLATOR_TESTS=1 mocha --timeout 49999999 -r ts-node/register ./**/collator-selection/**.*test.ts", - "testCollatorSelection": "RUN_COLLATOR_TESTS=1 mocha --timeout 49999999 -r ts-node/register ./**/collatorSelection.*test.ts", - "testIdentity": "RUN_COLLATOR_TESTS=1 mocha --timeout 49999999 -r ts-node/register ./**/identity.*test.ts", + "testCollators": "RUN_COLLATOR_TESTS=1 yarn _test ./**/collator-selection/**.*test.ts", + "testCollatorSelection": "RUN_COLLATOR_TESTS=1 yarn _test ./**/collatorSelection.*test.ts", + "testIdentity": "RUN_COLLATOR_TESTS=1 yarn _test ./**/identity.*test.ts", "testXcmUnique": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmUnique.test.ts", "testXcmQuartz": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmQuartz.test.ts", "testXcmOpal": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmOpal.test.ts", diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index 2616b32aaf..bebd63ce1f 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -741,7 +741,7 @@ describeXCM('[XCM] Integration test: Exchanging QTZ with Moonriver', () => { [randomAccountQuartz] = await helper.arrange.createAccounts([0n], quartzDonor); balanceForeignQtzTokenInit = 0n; - + // Set the default version to wrap the first message to other chains. const alice = quartzDonor; await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); From 99048b774c52ee467cb9b23907f25c4ef0256210 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 31 Mar 2023 13:08:19 +0200 Subject: [PATCH 076/103] fix: use measured mode for maintenance execute_preimage --- pallets/maintenance/src/benchmarking.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pallets/maintenance/src/benchmarking.rs b/pallets/maintenance/src/benchmarking.rs index 6ff51d6597..21d3bf7d31 100644 --- a/pallets/maintenance/src/benchmarking.rs +++ b/pallets/maintenance/src/benchmarking.rs @@ -36,6 +36,10 @@ benchmarks! { ensure!(!>::get(), "didn't disable the MM"); } + #[pov_mode = MaxEncodedLen { + // PoV size is deducted from weight_bound + Preimage::PreimageFor: Measured + }] execute_preimage { let call = ::RuntimeCall::from(frame_system::Call::::remark { remark: 1u32.encode() }); let hash = T::Preimages::note(call.encode().into())?; From f2e639843bdd0940a2ad56c55ca4d1a74793026f Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Fri, 31 Mar 2023 09:09:08 +0000 Subject: [PATCH 077/103] Fix local XCM config --- tests/src/xcm/xcmQuartz.test.ts | 15 +++++++-------- tests/src/xcm/xcmUnique.test.ts | 15 +++++++-------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index bebd63ce1f..84203f3070 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -995,13 +995,13 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours? const qtzToShidenTransferred = 10n * (10n ** QTZ_DECIMALS); // 10 QTZ const qtzToShidenArrived = 9_999_999_999_088_000_000n; // 9.999 ... QTZ, Shiden takes a commision in foreign tokens - const senderIinitialBalanceQTZ = 100n * (10n ** QTZ_DECIMALS); // How many QTZ sender has initially - const senderBalanceAfterXCM = 89_946678090945539197n; // 89.94... QTZ after XCM call // Shiden -> Quartz const qtzFromShidenTransfered = 5n * (10n ** QTZ_DECIMALS); // 5 QTZ const qtzOnShidenLeft = qtzToShidenArrived - qtzFromShidenTransfered; // 4.999_999_999_088_000_000n QTZ + let balanceAfterQuartzToShidenXCM: bigint; + before(async () => { await usingPlaygrounds(async (helper, privateKey) => { alice = await privateKey('//Alice'); @@ -1097,16 +1097,15 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { // Initial balance is 100 QTZ const balanceBefore = await helper.balance.getSubstrate(sender.address); console.log(`Initial balance is: ${balanceBefore}`); - expect(balanceBefore).to.eq(senderIinitialBalanceQTZ); const feeAssetItem = 0; await helper.xcm.limitedReserveTransferAssets(sender, destination, beneficiary, assets, feeAssetItem, 'Unlimited'); // Balance after reserve transfer is less than 90 - const balanceAfter = await helper.balance.getSubstrate(sender.address); - console.log(`QTZ Balance on Quartz after XCM is: ${balanceAfter}`); - console.log(`Quartz's QTZ commission is: ${balanceBefore - balanceAfter}`); - expect(balanceAfter).to.eq(senderBalanceAfterXCM); + balanceAfterQuartzToShidenXCM = await helper.balance.getSubstrate(sender.address); + console.log(`QTZ Balance on Quartz after XCM is: ${balanceAfterQuartzToShidenXCM}`); + console.log(`Quartz's QTZ commission is: ${balanceBefore - balanceAfterQuartzToShidenXCM}`); + expect(balanceBefore - balanceAfterQuartzToShidenXCM > 0).to.be.true; await usingShidenPlaygrounds(shidenUrl, async (helper) => { await helper.wait.newBlocks(3); @@ -1192,6 +1191,6 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { await helper.wait.newBlocks(3); const balanceQTZ = await helper.balance.getSubstrate(sender.address); console.log(`QTZ Balance on Quartz after XCM is: ${balanceQTZ}`); - expect(balanceQTZ).to.eq(senderBalanceAfterXCM + qtzFromShidenTransfered); + expect(balanceQTZ).to.eq(balanceAfterQuartzToShidenXCM + qtzFromShidenTransfered); }); }); diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index c78ed4fce5..0d32a32c40 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -997,13 +997,13 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours? const unqToAstarTransferred = 10n * (10n ** UNQ_DECIMALS); // 10 UNQ const unqToAstarArrived = 9_999_999_999_088_000_000n; // 9.999 ... UNQ, Shiden takes a commision in foreign tokens - const senderIinitialBalanceUNQ = 100n * (10n ** UNQ_DECIMALS); // How many UNQ sender has initially - const senderBalanceAfterXCM = 89_946678090945539197n; // 89.94... UNQ after XCM call // Astar -> Unique const unqFromAstarTransfered = 5n * (10n ** UNQ_DECIMALS); // 5 UNQ const unqOnAstarLeft = unqToAstarArrived - unqFromAstarTransfered; // 4.999_999_999_088_000_000n UNQ + let balanceAfterUniqueToAstarXCM: bigint; + before(async () => { await usingPlaygrounds(async (helper, privateKey) => { alice = await privateKey('//Alice'); @@ -1099,16 +1099,15 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { // Initial balance is 100 UNQ const balanceBefore = await helper.balance.getSubstrate(randomAccount.address); console.log(`Initial balance is: ${balanceBefore}`); - expect(balanceBefore).to.eq(senderIinitialBalanceUNQ); const feeAssetItem = 0; await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited'); // Balance after reserve transfer is less than 90 - const balanceAfter = await helper.balance.getSubstrate(randomAccount.address); - console.log(`UNQ Balance on Unique after XCM is: ${balanceAfter}`); - console.log(`Unique's UNQ commission is: ${balanceBefore - balanceAfter}`); - expect(balanceAfter).to.eq(senderBalanceAfterXCM); + balanceAfterUniqueToAstarXCM = await helper.balance.getSubstrate(randomAccount.address); + console.log(`UNQ Balance on Unique after XCM is: ${balanceAfterUniqueToAstarXCM}`); + console.log(`Unique's UNQ commission is: ${balanceBefore - balanceAfterUniqueToAstarXCM}`); + expect(balanceBefore - balanceAfterUniqueToAstarXCM > 0).to.be.true; await usingAstarPlaygrounds(astarUrl, async (helper) => { await helper.wait.newBlocks(3); @@ -1193,7 +1192,7 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { await helper.wait.newBlocks(3); const balanceUNQ = await helper.balance.getSubstrate(randomAccount.address); console.log(`UNQ Balance on Unique after XCM is: ${balanceUNQ}`); - expect(balanceUNQ).to.eq(senderBalanceAfterXCM + unqFromAstarTransfered); + expect(balanceUNQ).to.eq(balanceAfterUniqueToAstarXCM + unqFromAstarTransfered); }); itSub.skip('Should not accept limitedReserveTransfer of UNQ from ASTAR', async ({helper}) => { From 4d9e5e5613e62158d6e966224abc11163ed07ac7 Mon Sep 17 00:00:00 2001 From: Konstantin Astakhov Date: Fri, 31 Mar 2023 16:31:18 +0700 Subject: [PATCH 078/103] fix astar version for opal --- .github/workflows/xcm.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/xcm.yml b/.github/workflows/xcm.yml index 45fcaa8dd6..9874ce5f33 100644 --- a/.github/workflows/xcm.yml +++ b/.github/workflows/xcm.yml @@ -40,7 +40,7 @@ jobs: id: create_matrix with: matrix: | - network {opal}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.WESTMINT_BUILD_BRANCH }}}, runtest {testXcmOpal} + network {opal}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.WESTMINT_BUILD_BRANCH }}}, astar_version {${{ env.ASTAR_BUILD_BRANCH }}}, runtest {testXcmOpal} network {quartz}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, acala_version {${{ env.KARURA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONRIVER_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINE_BUILD_BRANCH }}}, astar_version {${{ env.SHIDEN_BUILD_BRANCH }}}, runtest {testXcmQuartz} network {unique}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINT_BUILD_BRANCH }}}, astar_version {${{ env.ASTAR_BUILD_BRANCH }}}, runtest {testXcmUnique} From 921f6a5d13f947f869ca5f34f41cc103a73f31a2 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 31 Mar 2023 13:26:11 +0200 Subject: [PATCH 079/103] build: regenerate maintenance.execute_preimage weight --- pallets/maintenance/src/weights.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pallets/maintenance/src/weights.rs b/pallets/maintenance/src/weights.rs index de6f6df056..4e2cd43e7e 100644 --- a/pallets/maintenance/src/weights.rs +++ b/pallets/maintenance/src/weights.rs @@ -65,13 +65,13 @@ impl WeightInfo for SubstrateWeight { /// Storage: Preimage StatusFor (r:1 w:0) /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) /// Storage: Preimage PreimageFor (r:1 w:0) - /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured) fn execute_preimage() -> Weight { // Proof Size summary in bytes: // Measured: `209` - // Estimated: `4199385` - // Minimum execution time: 11_496_000 picoseconds. - Weight::from_parts(11_719_000, 4199385) + // Estimated: `5250` + // Minimum execution time: 10_004_000 picoseconds. + Weight::from_parts(10_964_000, 5250) .saturating_add(T::DbWeight::get().reads(2_u64)) } } @@ -101,13 +101,13 @@ impl WeightInfo for () { /// Storage: Preimage StatusFor (r:1 w:0) /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) /// Storage: Preimage PreimageFor (r:1 w:0) - /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) + /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured) fn execute_preimage() -> Weight { // Proof Size summary in bytes: // Measured: `209` - // Estimated: `4199385` - // Minimum execution time: 11_496_000 picoseconds. - Weight::from_parts(11_719_000, 4199385) + // Estimated: `5250` + // Minimum execution time: 10_004_000 picoseconds. + Weight::from_parts(10_964_000, 5250) .saturating_add(RocksDbWeight::get().reads(2_u64)) } } From 918a89d5ced7838900854e735f2e48b7da29429d Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 31 Mar 2023 13:38:01 +0200 Subject: [PATCH 080/103] test: fix out of gas --- tests/src/eth/fractionalizer/fractionalizer.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/src/eth/fractionalizer/fractionalizer.test.ts b/tests/src/eth/fractionalizer/fractionalizer.test.ts index 9706487489..641721ef4b 100644 --- a/tests/src/eth/fractionalizer/fractionalizer.test.ts +++ b/tests/src/eth/fractionalizer/fractionalizer.test.ts @@ -197,7 +197,7 @@ describe('Fractionalizer contract usage', () => { }); itEth('Test fractionalizer NFT <-> RFT mapping ', async ({helper}) => { - const owner = await helper.eth.createAccountWithBalance(donor, 20n); + const owner = await helper.eth.createAccountWithBalance(donor, 200n); const {contract: fractionalizer, rftCollectionAddress} = await initContract(helper, owner); const {rftTokenAddress, nftCollectionAddress, nftTokenId} = await mintRFTToken(helper, owner, fractionalizer, 100n); @@ -386,7 +386,7 @@ describe('Negative Integration Tests for fractionalizer', () => { }); itEth('call rft2nft without owning all RFT pieces', async ({helper}) => { - const owner = await helper.eth.createAccountWithBalance(donor, 20n); + const owner = await helper.eth.createAccountWithBalance(donor, 200n); const receiver = await helper.eth.createAccountWithBalance(donor, 10n); const {contract: fractionalizer, rftCollectionAddress} = await initContract(helper, owner); From 63434ce9ace8331ea9cb82cbf8a2f4478f15e377 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 6 Apr 2023 16:27:31 +0200 Subject: [PATCH 081/103] ci: update .env --- .env | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.env b/.env index d1893c148c..f66e8e3a2d 100644 --- a/.env +++ b/.env @@ -6,24 +6,24 @@ RELAY_CHAIN_TYPE=westend POLKADOT_MAINNET_BRANCH=release-v0.9.37 STATEMINT_BUILD_BRANCH=release-parachains-v9370 ACALA_BUILD_BRANCH=2.12.0 -MOONBEAM_BUILD_BRANCH=runtime-2100 -ASTAR_BUILD_BRANCH=v4.49.0 -UNIQUE_MAINNET_BRANCH=release-v930033-fix-gas-price +MOONBEAM_BUILD_BRANCH=runtime-2201 +ASTAR_BUILD_BRANCH=v5.3.0 +UNIQUE_MAINNET_BRANCH=release-v937053 UNIQUE_REPLICA_FROM=wss://ws.unique.network:443 -KUSAMA_MAINNET_BRANCH=release-v0.9.37 -STATEMINE_BUILD_BRANCH=release-parachains-v9370 +KUSAMA_MAINNET_BRANCH=release-v0.9.38 +STATEMINE_BUILD_BRANCH=release-parachains-v9382 KARURA_BUILD_BRANCH=release-karura-2.15.0 MOONRIVER_BUILD_BRANCH=runtime-2201 SHIDEN_BUILD_BRANCH=v4.49.0 -QUARTZ_MAINNET_BRANCH=release-v930034-fix-gas-price +QUARTZ_MAINNET_BRANCH=release-v937053 QUARTZ_REPLICA_FROM=wss://ws-quartz.unique.network:443 UNIQUEWEST_MAINNET_BRANCH=release-v0.9.40 -WESTMINT_BUILD_BRANCH=release-parachains-v9382 -OPAL_MAINNET_BRANCH=release-v937052 +WESTMINT_BUILD_BRANCH=parachains-v9400 +OPAL_MAINNET_BRANCH=release-v937053 OPAL_REPLICA_FROM=wss://ws-opal.unique.network:443 UNIQUEEAST_MAINNET_BRANCH=release-v0.9.32 -SAPPHIRE_MAINNET_BRANCH=release-v937052 +SAPPHIRE_MAINNET_BRANCH=release-v937053 SAPPHIRE_REPLICA_FROM=wss://ws-sapphire.unique.network:443 From ee2218e7f135764243de1195820a3183474635ef Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 6 Apr 2023 16:28:36 +0200 Subject: [PATCH 082/103] ci: support astar/shiden in .env regenerator --- tests/src/generateEnv.ts | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/tests/src/generateEnv.ts b/tests/src/generateEnv.ts index 7e50e16909..96b586d92c 100644 --- a/tests/src/generateEnv.ts +++ b/tests/src/generateEnv.ts @@ -13,15 +13,21 @@ async function fetchVersion(chain: string): Promise { } function setVar(env: string, key: string, value: string): string { - return env.replace(new RegExp(`${key}=.+?\n`), `${key}=${value}\n`); + let found = false; + const newEnv = env.replace(new RegExp(`${key}=.+?\n`), () => { + found = true; + return `${key}=${value}\n`; + }); + if (!found) throw new Error(`env key "${key}" is not found`); + return newEnv; } // Fetch and format version string -async function ff(url: string, regex: RegExp, rep: string): Promise { +async function ff(url: string, regex: RegExp, rep: string | ((substring: string, ...params:any[]) => string)): Promise { const ver = await fetchVersion(url); if (ver.match(regex) === null) throw new Error(`bad regex for ${url}`); - return ver.replace(regex, rep); + return ver.replace(regex, rep as any); } function fixupUnique(version: string): string { if (version === 'release-v930033') @@ -52,6 +58,19 @@ function fixupUnique(version: string): string { ff('wss://ws-eastend.unique.network/', /^(.)(..)(.)$/, 'release-v0.$1.$2').then(v => env = setVar(env, 'UNIQUEEAST_MAINNET_BRANCH', v)), ff('wss://ws-sapphire.unique.network/', /^(......)$/, 'release-v$1').then(v => env = setVar(env, 'SAPPHIRE_MAINNET_BRANCH', fixupUnique(v))), + + ff('wss://rpc.astar.network/', /^(.+)$/, (_, r) => { + switch (r) { + case '55': return 'v5.3.0'; + default: throw new Error('unknown astar branch for runtime ' + r); + } + }).then(v => env = setVar(env, 'ASTAR_BUILD_BRANCH', v)), + ff('wss://shiden.api.onfinality.io/public-ws', /^(.+)$/, (_, r) => { + switch (r) { + case '90': return 'v4.49.0'; + default: throw new Error('unknown shiden branch for runtime ' + r); + } + }).then(v => env = setVar(env, 'SHIDEN_BUILD_BRANCH', v)), ]); console.log(env); })().catch(e => { From 67daa6f27606bc56eac123759555c81720e2dcb8 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 6 Apr 2023 16:29:36 +0200 Subject: [PATCH 083/103] build: bump spec_version to 939054 --- runtime/opal/src/lib.rs | 2 +- runtime/quartz/src/lib.rs | 2 +- runtime/unique/src/lib.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/runtime/opal/src/lib.rs b/runtime/opal/src/lib.rs index 707ea03504..063e1173c2 100644 --- a/runtime/opal/src/lib.rs +++ b/runtime/opal/src/lib.rs @@ -51,7 +51,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!(RUNTIME_NAME), impl_name: create_runtime_str!(RUNTIME_NAME), authoring_version: 1, - spec_version: 939053, + spec_version: 939054, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 3, diff --git a/runtime/quartz/src/lib.rs b/runtime/quartz/src/lib.rs index 8a7f3063ce..6d2c494f99 100644 --- a/runtime/quartz/src/lib.rs +++ b/runtime/quartz/src/lib.rs @@ -54,7 +54,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!(RUNTIME_NAME), impl_name: create_runtime_str!(RUNTIME_NAME), authoring_version: 1, - spec_version: 939053, + spec_version: 939054, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 3, diff --git a/runtime/unique/src/lib.rs b/runtime/unique/src/lib.rs index 8cd0129bb1..00b8de0224 100644 --- a/runtime/unique/src/lib.rs +++ b/runtime/unique/src/lib.rs @@ -51,7 +51,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!(RUNTIME_NAME), impl_name: create_runtime_str!(RUNTIME_NAME), authoring_version: 1, - spec_version: 939053, + spec_version: 939054, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 3, From df9b2f8abb1463f1bce149c9603ce02febb3a124 Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Tue, 4 Apr 2023 11:38:21 +0000 Subject: [PATCH 084/103] Fix error --- .env | 2 +- tests/src/benchmarks/mintFee/index.ts | 2 +- tests/src/benchmarks/opsFee/index.ts | 2 ++ tests/src/eth/util/index.ts | 2 +- tests/src/nesting/collectionProperties.test.ts | 2 +- tests/src/util/index.ts | 2 +- 6 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.env b/.env index f66e8e3a2d..c7691f08ae 100644 --- a/.env +++ b/.env @@ -1,7 +1,7 @@ RUST_TOOLCHAIN=nightly-2022-11-15 POLKADOT_BUILD_BRANCH=release-v0.9.37 POLKADOT_LAUNCH_BRANCH=unique-network -RELAY_CHAIN_TYPE=westend +RELAY_CHAIN_TYPE=rococo POLKADOT_MAINNET_BRANCH=release-v0.9.37 STATEMINT_BUILD_BRANCH=release-parachains-v9370 diff --git a/tests/src/benchmarks/mintFee/index.ts b/tests/src/benchmarks/mintFee/index.ts index a9eddefe38..8b0e485038 100644 --- a/tests/src/benchmarks/mintFee/index.ts +++ b/tests/src/benchmarks/mintFee/index.ts @@ -8,7 +8,7 @@ import {UniqueNFTCollection} from '../../util/playgrounds/unique'; import {Contract} from 'web3-eth-contract'; import {createObjectCsvWriter} from 'csv-writer'; import {convertToTokens, createCollectionForBenchmarks, PERMISSIONS, PROPERTIES} from '../utils/common'; -import {makeNames} from '../utils'; +import {makeNames} from '../../util'; import {ContractImports} from '../../eth/util/playgrounds/types'; const {dirname} = makeNames(import.meta.url); diff --git a/tests/src/benchmarks/opsFee/index.ts b/tests/src/benchmarks/opsFee/index.ts index d6f39ef8fa..0df972c8a2 100644 --- a/tests/src/benchmarks/opsFee/index.ts +++ b/tests/src/benchmarks/opsFee/index.ts @@ -7,8 +7,10 @@ import {Contract} from 'web3-eth-contract'; import {createObjectCsvWriter} from 'csv-writer'; import {FunctionFeeVM, IFunctionFee} from '../utils/types'; import {convertToTokens, createCollectionForBenchmarks, PERMISSIONS, PROPERTIES, SUBS_PROPERTIES} from '../utils/common'; +import {makeNames} from '../../util'; +const {dirname} = makeNames(import.meta.url); const main = async () => { diff --git a/tests/src/eth/util/index.ts b/tests/src/eth/util/index.ts index 58a26ebc15..cb1999a8b6 100644 --- a/tests/src/eth/util/index.ts +++ b/tests/src/eth/util/index.ts @@ -59,7 +59,7 @@ export const usingEthPlaygrounds = async (code: (helper: EthUniqueHelper, privat } return account; }; - await code(helper, privateKey); + return; } finally { await helper.disconnect(); diff --git a/tests/src/nesting/collectionProperties.test.ts b/tests/src/nesting/collectionProperties.test.ts index 1b30999af9..763341fec9 100644 --- a/tests/src/nesting/collectionProperties.test.ts +++ b/tests/src/nesting/collectionProperties.test.ts @@ -235,7 +235,7 @@ describe('Negative Integration Test: Collection Properties', () => { itSub('Fails to set properties that exceed the limits', async ({helper}) => { const collection = await helper[testSuite.mode].mintCollection(alice); - const spaceLimit = helper.getApi().consts.unique.maxCollectionPropertiesSize.toNumber(); + const spaceLimit = Number(helper.getApi().consts.unique.maxCollectionPropertiesSize); // Mute the general tx parsing error, too many bytes to process { diff --git a/tests/src/util/index.ts b/tests/src/util/index.ts index 4c079f0b1e..229703e69d 100644 --- a/tests/src/util/index.ts +++ b/tests/src/util/index.ts @@ -57,7 +57,7 @@ async function usingPlaygroundsGeneral(helperType: ne } return account; }; - await code(helper, privateKey); + return; } finally { await helper.disconnect(); From af062f92544c56fdafa13a95d9af16fa4ff5b6d0 Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Tue, 4 Apr 2023 12:15:46 +0000 Subject: [PATCH 085/103] Return tests back --- tests/src/eth/util/index.ts | 2 +- tests/src/util/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/src/eth/util/index.ts b/tests/src/eth/util/index.ts index cb1999a8b6..58a26ebc15 100644 --- a/tests/src/eth/util/index.ts +++ b/tests/src/eth/util/index.ts @@ -59,7 +59,7 @@ export const usingEthPlaygrounds = async (code: (helper: EthUniqueHelper, privat } return account; }; - return; + await code(helper, privateKey); } finally { await helper.disconnect(); diff --git a/tests/src/util/index.ts b/tests/src/util/index.ts index 229703e69d..4c079f0b1e 100644 --- a/tests/src/util/index.ts +++ b/tests/src/util/index.ts @@ -57,7 +57,7 @@ async function usingPlaygroundsGeneral(helperType: ne } return account; }; - return; + await code(helper, privateKey); } finally { await helper.disconnect(); From 8e95ba74b25c49ad1083863646296cfa4a8cac79 Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Tue, 4 Apr 2023 13:00:11 +0000 Subject: [PATCH 086/103] Increase timeout for collator-selection tests --- tests/package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/package.json b/tests/package.json index 84151fd84a..cc695febc8 100644 --- a/tests/package.json +++ b/tests/package.json @@ -101,9 +101,8 @@ "testRPC": "yarn _test ./**/rpc.test.ts", "testPromotion": "yarn _test ./**/appPromotion/*test.ts", "testApiConsts": "yarn _test ./**/apiConsts.test.ts", - - "testCollators": "RUN_COLLATOR_TESTS=1 yarn _test ./**/collator-selection/**.*test.ts", - "testCollatorSelection": "RUN_COLLATOR_TESTS=1 yarn _test ./**/collatorSelection.*test.ts", + "testCollators": "RUN_COLLATOR_TESTS=1 yarn _test ./**/collator-selection/**.*test.ts --timeout 49999999", + "testCollatorSelection": "RUN_COLLATOR_TESTS=1 yarn _test ./**/collatorSelection.*test.ts --timeout 49999999", "testIdentity": "RUN_COLLATOR_TESTS=1 yarn _test ./**/identity.*test.ts", "testXcmUnique": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmUnique.test.ts", "testXcmQuartz": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmQuartz.test.ts", From 7d56b848ab481bdd1590732fc54b130240c92459 Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Wed, 5 Apr 2023 00:31:54 +0000 Subject: [PATCH 087/103] Use westend --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index c7691f08ae..f66e8e3a2d 100644 --- a/.env +++ b/.env @@ -1,7 +1,7 @@ RUST_TOOLCHAIN=nightly-2022-11-15 POLKADOT_BUILD_BRANCH=release-v0.9.37 POLKADOT_LAUNCH_BRANCH=unique-network -RELAY_CHAIN_TYPE=rococo +RELAY_CHAIN_TYPE=westend POLKADOT_MAINNET_BRANCH=release-v0.9.37 STATEMINT_BUILD_BRANCH=release-parachains-v9370 From f7fea338dcad7751195cf987e3bed63d5ae755fe Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Wed, 5 Apr 2023 08:53:08 +0000 Subject: [PATCH 088/103] Use any for Codec --- tests/package.json | 2 +- tests/src/nesting/collectionProperties.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/package.json b/tests/package.json index cc695febc8..6c200e2b3b 100644 --- a/tests/package.json +++ b/tests/package.json @@ -103,7 +103,7 @@ "testApiConsts": "yarn _test ./**/apiConsts.test.ts", "testCollators": "RUN_COLLATOR_TESTS=1 yarn _test ./**/collator-selection/**.*test.ts --timeout 49999999", "testCollatorSelection": "RUN_COLLATOR_TESTS=1 yarn _test ./**/collatorSelection.*test.ts --timeout 49999999", - "testIdentity": "RUN_COLLATOR_TESTS=1 yarn _test ./**/identity.*test.ts", + "testIdentity": "RUN_COLLATOR_TESTS=1 yarn _test ./**/identity.*test.ts --timeout 49999999", "testXcmUnique": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmUnique.test.ts", "testXcmQuartz": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmQuartz.test.ts", "testXcmOpal": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmOpal.test.ts", diff --git a/tests/src/nesting/collectionProperties.test.ts b/tests/src/nesting/collectionProperties.test.ts index 763341fec9..633763faea 100644 --- a/tests/src/nesting/collectionProperties.test.ts +++ b/tests/src/nesting/collectionProperties.test.ts @@ -235,7 +235,7 @@ describe('Negative Integration Test: Collection Properties', () => { itSub('Fails to set properties that exceed the limits', async ({helper}) => { const collection = await helper[testSuite.mode].mintCollection(alice); - const spaceLimit = Number(helper.getApi().consts.unique.maxCollectionPropertiesSize); + const spaceLimit = (helper.getApi().consts.unique.maxCollectionPropertiesSize as any).toNumber(); // Mute the general tx parsing error, too many bytes to process { From 7b3fd607100338d418f5e6dc4717c23272fe01a7 Mon Sep 17 00:00:00 2001 From: Grigoriy Simonov Date: Fri, 7 Apr 2023 10:40:50 +0000 Subject: [PATCH 089/103] fix versioning of the RpcCollection --- client/rpc/src/lib.rs | 21 +++- primitives/data-structs/src/lib.rs | 192 +++++++++++++++++++++++++++++ primitives/rpc/src/lib.rs | 4 +- 3 files changed, 212 insertions(+), 5 deletions(-) diff --git a/client/rpc/src/lib.rs b/client/rpc/src/lib.rs index 1c9179ddbc..cd3bda155d 100644 --- a/client/rpc/src/lib.rs +++ b/client/rpc/src/lib.rs @@ -353,7 +353,7 @@ macro_rules! pass_method { }; let result = $(if _api_version < $ver { - api.$changed_method_name(at, $($changed_name),*).map(|r| r.map($fixer)) + api.$changed_method_name(at, $($changed_name),*).map(|r| r.and_then($fixer)) } else)* { api.$method_name(at, $($((|$map_arg: $ty| $map))? ($name)),*) }; @@ -440,7 +440,7 @@ where #[map(|keys| string_keys_to_bytes_keys(keys))] keys: Option>, ) -> TokenData, unique_api; - changed_in 3, token_data_before_version_3(collection, token_id, string_keys_to_bytes_keys(keys)) => |value| value.into() + changed_in 3, token_data_before_version_3(collection, token_id, string_keys_to_bytes_keys(keys)) => |value| Ok(value.into()) ); pass_method!(adminlist(collection: CollectionId) -> Vec, unique_api); @@ -449,7 +449,22 @@ where pass_method!(last_token_id(collection: CollectionId) -> TokenId, unique_api); pass_method!( collection_by_id(collection: CollectionId) -> Option>, unique_api; - changed_in 3, collection_by_id_before_version_3(collection) => |value| value.map(|coll| coll.into()) + changed_in 3, collection_by_id_before_version_3(collection) => |value| { + use codec::IoReader; + use up_data_structs::RpcCollectionVersion1; + use up_data_structs::CollectionVersion1; + use sp_runtime::DispatchError; + + if let Some(bytes) = value { + let mut reader = IoReader(bytes.as_slice()); + Ok(Some(RpcCollection::::decode(&mut reader) + .or_else(|_| RpcCollectionVersion1::::decode(&mut reader).map(|col| col.into())) + .or_else(|_| CollectionVersion1::::decode(&mut reader).map(|col| col.into())) + .map_err(|_| DispatchError::Other("API Error: UniqueApi_collection_by_id"))?)) + } else { + Ok(None) + } + } ); pass_method!(collection_stats() -> CollectionStats, unique_api); pass_method!(next_sponsored(collection: CollectionId, account: CrossAccountId, token: TokenId) -> Option, unique_api); diff --git a/primitives/data-structs/src/lib.rs b/primitives/data-structs/src/lib.rs index 748ff6d792..7fc42b37de 100644 --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -479,6 +479,46 @@ pub struct RpcCollection { pub flags: RpcCollectionFlags, } +impl From> for RpcCollection { + fn from(value: CollectionVersion1) -> Self { + let CollectionVersion1 { + name, + description, + owner, + mode, + access, + token_prefix, + mint_mode, + sponsorship, + limits, + .. + } = value; + + RpcCollection { + name: name.into_inner(), + description: description.into_inner(), + owner, + mode, + token_prefix: token_prefix.into_inner(), + sponsorship, + limits, + permissions: CollectionPermissions { + access: Some(access), + mint_mode: Some(mint_mode), + nesting: None, + }, + token_property_permissions: Vec::default(), + properties: Vec::default(), + read_only: true, + + flags: RpcCollectionFlags { + foreign: false, + erc721metadata: false, + }, + } + } +} + /// Data used for create collection. /// /// All fields are wrapped in [`Option`], where `None` means chain default. @@ -1376,3 +1416,155 @@ impl TrySetProperty for Properties { pub type CollectionProperties = Properties; pub type TokenProperties = Properties; + +#[cfg(test)] +mod tests { + use super::*; + use codec::IoReader; + + #[test] + fn rpc_collection_supports_decoding_old_versions() { + let encoded_rpc_collection: [u8; 1013] = [ + 0, 1, 250, 241, 137, 120, 188, 29, 94, 210, 193, 237, 186, 22, 203, 241, 52, 248, 167, + 235, 241, 211, 236, 28, 138, 156, 59, 160, 156, 105, 39, 247, 207, 101, 0, 0, 48, 65, + 0, 73, 0, 32, 0, 67, 0, 114, 0, 101, 0, 97, 0, 116, 0, 105, 0, 111, 0, 110, 0, 115, 0, + 252, 65, 0, 32, 0, 112, 0, 105, 0, 101, 0, 99, 0, 101, 0, 32, 0, 111, 0, 102, 0, 32, 0, + 97, 0, 32, 0, 109, 0, 97, 0, 99, 0, 104, 0, 105, 0, 110, 0, 101, 0, 32, 0, 109, 0, 105, + 0, 110, 0, 100, 0, 46, 0, 32, 0, 69, 0, 118, 0, 101, 0, 114, 0, 121, 0, 32, 0, 78, 0, + 70, 0, 84, 0, 32, 0, 105, 0, 115, 0, 32, 0, 109, 0, 97, 0, 100, 0, 101, 0, 32, 0, 101, + 0, 120, 0, 99, 0, 108, 0, 117, 0, 115, 0, 105, 0, 118, 0, 101, 0, 108, 0, 121, 0, 32, + 0, 98, 0, 121, 0, 32, 0, 65, 0, 73, 0, 46, 0, 12, 65, 73, 67, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 1, 123, 34, 99, 111, 108, 108, 101, 99, 116, 105, 111, 110, 67, 111, + 118, 101, 114, 34, 58, 34, 81, 109, 98, 52, 104, 122, 76, 101, 51, 49, 102, 98, 71, 74, + 77, 89, 68, 82, 88, 84, 115, 107, 56, 49, 76, 103, 76, 97, 88, 76, 69, 112, 121, 97, + 122, 102, 66, 85, 103, 111, 110, 118, 49, 118, 84, 85, 34, 125, 125, 11, 123, 34, 110, + 101, 115, 116, 101, 100, 34, 58, 123, 34, 111, 110, 67, 104, 97, 105, 110, 77, 101, + 116, 97, 68, 97, 116, 97, 34, 58, 123, 34, 110, 101, 115, 116, 101, 100, 34, 58, 123, + 34, 78, 70, 84, 77, 101, 116, 97, 34, 58, 123, 34, 102, 105, 101, 108, 100, 115, 34, + 58, 123, 34, 105, 112, 102, 115, 74, 115, 111, 110, 34, 58, 123, 34, 105, 100, 34, 58, + 49, 44, 34, 114, 117, 108, 101, 34, 58, 34, 114, 101, 113, 117, 105, 114, 101, 100, 34, + 44, 34, 116, 121, 112, 101, 34, 58, 34, 115, 116, 114, 105, 110, 103, 34, 125, 44, 34, + 67, 111, 108, 111, 114, 34, 58, 123, 34, 105, 100, 34, 58, 50, 44, 34, 114, 117, 108, + 101, 34, 58, 34, 114, 101, 113, 117, 105, 114, 101, 100, 34, 44, 34, 116, 121, 112, + 101, 34, 58, 34, 67, 111, 108, 111, 114, 34, 125, 44, 34, 73, 110, 116, 101, 110, 115, + 105, 111, 110, 115, 34, 58, 123, 34, 105, 100, 34, 58, 51, 44, 34, 114, 117, 108, 101, + 34, 58, 34, 114, 101, 113, 117, 105, 114, 101, 100, 34, 44, 34, 116, 121, 112, 101, 34, + 58, 34, 73, 110, 116, 101, 110, 115, 105, 111, 110, 115, 34, 125, 44, 34, 77, 111, 111, + 100, 34, 58, 123, 34, 105, 100, 34, 58, 52, 44, 34, 114, 117, 108, 101, 34, 58, 34, + 114, 101, 113, 117, 105, 114, 101, 100, 34, 44, 34, 116, 121, 112, 101, 34, 58, 34, 77, + 111, 111, 100, 34, 125, 125, 125, 44, 34, 67, 111, 108, 111, 114, 34, 58, 123, 34, 111, + 112, 116, 105, 111, 110, 115, 34, 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 34, + 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, 67, 111, 108, 111, 114, 101, 100, 92, 34, + 125, 34, 44, 34, 102, 105, 101, 108, 100, 50, 34, 58, 34, 123, 92, 34, 101, 110, 92, + 34, 58, 92, 34, 66, 108, 97, 99, 107, 38, 87, 104, 105, 116, 101, 92, 34, 125, 34, 125, + 44, 34, 118, 97, 108, 117, 101, 115, 34, 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, + 58, 48, 44, 34, 102, 105, 101, 108, 100, 50, 34, 58, 49, 125, 125, 44, 34, 73, 110, + 116, 101, 110, 115, 105, 111, 110, 115, 34, 58, 123, 34, 111, 112, 116, 105, 111, 110, + 115, 34, 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 34, 123, 92, 34, 101, 110, + 92, 34, 58, 92, 34, 101, 118, 105, 108, 92, 34, 125, 34, 44, 34, 102, 105, 101, 108, + 100, 50, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, 103, 111, 111, 100, 92, + 34, 125, 34, 44, 34, 102, 105, 101, 108, 100, 51, 34, 58, 34, 123, 92, 34, 101, 110, + 92, 34, 58, 92, 34, 110, 101, 117, 116, 114, 97, 108, 92, 34, 125, 34, 125, 44, 34, + 118, 97, 108, 117, 101, 115, 34, 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 48, + 44, 34, 102, 105, 101, 108, 100, 50, 34, 58, 49, 44, 34, 102, 105, 101, 108, 100, 51, + 34, 58, 50, 125, 125, 44, 34, 77, 111, 111, 100, 34, 58, 123, 34, 111, 112, 116, 105, + 111, 110, 115, 34, 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 34, 123, 92, 34, + 101, 110, 92, 34, 58, 92, 34, 65, 98, 115, 116, 114, 97, 99, 116, 92, 34, 125, 34, 44, + 34, 102, 105, 101, 108, 100, 50, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, + 85, 110, 99, 97, 110, 110, 101, 121, 32, 118, 97, 108, 108, 101, 121, 92, 34, 125, 34, + 44, 34, 102, 105, 101, 108, 100, 51, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, + 34, 83, 117, 114, 114, 101, 97, 108, 105, 115, 116, 92, 34, 125, 34, 125, 44, 34, 118, + 97, 108, 117, 101, 115, 34, 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 48, 44, + 34, 102, 105, 101, 108, 100, 50, 34, 58, 49, 44, 34, 102, 105, 101, 108, 100, 51, 34, + 58, 50, 125, 125, 125, 125, 125, 125, 0, + ]; + let mut bytes = IoReader(encoded_rpc_collection.as_slice()); + RpcCollectionVersion1::<[u8; 34]>::decode(&mut bytes).unwrap(); + } + + #[test] + fn rpc_collection_supports_decoding_new_versions() { + let encoded_rpc_collection: [u8; 1576] = [ + 0, 1, 238, 236, 179, 149, 150, 47, 71, 194, 69, 174, 250, 116, 251, 148, 90, 15, 56, + 220, 91, 79, 49, 79, 45, 197, 171, 98, 14, 171, 80, 23, 58, 92, 0, 96, 77, 0, 105, 0, + 110, 0, 116, 0, 70, 0, 101, 0, 115, 0, 116, 0, 32, 0, 83, 0, 121, 0, 109, 0, 109, 0, + 101, 0, 116, 0, 114, 0, 121, 0, 32, 0, 66, 0, 114, 0, 101, 0, 97, 0, 99, 0, 104, 0, + 113, 3, 83, 0, 121, 0, 109, 0, 109, 0, 101, 0, 116, 0, 114, 0, 121, 0, 32, 0, 104, 0, + 97, 0, 115, 0, 32, 0, 115, 0, 111, 0, 109, 0, 101, 0, 116, 0, 104, 0, 105, 0, 110, 0, + 103, 0, 32, 0, 105, 0, 110, 0, 116, 0, 111, 0, 120, 0, 105, 0, 99, 0, 97, 0, 116, 0, + 105, 0, 110, 0, 103, 0, 32, 0, 116, 0, 104, 0, 97, 0, 116, 0, 32, 0, 100, 0, 114, 0, + 97, 0, 119, 0, 115, 0, 32, 0, 121, 0, 111, 0, 117, 0, 32, 0, 105, 0, 110, 0, 46, 0, 10, + 0, 73, 0, 110, 0, 115, 0, 112, 0, 105, 0, 114, 0, 101, 0, 100, 0, 32, 0, 98, 0, 121, 0, + 32, 0, 116, 0, 104, 0, 101, 0, 32, 0, 112, 0, 101, 0, 114, 0, 102, 0, 101, 0, 99, 0, + 116, 0, 105, 0, 111, 0, 110, 0, 32, 0, 111, 0, 102, 0, 32, 0, 116, 0, 104, 0, 101, 0, + 32, 0, 115, 0, 121, 0, 109, 0, 109, 0, 101, 0, 116, 0, 114, 0, 121, 0, 44, 0, 32, 0, + 73, 0, 32, 0, 104, 0, 97, 0, 118, 0, 101, 0, 32, 0, 99, 0, 114, 0, 101, 0, 97, 0, 116, + 0, 101, 0, 100, 0, 32, 0, 115, 0, 121, 0, 109, 0, 109, 0, 101, 0, 116, 0, 114, 0, 105, + 0, 99, 0, 97, 0, 108, 0, 32, 0, 105, 0, 109, 0, 97, 0, 103, 0, 101, 0, 115, 0, 32, 0, + 111, 0, 102, 0, 32, 0, 115, 0, 101, 0, 118, 0, 101, 0, 114, 0, 97, 0, 108, 0, 32, 0, + 118, 0, 101, 0, 114, 0, 116, 0, 105, 0, 99, 0, 101, 0, 115, 0, 44, 0, 32, 0, 98, 0, + 117, 0, 116, 0, 32, 0, 115, 0, 111, 0, 109, 0, 101, 0, 32, 0, 115, 0, 121, 0, 109, 0, + 109, 0, 101, 0, 116, 0, 114, 0, 121, 0, 32, 0, 98, 0, 114, 0, 101, 0, 97, 0, 99, 0, + 104, 0, 101, 0, 115, 0, 32, 0, 97, 0, 110, 0, 100, 0, 32, 0, 99, 0, 111, 0, 108, 0, + 111, 0, 114, 0, 115, 0, 32, 0, 116, 0, 104, 0, 97, 0, 116, 0, 32, 0, 109, 0, 97, 0, + 107, 0, 101, 0, 32, 0, 101, 0, 97, 0, 99, 0, 104, 0, 32, 0, 105, 0, 109, 0, 97, 0, 103, + 0, 101, 0, 32, 0, 85, 0, 78, 0, 73, 0, 81, 0, 85, 0, 69, 0, 46, 0, 12, 83, 121, 66, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 4, 56, 95, 111, 108, 100, 95, 99, + 111, 110, 115, 116, 68, 97, 116, 97, 0, 1, 0, 12, 92, 95, 111, 108, 100, 95, 99, 111, + 110, 115, 116, 79, 110, 67, 104, 97, 105, 110, 83, 99, 104, 101, 109, 97, 97, 13, 123, + 34, 110, 101, 115, 116, 101, 100, 34, 58, 123, 34, 111, 110, 67, 104, 97, 105, 110, 77, + 101, 116, 97, 68, 97, 116, 97, 34, 58, 123, 34, 110, 101, 115, 116, 101, 100, 34, 58, + 123, 34, 78, 70, 84, 77, 101, 116, 97, 34, 58, 123, 34, 102, 105, 101, 108, 100, 115, + 34, 58, 123, 34, 105, 112, 102, 115, 74, 115, 111, 110, 34, 58, 123, 34, 105, 100, 34, + 58, 49, 44, 34, 114, 117, 108, 101, 34, 58, 34, 114, 101, 113, 117, 105, 114, 101, 100, + 34, 44, 34, 116, 121, 112, 101, 34, 58, 34, 115, 116, 114, 105, 110, 103, 34, 125, 44, + 34, 67, 111, 108, 111, 114, 34, 58, 123, 34, 105, 100, 34, 58, 50, 44, 34, 114, 117, + 108, 101, 34, 58, 34, 114, 101, 113, 117, 105, 114, 101, 100, 34, 44, 34, 116, 121, + 112, 101, 34, 58, 34, 67, 111, 108, 111, 114, 34, 125, 44, 34, 83, 121, 109, 109, 101, + 116, 114, 121, 32, 66, 114, 101, 97, 99, 104, 34, 58, 123, 34, 105, 100, 34, 58, 51, + 44, 34, 114, 117, 108, 101, 34, 58, 34, 114, 101, 113, 117, 105, 114, 101, 100, 34, 44, + 34, 116, 121, 112, 101, 34, 58, 34, 83, 121, 109, 109, 101, 116, 114, 121, 32, 66, 114, + 101, 97, 99, 104, 34, 125, 44, 34, 86, 101, 114, 116, 105, 99, 101, 34, 58, 123, 34, + 105, 100, 34, 58, 52, 44, 34, 114, 117, 108, 101, 34, 58, 34, 114, 101, 113, 117, 105, + 114, 101, 100, 34, 44, 34, 116, 121, 112, 101, 34, 58, 34, 86, 101, 114, 116, 105, 99, + 101, 34, 125, 125, 125, 44, 34, 67, 111, 108, 111, 114, 34, 58, 123, 34, 111, 112, 116, + 105, 111, 110, 115, 34, 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 34, 123, 92, + 34, 101, 110, 92, 34, 58, 92, 34, 49, 32, 32, 32, 92, 34, 125, 34, 44, 34, 102, 105, + 101, 108, 100, 50, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, 50, 32, 92, + 34, 125, 34, 44, 34, 102, 105, 101, 108, 100, 51, 34, 58, 34, 123, 92, 34, 101, 110, + 92, 34, 58, 92, 34, 51, 92, 34, 125, 34, 125, 44, 34, 118, 97, 108, 117, 101, 115, 34, + 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 48, 44, 34, 102, 105, 101, 108, 100, + 50, 34, 58, 49, 44, 34, 102, 105, 101, 108, 100, 51, 34, 58, 50, 125, 125, 44, 34, 83, + 121, 109, 109, 101, 116, 114, 121, 32, 66, 114, 101, 97, 99, 104, 34, 58, 123, 34, 111, + 112, 116, 105, 111, 110, 115, 34, 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 34, + 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, 49, 92, 34, 125, 34, 44, 34, 102, 105, 101, + 108, 100, 50, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, 50, 92, 34, 125, + 34, 125, 44, 34, 118, 97, 108, 117, 101, 115, 34, 58, 123, 34, 102, 105, 101, 108, 100, + 49, 34, 58, 48, 44, 34, 102, 105, 101, 108, 100, 50, 34, 58, 49, 125, 125, 44, 34, 86, + 101, 114, 116, 105, 99, 101, 34, 58, 123, 34, 111, 112, 116, 105, 111, 110, 115, 34, + 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, + 58, 92, 34, 54, 92, 34, 125, 34, 44, 34, 102, 105, 101, 108, 100, 50, 34, 58, 34, 123, + 92, 34, 101, 110, 92, 34, 58, 92, 34, 55, 92, 34, 125, 34, 44, 34, 102, 105, 101, 108, + 100, 51, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, 56, 92, 34, 125, 34, + 44, 34, 102, 105, 101, 108, 100, 52, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, + 34, 57, 92, 34, 125, 34, 44, 34, 102, 105, 101, 108, 100, 53, 34, 58, 34, 123, 92, 34, + 101, 110, 92, 34, 58, 92, 34, 49, 48, 92, 34, 125, 34, 44, 34, 102, 105, 101, 108, 100, + 54, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, 49, 49, 92, 34, 125, 34, 44, + 34, 102, 105, 101, 108, 100, 55, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, + 49, 50, 92, 34, 125, 34, 125, 44, 34, 118, 97, 108, 117, 101, 115, 34, 58, 123, 34, + 102, 105, 101, 108, 100, 49, 34, 58, 48, 44, 34, 102, 105, 101, 108, 100, 50, 34, 58, + 49, 44, 34, 102, 105, 101, 108, 100, 51, 34, 58, 50, 44, 34, 102, 105, 101, 108, 100, + 52, 34, 58, 51, 44, 34, 102, 105, 101, 108, 100, 53, 34, 58, 52, 44, 34, 102, 105, 101, + 108, 100, 54, 34, 58, 53, 44, 34, 102, 105, 101, 108, 100, 55, 34, 58, 54, 125, 125, + 125, 125, 125, 125, 72, 95, 111, 108, 100, 95, 115, 99, 104, 101, 109, 97, 86, 101, + 114, 115, 105, 111, 110, 24, 85, 110, 105, 113, 117, 101, 104, 95, 111, 108, 100, 95, + 118, 97, 114, 105, 97, 98, 108, 101, 79, 110, 67, 104, 97, 105, 110, 83, 99, 104, 101, + 109, 97, 17, 1, 123, 34, 99, 111, 108, 108, 101, 99, 116, 105, 111, 110, 67, 111, 118, + 101, 114, 34, 58, 34, 81, 109, 82, 67, 77, 84, 109, 57, 118, 81, 107, 76, 89, 86, 65, + 54, 54, 87, 80, 49, 75, 72, 57, 55, 106, 84, 76, 76, 115, 56, 74, 78, 86, 65, 114, 80, + 66, 52, 56, 98, 106, 87, 84, 75, 74, 110, 34, 125, 0, 0, 0, + ]; + let mut bytes = IoReader(encoded_rpc_collection.as_slice()); + RpcCollection::<[u8; 34]>::decode(&mut bytes).unwrap(); + } +} diff --git a/primitives/rpc/src/lib.rs b/primitives/rpc/src/lib.rs index 359c6e91ff..c6bcdc42a7 100644 --- a/primitives/rpc/src/lib.rs +++ b/primitives/rpc/src/lib.rs @@ -20,7 +20,7 @@ extern crate alloc; use up_data_structs::{ CollectionId, TokenId, RpcCollection, CollectionStats, CollectionLimits, Property, - PropertyKeyPermission, TokenData, TokenChild, RpcCollectionVersion1, TokenDataVersion1, + PropertyKeyPermission, TokenData, TokenChild, TokenDataVersion1, }; use sp_std::vec::Vec; @@ -117,7 +117,7 @@ sp_api::decl_runtime_apis! { fn collection_by_id(collection: CollectionId) -> Result>>; #[changed_in(3)] - fn collection_by_id(collection: CollectionId) -> Result>>; + fn collection_by_id(collection: CollectionId) -> Result>>; /// Get collection stats. fn collection_stats() -> Result; From 38560bb8f56244b922f44e374488f1ad3da8a0a8 Mon Sep 17 00:00:00 2001 From: Grigoriy Simonov Date: Fri, 7 Apr 2023 12:04:55 +0000 Subject: [PATCH 090/103] fix `rpc_collection_supports_decoding_old_versions` test --- primitives/data-structs/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/data-structs/src/lib.rs b/primitives/data-structs/src/lib.rs index 7fc42b37de..2dee1843e9 100644 --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -1479,7 +1479,7 @@ mod tests { 58, 50, 125, 125, 125, 125, 125, 125, 0, ]; let mut bytes = IoReader(encoded_rpc_collection.as_slice()); - RpcCollectionVersion1::<[u8; 34]>::decode(&mut bytes).unwrap(); + CollectionVersion1::<[u8; 34]>::decode(&mut bytes).unwrap(); } #[test] From 13f1ef4715261316a134afc56bc26bf1821532b8 Mon Sep 17 00:00:00 2001 From: Grigoriy Simonov Date: Fri, 7 Apr 2023 14:05:59 +0000 Subject: [PATCH 091/103] replace `Vec` with `RawEncoded` --- primitives/data-structs/src/lib.rs | 113 ++++++++++++++++++++++++++++- primitives/rpc/src/lib.rs | 4 +- 2 files changed, 113 insertions(+), 4 deletions(-) diff --git a/primitives/data-structs/src/lib.rs b/primitives/data-structs/src/lib.rs index 2dee1843e9..fb5280e7c9 100644 --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -23,6 +23,7 @@ use core::{ convert::{TryFrom, TryInto}, fmt, + ops::Deref, }; use frame_support::storage::{bounded_btree_map::BoundedBTreeMap, bounded_btree_set::BoundedBTreeSet}; @@ -427,7 +428,7 @@ pub struct Collection { pub meta_update_permission: MetaUpdatePermission, } -#[derive(Encode, Decode, Clone, PartialEq, TypeInfo)] +#[derive(Debug, Encode, Decode, Clone, PartialEq, TypeInfo)] #[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] pub struct RpcCollectionFlags { /// Is collection is foreign. @@ -438,7 +439,7 @@ pub struct RpcCollectionFlags { /// Collection parameters, used in RPC calls (see [`Collection`] for the storage version). #[struct_versioning::versioned(version = 2, upper)] -#[derive(Encode, Decode, Clone, PartialEq, TypeInfo)] +#[derive(Debug, Encode, Decode, Clone, PartialEq, TypeInfo)] #[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] pub struct RpcCollection { /// Collection owner account. @@ -519,6 +520,26 @@ impl From> for RpcCollection } } +pub struct RawEncoded(Vec); + +impl codec::Decode for RawEncoded { + fn decode(input: &mut I) -> Result { + let mut out = Vec::new(); + while let Ok(v) = input.read_byte() { + out.push(v); + } + Ok(Self(out)) + } +} + +impl Deref for RawEncoded { + type Target = Vec; + + fn deref(&self) -> &Self::Target { + return &self.0; + } +} + /// Data used for create collection. /// /// All fields are wrapped in [`Option`], where `None` means chain default. @@ -1567,4 +1588,92 @@ mod tests { let mut bytes = IoReader(encoded_rpc_collection.as_slice()); RpcCollection::<[u8; 34]>::decode(&mut bytes).unwrap(); } + + #[test] + fn rpc_collection_supports_decoding_through_vec() { + let encoded_rpc_collection: [u8; 1576] = [ + 0, 1, 238, 236, 179, 149, 150, 47, 71, 194, 69, 174, 250, 116, 251, 148, 90, 15, 56, + 220, 91, 79, 49, 79, 45, 197, 171, 98, 14, 171, 80, 23, 58, 92, 0, 96, 77, 0, 105, 0, + 110, 0, 116, 0, 70, 0, 101, 0, 115, 0, 116, 0, 32, 0, 83, 0, 121, 0, 109, 0, 109, 0, + 101, 0, 116, 0, 114, 0, 121, 0, 32, 0, 66, 0, 114, 0, 101, 0, 97, 0, 99, 0, 104, 0, + 113, 3, 83, 0, 121, 0, 109, 0, 109, 0, 101, 0, 116, 0, 114, 0, 121, 0, 32, 0, 104, 0, + 97, 0, 115, 0, 32, 0, 115, 0, 111, 0, 109, 0, 101, 0, 116, 0, 104, 0, 105, 0, 110, 0, + 103, 0, 32, 0, 105, 0, 110, 0, 116, 0, 111, 0, 120, 0, 105, 0, 99, 0, 97, 0, 116, 0, + 105, 0, 110, 0, 103, 0, 32, 0, 116, 0, 104, 0, 97, 0, 116, 0, 32, 0, 100, 0, 114, 0, + 97, 0, 119, 0, 115, 0, 32, 0, 121, 0, 111, 0, 117, 0, 32, 0, 105, 0, 110, 0, 46, 0, 10, + 0, 73, 0, 110, 0, 115, 0, 112, 0, 105, 0, 114, 0, 101, 0, 100, 0, 32, 0, 98, 0, 121, 0, + 32, 0, 116, 0, 104, 0, 101, 0, 32, 0, 112, 0, 101, 0, 114, 0, 102, 0, 101, 0, 99, 0, + 116, 0, 105, 0, 111, 0, 110, 0, 32, 0, 111, 0, 102, 0, 32, 0, 116, 0, 104, 0, 101, 0, + 32, 0, 115, 0, 121, 0, 109, 0, 109, 0, 101, 0, 116, 0, 114, 0, 121, 0, 44, 0, 32, 0, + 73, 0, 32, 0, 104, 0, 97, 0, 118, 0, 101, 0, 32, 0, 99, 0, 114, 0, 101, 0, 97, 0, 116, + 0, 101, 0, 100, 0, 32, 0, 115, 0, 121, 0, 109, 0, 109, 0, 101, 0, 116, 0, 114, 0, 105, + 0, 99, 0, 97, 0, 108, 0, 32, 0, 105, 0, 109, 0, 97, 0, 103, 0, 101, 0, 115, 0, 32, 0, + 111, 0, 102, 0, 32, 0, 115, 0, 101, 0, 118, 0, 101, 0, 114, 0, 97, 0, 108, 0, 32, 0, + 118, 0, 101, 0, 114, 0, 116, 0, 105, 0, 99, 0, 101, 0, 115, 0, 44, 0, 32, 0, 98, 0, + 117, 0, 116, 0, 32, 0, 115, 0, 111, 0, 109, 0, 101, 0, 32, 0, 115, 0, 121, 0, 109, 0, + 109, 0, 101, 0, 116, 0, 114, 0, 121, 0, 32, 0, 98, 0, 114, 0, 101, 0, 97, 0, 99, 0, + 104, 0, 101, 0, 115, 0, 32, 0, 97, 0, 110, 0, 100, 0, 32, 0, 99, 0, 111, 0, 108, 0, + 111, 0, 114, 0, 115, 0, 32, 0, 116, 0, 104, 0, 97, 0, 116, 0, 32, 0, 109, 0, 97, 0, + 107, 0, 101, 0, 32, 0, 101, 0, 97, 0, 99, 0, 104, 0, 32, 0, 105, 0, 109, 0, 97, 0, 103, + 0, 101, 0, 32, 0, 85, 0, 78, 0, 73, 0, 81, 0, 85, 0, 69, 0, 46, 0, 12, 83, 121, 66, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 4, 56, 95, 111, 108, 100, 95, 99, + 111, 110, 115, 116, 68, 97, 116, 97, 0, 1, 0, 12, 92, 95, 111, 108, 100, 95, 99, 111, + 110, 115, 116, 79, 110, 67, 104, 97, 105, 110, 83, 99, 104, 101, 109, 97, 97, 13, 123, + 34, 110, 101, 115, 116, 101, 100, 34, 58, 123, 34, 111, 110, 67, 104, 97, 105, 110, 77, + 101, 116, 97, 68, 97, 116, 97, 34, 58, 123, 34, 110, 101, 115, 116, 101, 100, 34, 58, + 123, 34, 78, 70, 84, 77, 101, 116, 97, 34, 58, 123, 34, 102, 105, 101, 108, 100, 115, + 34, 58, 123, 34, 105, 112, 102, 115, 74, 115, 111, 110, 34, 58, 123, 34, 105, 100, 34, + 58, 49, 44, 34, 114, 117, 108, 101, 34, 58, 34, 114, 101, 113, 117, 105, 114, 101, 100, + 34, 44, 34, 116, 121, 112, 101, 34, 58, 34, 115, 116, 114, 105, 110, 103, 34, 125, 44, + 34, 67, 111, 108, 111, 114, 34, 58, 123, 34, 105, 100, 34, 58, 50, 44, 34, 114, 117, + 108, 101, 34, 58, 34, 114, 101, 113, 117, 105, 114, 101, 100, 34, 44, 34, 116, 121, + 112, 101, 34, 58, 34, 67, 111, 108, 111, 114, 34, 125, 44, 34, 83, 121, 109, 109, 101, + 116, 114, 121, 32, 66, 114, 101, 97, 99, 104, 34, 58, 123, 34, 105, 100, 34, 58, 51, + 44, 34, 114, 117, 108, 101, 34, 58, 34, 114, 101, 113, 117, 105, 114, 101, 100, 34, 44, + 34, 116, 121, 112, 101, 34, 58, 34, 83, 121, 109, 109, 101, 116, 114, 121, 32, 66, 114, + 101, 97, 99, 104, 34, 125, 44, 34, 86, 101, 114, 116, 105, 99, 101, 34, 58, 123, 34, + 105, 100, 34, 58, 52, 44, 34, 114, 117, 108, 101, 34, 58, 34, 114, 101, 113, 117, 105, + 114, 101, 100, 34, 44, 34, 116, 121, 112, 101, 34, 58, 34, 86, 101, 114, 116, 105, 99, + 101, 34, 125, 125, 125, 44, 34, 67, 111, 108, 111, 114, 34, 58, 123, 34, 111, 112, 116, + 105, 111, 110, 115, 34, 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 34, 123, 92, + 34, 101, 110, 92, 34, 58, 92, 34, 49, 32, 32, 32, 92, 34, 125, 34, 44, 34, 102, 105, + 101, 108, 100, 50, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, 50, 32, 92, + 34, 125, 34, 44, 34, 102, 105, 101, 108, 100, 51, 34, 58, 34, 123, 92, 34, 101, 110, + 92, 34, 58, 92, 34, 51, 92, 34, 125, 34, 125, 44, 34, 118, 97, 108, 117, 101, 115, 34, + 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 48, 44, 34, 102, 105, 101, 108, 100, + 50, 34, 58, 49, 44, 34, 102, 105, 101, 108, 100, 51, 34, 58, 50, 125, 125, 44, 34, 83, + 121, 109, 109, 101, 116, 114, 121, 32, 66, 114, 101, 97, 99, 104, 34, 58, 123, 34, 111, + 112, 116, 105, 111, 110, 115, 34, 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 34, + 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, 49, 92, 34, 125, 34, 44, 34, 102, 105, 101, + 108, 100, 50, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, 50, 92, 34, 125, + 34, 125, 44, 34, 118, 97, 108, 117, 101, 115, 34, 58, 123, 34, 102, 105, 101, 108, 100, + 49, 34, 58, 48, 44, 34, 102, 105, 101, 108, 100, 50, 34, 58, 49, 125, 125, 44, 34, 86, + 101, 114, 116, 105, 99, 101, 34, 58, 123, 34, 111, 112, 116, 105, 111, 110, 115, 34, + 58, 123, 34, 102, 105, 101, 108, 100, 49, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, + 58, 92, 34, 54, 92, 34, 125, 34, 44, 34, 102, 105, 101, 108, 100, 50, 34, 58, 34, 123, + 92, 34, 101, 110, 92, 34, 58, 92, 34, 55, 92, 34, 125, 34, 44, 34, 102, 105, 101, 108, + 100, 51, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, 56, 92, 34, 125, 34, + 44, 34, 102, 105, 101, 108, 100, 52, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, + 34, 57, 92, 34, 125, 34, 44, 34, 102, 105, 101, 108, 100, 53, 34, 58, 34, 123, 92, 34, + 101, 110, 92, 34, 58, 92, 34, 49, 48, 92, 34, 125, 34, 44, 34, 102, 105, 101, 108, 100, + 54, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, 49, 49, 92, 34, 125, 34, 44, + 34, 102, 105, 101, 108, 100, 55, 34, 58, 34, 123, 92, 34, 101, 110, 92, 34, 58, 92, 34, + 49, 50, 92, 34, 125, 34, 125, 44, 34, 118, 97, 108, 117, 101, 115, 34, 58, 123, 34, + 102, 105, 101, 108, 100, 49, 34, 58, 48, 44, 34, 102, 105, 101, 108, 100, 50, 34, 58, + 49, 44, 34, 102, 105, 101, 108, 100, 51, 34, 58, 50, 44, 34, 102, 105, 101, 108, 100, + 52, 34, 58, 51, 44, 34, 102, 105, 101, 108, 100, 53, 34, 58, 52, 44, 34, 102, 105, 101, + 108, 100, 54, 34, 58, 53, 44, 34, 102, 105, 101, 108, 100, 55, 34, 58, 54, 125, 125, + 125, 125, 125, 125, 72, 95, 111, 108, 100, 95, 115, 99, 104, 101, 109, 97, 86, 101, + 114, 115, 105, 111, 110, 24, 85, 110, 105, 113, 117, 101, 104, 95, 111, 108, 100, 95, + 118, 97, 114, 105, 97, 98, 108, 101, 79, 110, 67, 104, 97, 105, 110, 83, 99, 104, 101, + 109, 97, 17, 1, 123, 34, 99, 111, 108, 108, 101, 99, 116, 105, 111, 110, 67, 111, 118, + 101, 114, 34, 58, 34, 81, 109, 82, 67, 77, 84, 109, 57, 118, 81, 107, 76, 89, 86, 65, + 54, 54, 87, 80, 49, 75, 72, 57, 55, 106, 84, 76, 76, 115, 56, 74, 78, 86, 65, 114, 80, + 66, 52, 56, 98, 106, 87, 84, 75, 74, 110, 34, 125, 0, 0, 0, + ]; + let mut bytes = IoReader(encoded_rpc_collection.as_slice()); + let vec = RawEncoded::decode(&mut bytes).unwrap(); + let mut bytes = IoReader(vec.as_slice()); + RpcCollection::<[u8; 34]>::decode(&mut bytes).unwrap(); + } } diff --git a/primitives/rpc/src/lib.rs b/primitives/rpc/src/lib.rs index c6bcdc42a7..a4fa45f876 100644 --- a/primitives/rpc/src/lib.rs +++ b/primitives/rpc/src/lib.rs @@ -19,7 +19,7 @@ extern crate alloc; use up_data_structs::{ - CollectionId, TokenId, RpcCollection, CollectionStats, CollectionLimits, Property, + CollectionId, TokenId, RawEncoded, RpcCollection, CollectionStats, CollectionLimits, Property, PropertyKeyPermission, TokenData, TokenChild, TokenDataVersion1, }; @@ -117,7 +117,7 @@ sp_api::decl_runtime_apis! { fn collection_by_id(collection: CollectionId) -> Result>>; #[changed_in(3)] - fn collection_by_id(collection: CollectionId) -> Result>>; + fn collection_by_id(collection: CollectionId) -> Result>; /// Get collection stats. fn collection_stats() -> Result; From 598440f581309963229c13a7a084664e83a82b07 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Mon, 10 Apr 2023 12:29:58 +0200 Subject: [PATCH 092/103] fix: quartz xcm tests for kusama 0.9.38 --- tests/src/util/playgrounds/unique.ts | 72 ++++++++++++++++------------ tests/src/xcm/xcmQuartz.test.ts | 18 +++---- tests/src/xcm/xcmUnique.test.ts | 5 +- 3 files changed, 54 insertions(+), 41 deletions(-) diff --git a/tests/src/util/playgrounds/unique.ts b/tests/src/util/playgrounds/unique.ts index 2a4cbf355e..69cce78f73 100644 --- a/tests/src/util/playgrounds/unique.ts +++ b/tests/src/util/playgrounds/unique.ts @@ -2959,47 +2959,59 @@ class XcmGroup extends HelperGroup { await this.helper.executeExtrinsic(signer, `api.tx.${this.palletName}.teleportAssets`, [destination, beneficiary, assets, feeAssetItem], true); } - async teleportNativeAsset(signer: TSigner, destinationParaId: number, targetAccount: Uint8Array, amount: bigint) { - const destination = { - V1: { - parents: 0, - interior: { - X1: { - Parachain: destinationParaId, - }, + async teleportNativeAsset(signer: TSigner, destinationParaId: number, targetAccount: Uint8Array, amount: bigint, xcmVersion: number = 3) { + const destinationContent = { + parents: 0, + interior: { + X1: { + Parachain: destinationParaId, }, }, }; - const beneficiary = { - V1: { - parents: 0, - interior: { - X1: { - AccountId32: { - network: 'Any', - id: targetAccount, - }, + const beneficiaryContent = { + parents: 0, + interior: { + X1: { + AccountId32: { + network: 'Any', + id: targetAccount, }, }, }, }; - const assets = { - V1: [ - { - id: { - Concrete: { - parents: 0, - interior: 'Here', - }, - }, - fun: { - Fungible: amount, + const assetsContent = [ + { + id: { + Concrete: { + parents: 0, + interior: 'Here', }, }, - ], - }; + fun: { + Fungible: amount, + }, + }, + ]; + + let destination; + let beneficiary; + let assets; + + if (xcmVersion == 2) { + destination = { V1: destinationContent }; + beneficiary = { V1: beneficiaryContent }; + assets = { V1: assetsContent }; + + } else if (xcmVersion == 3) { + destination = { V2: destinationContent }; + beneficiary = { V2: beneficiaryContent }; + assets = { V2: assetsContent }; + + } else { + throw Error("Unknown XCM version: " + xcmVersion); + } const feeAssetItem = 0; diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index 84203f3070..baa50a146e 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -154,7 +154,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { // (fee for USDT XCM are paid in relay tokens) await usingRelayPlaygrounds(relayUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 0, interior: {X1: { Parachain: QUARTZ_CHAIN, @@ -163,7 +163,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }}; const beneficiary = { - V1: { + V2: { parents: 0, interior: {X1: { AccountId32: { @@ -175,7 +175,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -200,7 +200,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { itSub('Should connect and send USDT from Statemine to Quartz', async ({helper}) => { await usingStateminePlaygrounds(statemineUrl, async (helper) => { const dest = { - V1: { + V2: { parents: 1, interior: {X1: { Parachain: QUARTZ_CHAIN, @@ -209,7 +209,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }}; const beneficiary = { - V1: { + V2: { parents: 0, interior: {X1: { AccountId32: { @@ -221,7 +221,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { @@ -341,7 +341,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { await usingRelayPlaygrounds(relayUrl, async (helper) => { const destination = { - V1: { + V2: { parents: 0, interior: {X1: { Parachain: QUARTZ_CHAIN, @@ -350,7 +350,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }}; const beneficiary = { - V1: { + V2: { parents: 0, interior: {X1: { AccountId32: { @@ -362,7 +362,7 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemine', () => { }; const assets = { - V1: [ + V2: [ { id: { Concrete: { diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index 0d32a32c40..18e103de57 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -85,8 +85,9 @@ describeXCM('[XCM] Integration test: Exchanging USDT with Statemint', () => { await usingRelayPlaygrounds(relayUrl, async (helper) => { // Fund accounts on Statemint - await helper.xcm.teleportNativeAsset(alice, STATEMINT_CHAIN, alice.addressRaw, FUNDING_AMOUNT); - await helper.xcm.teleportNativeAsset(alice, STATEMINT_CHAIN, bob.addressRaw, FUNDING_AMOUNT); + const relayXcmVersion = 2; + await helper.xcm.teleportNativeAsset(alice, STATEMINT_CHAIN, alice.addressRaw, FUNDING_AMOUNT, relayXcmVersion); + await helper.xcm.teleportNativeAsset(alice, STATEMINT_CHAIN, bob.addressRaw, FUNDING_AMOUNT, relayXcmVersion); }); await usingStatemintPlaygrounds(statemintUrl, async (helper) => { From f51771c6876db30336578b22a03ce27bafe54745 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Mon, 10 Apr 2023 13:04:17 +0200 Subject: [PATCH 093/103] fix: yarn fix --- tests/src/util/playgrounds/unique.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/src/util/playgrounds/unique.ts b/tests/src/util/playgrounds/unique.ts index 69cce78f73..9135c9a6e2 100644 --- a/tests/src/util/playgrounds/unique.ts +++ b/tests/src/util/playgrounds/unique.ts @@ -2959,7 +2959,7 @@ class XcmGroup extends HelperGroup { await this.helper.executeExtrinsic(signer, `api.tx.${this.palletName}.teleportAssets`, [destination, beneficiary, assets, feeAssetItem], true); } - async teleportNativeAsset(signer: TSigner, destinationParaId: number, targetAccount: Uint8Array, amount: bigint, xcmVersion: number = 3) { + async teleportNativeAsset(signer: TSigner, destinationParaId: number, targetAccount: Uint8Array, amount: bigint, xcmVersion = 3) { const destinationContent = { parents: 0, interior: { @@ -3000,17 +3000,17 @@ class XcmGroup extends HelperGroup { let assets; if (xcmVersion == 2) { - destination = { V1: destinationContent }; - beneficiary = { V1: beneficiaryContent }; - assets = { V1: assetsContent }; + destination = {V1: destinationContent}; + beneficiary = {V1: beneficiaryContent}; + assets = {V1: assetsContent}; } else if (xcmVersion == 3) { - destination = { V2: destinationContent }; - beneficiary = { V2: beneficiaryContent }; - assets = { V2: assetsContent }; + destination = {V2: destinationContent}; + beneficiary = {V2: beneficiaryContent}; + assets = {V2: assetsContent}; } else { - throw Error("Unknown XCM version: " + xcmVersion); + throw Error('Unknown XCM version: ' + xcmVersion); } const feeAssetItem = 0; From 2c327ed12409534b5f7c903febf689f5c5b88ccb Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Wed, 22 Mar 2023 12:44:29 +0000 Subject: [PATCH 094/103] add test `Gas price boundaries` --- tests/src/eth/contractSponsoring.test.ts | 37 ++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/src/eth/contractSponsoring.test.ts b/tests/src/eth/contractSponsoring.test.ts index 98c2e8e215..160856d21c 100644 --- a/tests/src/eth/contractSponsoring.test.ts +++ b/tests/src/eth/contractSponsoring.test.ts @@ -402,6 +402,43 @@ describe('Sponsoring EVM contracts', () => { expect(await helpers.methods.sponsoringRateLimit(flipper.options.address).call()).to.be.equal('7200'); }); + + itEth('Gas price boundaries', async ({helper}) => { + const owner = await helper.eth.createAccountWithBalance(donor); + const sponsor = await helper.eth.createAccountWithBalance(donor); + const caller = await helper.eth.createAccountWithBalance(donor); + const helpers = await helper.ethNativeContract.contractHelpers(owner); + const flipper = await helper.eth.deployFlipper(owner); + + await helpers.methods.setSponsor(flipper.options.address, sponsor).send(); + await helpers.methods.confirmSponsorship(flipper.options.address).send({from: sponsor}); + + await helpers.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Generous).send({from: owner}); + await helpers.methods.setSponsoringRateLimit(flipper.options.address, 0).send({from: owner}); + + let sponsorBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor)); + let callerBalanceBefore = await helper.balance.getSubstrate(helper.address.ethToSubstrate(caller)); + + let expectValue = await flipper.methods.getValue().call(); + + const flip = async (gasPrice: bigint, shouldPass = true) => { + await flipper.methods.flip().send({from: caller, gasPrice: gasPrice}); + expectValue = !expectValue; + expect(await flipper.methods.getValue().call()).to.be.eq(expectValue); + const sponsorBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(sponsor)); + const callerBalanceAfter = await helper.balance.getSubstrate(helper.address.ethToSubstrate(caller)); + expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.eq(shouldPass); + expect(callerBalanceAfter === callerBalanceBefore).to.be.eq(shouldPass); + sponsorBalanceBefore = sponsorBalanceAfter; + callerBalanceBefore = callerBalanceAfter; + }; + + const gasPrice = BigInt(await helper.eth.getGasPrice()); + await flip(gasPrice); + await flip(gasPrice * 2n); + await flip(gasPrice * 21n / 10n); + await flip(gasPrice * 22n / 10n, false); + }); }); describe('Sponsoring Fee Limit', () => { From ba41614ffa735837d0d6e34b0fe8bdc23ebba9b4 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Mon, 10 Apr 2023 14:46:04 +0200 Subject: [PATCH 095/103] build: regenerate lockfile --- Cargo.lock | 606 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 365 insertions(+), 241 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 95ec0c2de4..b507b19cab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,7 +42,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -51,18 +51,18 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", ] [[package]] name = "aead" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -119,7 +119,7 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" dependencies = [ - "aead 0.5.1", + "aead 0.5.2", "aes 0.8.2", "cipher 0.4.4", "ctr 0.9.2", @@ -153,7 +153,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.9", "once_cell", "version_check", ] @@ -165,7 +165,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" dependencies = [ "cfg-if", - "getrandom 0.2.8", + "getrandom 0.2.9", "once_cell", "version_check", ] @@ -181,9 +181,9 @@ dependencies = [ [[package]] name = "always-assert" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf688625d06217d5b1bb0ea9d9c44a1635fd0ee3534466388d18203174f4d11" +checksum = "4436e0292ab1bb631b42973c61205e704475fe8126af845c8d923c0996328127" [[package]] name = "android_system_properties" @@ -203,6 +203,46 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstream" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-wincon", + "concolor-override", + "concolor-query", + "is-terminal", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" + +[[package]] +name = "anstyle-parse" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-wincon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" +dependencies = [ + "anstyle", + "windows-sys 0.45.0", +] + [[package]] name = "anyhow" version = "1.0.70" @@ -334,9 +374,9 @@ dependencies = [ [[package]] name = "asn1_der" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" +checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" [[package]] name = "assert_matches" @@ -358,7 +398,7 @@ dependencies = [ "log", "parking", "polling", - "rustix 0.37.3", + "rustix 0.37.11", "slab", "socket2", "waker-fn", @@ -381,7 +421,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.13", ] [[package]] @@ -399,9 +439,9 @@ dependencies = [ [[package]] name = "atomic-waker" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" +checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" [[package]] name = "atty" @@ -664,7 +704,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -673,7 +713,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -834,9 +874,9 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" +checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", @@ -955,7 +995,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -964,7 +1004,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -988,9 +1028,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" dependencies = [ "glob", "libc", @@ -999,39 +1039,45 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.13" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c911b090850d79fc64fe9ea01e28e465f65e821e08813ced95bced72f7a8a9b" +checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" dependencies = [ - "bitflags", + "clap_builder", "clap_derive", - "clap_lex", - "is-terminal", "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" +dependencies = [ + "anstream", + "anstyle", + "bitflags", + "clap_lex", "strsim", - "termcolor", ] [[package]] name = "clap_derive" -version = "4.1.12" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a932373bab67b984c790ddf2c9ca295d8e3af3b7ef92de5a5bacdccdee4b09b" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.13", ] [[package]] name = "clap_lex" -version = "0.3.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646" -dependencies = [ - "os_str_bytes", -] +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" [[package]] name = "coarsetime" @@ -1066,11 +1112,26 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "concolor-override" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" + +[[package]] +name = "concolor-query" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" +dependencies = [ + "windows-sys 0.45.0", +] + [[package]] name = "concurrent-queue" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" +checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" dependencies = [ "crossbeam-utils", ] @@ -1105,9 +1166,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "core2" @@ -1271,9 +1332,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1334,7 +1395,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", "subtle", "zeroize", @@ -1346,7 +1407,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", "typenum", ] @@ -1357,7 +1418,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "subtle", ] @@ -1367,7 +1428,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "subtle", ] @@ -1932,7 +1993,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.10", + "syn 2.0.13", ] [[package]] @@ -1949,7 +2010,7 @@ checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.13", ] [[package]] @@ -2139,7 +2200,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -2316,7 +2377,7 @@ dependencies = [ "der", "digest 0.10.6", "ff", - "generic-array 0.14.6", + "generic-array 0.14.7", "group", "hkdf", "pem-rfc7468", @@ -2341,22 +2402,22 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" +checksum = "0044ebdf7fbb2a772e0c0233a9d3173c5cd8af8ae7078d4c5188af44ffffaa4b" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" +checksum = "9d2c772ccdbdfd1967b4f5d79d17c98ebf92009fdcc838db7aa434462f600c26" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.13", ] [[package]] @@ -2367,7 +2428,7 @@ checksum = "48016319042fb7c87b78d2993084a831793a897a5cd1a2a67cab9d1eeb4b7d76" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.13", ] [[package]] @@ -2404,24 +2465,13 @@ checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] name = "errno" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" -dependencies = [ - "errno-dragonfly", - "libc", - "winapi", -] - -[[package]] -name = "errno" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" dependencies = [ "errno-dragonfly", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -2664,7 +2714,7 @@ dependencies = [ [[package]] name = "fc-consensus" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "async-trait", "fc-db", @@ -2682,7 +2732,7 @@ dependencies = [ [[package]] name = "fc-db" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "fp-storage", "kvdb-rocksdb", @@ -2701,7 +2751,7 @@ dependencies = [ [[package]] name = "fc-mapping-sync" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "fc-db", "fc-storage", @@ -2719,7 +2769,7 @@ dependencies = [ [[package]] name = "fc-rpc" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "ethereum", "ethereum-types", @@ -2761,7 +2811,7 @@ dependencies = [ [[package]] name = "fc-rpc-core" version = "1.1.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "ethereum", "ethereum-types", @@ -2774,7 +2824,7 @@ dependencies = [ [[package]] name = "fc-storage" version = "1.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "ethereum", "ethereum-types", @@ -2810,9 +2860,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ace6ec7cc19c8ed33a32eaa9ea692d7faea05006b5356b9e2b668ec4bc3955" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" [[package]] name = "file-per-thread-logger" @@ -2826,14 +2876,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" +checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" dependencies = [ "cfg-if", "libc", - "redox_syscall", - "windows-sys 0.45.0", + "redox_syscall 0.2.16", + "windows-sys 0.48.0", ] [[package]] @@ -2916,7 +2966,7 @@ dependencies = [ [[package]] name = "fp-consensus" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "ethereum", "parity-scale-codec", @@ -2928,7 +2978,7 @@ dependencies = [ [[package]] name = "fp-ethereum" version = "1.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "ethereum", "ethereum-types", @@ -2942,7 +2992,7 @@ dependencies = [ [[package]] name = "fp-evm" version = "3.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "evm", "frame-support", @@ -2957,7 +3007,7 @@ dependencies = [ [[package]] name = "fp-evm-mapping" version = "0.1.0" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "frame-support", "sp-core", @@ -2966,7 +3016,7 @@ dependencies = [ [[package]] name = "fp-rpc" version = "3.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "ethereum", "ethereum-types", @@ -2982,7 +3032,7 @@ dependencies = [ [[package]] name = "fp-self-contained" version = "1.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "frame-support", "parity-scale-codec", @@ -2994,7 +3044,7 @@ dependencies = [ [[package]] name = "fp-storage" version = "2.0.0" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "parity-scale-codec", "serde", @@ -3125,9 +3175,9 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" +checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" dependencies = [ "cfg-if", "parity-scale-codec", @@ -3298,9 +3348,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -3313,9 +3363,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -3323,15 +3373,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -3341,15 +3391,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-lite" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ "fastrand", "futures-core", @@ -3362,13 +3412,13 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.13", ] [[package]] @@ -3384,15 +3434,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-timer" @@ -3402,9 +3452,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -3438,9 +3488,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -3469,9 +3519,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if", "libc", @@ -3698,7 +3748,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.6", + "generic-array 0.14.7", "hmac 0.8.1", ] @@ -3800,16 +3850,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.54" +version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d" +checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows 0.46.0", + "windows 0.48.0", ] [[package]] @@ -3861,9 +3911,9 @@ dependencies = [ [[package]] name = "if-watch" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7abdbb86e485125dad06c2691e1e393bf3b08c7b743b43aa162a00fd39062e" +checksum = "a9465340214b296cd17a0009acdb890d6160010b8adf8f78a00d0d7ab270f79f" dependencies = [ "async-io", "core-foundation", @@ -3933,7 +3983,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -3981,13 +4031,13 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" dependencies = [ "hermit-abi 0.3.1", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -4010,20 +4060,20 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" [[package]] name = "is-terminal" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", - "rustix 0.36.11", - "windows-sys 0.45.0", + "rustix 0.37.11", + "windows-sys 0.48.0", ] [[package]] @@ -4363,9 +4413,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.140" +version = "0.2.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" +checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" [[package]] name = "libloading" @@ -4398,7 +4448,7 @@ dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.8", + "getrandom 0.2.9", "instant", "libp2p-core 0.38.0", "libp2p-dns", @@ -4957,9 +5007,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd550e73688e6d578f0ac2119e32b797a327631a42f9433e59d02e139c8df60d" +checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" [[package]] name = "lock_api" @@ -5083,11 +5133,11 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memfd" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" +checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" dependencies = [ - "rustix 0.36.11", + "rustix 0.37.11", ] [[package]] @@ -5822,7 +5872,7 @@ dependencies = [ [[package]] name = "orml-tokens" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#71834773b7ce46bf705d0b9e3bfeff39288fad4c" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#a0751540591c88ccc2d4029464de887933727183" dependencies = [ "frame-support", "frame-system", @@ -5837,7 +5887,7 @@ dependencies = [ [[package]] name = "orml-traits" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#71834773b7ce46bf705d0b9e3bfeff39288fad4c" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#a0751540591c88ccc2d4029464de887933727183" dependencies = [ "frame-support", "impl-trait-for-tuples", @@ -5856,7 +5906,7 @@ dependencies = [ [[package]] name = "orml-utilities" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#71834773b7ce46bf705d0b9e3bfeff39288fad4c" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#a0751540591c88ccc2d4029464de887933727183" dependencies = [ "frame-support", "parity-scale-codec", @@ -5870,7 +5920,7 @@ dependencies = [ [[package]] name = "orml-vesting" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#71834773b7ce46bf705d0b9e3bfeff39288fad4c" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#a0751540591c88ccc2d4029464de887933727183" dependencies = [ "frame-support", "frame-system", @@ -5885,7 +5935,7 @@ dependencies = [ [[package]] name = "orml-xcm-support" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#71834773b7ce46bf705d0b9e3bfeff39288fad4c" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#a0751540591c88ccc2d4029464de887933727183" dependencies = [ "frame-support", "orml-traits", @@ -5899,7 +5949,7 @@ dependencies = [ [[package]] name = "orml-xtokens" version = "0.4.1-dev" -source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#71834773b7ce46bf705d0b9e3bfeff39288fad4c" +source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v0.9.39#a0751540591c88ccc2d4029464de887933727183" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -5917,12 +5967,6 @@ dependencies = [ "xcm-executor", ] -[[package]] -name = "os_str_bytes" -version = "6.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" - [[package]] name = "p256" version = "0.11.1" @@ -6086,7 +6130,7 @@ dependencies = [ [[package]] name = "pallet-base-fee" version = "1.0.0" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "fp-evm", "frame-support", @@ -6350,7 +6394,7 @@ dependencies = [ [[package]] name = "pallet-ethereum" version = "4.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "ethereum", "ethereum-types", @@ -6377,7 +6421,7 @@ dependencies = [ [[package]] name = "pallet-evm" version = "6.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "environmental", "evm", @@ -6457,7 +6501,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-simple" version = "2.0.0-dev" -source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#3b277e472854ebaeecb40accb3f87cfe1a43fb61" +source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.39#708aebf2255bcf90b15b309134bcf13b0ec7884b" dependencies = [ "fp-evm", "ripemd", @@ -7439,9 +7483,9 @@ checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] name = "parking" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" +checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" [[package]] name = "parking_lot" @@ -7473,7 +7517,7 @@ dependencies = [ "cfg-if", "instant", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "winapi", ] @@ -7486,7 +7530,7 @@ checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "windows-sys 0.45.0", ] @@ -7547,9 +7591,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" +checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122" dependencies = [ "thiserror", "ucd-trie", @@ -7557,9 +7601,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" +checksum = "be99c4c1d2fc2769b1d00239431d711d08f6efedcecb8b6e30707160aee99c15" dependencies = [ "pest", "pest_generator", @@ -7567,22 +7611,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" +checksum = "e56094789873daa36164de2e822b3888c6ae4b4f9da555a1103587658c805b1e" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.13", ] [[package]] name = "pest_meta" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" +checksum = "6733073c7cff3d8459fda0e42f13a047870242aed8b509fe98000928975f359e" dependencies = [ "once_cell", "pest", @@ -8812,9 +8856,9 @@ dependencies = [ [[package]] name = "polling" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" +checksum = "4be1c66a6add46bff50935c313dae30a5030cf8385c5206e8a95e9e9def974aa" dependencies = [ "autocfg", "bitflags", @@ -8823,7 +8867,7 @@ dependencies = [ "libc", "log", "pin-project-lite 0.2.9", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -8990,9 +9034,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.54" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] @@ -9238,9 +9282,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9" +checksum = "67c10f662eee9c94ddd7135043e544f3c82fa839a1e7b865911331961b53186c" dependencies = [ "bytes", "rand 0.8.5", @@ -9328,7 +9372,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.9", ] [[package]] @@ -9411,14 +9455,23 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_users" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.8", - "redox_syscall", + "getrandom 0.2.9", + "redox_syscall 0.2.16", "thiserror", ] @@ -9452,7 +9505,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.13", ] [[package]] @@ -9781,12 +9834,12 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.11" +version = "0.36.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" +checksum = "e0af200a3324fa5bcd922e84e9b55a298ea9f431a489f01961acdebc6e908f25" dependencies = [ "bitflags", - "errno 0.2.8", + "errno", "io-lifetimes", "libc", "linux-raw-sys 0.1.4", @@ -9795,16 +9848,16 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.3" +version = "0.37.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b24138615de35e32031d041a09032ef3487a616d901ca4db224e7d557efae2" +checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77" dependencies = [ "bitflags", - "errno 0.3.0", + "errno", "io-lifetimes", "libc", - "linux-raw-sys 0.3.0", - "windows-sys 0.45.0", + "linux-raw-sys 0.3.1", + "windows-sys 0.48.0", ] [[package]] @@ -10334,7 +10387,7 @@ dependencies = [ "libc", "log", "once_cell", - "rustix 0.36.11", + "rustix 0.36.12", "sc-allocator", "sc-executor-common", "sp-runtime-interface", @@ -11001,9 +11054,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61471dff9096de1d8b2319efed7162081e96793f5ebb147e50db10d50d648a4d" +checksum = "0cfdffd972d76b22f3d7f81c8be34b2296afd3a25e0a547bd9abe340a4dbbe97" dependencies = [ "bitvec", "cfg-if", @@ -11015,9 +11068,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219580e803a66b3f05761fd06f1f879a872444e49ce23f73694d26e5a954c7e6" +checksum = "61fa974aea2d63dd18a4ec3a49d59af9f34178c73a4f56d2f18205628d00681e" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11115,7 +11168,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct", "der", - "generic-array 0.14.6", + "generic-array 0.14.7", "pkcs8", "subtle", "zeroize", @@ -11197,29 +11250,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.158" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" +checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.158" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" +checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.13", ] [[package]] name = "serde_json" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" dependencies = [ "itoa", "ryu", @@ -11351,9 +11404,9 @@ dependencies = [ [[package]] name = "simba" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50582927ed6f77e4ac020c057f37a268fc6aebc29225050365aacbb9deeeddc4" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" dependencies = [ "approx", "num-complex", @@ -12489,9 +12542,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.10" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aad1363ed6d37b84299588d62d3a7d95b5a5c2d9aad5c85609fda12afaa1f40" +checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" dependencies = [ "proc-macro2", "quote", @@ -12545,15 +12598,15 @@ checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" [[package]] name = "tempfile" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if", "fastrand", - "redox_syscall", - "rustix 0.36.11", - "windows-sys 0.42.0", + "redox_syscall 0.3.5", + "rustix 0.37.11", + "windows-sys 0.45.0", ] [[package]] @@ -12621,7 +12674,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.13", ] [[package]] @@ -12776,14 +12829,13 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.26.0" +version = "1.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" +checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" dependencies = [ "autocfg", "bytes", "libc", - "memchr", "mio", "num_cpus", "parking_lot 0.12.1", @@ -12796,13 +12848,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.8.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.13", ] [[package]] @@ -13493,7 +13545,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "subtle", ] @@ -13602,13 +13654,19 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "uuid" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" +checksum = "5b55a3fef2a1e3b3a00ce878640918820d3c51081576ac657d23af9fc7928fdb" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.9", ] [[package]] @@ -13912,7 +13970,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.11", + "rustix 0.36.12", "serde", "sha2 0.10.6", "toml", @@ -13992,7 +14050,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.11", + "rustix 0.36.12", ] [[package]] @@ -14023,7 +14081,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.11", + "rustix 0.36.12", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", @@ -14472,11 +14530,11 @@ dependencies = [ [[package]] name = "windows" -version = "0.46.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows-targets", + "windows-targets 0.48.0", ] [[package]] @@ -14485,12 +14543,12 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", + "windows_aarch64_gnullvm 0.42.2", "windows_aarch64_msvc 0.42.2", "windows_i686_gnu 0.42.2", "windows_i686_msvc 0.42.2", "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm", + "windows_x86_64_gnullvm 0.42.2", "windows_x86_64_msvc 0.42.2", ] @@ -14500,7 +14558,16 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", ] [[package]] @@ -14509,21 +14576,42 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm", + "windows_aarch64_gnullvm 0.42.2", "windows_aarch64_msvc 0.42.2", "windows_i686_gnu 0.42.2", "windows_i686_msvc 0.42.2", "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm", + "windows_x86_64_gnullvm 0.42.2", "windows_x86_64_msvc 0.42.2", ] +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + [[package]] name = "windows_aarch64_msvc" version = "0.34.0" @@ -14536,6 +14624,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + [[package]] name = "windows_i686_gnu" version = "0.34.0" @@ -14548,6 +14642,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + [[package]] name = "windows_i686_msvc" version = "0.34.0" @@ -14560,6 +14660,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + [[package]] name = "windows_x86_64_gnu" version = "0.34.0" @@ -14572,12 +14678,24 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + [[package]] name = "windows_x86_64_msvc" version = "0.34.0" @@ -14590,6 +14708,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + [[package]] name = "winnow" version = "0.4.1" @@ -14760,9 +14884,9 @@ dependencies = [ [[package]] name = "yasna" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" dependencies = [ "time 0.3.20", ] @@ -14778,13 +14902,13 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57090580b8b26d9fd2288c4ac982b3b3c6446cd8e91112bcf672d5ddb2f17441" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.10", + "syn 2.0.13", ] [[package]] @@ -14808,9 +14932,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.7+zstd.1.5.4" +version = "2.0.8+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" +checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" dependencies = [ "cc", "libc", From 69f287a4abbdcbc3134f69e113a9f82094e339c9 Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Tue, 11 Apr 2023 13:15:11 +0000 Subject: [PATCH 096/103] Use only getAccounts method to make sure: there are no any active stakes before each test --- .../src/sub/appPromotion/appPromotion.test.ts | 95 ++++++++++--------- 1 file changed, 52 insertions(+), 43 deletions(-) diff --git a/tests/src/sub/appPromotion/appPromotion.test.ts b/tests/src/sub/appPromotion/appPromotion.test.ts index d1ff0ce0a6..248f327fed 100644 --- a/tests/src/sub/appPromotion/appPromotion.test.ts +++ b/tests/src/sub/appPromotion/appPromotion.test.ts @@ -28,8 +28,15 @@ let palletAddress: string; let accounts: IKeyringPair[]; let usedAccounts: IKeyringPair[] = []; -function getAccount(accountsNumber: number) { - const accs = accounts.splice(0, accountsNumber); +async function getAccounts(accountsNumber: number, balance?: bigint) { + let accs: IKeyringPair[] = []; + if (balance) { + await usingPlaygrounds(async (helper) => { + accs = await helper.arrange.createAccounts(new Array(accountsNumber).fill(balance), donor); + }); + } else { + accs = accounts.splice(0, accountsNumber); + } usedAccounts.push(...accs); return accs; } @@ -63,12 +70,13 @@ describe('App promotion', () => { } await Promise.all(unstakeTxs); usedAccounts = []; + expect(await helper.staking.getTotalStaked()).to.eq(0n); // there are no active stakes after each test }); }); describe('stake extrinsic', () => { itSub('should "lock" staking balance, add it to "staked" map, and increase "totalStaked" amount', async ({helper}) => { - const [staker, recepient] = getAccount(2); + const [staker, recepient] = await getAccounts(2); const totalStakedBefore = await helper.staking.getTotalStaked(); // Minimum stake amount is 100: @@ -98,8 +106,8 @@ describe('App promotion', () => { {unstake: 'unstakeAll' as const}, {unstake: 'unstakePartial' as const}, ].map(testCase => { - itSub('should allow to create maximum 10 stakes for account', async ({helper}) => { - const [staker] = await helper.arrange.createAccounts([2000n], donor); + itSub(`[${testCase.unstake}] should allow to create maximum 10 stakes for account`, async ({helper}) => { + const [staker] = await getAccounts(1, 2000n); const ONE_STAKE = 100n * nominal; for (let i = 0; i < 10; i++) { await helper.staking.stake(staker, ONE_STAKE); @@ -135,7 +143,7 @@ describe('App promotion', () => { }); itSub('should allow to stake() if balance is locked with different id', async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); // staker has tokens locked with vesting id: await helper.balance.vestedTransfer(donor, staker.address, {start: 0n, period: 1n, periodCount: 1n, perPeriod: 200n * nominal}); @@ -168,7 +176,7 @@ describe('App promotion', () => { }); itSub('should not allow to stake(), if stake amount is more than total free balance minus locked by staking', async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); // Can't stake full balance because Alice needs to pay some fee await expect(helper.staking.stake(staker, 1000n * nominal)).to.be.rejected; // With('Arithmetic') @@ -180,7 +188,7 @@ describe('App promotion', () => { }); itSub('for different accounts in one block is possible', async ({helper}) => { - const crowd = getAccount(4); + const crowd = await getAccounts(4); const crowdStartsToStake = crowd.map(user => helper.staking.stake(user, 100n * nominal)); await expect(Promise.all(crowdStartsToStake)).to.be.fulfilled; @@ -196,7 +204,7 @@ describe('App promotion', () => { {method: 'unstakePartial' as const}, ].map(testCase => { itSub(`[${testCase.method}] should move tokens to "pendingUnstake" and subtract it from totalStaked`, async ({helper}) => { - const [staker, recepient] = getAccount(2); + const [staker, recepient] = await getAccounts(2); const totalStakedBefore = await helper.staking.getTotalStaked(); const STAKE_AMOUNT = 900n * nominal; @@ -222,7 +230,7 @@ describe('App promotion', () => { {method: 'unstakePartial' as const}, ].map(testCase => { itSub(`[${testCase.method}] should unlock balance after unlocking period ends and remove it from "pendingUnstake"`, async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); await helper.staking.stake(staker, 100n * nominal); testCase.method === 'unstakeAll' ? await helper.staking.unstakeAll(staker) @@ -245,7 +253,7 @@ describe('App promotion', () => { {method: 'unstakePartial' as const}, ].map(testCase => { itSub(`[${testCase.method}] should successfully unstake multiple stakes`, async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); await helper.staking.stake(staker, 100n * nominal); await helper.staking.stake(staker, 200n * nominal); await helper.staking.stake(staker, 300n * nominal); @@ -285,7 +293,7 @@ describe('App promotion', () => { {method: 'unstakePartial' as const}, ].map(testCase => { itSub(`[${testCase.method}] should not have any effects if no active stakes`, async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); // unstake has no effect if no stakes at all testCase.method === 'unstakeAll' @@ -319,7 +327,7 @@ describe('App promotion', () => { {method: 'unstakePartial' as const}, ].map(testCase => { itSub(`[${testCase.method}] should create different pending-unlock for each unlocking stake`, async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); await helper.staking.stake(staker, 100n * nominal); testCase.method === 'unstakeAll' ? await helper.staking.unstakeAll(staker) @@ -342,7 +350,7 @@ describe('App promotion', () => { {method: 'unstakePartial' as const}, ].map(testCase => { itSub(`[${testCase.method}] should be possible for 3 accounts in one block`, async ({helper}) => { - const stakers = getAccount(3); + const stakers = await getAccounts(3); await Promise.all(stakers.map(staker => helper.staking.stake(staker, 100n * nominal))); await Promise.all(stakers.map(staker => { @@ -360,7 +368,7 @@ describe('App promotion', () => { itSub('should not be possible for more than 3 accounts in one block', async ({helper}) => { if (!await helper.arrange.isDevNode()) { - const stakers = getAccount(10); + const stakers = await getAccounts(10); await Promise.all(stakers.map(staker => helper.staking.stake(staker, 100n * nominal))); const unstakingResults = await Promise.allSettled(stakers.map((staker, i) => { @@ -375,7 +383,7 @@ describe('App promotion', () => { }); itSub('Cannot partially unstake more than staked', async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); // Staker stakes 300: await helper.staking.stake(staker, 100n * nominal); await helper.staking.stake(staker, 200n * nominal); @@ -395,7 +403,7 @@ describe('App promotion', () => { }); itSub('Can partially unstake arbitrary amount', async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); await helper.staking.stake(staker, 100n * nominal); await helper.staking.stake(staker, 200n * nominal); @@ -429,7 +437,7 @@ describe('App promotion', () => { }); itSub('can mix different type of unstakes', async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); await helper.staking.stake(staker, 100n * nominal); await helper.staking.stake(staker, 200n * nominal); @@ -454,7 +462,7 @@ describe('App promotion', () => { describe('collection sponsoring', () => { itSub('should actually sponsor transactions', async ({helper}) => { const api = helper.getApi(); - const [collectionOwner, tokenSender, receiver] = getAccount(3); + const [collectionOwner, tokenSender, receiver] = await getAccounts(3); const collection = await helper.nft.mintCollection(collectionOwner, {name: 'Name', description: 'Description', tokenPrefix: 'Prefix', limits: {sponsorTransferTimeout: 0}}); const token = await collection.mintToken(collectionOwner, {Substrate: tokenSender.address}); await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorCollection(collection.collectionId)); @@ -471,7 +479,7 @@ describe('App promotion', () => { itSub('can not be set by non admin', async ({helper}) => { const api = helper.getApi(); - const [collectionOwner, nonAdmin] = getAccount(2); + const [collectionOwner, nonAdmin] = await getAccounts(2); const collection = await helper.nft.mintCollection(collectionOwner, {name: 'New', description: 'New Collection', tokenPrefix: 'Promotion'}); @@ -481,7 +489,7 @@ describe('App promotion', () => { itSub('should set pallet address as confirmed admin', async ({helper}) => { const api = helper.getApi(); - const [collectionOwner, oldSponsor] = getAccount(2); + const [collectionOwner, oldSponsor] = await getAccounts(2); // Can set sponsoring for collection without sponsor const collectionWithoutSponsor = await helper.nft.mintCollection(collectionOwner, {name: 'No-sponsor', description: 'New Collection', tokenPrefix: 'Promotion'}); @@ -503,7 +511,7 @@ describe('App promotion', () => { itSub('can be overwritten by collection owner', async ({helper}) => { const api = helper.getApi(); - const [collectionOwner, newSponsor] = getAccount(2); + const [collectionOwner, newSponsor] = await getAccounts(2); const collection = await helper.nft.mintCollection(collectionOwner, {name: 'New', description: 'New Collection', tokenPrefix: 'Promotion'}); const collectionId = collection.collectionId; @@ -520,9 +528,10 @@ describe('App promotion', () => { }); itSub('should not overwrite collection limits set by the owner earlier', async ({helper}) => { + const [owner] = await getAccounts(1); const api = helper.getApi(); const limits = {ownerCanDestroy: true, ownerCanTransfer: true, sponsorTransferTimeout: 0}; - const collectionWithLimits = await helper.nft.mintCollection(getAccount(1)[0], {name: 'New', description: 'New Collection', tokenPrefix: 'Promotion', limits}); + const collectionWithLimits = await helper.nft.mintCollection(owner, {name: 'New', description: 'New Collection', tokenPrefix: 'Promotion', limits}); await expect(helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorCollection(collectionWithLimits.collectionId))).to.be.fulfilled; expect((await collectionWithLimits.getData())?.raw.limits).to.be.deep.contain(limits); @@ -530,7 +539,7 @@ describe('App promotion', () => { itSub('should reject transaction if collection doesn\'t exist', async ({helper}) => { const api = helper.getApi(); - const [collectionOwner] = getAccount(1); + const [collectionOwner] = await getAccounts(1); // collection has never existed await expect(helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorCollection(999999999))).to.be.rejected; @@ -545,7 +554,7 @@ describe('App promotion', () => { describe('stopSponsoringCollection', () => { itSub('can not be called by non-admin', async ({helper}) => { const api = helper.getApi(); - const [collectionOwner, nonAdmin] = getAccount(2); + const [collectionOwner, nonAdmin] = await getAccounts(2); const collection = await helper.nft.mintCollection(collectionOwner, {name: 'New', description: 'New Collection', tokenPrefix: 'Promotion'}); await expect(helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorCollection(collection.collectionId))).to.be.fulfilled; @@ -556,7 +565,7 @@ describe('App promotion', () => { itSub('should set sponsoring as disabled', async ({helper}) => { const api = helper.getApi(); - const [collectionOwner, recepient] = getAccount(2); + const [collectionOwner, recepient] = await getAccounts(2); const collection = await helper.nft.mintCollection(collectionOwner, {name: 'New', description: 'New Collection', tokenPrefix: 'Promotion', limits: {sponsorTransferTimeout: 0}}); const token = await collection.mintToken(collectionOwner, {Substrate: collectionOwner.address}); @@ -574,7 +583,7 @@ describe('App promotion', () => { itSub('should not affect collection which is not sponsored by pallete', async ({helper}) => { const api = helper.getApi(); - const [collectionOwner] = getAccount(1); + const [collectionOwner] = await getAccounts(1); const collection = await helper.nft.mintCollection(collectionOwner, {name: 'New', description: 'New Collection', tokenPrefix: 'Promotion', pendingSponsor: collectionOwner.address}); await collection.confirmSponsorship(collectionOwner); @@ -584,7 +593,7 @@ describe('App promotion', () => { }); itSub('should reject transaction if collection does not exist', async ({helper}) => { - const [collectionOwner] = getAccount(1); + const [collectionOwner] = await getAccounts(1); const collection = await helper.nft.mintCollection(collectionOwner, {name: 'New', description: 'New Collection', tokenPrefix: 'Promotion'}); await collection.burn(collectionOwner); @@ -658,7 +667,7 @@ describe('App promotion', () => { }); itEth('can not be set by non admin', async ({helper}) => { - const [nonAdmin] = getAccount(1); + const [nonAdmin] = await getAccounts(1); const contractOwner = (await helper.eth.createAccountWithBalance(donor, 1000n)).toLowerCase(); const flipper = await helper.eth.deployFlipper(contractOwner); // await deployFlipper(web3, contractOwner); const contractHelper = await helper.ethNativeContract.contractHelpers(contractOwner); @@ -740,7 +749,7 @@ describe('App promotion', () => { }); itEth('can not be called by non-admin', async ({helper}) => { - const [nonAdmin] = getAccount(1); + const [nonAdmin] = await getAccounts(1); const contractOwner = (await helper.eth.createAccountWithBalance(donor, 1000n)).toLowerCase(); const flipper = await helper.eth.deployFlipper(contractOwner); @@ -750,7 +759,7 @@ describe('App promotion', () => { }); itEth('should not affect a contract which is not sponsored by pallete', async ({helper}) => { - const [nonAdmin] = getAccount(1); + const [nonAdmin] = await getAccounts(1); const contractOwner = (await helper.eth.createAccountWithBalance(donor, 1000n)).toLowerCase(); const flipper = await helper.eth.deployFlipper(contractOwner); const contractHelper = await helper.ethNativeContract.contractHelpers(contractOwner); @@ -762,12 +771,12 @@ describe('App promotion', () => { describe('payoutStakers', () => { itSub('can not be called by non admin', async ({helper}) => { - const [nonAdmin] = getAccount(1); + const [nonAdmin] = await getAccounts(1); await expect(helper.admin.payoutStakers(nonAdmin, 100)).to.be.rejectedWith('appPromotion.NoPermission'); }); itSub('should increase total staked', async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); const totalStakedBefore = await helper.staking.getTotalStaked(); await helper.staking.stake(staker, 100n * nominal); @@ -784,7 +793,7 @@ describe('App promotion', () => { }); itSub('should credit 0.05% for staking period', async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); await waitPromotionPeriodDoesntEnd(helper); @@ -810,7 +819,7 @@ describe('App promotion', () => { }); itSub('shoud be paid for more than one period if payments was missed', async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); await helper.staking.stake(staker, 100n * nominal); // wait for two rewards are available: @@ -829,7 +838,7 @@ describe('App promotion', () => { itSub('should not be credited for pending-unstaked tokens', async ({helper}) => { // staker unstakes before rewards been payed - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); await helper.staking.stake(staker, 100n * nominal); const [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address}); await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake.block) + LOCKING_PERIOD); @@ -844,7 +853,7 @@ describe('App promotion', () => { }); itSub('should bring compound interest', async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); await helper.staking.stake(staker, 100n * nominal); @@ -862,7 +871,7 @@ describe('App promotion', () => { }); itSub('can calculate reward for tiny stake', async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); await helper.staking.stake(staker, 100n * nominal); await helper.staking.stake(staker, 100n * nominal); await helper.staking.unstakePartial(staker, 100n * nominal - 1n); @@ -875,7 +884,7 @@ describe('App promotion', () => { }); itSub('can eventually pay all rewards', async ({helper}) => { - const stakers = getAccount(30); + const stakers = await getAccounts(30); // Create 30 stakes: await Promise.all(stakers.map(staker => helper.staking.stake(staker, 100n * nominal))); @@ -888,7 +897,7 @@ describe('App promotion', () => { unstakingTxs.push(helper.staking.unstakePartial(staker, 100n * nominal - 1n)); } - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); await helper.staking.stake(staker, 100n * nominal); const [stake] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address}); await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stake.block)); @@ -909,7 +918,7 @@ describe('App promotion', () => { const unstakeParams = testCase.method === 'unstakePartial' ? [100n * nominal - 1n] : []; - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); await helper.staking.stake(staker, 100n * nominal); await helper.staking.stake(staker, 200n * nominal); const {result} = await helper.executeExtrinsic(staker, `api.tx.appPromotion.${testCase.method}`, unstakeParams); @@ -923,7 +932,7 @@ describe('App promotion', () => { }); itSub('stake', async ({helper}) => { - const [staker] = getAccount(1); + const [staker] = await getAccounts(1); const {result} = await helper.executeExtrinsic(staker, 'api.tx.appPromotion.stake', [100n * nominal]); const event = result.events.find(e => e.event.section === 'appPromotion' && e.event.method === 'Stake'); @@ -935,7 +944,7 @@ describe('App promotion', () => { // Flaky itSub.skip('payoutStakers', async ({helper}) => { - const [staker1, staker2] = getAccount(2); + const [staker1, staker2] = await getAccounts(2); const STAKE1 = 100n * nominal; const STAKE2 = 200n * nominal; await helper.staking.stake(staker1, STAKE1); From 4acc79c4752567b1d2cbaa870f98ed371afbf6df Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Tue, 11 Apr 2023 13:51:32 +0000 Subject: [PATCH 097/103] Make previousCalculatedRecord eq None before tests --- tests/src/sub/appPromotion/appPromotion.test.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/src/sub/appPromotion/appPromotion.test.ts b/tests/src/sub/appPromotion/appPromotion.test.ts index 248f327fed..e5e92e5cb3 100644 --- a/tests/src/sub/appPromotion/appPromotion.test.ts +++ b/tests/src/sub/appPromotion/appPromotion.test.ts @@ -71,6 +71,9 @@ describe('App promotion', () => { await Promise.all(unstakeTxs); usedAccounts = []; expect(await helper.staking.getTotalStaked()).to.eq(0n); // there are no active stakes after each test + // Make sure previousCalculatedRecord is None to avoid problem with payout stakers; + await helper.admin.payoutStakers(palletAdmin, 100); + expect((await helper.getApi().query.appPromotion.previousCalculatedRecord() as any).isNone).to.be.true; }); }); @@ -783,7 +786,12 @@ describe('App promotion', () => { // Wait for rewards and pay const [stakedInBlock] = await helper.staking.getTotalStakedPerBlock({Substrate: staker.address}); await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stakedInBlock.block)); - const totalPayout = (await helper.admin.payoutStakers(palletAdmin, 100)).reduce((prev, payout) => prev + payout.payout, 0n); + + const payout = await helper.admin.payoutStakers(palletAdmin, 100); + const totalPayout = payout.reduce((prev, payout) => prev + payout.payout, 0n); + const stakerReward = payout.find(p => p.staker === staker.address); + + expect(stakerReward?.payout).to.eq(calculateIncome(100n * nominal) - (100n * nominal)); const totalStakedAfter = await helper.staking.getTotalStaked(); expect(totalStakedAfter).to.equal(totalStakedBefore + (100n * nominal) + totalPayout); From b548179f7e545b2a31108bda603efc2277c8a527 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 12 Apr 2023 12:38:18 +0200 Subject: [PATCH 098/103] test: other chains can spend only up to balance --- tests/src/util/playgrounds/unique.dev.ts | 57 ++++++++ tests/src/util/playgrounds/unique.ts | 4 + tests/src/xcm/xcmQuartz.test.ts | 160 +++++++++++++++++++++++ tests/src/xcm/xcmUnique.test.ts | 160 +++++++++++++++++++++++ 4 files changed, 381 insertions(+) diff --git a/tests/src/util/playgrounds/unique.dev.ts b/tests/src/util/playgrounds/unique.dev.ts index 74335deef5..d5d110703e 100644 --- a/tests/src/util/playgrounds/unique.dev.ts +++ b/tests/src/util/playgrounds/unique.dev.ts @@ -420,6 +420,63 @@ export class ArrangeGroup { return capture; } + + makeXcmProgramWithdrawDeposit(beneficiary: Uint8Array, amount: bigint | string) { + return { + V2: [ + { + WithdrawAsset: [ + { + id: { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + fun: { + Fungible: amount, + }, + }, + ], + }, + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + fun: { + Fungible: amount, + }, + }, + weightLimit: 'Unlimited' + }, + }, + { + DepositAsset: { + assets: { + Wild: 'All' + }, + maxAssets: 1, + beneficiary: { + parents: 0, + interior: { + X1: { + AccountId32: { + network: 'Any', + id: beneficiary + }, + }, + }, + }, + } + }, + ], + }; + } } class MoonbeamAccountGroup { diff --git a/tests/src/util/playgrounds/unique.ts b/tests/src/util/playgrounds/unique.ts index 9135c9a6e2..0208dc43e8 100644 --- a/tests/src/util/playgrounds/unique.ts +++ b/tests/src/util/playgrounds/unique.ts @@ -2446,6 +2446,10 @@ class BalanceGroup extends HelperGroup { return this.ethBalanceGroup.getEthereum(address); } + async setBalanceSubstrate(signer: TSigner, address: TSubstrateAccount, amount: bigint | string, reservedAmount: bigint | string = 0n) { + await this.helper.executeExtrinsic(signer, 'api.tx.balances.setBalance', [address, amount, reservedAmount], true); + } + /** * Transfer tokens to substrate address * @param signer keyring of signer diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index baa50a146e..55ac9785b0 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -641,6 +641,84 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { console.log('[Karura -> Quartz] transaction fees on Quartz: %s QTZ', helper.util.bigIntToDecimals(qtzFees)); expect(qtzFees == 0n).to.be.true; }); + + itSub('Karura can send only up to its balance', async ({helper}) => { + // set Karura's sovereign account's balance + const karuraBalance = 10000n * (10n ** QTZ_DECIMALS); + const karuraSovereignAccount = helper.address.paraSiblingSovereignAccount(KARURA_CHAIN); + await helper.getSudo().balance.setBalanceSubstrate(alice, karuraSovereignAccount, karuraBalance); + + const moreThanKaruraHas = karuraBalance * 2n; + + let targetAccountBalance = 0n; + const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice); + + const quartzMultilocation = { + V1: { + parents: 1, + interior: { + X1: {Parachain: QUARTZ_CHAIN}, + }, + }, + }; + + const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, moreThanKaruraHas); + + // Try to trick Quartz + await usingKaruraPlaygrounds(karuraUrl, async (helper) => { + await helper.getSudo().executeExtrinsic( + alice, + 'api.tx.polkadotXcm.send', + [ + quartzMultilocation, + maliciousXcmProgram, + ], + true, + ); + }); + + const maxWaitBlocks = 3; + + const xcmpQueueFailEvent = await helper.wait.eventOutcome( + maxWaitBlocks, + 'xcmpQueue', + 'Fail', + ); + + expect( + xcmpQueueFailEvent != null, + `'xcmpQueue.FailEvent' event is expected`, + ).to.be.true; + + expect( + xcmpQueueFailEvent!.isFailedToTransactAsset, + `The XCM error should be 'FailedToTransactAsset'`, + ).to.be.true; + + targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); + expect(targetAccountBalance).to.be.equal(0n); + + // But Karura still can send the correct amount + const validTransferAmount = karuraBalance / 2n; + const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, validTransferAmount); + + await usingKaruraPlaygrounds(karuraUrl, async (helper) => { + await helper.getSudo().executeExtrinsic( + alice, + 'api.tx.polkadotXcm.send', + [ + quartzMultilocation, + validXcmProgram, + ], + true, + ); + }); + + await helper.wait.newBlocks(maxWaitBlocks); + + targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); + expect(targetAccountBalance).to.be.equal(validTransferAmount); + }); }); // These tests are relevant only when the foreign asset pallet is disabled @@ -981,6 +1059,10 @@ describeXCM('[XCM] Integration test: Exchanging QTZ with Moonriver', () => { console.log('[Moonriver -> Quartz] transaction fees on Quartz: %s QTZ', helper.util.bigIntToDecimals(qtzFees)); expect(qtzFees == 0n).to.be.true; }); + + itSub.skip('Moonriver can send only up to its balance', async ({helper}) => { + throw Error("Not yet implemented"); + }); }); describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { @@ -1193,4 +1275,82 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { console.log(`QTZ Balance on Quartz after XCM is: ${balanceQTZ}`); expect(balanceQTZ).to.eq(balanceAfterQuartzToShidenXCM + qtzFromShidenTransfered); }); + + itSub('Shiden can send only up to its balance', async ({helper}) => { + // set Shiden's sovereign account's balance + const shidenBalance = 10000n * (10n ** QTZ_DECIMALS); + const shidenSovereignAccount = helper.address.paraSiblingSovereignAccount(SHIDEN_CHAIN); + await helper.getSudo().balance.setBalanceSubstrate(alice, shidenSovereignAccount, shidenBalance); + + const moreThanShidenHas = shidenBalance * 2n; + + let targetAccountBalance = 0n; + const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice); + + const quartzMultilocation = { + V1: { + parents: 1, + interior: { + X1: {Parachain: QUARTZ_CHAIN}, + }, + }, + }; + + const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, moreThanShidenHas); + + // Try to trick Quartz + await usingShidenPlaygrounds(shidenUrl, async (helper) => { + await helper.getSudo().executeExtrinsic( + alice, + 'api.tx.polkadotXcm.send', + [ + quartzMultilocation, + maliciousXcmProgram, + ], + true, + ); + }); + + const maxWaitBlocks = 3; + + const xcmpQueueFailEvent = await helper.wait.eventOutcome( + maxWaitBlocks, + 'xcmpQueue', + 'Fail', + ); + + expect( + xcmpQueueFailEvent != null, + `'xcmpQueue.FailEvent' event is expected`, + ).to.be.true; + + expect( + xcmpQueueFailEvent!.isFailedToTransactAsset, + `The XCM error should be 'FailedToTransactAsset'`, + ).to.be.true; + + targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); + expect(targetAccountBalance).to.be.equal(0n); + + // But Shiden still can send the correct amount + const validTransferAmount = shidenBalance / 2n; + const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, validTransferAmount); + + await usingShidenPlaygrounds(shidenUrl, async (helper) => { + await helper.getSudo().executeExtrinsic( + alice, + 'api.tx.polkadotXcm.send', + [ + quartzMultilocation, + validXcmProgram, + ], + true, + ); + }); + + await helper.wait.newBlocks(maxWaitBlocks); + + targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); + expect(targetAccountBalance).to.be.equal(validTransferAmount); + }); }); diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index 18e103de57..1846dfba64 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -643,6 +643,84 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { console.log('[Acala -> Unique] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(unqFees)); expect(unqFees == 0n).to.be.true; }); + + itSub('Acala can send only up to its balance', async ({helper}) => { + // set Acala's sovereign account's balance + const acalaBalance = 10000n * (10n ** UNQ_DECIMALS); + const acalaSovereignAccount = helper.address.paraSiblingSovereignAccount(ACALA_CHAIN); + await helper.getSudo().balance.setBalanceSubstrate(alice, acalaSovereignAccount, acalaBalance); + + const moreThanAcalaHas = acalaBalance * 2n; + + let targetAccountBalance = 0n; + const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice); + + const uniqueMultilocation = { + V1: { + parents: 1, + interior: { + X1: {Parachain: UNIQUE_CHAIN}, + }, + }, + }; + + const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, moreThanAcalaHas); + + // Try to trick Unique + await usingAcalaPlaygrounds(acalaUrl, async (helper) => { + await helper.getSudo().executeExtrinsic( + alice, + 'api.tx.polkadotXcm.send', + [ + uniqueMultilocation, + maliciousXcmProgram, + ], + true, + ); + }); + + const maxWaitBlocks = 3; + + const xcmpQueueFailEvent = await helper.wait.eventOutcome( + maxWaitBlocks, + 'xcmpQueue', + 'Fail', + ); + + expect( + xcmpQueueFailEvent != null, + `'xcmpQueue.FailEvent' event is expected`, + ).to.be.true; + + expect( + xcmpQueueFailEvent!.isFailedToTransactAsset, + `The XCM error should be 'FailedToTransactAsset'`, + ).to.be.true; + + targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); + expect(targetAccountBalance).to.be.equal(0n); + + // But Acala still can send the correct amount + const validTransferAmount = acalaBalance / 2n; + const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, validTransferAmount); + + await usingAcalaPlaygrounds(acalaUrl, async (helper) => { + await helper.getSudo().executeExtrinsic( + alice, + 'api.tx.polkadotXcm.send', + [ + uniqueMultilocation, + validXcmProgram, + ], + true, + ); + }); + + await helper.wait.newBlocks(maxWaitBlocks); + + targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); + expect(targetAccountBalance).to.be.equal(validTransferAmount); + }); }); // These tests are relevant only when the foreign asset pallet is disabled @@ -984,6 +1062,10 @@ describeXCM('[XCM] Integration test: Exchanging UNQ with Moonbeam', () => { console.log('[Moonbeam -> Unique] transaction fees on Unique: %s UNQ', helper.util.bigIntToDecimals(unqFees)); expect(unqFees == 0n).to.be.true; }); + + itSub.skip('Moonbeam can send only up to its balance', async ({helper}) => { + throw Error("Not yet implemented"); + }); }); describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { @@ -1251,4 +1333,82 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited'); }); }); + + itSub('Astar can send only up to its balance', async ({helper}) => { + // set Astar's sovereign account's balance + const astarBalance = 10000n * (10n ** UNQ_DECIMALS); + const astarSovereignAccount = helper.address.paraSiblingSovereignAccount(ASTAR_CHAIN); + await helper.getSudo().balance.setBalanceSubstrate(alice, astarSovereignAccount, astarBalance); + + const moreThanShidenHas = astarBalance * 2n; + + let targetAccountBalance = 0n; + const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice); + + const uniqueMultilocation = { + V1: { + parents: 1, + interior: { + X1: {Parachain: UNIQUE_CHAIN}, + }, + }, + }; + + const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, moreThanShidenHas); + + // Try to trick Unique + await usingAstarPlaygrounds(astarUrl, async (helper) => { + await helper.getSudo().executeExtrinsic( + alice, + 'api.tx.polkadotXcm.send', + [ + uniqueMultilocation, + maliciousXcmProgram, + ], + true, + ); + }); + + const maxWaitBlocks = 3; + + const xcmpQueueFailEvent = await helper.wait.eventOutcome( + maxWaitBlocks, + 'xcmpQueue', + 'Fail', + ); + + expect( + xcmpQueueFailEvent != null, + `'xcmpQueue.FailEvent' event is expected`, + ).to.be.true; + + expect( + xcmpQueueFailEvent!.isFailedToTransactAsset, + `The XCM error should be 'FailedToTransactAsset'`, + ).to.be.true; + + targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); + expect(targetAccountBalance).to.be.equal(0n); + + // But Astar still can send the correct amount + const validTransferAmount = astarBalance / 2n; + const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, validTransferAmount); + + await usingAstarPlaygrounds(astarUrl, async (helper) => { + await helper.getSudo().executeExtrinsic( + alice, + 'api.tx.polkadotXcm.send', + [ + uniqueMultilocation, + validXcmProgram, + ], + true, + ); + }); + + await helper.wait.newBlocks(maxWaitBlocks); + + targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); + expect(targetAccountBalance).to.be.equal(validTransferAmount); + }); }); From 15a416466f56b947ccf711ae93e39d1e74a62a64 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 12 Apr 2023 14:38:52 +0200 Subject: [PATCH 099/103] test: untrusted reserve locations --- tests/src/util/playgrounds/unique.dev.ts | 61 ++++-- tests/src/util/playgrounds/unique.ts | 14 ++ tests/src/xcm/xcmQuartz.test.ts | 200 ++++++++++++++---- tests/src/xcm/xcmUnique.test.ts | 257 ++++++++++++++--------- 4 files changed, 384 insertions(+), 148 deletions(-) diff --git a/tests/src/util/playgrounds/unique.dev.ts b/tests/src/util/playgrounds/unique.dev.ts index d5d110703e..4bf5c1bcda 100644 --- a/tests/src/util/playgrounds/unique.dev.ts +++ b/tests/src/util/playgrounds/unique.dev.ts @@ -421,18 +421,13 @@ export class ArrangeGroup { return capture; } - makeXcmProgramWithdrawDeposit(beneficiary: Uint8Array, amount: bigint | string) { + makeXcmProgramWithdrawDeposit(beneficiary: Uint8Array, id: any, amount: bigint | string) { return { V2: [ { WithdrawAsset: [ { - id: { - Concrete: { - parents: 0, - interior: 'Here', - }, - }, + id, fun: { Fungible: amount, }, @@ -442,12 +437,54 @@ export class ArrangeGroup { { BuyExecution: { fees: { - id: { - Concrete: { - parents: 0, - interior: 'Here', + id, + fun: { + Fungible: amount, + }, + }, + weightLimit: 'Unlimited' + }, + }, + { + DepositAsset: { + assets: { + Wild: 'All' + }, + maxAssets: 1, + beneficiary: { + parents: 0, + interior: { + X1: { + AccountId32: { + network: 'Any', + id: beneficiary + }, }, }, + }, + }, + }, + ], + }; + } + + makeXcmProgramReserveAssetDeposited(beneficiary: Uint8Array, id: any, amount: bigint | string) { + return { + V2: [ + { + ReserveAssetDeposited: [ + { + id, + fun: { + Fungible: amount, + }, + }, + ], + }, + { + BuyExecution: { + fees: { + id, fun: { Fungible: amount, }, @@ -472,7 +509,7 @@ export class ArrangeGroup { }, }, }, - } + }, }, ], }; diff --git a/tests/src/util/playgrounds/unique.ts b/tests/src/util/playgrounds/unique.ts index 0208dc43e8..9d088ec87f 100644 --- a/tests/src/util/playgrounds/unique.ts +++ b/tests/src/util/playgrounds/unique.ts @@ -3021,6 +3021,18 @@ class XcmGroup extends HelperGroup { await this.teleportAssets(signer, destination, beneficiary, assets, feeAssetItem); } + + async send(signer: IKeyringPair, destination: any, message: any) { + await this.helper.executeExtrinsic( + signer, + `api.tx.${this.palletName}.send`, + [ + destination, + message, + ], + true, + ); + } } class XTokensGroup extends HelperGroup { @@ -3284,6 +3296,7 @@ export class AcalaHelper extends XcmChainHelper { assetRegistry: AcalaAssetRegistryGroup; xTokens: XTokensGroup; tokens: TokensGroup; + xcm: XcmGroup; constructor(logger?: ILogger, options: {[key: string]: any} = {}) { super(logger, options.helperBase ?? AcalaHelper); @@ -3292,6 +3305,7 @@ export class AcalaHelper extends XcmChainHelper { this.assetRegistry = new AcalaAssetRegistryGroup(this); this.xTokens = new XTokensGroup(this); this.tokens = new TokensGroup(this); + this.xcm = new XcmGroup(this, 'polkadotXcm'); } getSudo() { diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index 55ac9785b0..5841f1ab5a 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -662,19 +662,20 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { }, }; - const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, moreThanKaruraHas); + const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit( + targetAccount.addressRaw, + { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + moreThanKaruraHas, + ); // Try to trick Quartz await usingKaruraPlaygrounds(karuraUrl, async (helper) => { - await helper.getSudo().executeExtrinsic( - alice, - 'api.tx.polkadotXcm.send', - [ - quartzMultilocation, - maliciousXcmProgram, - ], - true, - ); + await helper.getSudo().xcm.send(alice, quartzMultilocation, maliciousXcmProgram); }); const maxWaitBlocks = 3; @@ -700,18 +701,19 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { // But Karura still can send the correct amount const validTransferAmount = karuraBalance / 2n; - const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, validTransferAmount); + const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit( + targetAccount.addressRaw, + { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + validTransferAmount, + ); await usingKaruraPlaygrounds(karuraUrl, async (helper) => { - await helper.getSudo().executeExtrinsic( - alice, - 'api.tx.polkadotXcm.send', - [ - quartzMultilocation, - validXcmProgram, - ], - true, - ); + await helper.getSudo().xcm.send(alice, quartzMultilocation, validXcmProgram); }); await helper.wait.newBlocks(maxWaitBlocks); @@ -719,6 +721,62 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); expect(targetAccountBalance).to.be.equal(validTransferAmount); }); + + itSub('Should not accept reserve transfer of QTZ from Karura', async ({helper}) => { + const testAmount = 10_000n * (10n ** QTZ_DECIMALS); + const [targetAccount] = await helper.arrange.createAccounts([0n], alice); + + const quartzMultilocation = { + V1: { + parents: 1, + interior: { + X1: { + Parachain: QUARTZ_CHAIN, + }, + }, + }, + }; + + const maliciousXcmProgram = helper.arrange.makeXcmProgramReserveAssetDeposited( + targetAccount.addressRaw, + { + Concrete: { + parents: 1, + interior: { + X1: { + Parachain: QUARTZ_CHAIN, + }, + }, + }, + }, + testAmount, + ); + + await usingKaruraPlaygrounds(karuraUrl, async (helper) => { + await helper.getSudo().xcm.send(alice, quartzMultilocation, maliciousXcmProgram); + }); + + const maxWaitBlocks = 3; + + const xcmpQueueFailEvent = await helper.wait.eventOutcome( + maxWaitBlocks, + 'xcmpQueue', + 'Fail', + ); + + expect( + xcmpQueueFailEvent != null, + `'xcmpQueue.FailEvent' event is expected`, + ).to.be.true; + + expect( + xcmpQueueFailEvent!.isUntrustedReserveLocation, + `The XCM error should be 'isUntrustedReserveLocation'`, + ).to.be.true; + + const accountBalance = await helper.balance.getSubstrate(targetAccount.address); + expect(accountBalance).to.be.equal(0n); + }); }); // These tests are relevant only when the foreign asset pallet is disabled @@ -1063,6 +1121,10 @@ describeXCM('[XCM] Integration test: Exchanging QTZ with Moonriver', () => { itSub.skip('Moonriver can send only up to its balance', async ({helper}) => { throw Error("Not yet implemented"); }); + + itSub.skip('Should not accept reserve transfer of QTZ from Moonriver', async ({helper}) => { + throw Error("Not yet implemented"); + }); }); describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { @@ -1296,19 +1358,20 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { }, }; - const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, moreThanShidenHas); + const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit( + targetAccount.addressRaw, + { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + moreThanShidenHas, + ); // Try to trick Quartz await usingShidenPlaygrounds(shidenUrl, async (helper) => { - await helper.getSudo().executeExtrinsic( - alice, - 'api.tx.polkadotXcm.send', - [ - quartzMultilocation, - maliciousXcmProgram, - ], - true, - ); + await helper.getSudo().xcm.send(alice, quartzMultilocation, maliciousXcmProgram); }); const maxWaitBlocks = 3; @@ -1334,18 +1397,19 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { // But Shiden still can send the correct amount const validTransferAmount = shidenBalance / 2n; - const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, validTransferAmount); + const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit( + targetAccount.addressRaw, + { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + validTransferAmount, + ); await usingShidenPlaygrounds(shidenUrl, async (helper) => { - await helper.getSudo().executeExtrinsic( - alice, - 'api.tx.polkadotXcm.send', - [ - quartzMultilocation, - validXcmProgram, - ], - true, - ); + await helper.getSudo().xcm.send(alice, quartzMultilocation, validXcmProgram); }); await helper.wait.newBlocks(maxWaitBlocks); @@ -1353,4 +1417,60 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); expect(targetAccountBalance).to.be.equal(validTransferAmount); }); + + itSub('Should not accept reserve transfer of QTZ from Shiden', async ({helper}) => { + const testAmount = 10_000n * (10n ** QTZ_DECIMALS); + const [targetAccount] = await helper.arrange.createAccounts([0n], alice); + + const quartzMultilocation = { + V1: { + parents: 1, + interior: { + X1: { + Parachain: QUARTZ_CHAIN, + }, + }, + }, + }; + + const maliciousXcmProgram = helper.arrange.makeXcmProgramReserveAssetDeposited( + targetAccount.addressRaw, + { + Concrete: { + parents: 1, + interior: { + X1: { + Parachain: QUARTZ_CHAIN, + }, + }, + }, + }, + testAmount, + ); + + await usingShidenPlaygrounds(shidenUrl, async (helper) => { + await helper.getSudo().xcm.send(alice, quartzMultilocation, maliciousXcmProgram); + }); + + const maxWaitBlocks = 3; + + const xcmpQueueFailEvent = await helper.wait.eventOutcome( + maxWaitBlocks, + 'xcmpQueue', + 'Fail', + ); + + expect( + xcmpQueueFailEvent != null, + `'xcmpQueue.FailEvent' event is expected`, + ).to.be.true; + + expect( + xcmpQueueFailEvent!.isUntrustedReserveLocation, + `The XCM error should be 'isUntrustedReserveLocation'`, + ).to.be.true; + + const accountBalance = await helper.balance.getSubstrate(targetAccount.address); + expect(accountBalance).to.be.equal(0n); + }); }); diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index 1846dfba64..35d4dfe0e3 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -664,19 +664,20 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { }, }; - const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, moreThanAcalaHas); + const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit( + targetAccount.addressRaw, + { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + moreThanAcalaHas, + ); // Try to trick Unique await usingAcalaPlaygrounds(acalaUrl, async (helper) => { - await helper.getSudo().executeExtrinsic( - alice, - 'api.tx.polkadotXcm.send', - [ - uniqueMultilocation, - maliciousXcmProgram, - ], - true, - ); + await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgram); }); const maxWaitBlocks = 3; @@ -702,18 +703,19 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { // But Acala still can send the correct amount const validTransferAmount = acalaBalance / 2n; - const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, validTransferAmount); + const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit( + targetAccount.addressRaw, + { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + validTransferAmount, + ); await usingAcalaPlaygrounds(acalaUrl, async (helper) => { - await helper.getSudo().executeExtrinsic( - alice, - 'api.tx.polkadotXcm.send', - [ - uniqueMultilocation, - validXcmProgram, - ], - true, - ); + await helper.getSudo().xcm.send(alice, uniqueMultilocation, validXcmProgram); }); await helper.wait.newBlocks(maxWaitBlocks); @@ -721,6 +723,62 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); expect(targetAccountBalance).to.be.equal(validTransferAmount); }); + + itSub('Should not accept reserve transfer of UNQ from Acala', async ({helper}) => { + const testAmount = 10_000n * (10n ** UNQ_DECIMALS); + const [targetAccount] = await helper.arrange.createAccounts([0n], alice); + + const uniqueMultilocation = { + V1: { + parents: 1, + interior: { + X1: { + Parachain: UNIQUE_CHAIN, + }, + }, + }, + }; + + const maliciousXcmProgram = helper.arrange.makeXcmProgramReserveAssetDeposited( + targetAccount.addressRaw, + { + Concrete: { + parents: 1, + interior: { + X1: { + Parachain: UNIQUE_CHAIN, + }, + }, + }, + }, + testAmount, + ); + + await usingAcalaPlaygrounds(acalaUrl, async (helper) => { + await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgram); + }); + + const maxWaitBlocks = 3; + + const xcmpQueueFailEvent = await helper.wait.eventOutcome( + maxWaitBlocks, + 'xcmpQueue', + 'Fail', + ); + + expect( + xcmpQueueFailEvent != null, + `'xcmpQueue.FailEvent' event is expected`, + ).to.be.true; + + expect( + xcmpQueueFailEvent!.isUntrustedReserveLocation, + `The XCM error should be 'isUntrustedReserveLocation'`, + ).to.be.true; + + const accountBalance = await helper.balance.getSubstrate(targetAccount.address); + expect(accountBalance).to.be.equal(0n); + }); }); // These tests are relevant only when the foreign asset pallet is disabled @@ -1066,6 +1124,10 @@ describeXCM('[XCM] Integration test: Exchanging UNQ with Moonbeam', () => { itSub.skip('Moonbeam can send only up to its balance', async ({helper}) => { throw Error("Not yet implemented"); }); + + itSub.skip('Should not accept reserve transfer of UNQ from Moonbeam', async ({helper}) => { + throw Error("Not yet implemented"); + }); }); describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { @@ -1278,62 +1340,6 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { expect(balanceUNQ).to.eq(balanceAfterUniqueToAstarXCM + unqFromAstarTransfered); }); - itSub.skip('Should not accept limitedReserveTransfer of UNQ from ASTAR', async ({helper}) => { - await usingAstarPlaygrounds(astarUrl, async (helper) => { - const destination = { - V1: { - parents: 1, - interior: { - X1: { - Parachain: UNIQUE_CHAIN, - }, - }, - }, - }; - - const beneficiary = { - V1: { - parents: 0, - interior: { - X1: { - AccountId32: { - network: 'Any', - id: randomAccount.addressRaw, - }, - }, - }, - }, - }; - - const assets = { - V1: [ - { - id: { - Concrete: { - parents: 1, - interior: { - X1: { - Parachain: UNIQUE_CHAIN, - }, - }, - }, - }, - fun: { - Fungible: unqFromAstarTransfered, - }, - }, - ], - }; - - // Initial balance is 1 ASTAR - expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(astarInitialBalance); - - const feeAssetItem = 0; - // TODO: expect rejected: - await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited'); - }); - }); - itSub('Astar can send only up to its balance', async ({helper}) => { // set Astar's sovereign account's balance const astarBalance = 10000n * (10n ** UNQ_DECIMALS); @@ -1354,19 +1360,20 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { }, }; - const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, moreThanShidenHas); + const maliciousXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit( + targetAccount.addressRaw, + { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + moreThanShidenHas, + ); // Try to trick Unique await usingAstarPlaygrounds(astarUrl, async (helper) => { - await helper.getSudo().executeExtrinsic( - alice, - 'api.tx.polkadotXcm.send', - [ - uniqueMultilocation, - maliciousXcmProgram, - ], - true, - ); + await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgram); }); const maxWaitBlocks = 3; @@ -1392,18 +1399,19 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { // But Astar still can send the correct amount const validTransferAmount = astarBalance / 2n; - const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit(targetAccount.addressRaw, validTransferAmount); + const validXcmProgram = helper.arrange.makeXcmProgramWithdrawDeposit( + targetAccount.addressRaw, + { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + validTransferAmount, + ); await usingAstarPlaygrounds(astarUrl, async (helper) => { - await helper.getSudo().executeExtrinsic( - alice, - 'api.tx.polkadotXcm.send', - [ - uniqueMultilocation, - validXcmProgram, - ], - true, - ); + await helper.getSudo().xcm.send(alice, uniqueMultilocation, validXcmProgram); }); await helper.wait.newBlocks(maxWaitBlocks); @@ -1411,4 +1419,61 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); expect(targetAccountBalance).to.be.equal(validTransferAmount); }); + + itSub('Should not accept reserve transfer of UNQ from Astar', async ({helper}) => { + const testAmount = 10_000n * (10n ** UNQ_DECIMALS); + const [targetAccount] = await helper.arrange.createAccounts([0n], alice); + + const uniqueMultilocation = { + V1: { + parents: 1, + interior: { + X1: { + Parachain: UNIQUE_CHAIN, + }, + }, + }, + }; + + const maliciousXcmProgram = helper.arrange.makeXcmProgramReserveAssetDeposited( + targetAccount.addressRaw, + { + Concrete: { + parents: 1, + interior: { + X1: { + Parachain: UNIQUE_CHAIN, + }, + }, + }, + }, + testAmount, + ); + + await usingAstarPlaygrounds(astarUrl, async (helper) => { + await helper.getSudo().xcm.send(alice, uniqueMultilocation, maliciousXcmProgram); + }); + + const maxWaitBlocks = 3; + + const xcmpQueueFailEvent = await helper.wait.eventOutcome( + maxWaitBlocks, + 'xcmpQueue', + 'Fail', + ); + + expect( + xcmpQueueFailEvent != null, + `'xcmpQueue.FailEvent' event is expected`, + ).to.be.true; + + expect( + xcmpQueueFailEvent!.isUntrustedReserveLocation, + `The XCM error should be 'isUntrustedReserveLocation'`, + ).to.be.true; + + const accountBalance = await helper.balance.getSubstrate(targetAccount.address); + expect(accountBalance).to.be.equal(0n); + }); + }); From 8bdb95ca805aff0741f2420c943a9f039c90a8b3 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 12 Apr 2023 14:59:23 +0200 Subject: [PATCH 100/103] fix: yarn fix --- tests/src/util/playgrounds/unique.dev.ts | 12 ++++++------ tests/src/util/playgrounds/unique.ts | 2 +- tests/src/xcm/xcmQuartz.test.ts | 22 ++++++++++++---------- tests/src/xcm/xcmUnique.test.ts | 22 ++++++++++++---------- 4 files changed, 31 insertions(+), 27 deletions(-) diff --git a/tests/src/util/playgrounds/unique.dev.ts b/tests/src/util/playgrounds/unique.dev.ts index 4bf5c1bcda..365c9f1735 100644 --- a/tests/src/util/playgrounds/unique.dev.ts +++ b/tests/src/util/playgrounds/unique.dev.ts @@ -442,13 +442,13 @@ export class ArrangeGroup { Fungible: amount, }, }, - weightLimit: 'Unlimited' + weightLimit: 'Unlimited', }, }, { DepositAsset: { assets: { - Wild: 'All' + Wild: 'All', }, maxAssets: 1, beneficiary: { @@ -457,7 +457,7 @@ export class ArrangeGroup { X1: { AccountId32: { network: 'Any', - id: beneficiary + id: beneficiary, }, }, }, @@ -489,13 +489,13 @@ export class ArrangeGroup { Fungible: amount, }, }, - weightLimit: 'Unlimited' + weightLimit: 'Unlimited', }, }, { DepositAsset: { assets: { - Wild: 'All' + Wild: 'All', }, maxAssets: 1, beneficiary: { @@ -504,7 +504,7 @@ export class ArrangeGroup { X1: { AccountId32: { network: 'Any', - id: beneficiary + id: beneficiary, }, }, }, diff --git a/tests/src/util/playgrounds/unique.ts b/tests/src/util/playgrounds/unique.ts index 9d088ec87f..7c61aac538 100644 --- a/tests/src/util/playgrounds/unique.ts +++ b/tests/src/util/playgrounds/unique.ts @@ -3031,7 +3031,7 @@ class XcmGroup extends HelperGroup { message, ], true, - ); + ); } } diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index 5841f1ab5a..39a8229375 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -688,12 +688,12 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { expect( xcmpQueueFailEvent != null, - `'xcmpQueue.FailEvent' event is expected`, + '\'xcmpQueue.FailEvent\' event is expected', ).to.be.true; expect( xcmpQueueFailEvent!.isFailedToTransactAsset, - `The XCM error should be 'FailedToTransactAsset'`, + 'The XCM error should be \'FailedToTransactAsset\'', ).to.be.true; targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); @@ -766,12 +766,12 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { expect( xcmpQueueFailEvent != null, - `'xcmpQueue.FailEvent' event is expected`, + '\'xcmpQueue.FailEvent\' event is expected', ).to.be.true; expect( xcmpQueueFailEvent!.isUntrustedReserveLocation, - `The XCM error should be 'isUntrustedReserveLocation'`, + 'The XCM error should be \'isUntrustedReserveLocation\'', ).to.be.true; const accountBalance = await helper.balance.getSubstrate(targetAccount.address); @@ -1118,12 +1118,14 @@ describeXCM('[XCM] Integration test: Exchanging QTZ with Moonriver', () => { expect(qtzFees == 0n).to.be.true; }); + // eslint-disable-next-line require-await itSub.skip('Moonriver can send only up to its balance', async ({helper}) => { - throw Error("Not yet implemented"); + throw Error('Not yet implemented'); }); + // eslint-disable-next-line require-await itSub.skip('Should not accept reserve transfer of QTZ from Moonriver', async ({helper}) => { - throw Error("Not yet implemented"); + throw Error('Not yet implemented'); }); }); @@ -1384,12 +1386,12 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { expect( xcmpQueueFailEvent != null, - `'xcmpQueue.FailEvent' event is expected`, + '\'xcmpQueue.FailEvent\' event is expected', ).to.be.true; expect( xcmpQueueFailEvent!.isFailedToTransactAsset, - `The XCM error should be 'FailedToTransactAsset'`, + 'The XCM error should be \'FailedToTransactAsset\'', ).to.be.true; targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); @@ -1462,12 +1464,12 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => { expect( xcmpQueueFailEvent != null, - `'xcmpQueue.FailEvent' event is expected`, + '\'xcmpQueue.FailEvent\' event is expected', ).to.be.true; expect( xcmpQueueFailEvent!.isUntrustedReserveLocation, - `The XCM error should be 'isUntrustedReserveLocation'`, + 'The XCM error should be \'isUntrustedReserveLocation\'', ).to.be.true; const accountBalance = await helper.balance.getSubstrate(targetAccount.address); diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index 35d4dfe0e3..87a7cce034 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -690,12 +690,12 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { expect( xcmpQueueFailEvent != null, - `'xcmpQueue.FailEvent' event is expected`, + '\'xcmpQueue.FailEvent\' event is expected', ).to.be.true; expect( xcmpQueueFailEvent!.isFailedToTransactAsset, - `The XCM error should be 'FailedToTransactAsset'`, + 'The XCM error should be \'FailedToTransactAsset\'', ).to.be.true; targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); @@ -768,12 +768,12 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { expect( xcmpQueueFailEvent != null, - `'xcmpQueue.FailEvent' event is expected`, + '\'xcmpQueue.FailEvent\' event is expected', ).to.be.true; expect( xcmpQueueFailEvent!.isUntrustedReserveLocation, - `The XCM error should be 'isUntrustedReserveLocation'`, + 'The XCM error should be \'isUntrustedReserveLocation\'', ).to.be.true; const accountBalance = await helper.balance.getSubstrate(targetAccount.address); @@ -1121,12 +1121,14 @@ describeXCM('[XCM] Integration test: Exchanging UNQ with Moonbeam', () => { expect(unqFees == 0n).to.be.true; }); + // eslint-disable-next-line require-await itSub.skip('Moonbeam can send only up to its balance', async ({helper}) => { - throw Error("Not yet implemented"); + throw Error('Not yet implemented'); }); + // eslint-disable-next-line require-await itSub.skip('Should not accept reserve transfer of UNQ from Moonbeam', async ({helper}) => { - throw Error("Not yet implemented"); + throw Error('Not yet implemented'); }); }); @@ -1386,12 +1388,12 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { expect( xcmpQueueFailEvent != null, - `'xcmpQueue.FailEvent' event is expected`, + '\'xcmpQueue.FailEvent\' event is expected', ).to.be.true; expect( xcmpQueueFailEvent!.isFailedToTransactAsset, - `The XCM error should be 'FailedToTransactAsset'`, + 'The XCM error should be \'FailedToTransactAsset\'', ).to.be.true; targetAccountBalance = await helper.balance.getSubstrate(targetAccount.address); @@ -1464,12 +1466,12 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => { expect( xcmpQueueFailEvent != null, - `'xcmpQueue.FailEvent' event is expected`, + '\'xcmpQueue.FailEvent\' event is expected', ).to.be.true; expect( xcmpQueueFailEvent!.isUntrustedReserveLocation, - `The XCM error should be 'isUntrustedReserveLocation'`, + 'The XCM error should be \'isUntrustedReserveLocation\'', ).to.be.true; const accountBalance = await helper.balance.getSubstrate(targetAccount.address); From 7b287e0310387916d65d2390a19a30da33da42a9 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 12 Apr 2023 17:38:19 +0200 Subject: [PATCH 101/103] fix: remove string type variant from balances --- tests/src/util/playgrounds/unique.dev.ts | 4 ++-- tests/src/util/playgrounds/unique.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/src/util/playgrounds/unique.dev.ts b/tests/src/util/playgrounds/unique.dev.ts index 365c9f1735..03b70af552 100644 --- a/tests/src/util/playgrounds/unique.dev.ts +++ b/tests/src/util/playgrounds/unique.dev.ts @@ -421,7 +421,7 @@ export class ArrangeGroup { return capture; } - makeXcmProgramWithdrawDeposit(beneficiary: Uint8Array, id: any, amount: bigint | string) { + makeXcmProgramWithdrawDeposit(beneficiary: Uint8Array, id: any, amount: bigint) { return { V2: [ { @@ -468,7 +468,7 @@ export class ArrangeGroup { }; } - makeXcmProgramReserveAssetDeposited(beneficiary: Uint8Array, id: any, amount: bigint | string) { + makeXcmProgramReserveAssetDeposited(beneficiary: Uint8Array, id: any, amount: bigint) { return { V2: [ { diff --git a/tests/src/util/playgrounds/unique.ts b/tests/src/util/playgrounds/unique.ts index 7c61aac538..5806148a2a 100644 --- a/tests/src/util/playgrounds/unique.ts +++ b/tests/src/util/playgrounds/unique.ts @@ -2446,7 +2446,7 @@ class BalanceGroup extends HelperGroup { return this.ethBalanceGroup.getEthereum(address); } - async setBalanceSubstrate(signer: TSigner, address: TSubstrateAccount, amount: bigint | string, reservedAmount: bigint | string = 0n) { + async setBalanceSubstrate(signer: TSigner, address: TSubstrateAccount, amount: bigint, reservedAmount: bigint = 0n) { await this.helper.executeExtrinsic(signer, 'api.tx.balances.setBalance', [address, amount, reservedAmount], true); } From b88504600f1dca16cf16e60df4bf3396e67681b5 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 12 Apr 2023 17:39:59 +0200 Subject: [PATCH 102/103] fix: yarn fix --- tests/src/util/playgrounds/unique.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/src/util/playgrounds/unique.ts b/tests/src/util/playgrounds/unique.ts index 5806148a2a..7a723168be 100644 --- a/tests/src/util/playgrounds/unique.ts +++ b/tests/src/util/playgrounds/unique.ts @@ -2446,7 +2446,7 @@ class BalanceGroup extends HelperGroup { return this.ethBalanceGroup.getEthereum(address); } - async setBalanceSubstrate(signer: TSigner, address: TSubstrateAccount, amount: bigint, reservedAmount: bigint = 0n) { + async setBalanceSubstrate(signer: TSigner, address: TSubstrateAccount, amount: bigint, reservedAmount = 0n) { await this.helper.executeExtrinsic(signer, 'api.tx.balances.setBalance', [address, amount, reservedAmount], true); } From 0cae8a74fca996fa9e356c8cbb3311e2e18830b5 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Tue, 11 Apr 2023 19:29:44 +0200 Subject: [PATCH 103/103] fix: qtz/unq reject foreign unregistered tokens --- tests/src/util/playgrounds/unique.dev.ts | 13 +++ tests/src/xcm/xcmQuartz.test.ts | 133 ++++++++++++++++++----- tests/src/xcm/xcmUnique.test.ts | 133 ++++++++++++++++++----- 3 files changed, 225 insertions(+), 54 deletions(-) diff --git a/tests/src/util/playgrounds/unique.dev.ts b/tests/src/util/playgrounds/unique.dev.ts index 03b70af552..47da8feecf 100644 --- a/tests/src/util/playgrounds/unique.dev.ts +++ b/tests/src/util/playgrounds/unique.dev.ts @@ -726,6 +726,19 @@ class WaitGroup { }); return promise; } + + async eventOutcome(maxBlocksToWait: number, eventSection: string, eventMethod: string) { + const eventRecord = await this.event(maxBlocksToWait, eventSection, eventMethod); + + if (eventRecord == null) { + return null; + } + + const event = eventRecord!.event; + const outcome = event.data[1] as EventT; + + return outcome; + } } class SessionGroup { diff --git a/tests/src/xcm/xcmQuartz.test.ts b/tests/src/xcm/xcmQuartz.test.ts index 39a8229375..c00c0dc659 100644 --- a/tests/src/xcm/xcmQuartz.test.ts +++ b/tests/src/xcm/xcmQuartz.test.ts @@ -19,6 +19,7 @@ import {blake2AsHex} from '@polkadot/util-crypto'; import config from '../config'; import {XcmV2TraitsError} from '../interfaces'; import {itSub, expect, describeXCM, usingPlaygrounds, usingKaruraPlaygrounds, usingRelayPlaygrounds, usingMoonriverPlaygrounds, usingStateminePlaygrounds, usingShidenPlaygrounds} from '../util'; +import {DevUniqueHelper} from '../util/playgrounds/unique.dev'; const QUARTZ_CHAIN = 2095; const STATEMINE_CHAIN = 1000; @@ -779,61 +780,139 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Karura', () => { }); }); -// These tests are relevant only when the foreign asset pallet is disabled +// These tests are relevant only when +// the the corresponding foreign assets are not registered describeXCM('[XCM] Integration test: Quartz rejects non-native tokens', () => { let alice: IKeyringPair; + let alith: IKeyringPair; + + const testAmount = 100_000_000_000n; + let quartzParachainJunction; + let quartzAccountJunction; + + let quartzParachainMultilocation: any; + let quartzAccountMultilocation: any; + let quartzCombinedMultilocation: any; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { alice = await privateKey('//Alice'); - // Set the default version to wrap the first message to other chains. - await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); - }); - }); + quartzParachainJunction = {Parachain: QUARTZ_CHAIN}; + quartzAccountJunction = { + AccountId32: { + network: 'Any', + id: alice.addressRaw, + }, + }; - itSub('Quartz rejects KAR tokens from Karura', async ({helper}) => { - await usingKaruraPlaygrounds(karuraUrl, async (helper) => { - const destination = { + quartzParachainMultilocation = { V1: { parents: 1, interior: { - X2: [ - {Parachain: QUARTZ_CHAIN}, - { - AccountId32: { - network: 'Any', - id: alice.addressRaw, - }, - }, - ], + X1: quartzParachainJunction, }, }, }; - const id = { - Token: 'KAR', + quartzAccountMultilocation = { + V1: { + parents: 0, + interior: { + X1: quartzAccountJunction, + }, + }, }; - await helper.xTokens.transfer(alice, id, 100_000_000_000n, destination, 'Unlimited'); + quartzCombinedMultilocation = { + V1: { + parents: 1, + interior: { + X2: [quartzParachainJunction, quartzAccountJunction], + }, + }, + }; + + // Set the default version to wrap the first message to other chains. + await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); }); + // eslint-disable-next-line require-await + await usingMoonriverPlaygrounds(moonriverUrl, async (helper) => { + alith = helper.account.alithAccount(); + }); + }); + + const expectFailedToTransact = async (network: string, helper: DevUniqueHelper) => { const maxWaitBlocks = 3; - const xcmpQueueFailEvent = await helper.wait.event(maxWaitBlocks, 'xcmpQueue', 'Fail'); + const xcmpQueueFailEvent = await helper.wait.eventOutcome( + maxWaitBlocks, + 'xcmpQueue', + 'Fail', + ); expect( xcmpQueueFailEvent != null, - '[Karura] xcmpQueue.FailEvent event is expected', + `[reject ${network} tokens] 'xcmpQueue.FailEvent' event is expected`, ).to.be.true; - const event = xcmpQueueFailEvent!.event; - const outcome = event.data[1] as XcmV2TraitsError; - expect( - outcome.isFailedToTransactAsset, - '[Karura] The XCM error should be `FailedToTransactAsset`', + xcmpQueueFailEvent!.isFailedToTransactAsset, + `[reject ${network} tokens] The XCM error should be 'FailedToTransactAsset'`, ).to.be.true; + }; + + itSub('Quartz rejects KAR tokens from Karura', async ({helper}) => { + await usingKaruraPlaygrounds(karuraUrl, async (helper) => { + const id = { + Token: 'KAR', + }; + const destination = quartzCombinedMultilocation; + await helper.xTokens.transfer(alice, id, testAmount, destination, 'Unlimited'); + }); + + await expectFailedToTransact('KAR', helper); + }); + + itSub('Quartz rejects MOVR tokens from Moonriver', async ({helper}) => { + await usingMoonriverPlaygrounds(moonriverUrl, async (helper) => { + const id = 'SelfReserve'; + const destination = quartzCombinedMultilocation; + await helper.xTokens.transfer(alith, id, testAmount, destination, 'Unlimited'); + }); + + await expectFailedToTransact('MOVR', helper); + }); + + itSub('Quartz rejects SDN tokens from Shiden', async ({helper}) => { + await usingShidenPlaygrounds(shidenUrl, async (helper) => { + const destinationParachain = quartzParachainMultilocation; + const beneficiary = quartzAccountMultilocation; + const assets = { + V1: [{ + id: { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + fun: { + Fungible: testAmount, + }, + }], + }; + const feeAssetItem = 0; + + await helper.executeExtrinsic(alice, 'api.tx.polkadotXcm.reserveWithdrawAssets', [ + destinationParachain, + beneficiary, + assets, + feeAssetItem, + ]); + }); + + await expectFailedToTransact('SDN', helper); }); }); diff --git a/tests/src/xcm/xcmUnique.test.ts b/tests/src/xcm/xcmUnique.test.ts index 87a7cce034..e9cacf8e39 100644 --- a/tests/src/xcm/xcmUnique.test.ts +++ b/tests/src/xcm/xcmUnique.test.ts @@ -19,6 +19,7 @@ import {blake2AsHex} from '@polkadot/util-crypto'; import config from '../config'; import {XcmV2TraitsError} from '../interfaces'; import {itSub, expect, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingRelayPlaygrounds, usingMoonbeamPlaygrounds, usingStatemintPlaygrounds, usingAstarPlaygrounds} from '../util'; +import {DevUniqueHelper} from '../util/playgrounds/unique.dev'; const UNIQUE_CHAIN = 2037; const STATEMINT_CHAIN = 1000; @@ -781,61 +782,139 @@ describeXCM('[XCM] Integration test: Exchanging tokens with Acala', () => { }); }); -// These tests are relevant only when the foreign asset pallet is disabled +// These tests are relevant only when +// the the corresponding foreign assets are not registered describeXCM('[XCM] Integration test: Unique rejects non-native tokens', () => { let alice: IKeyringPair; + let alith: IKeyringPair; + + const testAmount = 100_000_000_000n; + let uniqueParachainJunction; + let uniqueAccountJunction; + + let uniqueParachainMultilocation: any; + let uniqueAccountMultilocation: any; + let uniqueCombinedMultilocation: any; before(async () => { await usingPlaygrounds(async (helper, privateKey) => { alice = await privateKey('//Alice'); - // Set the default version to wrap the first message to other chains. - await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); - }); - }); + uniqueParachainJunction = {Parachain: UNIQUE_CHAIN}; + uniqueAccountJunction = { + AccountId32: { + network: 'Any', + id: alice.addressRaw, + }, + }; - itSub('Unique rejects ACA tokens from Acala', async ({helper}) => { - await usingAcalaPlaygrounds(acalaUrl, async (helper) => { - const destination = { + uniqueParachainMultilocation = { V1: { parents: 1, interior: { - X2: [ - {Parachain: UNIQUE_CHAIN}, - { - AccountId32: { - network: 'Any', - id: alice.addressRaw, - }, - }, - ], + X1: uniqueParachainJunction, }, }, }; - const id = { - Token: 'ACA', + uniqueAccountMultilocation = { + V1: { + parents: 0, + interior: { + X1: uniqueAccountJunction, + }, + }, }; - await helper.xTokens.transfer(alice, id, 100_000_000_000n, destination, 'Unlimited'); + uniqueCombinedMultilocation = { + V1: { + parents: 1, + interior: { + X2: [uniqueParachainJunction, uniqueAccountJunction], + }, + }, + }; + + // Set the default version to wrap the first message to other chains. + await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION); }); + // eslint-disable-next-line require-await + await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => { + alith = helper.account.alithAccount(); + }); + }); + + const expectFailedToTransact = async (network: string, helper: DevUniqueHelper) => { const maxWaitBlocks = 3; - const xcmpQueueFailEvent = await helper.wait.event(maxWaitBlocks, 'xcmpQueue', 'Fail'); + const xcmpQueueFailEvent = await helper.wait.eventOutcome( + maxWaitBlocks, + 'xcmpQueue', + 'Fail', + ); expect( xcmpQueueFailEvent != null, - '[Acala] xcmpQueue.FailEvent event is expected', + `[reject ${network} tokens] 'xcmpQueue.FailEvent' event is expected`, ).to.be.true; - const event = xcmpQueueFailEvent!.event; - const outcome = event.data[1] as XcmV2TraitsError; - expect( - outcome.isFailedToTransactAsset, - '[Acala] The XCM error should be `FailedToTransactAsset`', + xcmpQueueFailEvent!.isFailedToTransactAsset, + `[reject ${network} tokens] The XCM error should be 'FailedToTransactAsset'`, ).to.be.true; + }; + + itSub('Unique rejects ACA tokens from Acala', async ({helper}) => { + await usingAcalaPlaygrounds(acalaUrl, async (helper) => { + const id = { + Token: 'ACA', + }; + const destination = uniqueCombinedMultilocation; + await helper.xTokens.transfer(alice, id, testAmount, destination, 'Unlimited'); + }); + + await expectFailedToTransact('ACA', helper); + }); + + itSub('Unique rejects GLMR tokens from Moonbeam', async ({helper}) => { + await usingMoonbeamPlaygrounds(moonbeamUrl, async (helper) => { + const id = 'SelfReserve'; + const destination = uniqueCombinedMultilocation; + await helper.xTokens.transfer(alith, id, testAmount, destination, 'Unlimited'); + }); + + await expectFailedToTransact('GLMR', helper); + }); + + itSub('Unique rejects ASTR tokens from Astar', async ({helper}) => { + await usingAstarPlaygrounds(astarUrl, async (helper) => { + const destinationParachain = uniqueParachainMultilocation; + const beneficiary = uniqueAccountMultilocation; + const assets = { + V1: [{ + id: { + Concrete: { + parents: 0, + interior: 'Here', + }, + }, + fun: { + Fungible: testAmount, + }, + }], + }; + const feeAssetItem = 0; + + await helper.executeExtrinsic(alice, 'api.tx.polkadotXcm.reserveWithdrawAssets', [ + destinationParachain, + beneficiary, + assets, + feeAssetItem, + ]); + }); + + await expectFailedToTransact('ASTR', helper); }); });