diff --git a/addons/svm/core/src/codec/idl/mod.rs b/addons/svm/core/src/codec/idl/mod.rs index 6332e8a4a..a41ccd70d 100644 --- a/addons/svm/core/src/codec/idl/mod.rs +++ b/addons/svm/core/src/codec/idl/mod.rs @@ -5,14 +5,15 @@ use std::str::FromStr; use crate::typing::anchor as anchor_lang_idl; use crate::typing::SvmValue; use anchor_lang_idl::types::{ - Idl, IdlArrayLen, IdlDefinedFields, IdlGenericArg, IdlInstruction, IdlType, IdlTypeDef, - IdlTypeDefGeneric, IdlTypeDefTy, + Idl, IdlAccount, IdlArrayLen, IdlDefinedFields, IdlGenericArg, IdlInstruction, IdlType, + IdlTypeDef, IdlTypeDefGeneric, IdlTypeDefTy, }; use convert_idl::classic_idl_to_anchor_idl; use solana_pubkey::Pubkey; use std::fmt::Display; use txtx_addon_kit::types::diagnostics::Diagnostic; use txtx_addon_kit::{helpers::fs::FileLocation, indexmap::IndexMap, types::types::Value}; +use txtx_addon_network_svm_types::idl::parse_bytes_to_value_with_expected_idl_type_with_leftover_bytes; use txtx_addon_network_svm_types::I256; use txtx_addon_network_svm_types::U256; @@ -62,10 +63,26 @@ impl IdlRef { .ok_or_else(|| diagnosed_error!("instruction '{instruction_name}' not found in IDL")) } + pub fn get_account(&self, account_name: &str) -> Result<&IdlAccount, Diagnostic> { + self.idl + .accounts + .iter() + .find(|a| a.name == account_name) + .ok_or_else(|| diagnosed_error!("account '{account_name}' not found in IDL")) + } + pub fn get_types(&self) -> Vec { self.idl.types.clone() } + pub fn get_type(&self, type_name: &str) -> Result<&IdlTypeDef, Diagnostic> { + self.idl + .types + .iter() + .find(|t| t.name == type_name) + .ok_or_else(|| diagnosed_error!("type '{}' not found in IDL", type_name)) + } + /// Encodes the arguments for a given instruction into a map of argument names to byte arrays. pub fn get_encoded_args_map( &self, @@ -351,7 +368,9 @@ pub fn borsh_encode_value_to_idl_type( // Handle two enum formats: // 1. {"variant": "VariantName", "value": ...} (explicit format) // 2. {"VariantName": ...} (decoded format from parse_bytes_to_value) - let (enum_variant, enum_variant_value) = if let Some(variant_field) = enum_value.get("variant") { + let (enum_variant, enum_variant_value) = if let Some(variant_field) = + enum_value.get("variant") + { // Format 1: explicit variant field let variant_name = variant_field.as_string().ok_or_else(|| { format!( @@ -374,12 +393,13 @@ pub fn borsh_encode_value_to_idl_type( value.to_string(), )); } - let (variant_name, variant_value) = enum_value.iter().next().ok_or_else(|| { - format!( - "unable to encode value ({}) as borsh enum: empty object", - value.to_string(), - ) - })?; + let (variant_name, variant_value) = + enum_value.iter().next().ok_or_else(|| { + format!( + "unable to encode value ({}) as borsh enum: empty object", + value.to_string(), + ) + })?; (variant_name.as_str(), variant_value) }; @@ -711,12 +731,10 @@ fn borsh_encode_bytes_to_idl_type( name )) } - IdlType::Generic(name) => { - Err(format!( - "cannot convert raw bytes to generic type '{}'; type must be resolved first", - name - )) - } + IdlType::Generic(name) => Err(format!( + "cannot convert raw bytes to generic type '{}'; type must be resolved first", + name + )), t => Err(format!("IDL type {:?} is not yet supported for bytes encoding", t)), } } @@ -747,3 +765,53 @@ fn parse_generic_expected_type( }; Ok(ty.clone()) } + +/// Given account data bytes, the discriminator length, the type definition, +/// and a target field name, returns `(offset, byte_length, IdlType)` for that +/// field within the data buffer. +pub fn get_field_offset_in_account( + data: &[u8], + discriminator_len: usize, + type_def_ty: &IdlTypeDefTy, + field_name: &str, + idl_types: &Vec, +) -> Result<(usize, usize, IdlType), Diagnostic> { + let fields = match type_def_ty { + IdlTypeDefTy::Struct { fields: Some(IdlDefinedFields::Named(fields)) } => fields, + _ => { + return Err(diagnosed_error!("expected a struct with named fields for field patching")) + } + }; + + let mut offset = discriminator_len; + let mut cursor = &data[discriminator_len..]; + + for field in fields { + let before_len = cursor.len(); + let (_value, rest) = parse_bytes_to_value_with_expected_idl_type_with_leftover_bytes( + cursor, + &field.ty, + idl_types, + &vec![], + &vec![], + ) + .map_err(|e| { + diagnosed_error!( + "failed to decode field '{}' while computing offset: {}", + field.name, + e + ) + })?; + + let consumed = before_len - rest.len(); + + if field.name == field_name { + return Ok((offset, consumed, field.ty.clone())); + } + + offset += consumed; + cursor = rest; + } + + Err(diagnosed_error!("field '{}' not found in account type definition", field_name)) +} diff --git a/addons/svm/core/src/commands/setup_surfnet/fixtures/idl.json b/addons/svm/core/src/commands/setup_surfnet/fixtures/idl.json new file mode 100644 index 000000000..f40ce0c92 --- /dev/null +++ b/addons/svm/core/src/commands/setup_surfnet/fixtures/idl.json @@ -0,0 +1,299 @@ +{ + "address": "LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo", + "metadata": { + "name": "lb_clmm", + "version": "0.11.0", + "spec": "0.1.0", + "description": "Created with Anchor" + }, + "instructions": [], + "accounts": [ + { + "name": "PositionV2", + "discriminator": [117, 176, 212, 199, 245, 180, 133, 182] + } + ], + "errors": [], + "types": [ + { + "name": "FeeInfo", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "fee_x_per_token_complete", + "type": "u128" + }, + { + "name": "fee_y_per_token_complete", + "type": "u128" + }, + { + "name": "fee_x_pending", + "type": "u64" + }, + { + "name": "fee_y_pending", + "type": "u64" + } + ] + } + }, + + { + "name": "PositionV2", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "lb_pair", + "docs": ["The LB pair of this position"], + "type": "pubkey" + }, + { + "name": "owner", + "docs": [ + "Owner of the position. Client rely on this to to fetch their positions." + ], + "type": "pubkey" + }, + { + "name": "liquidity_shares", + "docs": [ + "Liquidity shares of this position in bins (lower_bin_id <-> upper_bin_id). This is the same as LP concept." + ], + "type": { + "array": ["u128", 70] + } + }, + { + "name": "reward_infos", + "docs": ["Farming reward information"], + "type": { + "array": [ + { + "defined": { + "name": "UserRewardInfo" + } + }, + 70 + ] + } + }, + { + "name": "fee_infos", + "docs": ["Swap fee to claim information"], + "type": { + "array": [ + { + "defined": { + "name": "FeeInfo" + } + }, + 70 + ] + } + }, + { + "name": "lower_bin_id", + "docs": ["Lower bin ID"], + "type": "i32" + }, + { + "name": "upper_bin_id", + "docs": ["Upper bin ID"], + "type": "i32" + }, + { + "name": "last_updated_at", + "docs": ["Last updated timestamp"], + "type": "i64" + }, + { + "name": "total_claimed_fee_x_amount", + "docs": ["Total claimed token fee X"], + "type": "u64" + }, + { + "name": "total_claimed_fee_y_amount", + "docs": ["Total claimed token fee Y"], + "type": "u64" + }, + { + "name": "total_claimed_rewards", + "docs": ["Total claimed rewards"], + "type": { + "array": ["u64", 2] + } + }, + { + "name": "operator", + "docs": ["Operator of position"], + "type": "pubkey" + }, + { + "name": "lock_release_point", + "docs": ["Time point which the locked liquidity can be withdraw"], + "type": "u64" + }, + { + "name": "_padding_0", + "docs": [ + "_padding_0, previous subjected_to_bootstrap_liquidity_locking, BE CAREFUL FOR TOMBSTONE WHEN REUSE !!" + ], + "type": "u8" + }, + { + "name": "fee_owner", + "docs": [ + "Address is able to claim fee in this position, only valid for bootstrap_liquidity_position" + ], + "type": "pubkey" + }, + { + "name": "version", + "docs": ["version to know whether we have reset tombstone fields"], + "type": "u8" + }, + { + "name": "_reserved", + "docs": ["Reserved space for future use"], + "type": { + "array": ["u8", 86] + } + } + ] + } + }, + + { + "name": "RemainingAccountsInfo", + "type": { + "kind": "struct", + "fields": [ + { + "name": "slices", + "type": { + "vec": { + "defined": { + "name": "RemainingAccountsSlice" + } + } + } + } + ] + } + }, + { + "name": "RemainingAccountsSlice", + "type": { + "kind": "struct", + "fields": [ + { + "name": "accounts_type", + "type": { + "defined": { + "name": "AccountsType" + } + } + }, + { + "name": "length", + "type": "u8" + } + ] + } + }, + + { + "name": "RewardInfo", + "docs": [ + "Stores the state relevant for tracking liquidity mining rewards" + ], + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "mint", + "docs": ["Reward token mint."], + "type": "pubkey" + }, + { + "name": "vault", + "docs": ["Reward vault token account."], + "type": "pubkey" + }, + { + "name": "funder", + "docs": ["Authority account that allows to fund rewards"], + "type": "pubkey" + }, + { + "name": "reward_duration", + "docs": ["LM reward duration in seconds."], + "type": "u64" + }, + { + "name": "reward_duration_end", + "docs": ["LM reward duration end time."], + "type": "u64" + }, + { + "name": "reward_rate", + "docs": ["LM reward rate"], + "type": "u128" + }, + { + "name": "last_update_time", + "docs": ["The last time reward states were updated."], + "type": "u64" + }, + { + "name": "cumulative_seconds_with_empty_liquidity_reward", + "docs": [ + "Accumulated seconds where when farm distribute rewards, but the bin is empty. The reward will be accumulated for next reward time window." + ], + "type": "u64" + } + ] + } + }, + { + "name": "UserRewardInfo", + "serialization": "bytemuck", + "repr": { + "kind": "c" + }, + "type": { + "kind": "struct", + "fields": [ + { + "name": "reward_per_token_completes", + "type": { + "array": ["u128", 2] + } + }, + { + "name": "reward_pendings", + "type": { + "array": ["u64", 2] + } + } + ] + } + } + ], + "constants": [] +} diff --git a/addons/svm/core/src/commands/setup_surfnet/fixtures/position_v2_data b/addons/svm/core/src/commands/setup_surfnet/fixtures/position_v2_data new file mode 100644 index 000000000..1ecc70839 --- /dev/null +++ b/addons/svm/core/src/commands/setup_surfnet/fixtures/position_v2_data @@ -0,0 +1 @@ +75b0d4c7f5b485b6f4a0db7dac99f6a05cbff96ed801e07275b82d6c0e4cd667ed1f8bd8966cc1d8b05090485c4f68f0203365a02bd0d496b3e1d852f2b29c06baf4efe6b16fb2670000000000000000400889000000000000000000000000004008890000000000000000000000000040088900000000000000000000000000400889000000000000000000000000004008890000000000000000000000000040088900000000000000000000000000400889000000000000000000000000004008890000000000890fd88f4f93f3713e088900000000000000000000000000400889000000000043e50827f053086c3e0889000000000000000000000000004008890000000000f812952d4756ef653e08890000000000000000000000000040088900000000002ed96e3fed7fa65f3e08890000000000000000000000000040088900000000005310d407f6942b593e08890000000000000000000000000040088900000000004e178beb49357c523e0889000000000000000000000000004008890000000000d9b46a51bed9954b3e088900000000000000000000000000400889000000000016924b10e5d075443e0889000000000000000000000000004008890000000000afeb838b8a3b193d3e0889000000000000000000000000004008890000000000a04a7be2d8087d353e0889000000000000000000000000004008890000000000ccf11c4615f29d2d3e088900000000000000000000000000400889000000000057d30e00eb7578253e08890000000000000000000000000040088900000000002ea727f235d3081d3e0889000000000000000000000000004008890000000000275657453c034b143e08890000000000000000000000000040088900000000007ef9739844b33a0b3e08890000000000000000000000000040088900000000004cd1b530733dd3013e0889000000000000000000000000004008890000000000f91a3b63d5a00ff83d088900000000000000000000000000400889000000000011448a907e78eaed3d08890000000000000000000000000040088900000000007caf447b95f15de33d08890000000000000000000000000040088900000000009ddd115e2bc063d83d0889000000000000000000000000004008890000000000ebf5ffbdaf12f5cc3d08890000000000000000000000000040088900000000009c44a557cc830ac13d08890000000000000000000000000040088900000000009942b86a6b0a9cb43d0889000000000000000000000000004008890000000000ab10b3bd9fe7a0a73d08890000000000000000000000000040088900000000008e9eaa9018920f9a3d0889000000000000000000000000004008890000000000001b63d8bb9edd8b3d0889000000000000000000000000004008890000000000d90e3fdbeda5ff7c3d0889000000000000000000000000004008890000000000f27227d7f524696d3d0889000000000000000000000000004008890000000000afd4dfa6d25a0c5d3d0889000000000000000000000000004008890000000000f2d46d18af1fda4b3d0889000000000000000000000000004008890000000000d0960315fab5c1393d0889000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c199ffffc59efffff07ec76900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000379be8a2f093b0263d0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000320acc43242492123d088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089e7646e337b4ffd3c08890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e46aed87e00cfe63c08890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f8e7f451e07f4ce3c08890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ef6e590a9539eb53c0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000708b1ca58a8aa99a3c08890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5d3d466a81ec7d3c08890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ec42d72cd6c385f3c0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000efd35cc203e1573e3c0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce97da5aec9a0d1b3c0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bcf1006b970113f53b08890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fbbe4890b4d16cc3b0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb984cabf437b89f3b0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d542ad21fc18896f3b0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c36f995adc33053b3b08890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4c0ffa370090013b0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2ecee082c0a6ec23a0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa3885a255eabc7c3a088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013fd00b2e799682f3a0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0e65bb785101dd9390889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000512328368f9232783908890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d83ed8ecc3f920a39088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d463b914148f8d38088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076c24d19313fadfd37088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e7fd28b6bc4d563708890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003254288b87e72c91360889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6bb1dbdc44a95a5350889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5be33ae285b0d87340889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f35fa53aba2b0f233308890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d485fe70395dc5c310889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c9f34036023b52052f0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c76ebe76ea9b62c92b08890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005db445ddcc76d507270889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af19fb7bf43206591f0889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c20247650086473e3f088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037aebb20fb72f5393f088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090b3824244e970353f08890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dfd25cdc7b2a80000000000000000003ee4737de5b40c0000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b902730812e665010000000000000000762a52b815f61a00000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003304d977cd0af00100000000000000005840ed6dd55e25000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022367edf0afdef0100000000000000005840ed6dd55e250000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ecacf03676f0ef0100000000000000005840ed6dd55e2500000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004bfcebd8aae4ef010000000000000000a1ac31133a5f25000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015735e3016d8ef0100000000000000005840ed6dd55e2500000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ce46fb7eebd6c0100000000000000004af210bc817e1b00000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d445dca11dff70000000000000000002ca0f6b66aaf12000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039e1b8e48d5d2e0100000000000000002cee705896cc1600000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007dfdd45e5877e70200000000000000004618e039210e38000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022846a41d9979d030000000000000000e2e7adba61cb450000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b548b631ae16df0300000000000000007e5c17abd1bd4a00000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006964a04c151cc20400000000000000006768d44ef1de5b000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060a1fd4398d0b8060000000000000000b038859735cc810000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164b3a522ca7ce060000000000000000776666067976830000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce11df864f09ce0500000000000000000749e6daab1c700000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000efcd75eef53dd604000000000000000022c8c5d1b86c5d00000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cf901195b82de030000000000000000bf71898dddbe4a0000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb41350f76c6b3040000000000000000a7a5dc97eed75a000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067d2efd8521d5a04000000000000000056d1f7420b16540000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000207e3afb8fa9cf050000000000000000f07870e9f049700000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6e0a3d77a25cd05000000000000000010a0b89d041c7000000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6eb87bbfffcc05000000000000000010a0b89d041c700000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000abfef41b1bb596050000000000000000063cfdc577056c00000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003563299b4625eb0400000000000000003fc6e5bf88145f00000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007adc4f28ecef10050000000000000000e143c05f89f1610000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d91a946979a222050000000000000000bac4ec8d774a630000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000350420864ba1c3060000000000000000448721f1dfca820000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dc9c4da26b52b80600000000000000005b87ae61baf381000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043a8749c40a1d4040000000000000000890961b65d6c5d00000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c8d75d58b92d7040000000000000000f6fba56ea46c5d000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068879ac959eaf7030000000000000000e855ba2994c34c000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081ea97ad5380e70200000000000000002912dcf7c32f380000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000accbb7eeb1aee50200000000000000001b666f80130e3800000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f91c7f02a57fb040000000000000000f04b46e4d66560000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063bd72d0122ed80500000000000000001f080287b51971000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098b65392891302070000000000000000477d5cbce5a1870000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8bc8f701f26440600000000000000002969bd41924979000000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046209cb7e7b1bb070000000000000000355e4da58eb1950000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de5c9908fd8dc106000000000000000056e7c4a0edca820000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000756dcd0c7f49b9080000000000000000d328473b94e7a80000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ef4e02950cfca0080000000000000000d119eeac5a15a70000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be0dbebbef21550800000000000000003996a5958c5ca100000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002eda6efb7b68200700000000000000004f7b2436db058a00000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a5ba3fca1bcc90500000000000000007ca40454ee1b700000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b87e010863c89a060000000000000000c978511ec6f07f0000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0a4a3e6598237080000000000000000250e006d3c309f00000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cbb7f5032858b0800000000000000000734640dac8ea50000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8ecdb32dc781609000000000000000067f674778a17b00000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000222f5780ead2410a0000000000000000de37b8284cc6c600000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c653c45a5ad2d0b0000000000000000d6f6783781a5d80000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000812527ca80e3b90c00000000000000008e982d2a7cacf60000000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e333b69c02db470f0000000000000000ce26c8d7f235280100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b5c9a40fb8affd0e0000000000000000c2d0ec133f9f220100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c62dbfa4c13f6c0e0000000000000000ddeed69194a3170100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a47cabd04ec59e0f00000000000000006d55a5be8de22e01000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006210d924169da7110000000000000000fccf692cd55e560100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6d7682fe92acb0f0000000000000000c967d9f8994f3201000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bae51a0b5f3e60f000000000000000064e82d2aa3a3330100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ef39060d3b9668110000000000000000805f3dd8a8da510100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c73f895301114000000000000000012103a35856b8501000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d94a41fff8c35150000000000000000b3f94b570580990100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d71c6861d0079e150000000000000000d60b19b2415fa30100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1995cf130326a1600000000000000006943c663561cb301000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b06fbc7583e1b170000000000000000965dae6d3592c00100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000255c77c3e720d7180000000000000000363f18adcb28e20100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000493a52c99cc2711900000000000000001ff552c43f08ee010000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088df629066d8271b000000000000000004a1cc44fb8f0f02000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a07e202e2cd9c19000000000000000015fc86ad36e5ee0100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb1dd8be61751f1a0000000000000000b06d7427528ffb0100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e37ce331735678190000000000000000377c91c1e5e0ee01000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f76b3773c1cb9190000000000000000fa6fd5fc21c9f30100000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000924564a51472921b000000000000000006c1c038aabd1702000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad1c23b7babed1f0000000000000000c6785ba33db86c02000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009aee1180dd14251f0000000000000000973474eadbaf5d0200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff60d3146a843a1e0000000000000000502d1a6094de4402000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c8a31731ec82d240000000000000000be78b53cc031b50200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fbac3108aa0e422b0000000000000000e52ae25c5b673d03000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007cc9e34fe66344270000000000000000523dd3a7b2c4f00200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d92d9ffecfdfb2240000000000000000fa3d81a91499bf0200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a06565bcad68272800000000000000005ca296732a21040300000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b9ebdbf5a1ca632400000000000000002412a3626e76ba02000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c1e90e903016a220000000000000000d94a7fbc37d48f02000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003da12e344fe85a24000000000000000026a97a7568feb8020000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087dc3252562d3227000000000000000012415fa8986bf402000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ec8f741fe5f58260000000000000000442935402251e80200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e43164a033b73c230000000000000000d6bb22f913e5a902000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a2a1cb2be95fc1d00000000000000000bc378ad80be470200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e86eced803bb331f00000000000000009e4aa76fa2735c0200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0d804485b3ee01e0000000000000000acea06a6c0ed5802000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007352664e43040b1e0000000000000000e72e0e812a25490200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000201fb3321249631d00000000000000000a14303e535e3c0200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1708f6f21cfad1c000000000000000008333744c160230200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e747beadc273c61c0000000000000000a7e642b451e6240200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ccaa994c1af9c11f0000000000000000d47e9142c6625f020000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d46c9a65750a2300000000000000007f837935814ea00200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a30e7fe34dcb442700000000000000000e7635dff804f4020000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072d99e7fbe158f270000000000000000d6c4e2f4c510fb0200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fe6c9a55b467472600000000000000001e29fea60e50e4020000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b0bda04d76e72300000000000000006af2c00b65b9b70200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000628c3a54285a5d25000000000000000000e6766f3d48d602000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008428664f2158ea250000000000000000200ceac8c297e00200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df92dc89fa552f260000000000000000ab70abb50c01e902000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007dd75dba1996aa2a0000000000000000be567873a72a4303000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000453e7e215c6122c00000000000000002adcea07b9a25a030000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022ddcac3cf497d2c00000000000000001e923b9783e757030000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e5a15ad495ce27000000000000000093ee4f4fe26003030000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066a1d8b9b9e00027000000000000000076a9521ce2d1ec02000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b604d4b49dd142600000000000000009b76ab345010dd0200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000db4b2c1614bf3d260000000000000000d396a6d51c80e30200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000867a27ed21e6612a0000000000000000216dae3f489638030000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045da0a6a9a1c872c000000000000000022453390dc8963030000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094737aa2609c652d0000000000000000700abb4c50776b03000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005cfa0d2b50b8932d0000000000000000be38a80a40316e0300000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104ab444b04f672e00000000000000000303df82c309760300000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7dfded2593f7f2800000000000000001babbf5fcfc2fa020000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015f840cb108d3729000000000000000051f662fff1720c030000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056dac0b3ead0ac24000000000000000014a28971666bb202000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f90591b550662290000000000000000400ee41ff024fb020000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016efb20e412c3b2c00000000000000005062845655454403000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fd20f572064482a000000000000000042c2c99ad2b1240300000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c9ab8e02ee2da32700000000000000001effae7506b7ff0200000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6f2a586a174142a0000000000000000de75f8f5e57837030000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045b5943bb1244d2c0000000000000000f8c64db0fa0d670300000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dc064ce24f3b692d000000000000000029ba186f2ace7d03000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fba19ec76e6bb2f00000000000000000d2fadc5080ab40300000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c503daa02fdda531000000000000000029a705c7a3fdde030000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a52d7f302f71340000000000000000829ff94cab191404000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ce8e06d2ed4c5370000000000000000ce2166b398934a040000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a68e0239ce333100000000000000009c0b973fd30db70300000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6eaabdd7445502e0000000000000000877212f766068603000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003288fe35f3a3602e0000000000000000afae87c67789830300000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000582184fa1fc815300000000000000000a78b4c75c164960300000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8279a173b8dff31000000000000000079fc4c4811adbe03000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d4f9f715cb5ef3700000000000000002269d78a70181f04000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f34d72d717fd739000000000000000070fca23990204a04000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007dac63246719c93b000000000000000067588bd70b3d600400000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0f3963e927bff3b00000000000000006bbd9ab2f2e96604000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a3033f4bb79783b0000000000000000bfcb7c295d905b040000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a43caccc0c733d000000000000000011434bea5bb2830400000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b9d0481ad67e3e3d0000000000000000c16706cb99c78e0400000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aaedf438937c963f0000000000000000d555e214447fc504000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009091684226531b4300000000000000002e930dbcc465130500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dfec651cdc4c5a47000000000000000006f209f3fa5d670500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000226785aac8c9ef4500000000000000001b036564391047050000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063b4701a52fdca480000000000000000d58fb5c2693d8a0500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000db8125ac099e965300000000000000001391aff0b63b5306000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fe202386827d454000000000000000032efccfb07b354060000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060fdd08b0f4f384d0000000000000000db7bbf9830cbda0500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f6d3b4eaec47000000000000000017a9a5faf6ea6b05000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c45132a247fb64f0000000000000000593b84f300360406000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c421c072691be4c0000000000000000d6a5a28e97f6e70500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d67bc694a3e6bc4e00000000000000009724da28a2d7ee0500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac45da5704933b4c000000000000000009942468a4dcc30500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a8da77065c75144d0000000000000000e8bd5049a1a9dd0500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058dc53d2d90d04f000000000000000047ecfc7d8e1c0b06000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007499adafe3e56a560000000000000000ed8726af43d76a06000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008742443e29c0465a00000000000000004af5aeb40e06a70600000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000537fb349497a605f0000000000000000be39fd5e13180e07000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007afe7533d8ee79660000000000000000a380abbc337ca6070000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024351b134006ff6700000000000000005e6dffd49a16b8070000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026fcf9a6670f176900000000000000006c113b4e77dcd70700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cdabef83536759670000000000000000ecbc78b710fccc07000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006aa7c392bb36b865000000000000000096b1f8ca6977a4070000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015dc5f80960d8e69000000000000000028f1abd3f33deb07000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f8da51e3ff211680000000000000000827dabf4e214dc07000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b67355c8771c26400000000000000001835f57ed38ac907000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003dfd0310238c92690000000000000000e4205ebd2d2f0b0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ccb272874caa496b00000000000000001e418a16d8df1608000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a6569ff4f2c676f00000000000000002d4ebdb836c8680800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d262bbdb7618b06e00000000000000000cbf8d64d312400800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a739f3d6dc32f6770000000000000000b8f6d97d2577fe08000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a5cfd1cbee6c2750000000000000000e085bd54af5dcf0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a64d3dd12f5c0776000000000000000061e832bcafa9e108000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ec52a15bb43ac6e0000000000000000ac54267a14585a08000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fafd9eb81f5b26c0000000000000000be6c99b294063e080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d235740064af6b0000000000000000a85fad557266380800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326464f44b5c18730000000000000000bca59c0d9068f70800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2d9af7603260a7c00000000000000004118492e79e7ab0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3b9c409600a2b850000000000000000ea0379be04d44b0a0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073c481eb42da667e0000000000000000d4a2a3b6a8ead60900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb82dbf3c1aa547e000000000000000046fd4d18f819d309000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c1653b5225aca820000000000000000a75cbab844b9200a0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022084309a0660380000000000000000099aa6d41d805ea0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000935cabf69c54537e0000000000000000015c03828ef3d3090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c5cd0de4b238820000000000000000d5b56f26419c150a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000647ffb7be9b6308700000000000000005d3d634a93be910a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1e989d135b3327f00000000000000007f0429209d9e070a0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026acc3b2105ceb7500000000000000000dbf9e2ad6893c0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ddd6da024b1f327d00000000000000000ce8259492e1c00900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000961361568dce307c0000000000000000f7c2b7252c54ad0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d59e45785976d278000000000000000035f0ceab6e137d0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3762c616d8bde7500000000000000002c7c23d0adac280900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9870cc2e27f967200000000000000000d040c5d3a2ad7080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097516373f903cc7300000000000000000e1ecaaac3b6e008000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009ebdb12256cad97700000000000000003270883312523c0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4f128eb67f0237900000000000000003d634bf5048b52090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c97c3b0010fd770000000000000000c341be565fcb52090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041d17eb0cc9e337500000000000000002017d74b3ca52c090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096e4358e30cdd972000000000000000036d1b88fe4e0fe0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f38abdb190fa5f7000000000000000007fd78a948febb40800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a465076aa47f00720000000000000000638978243b1ba708000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005cfbdd593f09c5720000000000000000ac2379c75272bd0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a927da043d42637700000000000000008e1e2b749f0f1c0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d98b0ab40452337a0000000000000000179f65b787c9470900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd4dc5c413184776000000000000000097617e1ba850fe080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089975dcde2e5df6f00000000000000008ad1a45d79ec8c0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5110f318499676a000000000000000041d45be88700260800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000944233a3f1dbfe6800000000000000008f710773781f1008000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007055b12e35efb2680000000000000000416239de3096020800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c544ffa03f9a09600000000000000000ce5f3b8cdda9500700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a50c861e1f769e5c00000000000000002c59255a16140c07000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f24db88b0e467640000000000000000c82bee644e7d8b07000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007673e88269ec2b6d0000000000000000e332e7ccfda2410800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb077beaf4c65c6b0000000000000000298f4f7624332b080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048fdd942bea3e46d00000000000000004c10eca0e6b9610800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3424253db17426a0000000000000000fcb6d7e0f6f832080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057af7b2e1d041e6a00000000000000003b9657a009202f080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045a123c7cf6b4f660000000000000000c899e6cdc99ccd0700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092fdde93c9adf620000000000000000e67551a79378b10700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9951a85a06cca650000000000000000e3c9bc88cd25ee0700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000321da446bcc894610000000000000000fdd1b4e6b3ce9c0700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df07a43cad59aa6000000000000000006e4b0eaa7bea5b0700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000359d94dc500ae95f000000000000000067d20d9f0e194f07000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e4bb7f2a84349600000000000000000447bcc3d14364e07000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001104d505867e4b6500000000000000004a50d9c5c4ffc00700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f9d711e2f8789a6c000000000000000026adc7f2fe853b080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096755a7362a420710000000000000000bc7c572e17c8980800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c5847a00fd7c2f6e0000000000000000c7e7d53896716b0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c345514bd5a70000000000000000062a14aad55318a08000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fbce9214938d3700000000000000000be20f97ef8829408000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bb55f57ae07676b0000000000000000c888fe31c586410800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000778daf4bc963136d0000000000000000653798b74e3a600800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ddfb22aba87b7d730000000000000000a804e9d82f8cc208000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b5a16c5c6519d7800000000000000004297bb9b74be2f0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000817e993fe659507e000000000000000031b88473ed8cb109000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cf4b3c99a85ca7a0000000000000000d075fbd80263780900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7fdc59c734e217f00000000000000004e36d6cdb580ce0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ebbcf7b5985f957d0000000000000000c3491c69ab30b509000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005adbdd5058b3b87a000000000000000034c06e2dc78c940900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c972cd0e363bf67500000000000000001a5f2fbadb2e2b090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e8020d6a4f9a7d00000000000000001767fae159e1ac0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ec00e7832867fa780000000000000000f21f61ff34eb460900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f3dbb4559192bd6d000000000000000099824b90ece6650800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3f977140a3bf76f0000000000000000cd0b5652b5f9780800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407043e1e184a76c00000000000000001540ed2025873d080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000059c7df10bbbed16a000000000000000026179ab75274230800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce31550790e3d16f00000000000000006e5a4416f8ac6b0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c53f5c945fbe80730000000000000000f1e43eb2855b9c08000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009783ea9e415e2b6c0000000000000000efa7df942a5749080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081a711a9a527416e0000000000000000422170a6d9698708000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e372dac1c75be6c0000000000000000a9ba7bf3e155830800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e85e3f2bd6ceec6e0000000000000000049e48bb62b2bf08000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b130900a61fa76d0000000000000000e7d7195f4588ae080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032e52d4bc5d19f660000000000000000d75da439a6fe2908000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ecc51d2377d706600000000000000005490cc10ee6e1e0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de7319e9aaebf567000000000000000055cc518dfa1f46080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063f6967d069b966900000000000000002f7745cdf5605a08000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ad402df454098740000000000000000123cc95534952c0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd624a4ceeac395900000000000000001544272f56b3130700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b8767772a0c5d857000000000000000088bdda630ef2ec06000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e138607014466570000000000000000a4f73984044be90600000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000663c613004054d5a00000000000000003efe0367fb68340700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d58472db43a2255900000000000000007c3c948bd0de1d070000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074c7be2e7bcc2859000000000000000051b03b66a9c82b0700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000785e0d09ee36625a0000000000000000f2b10b76e0a23f070000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091138c042ba0da540000000000000000c25c4895a96fcd0600000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bcb099a1f800a8520000000000000000d138b0645f2b7f0600000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d26b63b9920cf14b0000000000000000bb6d3410aa1fe20500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000760cbbb793855d4400000000000000007606f80d381640050000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090a70359531b4842000000000000000025c6584f27310a05000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001efdb8ae5119aa3c00000000000000001dcd27e95cfeb70400000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d26b805d2f860b3c00000000000000007ab7606e42d2cc040000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090dbcbb9186ace390000000000000000f24eb2226cefbb0400000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3f383462515f4370000000000000000a81cd162e5f8a9040000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060bee9003fdc83370000000000000000ba883ff92051ad0400000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bbe764d544044136000000000000000062708ce3b70c8c0400000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b68e50f8f3493f3a0000000000000000fb6b883dcf86c20400000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000479ab4fa3c6de2400000000000000000652348ed32ca0d0500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000358b4708d2227144000000000000000090367f6e4a5b410500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000351e099ce09dde4500000000000000005d55c9b6afd35f0500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bfa826eec124284800000000000000004a58a5cf103b8905000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ae91aa674fa99430000000000000000c7a381c8b13e3c05000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f40064dea077f3f0000000000000000e87c33223265eb040000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e700ee7e00b34000000000000000003318d37e0a241d05000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d54d322d76774470000000000000000fd0e6751d4b7970500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dcc461680851b44600000000000000009ff8e3629c9b8e0500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000191668eeb8f0b049000000000000000043d5db241d7fb6050000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096a331b451ad0a4c0000000000000000dc9555591c91d30500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6a83413669f5c4c00000000000000001ca74aee2aa9e1050000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061cf1df8d50af3480000000000000000b7c3330fe642930500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac0d7430e10ec642000000000000000080cb2232f1f73f05000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006fd1d2be97d1f34200000000000000007af5748e7cb942050000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095f70aa14d5fdd430000000000000000f8c440317f192a05000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007d7c3ad31155b4490000000000000000cece1c43d79faa0500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808d914b7a8d7d4d00000000000000007e195d8089feff0500000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a106019ea35cc24f000000000000000015b2c81fc07b1c0600000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e52b6181c164464f00000000000000005602fc297238040600000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000726d70ec6a359b51000000000000000035d8a43c7e36380600000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000232658ea3b46845400000000000000008668debaacbd820600000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000873dd09b359c3e57000000000000000014d0e00c2300a806000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eafe2961bd1ff5c00000000000000000952b81168f51407000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b38d19801abde530000000000000000e842330937ad73060000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007adcae99e66555100000000000000002ac45f6f09855e06000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006e2929208762785500000000000000001365574eeb55cb060000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075db61df3f84755d00000000000000006818a13121fe7e0700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2f36ec63458585a00000000000000002d26812f20393f0700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e958c090e7b9ee590000000000000000db3cc031227438070000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048ba8e04e1ef385c000000000000000020bf3fd6a9cc680700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0d0c10b17091f5f00000000000000007a3534d3a89eb10700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000caa554a054b9535e0000000000000000637ec38b7e13800700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f112964a286c1755000000000000000034d728c98341bf060000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013332756bee18b5800000000000000005d51192145d7e806000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ab13084b3f34a580000000000000000122b21d6f893b40600000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a90e33aa5e698a5b00000000000000006b02dd3ca7a2e60600000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d74eb83c703c9a5a000000000000000099e86f1f80e6be06000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008892a3a346458d5f00000000000000007469390d53943107000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f8f1a8b89692d6200000000000000001b363b8eb18193070000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099176283bb5d6363000000000000000016de375e869ecd0700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0ab8f7ac93b95600000000000000000081dfb3d45b29107000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bc83972684a09640000000000000000247060cf3cafc10700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c5f7470c296868670000000000000000ee922e1f9c101408000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a110a118bccc36500000000000000005d6d2caf24e71e08000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fd64d8734c9376400000000000000000e658682a77cf00700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e8d224aff4a867620000000000000000c21ea2a31ac1d207000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003eb5069ab6a6fc65000000000000000052066409db34200800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000284e9a0dd5c2727100000000000000004b0977b4432bdf08000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a5c3235ac4b36670000000000000000331925a02c96e8070000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071dc1f2ce3a3066e0000000000000000bea27944f698480800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000361a8c9e969faf6b0000000000000000d4dadafca84cf807000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002218e67454ba486f0000000000000000d5854f7f0b161e080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032f3ea12a04a4569000000000000000028f0f8e93ac4de0700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403f3aa77961c8650000000000000000b03dfb8c7eb27c0700000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b98dc5031af9f2670000000000000000f61cd78d2724f407000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9efd77592f0a6800000000000000008dcaa5c1396be2070000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007987fd1cd85166f0000000000000000f0ac647c51c251080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049c6dc5b73465a7600000000000000004ab171d67699d70800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000629dde751466047f0000000000000000e2267a8b3036a50900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ecbeed1cc1e036850000000000000000b945b716c906220a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d5f01a8cb9315840000000000000000bc0fc0df72662e0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e66d520c463c67860000000000000000d7117569ed9f5c0a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c6ca447d07d168900000000000000006f09695b3aa78f0a0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016785d5e7ffa7f81000000000000000018b660845292db09000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006bbc93a5ce40e1820000000000000000b7180e14aa3b000a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9a8cd1415f152800000000000000000492293b6fd15bc09000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007cd8f6c781a20f85000000000000000003f3c700d753200a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fecfce1bde8b085000000000000000010098cac1086300a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008da0cf1fe68bf085000000000000000061bbbe1a20624a0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2c75a87d1a4048700000000000000007405d0be80db5d0a0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013167b38b6dc5988000000000000000094fefda3bf668d0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8120e2ce1deef86000000000000000027a7fd9ab0af880a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101ed35a086e958d00000000000000003434a962b145fa0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cbfee2bf4bfec89100000000000000006461d83cba3b4c0b0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006392512324d76920000000000000000dfee04849c1d560b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2366068eb4ac3900000000000000000b08157e6f4be3e0b000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c70ec955c99df9500000000000000001a3ca273cf429a0b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000239c9187ea9319a50000000000000000a4592c1b5ae5a90c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c31b7fccec79d3a200000000000000008d2fc149d4568f0c0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034dd2b60c6683e9b0000000000000000c6745d1f37a50c0c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de501f5baa1aa8950000000000000000641e9b1a3f77b50b0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090ffb0731a5b159e000000000000000093eb3d5cfeb5480c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300c92c181a616a2000000000000000087fb2e4b9025c00c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae90e4c8fbeb32a800000000000000004a4d8b95ed92300d000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d1ad806016362a3000000000000000051cdff4c3eb3a90c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0b112f2609aed9a0000000000000000078a8d000e9bd90b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000489572414c5c68920000000000000000245db3011d97430b0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032d786bc04638d940000000000000000ad76b1209e7c960b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f35ea9327f36930000000000000000207aa129f4a4660b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2cfc63f2110e9970000000000000000d4c7599512c9c00b0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045db7debed1e2b9300000000000000004b4595122039750b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c08727c30aabf48e000000000000000018fddabdd8e3590b000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a03a7693d98249000000000000000007a5ae26490a13a0b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000219445318b968e8f0000000000000000574b97234550500b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e466f0398454e19500000000000000008318939e1563be0b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087c8daf083de5a10000000000000000837a78484ecf920c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ccbe0b76c90e50a400000000000000005c2a89ef62399d0c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16bf57c6615d9a80000000000000000261281271db2db0c0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068740b9cd6461ea60000000000000000b7ae8436f1669c0c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000625df250b73b1aa300000000000000009cb0ebe808599c0c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3905f58f047e5a60000000000000000c8c8f1b5cc1ed70c000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006bc797ed51245ea900000000000000000c14364f6998030d00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fe31629aa62270ac0000000000000000f7a08710b0cb390d00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000668760367724f8b20000000000000000e7b31ef181d5ab0d000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003674b867f2ba6fb80000000000000000fc28b04774942c0e00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d742a69b6445adaf000000000000000014c882acc621a40d00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1485f74742371b1000000000000000046e0ca5c70dab80d00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5d22ecadfd0d1af00000000000000001e5cb83641889f0d00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d63154b33f97ddab000000000000000075b33c84174c520d00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1f8a92e904cb0b000000000000000005437be1d4580de0d000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c05cfb3b0b233af00000000000000008fff37a1ddaede0d0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026b7ea7ecde7eaaa0000000000000000ecfff4a5d0b3550d00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b64e38ea1e2caab400000000000000005f6ed3804a1f020e00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000873355d1526540b3000000000000000059046ccd951dc70d000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008cd714280a34fcab0000000000000000772ea63ca0cc5b0d000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d53d7cc540b62a60000000000000000b498ba37145dd10c000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007d65ec62a7abf8a90000000000000000267a7532585e4f0d000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7cbd442bb8e79f0000000000000000c5236fd57d888f0c0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075d5bb1e8197bc980000000000000000d7b4e6ed9ac90a0c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3890b14ee249f990000000000000000d4dc002292c3450c0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058240bd19ff5ca9800000000000000007168b48d927a2a0c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6e0fac557ecb591000000000000000050550a47b0f7b50b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5d7b760f115db8c0000000000000000d9ba6a017774480b0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083a5a3afbb075486000000000000000092f39bd8ac5ba40a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0125c487748d186000000000000000058cef841fdc3690a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0638d1d2615aa8500000000000000005b7c9b93f9e5670a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b950fa586e99986000000000000000043569a45bb12840a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a5d4720c3b98d7e0000000000000000fc3c09f21b08bc09000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003bbb89a1eeb8ec80000000000000000047314cfd8682d00900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cbef499a3ea83c8300000000000000005e8360f96790f90900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b07927cb7386b4850000000000000000f9860ace0a963b0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb97728f751fc3820000000000000000819d1e24a3fe2f0a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b88dc79d34d6d81000000000000000016bb001d2f7af20900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1e0142100f7d681000000000000000006ef02bdc7e1ee0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adb0facf59198081000000000000000029679f4ee2d7e80900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cceeed8e73600d8000000000000000005ff98c8950639009000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b5fe880be8f078100000000000000002576c71098969b0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1793f8fa193977d0000000000000000a11da99a354450090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086de6b515947fa7a00000000000000001565f9904c185a090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071d8cbb6b69bce7600000000000000002a2ebbe1d18022090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087359ee52798e8710000000000000000e9bb385deececb0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000db3b4524dd18e76d00000000000000007cd89996c85087080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e1ed57c7208f6b0000000000000000ac1a7e4a2ab95b0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d9d9d2752ceb6d000000000000000088fba67b0da3950800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b9fc4be81b427000000000000000000b00ed38341bc10800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000155a33fa52458a6e0000000000000000e5cd604151b7b70800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5f3dd6d2500d06a0000000000000000aee5e672854a89080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a21baaf652026600000000000000002e4eecbeed241e080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089c2719f43b2236b00000000000000009f04c3d935cf4208000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000920aae6b2249d7900000000000000005fa8d842e0847809000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a9b7a44baaf8b7c00000000000000002b1f5efb3e24cd0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000347c655061a9858200000000000000006e0b91965ff7420a0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006fd13a7647c428200000000000000000a158b941d34470a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c9ff082c2186cc7f000000000000000004318fb9da46150a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e867f4c0122b483000000000000000025216ed16be4390a0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078f06ffa91158f810000000000000000ac4464ed4d0a060a0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058d0bfc7913f067f00000000000000007246e8dccaf6dd0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e65158210c702d7c0000000000000000dd459c7270996f09000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d1ba288190f7e7a000000000000000001c9b8aa59d86e09000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d2dc9153aaddd7700000000000000000a35283e5eea4a09000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b58a0ae2a81fa7400000000000000008eedec799ad82d090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088e2febf7a8b76760000000000000000c8c11048a4b6390900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000690a750b8450987900000000000000002778292ad4a68109000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c2d0affd875b97d0000000000000000beb0ff2d8d41bb090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026d52ffa135ab57e0000000000000000b46a75de6869c3090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047a9bd2fd89aed800000000000000000bd1cf8c5726cfa0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a444cc7f942a498b000000000000000036c6e7cc9445bd0a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1fb19b0f575e90000000000000000088ab3ecdc5a10f0b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff9c915c87f3f08d0000000000000000b30d49220d0bec0a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007bcec88c4869ef8e0000000000000000e59bc8f296220f0b0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032906dea095767860000000000000000d5687c2d5e3f850a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942a367a8bc0ca8200000000000000009896b3895fc24f0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6d7458850318f8600000000000000003f2aed5dfd5b990a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9913eaf08246e870000000000000000538a42064cdcbd0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b5bb7b49080da38c00000000000000003d50c4eb2a43240b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000614f41d9f02315900000000000000000c42659105b7f720b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1432691337d45880000000000000000acfa39174fe2cf0a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c34e1ca604938880000000000000000e6793b272512c20a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cd7c8ec3b67a7f8600000000000000009da375e86080740a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008374885881485d8700000000000000007c6992e1a79f9d0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e91bc99c803f10850000000000000000e32a6ba84a64790a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000559d21a3b439cf890000000000000000cfa76da70197e30a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dfaa6f430dbc1d8e0000000000000000ade7cf577eff1c0b000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000536916fed4b76930000000000000000f4ef8dd3f3dc720b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000675a85fb5ddce48b0000000000000000a197909e6ffef00a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0b30de1e6fdbd8a0000000000000000573c71070d01c50a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7dbc80ab7d02c8d000000000000000024e7944f7d490f0b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf6581442e765c9300000000000000006807745c0afc880b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416facd9f9138e8d00000000000000009d00ca7903ce080b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c03e37132592419100000000000000008c0c314ab7d3510b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea19c79d20d9b598000000000000000095aade80d939050c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b5367e2ed3908099000000000000000039d3699d72bf050c0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a8c645d65a30970000000000000000341e9c52470ecc0b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afcc9ed6d512339900000000000000009be3e292f411e90b0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042269afc22c31b91000000000000000060c16d861d744d0b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999ad8bde88c5a9400000000000000007ce49692831d960b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613ad9b4bcada499000000000000000054ba77d245bde90b000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f12fdabe29072950000000000000000046865eb52f9960b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f9400467f90dff900000000000000000498fa0b59ad44a0b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1ee7dc771b46592000000000000000035b62c67fd229a0b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4f9d235dea40e8e000000000000000078c11d3ddb1d6b0b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000918f5377cd14fc8a0000000000000000684ece1638da3d0b000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f0459267c87bd810000000000000000f5715faaf0cd7a0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bcbebb37151d56850000000000000000a27a1a3c120bc30a0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069796ba1791ebe8a0000000000000000d80f15f712052e0b0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061df352f71b455850000000000000000a3c9b146dc92870a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dfc6091d09812a8300000000000000004cdb75fcaf6d410a0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085a7420a608d817e0000000000000000a2f789f4db37ed0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7e0643699276b8000000000000000005b1b86c4d931460a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7e5d1ea79e48e7e00000000000000002ce1855e437c4d0a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f7b5e0b350e50770000000000000000862fc3d5115fd5090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063d0011fe4c006760000000000000000d8c7197bb4eec00900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000edb44aa2f030f6760000000000000000cc309edfb973da0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d01a2e027d6a927e0000000000000000c281fec3c35e580a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b593121a01f4ef7600000000000000000a613ae127b4c00900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e52df903cfbe4073000000000000000098b3103fcc967f0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aca5534187a70f6c0000000000000000dd2256268a990109000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001eb4f0bf8014ec700000000000000000afcc55566c3c1109000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b10d2a3dc029f6d000000000000000072b70e2ea4039a08000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ee85213f403177500000000000000004ca39c05d0d5f80800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000225e4b42fe7eeb6c00000000000000007fed88abd24b430800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b5600c7be80f8e6e0000000000000000714222ee682a730800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aec2b9af307e2c720000000000000000e4ca7c5f17e7e30800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af47a39026f2187a0000000000000000c98fba58ce4ab10900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0f89c0a2422cf7c0000000000000000a2127a3d46f4d40900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000831f2a85c4687f7e0000000000000000d8dcf8277052ff0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143a0a107028d6830000000000000000e82c47e5eb40700a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000738f0b3505ee6f8000000000000000000d230c7d6028110a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f71670cecb9e1880000000000000000e81ba809712db30a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e649694f6bd5b8800000000000000004d1375d7bb3fc10a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e90ea3947b4d889000000000000000036a2e946f4b6db0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be796d1d345e0187000000000000000036d08c50457fce0a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c540d9e9a609b8300000000000000008d780b7dcb55860a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e8a609a3958c878600000000000000002b3e55f86d16c80a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0f1acc4f0c475850000000000000000fd460a3466dda70a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fbef97456ddbf8000000000000000006421984ba3814b0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac07f740cee7fa7d00000000000000001c8e93c79c36240a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e279a5413e2fe48400000000000000007c39d0da6ccdce0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c63f205c9d3bda8800000000000000007f93df579d591e0b00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c74079b82150778000000000000000007717794cbb33710a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea0da0365b49a7800000000000000000cc6fa555caeb7a0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000219798800eb41a8200000000000000009e6d1a935cec900a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a3847ad03b4538000000000000000006c0fdcf485006d0a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f0b3bd900211b7d00000000000000004453a072f107290a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005bc23441efaa117d0000000000000000192934c8b942490a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d43ebb4569da147e0000000000000000599b568b7c51200a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab0ff4c8bb51fd8500000000000000007917376d4ec0bd0a0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058f96df58bc7d28900000000000000000dd98d9d8c6b0b0b000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f4bc4dc8249898a000000000000000037df212bc2e2f80a0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091da7dc3ef72e08d00000000000000004aebb7324cd4400b000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2d25f695c2ae880000000000000000782f766bc5e6e60a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa363ec5252d48820000000000000000fd872b698d3d6b0a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b65d0f8977ffad7d000000000000000047c828c8aa9c980d000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e507179ed1f3d83000000000000000099b316504a50bb0d00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fd4619594855048300000000000000009e14a657d188ac0d0000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069051d1ae77111850000000000000000dc7efca380ace10d000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c86be9768ddfa88000000000000000011f85c01242e270e00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0b4c9ce3949fb850000000000000000385479f7657df20d00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ccfbc080af256c800000000000000000e9dfe9a3bd5ef509000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f29c3188b70707a0000000000000000496c537284cf920900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a45df46f9866b87d00000000000000005a313cfed043ef090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081fa718d4a8d3b7b00000000000000001db4e0627e2ab409000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d33b0105e86a572000000000000000051dab5c305f10c0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b8869f80c9515d750000000000000000f6c01b535a554909000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004447a9a991977f6e000000000000000040cca6d2a3a1c008000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006e72ae387a571b6e000000000000000033127338e39cd00800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adcb631708a2387200000000000000003b7612d65b45ad0c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000457729f5b17462710000000000000000030adcb1027e9e0c00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd81d30a01d4dc6800000000000000008820a3ce6e3c830800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134f3f72679fe86c0000000000000000bb40dc54e74bc60800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d29f240404d7a86f0000000000000000cfd1cb330a18f50800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dce159033bd007690000000000000000e6ecbaeee3895f08000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e8efe9b22768c6c00000000000000006d032a2659669f080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088c9e6dfb3ff08750000000000000000fbeaa2d271436309000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c2ab0a8b7780c750000000000000000e939b4736248560900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fe452552fa07586f00000000000000003c3c843ece4ae60800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ecc1019ce77bf06d0000000000000000ad9d5f3e0888ac0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b363ac77a6ef276f0000000000000000d6e18321ee99c40800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c247d8aeae48a16c00000000000000004b90a2d14c94b50800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6623415862118710000000000000000d148d03c2f750509000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001554570b6b74be760000000000000000d251bb306067820900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae191c3e100f7874000000000000000048238a202bd55d09000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001725995ed3a0bb750000000000000000600d6f3ff01c6109000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002242ab141e5c3b7a00000000000000004132a50d7e5ca009000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f29ac89e28de07a000000000000000041c27b7f8ec8c6090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069da8fa62f192e7b0000000000000000422dea5ba909d0090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073569401a8d0857900000000000000002b151521150aa70900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fdf827a1da4c51760000000000000000892e4c3846164a0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416074741047c96c000000000000000068155b5e35e7a80800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d14f1ba8ccd981690000000000000000c3ac7d8d9570550800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999f524c0bd22c6e000000000000000052473bd20b8caa0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7a27f0318026d730000000000000000fc20c5f93f32fb080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063dff06c3f37d7760000000000000000bf9f429da2782609000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f2759e399c0cc77000000000000000098cbc02b3168230900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5c3740a3248d27e0000000000000000e22182fe5fa9b40900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bdf50f41ef39bf780000000000000000055c24fb1359480900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000963ab562a92e4d770000000000000000ef609fb882bb200900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ef5fdad12381417500000000000000004de608563ed6190900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f549944ac9de710000000000000000056a5de19748fc0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e22a9d97c3bf6d7b000000000000000063d5b8eb748ec209000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009dca78bec0861f790000000000000000e9097692f261700900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc0b5ff7225f448000000000000000003e3ea118767ddf0900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac1abb59494ef18300000000000000003a9a0046b96a300a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005967d0e939d7d0790000000000000000792ca4317236860900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b9ed44c3e5ff907800000000000000001a50e6d954687a09000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cb0d6b9b2aa277f00000000000000003fe6ebc90d22070a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e8a018c4d7c6eb850000000000000000f90e46755021880a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e1d4e4c32201f87000000000000000021d163ab537aad0a000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009985064638c5c48200000000000000004ff1ba944e41470a00000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000975a4d65aea7bf7c0000000000000000a793ac8db3cda3090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000059f98140659a7f7500000000000000003e8a4ccc47823b09000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008473529066a5ec760000000000000000abfb436302fc5d09000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009804ec80ad147573000000000000000048f72a00d25b1b090000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014773658ee97ed74000000000000000046188ce73618330900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d39031a2ed3805710000000000000000d84cff76b3cbdc0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b9d855e9faa98470000000000000000013ef6ec16322cd080000000000000000000000000000000000000000000000000000000000000000400889000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000059df08586b1da3720000000000000000a0d44fae4317e408000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c4386fc58ea49750000000000000000447928595d8e160900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000698c244c378c91700000000000000000c31ca14cbe95a00800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000197f1930c91a5c7200000000000000003559444f1e48db0800000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a7b4a1b27f545775000000000000000027601722f404130900000000000000000000000000000000000000000000000000000000000000004008890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f71781af647314720000000000000000f57d434b6bf8f908000000000000000000000000000000000000000000000000000000000000000040088900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ea816892a6762720000000000000000788bcd56266c0209000000000000000000000000000000000000000000000000ef366711e3c562b43eff880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f77ca76ec05b567a0000000000000000f9305b915841a4090000000000000000000000000000000000000000000000009e2092938df424f02000890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc5865f2df36b17b0000000000000000710212c5ba84c209000000000000000000000000000000000000000000000000126f7d93e68d78caeffb8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1da59714710a790000000000000000e3e7671563e99809000000000000000000000000000000000000000000000000562e22d6c180cee77c02890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000554eca233857676e00000000000000002e228c0b07850109000000000000000000000000000000000000000000000000fa240a207e018c23bdfb8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d8f24704e9aa67500000000000000001f71ef390ea87209000000000000000000000000000000000000000000000000909989be48395218b0f98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ce34b8e51967b7400000000000000003d48947e36f355090000000000000000000000000000000000000000000000003d0da2068f24a1eed5008900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e4520a5f38fe06d0000000000000000b6be8cb727dadf08000000000000000000000000000000000000000000000000c61b497ab27de6e6f8f688000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068e7086f250b3b7100000000000000001010ba1a4d770c090000000000000000000000000000000000000000000000006e848bc6dac6c7b59bfd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000597c1068a4c9f372000000000000000024fcb5d17fc824090000000000000000000000000000000000000000000000006a3ccb26cbada825a0f98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dd4207f8ea592760000000000000000619c3e2a1b685b09000000000000000000000000000000000000000000000000d3241adcd1075d7519f7880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dad57808b47b33780000000000000000522965d9473c640900000000000000000000000000000000000000000000000054612dbc3d743b8e36fc88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029c1f053e3e8587100000000000000007839fefce486f108000000000000000000000000000000000000000000000000de73245c8f853d904efc880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d095eb1c4f046a760000000000000000df8538551f7449090000000000000000000000000000000000000000000000009850d319c560a47632f38800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008566f0cc591590780000000000000000a4bbe432e1752309000000000000000000000000000000000000000000000000bf89dacbcab7ded583fc880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dec976fa60141b760000000000000000b82faab9ec310f09000000000000000000000000000000000000000000000000c3b39c57e53c27fc1ffe880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a6d8b30c7f14e87800000000000000003d666338a11f4d0900000000000000000000000000000000000000000000000038b49c9a600c092b8df98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b6fe66c25873d760000000000000000bee84ef72e5734090000000000000000000000000000000000000000000000001782dff97ca98637c4fd8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003eae6f6fe6f5f4720000000000000000e2591447afd900090000000000000000000000000000000000000000000000002c34868b5139a82ef7fd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000398194e1352be4730000000000000000d1d203490666f3080000000000000000000000000000000000000000000000003c1b4477593c0ffe3cfe880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf1d2e1439d68272000000000000000086ce911aa858dc08000000000000000000000000000000000000000000000000a0c92bdbe6491ccb10f28800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004231c3b4a037986e00000000000000002ba4f9b692f25e08000000000000000000000000000000000000000000000000a853eea2390d635ea3f48800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006294e2f05cf1127400000000000000005daaf1518911be08000000000000000000000000000000000000000000000000c986ab104c2b426e63f2880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000246e91de995854770000000000000000fe9f41c3abbff80800000000000000000000000000000000000000000000000083aae35f8ff1bcf95ffd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b60872189cf28d7400000000000000002e43afc8769de7080000000000000000000000000000000000000000000000000502e4dc6b695dabe9e9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f389f5464929d4760000000000000000f6f4d2e2a223240900000000000000000000000000000000000000000000000080bc497fd8c8802caaf7880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000364a762f9cdd79720000000000000000cd314a9c621711090000000000000000000000000000000000000000000000007c6239f6881f426e54fd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000226567987136d67100000000000000003907eaa4228fe908000000000000000000000000000000000000000000000000487e3d92836a519079fb8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003bd1ac59748b1e720000000000000000af1dbdfe71b840090000000000000000000000000000000000000000000000001d3f66bed5c38f4fa0ff880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000411c71e572d39977000000000000000034b4ebef9be3e209000000000000000000000000000000000000000000000000f2509d35c9d6b608b200890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a63fc6cebb3d438700000000000000009e3997dcdd900e0b000000000000000000000000000000000000000000000000094bb460808656726401890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cd7a962840dd29890000000000000000867d23d14cb0280b000000000000000000000000000000000000000000000000047b9f7b407105f14302890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8ee2a9a5d18f48c0000000000000000157d2dd1430c840b000000000000000000000000000000000000000000000000be5d4db5168940d7a3f68800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003be2cb755366a08d000000000000000040773a92833e830b000000000000000000000000000000000000000000000000287fbb0d78574f2857f9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4f892b6fffadb8b00000000000000000f8ba2b4f7f67b0b0000000000000000000000000000000000000000000000000ca527efc5d87aa059f2880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da3e3a4d0b35d8920000000000000000a88363d719a1f50b0000000000000000000000000000000000000000000000009ccb0ddda1533a23dbf1880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cd08a8c22c06fa8e000000000000000031f844a0689da20b0000000000000000000000000000000000000000000000001c59090e92e99236d2eb880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb1c32e77382a885000000000000000026ca63d091dfc40a000000000000000000000000000000000000000000000000605ea017c3966fe541f788000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000059434faa23dd718b0000000000000000d306a2e508004e0b000000000000000000000000000000000000000000000000133387bd514623b1e1f588000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020505b4594a3188d000000000000000080bc1431ddca7b0b0000000000000000000000000000000000000000000000008fb171ebe7cf4b8790e68800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ecc6ad3dab1b5860000000000000000b2a25cf4c8f9fe0a0000000000000000000000000000000000000000000000003badad60aea099cc4eed88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072a063c4d492a48a000000000000000089f72a9acf48340b000000000000000000000000000000000000000000000000cf543be40ab9b9616ff08800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e75577bb77b1c880000000000000000e5b8eb03a92ce40a000000000000000000000000000000000000000000000000ac450e4ff8f71f9eacf4880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b156c7a45c5d798b000000000000000005cc5a327cbd220b000000000000000000000000000000000000000000000000815b1df6020c6edd9cf5880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eda861899a8cbc8800000000000000004c288132e89ff30a00000000000000000000000000000000000000000000000005a65f8884f7305283fd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e34a6cc71c4af5830000000000000000414b86b59a5bc30a000000000000000000000000000000000000000000000000a3623f04f8781edb9ef9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f51d287dbf9f307c00000000000000008770a23287284e0a0000000000000000000000000000000000000000000000005e0de44609b39eb95ff9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9faf9dd39d5d67f00000000000000000e05bd3a3518b10a000000000000000000000000000000000000000000000000d0f4c03b8021f46f57f8880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9976311c866c87d000000000000000041956013f7c5840a000000000000000000000000000000000000000000000000619b26ba44806fdf85fc8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c79aa5ed8020a7f000000000000000032cd5b677f358c0a00000000000000000000000000000000000000000000000096ac594e2a941bb7b0fa8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bd14bf1a071f57f000000000000000034cef843f4fb5c0a000000000000000000000000000000000000000000000000f895678bd4669ce606f98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f2eaaea3764d885000000000000000035b3aa93cd7be50a0000000000000000000000000000000000000000000000007258d27254d4001dd4fb880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e5f17c519dbcbf8e00000000000000009ba721b740e4600b0000000000000000000000000000000000000000000000003b339216d43e3c1f96fd8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d9cb028f1c4f98e000000000000000081eb6e7bb68d9e0b0000000000000000000000000000000000000000000000007401cc06ec80b26e3cfb88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028e7c63819be7e930000000000000000b3f928e118aff70b00000000000000000000000000000000000000000000000098b61921031b729634fa880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a30aff62768321950000000000000000d3368d37c591420c00000000000000000000000000000000000000000000000022ccb7bd62b70c90f9fb880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aff97fcada3dd19300000000000000006934110610d2240c0000000000000000000000000000000000000000000000009456712331075caec2fc8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006889608fb8b4e9900000000000000000178f0d14ad691a0c000000000000000000000000000000000000000000000000cf49b1ff1b8f5e394af9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d45a678ab4b3709700000000000000007709c72e4a156e0c000000000000000000000000000000000000000000000000c3b83e2e40ee2776a1fb8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004540f061559f829b0000000000000000b5f55ba3c5a8b10c0000000000000000000000000000000000000000000000006c1c8345739aafde96f0880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad4fbf0dd782399f0000000000000000979450ae9f63d80c000000000000000000000000000000000000000000000000843105d64dd8735beefa88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067db96c55565359e0000000000000000e8fe2ddcb6eed20c0000000000000000000000000000000000000000000000006079183b7fe7647d96fc8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d61ed9e49d3c09d0000000000000000e37e48d69f28b40c0000000000000000000000000000000000000000000000008e43b25b980895dd59f68800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002cc1bc6a1901569800000000000000001a85854c0943150c000000000000000000000000000000000000000000000000b89dcc9055b3cec36bef88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013f69f6a1537669300000000000000009cc8beb7ddf2a80b000000000000000000000000000000000000000000000000a0f99c504c5e3c5e76fc880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a9a17f224ee8dd8c0000000000000000fd8c62d07915520b0000000000000000000000000000000000000000000000003515021cc46d78e78efc880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968b4a0c0419e28a0000000000000000442fc196dbea410b00000000000000000000000000000000000000000000000088b24e81cd4e35d891fc88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019bfa7f298baed8b000000000000000051ccd62342dc300b000000000000000000000000000000000000000000000000a1494acc2feda7881efd8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005ab09f2d15617985000000000000000094bb2b839a508c0a000000000000000000000000000000000000000000000000705354e4d663e03eaafa880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0acc3c815adbe810000000000000000c4da7c365cfd6e0a0000000000000000000000000000000000000000000000003090ff32019f8c8697fd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffaa3ee2f5c16e8a000000000000000034d7a6535ef0110b000000000000000000000000000000000000000000000000cd5f3c86458ee7e250f88800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003656fbb6b8ed9e910000000000000000fa7d007fec928f0b00000000000000000000000000000000000000000000000006850d0dae64998a8dfb8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003bd39d72ce825c990000000000000000fa1049c7e8b9330c000000000000000000000000000000000000000000000000573bda760ad7dbf8e9fa880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f7ffd5dc8af593950000000000000000de92048a83a2f40b000000000000000000000000000000000000000000000000f326ef9d3c1036f1b4fc880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be4810747b9b9d9200000000000000003c89056abb67d50b0000000000000000000000000000000000000000000000007e27733be343e9c489fc8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a3b341f3cbc8b9a0000000000000000601f495851c6680c00000000000000000000000000000000000000000000000095a39d9295694243dffa8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a8bd43f0b5f6ca2000000000000000068f9bc97c70aed0c0000000000000000000000000000000000000000000000002b8b436cb532d6f1c7f688000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098f6e541ad7bf59b000000000000000018ff98ed8602720c000000000000000000000000000000000000000000000000931d07e303ff8c8a65fd8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006271ea115cb1719e0000000000000000e080b904ba7aa90c000000000000000000000000000000000000000000000000eac01d2058ecf275a7ee8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d80712bf8a7179d00000000000000009d7b565ccda5830c000000000000000000000000000000000000000000000000e71bfafbb02945c7a0fa8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007869927af8ccee9d0000000000000000cafabb30dfedb40c000000000000000000000000000000000000000000000000e54cbb98efd605a763f98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b0b06a8175fa99f000000000000000081926d7336d8b70c0000000000000000000000000000000000000000000000009894dcfdf075737466f7880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cb37eb04e4104c9b0000000000000000e6e16ad393ad780c000000000000000000000000000000000000000000000000b0a539d4f0723df3b6fa880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c9d27da9ce64c5a200000000000000009dce814e38702d0d0000000000000000000000000000000000000000000000007081111be2c86edfb7fb880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000606c9a28a497b6a600000000000000000613dd417fc5910d0000000000000000000000000000000000000000000000007b128e5bd9d8f52705fd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3f580e72f7ad2b500000000000000008efca775881ece0e0000000000000000000000000000000000000000000000002a4650a2d75dd30cf0fa880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e211d604a187d5ad00000000000000006de0ea495a422d0e0000000000000000000000000000000000000000000000001cd35a12d176aca4bfec880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cdeb9cf0690aada900000000000000006ba0d453c27bb70d000000000000000000000000000000000000000000000000bd9fde4d1d6b32a0e7f8880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000541a938db5ffefab0000000000000000c02c10764c95e00d000000000000000000000000000000000000000000000000718ab766f1881fda66f4880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0c8429a67d0e3b20000000000000000e7aec8c733095d0e00000000000000000000000000000000000000000000000055866fdc358facce01f8880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000912ce16c41e3e4b0000000000000000090ee99eeb9b64c0e0000000000000000000000000000000000000000000000006d2c0ebc13a9b3e2d2f2880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000507e179440beb0b20000000000000000497a2902fa2b650e0000000000000000000000000000000000000000000000001a395bbb00669c2dc7fc88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e48dba97b70cb00000000000000000359f101db17c590e000000000000000000000000000000000000000000000000a78fbe6efdb58dda7bf58800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004bb8bb8d5069b5af00000000000000009bd1e9fbae924f0e000000000000000000000000000000000000000000000000e738548175480a8c69fb8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b7208b8f10bb8a60000000000000000d031bc756155620d000000000000000000000000000000000000000000000000a17991f67b5923fb1cf8880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d4ef5aec4eead0000000000000000de01dbb3edb0420e00000000000000000000000000000000000000000000000021076aded26da62a14fd8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007dc77c914f3a29a60000000000000000a5bd05e70b77850d000000000000000000000000000000000000000000000000e56cfe8f8d407eeee9f9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aee0776251996ba6000000000000000027abe39756f0ab0d0000000000000000000000000000000000000000000000002595047578a07a0f8af9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf1cfbd5c6e07fa7000000000000000060b1a3b3a72f9e0d000000000000000000000000000000000000000000000000a7fe74ece9db49f710ff88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049dcab0ebc88c0a80000000000000000c8a13bc26273c00d000000000000000000000000000000000000000000000000fb094b8b9212d9abe8fc88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cfe5f37e4080a2000000000000000068d83591589d1e0d000000000000000000000000000000000000000000000000d158955b4a3d4b13e8fa880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078effc9054237a10000000000000000bb9ddaae235e330d000000000000000000000000000000000000000000000000bd7d63bc7c7cd7e013f78800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c57e188d8eb749b0000000000000000749924c3779dd60c0000000000000000000000000000000000000000000000004f4c1d4377210363abf8880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d185b516de11ef990000000000000000459c90b32bf5c60c0000000000000000000000000000000000000000000000000a8eadf157911826f9ef8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d3e75418338fa9a0000000000000000d03331d2f76fb20c0000000000000000000000000000000000000000000000002896b24a573fb69b29f4880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c68aaad0cf657da60000000000000000b9a8850aac37730d000000000000000000000000000000000000000000000000ac09328edd7e6f84fbf5880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8b645662e621da0000000000000000081886c57c124120d000000000000000000000000000000000000000000000000ca1dfc123eae65de74f68800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ddaa4f1acbf869e000000000000000092afe433a6cbd30c000000000000000000000000000000000000000000000000bacce0a3ae9fc63a0ef9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc117bf7304e1a9d0000000000000000c5a22e1cdae1900c0000000000000000000000000000000000000000000000003e833e4325c44a2d85fb880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000faba2d58e395c3950000000000000000fb6272fb7802fd0b0000000000000000000000000000000000000000000000009335757dcdeb0adbedfc880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b52acff92c1428960000000000000000ccb6d40fc713ff0b0000000000000000000000000000000000000000000000007f09190c2e4913c055fa880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000167d4d864f2cb48f0000000000000000df1166828d1f3e0b000000000000000000000000000000000000000000000000ab8436ff0f46465c0cf9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000747b37f2dbe7959400000000000000002ccf704ea8b5970b0000000000000000000000000000000000000000000000004a69bd5ed909879d1cfb880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f09d53d2177fd49f00000000000000001583d35762736a0c0000000000000000000000000000000000000000000000006d56ac452497d1bda5fd88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028c34653a23a87980000000000000000a3a40a11f025eb0b000000000000000000000000000000000000000000000000a81015aa4660c4a8d5fd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c78229eced99e69300000000000000001859fe1a17c0c20b0000000000000000000000000000000000000000000000004ae239202752a77e20fa88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089e6fafa974a7e8700000000000000003b8d16d5edf2f80a000000000000000000000000000000000000000000000000a408786d086804a242f8880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da3dc8c6cc8554840000000000000000e34a8945195aab0a0000000000000000000000000000000000000000000000000c2b7b4438b9f3afc2ec88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026592bdec7f0e78600000000000000000d54aad969ee930a000000000000000000000000000000000000000000000000f01b8d639f5fba333bfc88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094d948456efb578500000000000000006bbbae2f950b960a0000000000000000000000000000000000000000000000004d92911dc2b2b9ab2ffb8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008db1f5ef32a6b88b00000000000000001d1a6ac06a481b0b000000000000000000000000000000000000000000000000aa415658ad0f6b953bf888000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cd38ff3b529f910000000000000000f24037434237980b000000000000000000000000000000000000000000000000a7aca88add589d326ffd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ec9c5c5c9eb8d28f0000000000000000f7600f71391c870b000000000000000000000000000000000000000000000000f6dc87c95beea4ee83fe88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009027707c74e60900000000000000000bf4d229a65ed7f0b0000000000000000000000000000000000000000000000007e90792369a090d502fa88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057c4d64abea7e393000000000000000076364bc48ccfc40b00000000000000000000000000000000000000000000000060f9c5e07d1ff3b44df6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1ca7e46261eb0920000000000000000f036aa54f4d89b0b000000000000000000000000000000000000000000000000565153af10f0f6decdf0880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f8f42e6a81018e0000000000000000093558889445440b000000000000000000000000000000000000000000000000b346ce88ffccf05d64fb88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c1e389a542198e00000000000000006348ed92b387450b000000000000000000000000000000000000000000000000fe0e676a7f4beb265dfe880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce12fc5cf420ec8b00000000000000005a71acb5b089060b000000000000000000000000000000000000000000000000c177cae345a50b4834fc8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006814bca389f9b782000000000000000024e5a29dd87a6f0a00000000000000000000000000000000000000000000000078f24c31b08e3d3c7bfa880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000736afac32a940889000000000000000098af357f0338e20a0000000000000000000000000000000000000000000000004900e0d297e26e3b8d00890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cd18b468fe571f89000000000000000060c8401d2299dc0a00000000000000000000000000000000000000000000000097ad8e5b89edbb35c8fa8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a14b2b8a1c3548f0000000000000000032742a519d9210b0000000000000000000000000000000000000000000000002f87eeeb118c2bb4b6ee8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e48c5d0707c008e00000000000000003f835a97d38aee0a0000000000000000000000000000000000000000000000004201f25c46244b0961ff880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b897cf0fa32298860000000000000000f8127bfcc745a60a00000000000000000000000000000000000000000000000043a6de725aa99c8614f88800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d483cb1b1c57c81000000000000000014b24bb10a315b0a000000000000000000000000000000000000000000000000cdb4ea4b2cdb042ad3fd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000437d93133fd43c870000000000000000dd7becf770e4da0a000000000000000000000000000000000000000000000000d320acc3a58af61a1cfc8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e8b80d2cb56428b0000000000000000efed8139ee7b0d0b000000000000000000000000000000000000000000000000ecf39655b01b531f5ff888000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058137059f7820d900000000000000000dc21a4cd2e0c7a0b0000000000000000000000000000000000000000000000009a0be144bee1b75d83f58800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003cf6c97a70a5139300000000000000004078388a851fb10b0000000000000000000000000000000000000000000000004ba2cf235ed5590c75fc880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af16a3f36591ff9300000000000000000ff45572f4b6cb0b0000000000000000000000000000000000000000000000000f652be05376a1417c008900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006fa4c59b251d229a0000000000000000669675ffaeb27c0c000000000000000000000000000000000000000000000000e092f141a0278571a5f4880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c292d51951b060980000000000000000881bc0b335e9520c000000000000000000000000000000000000000000000000fcf1e36e9e27f6a5b6fc880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311138153ad5d39a0000000000000000815059feac36a10c0000000000000000000000000000000000000000000000004362dfd873d217e22ef2880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f661267dcb16a100000000000000004f5f8507ab79070d000000000000000000000000000000000000000000000000ea60c6425557697884f9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bfca48f299fb6c9e0000000000000000c39a9fef6db7cc0c000000000000000000000000000000000000000000000000ab04ea804f58fcd6caf3880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a355ce4f8702049e0000000000000000274a7a252501c50c000000000000000000000000000000000000000000000000566056b0955382e2c4f8880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000277768431761f8a00000000000000000a4a10fd3998f270d000000000000000000000000000000000000000000000000e1234a57e74695beb8f588000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040af0f459349539a000000000000000081bbe60757ad740c000000000000000000000000000000000000000000000000f5c99f994128302158f1880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9f06fe78da39b9f00000000000000004b06656fafc08d0c000000000000000000000000000000000000000000000000a3910b931f6cad3625f1880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000caffaa56464d7fa50000000000000000243e8f151ae2220d00000000000000000000000000000000000000000000000089965cf6d7ee67c499f5880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aab67444012af7a20000000000000000d0fd7911942cfc0c000000000000000000000000000000000000000000000000609e4164a8c0b19ca2f9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca3cbe0c2353b6b30000000000000000a1ab476a06777c0e00000000000000000000000000000000000000000000000034c03abbb2d0b148eafa88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019fa5cddee800fa9000000000000000077612a1e5bc4970d000000000000000000000000000000000000000000000000e295d1a0af491913c9f488000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000079e303528e80dca30000000000000000bfd1fa16b998250d0000000000000000000000000000000000000000000000008b4fd0c5f946e4a258f6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ddd497902816e2a1000000000000000019b765dfce960e0d00000000000000000000000000000000000000000000000098d39e05b74aa82f99f1880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000688eb038f83a13aa000000000000000088602f07ff57c30d000000000000000000000000000000000000000000000000fa8df8b6c52d6fe7a6f2880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff6f6552d77046af00000000000000004135eae80fd45c0e0000000000000000000000000000000000000000000000007eb1b94736b2905c52f98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ef7c1dfd5cd9fac00000000000000003852923e2153260e00000000000000000000000000000000000000000000000041586569e17efa8e57f08800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b28f1bddd6cd2a9000000000000000079afb9ea5916bb0d000000000000000000000000000000000000000000000000bb975a22890335051cf38800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f09ad9717e86baf0000000000000000a062f86f99671c0e000000000000000000000000000000000000000000000000cf697223eb864a98a2ee880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa9f162b691287ab0000000000000000fa84b18aa61dba0d0000000000000000000000000000000000000000000000007acc83feac2891ae05f1880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c9e9f996065ae6a900000000000000006c48cb9b0c79cb0d00000000000000000000000000000000000000000000000076e73502489c7e8693eb8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006fe86ff913258fae00000000000000002207c93c414e1f0e0000000000000000000000000000000000000000000000007e6a44e3dcccbeafe9f08800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000547ab575663ccae00000000000000008130b9f8e7c8ff0d0000000000000000000000000000000000000000000000006248f362c25e62a188fd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f76019ff150255b30000000000000000b9a2ab3a5d54400e0000000000000000000000000000000000000000000000001cc71ceb02d95b827bf8880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e6fad83fd38ba9ad0000000000000000ecbd1b142939dd0d0000000000000000000000000000000000000000000000000ddac93f63580f3039fd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000789ab76caf9700b500000000000000008a8a854e996f510e000000000000000000000000000000000000000000000000a83d61a6064ffa5b48f38800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cefac9064caecb700000000000000002d65619b470daa0e0000000000000000000000000000000000000000000000000459fa1bd91368f1aaf2880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e8431ee94aa3aeb50000000000000000c4eb460f54c4970e000000000000000000000000000000000000000000000000d6df14c950a32441a3f6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000424986a1913020b100000000000000007f018fdeb09c510e0000000000000000000000000000000000000000000000008b40f6c27b0f67c5b6f788000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025d81f915a3ab1b900000000000000009c9f3931d5c3f30e00000000000000000000000000000000000000000000000047c698e9a74f548a99f08800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c1fa156fdde7eb80000000000000000ad8621fe183be80e000000000000000000000000000000000000000000000000c374a71eae64411302f1880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc196cb821766fc4000000000000000064ab128a1a9bf00f000000000000000000000000000000000000000000000000bea52e4aa49263e4cef688000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058e45c3d90d1a8c10000000000000000a9cc12fdfaac970f0000000000000000000000000000000000000000000000002dec30043c72feacfbee880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814d5590575b69c600000000000000006c6ca13d6f9ef10f0000000000000000000000000000000000000000000000004442d295e11172c256e9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1176835c7098ece0000000000000000161f6fcc180e77100000000000000000000000000000000000000000000000009e0b082df7dc8f755cf3880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e88a196afa5717cb000000000000000076e614c6d9734810000000000000000000000000000000000000000000000000698be73ccff10d8786ed8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004936a0e0517decc000000000000000002b6f92e194df620f0000000000000000000000000000000000000000000000004b4be6c5032305ba96f088000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074c2ca9f6889ffc000000000000000006cbce565709d6b0f000000000000000000000000000000000000000000000000a850224d85088235fff7880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000882f6910aa5fc5bc0000000000000000e609dc13f3ad390f000000000000000000000000000000000000000000000000cc4eee09a668a7a20de3880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0da642a5b8400c20000000000000000ba9ac259f343ab0f000000000000000000000000000000000000000000000000bdc8f45feafd8abcc0f888000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074035c47b899d2bf0000000000000000aa7014579cd37f0f000000000000000000000000000000000000000000000000c50ed960758cc452cbf788000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056a4d4a2aa8038c000000000000000004511a9cd0f61860f000000000000000000000000000000000000000000000000ce71bac7904bb373f7ee8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ca9b0be2f4f88c200000000000000008e08772588a8a50f0000000000000000000000000000000000000000000000004fbe2f2e2e56f77f89f4880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000191aa28bf02d19bd0000000000000000d985a1c7ff15650f000000000000000000000000000000000000000000000000fc5c745d170e83dd36f6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c435705d2db047c400000000000000003036fcf9a8fa13100000000000000000000000000000000000000000000000002523038b2973c29ac5f68800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f94adc05f676ac000000000000000009d6eabffa4baad0f000000000000000000000000000000000000000000000000ecda0a03d03b4ed5f2ef8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b9034d2b1dca0c5000000000000000050d823b2b358f30f000000000000000000000000000000000000000000000000daf71b6fd22f4d9e54f4880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d7206f7ad09db1cc0000000000000000a941c83c57f49410000000000000000000000000000000000000000000000000acfc7a24c9efdd0d0bff880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e520b25072049dcd00000000000000006287bf547761b6100000000000000000000000000000000000000000000000004f0546404def37589df0880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000318102e1dfc71bcc00000000000000004eafc334b7f690100000000000000000000000000000000000000000000000007f5470378209b9c771e98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009cfb3662509710ca0000000000000000c86b318cb291361000000000000000000000000000000000000000000000000009b1d1fb05ca789528e788000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035d500bffad044c300000000000000003977f28a3c51ad0f000000000000000000000000000000000000000000000000a1037614f8fb348b91f388000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088baf177c3f795bc000000000000000068943643fbbc0f0f0000000000000000000000000000000000000000000000009ac18f3642fa0a6c7df488000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082caa2338bb319c000000000000000000244751851a0a60f000000000000000000000000000000000000000000000000bcc061131e6623f481f2880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000127c628cee0ae5c10000000000000000d28ec92c54097f0f0000000000000000000000000000000000000000000000002eeb3775875be6da9ff58800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000176aaf73723debc0000000000000000a024117dbe11380f000000000000000000000000000000000000000000000000f062275e6ab5732e90e988000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007624e9ce72e26b90000000000000000250785c56f48a20e0000000000000000000000000000000000000000000000004ff3209952fb036bf7f98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005506b77a9d3354b70000000000000000a952eb94213d9c0e00000000000000000000000000000000000000000000000035ab20b497ab809d58f88800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005dd5811ae85623af000000000000000017b7853d5410080e000000000000000000000000000000000000000000000000cb80fffe513496d92fff8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a4d535cd2a49bab0000000000000000a1fe06622859cc0d0000000000000000000000000000000000000000000000006c39df36b42309fcc300890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aebcb7b50a211eaf0000000000000000481a286088b72b0e000000000000000000000000000000000000000000000000c2d80c29961d2c5e57f88800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a227c43a5d71eb6000000000000000081d703e046cdc80e0000000000000000000000000000000000000000000000000de95d8d79bc020d44fc880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d858a48854efaab90000000000000000dad8c67f226b350f000000000000000000000000000000000000000000000000ed8bf22eb225e5dc9cfa8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e31e55b0bda03b700000000000000004fa49fd742c9310f0000000000000000000000000000000000000000000000002675efe7cf54586325f688000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085513a079cacb1b60000000000000000ad72bcc41901310f0000000000000000000000000000000000000000000000002b39e6269b1c30ab69f18800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d3a186fbe4610be0000000000000000ed8c128b59a5aa0f000000000000000000000000000000000000000000000000c876aaef48ba5c305cef88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012039fab551f5fb90000000000000000bb9ea6f293fe490f00000000000000000000000000000000000000000000000002025fbf62e3f85274fa880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000159e5dbb279927b50000000000000000f10871a3eb7f220f0000000000000000000000000000000000000000000000003e5779c7a52e5b68e7f88800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c1e03b5f36db0b50000000000000000b81290237347110f0000000000000000000000000000000000000000000000008d8c2dac7bb494502bf4880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be3911c496771bad00000000000000008368132c3cc4e60d000000000000000000000000000000000000000000000000bc6a1c33f476206d66fc880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d34e763a7e7263a900000000000000000c1372baf5785e0d0000000000000000000000000000000000000000000000003d6126d4de0ac1bd5bfc880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000db981febe92519a6000000000000000022acbc4f5449410d00000000000000000000000000000000000000000000000015e11a8ecdd2634c01f8880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000117e621b8da426a3000000000000000084263ac515d40c0d000000000000000000000000000000000000000000000000d2c7d50bed7a5de4b7f2880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b6d91762b03d389e0000000000000000e1c428bbedeeb80c0000000000000000000000000000000000000000000000006ba904019173485af6f9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fd71ee62792eab9e00000000000000002d62f449c8d9e10c0000000000000000000000000000000000000000000000007a42f6c2141452100afc8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b4c2e7db27483a0000000000000000005384d0ca8492a0d000000000000000000000000000000000000000000000000587766b7c1bb10f793008900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b492f7eb6f7989b00000000000000001beae3738a24da0c000000000000000000000000000000000000000000000000306e970fac10c6fe0afe8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f8b49c92fbd62a700000000000000009c7484a2feb7b80d000000000000000000000000000000000000000000000000b8e923c23af236b29ff58800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d457bb4481b6ca6000000000000000091b760844b416b0d0000000000000000000000000000000000000000000000003b35bd011123790f77f4880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fdffe45fc22133b20000000000000000f0dc9c5a9cde520e0000000000000000000000000000000000000000000000004e008896edc5f31486f588000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075b5357ddfe454aa000000000000000000545a8a01cfce0d0000000000000000000000000000000000000000000000006fa7ce188fcd509157f7880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af495c66f586afab00000000000000004706c1385950d50d000000000000000000000000000000000000000000000000c31b742a34682d395ffb8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a655fb6835913b000000000000000004730c597a393280e000000000000000000000000000000000000000000000000a138ba7af28face9fcee880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b06570ecb7a69db40000000000000000f3ddbfa1551f740e000000000000000000000000000000000000000000000000ed07422f8ec19b2f6df6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f71aa46d8c5d26b200000000000000009764ef981e6b880e000000000000000000000000000000000000000000000000cbffeb8ccf709a4173f78800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e93f5f70a950cab0000000000000000abb931f106891e0e000000000000000000000000000000000000000000000000453046b4f57e5a1283f7880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b8adc243058469b700000000000000008313ff2c98aa320f000000000000000000000000000000000000000000000000d60a0a4c99c8855358fb880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000efdad9586fdd2eb600000000000000006f57837e54f5ec0e000000000000000000000000000000000000000000000000a8f4ad5ff0b452d346f98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bdb309bc8a37eb50000000000000000b7c21efe4840e90e000000000000000000000000000000000000000000000000b7409a556d0d282792f6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9f513f7e6599dbc00000000000000000e5c238efa95750f00000000000000000000000000000000000000000000000025b9b7e8b7f6038102fb880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000435de98512a506c40000000000000000694f6d2cea0623100000000000000000000000000000000000000000000000001cbbe3ad2936fb5e2d008900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aaa641d311583c7000000000000000082e1b454b02f331000000000000000000000000000000000000000000000000043a861818faabef26c008900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fcea3b7ff26c9bc00000000000000008ff9b499c3fe370f000000000000000000000000000000000000000000000000822ef3bb406acafc55fd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c65fb4be598172b6000000000000000034a0c1a5cc4b790e0000000000000000000000000000000000000000000000007863e104ad5358b380f088000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038edeb1bd229f7ae0000000000000000084128d2ac820d0e000000000000000000000000000000000000000000000000d5e8900b4914912e5cf6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000214cdea7662d92aa0000000000000000d65bc707f7b6a50d00000000000000000000000000000000000000000000000001809509a216ae48d6fd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000952727d740af63ac0000000000000000cfb339ceee34d80d0000000000000000000000000000000000000000000000005ac55b1b739a04fef2fd88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007d2dab7851234b20000000000000000421a1224e68a720e00000000000000000000000000000000000000000000000064235cf1918a2010c9fb880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c59a9fd1607842a600000000000000008d9f35d13219850d0000000000000000000000000000000000000000000000005f59c424eae40ce38b00890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e80620d69b5d439b000000000000000075c286be23479a0c000000000000000000000000000000000000000000000000b43c209ef492d7b0eafa880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000edf1b54f17b070a20000000000000000414e981907232e0d000000000000000000000000000000000000000000000000130302d3fb79976caef5880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000576545cd2dca539f00000000000000004c326403fad5ff0c000000000000000000000000000000000000000000000000abd82a1a758982716bf388000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065ae6da8e678cbaa00000000000000006077ae26650fb70d0000000000000000000000000000000000000000000000003e1415c7a5f94fcfeaf98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007afa0a90eca0cbb60000000000000000ccf89c551f04b80e0000000000000000000000000000000000000000000000008d0e67b38aa329eb28f58800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4b0cf123af3bb70000000000000000d7fd2c70886fcf0e0000000000000000000000000000000000000000000000002e50e867ead6ae75cdf588000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014d9260662fcc7b800000000000000006641f51b421eb40e0000000000000000000000000000000000000000000000004e6f0a24852a86fb8efb88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d7eee0d3bcd2c00000000000000000e3a63ab3c56c4e0f0000000000000000000000000000000000000000000000004fe51f88994213abc0ef8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a2e8c10dd9205bf00000000000000003c178631246a270f000000000000000000000000000000000000000000000000be84120b6bf7af2f08fa880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b042b3102b1e88bf000000000000000026a6260370ae5e0f000000000000000000000000000000000000000000000000bac48b243df1ef9b0df588000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d803b98e081bc30000000000000000b6a0af5bff76eb0f00000000000000000000000000000000000000000000000078761bc3f752aba007f9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dc7614d8015021c50000000000000000adeff2b46604b40f0000000000000000000000000000000000000000000000004697c7e50eb9965307ed880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f39b67b4ed5a3ec400000000000000007e72b4c0f821d00f0000000000000000000000000000000000000000000000005b804d518c3e257df2e588000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076702c09853dd6bf000000000000000053d1e8aa5a7a830f000000000000000000000000000000000000000000000000f9e56412e96ccb93f4cd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ebdf5b2b9060e7b60000000000000000c9dd4ad889c3d60e0000000000000000000000000000000000000000000000001e55da7ca32e568ff679880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f05b917136a6b400000000000000006029a97d93f7110f000000000000000000000000000000000000000000000000e22a2d635c51edf1dd8d880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000838ffb1513f75eb6000000000000000048718205573d4d0f000000000000000000000000000000000000000000000000c2aa0b798ba2ec03fd9388000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076389fa583c2fab9000000000000000006bb663e59ec4d0f00000000000000000000000000000000000000000000000062ddd8c1df9f57f08d9488000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066c05c5ec38789be00000000000000006588bdae6622570f0000000000000000000000000000000000000000000000009201e9bc8b36d438cba5880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d48ff218ebbb06ba00000000000000005d23dd56b76bd20e000000000000000000000000000000000000000000000000efb049ca203af0a701ae880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000232dd625fef24bbe00000000000000003e8104a411e8140f000000000000000000000000000000000000000000000000bb9e0b2044d255ee77ab880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c9b986c5d2c30bc100000000000000003f0e8495c46b410f000000000000000000000000000000000000000000000000389c0939f8dbf00291b3880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fbf34a04ca6ce8bf0000000000000000c71588b8373d130f000000000000000000000000000000000000000000000000ac8f7471a4b3f5ffacba8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006202439d0c46ccc200000000000000001670c0989077640f000000000000000000000000000000000000000000000000e17308a5d7bdd0a3b9c18800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003271e9d522e581ce0000000000000000bed7c7d4e93d6e10000000000000000000000000000000000000000000000000f81cf7177dc03f653fc688000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045b232d0595dc0d10000000000000000c6047217119ad81000000000000000000000000000000000000000000000000055b5f848e216848f7cc588000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048644b00d8a463d20000000000000000a8d8951aabb512110000000000000000000000000000000000000000000000000cfc80e34a9a2b44c5c88800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004893cc4c57de7cd40000000000000000f078be81278e55110000000000000000000000000000000000000000000000008bce86d7ee80868819c7880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000568c8e8f46b3edd40000000000000000630c96670bbf301100000000000000000000000000000000000000000000000017ab0b575eefe6b9decc8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a809a2decbb2dd40000000000000000b563853f52cbf8100000000000000000000000000000000000000000000000007ff8aa61f6f40849afbd8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dcd64d323eb78da0000000000000000a14d431f4f384911000000000000000000000000000000000000000000000000ea6ddb95796c1621b7d2880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e30393766c1220da00000000000000004eb646adfd758711000000000000000000000000000000000000000000000000a6c35ca6faea7dd137d588000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f88f6be1e596d500000000000000000ccaea84cf182411000000000000000000000000000000000000000000000000dcb8c555453277e9dfcb880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cd3a52c43c2eacdd0000000000000000de00e011bdeac311000000000000000000000000000000000000000000000000a45803390c55f68f0dce8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003018d7c12f5077dd0000000000000000997e207cbac8ce11000000000000000000000000000000000000000000000000709949ab1ec5bc93e2c7880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eee662056aa6a2d90000000000000000d303f55c87517f11000000000000000000000000000000000000000000000000fc4a4701abb2a653a3e3880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000623a927470463fe0000000000000000096c14e64049e3112000000000000000000000000000000000000000000000000b805d892c605375a82e2880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d92ff16b76b9a1e90000000000000000944f5e133206dd120000000000000000000000000000000000000000000000003f68cd2cfdaf0450f4e9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000965e06923cb5a1e100000000000000004e762c2077b63d12000000000000000000000000000000000000000000000000e45d8df5926fe3d7f6e68800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005df58e6c4f1f20e300000000000000004f607160bb6e9112000000000000000000000000000000000000000000000000702910625b788f0245e9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000493e5ca4bc46d1e3000000000000000005f0d92b12799d120000000000000000000000000000000000000000000000007714574fff7ea7b326ee880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c71a10f08553edde000000000000000068d34b3261c44b12000000000000000000000000000000000000000000000000fb58e28322a91c0ea2e98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c4fe86ecec4d5e3000000000000000052c8db57c46581120000000000000000000000000000000000000000000000008c1634804007c5a130e1880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6fadf17f97eaae900000000000000000b0fe02a27509312000000000000000000000000000000000000000000000000e40c3df51399aa2c7de188000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098b060f1ad9357e30000000000000000ced9b52edf9400120000000000000000000000000000000000000000000000007ec854f25536cc942fea8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f5deb3a55f290df00000000000000005cf829076d44b21100000000000000000000000000000000000000000000000021a3fde9edfa60fc24ef880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf1dc0acc026ddd600000000000000006f031d71523621110000000000000000000000000000000000000000000000002f1b753135c6de3506e488000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a9c64e6ec020d700000000000000004e7ad6b0369c0411000000000000000000000000000000000000000000000000779caa227b386e3f53e588000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000059ebb795a71485d900000000000000001d477fc06aff3f1100000000000000000000000000000000000000000000000015f583758939f4a1edee8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006094a155533f67d400000000000000008b0ce165eb692111000000000000000000000000000000000000000000000000af57d3fc3098950a70ea8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a5df21f0a48bbd20000000000000000c75c5b42df8d271100000000000000000000000000000000000000000000000047979c974d8e15fedae588000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077d69b71d1bb84ca0000000000000000bfec4141c16a8f100000000000000000000000000000000000000000000000001819c352bf9a5dd52ae5880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0b16d39b9fea3c40000000000000000d4ec8df56a7b17100000000000000000000000000000000000000000000000004f947c85acfdbe991ee68800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001785e0fe3feaa5ba00000000000000008e04ca251d58860f0000000000000000000000000000000000000000000000009e5bd9f5fb36daa614e3880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c48abd1f347401c10000000000000000c91c70397d9e4810000000000000000000000000000000000000000000000000fbe91210cad28efdccde880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096af5046c8098c600000000000000004e4947df3a03a1100000000000000000000000000000000000000000000000002128187caea6cf9892e4880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bbb2fa5e770a49d200000000000000000966d9f27d0583110000000000000000000000000000000000000000000000007c5108ec3dfed93242da88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000059aae8cb96b45ed90000000000000000c833a0399781f7110000000000000000000000000000000000000000000000002d15092e390a749f16da880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b969900d6f3e89e70000000000000000f50f3a18a99aeb12000000000000000000000000000000000000000000000000379d12795a5d9014e1e6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea4e20da09fa6bdc000000000000000078c5d41e84730512000000000000000000000000000000000000000000000000adb1a355541a87366f9e880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f19e8797d2442ee3000000000000000046dfbfb2a74c84120000000000000000000000000000000000000000000000009cc49c83137af2e2d9b4880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb53e56d1dddd2d90000000000000000a3d2ff9030c2c711000000000000000000000000000000000000000000000000aa6e7b22bbca2bdb63af880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a948111f9b7ab5df00000000000000008ed81ecb24114b1200000000000000000000000000000000000000000000000071ae87afa83cb45c22de880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eef81745769d4ee80000000000000000ac5030c4cdc8e512000000000000000000000000000000000000000000000000da63343175f811f26ddd88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078ee6eab778920ed0000000000000000ee695aa9c68a5a13000000000000000000000000000000000000000000000000ea29dec5f3ae70af07df8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d785a3b0e9e31ea0000000000000000982ab14783770a130000000000000000000000000000000000000000000000003581395af5cadd0a25e8880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000829c031efd1cfef100000000000000009ed22cb26bab91130000000000000000000000000000000000000000000000004b25be54f9a9d2e027f78800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006eb37e53b047f4e400000000000000000cd4806d57446b120000000000000000000000000000000000000000000000005d8c95dbec1f8a6cc8f8880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091fa231d658c1e90000000000000000ea6f0d56059bc212000000000000000000000000000000000000000000000000250839a85af8db30e7f08800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa2a396d29bebec00000000000000008a0c9fb02c6bf5120000000000000000000000000000000000000000000000008814a34c0291edc331e88800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ec07b3974064be800000000000000009da8f87b71c56612000000000000000000000000000000000000000000000000b09e35b9be86ab28d4f68800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008fc6b342375142e70000000000000000daeb841e2bdc9912000000000000000000000000000000000000000000000000dcd7d16ad68112bd07ef88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082a694891706cdea00000000000000002238acc70fbbd71200000000000000000000000000000000000000000000000073e715228c5ffaacfbf5880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d839eb3bcb182be700000000000000004d695b1b51b3a6120000000000000000000000000000000000000000000000001bb8934b2d2eb9f3cbf78800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007efa3e24e8c73fe40000000000000000b4fe917b8d7a8312000000000000000000000000000000000000000000000000840fbae1c699bcb3e1ed880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b634ae21eebe500000000000000006d0047b6e83268120000000000000000000000000000000000000000000000002359647a672e724457fd880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffe523e51312c6de0000000000000000c0774d734492de11000000000000000000000000000000000000000000000000d255679bccc64cfbb8fc8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ae555f622173bdd0000000000000000a3bf90b5516eb911000000000000000000000000000000000000000000000000c8e6815a8288b04d08ef880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de85eea4308039e70000000000000000e405d8cc3f4c92120000000000000000000000000000000000000000000000003b9898000848007d40f0880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c97cd36decc4afea000000000000000098625d00b69904130000000000000000000000000000000000000000000000004d84e719e97b027edaf6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b875033ad7156ff8000000000000000094435c0a2902e013000000000000000000000000000000000000000000000000fafd464651a7777b96f1880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b017a5b49c11d5f3000000000000000032f1f4a2b4257f13000000000000000000000000000000000000000000000000ea458bb42a968d68eaf588000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bb22dd3057a4f60000000000000000ab52a5471a76d4130000000000000000000000000000000000000000000000005fb192d93179512900f98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e5d69e6bf52aaf900000000000000004ee866808a023a14000000000000000000000000000000000000000000000000b8166412cde694ef65f18800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b0168a1015403020100000000000000901477204331e814000000000000000000000000000000000000000000000000ef9fb84d6c27f4d833f388000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072720f2fe5633607010000000000000017ff2c819aa0671500000000000000000000000000000000000000000000000068acc9414b2176bb85eb88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094f919ecf1e66904010000000000000069d7a68103621e15000000000000000000000000000000000000000000000000ddc002732b24aacb54f1880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000281ea7120efdef050100000000000000147f0e31f81b8815000000000000000000000000000000000000000000000000cf0c21b9b24f18682cf0880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d06b00216b360d0501000000000000001a1f65aa1b615d15000000000000000000000000000000000000000000000000feab91cbe78f192b6df08800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006798f2bf31ee4b02010000000000000005b08d72e2fcee1400000000000000000000000000000000000000000000000040617a89b90f68f666f388000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090b0161976aee7fd0000000000000000a37bcee0b65c8e14000000000000000000000000000000000000000000000000bf4f3fa7769d92256df6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000357ae0758a03bff0000000000000000016add5ae068fc31300000000000000000000000000000000000000000000000062768421ab2e0fd499fb880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000620f68c3d0dea0e700000000000000002047cd29489f2613000000000000000000000000000000000000000000000000b1e81eb394f3396eabf488000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084c569a71bf82beb0000000000000000a572a9fee9ac67130000000000000000000000000000000000000000000000007f11a53bfe73856a8bf6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fef88de0bc9c6de600000000000000001a312c8690732b130000000000000000000000000000000000000000000000005f11d7fd427d3d5c63ed8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001616ef29e3b9abe80000000000000000c40a95af64035513000000000000000000000000000000000000000000000000bd9a831874b8d89d1df9880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000456f04eb7b3a89e00000000000000000c0bcb70d4277cf12000000000000000000000000000000000000000000000000a461dd06d53c8e272ffb880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f85b513b59b5f6e400000000000000004b47cfc7fab324130000000000000000000000000000000000000000000000000512496ed791232fdcf7880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a69491979f0f69f10000000000000000f2102fca35b74814000000000000000000000000000000000000000000000000696eb0a659cb4cf38ff98800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e621d39be9c9afd0000000000000000e03a877021d504150000000000000000000000000000000000000000000000006cda543b5592ed5d13f3880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fde0c040ef3dd40501000000000000000041fff610249b150000000000000000000000000000000000000000000000006fe01e6234caae1296f4880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b42cfe6bb735c00e01000000000000008b3ca19dc83c63160000000000000000000000000000000000000000000000000035959106d9862284f48800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a9c1aac47f683100100000000000000edab1e0d83d24a1600000000000000000000000000000000000000000000000033c22ad2aeff820df4f5880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ced03458cb28e5100100000000000000b1a14db7e13b34160000000000000000000000000000000000000000000000003f3d8d60dc985b695df18800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008eb9e95b1a6e24170100000000000000f69ca35f3aba93160000000000000000000000000000000000000000000000008391f279ab2e21e49ee3880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000592212495820881a0100000000000000a28efe0c4e6e0317000000000000000000000000000000000000000000000000ab0016961cf224cdebea8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a18e5d84d2fce220100000000000000a7d0332f064fba1700000000000000000000000000000000000000000000000036276b57d6bbb26e41f68800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b4005fddfd8e51b010000000000000079aa31a0c2f83717000000000000000000000000000000000000000000000000c4be9d54535f0d474eea8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009385f4644c220d170100000000000000eea8795ceaf8db160000000000000000000000000000000000000000000000004c154eb10f0b297c15ec880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3cb35a9e367230e01000000000000009dd8674241d622160000000000000000000000000000000000000000000000009f550a290757699e10ee8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004cc4292a4c72671801000000000000007784e70faf43c916000000000000000000000000000000000000000000000000688b130b034d9d969ced8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b32a690f3cee615010000000000000042d61abf2d68b916000000000000000000000000000000000000000000000000b86e627a3406c9f765f78800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a603aa856b99b11010000000000000048e702ed0a6e7b160000000000000000000000000000000000000000000000009b44447eb62091e35ae288000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ea65009301f10d010000000000000054fbbbdd8c0537160000000000000000000000000000000000000000000000004ff95547a2894f39c8ec8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008db01aab85353e0401000000000000009bc310e10dcb8515000000000000000000000000000000000000000000000000b2938c981c0c28a3fae6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b5421443b6592aff000000000000000041575aaf40f5ee14000000000000000000000000000000000000000000000000e5a31b5625260f1a55f5880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4e58cff03f190060100000000000000b8baa3d7d8d4b6150000000000000000000000000000000000000000000000008434d911631fe027d3e988000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c75a4424c75b080100000000000000d2f838edc00cb815000000000000000000000000000000000000000000000000882e2fee222a03e748e78800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c2d159212e094110100000000000000f64ec493739d5816000000000000000000000000000000000000000000000000f9e6be54170983882bf18800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ad09c3b85934b1b0100000000000000f81470b71eb13c17000000000000000000000000000000000000000000000000901ddbf56fad0eae47f78800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b4c6f07a02a1c110100000000000000a3ecaeda3754b316000000000000000000000000000000000000000000000000b3b8a7f6f06c05788bec880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7760e9b430eab040100000000000000c41f4a46dbd89c1500000000000000000000000000000000000000000000000018f9f53ed1e5d5a1a5f28800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ae70fb881feb408010000000000000086405a7314740d16000000000000000000000000000000000000000000000000e1e8b50faf3d1d2800ea88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091466db1c5e57cf80000000000000000d667b88da881d3140000000000000000000000000000000000000000000000009c1378dc51d3086381e6880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000946e37c5ad4b33f100000000000000004946acf7b15ff9130000000000000000000000000000000000000000000000006a35dfc5a3c3f04223f38800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007275f842c9784bf8000000000000000022cacc70ac5cd514000000000000000000000000000000000000000000000000de54828ef73b888313f18800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d06168b05d9b2010100000000000000465ac2bf6171bd1500000000000000000000000000000000000000000000000016d6453e7747346d2ded88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090ebe42bbbc81f01010000000000000020c4078951c6921500000000000000000000000000000000000000000000000027bb221b08b4ca1373ed880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000891cf717bd799d030100000000000000b855dda5f0179f15000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/addons/svm/core/src/commands/setup_surfnet/mod.rs b/addons/svm/core/src/commands/setup_surfnet/mod.rs index f95138bd5..46d83f135 100644 --- a/addons/svm/core/src/commands/setup_surfnet/mod.rs +++ b/addons/svm/core/src/commands/setup_surfnet/mod.rs @@ -218,7 +218,12 @@ impl CommandImplementation for SetupSurfpool { let logger = LogDispatcher::new(construct_did.as_uuid(), "svm::setup_surfnet", &progress_tx); - let account_updates = SurfpoolAccountUpdate::parse_value_store(&values, &auth_context)?; + let acc_data = + SurfpoolAccountUpdate::get_accounts_data_if_needed(&values, &rpc_client).await?; + + let account_updates = + SurfpoolAccountUpdate::parse_value_store(&values, &auth_context, acc_data)?; + SurfpoolAccountUpdate::process_updates(account_updates, &rpc_client, &logger).await?; let token_account_updates = SurfpoolTokenAccountUpdate::parse_value_store(&values)?; diff --git a/addons/svm/core/src/commands/setup_surfnet/set_account.rs b/addons/svm/core/src/commands/setup_surfnet/set_account.rs index 582d3d68a..ea39aca73 100644 --- a/addons/svm/core/src/commands/setup_surfnet/set_account.rs +++ b/addons/svm/core/src/commands/setup_surfnet/set_account.rs @@ -1,4 +1,4 @@ -use std::{path::PathBuf, str::FromStr}; +use std::{collections::HashMap, path::PathBuf, str::FromStr}; use serde::{Deserialize, Serialize}; use serde_json::json; @@ -16,8 +16,329 @@ use txtx_addon_kit::{ }; use txtx_addon_network_svm_types::SvmValue; +use crate::codec::idl::{borsh_encode_value_to_idl_type, get_field_offset_in_account}; use crate::constants::SET_ACCOUNT; +macro_rules! parse_num { + ($type:ty, $value:expr) => {{ + let num = <$type>::from_str($value) + .map_err(|e| diagnosed_error!("failed to parse value as {}: {e}", stringify!($type)))?; + num.to_le_bytes().to_vec() + }}; +} + +fn value_to_bytes(field_type: &str, value: &Value) -> Result, Diagnostic> { + match field_type { + "u8" => Ok(parse_num!(u8, &value.to_string())), + "i8" => Ok(parse_num!(i8, &value.to_string())), + "u16" => Ok(parse_num!(u16, &value.to_string())), + "i16" => Ok(parse_num!(i16, &value.to_string())), + "u32" => Ok(parse_num!(u32, &value.to_string())), + "i32" => Ok(parse_num!(i32, &value.to_string())), + "u64" => Ok(parse_num!(u64, &value.to_string())), + "i64" => Ok(parse_num!(i64, &value.to_string())), + "u128" => Ok(parse_num!(u128, &value.to_string())), + "i128" => Ok(parse_num!(i128, &value.to_string())), + "f32" => Ok(parse_num!(f32, &value.to_string())), + "f64" => Ok(parse_num!(f64, &value.to_string())), + "pubkey" => { + let pubkey = Pubkey::from_str(&value.to_string()) + .map_err(|e| diagnosed_error!("failed to parse value as Pubkey: {e}"))?; + Ok(pubkey.to_bytes().to_vec()) + } + "string" => Ok(value.to_string().into_bytes()), + "boolean" => { + let b = bool::from_str(&value.to_string()) + .map_err(|e| diagnosed_error!("failed to parse value as boolean: {e}"))?; + Ok(vec![b as u8]) + } + "buffer" => hex::decode(&value.to_string()) + .map_err(|e| diagnosed_error!("failed to parse value as hex string: {e}")), + _ => Err(diagnosed_error!( + "invalid 'type' field in patch_raw: must be one of \ + 'u8', 'i8', 'u16', 'i16', 'u32', 'i32', 'u64', 'i64', \ + 'u128', 'i128', 'f32', 'f64', 'pubkey', 'string', 'boolean', or 'buffer'" + )), + } +} + +fn resolve_data_bytes( + data_bytes: Option>, + prefetched_data: &HashMap>>, + public_key: &Pubkey, +) -> Result, Diagnostic> { + match data_bytes { + Some(d) => Ok(d), + None => { + prefetched_data.get(&public_key.to_string()).and_then(|opt| opt.clone()).ok_or_else( + || diagnosed_error!("account data must be provided or prefetched for patching"), + ) + } + } +} + +fn apply_patches_raw( + data_bytes: Option>, + patch: &Value, + prefetched_data: &HashMap>>, + public_key: &Pubkey, +) -> Result>, Diagnostic> { + let patches = patch.as_array().ok_or_else(|| { + diagnosed_error!( + "expected 'patch_raw' to contain maps with 'offset', 'length', 'value', and 'type' fields" + ) + })?; + + let mut data_bytes = match data_bytes { + Some(d) => d, + None => match prefetched_data.get(&public_key.to_string()) { + Some(Some(d)) => d.clone(), + Some(None) => { + eprintln!( + "Warning: skipping patch_raw for account {}: account does not exist on-chain", + public_key + ); + return Ok(None); + } + None => { + return Err(diagnosed_error!( + "account data must be provided or prefetched for patching" + )); + } + }, + }; + + for patch_item in patches.iter() { + let patch_map = patch_item.as_object().ok_or_else(|| { + diagnosed_error!( + "expected each 'patch_raw' block to be a map with 'offset', 'length', 'value', and 'type' fields" + ) + })?; + + let PatchRawAccountData { offset, length, value, r#type } = + PatchRawAccountData::from_map(patch_map)?; + let range = offset as usize..(offset + length) as usize; + let bytes = value_to_bytes(&r#type, &value)?; + if bytes.len() != length as usize { + return Err(diagnosed_error!( + "patch type '{}' produced {} bytes, but 'length' was set to {}", + r#type, + bytes.len(), + length + )); + } + if (offset + length) as usize > data_bytes.len() { + return Err(diagnosed_error!( + "patch range {}..{} exceeds account data length ({})", + offset, + offset + length, + data_bytes.len() + )); + } + data_bytes[range].copy_from_slice(&bytes); + } + + Ok(Some(data_bytes)) +} + +fn apply_patches_idl( + data_bytes: Option>, + patch: &Value, + prefetched_data: &HashMap>>, + public_key: &Pubkey, + auth_ctx: &AuthorizationContext, +) -> Result, Diagnostic> { + let patches = patch.as_array().ok_or_else(|| { + diagnosed_error!( + "expected 'patch_idl' field to be a map with \ + 'program_idl', 'account_name', 'value', and 'name' fields" + ) + })?; + + let mut data_bytes = resolve_data_bytes(data_bytes, prefetched_data, public_key)?; + + for patch_item in patches.iter() { + let patch_map = patch_item.as_object().ok_or_else(|| { + diagnosed_error!( + "expected each 'patch_idl' to be a map with \ + 'program_idl', 'account_name', 'value', and 'name' fields" + ) + })?; + + let PatchAccountDataIdl { program_idl, account_name, value, name } = + PatchAccountDataIdl::from_map(patch_map)?; + + let idl_path_buf = PathBuf::from(&program_idl); + + let idl_path = auth_ctx.get_file_location_from_path_buf(&idl_path_buf).map_err(|e| { + diagnosed_error!("invalid program idl path {}: {}", idl_path_buf.display(), e) + })?; + + if !idl_path.exists() { + return Err(diagnosed_error!( + "invalid program idl path; no idl found at: {}", + idl_path_buf.display() + )); + } + + let idl_str = idl_path.read_content_as_utf8().map_err(|e| { + diagnosed_error!("invalid idl location {}: {}", &idl_path.to_string(), e) + })?; + + let idl = crate::codec::idl::IdlRef::from_str(&idl_str).map_err(|e| { + diagnosed_error!("invalid idl at location {}: {}", &idl_path.to_string(), e) + })?; + + let idl_account = idl.get_account(&account_name)?; + let idl_type_def = idl.get_type(&account_name)?; + let idl_types = idl.get_types(); + + let disc = &idl_account.discriminator; + if !disc.is_empty() { + if data_bytes.len() < disc.len() { + return Err(diagnosed_error!( + "account data is too short ({} bytes) to contain the discriminator \ + ({} bytes) for account '{}'", + data_bytes.len(), + disc.len(), + account_name + )); + } + let account_disc = &data_bytes[..disc.len()]; + if account_disc != disc.as_slice() { + return Err(diagnosed_error!( + "discriminator mismatch for account '{}': expected {:?}, found {:?}", + account_name, + disc, + account_disc + )); + } + } + + let (field_offset, field_byte_len, field_idl_type) = get_field_offset_in_account( + &data_bytes, + disc.len(), + &idl_type_def.ty, + &name, + &idl_types, + )?; + + let encoded_value = + borsh_encode_value_to_idl_type(&value, &field_idl_type, &idl_types, None) + .map_err(|e| diagnosed_error!("failed to encode field '{}': {}", name, e))?; + + if encoded_value.len() != field_byte_len { + return Err(diagnosed_error!( + "encoded value for field '{}' has {} bytes, but the existing field \ + occupies {} bytes; variable-length field patching is not supported", + name, + encoded_value.len(), + field_byte_len + )); + } + + data_bytes[field_offset..field_offset + field_byte_len].copy_from_slice(&encoded_value); + } + + Ok(data_bytes) +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct PatchRawAccountData { + pub offset: u64, + pub length: u64, + pub value: Value, + pub r#type: String, +} + +impl PatchRawAccountData { + pub fn new(offset: u64, length: u64, value: Value, r#type: String) -> Self { + Self { offset, length, value, r#type } + } + + pub fn from_map(map: &IndexMap) -> Result { + let get_field = |key: &str| -> Result<&Value, Diagnostic> { + map.get(key).ok_or_else(|| diagnosed_error!("missing '{key}' field in patch_raw block")) + }; + + let offset = get_field("offset")? + .as_uint() + .ok_or_else(|| { + diagnosed_error!("expected 'offset' field in patch_raw block to be a u64") + })? + .map_err(|e| diagnosed_error!("{e}"))?; + + let length = get_field("length")? + .as_uint() + .ok_or_else(|| { + diagnosed_error!("expected 'length' field in patch_raw block to be a u64") + })? + .map_err(|e| diagnosed_error!("{e}"))?; + + let value = get_field("value")?.clone(); + + let r#type = get_field("type")? + .as_string() + .ok_or_else(|| { + diagnosed_error!("expected 'type' field in patch_raw block to be a string") + })? + .to_string(); + + Ok(Self::new(offset, length, value, r#type)) + } +} + +#[derive(Debug, Clone)] +pub struct PatchAccountDataIdl { + pub program_idl: String, + pub account_name: String, + pub value: Value, + pub name: String, +} + +impl PatchAccountDataIdl { + pub fn new( + program_idl: String, + account_name: String, + value: Value, + name: String, + ) -> Self { + Self { program_idl, account_name, value, name } + } + + pub fn from_map(map: &IndexMap) -> Result { + let get_field = |key: &str| -> Result<&Value, Diagnostic> { + map.get(key).ok_or_else(|| diagnosed_error!("missing '{key}' field in patch_idl item")) + }; + + let program_idl = get_field("program_idl")? + .as_string() + .ok_or_else(|| { + diagnosed_error!("expected 'program_idl' field in patch_idl item to be a string") + })? + .to_string(); + + let account_name = get_field("account_name")? + .as_string() + .ok_or_else(|| { + diagnosed_error!("expected 'account_name' field in patch_idl item to be a string") + })? + .to_string(); + + let value = get_field("value")?.clone(); + + let name = get_field("name")? + .as_string() + .ok_or_else(|| { + diagnosed_error!("expected 'name' field in patch_idl item to be a string") + })? + .to_string(); + + Ok(Self::new(program_idl, account_name, value, name)) + } +} + #[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SurfpoolAccountUpdate { @@ -59,6 +380,7 @@ impl SurfpoolAccountUpdate { pub fn from_map( map: &mut IndexMap, auth_ctx: &AuthorizationContext, + prefetched_data: &HashMap>>, ) -> Result { let some_public_key = map.swap_remove("public_key"); @@ -127,7 +449,7 @@ impl SurfpoolAccountUpdate { .transpose()?; let some_data = map.swap_remove("data"); - let data = some_data.map(|v| hex::encode(v.to_be_bytes())); + let data_bytes = some_data.map(|v| v.to_le_bytes()); let some_owner = map.swap_remove("owner"); let owner = some_owner @@ -157,6 +479,20 @@ impl SurfpoolAccountUpdate { .transpose()? .transpose()?; + let mut data_bytes = if let Some(patch) = map.swap_remove("patch_raw") { + apply_patches_raw(data_bytes, &patch, prefetched_data, &public_key)? + } else { + data_bytes + }; + + data_bytes = if let Some(patch) = map.swap_remove("patch_idl") { + Some(apply_patches_idl(data_bytes, &patch, prefetched_data, &public_key, auth_ctx)?) + } else { + data_bytes + }; + + let data = data_bytes.map(hex::encode); + if lamports.is_none() && data.is_none() && owner.is_none() @@ -169,34 +505,99 @@ impl SurfpoolAccountUpdate { } } - pub fn parse_value_store( + fn get_account_update_maps( values: &ValueStore, - auth_ctx: &AuthorizationContext, - ) -> Result, Diagnostic> { - let mut account_updates = vec![]; - - let account_update_data = values - .get_value(SET_ACCOUNT) - .map(|v| v.as_map().ok_or_else(|| diagnosed_error!("'set_account' must be a map type"))) - .transpose()?; - - let Some(account_update_data) = account_update_data else { - return Ok(vec![]); + ) -> Result>>, Diagnostic> { + let account_update_data = match values.get_value(SET_ACCOUNT) { + None => return Ok(None), + Some(v) => { + v.as_map().ok_or_else(|| diagnosed_error!("'set_account' must be a map type"))? + } }; - let mut account_update_data = account_update_data + let maps = account_update_data .iter() .map(|i| { i.as_object() - .map(|o| o.clone()) - .ok_or(diagnosed_error!("'set_account' must be a map type")) + .cloned() + .ok_or_else(|| diagnosed_error!("'set_account' must be a map type")) }) .collect::, _>>()?; + Ok(Some(maps)) + } + + /// Checks if any of the account updates require prefetched data and fetches it if needed. + /// Returns a map of account public keys to their prefetched data. + pub async fn get_accounts_data_if_needed( + values: &ValueStore, + rpc_client: &RpcClient, + ) -> Result>>, Diagnostic> { + let account_updates = match Self::get_account_update_maps(values)? { + None => return Ok(HashMap::new()), + Some(maps) => maps, + }; + + let accounts_to_fetch = account_updates + .iter() + .enumerate() + .filter_map(|(i, update)| { + if update.get("patch_raw").is_none() && update.get("patch_idl").is_none() { + return None; + } + let prefix = format!("failed to parse `set_account` map #{}", i + 1); + Some( + update + .get("public_key") + .ok_or_else(|| { + diagnosed_error!( + "{prefix} missing required 'public_key' field and 'pubkey' field in account file" + ) + }) + .and_then(|pk| { + SvmValue::to_pubkey(pk).map_err(|e| { + diagnosed_error!( + "{prefix} invalid 'public_key' field: {e}" + ) + }) + }), + ) + }) + .collect::, _>>()?; + + if accounts_to_fetch.is_empty() { + return Ok(HashMap::new()); + } + + let accounts_data = rpc_client + .get_multiple_accounts(&accounts_to_fetch) + .await + .map_err(|e| diagnosed_error!("failed to prefetch account infos: {e}"))? + .into_iter() + .zip(accounts_to_fetch.iter()) + .map(|(acc, pubkey)| (pubkey.to_string(), acc.map(|a| a.data))) + .collect(); + + Ok(accounts_data) + } + + pub fn parse_value_store( + values: &ValueStore, + auth_ctx: &AuthorizationContext, + prefetched_data: HashMap>>, + ) -> Result, Diagnostic> { + let mut account_update_data = match Self::get_account_update_maps(values)? { + None => return Ok(vec![]), + Some(maps) => maps, + }; + + let mut account_updates = vec![]; + for (i, account_update) in account_update_data.iter_mut().enumerate() { let prefix = format!("failed to parse `set_account` map #{}", i + 1); - let account = SurfpoolAccountUpdate::from_map(account_update, auth_ctx) - .map_err(|e| diagnosed_error!("{prefix}: {e}"))?; + let account = + SurfpoolAccountUpdate::from_map(account_update, auth_ctx, &prefetched_data) + .map_err(|e| diagnosed_error!("{prefix}: {e}"))?; account_updates.push(account); } @@ -251,3 +652,256 @@ impl SurfpoolAccountUpdate { Ok(()) } } + +#[cfg(test)] +mod tests { + use solana_pubkey::pubkey; + + #[allow(unused_imports)] + use super::*; + + #[test] + fn test_parse_num() -> Result<(), Diagnostic> { + assert_eq!(parse_num!(u8, "255"), vec![255]); + assert_eq!(parse_num!(i8, "-128"), vec![128]); + assert_eq!(parse_num!(u16, "65535"), vec![255, 255]); + assert_eq!(parse_num!(i16, "-32768"), vec![0, 128]); + assert_eq!(parse_num!(u32, "4294967295"), vec![255, 255, 255, 255]); + assert_eq!(parse_num!(i32, "-2147483648"), vec![0, 0, 0, 128]); + assert_eq!( + parse_num!(u64, "18446744073709551615"), + vec![255, 255, 255, 255, 255, 255, 255, 255] + ); + assert_eq!(parse_num!(i64, "-9223372036854775808"), vec![0, 0, 0, 0, 0, 0, 0, 128]); + assert_eq!(parse_num!(u128, "340282366920938463463374607431768211455"), vec![255; 16]); + assert_eq!(parse_num!(i128, "0"), vec![0; 16]); + assert_eq!(parse_num!(f32, "3.14"), 3.14f32.to_le_bytes().to_vec()); + assert_eq!(parse_num!(f64, "3.14"), 3.14f64.to_le_bytes().to_vec()); + Ok(()) + } + + #[test] + fn test_patch_raw_account_data_from_map() -> Result<(), Diagnostic> { + let mut map = IndexMap::new(); + map.insert("offset".to_string(), Value::Integer(0)); + map.insert("length".to_string(), Value::Integer(4)); + map.insert("value".to_string(), Value::String("255".to_string())); + map.insert("type".to_string(), Value::String("u32".to_string())); + + let patch_data = PatchRawAccountData::from_map(&map)?; + assert_eq!(patch_data.offset, 0); + assert_eq!(patch_data.length, 4); + assert_eq!(patch_data.value, Value::String("255".to_string())); + assert_eq!(patch_data.r#type, "u32"); + Ok(()) + } + + #[test] + fn test_surfpool_account_update_from_map_with_patch_application() -> Result<(), Diagnostic> { + let mut map = IndexMap::new(); + const PUBKEY: Pubkey = pubkey!("11111111111111111111111111111111"); + map.insert("public_key".to_string(), SvmValue::pubkey(PUBKEY.to_bytes().to_vec())); + + let patch = Value::Array(Box::new(vec![Value::Object({ + let mut m = IndexMap::new(); + m.insert("offset".to_string(), Value::Integer(0)); + m.insert("length".to_string(), Value::Integer(4)); + m.insert("value".to_string(), Value::String("1".to_string())); + m.insert("type".to_string(), Value::String("u32".to_string())); + m + })])); + + map.insert("patch_raw".to_string(), patch); + + let auth_ctx = AuthorizationContext::empty(); + let mut prefetched_data = HashMap::new(); + + prefetched_data.insert(PUBKEY.to_string(), Some(vec![0; 8])); + let account_update = + SurfpoolAccountUpdate::from_map(&mut map, &auth_ctx, &prefetched_data)?; + assert_eq!(account_update.public_key.to_string(), PUBKEY.to_string()); + assert_eq!(account_update.data, Some("0100000000000000".to_string())); + Ok(()) + } + + #[test] + fn test_apply_multiple_patches_raw() -> Result<(), Diagnostic> { + let patch = Value::array(vec![ + Value::object({ + let mut m = IndexMap::new(); + m.insert("offset".to_string(), Value::Integer(0)); + m.insert("length".to_string(), Value::Integer(4)); + m.insert("value".to_string(), Value::String("100".to_string())); + m.insert("type".to_string(), Value::String("u32".to_string())); + m + }), + Value::object({ + let mut m = IndexMap::new(); + m.insert("offset".to_string(), Value::Integer(4)); + m.insert("length".to_string(), Value::Integer(4)); + m.insert("value".to_string(), Value::String("200".to_string())); + m.insert("type".to_string(), Value::String("u32".to_string())); + m + }), + Value::object({ + let mut m = IndexMap::new(); + m.insert("offset".to_string(), Value::Integer(8)); + m.insert("length".to_string(), Value::Integer(1)); + m.insert("value".to_string(), Value::String("true".to_string())); + m.insert("type".to_string(), Value::String("boolean".to_string())); + m + }), + ]); + + let data = Some(vec![0u8; 16]); + let prefetched = HashMap::new(); + let pubkey = pubkey!("11111111111111111111111111111111"); + + let result = apply_patches_raw(data, &patch, &prefetched, &pubkey)?.unwrap(); + + assert_eq!(&result[0..4], &100u32.to_le_bytes()); + assert_eq!(&result[4..8], &200u32.to_le_bytes()); + assert_eq!(result[8], 1u8); + assert_eq!(&result[9..16], &[0u8; 7]); + Ok(()) + } + + #[test] + fn test_apply_patches_raw_uses_provided_data_over_prefetched() -> Result<(), Diagnostic> { + let patch = Value::array(vec![Value::object({ + let mut m = IndexMap::new(); + m.insert("offset".to_string(), Value::Integer(0)); + m.insert("length".to_string(), Value::Integer(1)); + m.insert("value".to_string(), Value::String("42".to_string())); + m.insert("type".to_string(), Value::String("u8".to_string())); + m + })]); + + let pubkey = pubkey!("11111111111111111111111111111111"); + + let provided_data = Some(vec![0xFF; 4]); + let mut prefetched = HashMap::new(); + prefetched.insert(pubkey.to_string(), Some(vec![0xAA; 4])); + + let result = apply_patches_raw(provided_data, &patch, &prefetched, &pubkey)?.unwrap(); + assert_eq!(result[0], 42); + assert_eq!(&result[1..4], &[0xFF; 3]); + Ok(()) + } + + #[test] + fn test_apply_patches_raw_falls_back_to_prefetched() -> Result<(), Diagnostic> { + let patch = Value::array(vec![Value::object({ + let mut m = IndexMap::new(); + m.insert("offset".to_string(), Value::Integer(0)); + m.insert("length".to_string(), Value::Integer(1)); + m.insert("value".to_string(), Value::String("42".to_string())); + m.insert("type".to_string(), Value::String("u8".to_string())); + m + })]); + + let pubkey = pubkey!("11111111111111111111111111111111"); + + let mut prefetched = HashMap::new(); + prefetched.insert(pubkey.to_string(), Some(vec![0xBB; 4])); + + let result = apply_patches_raw(None, &patch, &prefetched, &pubkey)?.unwrap(); + assert_eq!(result[0], 42); + assert_eq!(&result[1..4], &[0xBB; 3]); + Ok(()) + } + + #[test] + fn test_surfpool_account_update_from_map_with_patch_idl_application() -> Result<(), Diagnostic> + { + let fixtures_dir = + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("src/commands/setup_surfnet/fixtures"); + let idl_path = fixtures_dir.join("idl.json"); + let mut map = IndexMap::new(); + const PUBKEY: Pubkey = pubkey!("11111111111111111111111111111111"); + const ACC: Pubkey = pubkey!("EnZsyjncjMShCUEPhz4rKnjKQ6gbPF4dkbUANZ2ngPo4"); + map.insert("public_key".to_string(), SvmValue::pubkey(ACC.to_bytes().to_vec())); + + let patch_idl = Value::Array(Box::new(vec![ + (Value::Object({ + let mut m = IndexMap::new(); + m.insert( + "program_idl".to_string(), + Value::String(idl_path.to_string_lossy().to_string()), + ); + m.insert("account_name".to_string(), Value::String("PositionV2".to_string())); + m.insert("name".to_string(), Value::String("lb_pair".to_string())); + m.insert( + "value".to_string(), + Value::Addon(txtx_addon_kit::types::types::AddonData { + bytes: PUBKEY.to_bytes().to_vec(), + id: txtx_addon_network_svm_types::SVM_PUBKEY.to_string(), + }), + ); + m + })), + ])); + + map.insert("patch_idl".to_string(), patch_idl); + + let auth_ctx = AuthorizationContext::empty(); + let mut prefetched_data = HashMap::new(); + + let acc_data_path = fixtures_dir.join("position_v2_data"); + let acc_data = std::fs::read_to_string(&acc_data_path) + .map_err(|e| diagnosed_error!("failed to read account data fixture: {e}"))?; + + let acc_data = hex::decode(acc_data.trim()) + .map_err(|e| diagnosed_error!("failed to decode account data fixture as hex: {e}"))?; + + prefetched_data.insert(ACC.to_string(), Some(acc_data)); + let account_update = + SurfpoolAccountUpdate::from_map(&mut map, &auth_ctx, &prefetched_data)?; + assert_eq!(account_update.public_key.to_string(), ACC.to_string()); + assert_eq!( + hex::decode(account_update.data.unwrap().as_bytes()).unwrap()[8..32 + 8], + PUBKEY.to_bytes() + ); + Ok(()) + } + + #[test] + fn test_apply_patches_raw_skips_nonexistent_account() -> Result<(), Diagnostic> { + let patch = Value::array(vec![Value::object({ + let mut m = IndexMap::new(); + m.insert("offset".to_string(), Value::Integer(0)); + m.insert("length".to_string(), Value::Integer(1)); + m.insert("value".to_string(), Value::String("42".to_string())); + m.insert("type".to_string(), Value::String("u8".to_string())); + m + })]); + + let pubkey = pubkey!("11111111111111111111111111111111"); + + let mut prefetched = HashMap::new(); + prefetched.insert(pubkey.to_string(), None); + + let result = apply_patches_raw(None, &patch, &prefetched, &pubkey)?; + assert_eq!(result, None); + Ok(()) + } + + #[test] + fn test_apply_patches_raw_errors_when_not_prefetched() { + let patch = Value::array(vec![Value::object({ + let mut m = IndexMap::new(); + m.insert("offset".to_string(), Value::Integer(0)); + m.insert("length".to_string(), Value::Integer(1)); + m.insert("value".to_string(), Value::String("42".to_string())); + m.insert("type".to_string(), Value::String("u8".to_string())); + m + })]); + + let pubkey = pubkey!("11111111111111111111111111111111"); + + let prefetched = HashMap::new(); + + let result = apply_patches_raw(None, &patch, &prefetched, &pubkey); + assert!(result.is_err()); + } +} diff --git a/addons/svm/types/src/lib.rs b/addons/svm/types/src/lib.rs index 09b3f6452..0f372740d 100644 --- a/addons/svm/types/src/lib.rs +++ b/addons/svm/types/src/lib.rs @@ -765,6 +765,60 @@ lazy_static! { } }; + pub static ref SET_ACCOUNT_PATCH_RAW: Type = define_strict_map_type! { + offset: { + documentation: "The offset at which the patch should be applied.", + typing: Type::integer(), + optional: false, + tainting: true + }, + length: { + documentation: "The length of the patch.", + typing: Type::integer(), + optional: false, + tainting: true + }, + value: { + documentation: "The value to write at the patch offset, interpreted according to `type`.", + typing: Type::string(), + optional: false, + tainting: true + }, + type: { + documentation: "The type of the field being patched. This is used to determine how to apply the patch. Valid values are 'u8', 'u16', 'u32', 'u64', 'u128', 'i8', 'i16', 'i32', 'i64', 'i128', 'f32', 'f64', 'pubkey', 'string', 'boolean', or 'buffer'.", + typing: Type::string(), + optional: false, + tainting: true + } + }; + + pub static ref SET_ACCOUNT_PATCH_IDL: Type = define_strict_map_type! { + program_idl: { + documentation: "The IDL of the program being invoked.", + typing: Type::string(), + optional: false, + tainting: true + }, + account_name: { + documentation: "The name of the account in the IDL.", + typing: Type::string(), + optional: false, + tainting: true + }, + value: { + documentation: "The value to write to the specified field, encoded according to the IDL type.", + typing: Type::string(), + optional: false, + tainting: true + }, + name: { + documentation: "The name of the field being patched. This is used to determine which field in the account data to update.", + typing: Type::string(), + optional: false, + tainting: true + } + }; + pub static ref SET_ACCOUNT_MAP: Type = define_strict_map_type! { public_key: { documentation: "The public key of the account to set.", @@ -807,6 +861,18 @@ lazy_static! { typing: Type::string(), optional: true, tainting: true + }, + patch_raw: { + documentation: "A raw patch to apply to the account's existing data. Each block specifies an offset, length, value, and type to determine which bytes of the account data to replace.", + typing: SET_ACCOUNT_PATCH_RAW.clone(), + optional: true, + tainting: true + }, + patch_idl: { + documentation: "A patch to apply to the account's existing data, where the field to update is determined by the account's IDL. If provided, the program_idl and account_name will be used to determine which field in the account data to update with the provided bytes.", + typing: SET_ACCOUNT_PATCH_IDL.clone(), + optional: true, + tainting: true } };